Home | History | Annotate | Download | only in contrib
      1 #include "harfbuzz-external.h"
      2 
      3 #include <glib.h>
      4 
      5 static int
      6 hb_category_for_char(HB_UChar32 ch) {
      7   switch (g_unichar_type(ch)) {
      8     case G_UNICODE_CONTROL:
      9       return HB_Other_Control;
     10     case G_UNICODE_FORMAT:
     11       return HB_Other_Format;
     12     case G_UNICODE_UNASSIGNED:
     13       return HB_Other_NotAssigned;
     14     case G_UNICODE_PRIVATE_USE:
     15       return HB_Other_PrivateUse;
     16     case G_UNICODE_SURROGATE:
     17       return HB_Other_Surrogate;
     18     case G_UNICODE_LOWERCASE_LETTER:
     19       return HB_Letter_Lowercase;
     20     case G_UNICODE_MODIFIER_LETTER:
     21       return HB_Letter_Modifier;
     22     case G_UNICODE_OTHER_LETTER:
     23       return HB_Letter_Other;
     24     case G_UNICODE_TITLECASE_LETTER:
     25       return HB_Letter_Titlecase;
     26     case G_UNICODE_UPPERCASE_LETTER:
     27       return HB_Letter_Uppercase;
     28     case G_UNICODE_COMBINING_MARK:
     29       return HB_Mark_SpacingCombining;
     30     case G_UNICODE_ENCLOSING_MARK:
     31       return HB_Mark_Enclosing;
     32     case G_UNICODE_NON_SPACING_MARK:
     33       return HB_Mark_NonSpacing;
     34     case G_UNICODE_DECIMAL_NUMBER:
     35       return HB_Number_DecimalDigit;
     36     case G_UNICODE_LETTER_NUMBER:
     37       return HB_Number_Letter;
     38     case G_UNICODE_OTHER_NUMBER:
     39       return HB_Number_Other;
     40     case G_UNICODE_CONNECT_PUNCTUATION:
     41       return HB_Punctuation_Connector;
     42     case G_UNICODE_DASH_PUNCTUATION:
     43       return HB_Punctuation_Dash;
     44     case G_UNICODE_CLOSE_PUNCTUATION:
     45       return HB_Punctuation_Close;
     46     case G_UNICODE_FINAL_PUNCTUATION:
     47       return HB_Punctuation_FinalQuote;
     48     case G_UNICODE_INITIAL_PUNCTUATION:
     49       return HB_Punctuation_InitialQuote;
     50     case G_UNICODE_OTHER_PUNCTUATION:
     51       return HB_Punctuation_Other;
     52     case G_UNICODE_OPEN_PUNCTUATION:
     53       return HB_Punctuation_Open;
     54     case G_UNICODE_CURRENCY_SYMBOL:
     55       return HB_Symbol_Currency;
     56     case G_UNICODE_MODIFIER_SYMBOL:
     57       return HB_Symbol_Modifier;
     58     case G_UNICODE_MATH_SYMBOL:
     59       return HB_Symbol_Math;
     60     case G_UNICODE_OTHER_SYMBOL:
     61       return HB_Symbol_Other;
     62     case G_UNICODE_LINE_SEPARATOR:
     63       return HB_Separator_Line;
     64     case G_UNICODE_PARAGRAPH_SEPARATOR:
     65       return HB_Separator_Paragraph;
     66     case G_UNICODE_SPACE_SEPARATOR:
     67       return HB_Separator_Space;
     68     default:
     69       return HB_Symbol_Other;
     70   }
     71 }
     72 
     73 HB_LineBreakClass
     74 HB_GetLineBreakClass(HB_UChar32 ch) {
     75   switch (g_unichar_break_type(ch)) {
     76     case G_UNICODE_BREAK_MANDATORY:
     77       return HB_LineBreak_BK;
     78     case G_UNICODE_BREAK_CARRIAGE_RETURN:
     79       return HB_LineBreak_CR;
     80     case G_UNICODE_BREAK_LINE_FEED:
     81       return HB_LineBreak_LF;
     82     case G_UNICODE_BREAK_COMBINING_MARK:
     83       return HB_LineBreak_CM;
     84     case G_UNICODE_BREAK_SURROGATE:
     85       return HB_LineBreak_SG;
     86     case G_UNICODE_BREAK_ZERO_WIDTH_SPACE:
     87       return HB_LineBreak_ZW;
     88     case G_UNICODE_BREAK_INSEPARABLE:
     89       return HB_LineBreak_IN;
     90     case G_UNICODE_BREAK_NON_BREAKING_GLUE:
     91       return HB_LineBreak_GL;
     92     case G_UNICODE_BREAK_CONTINGENT:
     93       return HB_LineBreak_AL;
     94     case G_UNICODE_BREAK_SPACE:
     95       return HB_LineBreak_SP;
     96     case G_UNICODE_BREAK_AFTER:
     97       return HB_LineBreak_BA;
     98     case G_UNICODE_BREAK_BEFORE:
     99       return HB_LineBreak_BB;
    100     case G_UNICODE_BREAK_BEFORE_AND_AFTER:
    101       return HB_LineBreak_B2;
    102     case G_UNICODE_BREAK_HYPHEN:
    103       return HB_LineBreak_HY;
    104     case G_UNICODE_BREAK_NON_STARTER:
    105       return HB_LineBreak_NS;
    106     case G_UNICODE_BREAK_OPEN_PUNCTUATION:
    107       return HB_LineBreak_OP;
    108     case G_UNICODE_BREAK_CLOSE_PUNCTUATION:
    109       return HB_LineBreak_CL;
    110     case G_UNICODE_BREAK_QUOTATION:
    111       return HB_LineBreak_QU;
    112     case G_UNICODE_BREAK_EXCLAMATION:
    113       return HB_LineBreak_EX;
    114     case G_UNICODE_BREAK_IDEOGRAPHIC:
    115       return HB_LineBreak_ID;
    116     case G_UNICODE_BREAK_NUMERIC:
    117       return HB_LineBreak_NU;
    118     case G_UNICODE_BREAK_INFIX_SEPARATOR:
    119       return HB_LineBreak_IS;
    120     case G_UNICODE_BREAK_SYMBOL:
    121       return HB_LineBreak_SY;
    122     case G_UNICODE_BREAK_ALPHABETIC:
    123       return HB_LineBreak_AL;
    124     case G_UNICODE_BREAK_PREFIX:
    125       return HB_LineBreak_PR;
    126     case G_UNICODE_BREAK_POSTFIX:
    127       return HB_LineBreak_PO;
    128     case G_UNICODE_BREAK_COMPLEX_CONTEXT:
    129       return HB_LineBreak_SA;
    130     case G_UNICODE_BREAK_AMBIGUOUS:
    131       return HB_LineBreak_AL;
    132     case G_UNICODE_BREAK_UNKNOWN:
    133       return HB_LineBreak_AL;
    134     case G_UNICODE_BREAK_NEXT_LINE:
    135       return HB_LineBreak_AL;
    136     case G_UNICODE_BREAK_WORD_JOINER:
    137       return HB_LineBreak_WJ;
    138     case G_UNICODE_BREAK_HANGUL_L_JAMO:
    139       return HB_LineBreak_JL;
    140     case G_UNICODE_BREAK_HANGUL_V_JAMO:
    141       return HB_LineBreak_JV;
    142     case G_UNICODE_BREAK_HANGUL_T_JAMO:
    143       return HB_LineBreak_JT;
    144     case G_UNICODE_BREAK_HANGUL_LV_SYLLABLE:
    145       return HB_LineBreak_H2;
    146     case G_UNICODE_BREAK_HANGUL_LVT_SYLLABLE:
    147       return HB_LineBreak_H3;
    148     default:
    149       return HB_LineBreak_AL;
    150   }
    151 }
    152 
    153 int
    154 HB_GetUnicodeCharCombiningClass(HB_UChar32 ch) {
    155   return g_unichar_combining_class(ch);
    156 }
    157 
    158 void
    159 HB_GetUnicodeCharProperties(HB_UChar32 ch,
    160                             HB_CharCategory *category,
    161                             int *combiningClass) {
    162   *category = hb_category_for_char(ch);
    163   *combiningClass = g_unichar_combining_class(ch);
    164 }
    165 
    166 HB_CharCategory
    167 HB_GetUnicodeCharCategory(HB_UChar32 ch) {
    168   return hb_category_for_char(ch);
    169 }
    170