Obsah / Utility / TEXT / TextFindCharLast, TextFindCharRev
Zdrojový kód: INCLUDE\UTIL\TEXT.INC, UTIL\TEXT.ASM
TextFindCharLast, TextFindCharRev - Vyhledání posledního/předešlého znaku v textu
Funkce TextFindCharLast vyhledá v textu poslední výskyt daného znaku v kódu UNICODE (1 dvojslovo). Funkce TextFindCharRev vyhledá předešlý výskyt znaku od dané pozice v textu (včetně).
|
Na vstupu funkce obsahuje registr EAX hodnotu hledaného znaku v kódu UNICODE. Registr EBX obsahuje ukazatel na textovou proměnnou s textem k prohledání. Registr EDX obsahuje počáteční offset v textu, od kterého bude znak vyhledáván. V případě funkce TextFindCharLast je obsah registru EDX nejdříve nastaven na dostatečně vysoké číslo TEXTBIGPOS (hodnota 80000000h) představující ukazatel nastavený za konec textu.
Je-li znak v textu nalezen, je navrácena v registru EDX pozice (offset) znaku v textu a příznak CF je vynulován. Není-li znak nalezen, je v registru EDX navrácena hodnota -1 a je navrácen příznak chyby CY.
|
Znak bude v textu vyhledáván jako řetězec v kódu UTF-8. Pro UTF-8 platí, že znaky s kódem 0 až 7Fh (tj. 7 bitů) jsou v textu uloženy jako 1 bajt. Další bajty v kódu mají vždy hodnotu 80h a více, takže znak může být v textu vyhledán přímo pomocí funkce TextFindByteRev.
|
Znaky v rozsahu 80h až 7FFh (tj. 15 bitů) jsou v kódu UTF-8 kódovány pomocí 2 bajtů. První bajt obsahuje vyšších 6 bitů s nastavenými bity 6 a 7, druhý bajt obsahuje nižších 7 bitů s nastaveným bitem 7. Znak je vyhledán jako slovo (2 bajty) pomocí funkce TextFindWordRev.
|
Znaky v rozsahu 800h a výše budou vyhledávány jako vícebajtové textové řetězce. V zásobníku se vytvoří místo pro pomocnou textovou proměnnou, pro buffer znaku uloženého jako text v kódu UTF-8 a pro záhlaví textového řetězce. Znak je dekódován do bufferu do kódu UTF-8 pomocí funkce CharUTF8Write a do pomocné textové proměnné je uložena délka hledaného řetězce v kódu UTF-8.
|
Do pomocné proměnné v zásobníku je uložen ukazatel na textová data a textový řetězec je vyhledán v textu pomocí funkce TextFindRev. U hledaného řetězce se ignoruje položka referenčního čítače, která proto není inicializovaná. Po ukončení hledání se obnoví ukazatel zásobníku a registry ze zásobníku.
Obsah / Utility / TEXT / TextFindCharLast, TextFindCharRev