Commit 5a4c5a5b23d0eec78d3c2a94fc668a8f43c4dc9b

Werner Lemberg 2013-09-22T22:37:26

[autofit] Disunify Cyrillic and Greek handling from Latin. * src/autofit/afscript.h: Add Cyrillic and Greek. * src/autofit/afblue.dat (AF_BLUE_STRINGSET_GREK, AF_BLUE_STRINGSET_CYRL): Add blue zones for Greek and Cyrillic. (AF_BLUE_STRINGSET_LATN): Fix typo. * src/autofit/afblue.c, src/autofit/afblue.h: Regenerated. * src/autofit/aflatin.c (af_grek_uniranges, af_cyrl_uniranges): New arrays. (af_grek_script_class, af_cyrl_script_class): New scripts. * src/autofit/aflatin.h: Updated.

diff --git a/ChangeLog b/ChangeLog
index cca19c4..4143753 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2013-09-22  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Disunify Cyrillic and Greek handling from Latin.
+
+	* src/autofit/afscript.h: Add Cyrillic and Greek.
+
+	* src/autofit/afblue.dat (AF_BLUE_STRINGSET_GREK,
+	AF_BLUE_STRINGSET_CYRL): Add blue zones for Greek and Cyrillic.
+	(AF_BLUE_STRINGSET_LATN): Fix typo.
+	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+	* src/autofit/aflatin.c (af_grek_uniranges, af_cyrl_uniranges): New
+	arrays.
+	(af_grek_script_class, af_cyrl_script_class): New scripts.
+	* src/autofit/aflatin.h: Updated.
+
 2013-09-20  Werner Lemberg  <wl@gnu.org>
 
 	* docs/CHANGES: Updated.
diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
index f025e1b..6feb486 100644
--- a/src/autofit/afblue.c
+++ b/src/autofit/afblue.c
@@ -36,6 +36,24 @@
     '\0',
     'p', 'q', 'g', 'j', 'y',  /* pqgjy */
     '\0',
+    '\xCE', '\x93', '\xCE', '\x92', '\xCE', '\x95', '\xCE', '\x96', '\xCE', '\x98', '\xCE', '\x9F', '\xCE', '\xA9',  /* ΓΒΕΖΘΟΩ */
+    '\0',
+    '\xCE', '\x92', '\xCE', '\x94', '\xCE', '\x96', '\xCE', '\x9E', '\xCE', '\x98', '\xCE', '\x9F',  /* ΒΔΖΞΘΟ */
+    '\0',
+    '\xCE', '\xB2', '\xCE', '\xB8', '\xCE', '\xB4', '\xCE', '\xB6', '\xCE', '\xBB', '\xCE', '\xBE',  /* βθδζλξ */
+    '\0',
+    '\xCE', '\xB1', '\xCE', '\xB5', '\xCE', '\xB9', '\xCE', '\xBF', '\xCF', '\x80', '\xCF', '\x83', '\xCF', '\x84', '\xCF', '\x89',  /* αειοπστω */
+    '\0',
+    '\xCE', '\xB2', '\xCE', '\xB3', '\xCE', '\xB7', '\xCE', '\xBC', '\xCF', '\x81', '\xCF', '\x86', '\xCF', '\x87', '\xCF', '\x88',  /* βγημρφχψ */
+    '\0',
+    '\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\x9F', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD',  /* БВЕПЗОСЭ */
+    '\0',
+    '\xD0', '\x91', '\xD0', '\x92', '\xD0', '\x95', '\xD0', '\xA8', '\xD0', '\x97', '\xD0', '\x9E', '\xD0', '\xA1', '\xD0', '\xAD',  /* БВЕШЗОСЭ */
+    '\0',
+    '\xD1', '\x85', '\xD0', '\xBF', '\xD0', '\xBD', '\xD1', '\x88', '\xD0', '\xB5', '\xD0', '\xB7', '\xD0', '\xBE', '\xD1', '\x81',  /* хпншезос */
+    '\0',
+    '\xD1', '\x80', '\xD1', '\x83', '\xD1', '\x84',  /* руф */
+    '\0',
     '\xD7', '\x91', '\xD7', '\x93', '\xD7', '\x94', '\xD7', '\x97', '\xD7', '\x9A', '\xD7', '\x9B', '\xD7', '\x9D', '\xD7', '\xA1',  /* בדהחךכםס */
     '\0',
     '\xD7', '\x91', '\xD7', '\x98', '\xD7', '\x9B', '\xD7', '\x9D', '\xD7', '\xA1', '\xD7', '\xA6',  /* בטכםסצ */
@@ -97,12 +115,27 @@
     /* */
     { 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       |
+    { AF_BLUE_STRING_LATIN_SMALL_F_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         },
+    { AF_BLUE_STRING_LATIN_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
                                            AF_BLUE_PROPERTY_LATIN_SMALL_TOP   },
-    { AF_BLUE_STRING_LATIN_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP         },
     { AF_BLUE_STRING_LATIN_SMALL,          0                                  },
     { AF_BLUE_STRING_LATIN_SMALL_MINOR,    0                                  },
     { AF_BLUE_STRING_MAX,                  0                                  },
+    { AF_BLUE_STRING_GREEK_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         },
+    { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0                                  },
+    { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP         },
+    { AF_BLUE_STRING_GREEK_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
+                                           AF_BLUE_PROPERTY_LATIN_SMALL_TOP   },
+    { AF_BLUE_STRING_GREEK_SMALL,          0                                  },
+    { AF_BLUE_STRING_GREEK_SMALL_MINOR,    0                                  },
+    { AF_BLUE_STRING_MAX,                  0                                  },
+    { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         },
+    { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0                                  },
+    { AF_BLUE_STRING_CYRILLIC_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
+                                              AF_BLUE_PROPERTY_LATIN_SMALL_TOP   },
+    { AF_BLUE_STRING_CYRILLIC_SMALL,          0                                  },
+    { AF_BLUE_STRING_CYRILLIC_SMALL_MINOR,    0                                  },
+    { AF_BLUE_STRING_MAX,                     0                                  },
     { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
                                        AF_BLUE_PROPERTY_LATIN_LONG   },
     { AF_BLUE_STRING_HEBREW_BOTTOM,    0                             },
diff --git a/src/autofit/afblue.dat b/src/autofit/afblue.dat
index af85fc3..6bd27d9 100644
--- a/src/autofit/afblue.dat
+++ b/src/autofit/afblue.dat
@@ -76,6 +76,26 @@ AF_BLUE_STRING_ENUM AF_BLUE_STRINGS_ARRAY AF_BLUE_STRING_MAX_LEN:
   AF_BLUE_STRING_LATIN_SMALL_MINOR
     "pqgjy"
 
+  AF_BLUE_STRING_GREEK_CAPITAL_TOP
+    "ΓΒΕΖΘΟΩ"
+  AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM
+    "ΒΔΖΞΘΟ"
+  AF_BLUE_STRING_GREEK_SMALL_BETA_TOP
+    "βθδζλξ"
+  AF_BLUE_STRING_GREEK_SMALL
+    "αειοπστω"
+  AF_BLUE_STRING_GREEK_SMALL_MINOR
+    "βγημρφχψ"
+
+  AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP
+    "БВЕПЗОСЭ"
+  AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM
+    "БВЕШЗОСЭ"
+  AF_BLUE_STRING_CYRILLIC_SMALL
+    "хпншезос"
+  AF_BLUE_STRING_CYRILLIC_SMALL_MINOR
+    "руф"
+
   AF_BLUE_STRING_HEBREW_TOP
     "בדהחךכםס"
   AF_BLUE_STRING_HEBREW_BOTTOM
@@ -139,13 +159,32 @@ AF_BLUE_STRINGSET_ENUM AF_BLUE_STRINGSETS_ARRAY AF_BLUE_STRINGSET_MAX_LEN:
   AF_BLUE_STRINGSET_LATN
     { 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       |
+    { AF_BLUE_STRING_LATIN_SMALL_F_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         }
+    { AF_BLUE_STRING_LATIN_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
                                            AF_BLUE_PROPERTY_LATIN_SMALL_TOP   }
-    { AF_BLUE_STRING_LATIN_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP         }
     { AF_BLUE_STRING_LATIN_SMALL,          0                                  }
     { AF_BLUE_STRING_LATIN_SMALL_MINOR,    0                                  }
     { AF_BLUE_STRING_MAX,                  0                                  }
 
+  AF_BLUE_STRINGSET_GREK
+    { AF_BLUE_STRING_GREEK_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         }
+    { AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM, 0                                  }
+    { AF_BLUE_STRING_GREEK_SMALL_BETA_TOP, AF_BLUE_PROPERTY_LATIN_TOP         }
+    { AF_BLUE_STRING_GREEK_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
+                                           AF_BLUE_PROPERTY_LATIN_SMALL_TOP   }
+    { AF_BLUE_STRING_GREEK_SMALL,          0                                  }
+    { AF_BLUE_STRING_GREEK_SMALL_MINOR,    0                                  }
+    { AF_BLUE_STRING_MAX,                  0                                  }
+
+  AF_BLUE_STRINGSET_CYRL
+    { AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP,    AF_BLUE_PROPERTY_LATIN_TOP         }
+    { AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM, 0                                  }
+    { AF_BLUE_STRING_CYRILLIC_SMALL,          AF_BLUE_PROPERTY_LATIN_TOP       |
+                                              AF_BLUE_PROPERTY_LATIN_SMALL_TOP   }
+    { AF_BLUE_STRING_CYRILLIC_SMALL,          0                                  }
+    { AF_BLUE_STRING_CYRILLIC_SMALL_MINOR,    0                                  }
+    { AF_BLUE_STRING_MAX,                     0                                  }
+
   AF_BLUE_STRINGSET_HEBR
     { AF_BLUE_STRING_HEBREW_TOP,       AF_BLUE_PROPERTY_LATIN_TOP  |
                                        AF_BLUE_PROPERTY_LATIN_LONG   }
diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
index cbe46b1..0b3373d 100644
--- a/src/autofit/afblue.h
+++ b/src/autofit/afblue.h
@@ -79,10 +79,19 @@ FT_BEGIN_HEADER
     AF_BLUE_STRING_LATIN_SMALL_F_TOP = 18,
     AF_BLUE_STRING_LATIN_SMALL = 26,
     AF_BLUE_STRING_LATIN_SMALL_MINOR = 34,
-    AF_BLUE_STRING_HEBREW_TOP = 40,
-    AF_BLUE_STRING_HEBREW_BOTTOM = 57,
-    AF_BLUE_STRING_HEBREW_DESCENDER = 70,
-    af_blue_1_1 = 80,
+    AF_BLUE_STRING_GREEK_CAPITAL_TOP = 40,
+    AF_BLUE_STRING_GREEK_CAPITAL_BOTTOM = 55,
+    AF_BLUE_STRING_GREEK_SMALL_BETA_TOP = 68,
+    AF_BLUE_STRING_GREEK_SMALL = 81,
+    AF_BLUE_STRING_GREEK_SMALL_MINOR = 98,
+    AF_BLUE_STRING_CYRILLIC_CAPITAL_TOP = 115,
+    AF_BLUE_STRING_CYRILLIC_CAPITAL_BOTTOM = 132,
+    AF_BLUE_STRING_CYRILLIC_SMALL = 149,
+    AF_BLUE_STRING_CYRILLIC_SMALL_MINOR = 166,
+    AF_BLUE_STRING_HEBREW_TOP = 173,
+    AF_BLUE_STRING_HEBREW_BOTTOM = 190,
+    AF_BLUE_STRING_HEBREW_DESCENDER = 203,
+    af_blue_1_1 = 213,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRING_CJK_TOP_FILL = af_blue_1_1 + 1,
     AF_BLUE_STRING_CJK_TOP_UNFILL = af_blue_1_1 + 77,
@@ -145,8 +154,10 @@ FT_BEGIN_HEADER
   typedef enum  AF_Blue_Stringset_
   {
     AF_BLUE_STRINGSET_LATN = 0,
-    AF_BLUE_STRINGSET_HEBR = 7,
-    af_blue_2_1 = 11,
+    AF_BLUE_STRINGSET_GREK = 7,
+    AF_BLUE_STRINGSET_CYRL = 14,
+    AF_BLUE_STRINGSET_HEBR = 20,
+    af_blue_2_1 = 24,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
     af_blue_2_1_1 = af_blue_2_1 + 4,
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 7243fb9..761f491 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -2647,23 +2647,17 @@
     AF_UNIRANGE_REC(  0x0250UL,  0x02AFUL ),  /* IPA Extensions */
     AF_UNIRANGE_REC(  0x02B0UL,  0x02FFUL ),  /* Spacing Modifier Letters */
     AF_UNIRANGE_REC(  0x0300UL,  0x036FUL ),  /* Combining Diacritical Marks */
-    AF_UNIRANGE_REC(  0x0370UL,  0x03FFUL ),  /* Greek and Coptic */
-    AF_UNIRANGE_REC(  0x0400UL,  0x04FFUL ),  /* Cyrillic */
-    AF_UNIRANGE_REC(  0x0500UL,  0x052FUL ),  /* Cyrillic Supplement */
     AF_UNIRANGE_REC(  0x1D00UL,  0x1D7FUL ),  /* Phonetic Extensions */
     AF_UNIRANGE_REC(  0x1D80UL,  0x1DBFUL ),  /* Phonetic Extensions Supplement */
     AF_UNIRANGE_REC(  0x1DC0UL,  0x1DFFUL ),  /* Combining Diacritical Marks Supplement */
     AF_UNIRANGE_REC(  0x1E00UL,  0x1EFFUL ),  /* Latin Extended Additional */
-    AF_UNIRANGE_REC(  0x1F00UL,  0x1FFFUL ),  /* Greek Extended */
     AF_UNIRANGE_REC(  0x2000UL,  0x206FUL ),  /* General Punctuation */
     AF_UNIRANGE_REC(  0x2070UL,  0x209FUL ),  /* Superscripts and Subscripts */
     AF_UNIRANGE_REC(  0x20A0UL,  0x20CFUL ),  /* Currency Symbols */
     AF_UNIRANGE_REC(  0x2150UL,  0x218FUL ),  /* Number Forms */
     AF_UNIRANGE_REC(  0x2460UL,  0x24FFUL ),  /* Enclosed Alphanumerics */
     AF_UNIRANGE_REC(  0x2C60UL,  0x2C7FUL ),  /* Latin Extended-C */
-    AF_UNIRANGE_REC(  0x2DE0UL,  0x2DFFUL ),  /* Cyrillic Extended-A */
     AF_UNIRANGE_REC(  0x2E00UL,  0x2E7FUL ),  /* Supplemental Punctuation */
-    AF_UNIRANGE_REC(  0xA640UL,  0xA69FUL ),  /* Cyrillic Extended-B */
     AF_UNIRANGE_REC(  0xA720UL,  0xA7FFUL ),  /* Latin Extended-D */
     AF_UNIRANGE_REC(  0xFB00UL,  0xFB06UL ),  /* Alphab. Present. Forms (Latin Ligs) */
     AF_UNIRANGE_REC( 0x1D400UL, 0x1D7FFUL ),  /* Mathematical Alphanumeric Symbols */
@@ -2671,6 +2665,19 @@
     AF_UNIRANGE_REC(       0UL,       0UL )
   };
 
+  static const AF_Script_UniRangeRec  af_grek_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x0370UL,  0x03FFUL ),  /* Greek and Coptic */
+    AF_UNIRANGE_REC(  0x1F00UL,  0x1FFFUL ),  /* Greek Extended */
+  };
+
+  static const AF_Script_UniRangeRec  af_cyrl_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x0400UL,  0x04FFUL ),  /* Cyrillic */
+    AF_UNIRANGE_REC(  0x0500UL,  0x052FUL ),  /* Cyrillic Supplement */
+    AF_UNIRANGE_REC(  0x2DE0UL,  0x2DFFUL ),  /* Cyrillic Extended-A */
+    AF_UNIRANGE_REC(  0xA640UL,  0xA69FUL ),  /* Cyrillic Extended-B */
+  };
 
   static const AF_Script_UniRangeRec  af_hebr_uniranges[] =
   {
@@ -2692,6 +2699,28 @@
   )
 
   AF_DEFINE_SCRIPT_CLASS(
+    af_grek_script_class,
+
+    AF_SCRIPT_GREK,
+    AF_BLUE_STRINGSET_GREK,
+    AF_WRITING_SYSTEM_LATIN,
+
+    af_grek_uniranges,
+    0x3BF /* ο */
+  )
+
+  AF_DEFINE_SCRIPT_CLASS(
+    af_cyrl_script_class,
+
+    AF_SCRIPT_CYRL,
+    AF_BLUE_STRINGSET_CYRL,
+    AF_WRITING_SYSTEM_LATIN,
+
+    af_cyrl_uniranges,
+    0x43E /* о */
+  )
+
+  AF_DEFINE_SCRIPT_CLASS(
     af_hebr_script_class,
 
     AF_SCRIPT_HEBR,
diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
index 7d294aa..d918d5c 100644
--- a/src/autofit/aflatin.h
+++ b/src/autofit/aflatin.h
@@ -31,12 +31,12 @@ FT_BEGIN_HEADER
 
   /* the latin-specific script classes */
 
-  AF_DECLARE_SCRIPT_CLASS( af_latn_script_class )  /* XXX */
+  AF_DECLARE_SCRIPT_CLASS( af_cyrl_script_class )
+  AF_DECLARE_SCRIPT_CLASS( af_grek_script_class )
+  AF_DECLARE_SCRIPT_CLASS( af_latn_script_class )
   AF_DECLARE_SCRIPT_CLASS( af_hebr_script_class )
 #if 0
   AF_DECLARE_SCRIPT_CLASS( af_armn_script_class )
-  AF_DECLARE_SCRIPT_CLASS( af_cyrl_script_class )
-  AF_DECLARE_SCRIPT_CLASS( af_grek_script_class )
 #endif
 
 
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
index 39801d3..e3b9434 100644
--- a/src/autofit/afscript.h
+++ b/src/autofit/afscript.h
@@ -22,8 +22,10 @@
 
   /* Add new scripts here. */
 
+  SCRIPT( cyrl, CYRL )
   SCRIPT( deva, DEVA )
   SCRIPT( dflt, DFLT )
+  SCRIPT( grek, GREK )
   SCRIPT( hani, HANI )
   SCRIPT( hebr, HEBR )
   SCRIPT( latn, LATN )