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