summaryrefslogtreecommitdiff
path: root/lib/unilbrk/lbrktables.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/unilbrk/lbrktables.h')
-rw-r--r--lib/unilbrk/lbrktables.h88
1 files changed, 56 insertions, 32 deletions
diff --git a/lib/unilbrk/lbrktables.h b/lib/unilbrk/lbrktables.h
index 85116575..865bea16 100644
--- a/lib/unilbrk/lbrktables.h
+++ b/lib/unilbrk/lbrktables.h
@@ -25,26 +25,31 @@
#include "unitypes.h"
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
/* Line breaking classification. */
enum
{
- /* Values >= 40 are resolved at run time. */
- LBP_BK = 40, /* mandatory break */
- LBP_CR = 41, /* carriage return */
- LBP_LF = 42, /* line feed */
- LBP_CM = 43, /* attached characters and combining marks */
+ /* Values >= 41 are resolved at run time. */
+ LBP_BK = 41, /* mandatory break */
+ LBP_CR = 42, /* carriage return */
+ LBP_LF = 43, /* line feed */
+ LBP_CM = 44, /* attached characters and combining marks */
/*LBP_NL, next line - not used here because it's equivalent to LBP_BK */
/*LBP_SG, surrogates - not used here because they are not characters */
LBP_WJ = 0, /* word joiner */
- LBP_ZW = 44, /* zero width space */
+ LBP_ZW = 45, /* zero width space */
LBP_GL = 1, /* non-breaking (glue) */
- LBP_SP = 45, /* space */
+ LBP_SP = 46, /* space */
LBP_B2 = 2, /* break opportunity before and after */
LBP_BA = 3, /* break opportunity after */
LBP_BB = 4, /* break opportunity before */
LBP_HY = 5, /* hyphen */
- LBP_CB = 46, /* contingent break opportunity */
+ LBP_CB = 47, /* contingent break opportunity */
LBP_CL = 6, /* closing punctuation */
LBP_CP1 = 7, /* closing parenthesis, non-EastAsian character */
LBP_CP2 = 8, /* closing parenthesis, EastAsian character */
@@ -61,34 +66,47 @@ enum
LBP_PO = 19, /* postfix (numeric) */
LBP_PR = 20, /* prefix (numeric) */
LBP_SY = 21, /* symbols allowing breaks */
- LBP_AI = 47, /* ambiguous (alphabetic or ideograph) */
- LBP_AL = 22, /* ordinary alphabetic and symbol characters */
+ LBP_AI = 48, /* ambiguous (alphabetic or ideograph) */
+ LBP_AL1 = 22, /* ordinary alphabetic and symbol characters, != U+25CC */
+ LBP_AL2 = 23, /* ordinary alphabetic and symbol characters, == U+25CC */
/*LBP_CJ, conditional Japanese starter, resolved to NS */
- LBP_H2 = 23, /* Hangul LV syllable */
- LBP_H3 = 24, /* Hangul LVT syllable */
- LBP_HL = 30, /* Hebrew letter */
- LBP_ID1 = 25, /* ideographic */
- LBP_ID2 = 26, /* ideographic and potential future emoji */
- LBP_JL = 27, /* Hangul L Jamo */
- LBP_JV = 28, /* Hangul V Jamo */
- LBP_JT = 29, /* Hangul T Jamo */
- LBP_AP = 31, /* Brahmic scripts: pre-base repha */
- LBP_AK = 32, /* Brahmic scripts: consonants */
- LBP_AS = 33, /* Brahmic scripts: independent vowels */
- LBP_VI = 34, /* Brahmic scripts: conjoining viramas */
- LBP_VF = 35, /* Brahmic scripts: viramas for final consonants */
- LBP_RI = 36, /* regional indicator */
- LBP_SA = 48, /* complex context (South East Asian) */
- LBP_ZWJ = 37, /* zero width joiner */
- LBP_EB = 38, /* emoji base */
- LBP_EM = 39, /* emoji modifier */
- LBP_XX = 49, /* unknown */
+ LBP_H2 = 24, /* Hangul LV syllable */
+ LBP_H3 = 25, /* Hangul LVT syllable */
+ LBP_HL = 31, /* Hebrew letter */
+ LBP_ID1 = 26, /* ideographic */
+ LBP_ID2 = 27, /* ideographic and potential future emoji */
+ LBP_JL = 28, /* Hangul L Jamo */
+ LBP_JV = 29, /* Hangul V Jamo */
+ LBP_JT = 30, /* Hangul T Jamo */
+ LBP_AP = 32, /* Brahmic scripts: pre-base repha */
+ LBP_AK = 33, /* Brahmic scripts: consonants */
+ LBP_AS = 34, /* Brahmic scripts: independent vowels */
+ LBP_VI = 35, /* Brahmic scripts: conjoining viramas */
+ LBP_VF = 36, /* Brahmic scripts: viramas for final consonants */
+ LBP_RI = 37, /* regional indicator */
+ LBP_SA = 49, /* complex context (South East Asian) */
+ LBP_ZWJ = 38, /* zero width joiner */
+ LBP_EB = 39, /* emoji base */
+ LBP_EM = 40, /* emoji modifier */
+ LBP_XX = 50, /* unknown */
/* Artificial values that exist only at runtime, not in the tables. */
- LBP_HL_BA = 100
+ LBP_AKLS_VI = 100,
+ LBP_HL_BA = 101
};
#include "lbrkprop1.h"
+/* Combining prop and ea to a table entry. */
+#define PROP_EA(prop,ea) (((prop) << 1) | (ea))
+
+/* Splitting a table entry into prop and ea. */
+#define PROP(entry) ((entry) >> 1)
+#define EA(entry) ((entry) & 1)
+
+/* Returns (prop << 1) | ea, where
+ - prop is the line breaking property,
+ - ea is the EastAsian property (1 bit)
+ of UC. */
static inline unsigned char
unilbrkprop_lookup (ucs4_t uc)
{
@@ -107,15 +125,21 @@ unilbrkprop_lookup (ucs4_t uc)
}
}
}
- return LBP_XX;
+ return PROP_EA (LBP_XX, 0);
}
+
/* Table indexed by two line breaking classifications. */
#define D 1 /* direct break opportunity, empty in table 7.3 of UTR #14 */
#define I 2 /* indirect break opportunity, '%' in table 7.3 of UTR #14 */
#define P 3 /* prohibited break, '^' in table 7.3 of UTR #14 */
-extern const unsigned char unilbrk_table[40][40];
+extern const unsigned char unilbrk_table[41][41];
/* We don't support line breaking of complex-context dependent characters
(Thai, Lao, Myanmar, Khmer) yet, because it requires dictionary lookup. */
+
+
+#ifdef __cplusplus
+}
+#endif