OSDN Git Service

AI003:AI_Think_SlideLookUpWordByHistoryを修正中。
[chnosproject/CHNOSProject.git] / CHNOSProject / chn / chnlib02.c
index 459ed8d..a175006 100644 (file)
@@ -95,58 +95,34 @@ int CHNLIB_UIPArray_GetSeparatedStringByUIPArray(CHNLIB_UIPArray **separated, co
     return 0;\r
 }\r
 \r
-int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const CHNLIB_String *s){\r
+int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const CHNLIB_String *s)\r
+{\r
     //文字列sを、UTF-8の一文字ごとに分割し、その文字のUnicodeをdata32、その一文字に該当するStringをpointerに格納し、separatedに追加する形で返す。\r
     //不完全なUTF-8文字列は無視される。\r
-    const char *refstr;\r
-    int i, i_max, type;\r
-    int phase, start;\r
-    uint unicode;\r
+    //[UTF-8]\r
+    const char *p, *q, *p_base;\r
+    uint u;\r
     \r
     if(separated == NULL || CHNLIB_StructureHeader_GetTypeID(s) != CHNLIB_STRUCT_ID_String){\r
         return 1;\r
     }\r
     \r
-    refstr = CHNLIB_String_GetReferencePointerOfCString(s);\r
-    i_max = CHNLIB_String_GetLength(s);\r
+    p_base = CHNLIB_String_GetReferencePointerOfCString(s);;\r
+    p = p_base;\r
     \r
-    phase = 0;\r
-    unicode = 0;\r
-    for(i = 0; i < i_max; i++){\r
-        type = CHNLIB_UTF8_GetCharacterType(refstr[i]);\r
-        switch (type) {\r
-            case 1:\r
-                CHNLIB_UIPArray_AppendLast(separated, refstr[i], CHNLIB_String_ExtractByLength(s, i, 1));\r
-                phase = 0;\r
-                unicode = 0;\r
-                break;\r
-                \r
-            case 0:\r
-                if(phase > 0){\r
-                    unicode <<= 6;\r
-                    unicode |= (refstr[i] & 0x3f);\r
-                    phase--;\r
-                    if(phase == 0){\r
-                        //一文字完成\r
-                        CHNLIB_UIPArray_AppendLast(separated, unicode, CHNLIB_String_ExtractByLength(s, start, i - start + 1));\r
-                    }\r
-                }\r
-                break;\r
-                \r
-            case 2:\r
-            case 3:\r
-            case 4:\r
-                start = i;\r
-                unicode = (refstr[i] << (type + 1)) >> (type + 1);\r
-                phase = type - 1;\r
-                break;\r
+    for(;;){\r
+        u = CHNLIB_UTF8_GetNextUnicodeOfCharacter(p, &q);\r
+        if(u == 0){\r
+            //終端文字\r
+            break;\r
         }\r
+        CHNLIB_UIPArray_AppendLast(separated, u, CHNLIB_String_ExtractByLength(s, (int)(p - p_base), (int)(q - p)));\r
+        p = q;\r
     }\r
     \r
     return 0;\r
 }\r
 \r
-\r
 CHNLIB_String *CHNLIB_ReadLine(FILE *fp)\r
 {\r
     char s[CHNLIB_MAX_STRING_LENGTH];\r