]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
Upgrade to Unicode-3.1.
authorBruno Haible <bruno@clisp.org>
Mon, 11 Mar 2002 12:20:06 +0000 (12:20 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:07:48 +0000 (12:07 +0200)
lib/3level.h
lib/Combining.txt [new file with mode: 0644]
lib/Makefile.am
lib/gen-lbrkprop.c
lib/lbrkprop.h
lib/linebreak.c

index e9f08ef9455f30e8e75e83019e382a3e5dbe63ee..465ab93a4d359d973f03de2ac534d40ee824df12 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2001 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Bruno Haible <haible@clisp.cons.org>, 2000.
 
@@ -78,6 +78,10 @@ CONCAT(TABLE,_init) (struct TABLE *t)
   t->level3_alloc = t->level3_size = 0;
 }
 
+/* Marker for an empty slot.  This has the value 0xFFFFFFFF, regardless
+   whether 'int' is 16 bit, 32 bit, or 64 bit.  */
+#define EMPTY ((uint32_t) ~0)
+
 /* Retrieve an entry.  */
 static inline ELEMENT
 CONCAT(TABLE,_get) (struct TABLE *t, uint32_t wc)
@@ -86,12 +90,12 @@ CONCAT(TABLE,_get) (struct TABLE *t, uint32_t wc)
   if (index1 < t->level1_size)
     {
       uint32_t lookup1 = t->level1[index1];
-      if (lookup1 != ~((uint32_t) 0))
+      if (lookup1 != EMPTY)
        {
          uint32_t index2 = ((wc >> t->p) & ((1 << t->q) - 1))
                            + (lookup1 << t->q);
          uint32_t lookup2 = t->level2[index2];
-         if (lookup2 != ~((uint32_t) 0))
+         if (lookup2 != EMPTY)
            {
              uint32_t index3 = (wc & ((1 << t->p) - 1))
                                + (lookup2 << t->p);
@@ -128,10 +132,10 @@ CONCAT(TABLE,_add) (struct TABLE *t, uint32_t wc, ELEMENT value)
          t->level1_alloc = alloc;
        }
       while (index1 >= t->level1_size)
-       t->level1[t->level1_size++] = ~((uint32_t) 0);
+       t->level1[t->level1_size++] = EMPTY;
     }
 
-  if (t->level1[index1] == ~((uint32_t) 0))
+  if (t->level1[index1] == EMPTY)
     {
       if (t->level2_size == t->level2_alloc)
        {
@@ -143,13 +147,13 @@ CONCAT(TABLE,_add) (struct TABLE *t, uint32_t wc, ELEMENT value)
       i1 = t->level2_size << t->q;
       i2 = (t->level2_size + 1) << t->q;
       for (i = i1; i < i2; i++)
-       t->level2[i] = ~((uint32_t) 0);
+       t->level2[i] = EMPTY;
       t->level1[index1] = t->level2_size++;
     }
 
   index2 += t->level1[index1] << t->q;
 
-  if (t->level2[index2] == ~((uint32_t) 0))
+  if (t->level2[index2] == EMPTY)
     {
       if (t->level3_size == t->level3_alloc)
        {
@@ -180,14 +184,14 @@ CONCAT(TABLE,_iterate) (struct TABLE *t,
   for (index1 = 0; index1 < t->level1_size; index1++)
     {
       uint32_t lookup1 = t->level1[index1];
-      if (lookup1 != ~((uint32_t) 0))
+      if (lookup1 != EMPTY)
        {
          uint32_t lookup1_shifted = lookup1 << t->q;
          uint32_t index2;
          for (index2 = 0; index2 < (1 << t->q); index2++)
            {
              uint32_t lookup2 = t->level2[index2 + lookup1_shifted];
-             if (lookup2 != ~((uint32_t) 0))
+             if (lookup2 != EMPTY)
                {
                  uint32_t lookup2_shifted = lookup2 << t->p;
                  uint32_t index3;
@@ -236,7 +240,7 @@ CONCAT(TABLE,_finalize) (struct TABLE *t)
   t->level3_size = k;
 
   for (i = 0; i < (t->level2_size << t->q); i++)
-    if (t->level2[i] != ~((uint32_t) 0))
+    if (t->level2[i] != EMPTY)
       t->level2[i] = reorder3[t->level2[i]];
 
   /* Uniquify level2 blocks.  */
@@ -260,7 +264,7 @@ CONCAT(TABLE,_finalize) (struct TABLE *t)
   t->level2_size = k;
 
   for (i = 0; i < t->level1_size; i++)
-    if (t->level1[i] != ~((uint32_t) 0))
+    if (t->level1[i] != EMPTY)
       t->level1[i] = reorder2[t->level1[i]];
 
   /* Create and fill the resulting compressed representation.  */
@@ -290,13 +294,13 @@ CONCAT(TABLE,_finalize) (struct TABLE *t)
 
   for (i = 0; i < t->level1_size; i++)
     ((uint32_t *) (t->result + level1_offset))[i] =
-      (t->level1[i] == ~((uint32_t) 0)
+      (t->level1[i] == EMPTY
        ? 0
        : (t->level1[i] << t->q) * sizeof (uint32_t) + level2_offset);
 
   for (i = 0; i < (t->level2_size << t->q); i++)
     ((uint32_t *) (t->result + level2_offset))[i] =
-      (t->level2[i] == ~((uint32_t) 0)
+      (t->level2[i] == EMPTY
        ? 0
        : (t->level2[i] << t->p) * sizeof (ELEMENT) + level3_offset);
 
@@ -315,6 +319,7 @@ CONCAT(TABLE,_finalize) (struct TABLE *t)
 }
 #endif
 
+#undef EMPTY
 #undef TABLE
 #undef ELEMENT
 #undef DEFAULT
diff --git a/lib/Combining.txt b/lib/Combining.txt
new file mode 100644 (file)
index 0000000..c01774b
--- /dev/null
@@ -0,0 +1,105 @@
+Property dump for: 0x20000004 (Combining)
+
+0300..034E  (79 chars)
+0360..0362  (3 chars)
+0483..0486  (4 chars)
+0488..0489  (2 chars)
+0591..05A1  (17 chars)
+05A3..05B9  (23 chars)
+05BB..05BD  (3 chars)
+05BF
+05C1..05C2  (2 chars)
+05C4
+064B..0655  (11 chars)
+0670
+06D6..06E4  (15 chars)
+06E7..06E8  (2 chars)
+06EA..06ED  (4 chars)
+0711
+0730..074A  (27 chars)
+07A6..07B0  (11 chars)
+0901..0903  (3 chars)
+093C
+093E..094D  (16 chars)
+0951..0954  (4 chars)
+0962..0963  (2 chars)
+0981..0983  (3 chars)
+09BC
+09BE..09C4  (7 chars)
+09C7..09C8  (2 chars)
+09CB..09CD  (3 chars)
+09D7
+09E2..09E3  (2 chars)
+0A02
+0A3C
+0A3E..0A42  (5 chars)
+0A47..0A48  (2 chars)
+0A4B..0A4D  (3 chars)
+0A70..0A71  (2 chars)
+0A81..0A83  (3 chars)
+0ABC
+0ABE..0AC5  (8 chars)
+0AC7..0AC9  (3 chars)
+0ACB..0ACD  (3 chars)
+0B01..0B03  (3 chars)
+0B3C
+0B3E..0B43  (6 chars)
+0B47..0B48  (2 chars)
+0B4B..0B4D  (3 chars)
+0B56..0B57  (2 chars)
+0B82..0B83  (2 chars)
+0BBE..0BC2  (5 chars)
+0BC6..0BC8  (3 chars)
+0BCA..0BCD  (4 chars)
+0BD7
+0C01..0C03  (3 chars)
+0C3E..0C44  (7 chars)
+0C46..0C48  (3 chars)
+0C4A..0C4D  (4 chars)
+0C55..0C56  (2 chars)
+0C82..0C83  (2 chars)
+0CBE..0CC4  (7 chars)
+0CC6..0CC8  (3 chars)
+0CCA..0CCD  (4 chars)
+0CD5..0CD6  (2 chars)
+0D02..0D03  (2 chars)
+0D3E..0D43  (6 chars)
+0D46..0D48  (3 chars)
+0D4A..0D4D  (4 chars)
+0D57
+0D82..0D83  (2 chars)
+0DCA
+0DCF..0DD4  (6 chars)
+0DD6
+0DD8..0DDF  (8 chars)
+0DF2..0DF3  (2 chars)
+0E31
+0E34..0E3A  (7 chars)
+0E47..0E4E  (8 chars)
+0EB1
+0EB4..0EB9  (6 chars)
+0EBB..0EBC  (2 chars)
+0EC8..0ECD  (6 chars)
+0F18..0F19  (2 chars)
+0F35
+0F37
+0F39
+0F3E..0F3F  (2 chars)
+0F71..0F84  (20 chars)
+0F86..0F87  (2 chars)
+0F90..0F97  (8 chars)
+0F99..0FBC  (36 chars)
+0FC6
+102C..1032  (7 chars)
+1036..1039  (4 chars)
+1056..1059  (4 chars)
+17B4..17D3  (32 chars)
+18A9
+20D0..20E3  (20 chars)
+302A..302F  (6 chars)
+3099..309A  (2 chars)
+F8F0..F8FF  (16 chars)
+FB1E
+FE20..FE23  (4 chars)
+
+*******************************************
index c16c7fd99e8ad975cdf0215133196c085410d84a..5a5df0e013f96616f3600088842197de61fbd363 100644 (file)
@@ -107,7 +107,7 @@ noinst_HEADERS = gettext.h
 EXTRA_DIST = classpath.c config.charset ref-add.sin ref-del.sin \
 $(LIBADD_SOURCE) $(UNUSED_SOURCE) \
 stdbool.h.in \
-gen-lbrkprop.c 3level.h
+gen-lbrkprop.c 3level.h Combining.txt
 
 DEFS = -DLIBDIR=\"$(libdir)\" @DEFS@
 INCLUDES = -I. -I$(srcdir) -I.. -I../intl -I$(top_srcdir)/intl
index 52a28e10769d482623644a99f1ac2660cac478ba..fe9341f86e47946743e081c99772b8d243285337 100644 (file)
@@ -1,6 +1,6 @@
 /* Generate a Unicode conforming Line Break Properties tables from a
    UnicodeData file.
-   Written by Bruno Haible <haible@clisp.cons.org>, 2000-2001.
+   Written by Bruno Haible <bruno@clisp.org>, 2000-2002.
 
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
@@ -18,9 +18,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Usage example:
      $ gen-lbrkprop /usr/local/share/Unidata/UnicodeData.txt \
-                   /usr/local/share/Unidata/PropList.txt \
+                   Combining.txt \
                    /usr/local/share/Unidata/EastAsianWidth.txt \
-                   3.0
+                   /usr/local/share/Unidata/LineBreak.txt \
+                   3.1.0
  */
 
 #include <stdio.h>
@@ -54,7 +55,7 @@ struct unicode_attribute
 #define NONE (~(unsigned int)0)
 
 /* The entire contents of the UnicodeData.txt file.  */
-struct unicode_attribute unicode_attributes [0x10000];
+struct unicode_attribute unicode_attributes [0x110000];
 
 /* Stores in unicode_attributes[i] the values from the given fields.  */
 static void
@@ -69,7 +70,7 @@ fill_attribute (unsigned int i,
 {
   struct unicode_attribute * uni;
 
-  if (i >= 0x10000)
+  if (i >= 0x110000)
     {
       fprintf (stderr, "index too large\n");
       exit (1);
@@ -151,7 +152,7 @@ fill_attributes (const char *unicodedata_filename)
   char field14[FIELDLEN];
   int lineno = 0;
 
-  for (i = 0; i < 0x10000; i++)
+  for (i = 0; i < 0x110000; i++)
     unicode_attributes[i].name = NULL;
 
   stream = fopen (unicodedata_filename, "r");
@@ -248,10 +249,10 @@ fill_attributes (const char *unicodedata_filename)
 }
 
 /* The combining property from the PropList.txt file.  */
-char unicode_combining[0x10000];
+char unicode_combining[0x110000];
 
 /* Stores in unicode_combining[] the Combining property from the
-   PropList.txt file.  */
+   Unicode 3.0 PropList.txt file.  */
 static void
 fill_combining (const char *proplist_filename)
 {
@@ -259,7 +260,7 @@ fill_combining (const char *proplist_filename)
   FILE *stream;
   char buf[100+1];
 
-  for (i = 0; i < 0x10000; i++)
+  for (i = 0; i < 0x110000; i++)
     unicode_combining[i] = 0;
 
   stream = fopen (proplist_filename, "r");
@@ -330,9 +331,9 @@ fill_combining (const char *proplist_filename)
 
 /* The width property from the EastAsianWidth.txt file.
    Each is NULL (unassigned) or "N", "A", "H", "W", "F", "Na".  */
-const char * unicode_width[0x10000];
+const char * unicode_width[0x110000];
 
-/* Stores in unicode_width[] the width property from the PropList.txt
+/* Stores in unicode_width[] the width property from the EastAsianWidth.txt
    file.  */
 static void
 fill_width (const char *width_filename)
@@ -344,7 +345,7 @@ fill_width (const char *width_filename)
   char field2[FIELDLEN];
   int lineno = 0;
 
-  for (i = 0; i < 0x10000; i++)
+  for (i = 0; i < 0x110000; i++)
     unicode_width[i] = (unicode_attributes[i].name != NULL ? "N" : NULL);
 
   stream = fopen (width_filename, "r");
@@ -370,7 +371,7 @@ fill_width (const char *width_filename)
        }
       ungetc (c, stream);
       n = getfield (stream, field0, ';');
-      n += getfield (stream, field1, ';');
+      n += getfield (stream, field1, ' ');
       n += getfield (stream, field2, '\n');
       if (n == 0)
        break;
@@ -380,37 +381,16 @@ fill_width (const char *width_filename)
          exit (1);
        }
       i = strtoul (field0, NULL, 16);
-      if (field2[0] == '<'
-         && strlen (field2) >= 9
-         && !strcmp (field2 + strlen(field2) - 8, ", First>"))
+      if (strstr (field0, "..") != NULL)
        {
-         /* Deal with a range. */
-         lineno++;
-         n = getfield (stream, field0, ';');
-         n += getfield (stream, field1, ';');
-         n += getfield (stream, field2, '\n');
-         if (n != 3)
-           {
-             fprintf (stderr, "missing end range in '%s':%d\n",
-                      width_filename, lineno);
-             exit (1);
-           }
-         if (!(field2[0] == '<'
-               && strlen (field2) >= 8
-               && !strcmp (field2 + strlen (field2) - 7, ", Last>")))
-           {
-             fprintf (stderr, "missing end range in '%s':%d\n",
-                      width_filename, lineno);
-             exit (1);
-           }
-         field2[strlen (field2) - 7] = '\0';
-         j = strtoul (field0, NULL, 16);
+         /* Deal with a range.  */
+         j = strtoul (strstr (field0, "..") + 2, NULL, 16);
          for (; i <= j; i++)
            unicode_width[i] = strdup (field1);
        }
       else
        {
-         /* Single character line */
+         /* Single character line */
          unicode_width[i] = strdup (field1);
        }
     }
@@ -511,8 +491,10 @@ get_lbp (unsigned int ch)
          || ch == 0x2009 /* THIN SPACE */
          || ch == 0x200A /* HAIR SPACE */
          || ch == 0x0009 /* tab */
-         || ch == 0x2010 /* HYPHEN */
          || ch == 0x058A /* ARMENIAN HYPHEN */
+         || ch == 0x2010 /* HYPHEN */
+         || ch == 0x2012 /* FIGURE DASH */
+         || ch == 0x2013 /* EN DASH */
          || ch == 0x00AD /* SOFT HYPHEN */
          || ch == 0x0F0B /* TIBETAN MARK INTERSYLLABIC TSHEG */
          || ch == 0x1361 /* ETHIOPIC WORDSPACE */
@@ -554,10 +536,10 @@ get_lbp (unsigned int ch)
       /* closing punctuation */
       if (ch == 0x3001 /* IDEOGRAPHIC COMMA */
          || ch == 0x3002 /* IDEOGRAPHIC FULL STOP */
-         || ch == 0xFF0C /* FULLWIDTH COMMA */
-         || ch == 0xFF0E /* FULLWIDTH FULL STOP */
          || ch == 0xFE50 /* SMALL COMMA */
          || ch == 0xFE52 /* SMALL FULL STOP */
+         || ch == 0xFF0C /* FULLWIDTH COMMA */
+         || ch == 0xFF0E /* FULLWIDTH FULL STOP */
          || ch == 0xFF61 /* HALFWIDTH IDEOGRAPHIC FULL STOP */
          || ch == 0xFF64 /* HALFWIDTH IDEOGRAPHIC COMMA */
          || (unicode_attributes[ch].category[0] == 'P'
@@ -595,13 +577,13 @@ get_lbp (unsigned int ch)
          || ch == 0x17DA /* KHMER SIGN KOOMUUT */
          || ch == 0x203C /* DOUBLE EXCLAMATION MARK */
          || ch == 0x2044 /* FRACTION SLASH */
-         || ch == 0x301C /* WAVE DASH */
-         || ch == 0x30FB /* KATAKANA MIDDLE DOT */
          || ch == 0x3005 /* IDEOGRAPHIC ITERATION MARK */
+         || ch == 0x301C /* WAVE DASH */
          || ch == 0x309B /* KATAKANA-HIRAGANA VOICED SOUND MARK */
          || ch == 0x309C /* KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
          || ch == 0x309D /* HIRAGANA ITERATION MARK */
          || ch == 0x309E /* HIRAGANA VOICED ITERATION MARK */
+         || ch == 0x30FB /* KATAKANA MIDDLE DOT */
          || ch == 0x30FD /* KATAKANA ITERATION MARK */
          || ch == 0xFE54 /* SMALL SEMICOLON */
          || ch == 0xFE55 /* SMALL COLON */
@@ -609,6 +591,8 @@ get_lbp (unsigned int ch)
          || ch == 0xFF1B /* FULLWIDTH SEMICOLON */
          || ch == 0xFF65 /* HALFWIDTH KATAKANA MIDDLE DOT */
          || ch == 0xFF70 /* HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK */
+         || ch == 0xFF9E /* HALFWIDTH KATAKANA VOICED SOUND MARK */
+         || ch == 0xFF9F /* HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK */
          || (unicode_attributes[ch].category[0] == 'L'
              && unicode_attributes[ch].category[1] == 'm'
              && (unicode_width[ch][0] == 'W'
@@ -648,6 +632,8 @@ get_lbp (unsigned int ch)
          || ch == 0x2033 /* DOUBLE PRIME */
          || ch == 0x2034 /* TRIPLE PRIME */
          || ch == 0x2035 /* REVERSED PRIME */
+         || ch == 0x2036 /* REVERSED DOUBLE PRIME */
+         || ch == 0x2037 /* REVERSED TRIPLE PRIME */
          || ch == 0x20A7 /* PESETA SIGN */
          || ch == 0x2103 /* DEGREE CELSIUS */
          || ch == 0x2109 /* DEGREE FAHRENHEIT */
@@ -661,8 +647,8 @@ get_lbp (unsigned int ch)
       if (ch == 0x002B /* PLUS SIGN */
          || ch == 0x005C /* REVERSE SOLIDUS */
          || ch == 0x00B1 /* PLUS-MINUS SIGN */
-         || ch == 0x2212 /* MINUS SIGN */
          || ch == 0x2116 /* NUMERO SIGN */
+         || ch == 0x2212 /* MINUS SIGN */
          || ch == 0x2213 /* MINUS-OR-PLUS SIGN */
          || (unicode_attributes[ch].category[0] == 'S'
              && unicode_attributes[ch].category[1] == 'c'))
@@ -670,32 +656,78 @@ get_lbp (unsigned int ch)
          attr |= 1 << LBP_PR;
 
       /* complex context (South East Asian) */
-      if ((ch >= 0x0E00 && ch <= 0x0EFF)
-         || (ch >= 0x1000 && ch <= 0x109F)
-         || (ch >= 0x1780 && ch <= 0x17FF))
+      if (((ch >= 0x0E00 && ch <= 0x0EFF)
+          || (ch >= 0x1000 && ch <= 0x109F)
+          || (ch >= 0x1780 && ch <= 0x17FF))
+         && unicode_attributes[ch].category[0] == 'L'
+         && (unicode_attributes[ch].category[1] == 'm'
+             || unicode_attributes[ch].category[1] == 'o'))
        if (!(attr & ((1 << LBP_CM) | (1 << LBP_NS) | (1 << LBP_NU) | (1 << LBP_BA) | (1 << LBP_PR))))
          attr |= 1 << LBP_SA;
 
       /* ideographic */
-      if ((ch >= 0x4E00 && ch <= 0x9FAF) /* CJK Ideograph */
+      if ((ch >= 0x1100 && ch <= 0x115F) /* HANGUL CHOSEONG */
+         || (ch >= 0x2E80 && ch <= 0x2FFF) /* CJK RADICAL, KANGXI RADICAL, IDEOGRAPHIC DESCRIPTION */
+         || ch == 0x3000 /* IDEOGRAPHIC SPACE */
+         || (ch >= 0x3130 && ch <= 0x318F) /* HANGUL LETTER */
          || (ch >= 0x3400 && ch <= 0x4DBF) /* CJK Ideograph Extension A */
+         || (ch >= 0x4E00 && ch <= 0x9FAF) /* CJK Ideograph */
          || (ch >= 0xF900 && ch <= 0xFAFF) /* CJK COMPATIBILITY IDEOGRAPH */
-         || ch == 0x3000 /* IDEOGRAPHIC SPACE */
          || (ch >= 0xAC00 && ch <= 0xD7AF) /* HANGUL SYLLABLE */
-         || (ch >= 0x3130 && ch <= 0x318F) /* HANGUL LETTER */
-         || (ch >= 0x1100 && ch <= 0x115F) /* HANGUL CHOSEONG */
          || (ch >= 0xA000 && ch <= 0xA48C) /* YI SYLLABLE */
-         || (ch >= 0xA490 && ch <= 0xACFF) /* YI RADICAL */
-         || (ch >= 0x2E80 && ch <= 0x2FFF) /* CJK RADICAL, KANGXI RADICAL, IDEOGRAPHIC DESCRIPTION */
+         || (ch >= 0xA490 && ch <= 0xA4C6) /* YI RADICAL */
          || ch == 0xFE62 /* SMALL PLUS SIGN */
          || ch == 0xFE63 /* SMALL HYPHEN-MINUS */
          || ch == 0xFE64 /* SMALL LESS-THAN SIGN */
          || ch == 0xFE65 /* SMALL GREATER-THAN SIGN */
          || ch == 0xFE66 /* SMALL EQUALS SIGN */
          || (ch >= 0xFF10 && ch <= 0xFF19) /* FULLWIDTH DIGIT */
+         || (ch >= 0x20000 && ch <= 0x2A6D6) /* CJK Ideograph Extension B */
+         || (ch >= 0x2F800 && ch <= 0x2FA1D) /* CJK COMPATIBILITY IDEOGRAPH */
          || strstr (unicode_attributes[ch].name, "FULLWIDTH LATIN ") != NULL
          || (ch >= 0x3000 && ch <= 0x33FF
-             && !(attr & ((1 << LBP_CM) | (1 << LBP_NS) | (1 << LBP_OP) | (1 << LBP_CL)))))
+             && !(attr & ((1 << LBP_CM) | (1 << LBP_NS) | (1 << LBP_OP) | (1 << LBP_CL))))
+         /* Extra characters for compatibility with Unicode LineBreak.txt.  */
+         || ch == 0xFE30 /* PRESENTATION FORM FOR VERTICAL TWO DOT LEADER */
+         || ch == 0xFE31 /* PRESENTATION FORM FOR VERTICAL EM DASH */
+         || ch == 0xFE32 /* PRESENTATION FORM FOR VERTICAL EN DASH */
+         || ch == 0xFE33 /* PRESENTATION FORM FOR VERTICAL LOW LINE */
+         || ch == 0xFE34 /* PRESENTATION FORM FOR VERTICAL WAVY LOW LINE */
+         || ch == 0xFE49 /* DASHED OVERLINE */
+         || ch == 0xFE4A /* CENTRELINE OVERLINE */
+         || ch == 0xFE4B /* WAVY OVERLINE */
+         || ch == 0xFE4C /* DOUBLE WAVY OVERLINE */
+         || ch == 0xFE4D /* DASHED LOW LINE */
+         || ch == 0xFE4E /* CENTRELINE LOW LINE */
+         || ch == 0xFE4F /* WAVY LOW LINE */
+         || ch == 0xFE51 /* SMALL IDEOGRAPHIC COMMA */
+         || ch == 0xFE58 /* SMALL EM DASH */
+         || ch == 0xFE5F /* SMALL NUMBER SIGN */
+         || ch == 0xFE60 /* SMALL AMPERSAND */
+         || ch == 0xFE61 /* SMALL ASTERISK */
+         || ch == 0xFE68 /* SMALL REVERSE SOLIDUS */
+         || ch == 0xFE6B /* SMALL COMMERCIAL AT */
+         || ch == 0xFF02 /* FULLWIDTH QUOTATION MARK */
+         || ch == 0xFF03 /* FULLWIDTH NUMBER SIGN */
+         || ch == 0xFF06 /* FULLWIDTH AMPERSAND */
+         || ch == 0xFF07 /* FULLWIDTH APOSTROPHE */
+         || ch == 0xFF0A /* FULLWIDTH ASTERISK */
+         || ch == 0xFF0B /* FULLWIDTH PLUS SIGN */
+         || ch == 0xFF0D /* FULLWIDTH HYPHEN-MINUS */
+         || ch == 0xFF0F /* FULLWIDTH SOLIDUS */
+         || ch == 0xFF1C /* FULLWIDTH LESS-THAN SIGN */
+         || ch == 0xFF1D /* FULLWIDTH EQUALS SIGN */
+         || ch == 0xFF1E /* FULLWIDTH GREATER-THAN SIGN */
+         || ch == 0xFF20 /* FULLWIDTH COMMERCIAL AT */
+         || ch == 0xFF3C /* FULLWIDTH REVERSE SOLIDUS */
+         || ch == 0xFF3E /* FULLWIDTH CIRCUMFLEX ACCENT */
+         || ch == 0xFF3F /* FULLWIDTH LOW LINE */
+         || ch == 0xFF40 /* FULLWIDTH GRAVE ACCENT */
+         || ch == 0xFF5C /* FULLWIDTH VERTICAL LINE */
+         || ch == 0xFF5E /* FULLWIDTH TILDE */
+         || ch == 0xFFE2 /* FULLWIDTH NOT SIGN */
+         || ch == 0xFFE3 /* FULLWIDTH MACRON */
+         || ch == 0xFFE4) /* FULLWIDTH BROKEN BAR */
        {
          /* ambiguous (ideograph) ? */
          if (unicode_width[ch] != NULL
@@ -716,7 +748,191 @@ get_lbp (unsigned int ch)
              && (unicode_attributes[ch].category[1] == 'm'
                  || unicode_attributes[ch].category[1] == 'c'
                  || unicode_attributes[ch].category[1] == 'k'
-                 || unicode_attributes[ch].category[1] == 'o')))
+                 || unicode_attributes[ch].category[1] == 'o'))
+         /* Extra characters for compatibility with Unicode LineBreak.txt.  */
+         || ch == 0x0023 /* NUMBER SIGN */
+         || ch == 0x0026 /* AMPERSAND */
+         || ch == 0x002A /* ASTERISK */
+         || ch == 0x0040 /* COMMERCIAL AT */
+         || ch == 0x005F /* LOW LINE */
+         || ch == 0x00A1 /* INVERTED EXCLAMATION MARK */
+         || ch == 0x00B2 /* SUPERSCRIPT TWO */
+         || ch == 0x00B3 /* SUPERSCRIPT THREE */
+         || ch == 0x00B7 /* MIDDLE DOT */
+         || ch == 0x00B9 /* SUPERSCRIPT ONE */
+         || ch == 0x00BC /* VULGAR FRACTION ONE QUARTER */
+         || ch == 0x00BD /* VULGAR FRACTION ONE HALF */
+         || ch == 0x00BE /* VULGAR FRACTION THREE QUARTERS */
+         || ch == 0x00BF /* INVERTED QUESTION MARK */
+         || ch == 0x037E /* GREEK QUESTION MARK */
+         || ch == 0x0387 /* GREEK ANO TELEIA */
+         || ch == 0x055A /* ARMENIAN APOSTROPHE */
+         || ch == 0x055B /* ARMENIAN EMPHASIS MARK */
+         || ch == 0x055C /* ARMENIAN EXCLAMATION MARK */
+         || ch == 0x055D /* ARMENIAN COMMA */
+         || ch == 0x055E /* ARMENIAN QUESTION MARK */
+         || ch == 0x055F /* ARMENIAN ABBREVIATION MARK */
+         || ch == 0x05BE /* HEBREW PUNCTUATION MAQAF */
+         || ch == 0x05C0 /* HEBREW PUNCTUATION PASEQ */
+         || ch == 0x05C3 /* HEBREW PUNCTUATION SOF PASUQ */
+         || ch == 0x05F3 /* HEBREW PUNCTUATION GERESH */
+         || ch == 0x05F4 /* HEBREW PUNCTUATION GERSHAYIM */
+         || ch == 0x060C /* ARABIC COMMA */
+         || ch == 0x061B /* ARABIC SEMICOLON */
+         || ch == 0x061F /* ARABIC QUESTION MARK */
+         || ch == 0x066A /* ARABIC PERCENT SIGN */
+         || ch == 0x066B /* ARABIC DECIMAL SEPARATOR */
+         || ch == 0x066C /* ARABIC THOUSANDS SEPARATOR */
+         || ch == 0x066D /* ARABIC FIVE POINTED STAR */
+         || ch == 0x06D4 /* ARABIC FULL STOP */
+         || ch == 0x0700 /* SYRIAC END OF PARAGRAPH */
+         || ch == 0x0701 /* SYRIAC SUPRALINEAR FULL STOP */
+         || ch == 0x0702 /* SYRIAC SUBLINEAR FULL STOP */
+         || ch == 0x0703 /* SYRIAC SUPRALINEAR COLON */
+         || ch == 0x0704 /* SYRIAC SUBLINEAR COLON */
+         || ch == 0x0705 /* SYRIAC HORIZONTAL COLON */
+         || ch == 0x0706 /* SYRIAC COLON SKEWED LEFT */
+         || ch == 0x0707 /* SYRIAC COLON SKEWED RIGHT */
+         || ch == 0x0708 /* SYRIAC SUPRALINEAR COLON SKEWED LEFT */
+         || ch == 0x0709 /* SYRIAC SUBLINEAR COLON SKEWED RIGHT */
+         || ch == 0x070A /* SYRIAC CONTRACTION */
+         || ch == 0x070B /* SYRIAC HARKLEAN OBELUS */
+         || ch == 0x070C /* SYRIAC HARKLEAN METOBELUS */
+         || ch == 0x070D /* SYRIAC HARKLEAN ASTERISCUS */
+         || ch == 0x0964 /* DEVANAGARI DANDA */
+         || ch == 0x0965 /* DEVANAGARI DOUBLE DANDA */
+         || ch == 0x0970 /* DEVANAGARI ABBREVIATION SIGN */
+         || ch == 0x09F4 /* BENGALI CURRENCY NUMERATOR ONE */
+         || ch == 0x09F5 /* BENGALI CURRENCY NUMERATOR TWO */
+         || ch == 0x09F6 /* BENGALI CURRENCY NUMERATOR THREE */
+         || ch == 0x09F7 /* BENGALI CURRENCY NUMERATOR FOUR */
+         || ch == 0x09F8 /* BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR */
+         || ch == 0x09F9 /* BENGALI CURRENCY DENOMINATOR SIXTEEN */
+         || ch == 0x0BF0 /* TAMIL NUMBER TEN */
+         || ch == 0x0BF1 /* TAMIL NUMBER ONE HUNDRED */
+         || ch == 0x0BF2 /* TAMIL NUMBER ONE THOUSAND */
+         || ch == 0x0DF4 /* SINHALA PUNCTUATION KUNDDALIYA */
+         || ch == 0x0E4F /* THAI CHARACTER FONGMAN */
+         || ch == 0x0F04 /* TIBETAN MARK INITIAL YIG MGO MDUN MA */
+         || ch == 0x0F05 /* TIBETAN MARK CLOSING YIG MGO SGAB MA */
+         || ch == 0x0F06 /* TIBETAN MARK CARET YIG MGO PHUR SHAD MA */
+         || ch == 0x0F07 /* TIBETAN MARK YIG MGO TSHEG SHAD MA */
+         || ch == 0x0F08 /* TIBETAN MARK SBRUL SHAD */
+         || ch == 0x0F09 /* TIBETAN MARK BSKUR YIG MGO */
+         || ch == 0x0F0A /* TIBETAN MARK BKA- SHOG YIG MGO */
+         || ch == 0x0F0D /* TIBETAN MARK SHAD */
+         || ch == 0x0F0E /* TIBETAN MARK NYIS SHAD */
+         || ch == 0x0F0F /* TIBETAN MARK TSHEG SHAD */
+         || ch == 0x0F10 /* TIBETAN MARK NYIS TSHEG SHAD */
+         || ch == 0x0F11 /* TIBETAN MARK RIN CHEN SPUNGS SHAD */
+         || ch == 0x0F12 /* TIBETAN MARK RGYA GRAM SHAD */
+         || ch == 0x0F2A /* TIBETAN DIGIT HALF ONE */
+         || ch == 0x0F2B /* TIBETAN DIGIT HALF TWO */
+         || ch == 0x0F2C /* TIBETAN DIGIT HALF THREE */
+         || ch == 0x0F2D /* TIBETAN DIGIT HALF FOUR */
+         || ch == 0x0F2E /* TIBETAN DIGIT HALF FIVE */
+         || ch == 0x0F2F /* TIBETAN DIGIT HALF SIX */
+         || ch == 0x0F30 /* TIBETAN DIGIT HALF SEVEN */
+         || ch == 0x0F31 /* TIBETAN DIGIT HALF EIGHT */
+         || ch == 0x0F32 /* TIBETAN DIGIT HALF NINE */
+         || ch == 0x0F33 /* TIBETAN DIGIT HALF ZERO */
+         || ch == 0x0F85 /* TIBETAN MARK PALUTA */
+         || ch == 0x104A /* MYANMAR SIGN LITTLE SECTION */
+         || ch == 0x104B /* MYANMAR SIGN SECTION */
+         || ch == 0x104C /* MYANMAR SYMBOL LOCATIVE */
+         || ch == 0x104D /* MYANMAR SYMBOL COMPLETED */
+         || ch == 0x104E /* MYANMAR SYMBOL AFOREMENTIONED */
+         || ch == 0x104F /* MYANMAR SYMBOL GENITIVE */
+         || ch == 0x10FB /* GEORGIAN PARAGRAPH SEPARATOR */
+         || ch == 0x1362 /* ETHIOPIC FULL STOP */
+         || ch == 0x1363 /* ETHIOPIC COMMA */
+         || ch == 0x1364 /* ETHIOPIC SEMICOLON */
+         || ch == 0x1365 /* ETHIOPIC COLON */
+         || ch == 0x1366 /* ETHIOPIC PREFACE COLON */
+         || ch == 0x1367 /* ETHIOPIC QUESTION MARK */
+         || ch == 0x1368 /* ETHIOPIC PARAGRAPH SEPARATOR */
+         || ch == 0x1372 /* ETHIOPIC NUMBER TEN */
+         || ch == 0x1373 /* ETHIOPIC NUMBER TWENTY */
+         || ch == 0x1374 /* ETHIOPIC NUMBER THIRTY */
+         || ch == 0x1375 /* ETHIOPIC NUMBER FORTY */
+         || ch == 0x1376 /* ETHIOPIC NUMBER FIFTY */
+         || ch == 0x1377 /* ETHIOPIC NUMBER SIXTY */
+         || ch == 0x1378 /* ETHIOPIC NUMBER SEVENTY */
+         || ch == 0x1379 /* ETHIOPIC NUMBER EIGHTY */
+         || ch == 0x137A /* ETHIOPIC NUMBER NINETY */
+         || ch == 0x137B /* ETHIOPIC NUMBER HUNDRED */
+         || ch == 0x137C /* ETHIOPIC NUMBER TEN THOUSAND */
+         || ch == 0x166D /* CANADIAN SYLLABICS CHI SIGN */
+         || ch == 0x166E /* CANADIAN SYLLABICS FULL STOP */
+         || ch == 0x16EB /* RUNIC SINGLE PUNCTUATION */
+         || ch == 0x16EC /* RUNIC MULTIPLE PUNCTUATION */
+         || ch == 0x16ED /* RUNIC CROSS PUNCTUATION */
+         || ch == 0x16EE /* RUNIC ARLAUG SYMBOL */
+         || ch == 0x16EF /* RUNIC TVIMADUR SYMBOL */
+         || ch == 0x16F0 /* RUNIC BELGTHOR SYMBOL */
+         || ch == 0x17DC /* KHMER SIGN AVAKRAHASANYA */
+         || ch == 0x1800 /* MONGOLIAN BIRGA */
+         || ch == 0x1801 /* MONGOLIAN ELLIPSIS */
+         || ch == 0x1802 /* MONGOLIAN COMMA */
+         || ch == 0x1803 /* MONGOLIAN FULL STOP */
+         || ch == 0x1804 /* MONGOLIAN COLON */
+         || ch == 0x1805 /* MONGOLIAN FOUR DOTS */
+         || ch == 0x1807 /* MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER */
+         || ch == 0x1808 /* MONGOLIAN MANCHU COMMA */
+         || ch == 0x1809 /* MONGOLIAN MANCHU FULL STOP */
+         || ch == 0x180A /* MONGOLIAN NIRUGU */
+         || ch == 0x2015 /* HORIZONTAL BAR */
+         || ch == 0x2016 /* DOUBLE VERTICAL LINE */
+         || ch == 0x2017 /* DOUBLE LOW LINE */
+         || ch == 0x2020 /* DAGGER */
+         || ch == 0x2021 /* DOUBLE DAGGER */
+         || ch == 0x2022 /* BULLET */
+         || ch == 0x2023 /* TRIANGULAR BULLET */
+         || ch == 0x2038 /* CARET */
+         || ch == 0x203B /* REFERENCE MARK */
+         || ch == 0x203D /* INTERROBANG */
+         || ch == 0x203E /* OVERLINE */
+         || ch == 0x203F /* UNDERTIE */
+         || ch == 0x2040 /* CHARACTER TIE */
+         || ch == 0x2041 /* CARET INSERTION POINT */
+         || ch == 0x2042 /* ASTERISM */
+         || ch == 0x2043 /* HYPHEN BULLET */
+         || ch == 0x2048 /* QUESTION EXCLAMATION MARK */
+         || ch == 0x2049 /* EXCLAMATION QUESTION MARK */
+         || ch == 0x204A /* TIRONIAN SIGN ET */
+         || ch == 0x204B /* REVERSED PILCROW SIGN */
+         || ch == 0x204C /* BLACK LEFTWARDS BULLET */
+         || ch == 0x204D /* BLACK RIGHTWARDS BULLET */
+         || ch == 0x2070 /* SUPERSCRIPT ZERO */
+         || ch == 0x2074 /* SUPERSCRIPT FOUR */
+         || ch == 0x2075 /* SUPERSCRIPT FIVE */
+         || ch == 0x2076 /* SUPERSCRIPT SIX */
+         || ch == 0x2077 /* SUPERSCRIPT SEVEN */
+         || ch == 0x2078 /* SUPERSCRIPT EIGHT */
+         || ch == 0x2079 /* SUPERSCRIPT NINE */
+         || ch == 0x2080 /* SUBSCRIPT ZERO */
+         || ch == 0x2081 /* SUBSCRIPT ONE */
+         || ch == 0x2082 /* SUBSCRIPT TWO */
+         || ch == 0x2083 /* SUBSCRIPT THREE */
+         || ch == 0x2084 /* SUBSCRIPT FOUR */
+         || ch == 0x2085 /* SUBSCRIPT FIVE */
+         || ch == 0x2086 /* SUBSCRIPT SIX */
+         || ch == 0x2087 /* SUBSCRIPT SEVEN */
+         || ch == 0x2088 /* SUBSCRIPT EIGHT */
+         || ch == 0x2089 /* SUBSCRIPT NINE */
+         || (ch >= 0x2153 && ch <= 0x215E) /* VULGAR FRACTION */
+         || ch == 0x215F /* FRACTION NUMERATOR ONE */
+         || (ch >= 0x2160 && ch <= 0x2183) /* ROMAN NUMERAL */
+         || (ch >= 0x2460 && ch <= 0x2473) /* CIRCLED NUMBER */
+         || (ch >= 0x2474 && ch <= 0x2487) /* PARENTHESIZED NUMBER */
+         || (ch >= 0x2488 && ch <= 0x249B) /* NUMBER FULL STOP */
+         || ch == 0x24EA /* CIRCLED DIGIT ZERO */
+         || (ch >= 0x2776 && ch <= 0x2793) /* DINGBAT CIRCLED DIGIT */
+         || ch == 0x10320 /* OLD ITALIC NUMERAL ONE */
+         || ch == 0x10321 /* OLD ITALIC NUMERAL FIVE */
+         || ch == 0x10322 /* OLD ITALIC NUMERAL TEN */
+         || ch == 0x10323 /* OLD ITALIC NUMERAL FIFTY */
+         || ch == 0x1034A) /* GOTHIC LETTER NINE HUNDRED */
        if (!(attr & ((1 << LBP_CM) | (1 << LBP_NS) | (1 << LBP_ID) | (1 << LBP_BA) | (1 << LBP_BB) | (1 << LBP_PO) | (1 << LBP_PR) | (1 << LBP_SA) | (1 << LBP_CB))))
          {
            /* ambiguous (alphabetic) ? */
@@ -741,14 +957,14 @@ debug_output_lbp (FILE *stream)
 {
   unsigned int i;
 
-  for (i = 0; i < 0x10000; i++)
+  for (i = 0; i < 0x110000; i++)
     {
       int attr = get_lbp (i);
       if (attr != 1 << LBP_XX)
        {
          fprintf (stream, "0x%04X", i);
 #define PRINT_BIT(attr,bit) \
-  if (attr & (1 << bit)) fprintf (stream, " " ## #bit);
+  if (attr & (1 << bit)) fprintf (stream, " " #bit);
          PRINT_BIT(attr,LBP_BK);
          PRINT_BIT(attr,LBP_CM);
          PRINT_BIT(attr,LBP_ZW);
@@ -781,6 +997,205 @@ debug_output_lbp (FILE *stream)
     }
 }
 
+static void
+debug_output_tables (const char *filename)
+{
+  FILE *stream;
+
+  stream = fopen (filename, "w");
+  if (stream == NULL)
+    {
+      fprintf (stderr, "cannot open '%s' for writing\n", filename);
+      exit (1);
+    }
+
+  debug_output_lbp (stream);
+
+  if (ferror (stream) || fclose (stream))
+    {
+      fprintf (stderr, "error writing to '%s'\n", filename);
+      exit (1);
+    }
+}
+
+/* The line breaking property from the LineBreak.txt file.  */
+int unicode_org_lbp[0x110000];
+
+/* Stores in unicode_org_lbp[] the line breaking property from the
+   LineBreak.txt file.  */
+static void
+fill_org_lbp (const char *linebreak_filename)
+{
+  unsigned int i, j;
+  FILE *stream;
+  char field0[FIELDLEN];
+  char field1[FIELDLEN];
+  char field2[FIELDLEN];
+  int lineno = 0;
+
+  for (i = 0; i < 0x110000; i++)
+    unicode_org_lbp[i] = LBP_XX;
+
+  stream = fopen (linebreak_filename, "r");
+  if (stream == NULL)
+    {
+      fprintf (stderr, "error during fopen of '%s'\n", linebreak_filename);
+      exit (1);
+    }
+
+  for (;;)
+    {
+      int n;
+      int c;
+      int value;
+
+      lineno++;
+      c = getc (stream);
+      if (c == EOF)
+       break;
+      if (c == '#')
+       {
+         do c = getc (stream); while (c != EOF && c != '\n');
+         continue;
+       }
+      ungetc (c, stream);
+      n = getfield (stream, field0, ';');
+      n += getfield (stream, field1, ' ');
+      n += getfield (stream, field2, '\n');
+      if (n == 0)
+       break;
+      if (n != 3)
+       {
+         fprintf (stderr, "short line in '%s':%d\n", linebreak_filename,
+                  lineno);
+         exit (1);
+       }
+#define TRY(bit) else if (strcmp (field1, #bit + 4) == 0) value = bit;
+      if (false) {}
+      TRY(LBP_BK)
+      TRY(LBP_CM)
+      TRY(LBP_ZW)
+      TRY(LBP_IN)
+      TRY(LBP_GL)
+      TRY(LBP_CB)
+      TRY(LBP_SP)
+      TRY(LBP_BA)
+      TRY(LBP_BB)
+      TRY(LBP_B2)
+      TRY(LBP_HY)
+      TRY(LBP_NS)
+      TRY(LBP_OP)
+      TRY(LBP_CL)
+      TRY(LBP_QU)
+      TRY(LBP_EX)
+      TRY(LBP_ID)
+      TRY(LBP_NU)
+      TRY(LBP_IS)
+      TRY(LBP_SY)
+      TRY(LBP_AL)
+      TRY(LBP_PR)
+      TRY(LBP_PO)
+      TRY(LBP_SA)
+      TRY(LBP_XX)
+      TRY(LBP_AI)
+#undef TRY
+      else if (strcmp (field1, "LF") == 0) value = LBP_BK;
+      else if (strcmp (field1, "CR") == 0) value = LBP_BK;
+      else if (strcmp (field1, "SG") == 0) value = LBP_XX;
+      else
+       {
+         fprintf (stderr, "unknown property value \"%s\" in '%s':%d\n",
+                  field1, linebreak_filename, lineno);
+         exit (1);
+       }
+      i = strtoul (field0, NULL, 16);
+      if (strstr (field0, "..") != NULL)
+       {
+         /* Deal with a range.  */
+         j = strtoul (strstr (field0, "..") + 2, NULL, 16);
+         for (; i <= j; i++)
+           unicode_org_lbp[i] = value;
+       }
+      else
+       {
+         /* Single character line.  */
+         unicode_org_lbp[i] = value;
+       }
+    }
+  if (ferror (stream) || fclose (stream))
+    {
+      fprintf (stderr, "error reading from '%s'\n", linebreak_filename);
+      exit (1);
+    }
+}
+
+/* Output the line breaking properties in a human readable format.  */
+static void
+debug_output_org_lbp (FILE *stream)
+{
+  unsigned int i;
+
+  for (i = 0; i < 0x110000; i++)
+    {
+      int attr = unicode_org_lbp[i];
+      if (attr != LBP_XX)
+       {
+         fprintf (stream, "0x%04X", i);
+#define PRINT_BIT(attr,bit) \
+  if (attr == bit) fprintf (stream, " " #bit);
+         PRINT_BIT(attr,LBP_BK);
+         PRINT_BIT(attr,LBP_CM);
+         PRINT_BIT(attr,LBP_ZW);
+         PRINT_BIT(attr,LBP_IN);
+         PRINT_BIT(attr,LBP_GL);
+         PRINT_BIT(attr,LBP_CB);
+         PRINT_BIT(attr,LBP_SP);
+         PRINT_BIT(attr,LBP_BA);
+         PRINT_BIT(attr,LBP_BB);
+         PRINT_BIT(attr,LBP_B2);
+         PRINT_BIT(attr,LBP_HY);
+         PRINT_BIT(attr,LBP_NS);
+         PRINT_BIT(attr,LBP_OP);
+         PRINT_BIT(attr,LBP_CL);
+         PRINT_BIT(attr,LBP_QU);
+         PRINT_BIT(attr,LBP_EX);
+         PRINT_BIT(attr,LBP_ID);
+         PRINT_BIT(attr,LBP_NU);
+         PRINT_BIT(attr,LBP_IS);
+         PRINT_BIT(attr,LBP_SY);
+         PRINT_BIT(attr,LBP_AL);
+         PRINT_BIT(attr,LBP_PR);
+         PRINT_BIT(attr,LBP_PO);
+         PRINT_BIT(attr,LBP_SA);
+         PRINT_BIT(attr,LBP_XX);
+         PRINT_BIT(attr,LBP_AI);
+#undef PRINT_BIT
+         fprintf (stream, "\n");
+       }
+    }
+}
+
+static void
+debug_output_org_tables (const char *filename)
+{
+  FILE *stream;
+
+  stream = fopen (filename, "w");
+  if (stream == NULL)
+    {
+      fprintf (stderr, "cannot open '%s' for writing\n", filename);
+      exit (1);
+    }
+
+  debug_output_org_lbp (stream);
+
+  if (ferror (stream) || fclose (stream))
+    {
+      fprintf (stderr, "error writing to '%s'\n", filename);
+      exit (1);
+    }
+}
+
 /* Construction of sparse 3-level tables.  */
 #define TABLE lbp_table
 #define ELEMENT unsigned char
@@ -800,7 +1215,7 @@ output_lbp (FILE *stream)
   t.q = 9;
   lbp_table_init (&t);
 
-  for (i = 0; i < 0x10000; i++)
+  for (i = 0; i < 0x110000; i++)
     {
       int attr = get_lbp (i);
 
@@ -841,21 +1256,29 @@ output_lbp (FILE *stream)
   fprintf (stream, "  }\n");
   fprintf (stream, "lbrkprop =\n");
   fprintf (stream, "{\n");
-  fprintf (stream, "  { ");
+  fprintf (stream, "  {");
   for (i = 0; i < t.level1_size; i++)
-    fprintf (stream, "%d%s ",
-            (((uint32_t *) (t.result + level1_offset))[i] - level2_offset) / sizeof (uint32_t),
-            (i+1 < t.level1_size ? "," : ""));
-  fprintf (stream, "},\n");
+    {
+      uint32_t offset;
+      if (i > 0 && (i % 8) == 0)
+       fprintf (stream, "\n   ");
+      offset = ((uint32_t *) (t.result + level1_offset))[i];
+      fprintf (stream, " %5d%s",
+              offset == 0 ? -1 : (offset - level2_offset) / sizeof (uint32_t),
+              (i+1 < t.level1_size ? "," : ""));
+    }
+  fprintf (stream, " },\n");
   fprintf (stream, "  {");
   if (t.level2_size << t.q > 8)
     fprintf (stream, "\n   ");
   for (i = 0; i < t.level2_size << t.q; i++)
     {
+      uint32_t offset;
       if (i > 0 && (i % 8) == 0)
        fprintf (stream, "\n   ");
+      offset = ((uint32_t *) (t.result + level2_offset))[i];
       fprintf (stream, " %5d%s",
-              (((uint32_t *) (t.result + level2_offset))[i] - level3_offset) / sizeof (uint8_t),
+              offset == 0 ? -1 : (offset - level3_offset) / sizeof (uint8_t),
               (i+1 < t.level2_size << t.q ? "," : ""));
     }
   if (t.level2_size << t.q > 8)
@@ -912,27 +1335,6 @@ output_lbp (FILE *stream)
   fprintf (stream, "};\n");
 }
 
-static void
-debug_output_tables (const char *filename)
-{
-  FILE *stream;
-
-  stream = fopen (filename, "w");
-  if (stream == NULL)
-    {
-      fprintf (stderr, "cannot open '%s' for writing\n", filename);
-      exit (1);
-    }
-
-  debug_output_lbp (stream);
-
-  if (ferror (stream) || fclose (stream))
-    {
-      fprintf (stderr, "error writing to '%s'\n", filename);
-      exit (1);
-    }
-}
-
 static void
 output_tables (const char *filename, const char *version)
 {
@@ -962,9 +1364,9 @@ output_tables (const char *filename, const char *version)
 int
 main (int argc, char * argv[])
 {
-  if (argc != 5)
+  if (argc != 6)
     {
-      fprintf (stderr, "Usage: %s UnicodeData.txt PropList.txt EastAsianWidth.txt version\n",
+      fprintf (stderr, "Usage: %s UnicodeData.txt Combining.txt EastAsianWidth.txt LineBreak.txt version\n",
               argv[0]);
       exit (1);
     }
@@ -972,10 +1374,12 @@ main (int argc, char * argv[])
   fill_attributes (argv[1]);
   fill_combining (argv[2]);
   fill_width (argv[3]);
+  fill_org_lbp (argv[4]);
 
   debug_output_tables ("lbrkprop.txt");
+  debug_output_org_tables ("lbrkprop_org.txt");
 
-  output_tables ("lbrkprop.h", argv[4]);
+  output_tables ("lbrkprop.h", argv[5]);
 
   return 0;
 }
index 1a9a220ca7f6c15c0ef66e11de45b12de38b2697..7f029a56da2747d6768414330f27abdfeb7f91dc 100644 (file)
@@ -1,34 +1,35 @@
 /* Line breaking properties of Unicode characters.  */
-/* Generated automatically by gen-lbrkprop for Unicode 3.0.  */
+/* Generated automatically by gen-lbrkprop for Unicode 3.1.0.  */
 
 #define lbrkprop_header_0 16
-#define lbrkprop_header_1 1
+#define lbrkprop_header_1 15
 #define lbrkprop_header_2 7
 #define lbrkprop_header_3 511
 #define lbrkprop_header_4 127
 static const
 struct
   {
-    int level1[1];
-    int level2[1 << 9];
-    unsigned char level3[87 << 7];
+    int level1[15];
+    int level2[4 << 9];
+    unsigned char level3[100 << 7];
   }
 lbrkprop =
 {
-  { 0 },
+  {     0,   512,  1024,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,  1536 },
   {
         0,   128,   256,   384,   512,   640,   768,   896,
      1024,  1152,  1280,  1408,  1536,  1664,  1792,  1920,
-    -2072, -2072,  2048,  2176,  2304,  2432,  2560,  2688,
+       -1,    -1,  2048,  2176,  2304,  2432,  2560,  2688,
      2816,  2944,  3072,  3200,  3328,  3456,  3584,  3712,
      3840,  3968,  4096,  4224,  4352,  4480,  4608,  4736,
-     4864,  4992,  4992,  4992,  5120,  5248, -2072,  5376,
-     5504,  5632, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072,  4992,  5760,  5888,  6016,
+     4864,  4992,  4992,  4992,  5120,  5248,    -1,  5376,
+     5504,  5632,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,  4992,  5760,  5888,  6016,
      6144,  6272,  6400,  6528,  6656,  6784,  6912,  7040,
-     7168,  7296,  7424,  7552,  7680, -2072,  7808,  7936,
-     4992,  4992, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072,  8064,  8192,  8320,
+     7168,  7296,  7424,  7552,  7680,    -1,  7808,  7936,
+     4992,  4992,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,  8064,  8192,  8320,
      8448,  8576,  8704,  8832,  8960,  9088,  9216,  9344,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
@@ -58,8 +59,8 @@ lbrkprop =
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  9600,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
-     8192,  9728, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
+     8192,  9728,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
@@ -71,30 +72,222 @@ lbrkprop =
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
      8192,  8192,  8192,  8192,  8192,  8192,  8192,  9856,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072, -2072, -2072, -2072, -2072, -2072, -2072,
-    -2072, -2072,  8192,  8192,  9984, -2072, 10112, 10240,
-     4992,  4992, 10368, 10496, 10624, 10752, 10880, 11008
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,  8192,  8192,  9984,    -1, 10112, 10240,
+     4992,  4992, 10368, 10496, 10624, 10752, 10880, 11008,
+       -1,    -1,    -1,    -1,    -1,    -1, 11136,    -1,
+    11264,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     4992, 11392, 11520, 11648,    -1,    -1,    -1,    -1,
+    11776, 11904, 12032,  4992,  4992, 12160,  4992, 12288,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192,  8192,  8192,  8192,
+     8192,  8192,  8192,  8192,  8192, 12416,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     8192,  8192,  8192,  8192, 12544,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    12672,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1
   },
   {
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_BA, LBP_BK, LBP_CM, LBP_BK, LBP_BK, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_SP, LBP_EX, LBP_QU, LBP_XX, LBP_PR, LBP_PO, LBP_XX, LBP_QU,
-    LBP_OP, LBP_CL, LBP_XX, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY,
+    LBP_SP, LBP_EX, LBP_QU, LBP_AL, LBP_PR, LBP_PO, LBP_AL, LBP_QU,
+    LBP_OP, LBP_CL, LBP_AL, LBP_PR, LBP_IS, LBP_HY, LBP_IS, LBP_SY,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_IS, LBP_IS, LBP_AL, LBP_AL, LBP_AL, LBP_EX,
-    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_PR, LBP_CL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -103,10 +296,10 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_GL, LBP_XX, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI,
+    LBP_GL, LBP_AI, LBP_PO, LBP_PR, LBP_PR, LBP_PR, LBP_AL, LBP_AI,
     LBP_AI, LBP_AL, LBP_AI, LBP_QU, LBP_AL, LBP_BA, LBP_AL, LBP_AL,
-    LBP_PO, LBP_PR, LBP_XX, LBP_XX, LBP_BB, LBP_AL, LBP_AI, LBP_XX,
-    LBP_AI, LBP_XX, LBP_AI, LBP_QU, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_PO, LBP_PR, LBP_AI, LBP_AI, LBP_BB, LBP_AL, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_QU, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AI,
@@ -194,8 +387,8 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
     LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
@@ -209,7 +402,7 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -254,7 +447,7 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -266,19 +459,19 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM,
-    LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM,
+    LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
     LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -288,7 +481,7 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
     LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -301,14 +494,14 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_CM, LBP_CM,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM,
     LBP_CM, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_CM,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_CM,
     LBP_AL, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -351,9 +544,9 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX,
     LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
@@ -369,8 +562,8 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
     LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL,
     LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -433,7 +626,7 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
@@ -497,7 +690,7 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
     LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
@@ -508,7 +701,7 @@ lbrkprop =
     LBP_SA, LBP_CM, LBP_SA, LBP_SA, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_PR,
     LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_SA,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_NS, LBP_NS, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
@@ -531,13 +724,13 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_BA, LBP_GL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_BA, LBP_GL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_CM, LBP_AL, LBP_CM,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_AL, LBP_CM,
     LBP_AL, LBP_CM, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_CM, LBP_CM,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -547,7 +740,7 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_CM, LBP_CM,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
@@ -572,7 +765,7 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
@@ -594,7 +787,7 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
@@ -671,10 +864,10 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_BA, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
-    LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
@@ -736,7 +929,7 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_BA, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -752,8 +945,8 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
-    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
     LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA, LBP_SA,
@@ -766,13 +959,13 @@ lbrkprop =
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_NS, LBP_BA, LBP_NS, LBP_NS,
-    LBP_NS, LBP_NS, LBP_NS, LBP_PR, LBP_SA, LBP_XX, LBP_XX, LBP_XX,
+    LBP_NS, LBP_NS, LBP_NS, LBP_PR, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_BB, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_BB, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX,
     LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
     LBP_NU, LBP_NU, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -853,22 +1046,22 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
     LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_BA, LBP_GL,
     LBP_BA, LBP_BA, LBP_BA, LBP_ZW, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_BA, LBP_GL, LBP_XX, LBP_XX, LBP_B2, LBP_XX, LBP_XX, LBP_XX,
+    LBP_BA, LBP_GL, LBP_BA, LBP_BA, LBP_B2, LBP_AI, LBP_AI, LBP_AL,
     LBP_QU, LBP_QU, LBP_OP, LBP_QU, LBP_QU, LBP_QU, LBP_OP, LBP_QU,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_IN, LBP_IN, LBP_IN, LBP_BA,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_IN, LBP_IN, LBP_IN, LBP_BA,
     LBP_BK, LBP_BK, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_GL,
-    LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_XX, LBP_XX,
-    LBP_XX, LBP_QU, LBP_QU, LBP_XX, LBP_NS, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NS, LBP_OP, LBP_CL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO, LBP_PO,
+    LBP_AL, LBP_QU, LBP_QU, LBP_AI, LBP_NS, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_NS, LBP_OP, LBP_CL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX,
+    LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_AI,
+    LBP_AL, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_OP, LBP_CL, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PR, LBP_PO,
@@ -893,13 +1086,13 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AI, LBP_AI, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AI, LBP_AL, LBP_AL, LBP_AI, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -991,14 +1184,14 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
+    LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
@@ -1008,7 +1201,7 @@ lbrkprop =
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
-    LBP_AI, LBP_AI, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AI, LBP_AI, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI, LBP_AI,
@@ -1073,11 +1266,11 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
     LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -1417,14 +1610,14 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_OP, LBP_CL, LBP_OP,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_CL, LBP_OP,
     LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP,
     LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_CL, LBP_XX, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX,
-    LBP_XX, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_XX,
-    LBP_XX, LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
-    LBP_XX, LBP_PR, LBP_PO, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_CL, LBP_ID, LBP_CL, LBP_XX, LBP_NS, LBP_NS, LBP_EX, LBP_EX,
+    LBP_ID, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_OP, LBP_CL, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
     LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -1443,18 +1636,18 @@ lbrkprop =
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_GL,
-    LBP_XX, LBP_EX, LBP_XX, LBP_XX, LBP_PR, LBP_PO, LBP_XX, LBP_XX,
-    LBP_OP, LBP_CL, LBP_XX, LBP_AL, LBP_CL, LBP_XX, LBP_CL, LBP_XX,
+    LBP_XX, LBP_EX, LBP_ID, LBP_ID, LBP_PR, LBP_PO, LBP_ID, LBP_ID,
+    LBP_OP, LBP_CL, LBP_ID, LBP_ID, LBP_CL, LBP_ID, LBP_CL, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_ID, LBP_ID, LBP_ID, LBP_EX,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_NS, LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_EX,
-    LBP_XX, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_XX, LBP_CL, LBP_AL, LBP_XX,
-    LBP_AL, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
     LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
-    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_AL, LBP_CL, LBP_AL, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_OP, LBP_ID, LBP_CL, LBP_ID, LBP_XX,
     LBP_XX, LBP_CL, LBP_OP, LBP_CL, LBP_CL, LBP_NS, LBP_AL, LBP_NS,
     LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS, LBP_NS,
     LBP_NS, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
@@ -1471,9 +1664,217 @@ lbrkprop =
     LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX,
-    LBP_PO, LBP_PR, LBP_AL, LBP_AL, LBP_AL, LBP_PR, LBP_PR, LBP_XX,
+    LBP_PO, LBP_PR, LBP_ID, LBP_ID, LBP_ID, LBP_PR, LBP_PR, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
     LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX,
     LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
-    LBP_XX, LBP_CM, LBP_CM, LBP_CM, LBP_CB, LBP_AI, LBP_XX, LBP_XX
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_XX, LBP_XX, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_XX,
+    LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_AL, LBP_XX,
+    LBP_XX, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_XX, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL, LBP_AL,
+    LBP_AL, LBP_AL, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU, LBP_NU,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID,
+    LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_ID, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_CM, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX, LBP_XX,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM,
+    LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM, LBP_CM
   }
 };
index 02f4ae76c46acebd07273249a5f3e61a6b00958a..1edc69f3aa40a741a64e3d2154b9dfbd5ccaeee4 100644 (file)
@@ -1,5 +1,5 @@
 /* linebreak.c - line breaking of Unicode strings
-   Copyright (C) 2001 Free Software Foundation, Inc.
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
    Written by Bruno Haible <haible@clisp.cons.org>, 2001.
 
 This program is free software; you can redistribute it and/or modify
@@ -230,7 +230,7 @@ int uc_width PARAMS ((unsigned int uc, const char *encoding));
  * Control characters are also marked non-spacing here, because they are not
  * printable. Zero width characters are also marked non-spacing here.
  */
-static const unsigned char nonspacing_table_data[15*64] = {
+static const unsigned char nonspacing_table_data[16*64] = {
   /* 0x0000-0x01ff */
   0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
@@ -365,9 +365,18 @@ static const unsigned char nonspacing_table_data[15*64] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e  /* 0xffc0-0xffff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
+  /* 0x1d000-0x1d1ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, 0xf8, /* 0x1d140-0x1d17f */
+  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d1c0-0x1d1ff */
 };
-static const signed char nonspacing_table_ind[128] = {
+static const signed char nonspacing_table_ind[240] = {
    0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
    8, -1, -1,  9, 10, -1, -1, -1, /* 0x1000-0x1fff */
   11, -1, -1, -1, -1, -1, -1, -1, /* 0x2000-0x2fff */
@@ -383,7 +392,21 @@ static const signed char nonspacing_table_ind[128] = {
   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
   -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
-  -1, -1, -1, -1, -1, 13, -1, 14  /* 0xf000-0xffff */
+  -1, -1, -1, -1, -1, 13, -1, 14, /* 0xf000-0xffff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x10000-0x10fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
+  15, -1, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
 };
 
 /* Determine number of column positions required for UC. */
@@ -392,18 +415,18 @@ uc_width (uc, encoding)
      unsigned int uc;
      const char *encoding;
 {
-  /* Test for non-spacing or control character. */
-  if ((uc >> 9) < 128)
+  /* Test for non-spacing or control character.  */
+  if ((uc >> 9) < 240)
     {
       int ind = nonspacing_table_ind[uc >> 9];
       if (ind >= 0)
-        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
-          {
-            if (uc > 0 && uc < 0x100)
-              return -1;
-            else
-              return 0;
-          }
+       if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
+         {
+           if (uc > 0 && uc < 0x100)
+             return -1;
+           else
+             return 0;
+         }
     }
   /* Test for double-width character.
    * Generated from "grep '^....;[WF]' EastAsianWidth.txt"
@@ -411,16 +434,18 @@ uc_width (uc, encoding)
    */
   if (uc >= 0x1100
       && ((uc < 0x1160) /* Hangul Jamo */
-          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
-              && !((uc & ~0x0011) == 0x300a || uc == 0x303f))
-          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
-          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
-          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
-          || (uc >= 0xff00 && uc < 0xff60) /* Fullwidth Forms */
-          || (uc >= 0xffe0 && uc < 0xffe7)))
+         || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
+             && !((uc & ~0x0013) == 0x3008
+                  || (uc & ~0x0001) == 0x3014
+                  || uc == 0x303f))
+         || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
+         || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
+         || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
+         || (uc >= 0xff00 && uc < 0xff60) /* Fullwidth Forms */
+         || (uc >= 0xffe0 && uc < 0xffe7)))
     return 2;
   /* In ancient CJK encodings, Cyrillic and most other characters are
-     double-width as well. */
+     double-width as well.  */
   if (uc >= 0x00A1 && uc < 0xFF60 && uc != 0x20A9
       && is_cjk_encoding (encoding))
     return 2;