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_HL,
00081 LBP_ID,
00082 LBP_IN,
00083 LBP_HY,
00084 LBP_BA,
00085 LBP_BB,
00086 LBP_B2,
00087 LBP_ZW,
00088 LBP_CM,
00089 LBP_WJ,
00090 LBP_H2,
00091 LBP_H3,
00092 LBP_JL,
00093 LBP_JV,
00094 LBP_JT,
00095 LBP_RI,
00097
00098 LBP_AI,
00099 LBP_BK,
00100 LBP_CB,
00101 LBP_CJ,
00102 LBP_CR,
00103 LBP_LF,
00104 LBP_NL,
00105 LBP_SA,
00106 LBP_SG,
00107 LBP_SP,
00108 LBP_XX
00109 };
00110
00115 struct LineBreakProperties
00116 {
00117 utf32_t start;
00118 utf32_t end;
00119 enum LineBreakClass prop;
00120 };
00121
00126 struct LineBreakPropertiesLang
00127 {
00128 const char *lang;
00129 size_t namelen;
00130 struct LineBreakProperties *lbp;
00131 };
00132
00137 typedef utf32_t (*get_next_char_t)(const void *, size_t, size_t *);
00138
00139
00140 extern struct LineBreakProperties lb_prop_default[];
00141 extern struct LineBreakPropertiesLang lb_prop_lang_map[];
00142
00143
00144 utf32_t lb_get_next_char_utf8(const utf8_t *s, size_t len, size_t *ip);
00145 utf32_t lb_get_next_char_utf16(const utf16_t *s, size_t len, size_t *ip);
00146 utf32_t lb_get_next_char_utf32(const utf32_t *s, size_t len, size_t *ip);
00147 void set_linebreaks(
00148 const void *s,
00149 size_t len,
00150 const char *lang,
00151 char *brks,
00152 get_next_char_t get_next_char);