00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00055 #define EOS 0xFFFF
00056
00061 enum LineBreakClass
00062 {
00063
00064 LBP_Undefined,
00066
00067 LBP_OP,
00068 LBP_CL,
00069 LBP_QU,
00070 LBP_GL,
00071 LBP_NS,
00072 LBP_EX,
00073 LBP_SY,
00074 LBP_IS,
00075 LBP_PR,
00076 LBP_PO,
00077 LBP_NU,
00078 LBP_AL,
00079 LBP_ID,
00080 LBP_IN,
00081 LBP_HY,
00082 LBP_BA,
00083 LBP_BB,
00084 LBP_B2,
00085 LBP_ZW,
00086 LBP_CM,
00087 LBP_WJ,
00088 LBP_H2,
00089 LBP_H3,
00090 LBP_JL,
00091 LBP_JV,
00092 LBP_JT,
00094
00095 LBP_AI,
00096 LBP_BK,
00097 LBP_CB,
00098 LBP_CR,
00099 LBP_LF,
00100 LBP_NL,
00101 LBP_SA,
00102 LBP_SG,
00103 LBP_SP,
00104 LBP_XX
00105 };
00106
00111 struct LineBreakProperties
00112 {
00113 utf32_t start;
00114 utf32_t end;
00115 enum LineBreakClass prop;
00116 };
00117
00122 struct LineBreakPropertiesLang
00123 {
00124 const char *lang;
00125 size_t namelen;
00126 struct LineBreakProperties *lbp;
00127 };
00128
00133 typedef utf32_t (*get_next_char_t)(const void *, size_t, size_t *);
00134
00135
00136 extern struct LineBreakProperties lb_prop_default[];
00137 extern struct LineBreakPropertiesLang lb_prop_lang_map[];
00138
00139
00140
00153 void set_linebreaks(
00154 const void *s,
00155 size_t len,
00156 const char *lang,
00157 char *brks,
00158 get_next_char_t get_next_char);
00159
00172 utf32_t get_next_char_utf8(const utf8_t *s, size_t len, size_t *ip);
00173
00186 utf32_t get_next_char_utf16(const utf16_t *s, size_t len, size_t *ip);
00187
00200 utf32_t get_next_char_utf32(const utf32_t *s, size_t len, size_t *ip);