sombok  2.4.0
sombok.h
Go to the documentation of this file.
1 /*
2  * sombok.h - common definitions for Sombok library
3  *
4  * Copyright (C) 2009-2012 by Hatuka*nezumi - IKEDA Soji.
5  *
6  * This file is part of the Sombok Package. This program is free
7  * software; you can redistribute it and/or modify it under the terms of
8  * either the GNU General Public License or the Artistic License, as
9  * specified in the README file.
10  *
11  */
12 
13 #ifndef _SOMBOK_H_
14 
15 #ifdef HAVE_CONFIG_H
16 # include "config.h"
17 #endif
18 #include <errno.h>
19 #include <stddef.h>
20 #include <stdlib.h>
21 #include <string.h>
22 #ifdef HAVE_STRINGS_H
23 # include <strings.h>
24 #endif /* HAVE_STRINGS_H */
25 
26 #define SOMBOK_VERSION "2.4.0"
27 
28 #define SOMBOK_UNICHAR_T_IS_WCHAR_T
29 #define SOMBOK_UNICHAR_T_IS_UNSIGNED_INT
30 #undef SOMBOK_UNICHAR_T_IS_UNSIGNED_LONG
31 
32 /***
33  *** Data structure.
34  ***/
35 
36 /* Primitive types */
37 
39 typedef unsigned int unichar_t;
40 
43 typedef unsigned char propval_t;
44 
47 typedef struct {
53  size_t len;
54 } unistr_t;
55 
59 typedef struct {
61  size_t idx;
63  size_t len;
65  size_t col;
71  unsigned char flag;
72 } gcchar_t;
73 
76 typedef struct {
89 } mapent_t;
90 
91 struct linebreak_t;
92 
95 typedef struct {
101  size_t len;
106  size_t gclen;
108  size_t pos;
111 } gcstring_t;
112 
115 typedef enum {
122 
123 typedef void
124  (*linebreak_ref_func_t) (void *, int, int);
125 typedef gcstring_t *
126  (*linebreak_format_func_t) (struct linebreak_t *, linebreak_state_t,
127  gcstring_t *);
128 typedef double
129  (*linebreak_sizing_func_t) (struct linebreak_t *, double,
130  gcstring_t *, gcstring_t *, gcstring_t *);
131 typedef gcstring_t *
132  (*linebreak_urgent_func_t) (struct linebreak_t *, gcstring_t *);
133 typedef gcstring_t *
134  (*linebreak_prep_func_t) (struct linebreak_t *, void *, unistr_t *,
135  unistr_t *);
136 typedef gcstring_t *
137  (*linebreak_obs_prep_func_t) (struct linebreak_t *, unistr_t *);
138 
141 typedef struct linebreak_t {
145  unsigned long int refcount;
147  int state;
149  unistr_t bufstr;
151  unistr_t bufspc;
153  double bufcols;
155  unistr_t unread;
161  size_t charmax;
163  double colmax;
165  double colmin;
168  size_t mapsiz;
170  unistr_t newline;
172  unsigned int options;
174  void *format_data;
175  void *sizing_data;
176  void *urgent_data;
178  void *user_data;
180  void *stash;
201  int errnum;
209  void **prep_data;
211 } linebreak_t;
212 
213 /***
214  *** Constants.
215  ***/
216 
218 #define PROP_UNKNOWN ((propval_t)~0)
219 
222 #define LINEBREAK_FLAG_PROHIBIT_BEFORE (1)
223 #define LINEBREAK_FLAG_ALLOW_BEFORE (2)
224 #define LINEBREAK_FLAG_BREAK_BEFORE LINEBREAK_FLAG_ALLOW_BEFORE
225 
228 #define LINEBREAK_DEFAULT_CHARMAX (998)
229 
232 #define LINEBREAK_OPTION_EASTASIAN_CONTEXT (1)
233 #define LINEBREAK_OPTION_HANGUL_AS_AL (2)
234 #define LINEBREAK_OPTION_LEGACY_CM (4)
235 #define LINEBREAK_OPTION_BREAK_INDENT (8)
236 #define LINEBREAK_OPTION_COMPLEX_BREAKING (16)
237 #define LINEBREAK_OPTION_NONSTARTER_LOOSE (32)
238 #define LINEBREAK_OPTION_VIRAMA_AS_JOINER (64)
239 #define LINEBREAK_OPTION_WIDE_NONSPACING_W (128)
240 
243 #define LINEBREAK_STATE_SOT_FORMAT (-LINEBREAK_STATE_SOT)
244 #define LINEBREAK_STATE_SOP_FORMAT (-LINEBREAK_STATE_SOP)
245 #define LINEBREAK_STATE_SOL_FORMAT (-LINEBREAK_STATE_SOL)
246 
249 #define LINEBREAK_REF_STASH (0)
250 #define LINEBREAK_REF_FORMAT (1)
251 #define LINEBREAK_REF_SIZING (2)
252 #define LINEBREAK_REF_URGENT (3)
253 #define LINEBREAK_REF_USER (4)
254 #define LINEBREAK_REF_PREP (5)
255 
258 #define LINEBREAK_ACTION_MANDATORY (4)
259 #define LINEBREAK_ACTION_DIRECT (3)
260 #define LINEBREAK_ACTION_INDIRECT (2)
261 #define LINEBREAK_ACTION_PROHIBITED (1)
262 
265 #define LINEBREAK_ELONG (-2)
266 #define LINEBREAK_EEXTN (-3)
267 
270 #define SOMBOK_UTF8_CHECK_NONE (0)
271 #define SOMBOK_UTF8_CHECK_MALFORMED (1)
272 #define SOMBOK_UTF8_CHECK_SURROGATE (2)
273 #define SOMBOK_UTF8_CHECK_NONUNICODE (3)
274 
275 /***
276  *** Public functions, global variables and macros.
277  ***/
278 
280  propval_t *, propval_t *, propval_t *,
281  propval_t *);
282 
283 extern gcstring_t *gcstring_new(unistr_t *, linebreak_t *);
284 extern gcstring_t *gcstring_new_from_utf8(char *, size_t, int,
285  linebreak_t *);
286 extern gcstring_t *gcstring_newcopy(unistr_t *, linebreak_t *);
287 extern gcstring_t *gcstring_copy(gcstring_t *);
288 extern void gcstring_destroy(gcstring_t *);
289 extern gcstring_t *gcstring_append(gcstring_t *, gcstring_t *);
290 extern size_t gcstring_columns(gcstring_t *);
291 extern int gcstring_cmp(gcstring_t *, gcstring_t *);
292 extern gcstring_t *gcstring_concat(gcstring_t *, gcstring_t *);
293 extern gcchar_t *gcstring_next(gcstring_t *);
294 extern void gcstring_setpos(gcstring_t *, int);
295 extern void gcstring_shrink(gcstring_t *, int);
296 extern gcstring_t *gcstring_substr(gcstring_t *, int, int);
297 extern gcstring_t *gcstring_replace(gcstring_t *, int, int, gcstring_t *);
298 
299 #define gcstring_eos(gcstr) \
300  ((gcstr)->gclen <= (gcstr)->pos)
301 #define gcstring_getpos(gcstr) \
302  ((gcstr)->pos)
303 
304 extern propval_t gcstring_lbclass(gcstring_t *, int);
305 extern propval_t gcstring_lbclass_ext(gcstring_t *, int);
306 
310 extern void linebreak_destroy(linebreak_t *);
311 
312 extern void linebreak_set_newline(linebreak_t *, unistr_t *);
313 extern void linebreak_set_stash(linebreak_t *, void *);
315  void *);
317  void *);
319  void *);
321  void *);
323  void *);
324 extern void linebreak_reset(linebreak_t *);
326 extern void linebreak_clear_lbclass(linebreak_t *);
328 extern void linebreak_clear_eawidth(linebreak_t *);
333 
334 extern propval_t linebreak_eawidth(linebreak_t *, unichar_t); /* obs. */
336 extern propval_t linebreak_lbclass(linebreak_t *, unichar_t); /* obs. */
337 
338 extern gcstring_t **linebreak_break(linebreak_t *, unistr_t *);
339 extern gcstring_t **linebreak_break_fast(linebreak_t *, unistr_t *);
340 extern gcstring_t **linebreak_break_from_utf8(linebreak_t *, char *,
341  size_t, int);
342 extern gcstring_t **linebreak_break_partial(linebreak_t *, unistr_t *);
343 extern void linebreak_free_result(gcstring_t **, int);
344 extern propval_t linebreak_lbrule(propval_t, propval_t); /* obs. */
345 
346 extern const char *linebreak_unicode_version;
347 extern const char *linebreak_propvals_EA[];
348 extern const char *linebreak_propvals_LB[];
349 extern const char *linebreak_southeastasian_supported;
350 extern void linebreak_southeastasian_flagbreak(gcstring_t *);
351 
352 extern unistr_t *sombok_decode_utf8(unistr_t *, size_t, const char *,
353  size_t, int);
354 extern char *sombok_encode_utf8(char *, size_t *, size_t, unistr_t *);
355 
356 /***
357  *** Built-in callbacks for linebreak_t.
358  ***/
359 extern gcstring_t *linebreak_format_SIMPLE(linebreak_t *,
360  linebreak_state_t,
361  gcstring_t *);
362 extern gcstring_t *linebreak_format_NEWLINE(linebreak_t *,
363  linebreak_state_t,
364  gcstring_t *);
365 extern gcstring_t *linebreak_format_TRIM(linebreak_t *, linebreak_state_t,
366  gcstring_t *);
367 extern gcstring_t *linebreak_prep_URIBREAK(linebreak_t *, void *,
368  unistr_t *, unistr_t *);
369 extern double linebreak_sizing_UAX11(linebreak_t *, double, gcstring_t *,
370  gcstring_t *, gcstring_t *);
371 extern gcstring_t *linebreak_urgent_ABORT(linebreak_t *, gcstring_t *);
372 extern gcstring_t *linebreak_urgent_FORCE(linebreak_t *, gcstring_t *);
373 
374 #define _SOMBOK_H_
375 #endif /* _SOMBOK_H_ */
376 
377 #ifdef MALLOC_DEBUG
378 #include "src/mymalloc.h"
379 #endif /* MALLOC_DEBUG */
size_t len
Definition: sombok.h:53
size_t gclen
Definition: sombok.h:106
unsigned int unichar_t
Definition: sombok.h:39
Definition: sombok.h:117
void linebreak_clear_lbclass(linebreak_t *)
Definition: charprop.c:540
unichar_t beg
Definition: sombok.h:78
void linebreak_set_urgent(linebreak_t *, linebreak_urgent_func_t, void *)
Definition: linebreak.c:418
const char * linebreak_southeastasian_supported
Definition: southeastasian.c:28
Definition: sombok.h:95
void linebreak_destroy(linebreak_t *)
Definition: linebreak.c:218
gcstring_t * gcstring_new(unistr_t *, linebreak_t *)
Definition: gcstring.c:228
unistr_t bufspc
Definition: sombok.h:151
linebreak_t * linebreak_copy(linebreak_t *)
Definition: linebreak.c:69
unistr_t bufstr
Definition: sombok.h:149
void linebreak_charprop(linebreak_t *, unichar_t, propval_t *, propval_t *, propval_t *, propval_t *)
Definition: charprop.c:134
gcstring_t * gcstring_new_from_utf8(char *, size_t, int, linebreak_t *)
Definition: gcstring.c:314
double(* linebreak_sizing_func_t)(struct linebreak_t *, double, gcstring_t *, gcstring_t *, gcstring_t *)
Definition: sombok.h:129
unichar_t * str
Definition: sombok.h:99
gcstring_t * linebreak_urgent_FORCE(linebreak_t *, gcstring_t *)
Definition: utils.c:540
unsigned char flag
Definition: sombok.h:71
gcstring_t * linebreak_format_TRIM(linebreak_t *, linebreak_state_t, gcstring_t *)
Definition: utils.c:475
Definition: sombok.h:47
unistr_t unread
Definition: sombok.h:155
void * format_data
Definition: sombok.h:174
propval_t lbc
Definition: sombok.h:67
Definition: sombok.h:120
const char * linebreak_propvals_EA[]
unsigned int options
Definition: sombok.h:172
propval_t linebreak_lbrule(propval_t, propval_t)
Definition: break.c:280
void linebreak_set_stash(linebreak_t *, void *)
Definition: linebreak.c:290
gcstring_t ** linebreak_break_fast(linebreak_t *, unistr_t *)
Definition: break.c:1217
void linebreak_add_prep(linebreak_t *, linebreak_prep_func_t, void *)
Definition: linebreak.c:335
int gcstring_cmp(gcstring_t *, gcstring_t *)
Definition: gcstring.c:500
void linebreak_set_user(linebreak_t *, linebreak_obs_prep_func_t, void *)
Definition: linebreak.c:443
size_t pos
Definition: sombok.h:108
double bufcols
Definition: sombok.h:153
int state
Definition: sombok.h:147
linebreak_obs_prep_func_t user_func
Definition: sombok.h:189
void linebreak_merge_eawidth(linebreak_t *, linebreak_t *)
Definition: charprop.c:486
propval_t gcb
Definition: sombok.h:86
linebreak_state_t
Definition: sombok.h:115
Definition: sombok.h:119
gcchar_t * gcstring_next(gcstring_t *)
Definition: gcstring.c:560
linebreak_ref_func_t ref_func
Definition: sombok.h:197
unistr_t * sombok_decode_utf8(unistr_t *, size_t, const char *, size_t, int)
Definition: utf8.c:39
gcstring_t * gcstring_append(gcstring_t *, gcstring_t *)
Definition: gcstring.c:404
char * sombok_encode_utf8(char *, size_t *, size_t, unistr_t *)
Definition: utf8.c:206
void linebreak_clear_eawidth(linebreak_t *)
Definition: charprop.c:551
propval_t linebreak_lbclass(linebreak_t *, unichar_t)
Definition: linebreak.c:551
Definition: sombok.h:117
void(* linebreak_ref_func_t)(void *, int, int)
Definition: sombok.h:124
void gcstring_setpos(gcstring_t *, int)
Definition: gcstring.c:577
void * sizing_data
Definition: sombok.h:175
gcstring_t * linebreak_prep_URIBREAK(linebreak_t *, void *, unistr_t *, unistr_t *)
Definition: utils.c:121
void ** prep_data
Definition: sombok.h:209
const char * linebreak_propvals_LB[]
propval_t linebreak_eawidth(linebreak_t *, unichar_t)
Definition: linebreak.c:581
Definition: sombok.h:59
unichar_t * str
Definition: sombok.h:51
unichar_t end
Definition: sombok.h:80
int errnum
Definition: sombok.h:201
void linebreak_free_result(gcstring_t **, int)
Definition: break.c:1349
void linebreak_merge_lbclass(linebreak_t *, linebreak_t *)
Definition: charprop.c:462
linebreak_sizing_func_t sizing_func
Definition: sombok.h:184
gcstring_t *(* linebreak_urgent_func_t)(struct linebreak_t *, gcstring_t *)
Definition: sombok.h:132
propval_t eaw
Definition: sombok.h:84
void linebreak_update_eawidth(linebreak_t *, unichar_t, propval_t)
Definition: charprop.c:450
gcstring_t * gcstring_newcopy(unistr_t *, linebreak_t *)
Definition: gcstring.c:290
void linebreak_update_lbclass(linebreak_t *, unichar_t, propval_t)
Definition: charprop.c:437
gcstring_t * gcstring_substr(gcstring_t *, int, int)
Definition: gcstring.c:632
Definition: sombok.h:76
Definition: sombok.h:117
gcchar_t * gcstr
Definition: sombok.h:104
linebreak_format_func_t format_func
Definition: sombok.h:182
linebreak_t * linebreak_incref(linebreak_t *)
Definition: linebreak.c:52
Definition: sombok.h:119
size_t charmax
Definition: sombok.h:161
linebreak_t * linebreak_new(linebreak_ref_func_t)
Definition: linebreak.c:30
void * urgent_data
Definition: sombok.h:176
void linebreak_set_format(linebreak_t *, linebreak_format_func_t, void *)
Definition: linebreak.c:310
gcstring_t *(* linebreak_format_func_t)(struct linebreak_t *, linebreak_state_t, gcstring_t *)
Definition: sombok.h:126
gcstring_t ** linebreak_break_partial(linebreak_t *, unistr_t *)
Definition: break.c:1201
linebreak_urgent_func_t urgent_func
Definition: sombok.h:186
Definition: sombok.h:141
propval_t linebreak_search_lbclass(linebreak_t *, unichar_t)
Definition: charprop.c:198
gcstring_t * gcstring_copy(gcstring_t *)
Definition: gcstring.c:353
unistr_t newline
Definition: sombok.h:170
struct linebreak_t linebreak_t
unsigned long int refcount
Definition: sombok.h:145
size_t len
Definition: sombok.h:63
size_t len
Definition: sombok.h:101
propval_t linebreak_search_eawidth(linebreak_t *, unichar_t)
Definition: charprop.c:211
void linebreak_set_sizing(linebreak_t *, linebreak_sizing_func_t, void *)
Definition: linebreak.c:394
gcstring_t ** linebreak_break_from_utf8(linebreak_t *, char *, size_t, int)
Definition: break.c:1331
gcstring_t *(* linebreak_prep_func_t)(struct linebreak_t *, void *, unistr_t *, unistr_t *)
Definition: sombok.h:134
double colmax
Definition: sombok.h:163
gcstring_t *(* linebreak_obs_prep_func_t)(struct linebreak_t *, unistr_t *)
Definition: sombok.h:137
propval_t scr
Definition: sombok.h:88
Definition: sombok.h:119
unsigned char propval_t
Definition: sombok.h:43
gcstring_t * gcstring_concat(gcstring_t *, gcstring_t *)
Definition: gcstring.c:538
const char * linebreak_unicode_version
Definition: sombok.h:118
gcstring_t * linebreak_format_NEWLINE(linebreak_t *, linebreak_state_t, gcstring_t *)
Definition: utils.c:449
propval_t gcstring_lbclass(gcstring_t *, int)
Definition: gcstring.c:767
gcstring_t ** linebreak_break(linebreak_t *, unistr_t *)
Definition: break.c:1243
propval_t gcstring_lbclass_ext(gcstring_t *, int)
Definition: gcstring.c:786
struct linebreak_t * lbobj
Definition: sombok.h:110
double linebreak_sizing_UAX11(linebreak_t *, double, gcstring_t *, gcstring_t *, gcstring_t *)
Definition: utils.c:363
void gcstring_shrink(gcstring_t *, int)
Definition: gcstring.c:597
size_t col
Definition: sombok.h:65
void linebreak_southeastasian_flagbreak(gcstring_t *)
Definition: southeastasian.c:36
void gcstring_destroy(gcstring_t *)
Definition: gcstring.c:336
mapent_t * map
Definition: sombok.h:167
gcstring_t * gcstring_replace(gcstring_t *, int, int, gcstring_t *)
Definition: gcstring.c:710
void linebreak_set_newline(linebreak_t *, unistr_t *)
Definition: linebreak.c:261
size_t mapsiz
Definition: sombok.h:168
size_t idx
Definition: sombok.h:61
linebreak_prep_func_t * prep_func
Definition: sombok.h:207
size_t gcstring_columns(gcstring_t *)
Definition: gcstring.c:518
void * stash
Definition: sombok.h:180
void linebreak_reset(linebreak_t *)
Definition: linebreak.c:466
gcstring_t * linebreak_urgent_ABORT(linebreak_t *, gcstring_t *)
Definition: utils.c:530
void * user_data
Definition: sombok.h:178
double colmin
Definition: sombok.h:165
propval_t lbc
Definition: sombok.h:82
propval_t linebreak_get_lbrule(linebreak_t *, propval_t, propval_t)
Definition: linebreak.c:503
propval_t elbc
Definition: sombok.h:69
Definition: sombok.h:116
gcstring_t * linebreak_format_SIMPLE(linebreak_t *, linebreak_state_t, gcstring_t *)
Definition: utils.c:416