Commit b0de5a82f1d2f5309011ab3066150f072f955185

Werner Lemberg 2015-12-23T23:25:03

[autofit] Start implementing hinting direction (up/down, down/up). Right now, it does nothing. * src/autofit/afscript.h: Add another parameter to `SCRIPT', specifying hinting direction. * src/autofit/afglobal.c, scr/autofit/afglobal.h, src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/afshaper.c, src/autofit/aftypes.h: Extend `SCRIPT' definitions.

diff --git a/ChangeLog b/ChangeLog
index 489a583..11dcdbc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2015-12-23  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Start implementing hinting direction (up/down, down/up).
+
+	Right now, it does nothing.
+
+	* src/autofit/afscript.h: Add another parameter to `SCRIPT',
+	specifying hinting direction.
+
+	* src/autofit/afglobal.c, scr/autofit/afglobal.h,
+	src/autofit/afpic.c, src/autofit/afranges.h, src/autofit/afshaper.c,
+	src/autofit/aftypes.h: Extend `SCRIPT' definitions.
+
 2015-12-22  Werner Lemberg  <wl@gnu.org>
 
 	* src/type1/t1load.c (parse_subrs): Fix memory leak (#46744).
diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
index 3223358..39ea9bb 100644
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -42,7 +42,7 @@
 
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss ) \
+#define SCRIPT( s, S, d, h, H, ss )         \
           AF_DEFINE_SCRIPT_CLASS(           \
             af_ ## s ## _script_class,      \
             AF_SCRIPT_ ## S,                \
@@ -83,7 +83,7 @@
 
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss ) \
+#define SCRIPT( s, S, d, h, H, ss )   \
           &af_ ## s ## _script_class,
 
   FT_LOCAL_ARRAY_DEF( AF_ScriptClass )
diff --git a/src/autofit/afglobal.h b/src/autofit/afglobal.h
index 5b4e439..00441fa 100644
--- a/src/autofit/afglobal.h
+++ b/src/autofit/afglobal.h
@@ -34,7 +34,7 @@ FT_BEGIN_HEADER
 
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss )                               \
+#define SCRIPT( s, S, d, h, H, ss )                            \
           AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
 
 #include "afscript.h"
diff --git a/src/autofit/afpic.c b/src/autofit/afpic.c
index 37254a2..640f9d6 100644
--- a/src/autofit/afpic.c
+++ b/src/autofit/afpic.c
@@ -122,7 +122,7 @@
 #include "afwrtsys.h"
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, sss )                    \
+#define SCRIPT( s, S, d, h, H, sss )                 \
         FT_Init_Class_af_ ## s ## _script_class(     \
           &container->af_script_classes_rec[ss++] );
 
diff --git a/src/autofit/afranges.h b/src/autofit/afranges.h
index bca5084..4165d26 100644
--- a/src/autofit/afranges.h
+++ b/src/autofit/afranges.h
@@ -26,13 +26,13 @@
 FT_BEGIN_HEADER
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss )                                        \
+#define SCRIPT( s, S, d, h, H, ss )                                     \
           extern const AF_Script_UniRangeRec  af_ ## s ## _uniranges[];
 
 #include "afscript.h"
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss )                                                \
+#define SCRIPT( s, S, d, h, H, ss )                                             \
           extern const AF_Script_UniRangeRec  af_ ## s ## _nonbase_uniranges[];
 
 #include "afscript.h"
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
index f9b40de..92a8b0c 100644
--- a/src/autofit/afscript.h
+++ b/src/autofit/afscript.h
@@ -33,85 +33,101 @@
   SCRIPT( arab, ARAB,
           "Arabic",
           HB_SCRIPT_ARABIC,
+          HINTING_BOTTOM_TO_TOP,
           "\xD9\x84 \xD8\xAD \xD9\x80" ) /* ل ح ـ */
 
   /* there are no simple forms for letters; we thus use two digit shapes */
   SCRIPT( beng, BENG,
           "Bengali",
           HB_SCRIPT_BENGALI,
+          HINTING_TOP_TO_BOTTOM,
           "\xE0\xA7\xA6 \xE0\xA7\xAA" ) /* ০ ৪*/
 
   SCRIPT( cyrl, CYRL,
           "Cyrillic",
           HB_SCRIPT_CYRILLIC,
+          HINTING_BOTTOM_TO_TOP,
           "\xD0\xBE \xD0\x9E" ) /* о О */
 
   SCRIPT( deva, DEVA,
           "Devanagari",
           HB_SCRIPT_DEVANAGARI,
+          HINTING_TOP_TO_BOTTOM,
           "\xE0\xA4\xA0 \xE0\xA4\xB5 \xE0\xA4\x9F" ) /* ठ व ट */
 
   SCRIPT( grek, GREK,
           "Greek",
           HB_SCRIPT_GREEK,
+          HINTING_BOTTOM_TO_TOP,
           "\xCE\xBF \xCE\x9F" ) /* ο Ο */
 
   SCRIPT( hebr, HEBR,
           "Hebrew",
           HB_SCRIPT_HEBREW,
+          HINTING_BOTTOM_TO_TOP,
           "\xD7\x9D" ) /* ם */
 
   /* only digit zero has a simple shape in the Khmer script */
   SCRIPT( khmr, KHMR,
           "Khmer",
           HB_SCRIPT_KHMER,
+          HINTING_BOTTOM_TO_TOP,
           "\xE1\x9F\xA0" ) /* ០ */
 
   SCRIPT( khms, KHMS,
           "Khmer Symbols",
           HB_SCRIPT_INVALID,
+          HINTING_BOTTOM_TO_TOP,
           "\xE1\xA7\xA1 \xE1\xA7\xAA" ) /* ᧡ ᧪ */
 
   /* only digit zero has a simple shape in the Lao script */
   SCRIPT( lao, LAO,
           "Lao",
           HB_SCRIPT_LAO,
+          HINTING_BOTTOM_TO_TOP,
           "\xE0\xBB\x90" ) /* ໐ */
 
   SCRIPT( latn, LATN,
           "Latin",
           HB_SCRIPT_LATIN,
+          HINTING_BOTTOM_TO_TOP,
           "o O 0" )
 
   SCRIPT( latb, LATB,
           "Latin Subscript Fallback",
           HB_SCRIPT_INVALID,
+          HINTING_BOTTOM_TO_TOP,
           "\xE2\x82\x92 \xE2\x82\x80" ) /* ₒ ₀ */
 
   SCRIPT( latp, LATP,
           "Latin Superscript Fallback",
           HB_SCRIPT_INVALID,
+          HINTING_BOTTOM_TO_TOP,
           "\xE1\xB5\x92 \xE1\xB4\xBC \xE2\x81\xB0" ) /* ᵒ ᴼ ⁰ */
 
   SCRIPT( mymr, MYMR,
           "Myanmar",
           HB_SCRIPT_MYANMAR,
+          HINTING_BOTTOM_TO_TOP,
           "\xE1\x80\x9D \xE1\x80\x84 \xE1\x80\x82" ) /* ဝ င ဂ */
 
   SCRIPT( none, NONE,
           "no script",
           HB_SCRIPT_INVALID,
+          HINTING_BOTTOM_TO_TOP,
           "" )
 
   /* there are no simple forms for letters; we thus use two digit shapes */
   SCRIPT( telu, TELU,
           "Telugu",
           HB_SCRIPT_TELUGU,
+          HINTING_BOTTOM_TO_TOP,
           "\xE0\xB1\xA6 \xE0\xB1\xA7" ) /* ౦ ౧ */
 
   SCRIPT( thai, THAI,
           "Thai",
           HB_SCRIPT_THAI,
+          HINTING_BOTTOM_TO_TOP,
           "\xE0\xB8\xB2 \xE0\xB9\x85 \xE0\xB9\x90" ) /* า ๅ ๐ */
 
 #ifdef AF_CONFIG_OPTION_INDIC
@@ -119,56 +135,67 @@
   SCRIPT( gujr, GUJR,
           "Gujarati",
           HB_SCRIPT_GUJARATI,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( guru, GURU,
           "Gurmukhi",
           HB_SCRIPT_GURMUKHI,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( knda, KNDA,
           "Kannada",
           HB_SCRIPT_KANNADA,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( limb, LIMB,
           "Limbu",
           HB_SCRIPT_LIMBU,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( mlym, MLYM,
           "Malayalam",
           HB_SCRIPT_MALAYALAM,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( orya, ORYA,
           "Oriya",
           HB_SCRIPT_ORIYA,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( sinh, SINH,
           "Sinhala",
           HB_SCRIPT_SINHALA,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( sund, SUND,
           "Sundanese",
           HB_SCRIPT_SUNDANESE,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( sylo, SYLO,
           "Syloti Nagri",
           HB_SCRIPT_SYLOTI_NAGRI,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( taml, TAML,
           "Tamil",
           HB_SCRIPT_TAMIL,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
   SCRIPT( tibt, TIBT,
           "Tibetan",
           HB_SCRIPT_TIBETAN,
+          HINTING_BOTTOM_TO_TOP,
           "o" ) /* XXX */
 
 #endif /* AF_CONFIG_OPTION_INDIC */
@@ -178,6 +205,7 @@
   SCRIPT( hani, HANI,
           "CJKV ideographs",
           HB_SCRIPT_HAN,
+          HINTING_BOTTOM_TO_TOP,
           "\xE7\x94\xB0 \xE5\x9B\x97" ) /* 田 囗 */
 
 #endif /* AF_CONFIG_OPTION_CJK */
diff --git a/src/autofit/afshaper.c b/src/autofit/afshaper.c
index 6ba9190..c9be619 100644
--- a/src/autofit/afshaper.c
+++ b/src/autofit/afshaper.c
@@ -86,7 +86,7 @@
 
   /* load HarfBuzz script tags */
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss )  h,
+#define SCRIPT( s, S, d, h, H, ss )  h,
 
 
   static const hb_script_t  scripts[] =
diff --git a/src/autofit/aftypes.h b/src/autofit/aftypes.h
index b483619..0134877 100644
--- a/src/autofit/aftypes.h
+++ b/src/autofit/aftypes.h
@@ -309,7 +309,7 @@ extern void*  _af_debug_hints;
    */
 
 #undef  SCRIPT
-#define SCRIPT( s, S, d, h, ss ) \
+#define SCRIPT( s, S, d, h, H, ss ) \
           AF_SCRIPT_ ## S,
 
   /* The list of known scripts. */