From 8e51b75b976feab3ef4579d5f6075083e1bd5dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?m=C3=B6si?= Date: Wed, 15 Apr 2009 14:23:32 +0000 Subject: Compose-Konvertierung im SMP-Bereich (Unicode-Codepoints > UFFFF) korrigiert. git-svn-id: https://svn.neo-layout.org@1791 b9310e46-f624-0410-8ea1-cfbb3a30dc96 --- windows/neo-vars/src/source/makecompose.ahk | 32 +++++++++++++++-------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'windows/neo-vars/src/source/makecompose.ahk') diff --git a/windows/neo-vars/src/source/makecompose.ahk b/windows/neo-vars/src/source/makecompose.ahk index e8e09b2..a67b3f8 100644 --- a/windows/neo-vars/src/source/makecompose.ahk +++ b/windows/neo-vars/src/source/makecompose.ahk @@ -1817,25 +1817,26 @@ SetFormat, Integer, hex result := "" loop { achar := asc(SubStr(str,1,1)) - str := SubStr(str,2) - if (achar < 0x80) + if (achar < 0x80) { + str := SubStr(str,2) result .= "U" . SubStr("000000" . SubStr(achar,3),-5) - else if (achar < 0xC0) { + } else if (achar < 0xC0) { + str := SubStr(str,2) ; error } else if (achar < 0xE0) { - achar2 := asc(Substr(str,1,1)) - str := SubStr(str,2) + achar2 := asc(Substr(str,2,1)) + str := SubStr(str,3) if ((achar2 < 0x80) or (achar2 > 0xBF)) { ; error } else { result .= "U" . SubStr("000000" . SubStr((((achar & 0x1F) << 6) + (achar2 & 0x3F)),3),-5) } - } else if (achar < 0xF8) { - achar2 := asc(SubStr(str,1,1)) - achar3 := asc(SubStr(str,2,1)) - str := SubStr(str,3) + } else if (achar < 0xF0) { + achar2 := asc(SubStr(str,2,1)) + achar3 := asc(SubStr(str,3,1)) + str := SubStr(str,4) ; MsgBox % "chars: " . achar . ", " . achar2 . ", " . achar3 . ", str: " . str - if ((achar2 < 0x80) or (achar2 > 0xBF) + if ( (achar2 < 0x80) or (achar2 > 0xBF) or (achar3 < 0x80) or (achar3 > 0xBF)) { ; error } else { @@ -1843,11 +1844,11 @@ SetFormat, Integer, hex ; MsgBox % (((achar & 0x0F) << 12) + ((achar2 & 0x3F) << 6) + (achar3 & 0x3F)) result .= "U" . SubStr("000000" . SubStr((((achar & 0x0F) << 12) + ((achar2 & 0x3F) << 6) + (achar3 & 0x3F)),3),-5) } - } else if (char < 0xFC) { - achar2 := asc(SubStr(str,1,1)) - achar3 := asc(SubStr(str,2,1)) + } else if (achar < 0xF8) { + achar2 := asc(SubStr(str,2,1)) achar3 := asc(SubStr(str,3,1)) - str := SubStr(str,4) + achar4 := asc(SubStr(str,4,1)) + str := SubStr(str,5) if ( (achar2 < 0x80) or (achar2 > 0xBF) or (achar3 < 0x80) or (achar3 > 0xBF) or (achar4 < 0x80) or (achar4 > 0xBF)) { @@ -1855,7 +1856,8 @@ SetFormat, Integer, hex } else { result .= "U" . SubStr("000000" . SubStr((((achar & 0x07) << 18) + ((achar2 & 0x3F) << 12) + ((achar3 & 0x3F) << 6) + (achar4 & 0x3F)),3),-5) } - } + } else + str := SubStr(str,2) if (str == "") break } -- cgit v1.2.3