15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/* 25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2006 George Staikos <staikos@kde.org> 35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2006 Alexey Proskuryakov <ap@nypop.com> 45f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2007 Apple Computer, Inc. All rights reserved. 55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2008 Jürg Billeter <j@bitron.ch> 65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2008 Dominik Röttsches <dominik.roettsches@access-company.com> 75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 85f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is free software; you can redistribute it and/or 95f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * modify it under the terms of the GNU Library General Public 105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * License as published by the Free Software Foundation; either 115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * version 2 of the License, or (at your option) any later version. 125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is distributed in the hope that it will be useful, 145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * but WITHOUT ANY WARRANTY; without even the implied warranty of 155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Library General Public License for more details. 175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * You should have received a copy of the GNU Library General Public License 195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * along with this library; see the file COPYING.LIB. If not, write to 205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Boston, MA 02110-1301, USA. 225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * 235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian */ 245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#ifndef UnicodeGLib_h 265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#define UnicodeGLib_h 275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "UnicodeMacrosFromICU.h" 29dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "GOwnPtr.h" 305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <glib.h> 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <pango/pango.h> 335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <stdint.h> 345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <stdlib.h> 355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <string.h> 365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiantypedef uint16_t UChar; 385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiantypedef int32_t UChar32; 395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace WTF { 415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace Unicode { 425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianenum Direction { 445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian LeftToRight, 455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RightToLeft, 465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian EuropeanNumber, 475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian EuropeanNumberSeparator, 485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian EuropeanNumberTerminator, 495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian ArabicNumber, 505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian CommonNumberSeparator, 515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian BlockSeparator, 525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian SegmentSeparator, 535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian WhiteSpaceNeutral, 545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian OtherNeutral, 555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian LeftToRightEmbedding, 565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian LeftToRightOverride, 575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RightToLeftArabic, 585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RightToLeftEmbedding, 595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian RightToLeftOverride, 605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian PopDirectionalFormat, 615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian NonSpacingMark, 625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian BoundaryNeutral 635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}; 645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianenum DecompositionType { 665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionNone, 675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionCanonical, 685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionCompat, 695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionCircle, 705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionFinal, 715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionFont, 725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionFraction, 735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionInitial, 745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionIsolated, 755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionMedial, 765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionNarrow, 775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionNoBreak, 785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionSmall, 795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionSquare, 805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionSub, 815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionSuper, 825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionVertical, 835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian DecompositionWide, 845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}; 855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianenum CharCategory { 875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian NoCategory = 0, 885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Other_NotAssigned = U_MASK(G_UNICODE_UNASSIGNED), 895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Letter_Uppercase = U_MASK(G_UNICODE_UPPERCASE_LETTER), 905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Letter_Lowercase = U_MASK(G_UNICODE_LOWERCASE_LETTER), 915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Letter_Titlecase = U_MASK(G_UNICODE_TITLECASE_LETTER), 925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Letter_Modifier = U_MASK(G_UNICODE_MODIFIER_LETTER), 935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Letter_Other = U_MASK(G_UNICODE_OTHER_LETTER), 945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Mark_NonSpacing = U_MASK(G_UNICODE_NON_SPACING_MARK), 965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Mark_Enclosing = U_MASK(G_UNICODE_ENCLOSING_MARK), 975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Mark_SpacingCombining = U_MASK(G_UNICODE_COMBINING_MARK), 985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Number_DecimalDigit = U_MASK(G_UNICODE_DECIMAL_NUMBER), 1005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Number_Letter = U_MASK(G_UNICODE_LETTER_NUMBER), 1015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Number_Other = U_MASK(G_UNICODE_OTHER_NUMBER), 1025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Separator_Space = U_MASK(G_UNICODE_SPACE_SEPARATOR), 1045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Separator_Line = U_MASK(G_UNICODE_LINE_SEPARATOR), 1055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Separator_Paragraph = U_MASK(G_UNICODE_PARAGRAPH_SEPARATOR), 1065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Other_Control = U_MASK(G_UNICODE_CONTROL), 1085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Other_Format = U_MASK(G_UNICODE_FORMAT), 1095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Other_PrivateUse = U_MASK(G_UNICODE_PRIVATE_USE), 1105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Other_Surrogate = U_MASK(G_UNICODE_SURROGATE), 1115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_Dash = U_MASK(G_UNICODE_DASH_PUNCTUATION), 1135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_Open = U_MASK(G_UNICODE_OPEN_PUNCTUATION), 1145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_Close = U_MASK(G_UNICODE_CLOSE_PUNCTUATION), 1155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_Connector = U_MASK(G_UNICODE_CONNECT_PUNCTUATION), 1165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_Other = U_MASK(G_UNICODE_OTHER_PUNCTUATION), 1175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Symbol_Math = U_MASK(G_UNICODE_MATH_SYMBOL), 1195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Symbol_Currency = U_MASK(G_UNICODE_CURRENCY_SYMBOL), 1205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Symbol_Modifier = U_MASK(G_UNICODE_MODIFIER_SYMBOL), 1215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Symbol_Other = U_MASK(G_UNICODE_OTHER_SYMBOL), 1225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_InitialQuote = U_MASK(G_UNICODE_INITIAL_PUNCTUATION), 1245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian Punctuation_FinalQuote = U_MASK(G_UNICODE_FINAL_PUNCTUATION) 1255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}; 1265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1275f1ab04193ad0130ca8204aadaceae083aca9881Feng QianUChar32 foldCase(UChar32); 1285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianint foldCase(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error); 1305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianint toLower(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error); 1325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline UChar32 toLower(UChar32 c) 1345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_tolower(c); 1365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline UChar32 toUpper(UChar32 c) 1395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_toupper(c); 1415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianint toUpper(UChar* result, int resultLength, const UChar* src, int srcLength, bool* error); 1445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline UChar32 toTitleCase(UChar32 c) 1465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_totitle(c); 1485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isArabicChar(UChar32 c) 1515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return c >= 0x0600 && c <= 0x06FF; 1535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockinline bool isAlphanumeric(UChar32 c) 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return g_unichar_isalnum(c); 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isFormatChar(UChar32 c) 1615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_type(c) == G_UNICODE_FORMAT; 1635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isSeparatorSpace(UChar32 c) 1665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_type(c) == G_UNICODE_SPACE_SEPARATOR; 1685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isPrintableChar(UChar32 c) 1715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_isprint(c); 1735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isDigit(UChar32 c) 1765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_isdigit(c); 1785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isPunct(UChar32 c) 1815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_ispunct(c); 1835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool hasLineBreakingPropertyComplexContext(UChar32 c) 1865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // FIXME 1885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return false; 1895f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1905f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool hasLineBreakingPropertyComplexContextOrIdeographic(UChar32 c) 1925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // FIXME 1945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return false; 1955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 1965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1975f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline UChar32 mirroredChar(UChar32 c) 1985f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 1995f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian gunichar mirror = 0; 2005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian g_unichar_get_mirror_char(c, &mirror); 2015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return mirror; 2025f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline CharCategory category(UChar32 c) 2055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2065f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (c > 0xffff) 2075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return NoCategory; 2085f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2095f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return (CharCategory) U_MASK(g_unichar_type(c)); 2105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2125f1ab04193ad0130ca8204aadaceae083aca9881Feng QianDirection direction(UChar32); 2135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline bool isLower(UChar32 c) 2155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_islower(c); 2175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline int digitValue(UChar32 c) 2205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return g_unichar_digit_value(c); 2225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline uint8_t combiningClass(UChar32 c) 2255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // FIXME 2275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // return g_unichar_combining_class(c); 2285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return 0; 2295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianinline DecompositionType decompositionType(UChar32 c) 2325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{ 2335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // FIXME 2345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return DecompositionNone; 2355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianint umemcasecmp(const UChar*, const UChar*, int len); 2385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian} 2415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 2425f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif 2435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 244