FMX: How to deal with strings containing right to left languages?


I have a unicode string that could contain characters from a right to left language such as Arabic or Hebrew, but could also contain text from left to right languages. I need to be able to know at which end is the start and in which direction to step when stepping through the string from beginning to end depending on which language is in the string. Is there a standard way of dealing with this?
TMemo appears to handle this in the way I want. I paste some hebrew text into a TMemo and the direction that the caret moves is the reverse of the arrow keys I use. I can even have a mixture of english and hebrew text in the same memo and the direction the caret moves will depend on whether it’s within an english or hebrew section of text. I’d like to replicate this behaviour. I attempted to look into the Delphi code including FMX.Memo and FMX.Text, but couldn’t find the code responsible. I have a feeling that the code for handling this may be hidden in a dll. I could write code myself that contains a list of all possible right to left unicode characters to test if a character is RTL or LTR, but I’d like to make use of code that already exists if possible. Can anyone point me in the right direction?
I do know about the unicode RLM mark, which is an invisible character used to mark a section of RTL text, but I don’t think this is being used by TMemo. The hebrew text I’m pasting into the TMemo doesn’t contain this or any other invisible character.

Comments are closed.