1 module derelict.utf8proc.types;
2 
3 alias utf8proc_int8_t = byte;
4 alias utf8proc_uint8_t = ubyte;
5 alias utf8proc_int16_t = short;
6 alias utf8proc_uint16_t = ushort;
7 alias utf8proc_int32_t = int;
8 alias utf8proc_uint32_t = uint;
9 alias utf8proc_size_t = size_t;
10 alias utf8proc_ssize_t = ptrdiff_t;
11 alias utf8proc_bool = bool;
12 
13 /** The MAJOR version number (increased when backwards API compatibility is broken). */
14 enum UTF8PROC_VERSION_MAJOR = 2;
15 /** The MINOR version number (increased when new functionality is added in a backwards-compatible manner). */
16 enum UTF8PROC_VERSION_MINOR = 1;
17 /** The PATCH version (increased for fixes that do not change the API). */
18 enum UTF8PROC_VERSION_PATCH = 1;
19 
20 /**
21  * Option flags used by several functions in the library.
22  */
23 enum utf8proc_option_t
24 {
25 	/** The given UTF-8 input is NULL terminated. */
26 	UTF8PROC_NULLTERM = (1 << 0),
27 	/** Unicode Versioning Stability has to be respected. */
28 	UTF8PROC_STABLE = (1 << 1),
29 	/** Compatibility decomposition (i.e. formatting information is lost). */
30 	UTF8PROC_COMPAT = (1 << 2),
31 	/** Return a result with decomposed characters. */
32 	UTF8PROC_COMPOSE = (1 << 3),
33 	/** Return a result with decomposed characters. */
34 	UTF8PROC_DECOMPOSE = (1 << 4),
35 	/** Strip "default ignorable characters" such as SOFT-HYPHEN or ZERO-WIDTH-SPACE. */
36 	UTF8PROC_IGNORE = (1 << 5),
37 	/** Return an error, if the input contains unassigned codepoints. */
38 	UTF8PROC_REJECTNA = (1 << 6),
39 	/**
40    * Indicating that NLF-sequences (LF, CRLF, CR, NEL) are representing a
41    * line break, and should be converted to the codepoint for line
42    * separation (LS).
43    */
44 	UTF8PROC_NLF2LS = (1 << 7),
45 	/**
46    * Indicating that NLF-sequences are representing a paragraph break, and
47    * should be converted to the codepoint for paragraph separation
48    * (PS).
49    */
50 	UTF8PROC_NLF2PS = (1 << 8),
51 	/** Indicating that the meaning of NLF-sequences is unknown. */
52 	UTF8PROC_NLF2LF = (UTF8PROC_NLF2LS | UTF8PROC_NLF2PS),
53 	/** Strips and/or convers control characters.
54    *
55    * NLF-sequences are transformed into space, except if one of the
56    * NLF2LS/PS/LF options is given. HorizontalTab (HT) and FormFeed (FF)
57    * are treated as a NLF-sequence in this case.  All other control
58    * characters are simply removed.
59    */
60 	UTF8PROC_STRIPCC = (1 << 9),
61 	/**
62    * Performs unicode case folding, to be able to do a case-insensitive
63    * string comparison.
64    */
65 	UTF8PROC_CASEFOLD = (1 << 10),
66 	/**
67    * Inserts 0xFF bytes at the beginning of each sequence which is
68    * representing a single grapheme cluster (see UAX#29).
69    */
70 	UTF8PROC_CHARBOUND = (1 << 11),
71 	/** Lumps certain characters together.
72    *
73    * E.g. HYPHEN U+2010 and MINUS U+2212 to ASCII "-". See lump.md for details.
74    *
75    * If NLF2LF is set, this includes a transformation of paragraph and
76    * line separators to ASCII line-feed (LF).
77    */
78 	UTF8PROC_LUMP = (1 << 12),
79 	/** Strips all character markings.
80    *
81    * This includes non-spacing, spacing and enclosing (i.e. accents).
82    * @note This option works only with @ref UTF8PROC_COMPOSE or
83    *       @ref UTF8PROC_DECOMPOSE
84    */
85 	UTF8PROC_STRIPMARK = (1 << 13),
86 }
87 
88 enum UTF8PROC_NULLTERM = utf8proc_option_t.UTF8PROC_NULLTERM;
89 enum UTF8PROC_STABLE = utf8proc_option_t.UTF8PROC_STABLE;
90 enum UTF8PROC_COMPAT = utf8proc_option_t.UTF8PROC_COMPAT;
91 enum UTF8PROC_COMPOSE = utf8proc_option_t.UTF8PROC_COMPOSE;
92 enum UTF8PROC_DECOMPOSE = utf8proc_option_t.UTF8PROC_DECOMPOSE;
93 enum UTF8PROC_IGNORE = utf8proc_option_t.UTF8PROC_IGNORE;
94 enum UTF8PROC_REJECTNA = utf8proc_option_t.UTF8PROC_REJECTNA;
95 enum UTF8PROC_NLF2LS = utf8proc_option_t.UTF8PROC_NLF2LS;
96 enum UTF8PROC_NLF2PS = utf8proc_option_t.UTF8PROC_NLF2PS;
97 enum UTF8PROC_NLF2LF = utf8proc_option_t.UTF8PROC_NLF2LF;
98 enum UTF8PROC_STRIPCC = utf8proc_option_t.UTF8PROC_STRIPCC;
99 enum UTF8PROC_CASEFOLD = utf8proc_option_t.UTF8PROC_CASEFOLD;
100 enum UTF8PROC_CHARBOUND = utf8proc_option_t.UTF8PROC_CHARBOUND;
101 enum UTF8PROC_LUMP = utf8proc_option_t.UTF8PROC_LUMP;
102 enum UTF8PROC_STRIPMARK = utf8proc_option_t.UTF8PROC_STRIPMARK;
103 
104 /** Memory could not be allocated. */
105 enum UTF8PROC_ERROR_NOMEM = -1;
106 /** The given string is too long to be processed. */
107 enum UTF8PROC_ERROR_OVERFLOW = -2;
108 /** The given string is not a legal UTF-8 string. */
109 enum UTF8PROC_ERROR_INVALIDUTF8 = -3;
110 /** The @ref UTF8PROC_REJECTNA flag was set and an unassigned codepoint was found. */
111 enum UTF8PROC_ERROR_NOTASSIGNED = -4;
112 /** Invalid options have been used. */
113 enum UTF8PROC_ERROR_INVALIDOPTS = -5;
114 
115 /** Holds the value of a property. */
116 alias utf8proc_propval_t = utf8proc_int16_t;
117 
118 /** Struct containing information about a codepoint. */
119 alias utf8proc_property_t = utf8proc_property_struct;
120 struct utf8proc_property_struct
121 {
122 	import std.bitmanip : bitfields;
123 
124 align(4):
125 	/**
126    * Unicode category.
127    * @see utf8proc_category_t.
128    */
129 	utf8proc_propval_t category;
130 	utf8proc_propval_t combining_class;
131 	/**
132    * Bidirectional class.
133    * @see utf8proc_bidi_class_t.
134    */
135 	utf8proc_propval_t bidi_class;
136 	/**
137    * @anchor Decomposition type.
138    * @see utf8proc_decomp_type_t.
139    */
140 	utf8proc_propval_t decomp_type;
141 	utf8proc_uint16_t decomp_seqindex;
142 	utf8proc_uint16_t casefold_seqindex;
143 	utf8proc_uint16_t uppercase_seqindex;
144 	utf8proc_uint16_t lowercase_seqindex;
145 	utf8proc_uint16_t titlecase_seqindex;
146 	utf8proc_uint16_t comb_index;
147 
148 	//dfmt off
149 	mixin(bitfields!(
150 		bool, "bidi_mirrored", 1,
151 		bool, "comp_exclusion", 1,
152 		bool, "ignorable", 1,
153 		bool, "control_boundary", 1,
154 		uint, "charwidth", 2,
155 		uint, "pad", 2,
156 		uint, "boundclass", 8,
157 	));
158 	// dfmt on
159 }
160 
161 /** Unicode categories. */
162 enum utf8proc_category_t
163 {
164 	UTF8PROC_CATEGORY_CN = 0, /**< Other, not assigned */
165 	UTF8PROC_CATEGORY_LU = 1, /**< Letter, uppercase */
166 	UTF8PROC_CATEGORY_LL = 2, /**< Letter, lowercase */
167 	UTF8PROC_CATEGORY_LT = 3, /**< Letter, titlecase */
168 	UTF8PROC_CATEGORY_LM = 4, /**< Letter, modifier */
169 	UTF8PROC_CATEGORY_LO = 5, /**< Letter, other */
170 	UTF8PROC_CATEGORY_MN = 6, /**< Mark, nonspacing */
171 	UTF8PROC_CATEGORY_MC = 7, /**< Mark, spacing combining */
172 	UTF8PROC_CATEGORY_ME = 8, /**< Mark, enclosing */
173 	UTF8PROC_CATEGORY_ND = 9, /**< Number, decimal digit */
174 	UTF8PROC_CATEGORY_NL = 10, /**< Number, letter */
175 	UTF8PROC_CATEGORY_NO = 11, /**< Number, other */
176 	UTF8PROC_CATEGORY_PC = 12, /**< Punctuation, connector */
177 	UTF8PROC_CATEGORY_PD = 13, /**< Punctuation, dash */
178 	UTF8PROC_CATEGORY_PS = 14, /**< Punctuation, open */
179 	UTF8PROC_CATEGORY_PE = 15, /**< Punctuation, close */
180 	UTF8PROC_CATEGORY_PI = 16, /**< Punctuation, initial quote */
181 	UTF8PROC_CATEGORY_PF = 17, /**< Punctuation, final quote */
182 	UTF8PROC_CATEGORY_PO = 18, /**< Punctuation, other */
183 	UTF8PROC_CATEGORY_SM = 19, /**< Symbol, math */
184 	UTF8PROC_CATEGORY_SC = 20, /**< Symbol, currency */
185 	UTF8PROC_CATEGORY_SK = 21, /**< Symbol, modifier */
186 	UTF8PROC_CATEGORY_SO = 22, /**< Symbol, other */
187 	UTF8PROC_CATEGORY_ZS = 23, /**< Separator, space */
188 	UTF8PROC_CATEGORY_ZL = 24, /**< Separator, line */
189 	UTF8PROC_CATEGORY_ZP = 25, /**< Separator, paragraph */
190 	UTF8PROC_CATEGORY_CC = 26, /**< Other, control */
191 	UTF8PROC_CATEGORY_CF = 27, /**< Other, format */
192 	UTF8PROC_CATEGORY_CS = 28, /**< Other, surrogate */
193 	UTF8PROC_CATEGORY_CO = 29, /**< Other, private use */
194 
195 
196 
197 }
198 
199 enum UTF8PROC_CATEGORY_CN = utf8proc_category_t.UTF8PROC_CATEGORY_CN;
200 enum UTF8PROC_CATEGORY_LU = utf8proc_category_t.UTF8PROC_CATEGORY_LU;
201 enum UTF8PROC_CATEGORY_LL = utf8proc_category_t.UTF8PROC_CATEGORY_LL;
202 enum UTF8PROC_CATEGORY_LT = utf8proc_category_t.UTF8PROC_CATEGORY_LT;
203 enum UTF8PROC_CATEGORY_LM = utf8proc_category_t.UTF8PROC_CATEGORY_LM;
204 enum UTF8PROC_CATEGORY_LO = utf8proc_category_t.UTF8PROC_CATEGORY_LO;
205 enum UTF8PROC_CATEGORY_MN = utf8proc_category_t.UTF8PROC_CATEGORY_MN;
206 enum UTF8PROC_CATEGORY_MC = utf8proc_category_t.UTF8PROC_CATEGORY_MC;
207 enum UTF8PROC_CATEGORY_ME = utf8proc_category_t.UTF8PROC_CATEGORY_ME;
208 enum UTF8PROC_CATEGORY_ND = utf8proc_category_t.UTF8PROC_CATEGORY_ND;
209 enum UTF8PROC_CATEGORY_NL = utf8proc_category_t.UTF8PROC_CATEGORY_NL;
210 enum UTF8PROC_CATEGORY_NO = utf8proc_category_t.UTF8PROC_CATEGORY_NO;
211 enum UTF8PROC_CATEGORY_PC = utf8proc_category_t.UTF8PROC_CATEGORY_PC;
212 enum UTF8PROC_CATEGORY_PD = utf8proc_category_t.UTF8PROC_CATEGORY_PD;
213 enum UTF8PROC_CATEGORY_PS = utf8proc_category_t.UTF8PROC_CATEGORY_PS;
214 enum UTF8PROC_CATEGORY_PE = utf8proc_category_t.UTF8PROC_CATEGORY_PE;
215 enum UTF8PROC_CATEGORY_PI = utf8proc_category_t.UTF8PROC_CATEGORY_PI;
216 enum UTF8PROC_CATEGORY_PF = utf8proc_category_t.UTF8PROC_CATEGORY_PF;
217 enum UTF8PROC_CATEGORY_PO = utf8proc_category_t.UTF8PROC_CATEGORY_PO;
218 enum UTF8PROC_CATEGORY_SM = utf8proc_category_t.UTF8PROC_CATEGORY_SM;
219 enum UTF8PROC_CATEGORY_SC = utf8proc_category_t.UTF8PROC_CATEGORY_SC;
220 enum UTF8PROC_CATEGORY_SK = utf8proc_category_t.UTF8PROC_CATEGORY_SK;
221 enum UTF8PROC_CATEGORY_SO = utf8proc_category_t.UTF8PROC_CATEGORY_SO;
222 enum UTF8PROC_CATEGORY_ZS = utf8proc_category_t.UTF8PROC_CATEGORY_ZS;
223 enum UTF8PROC_CATEGORY_ZL = utf8proc_category_t.UTF8PROC_CATEGORY_ZL;
224 enum UTF8PROC_CATEGORY_ZP = utf8proc_category_t.UTF8PROC_CATEGORY_ZP;
225 enum UTF8PROC_CATEGORY_CC = utf8proc_category_t.UTF8PROC_CATEGORY_CC;
226 enum UTF8PROC_CATEGORY_CF = utf8proc_category_t.UTF8PROC_CATEGORY_CF;
227 enum UTF8PROC_CATEGORY_CS = utf8proc_category_t.UTF8PROC_CATEGORY_CS;
228 enum UTF8PROC_CATEGORY_CO = utf8proc_category_t.UTF8PROC_CATEGORY_CO;
229 
230 /** Bidirectional character classes. */
231 enum utf8proc_bidi_class_t
232 {
233 	UTF8PROC_BIDI_CLASS_L = 1, /**< Left-to-Right */
234 	UTF8PROC_BIDI_CLASS_LRE = 2, /**< Left-to-Right Embedding */
235 	UTF8PROC_BIDI_CLASS_LRO = 3, /**< Left-to-Right Override */
236 	UTF8PROC_BIDI_CLASS_R = 4, /**< Right-to-Left */
237 	UTF8PROC_BIDI_CLASS_AL = 5, /**< Right-to-Left Arabic */
238 	UTF8PROC_BIDI_CLASS_RLE = 6, /**< Right-to-Left Embedding */
239 	UTF8PROC_BIDI_CLASS_RLO = 7, /**< Right-to-Left Override */
240 	UTF8PROC_BIDI_CLASS_PDF = 8, /**< Pop Directional Format */
241 	UTF8PROC_BIDI_CLASS_EN = 9, /**< European Number */
242 	UTF8PROC_BIDI_CLASS_ES = 10, /**< European Separator */
243 	UTF8PROC_BIDI_CLASS_ET = 11, /**< European Number Terminator */
244 	UTF8PROC_BIDI_CLASS_AN = 12, /**< Arabic Number */
245 	UTF8PROC_BIDI_CLASS_CS = 13, /**< Common Number Separator */
246 	UTF8PROC_BIDI_CLASS_NSM = 14, /**< Nonspacing Mark */
247 	UTF8PROC_BIDI_CLASS_BN = 15, /**< Boundary Neutral */
248 	UTF8PROC_BIDI_CLASS_B = 16, /**< Paragraph Separator */
249 	UTF8PROC_BIDI_CLASS_S = 17, /**< Segment Separator */
250 	UTF8PROC_BIDI_CLASS_WS = 18, /**< Whitespace */
251 	UTF8PROC_BIDI_CLASS_ON = 19, /**< Other Neutrals */
252 	UTF8PROC_BIDI_CLASS_LRI = 20, /**< Left-to-Right Isolate */
253 	UTF8PROC_BIDI_CLASS_RLI = 21, /**< Right-to-Left Isolate */
254 	UTF8PROC_BIDI_CLASS_FSI = 22, /**< First Strong Isolate */
255 	UTF8PROC_BIDI_CLASS_PDI = 23, /**< Pop Directional Isolate */
256 
257 
258 
259 }
260 
261 enum UTF8PROC_BIDI_CLASS_L = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_L;
262 enum UTF8PROC_BIDI_CLASS_LRE = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_LRE;
263 enum UTF8PROC_BIDI_CLASS_LRO = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_LRO;
264 enum UTF8PROC_BIDI_CLASS_R = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_R;
265 enum UTF8PROC_BIDI_CLASS_AL = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_AL;
266 enum UTF8PROC_BIDI_CLASS_RLE = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_RLE;
267 enum UTF8PROC_BIDI_CLASS_RLO = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_RLO;
268 enum UTF8PROC_BIDI_CLASS_PDF = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_PDF;
269 enum UTF8PROC_BIDI_CLASS_EN = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_EN;
270 enum UTF8PROC_BIDI_CLASS_ES = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_ES;
271 enum UTF8PROC_BIDI_CLASS_ET = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_ET;
272 enum UTF8PROC_BIDI_CLASS_AN = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_AN;
273 enum UTF8PROC_BIDI_CLASS_CS = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_CS;
274 enum UTF8PROC_BIDI_CLASS_NSM = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_NSM;
275 enum UTF8PROC_BIDI_CLASS_BN = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_BN;
276 enum UTF8PROC_BIDI_CLASS_B = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_B;
277 enum UTF8PROC_BIDI_CLASS_S = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_S;
278 enum UTF8PROC_BIDI_CLASS_WS = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_WS;
279 enum UTF8PROC_BIDI_CLASS_ON = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_ON;
280 enum UTF8PROC_BIDI_CLASS_LRI = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_LRI;
281 enum UTF8PROC_BIDI_CLASS_RLI = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_RLI;
282 enum UTF8PROC_BIDI_CLASS_FSI = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_FSI;
283 enum UTF8PROC_BIDI_CLASS_PDI = utf8proc_bidi_class_t.UTF8PROC_BIDI_CLASS_PDI;
284 
285 /** Decomposition type. */
286 enum utf8proc_decomp_type_t
287 {
288 	UTF8PROC_DECOMP_TYPE_FONT = 1, /**< Font */
289 	UTF8PROC_DECOMP_TYPE_NOBREAK = 2, /**< Nobreak */
290 	UTF8PROC_DECOMP_TYPE_INITIAL = 3, /**< Initial */
291 	UTF8PROC_DECOMP_TYPE_MEDIAL = 4, /**< Medial */
292 	UTF8PROC_DECOMP_TYPE_FINAL = 5, /**< Final */
293 	UTF8PROC_DECOMP_TYPE_ISOLATED = 6, /**< Isolated */
294 	UTF8PROC_DECOMP_TYPE_CIRCLE = 7, /**< Circle */
295 	UTF8PROC_DECOMP_TYPE_SUPER = 8, /**< Super */
296 	UTF8PROC_DECOMP_TYPE_SUB = 9, /**< Sub */
297 	UTF8PROC_DECOMP_TYPE_VERTICAL = 10, /**< Vertical */
298 	UTF8PROC_DECOMP_TYPE_WIDE = 11, /**< Wide */
299 	UTF8PROC_DECOMP_TYPE_NARROW = 12, /**< Narrow */
300 	UTF8PROC_DECOMP_TYPE_SMALL = 13, /**< Small */
301 	UTF8PROC_DECOMP_TYPE_SQUARE = 14, /**< Square */
302 	UTF8PROC_DECOMP_TYPE_FRACTION = 15, /**< Fraction */
303 	UTF8PROC_DECOMP_TYPE_COMPAT = 16, /**< Compat */
304 
305 
306 
307 }
308 
309 enum UTF8PROC_DECOMP_TYPE_FONT = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_FONT;
310 enum UTF8PROC_DECOMP_TYPE_NOBREAK = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_NOBREAK;
311 enum UTF8PROC_DECOMP_TYPE_INITIAL = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_INITIAL;
312 enum UTF8PROC_DECOMP_TYPE_MEDIAL = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_MEDIAL;
313 enum UTF8PROC_DECOMP_TYPE_FINAL = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_FINAL;
314 enum UTF8PROC_DECOMP_TYPE_ISOLATED = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_ISOLATED;
315 enum UTF8PROC_DECOMP_TYPE_CIRCLE = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_CIRCLE;
316 enum UTF8PROC_DECOMP_TYPE_SUPER = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_SUPER;
317 enum UTF8PROC_DECOMP_TYPE_SUB = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_SUB;
318 enum UTF8PROC_DECOMP_TYPE_VERTICAL = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_VERTICAL;
319 enum UTF8PROC_DECOMP_TYPE_WIDE = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_WIDE;
320 enum UTF8PROC_DECOMP_TYPE_NARROW = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_NARROW;
321 enum UTF8PROC_DECOMP_TYPE_SMALL = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_SMALL;
322 enum UTF8PROC_DECOMP_TYPE_SQUARE = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_SQUARE;
323 enum UTF8PROC_DECOMP_TYPE_FRACTION = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_FRACTION;
324 enum UTF8PROC_DECOMP_TYPE_COMPAT = utf8proc_decomp_type_t.UTF8PROC_DECOMP_TYPE_COMPAT;
325 
326 /** Boundclass property. (TR29) */
327 enum utf8proc_boundclass_t
328 {
329 	UTF8PROC_BOUNDCLASS_START = 0, /**< Start */
330 	UTF8PROC_BOUNDCLASS_OTHER = 1, /**< Other */
331 	UTF8PROC_BOUNDCLASS_CR = 2, /**< Cr */
332 	UTF8PROC_BOUNDCLASS_LF = 3, /**< Lf */
333 	UTF8PROC_BOUNDCLASS_CONTROL = 4, /**< Control */
334 	UTF8PROC_BOUNDCLASS_EXTEND = 5, /**< Extend */
335 	UTF8PROC_BOUNDCLASS_L = 6, /**< L */
336 	UTF8PROC_BOUNDCLASS_V = 7, /**< V */
337 	UTF8PROC_BOUNDCLASS_T = 8, /**< T */
338 	UTF8PROC_BOUNDCLASS_LV = 9, /**< Lv */
339 	UTF8PROC_BOUNDCLASS_LVT = 10, /**< Lvt */
340 	UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR = 11, /**< Regional indicator */
341 	UTF8PROC_BOUNDCLASS_SPACINGMARK = 12, /**< Spacingmark */
342 	UTF8PROC_BOUNDCLASS_PREPEND = 13, /**< Prepend */
343 	UTF8PROC_BOUNDCLASS_ZWJ = 14, /**< Zero Width Joiner */
344 	UTF8PROC_BOUNDCLASS_E_BASE = 15, /**< Emoji Base */
345 	UTF8PROC_BOUNDCLASS_E_MODIFIER = 16, /**< Emoji Modifier */
346 	UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ = 17, /**< Glue_After_ZWJ */
347 	UTF8PROC_BOUNDCLASS_E_BASE_GAZ = 18, /**< E_BASE + GLUE_AFTER_ZJW */
348 
349 
350 
351 }
352 
353 enum UTF8PROC_BOUNDCLASS_START = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_START;
354 enum UTF8PROC_BOUNDCLASS_OTHER = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_OTHER;
355 enum UTF8PROC_BOUNDCLASS_CR = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_CR;
356 enum UTF8PROC_BOUNDCLASS_LF = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_LF;
357 enum UTF8PROC_BOUNDCLASS_CONTROL = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_CONTROL;
358 enum UTF8PROC_BOUNDCLASS_EXTEND = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_EXTEND;
359 enum UTF8PROC_BOUNDCLASS_L = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_L;
360 enum UTF8PROC_BOUNDCLASS_V = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_V;
361 enum UTF8PROC_BOUNDCLASS_T = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_T;
362 enum UTF8PROC_BOUNDCLASS_LV = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_LV;
363 enum UTF8PROC_BOUNDCLASS_LVT = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_LVT;
364 enum UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR = utf8proc_boundclass_t
365 		.UTF8PROC_BOUNDCLASS_REGIONAL_INDICATOR;
366 enum UTF8PROC_BOUNDCLASS_SPACINGMARK = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_SPACINGMARK;
367 enum UTF8PROC_BOUNDCLASS_PREPEND = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_PREPEND;
368 enum UTF8PROC_BOUNDCLASS_ZWJ = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_ZWJ;
369 enum UTF8PROC_BOUNDCLASS_E_BASE = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_E_BASE;
370 enum UTF8PROC_BOUNDCLASS_E_MODIFIER = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_E_MODIFIER;
371 enum UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_GLUE_AFTER_ZWJ;
372 enum UTF8PROC_BOUNDCLASS_E_BASE_GAZ = utf8proc_boundclass_t.UTF8PROC_BOUNDCLASS_E_BASE_GAZ;
373 
374 /**
375  * Function pointer type passed to @ref utf8proc_map_custom and
376  * @ref utf8proc_decompose_custom, which is used to specify a user-defined
377  * mapping of codepoints to be applied in conjunction with other mappings.
378  */
379 alias utf8proc_custom_func = utf8proc_int32_t function(utf8proc_int32_t codepoint, void* data);