return 0;\r
}\r
\r
+int CHNLIB_UIPArray_GetSeparatedUTF8Character(CHNLIB_UIPArray **separated, const CHNLIB_String *s){\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
+ \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
+ \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, i));\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
+ }\r
+ }\r
+ \r
+ return 0;\r
+}\r
+\r
+\r
CHNLIB_String *CHNLIB_ReadLine(FILE *fp)\r
{\r
char s[CHNLIB_MAX_STRING_LENGTH];\r