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_CP,
00070 LBP_QU,
00071 LBP_GL,
00072 LBP_NS,
00073 LBP_EX,
00074 LBP_SY,
00075 LBP_IS,
00076 LBP_PR,
00077 LBP_PO,
00078 LBP_NU,
00079 LBP_AL,
00080 LBP_ID,
00081 LBP_IN,
00082 LBP_HY,
00083 LBP_BA,
00084 LBP_BB,
00085 LBP_B2,
00086 LBP_ZW,
00087 LBP_CM,
00088 LBP_WJ,
00089 LBP_H2,
00090 LBP_H3,
00091 LBP_JL,
00092 LBP_JV,
00093 LBP_JT,
00095
00096 LBP_AI,
00097 LBP_BK,
00098 LBP_CB,
00099 LBP_CR,
00100 LBP_LF,
00101 LBP_NL,
00102 LBP_SA,
00103 LBP_SG,
00104 LBP_SP,
00105 LBP_XX
00106 };
00107
00112 struct LineBreakProperties
00113 {
00114 utf32_t start;
00115 utf32_t end;
00116 enum LineBreakClass prop;
00117 };
00118
00123 struct LineBreakPropertiesLang
00124 {
00125 const char *lang;
00126 size_t namelen;
00127 struct LineBreakProperties *lbp;
00128 };
00129
00134 typedef utf32_t (*get_next_char_t)(const void *, size_t, size_t *);
00135
00136
00137 extern struct LineBreakProperties lb_prop_default[];
00138 extern struct LineBreakPropertiesLang lb_prop_lang_map[];
00139
00140
00141 utf32_t lb_get_next_char_utf8(const utf8_t *s, size_t len, size_t *ip);
00142 utf32_t lb_get_next_char_utf16(const utf16_t *s, size_t len, size_t *ip);
00143 utf32_t lb_get_next_char_utf32(const utf32_t *s, size_t len, size_t *ip);
00144 void set_linebreaks(
00145 const void *s,
00146 size_t len,
00147 const char *lang,
00148 char *brks,
00149 get_next_char_t get_next_char);