Commit a3046567bc805de5d751c0e7f097038395037a2d

Werner Lemberg 2015-09-28T09:45:56

[autofit] Add support for Lao script. Thanks to Danh Hong <danhhong@gmail.com> for guidance with blue zone characters! * src/autofit/afblue.dat: Add blue zone data for Lao. * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated. * src/autofit/afscript.h: Add Lao standard characters. * src/autofit/afranges.c: Add Lao data. * src/autofit/afstyles.h: Add Lao data.

diff --git a/ChangeLog b/ChangeLog
index 9012473..e294f20 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2015-09-28  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Add support for Lao script.
+
+	Thanks to Danh Hong <danhhong@gmail.com> for guidance with blue zone
+	characters!
+
+	* src/autofit/afblue.dat: Add blue zone data for Lao.
+
+	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+	* src/autofit/afscript.h: Add Lao standard characters.
+
+	* src/autofit/afranges.c: Add Lao data.
+
+	* src/autofit/afstyles.h: Add Lao data.
+
 2015-09-27  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
  
 	[base] Fix a leak by broken sfnt-PS or resource fork (#46028).
diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
index 437fa65..b871e0c 100644
--- a/src/autofit/afblue.c
+++ b/src/autofit/afblue.c
@@ -64,6 +64,16 @@
     '\0',
     '\xD7', '\xA7', '\xD7', '\x9A', '\xD7', '\x9F', '\xD7', '\xA3', '\xD7', '\xA5',  /* קךןףץ */
     '\0',
+    '\xE0', '\xBA', '\xB2', '\xE0', '\xBA', '\x94', '\xE0', '\xBA', '\xAD', '\xE0', '\xBA', '\xA1', '\xE0', '\xBA', '\xA5', '\xE0', '\xBA', '\xA7', '\xE0', '\xBA', '\xA3', '\xE0', '\xBA', '\x87',  /* າ ດ ອ ມ ລ ວ ຣ ງ */
+    '\0',
+    '\xE0', '\xBA', '\xB2', '\xE0', '\xBA', '\xAD', '\xE0', '\xBA', '\x9A', '\xE0', '\xBA', '\x8D', '\xE0', '\xBA', '\xA3', '\xE0', '\xBA', '\xAE', '\xE0', '\xBA', '\xA7', '\xE0', '\xBA', '\xA2',  /* າ ອ ບ ຍ ຣ ຮ ວ ຢ */
+    '\0',
+    '\xE0', '\xBA', '\x9B', '\xE0', '\xBA', '\xA2', '\xE0', '\xBA', '\x9F', '\xE0', '\xBA', '\x9D',  /* ປ ຢ ຟ ຝ */
+    '\0',
+    '\xE0', '\xBB', '\x82', '\xE0', '\xBB', '\x84', '\xE0', '\xBB', '\x83',  /* ໂ ໄ ໃ */
+    '\0',
+    '\xE0', '\xBA', '\x87', '\xE0', '\xBA', '\x8A', '\xE0', '\xBA', '\x96', '\xE0', '\xBA', '\xBD', '\xE0', '\xBB', '\x86', '\xE0', '\xBA', '\xAF',  /* ງ ຊ ຖ ຽ ໆ ຯ */
+    '\0',
     'T', 'H', 'E', 'Z', 'O', 'C', 'Q', 'S',  /* THEZOCQS */
     '\0',
     'H', 'E', 'Z', 'L', 'O', 'C', 'U', 'S',  /* HEZLOCUS */
@@ -193,6 +203,13 @@
     { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             },
     { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             },
     { AF_BLUE_STRING_MAX,              0                             },
+    { AF_BLUE_STRING_LAO_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
+                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   },
+    { AF_BLUE_STRING_LAO_BOTTOM,          0                                 },
+    { AF_BLUE_STRING_LAO_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        },
+    { AF_BLUE_STRING_LAO_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        },
+    { AF_BLUE_STRING_LAO_DESCENDER,       0                                 },
+    { AF_BLUE_STRING_MAX,                 0                                 },
     { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        },
     { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  0                                 },
     { AF_BLUE_STRING_LATIN_SMALL_F_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        },
diff --git a/src/autofit/afblue.dat b/src/autofit/afblue.dat
index aadef92..1b52378 100644
--- a/src/autofit/afblue.dat
+++ b/src/autofit/afblue.dat
@@ -120,6 +120,17 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
   AF_BLUE_STRING_HEBREW_DESCENDER
     "קךןףץ"
 
+  AF_BLUE_STRING_LAO_TOP
+    "າ ດ ອ ມ ລ ວ ຣ ງ"
+  AF_BLUE_STRING_LAO_BOTTOM
+    "າ ອ ບ ຍ ຣ ຮ ວ ຢ"
+  AF_BLUE_STRING_LAO_ASCENDER
+    "ປ ຢ ຟ ຝ"
+  AF_BLUE_STRING_LAO_LARGE_ASCENDER
+    "ໂ ໄ ໃ"
+  AF_BLUE_STRING_LAO_DESCENDER
+    "ງ ຊ ຖ ຽ ໆ ຯ"
+
   AF_BLUE_STRING_LATIN_CAPITAL_TOP
     "THEZOCQS"
   AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM
@@ -362,6 +373,15 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
     { AF_BLUE_STRING_HEBREW_DESCENDER, 0                             }
     { AF_BLUE_STRING_MAX,              0                             }
 
+  AF_BLUE_STRINGSET_LAO
+    { AF_BLUE_STRING_LAO_TOP,             AF_BLUE_PROPERTY_LATIN_TOP      |
+                                          AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
+    { AF_BLUE_STRING_LAO_BOTTOM,          0                                 }
+    { AF_BLUE_STRING_LAO_ASCENDER,        AF_BLUE_PROPERTY_LATIN_TOP        }
+    { AF_BLUE_STRING_LAO_LARGE_ASCENDER,  AF_BLUE_PROPERTY_LATIN_TOP        }
+    { AF_BLUE_STRING_LAO_DESCENDER,       0                                 }
+    { AF_BLUE_STRING_MAX,                 0                                 }
+
   AF_BLUE_STRINGSET_LATN
     { AF_BLUE_STRING_LATIN_CAPITAL_TOP,     AF_BLUE_PROPERTY_LATIN_TOP        }
     { AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM,  0                                 }
diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
index 18b4361..c26a9c7 100644
--- a/src/autofit/afblue.h
+++ b/src/autofit/afblue.h
@@ -93,31 +93,36 @@ FT_BEGIN_HEADER
     AF_BLUE_STRING_HEBREW_TOP = 242,
     AF_BLUE_STRING_HEBREW_BOTTOM = 259,
     AF_BLUE_STRING_HEBREW_DESCENDER = 272,
-    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 283,
-    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 292,
-    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 301,
-    AF_BLUE_STRING_LATIN_SMALL = 309,
-    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 317,
-    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 323,
-    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 339,
-    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 355,
-    AF_BLUE_STRING_LATIN_SUBS_SMALL = 371,
-    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 399,
-    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 415,
-    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 439,
-    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 461,
-    AF_BLUE_STRING_LATIN_SUPS_SMALL = 481,
-    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 500,
-    AF_BLUE_STRING_TELUGU_TOP = 509,
-    AF_BLUE_STRING_TELUGU_BOTTOM = 531,
-    AF_BLUE_STRING_THAI_TOP = 553,
-    AF_BLUE_STRING_THAI_BOTTOM = 572,
-    AF_BLUE_STRING_THAI_ASCENDER = 594,
-    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 604,
-    AF_BLUE_STRING_THAI_DESCENDER = 614,
-    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 627,
-    AF_BLUE_STRING_THAI_DIGIT_TOP = 634,
-    af_blue_1_1 = 643,
+    AF_BLUE_STRING_LAO_TOP = 283,
+    AF_BLUE_STRING_LAO_BOTTOM = 308,
+    AF_BLUE_STRING_LAO_ASCENDER = 333,
+    AF_BLUE_STRING_LAO_LARGE_ASCENDER = 346,
+    AF_BLUE_STRING_LAO_DESCENDER = 356,
+    AF_BLUE_STRING_LATIN_CAPITAL_TOP = 375,
+    AF_BLUE_STRING_LATIN_CAPITAL_BOTTOM = 384,
+    AF_BLUE_STRING_LATIN_SMALL_F_TOP = 393,
+    AF_BLUE_STRING_LATIN_SMALL = 401,
+    AF_BLUE_STRING_LATIN_SMALL_DESCENDER = 409,
+    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_TOP = 415,
+    AF_BLUE_STRING_LATIN_SUBS_CAPITAL_BOTTOM = 431,
+    AF_BLUE_STRING_LATIN_SUBS_SMALL_F_TOP = 447,
+    AF_BLUE_STRING_LATIN_SUBS_SMALL = 463,
+    AF_BLUE_STRING_LATIN_SUBS_SMALL_DESCENDER = 491,
+    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_TOP = 507,
+    AF_BLUE_STRING_LATIN_SUPS_CAPITAL_BOTTOM = 531,
+    AF_BLUE_STRING_LATIN_SUPS_SMALL_F_TOP = 553,
+    AF_BLUE_STRING_LATIN_SUPS_SMALL = 573,
+    AF_BLUE_STRING_LATIN_SUPS_SMALL_DESCENDER = 592,
+    AF_BLUE_STRING_TELUGU_TOP = 601,
+    AF_BLUE_STRING_TELUGU_BOTTOM = 623,
+    AF_BLUE_STRING_THAI_TOP = 645,
+    AF_BLUE_STRING_THAI_BOTTOM = 664,
+    AF_BLUE_STRING_THAI_ASCENDER = 686,
+    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 696,
+    AF_BLUE_STRING_THAI_DESCENDER = 706,
+    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 719,
+    AF_BLUE_STRING_THAI_DIGIT_TOP = 726,
+    af_blue_1_1 = 735,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
     AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 153,
@@ -180,12 +185,13 @@ FT_BEGIN_HEADER
     AF_BLUE_STRINGSET_DEVA = 10,
     AF_BLUE_STRINGSET_GREK = 16,
     AF_BLUE_STRINGSET_HEBR = 23,
-    AF_BLUE_STRINGSET_LATN = 27,
-    AF_BLUE_STRINGSET_LATB = 34,
-    AF_BLUE_STRINGSET_LATP = 41,
-    AF_BLUE_STRINGSET_TELU = 48,
-    AF_BLUE_STRINGSET_THAI = 51,
-    af_blue_2_1 = 59,
+    AF_BLUE_STRINGSET_LAO = 27,
+    AF_BLUE_STRINGSET_LATN = 33,
+    AF_BLUE_STRINGSET_LATB = 40,
+    AF_BLUE_STRINGSET_LATP = 47,
+    AF_BLUE_STRINGSET_TELU = 54,
+    AF_BLUE_STRINGSET_THAI = 57,
+    af_blue_2_1 = 65,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
     af_blue_2_1_1 = af_blue_2_1 + 2,
diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c
index f6b1019..1470ed5 100644
--- a/src/autofit/afranges.c
+++ b/src/autofit/afranges.c
@@ -180,6 +180,21 @@
   };
 
 
+  const AF_Script_UniRangeRec  af_lao_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x0E80UL,  0x0EFFUL ),  /* Lao */
+    AF_UNIRANGE_REC(       0UL,       0UL )
+  };
+
+  const AF_Script_UniRangeRec  af_lao_nobase_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x0EB1UL,  0x0EB1UL ),
+    AF_UNIRANGE_REC(  0x0EB4UL,  0x0EBCUL ),
+    AF_UNIRANGE_REC(  0x0EC8UL,  0x0ECDUL ),
+    AF_UNIRANGE_REC(       0UL,       0UL )
+  };
+
+
   const AF_Script_UniRangeRec  af_latn_uniranges[] =
   {
     AF_UNIRANGE_REC(  0x0020UL,  0x007FUL ),  /* Basic Latin (no control chars)         */
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
index 8ef5f0e..b92e84f 100644
--- a/src/autofit/afscript.h
+++ b/src/autofit/afscript.h
@@ -55,6 +55,12 @@
           HB_SCRIPT_HEBREW,
           0x5DD, 0x0, 0x0 ) /* ם */
 
+  /* only digit zero has a simple shape in the Lao script */
+  SCRIPT( lao, LAO,
+          "Lao",
+          HB_SCRIPT_LAO,
+          0xED0, 0x0, 0x0 ) /* ໐ */
+
   SCRIPT( latn, LATN,
           "Latin",
           HB_SCRIPT_LATIN,
diff --git a/src/autofit/afstyles.h b/src/autofit/afstyles.h
index 42f5d2f..87663c9 100644
--- a/src/autofit/afstyles.h
+++ b/src/autofit/afstyles.h
@@ -108,6 +108,13 @@
          AF_BLUE_STRINGSET_HEBR,
          AF_COVERAGE_DEFAULT )
 
+  STYLE( lao_dflt, LAO_DFLT,
+         "Lao default style",
+         AF_WRITING_SYSTEM_LATIN,
+         AF_SCRIPT_LAO,
+         AF_BLUE_STRINGSET_LAO,
+         AF_COVERAGE_DEFAULT )
+
   META_STYLE_LATIN( latn, LATN, "Latin" )
 
   STYLE( latb_dflt, LATB_DFLT,