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);