[packages/freetype] - up to 2.5.3; SECURITY FIX for http://savannah.nongnu.org/bugs/?41697; enable harfbuzz for better a

arekm arekm at pld-linux.org
Sun Mar 9 08:18:26 CET 2014


commit 2ea2159be78c5d8e7e4f083a26751536a46f4f21
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Sun Mar 9 08:18:21 2014 +0100

    - up to 2.5.3; SECURITY FIX for http://savannah.nongnu.org/bugs/?41697; enable harfbuzz for better autohinting

 freetype-git.patch | 3276 ----------------------------------------------------
 freetype.spec      |   14 +-
 2 files changed, 8 insertions(+), 3282 deletions(-)
---
diff --git a/freetype.spec b/freetype.spec
index 6123048..a50f4db 100644
--- a/freetype.spec
+++ b/freetype.spec
@@ -2,6 +2,7 @@
 # Conditional build:
 %bcond_without	lcd		# without LCD subpixel color filtering (Microsoft patents in USA)
 %bcond_without	x11		# don't build examples (X11-based)
+%bcond_without	harfbuzz	# harfbuzz based autohinting
 %bcond_without	apidocs         # disable api docs
 
 Summary:	TrueType font rasterizer
@@ -12,22 +13,22 @@ Summary(pt_BR.UTF-8):	Biblioteca de renderização de fontes TrueType
 Summary(ru.UTF-8):	Растеризатор шрифтов TrueType
 Summary(uk.UTF-8):	Растеризатор шрифтів TrueType
 Name:		freetype
-Version:	2.5.2
+Version:	2.5.3
 Release:	1
 Epoch:		1
 License:	GPL v2 or FTL
 Group:		Libraries
 Source0:	http://download.savannah.gnu.org/releases/freetype/%{name}-%{version}.tar.bz2
-# Source0-md5:	10e8f4d6a019b124088d18bc26123a25
+# Source0-md5:	d6b60f06bfc046e43ab2a6cbfd171d65
 Source1:	http://download.savannah.gnu.org/releases/freetype/%{name}-doc-%{version}.tar.bz2
-# Source1-md5:	cb858209b8d84860345f3f62fcae2af2
+# Source1-md5:	e192ef88e84ddf10665f34cf418652fb
 Source2:	http://download.savannah.gnu.org/releases/freetype/ft2demos-%{version}.tar.bz2
-# Source2-md5:	399d98441c6c67b5bf29c7733db27438
+# Source2-md5:	3d2cd9f572a1a80b9744b9d6b75975ba
 Patch0:		%{name}-2.2.1-enable-valid.patch
-Patch1:		%{name}-git.patch
 URL:		http://www.freetype.org/
 BuildRequires:	automake
 BuildRequires:	bzip2-devel
+%{?with_harfbuzz:BuildRequires:	harfbuzz-devel >= 0.9.19}
 BuildRequires:	libpng-devel
 BuildRequires:	python
 BuildRequires:	python-modules
@@ -195,7 +196,6 @@ Programy demonstracyjne do biblioteki FreeType.
 %prep
 %setup -q -a1 -a2
 %patch0 -p1
-%patch1 -p1
 
 # avoid propagating -L%{_libdir} through *.la
 %{__sed} -i -e 's,libpng-config --ldflags,libpng-config --libs,' builds/unix/configure
@@ -204,6 +204,7 @@ Programy demonstracyjne do biblioteki FreeType.
 CFLAGS="%{rpmcflags} %{rpmcppflags} \
 %{?with_lcd:-DFT_CONFIG_OPTION_SUBPIXEL_RENDERING} \
 -DTT_CONFIG_OPTION_SUBPIXEL_HINTING \
+%{?with_harfbuzz:-DFT_CONFIG_OPTION_USE_HARFBUZZ} \
 " \
 %{__make} setup unix \
 	CFG="--prefix=%{_prefix} --libdir=%{_libdir}"
@@ -253,6 +254,7 @@ rm -rf $RPM_BUILD_ROOT
 %{_includedir}/freetype2
 %{_aclocaldir}/freetype2.m4
 %{_pkgconfigdir}/freetype2.pc
+%{_mandir}/man1/freetype-config.1*
 
 %if %{with apidocs}
 %files apidocs
diff --git a/freetype-git.patch b/freetype-git.patch
deleted file mode 100644
index ff2b7d6..0000000
--- a/freetype-git.patch
+++ /dev/null
@@ -1,3276 +0,0 @@
-diff --git a/ChangeLog b/ChangeLog
-index b67e436..4a1f1ec 100644
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,247 @@
-+2013-12-21  Werner Lemberg  <wl at gnu.org>
-+
-+	Fix Savannah bug #40975 (sort of).
-+
-+	* src/truetype/ttinterp.c (Ins_IP): Fix sign typo to make FreeType
-+	behave the same as the Windows TrueType engine for the invalid case.
-+
-+2013-12-21  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] Make PIC mode work actually.
-+
-+	* src/autofit/afpic.h (AFModulePIC): Fix array sizes to fit the
-+	enumeration values automatically generated by including `afscript.h'
-+	and friends.
-+
-+	* src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
-+
-+2013-12-21  Werner Lemberg  <wl at gnu.org>
-+
-+	Fix PIC linking.
-+
-+	* include/internal/ftrfork.h (CONST_FT_RFORK_RULE_ARRAY_BEGIN): Fix
-+	generated function name.
-+
-+	* src/base/basepic.c (FT_Init_Table_raccess_guess_table): Rename
-+	to ...
-+	(FT_Init_Table_ft_raccess_guess_table): ... this so that the
-+	function name correctly corresponds to what the macro framework
-+	expects.
-+
-+	* src/psnames/rules.mk (PSNAMES_DRV_SRC_S): Use correct file name so
-+	that PIC functions are compiled also.
-+
-+2013-12-21  Werner Lemberg  <wl at gnu.org>
-+
-+	[base] Add missing dependencies to Makefile.
-+
-+	* src/base/rules.mk (BASE_SRC): Add `basepic.c' and `ftpic.c'.
-+	(BASE_H): Add `basepic.h'.
-+
-+2013-12-20  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] Fix PIC compilation.
-+
-+	* src/autofit/afcjk.c (af_cjk_metrics_init_widths),
-+	src/autofit/aflatin.c (af_latin_metrics_init_widths)
-+	[FT_CONFIG_OPTION_PIC]: Declare `globals'.
-+
-+	* src/autofit/afglobal.c: Always call AF_DEFINE_SCRIPT_CLASS, and
-+	AF_DEFINE_STYLE_CLASS.
-+
-+	* src/autofit/afpic.c: Include `afglobal.h'.
-+	(autofit_module_class_pic_init): Typo.
-+
-+	* src/autofit/aftypes.h (AF_DEFINE_SCRIPT_CLASS,
-+	AF_DEFINE_STYLE_CLASS): Don't use the same identifier for macro
-+	parameter and structure member.
-+
-+2013-12-20  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] Introduce `styles'.
-+
-+	This is the new top-level structure for handling glyph input data;
-+	scripts are now defined separately.
-+
-+	* src/autofit/aftypes.h (SCRIPT): Updated.
-+	(AF_ScriptClassRec): Move `blue_stringset' and `writing_system'
-+	members to ...
-+	(AF_Style_ClassRec): ... this new structure.
-+	(AF_Style): New enumeration.
-+	(AF_StyleMetricsRec): Replace `script' enumeration with
-+	`style_class' pointer.
-+	(AF_DEFINE_SCRIPT_CLASS, AF_DECLARE_SCRIPT_CLASS): Updated.
-+	(AF_DEFINE_STYLE_CLASS, AF_DECLARE_STYLE_CLASS): New macros.
-+
-+	* src/autofit/afstyles.h: New file, using data from `afscript.h'.
-+	* src/autofit/afscript.h: Updated.
-+
-+	* src/autofit/afcjk.c (af_cjk_metrics_init_widths,
-+	af_cjk_metrics_init_blues, af_cjk_hint_edges): Updated.
-+
-+	* src/autofit/afglobal.c (SCRIPT): Updated.
-+	(STYLE): Redefine macro to load `afstyles.h'.
-+	(af_script_names) [FT_DEBUG_LEVEL_TRACE]: Replace with...
-+	(af_style_names): ... this array.
-+	(af_face_globals_compute_script_coverage): Renamed to...
-+	(af_face_globals_compute_style_coverage): ... this.
-+	Updated.
-+	(af_face_globals_new, af_face_globals_free,
-+	af_face_globals_get_metrics): Updated.
-+
-+	* src/autofit/afglobal.h (SCRIPT): Updated.
-+	(STYLE): Redefine macro to load `afstyles.h'.
-+	(AF_SCRIPT_FALLBACK): Update definition.  This will get more
-+	refinements with later on.
-+	(AF_SCRIPT_UNASSIGNED): Replace with...
-+	(AF_STYLE_UNASSIGNED): ... this macro.
-+	(AF_FaceGlobalsRec): Updated.
-+
-+	* src/autofit/aflatin.c (af_latin_metrics_init_widths,
-+	af_latin_metrics_init_blues, af_latin_metrics_scale_dim,
-+	af_latin_hint_edges): Updated.
-+
-+	* src/autofit/aflatin2.c (af_latin2_metrics_init_widths): Updated.
-+	(af_ltn2_uniranges): Removed.
-+
-+	* src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
-+	Updated.
-+
-+	* src/autofit/afpic.c (autofit_module_class_pic_init): Updated.
-+	* src/autofit/afpic.h (AF_STYLE_CLASSES_GET): New macro.
-+	(AFModulePIC): Add `af_style_classes' and `af_style_classes_rec'
-+	members.
-+
-+	* src/autofit/afranges.h: Updated.
-+
-+	* src/autofit/rules.mk (AUTOF_DRV_H): Add `afstyles.h'.
-+
-+2013-12-19  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] Factor scripts and uniranges out of writing system files.
-+
-+	* src/autofit/afranges.c, src/autofit/afranges.h: New files.
-+
-+	* src/autofit/afscript.h: Extend `SCRIPT' macro with more
-+	parameters, taking data from the writing system files.
-+
-+	* src/autofit/aftypes.h: Updated.
-+
-+	* src/autofit/afglobal.c: Include `afranges.h'.
-+	Load `afscript.h' to call AF_DEFINE_SCRIPT_CLASS.
-+	* src/autofit/afglobal.c: Include `afranges.h'.
-+	Load `afscript.h' to call AF_DECLARE_SCRIPT_CLASS.
-+
-+	* src/autofit/afcjk.c, src/autofit/afcjk.h: Updated.
-+	* src/autofit/afdummy.c, src/autofit/afdummy.h: Updated.
-+	* src/autofit/afindic.c, src/autofit/afindic.h: Updated.
-+	* src/autofit/aflatin.c, src/autofit/aflatin.h: Updated.
-+	* src/autofit/aflatn2.c, src/autofit/aflatn2.h: Updated.
-+
-+	* src/autofit/afpic.c: Updated.
-+
-+	* src/autofir/autofit.c: Include `afranges.c'.
-+	* src/autofit/rules.mk (AUTOF_DRV_SRC): Add `afranges.c'.
-+
-+2013-12-18  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] More code orthogonality.
-+
-+	* src/autofit/aftypes.h (AF_StyleMetrics): Replace `script_class'
-+	pointer to an `AF_ScriptClass' structure with `script' index of type
-+	`AF_Script'.
-+	Move some code around.
-+
-+	* src/autofit/afcjk.c: Include `afpic.h'.
-+	(af_cjk_metrics_init_widths, af_cjk_metrics_init_blues,
-+	af_cjk_hint_edges): Updated.
-+
-+	* src/autofit/aflatin.c: Include `afpic.h'.
-+	(af_latin_metrics_init_widths, af_latin_metrics_init_blues,
-+	af_latin_metrics_scale_dim, af_latin_hint_edges): Updated.
-+
-+	* src/autofit/afglobal.c (af_face_globals_get_metrics): Updated.
-+
-+	* src/autofit/afloader.c (af_loader_load_g, af_loader_load_glyph):
-+	Updated.
-+
-+2013-12-18  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/ScriptMetrics/StyleMetrics/.
-+
-+2013-12-18  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/script_{metrics,hints}/style_{metrics,hints}/
-+
-+2013-12-18  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/gscripts/gstyles/.
-+
-+2013-12-18  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/glyph_scripts/glyph_styles/.
-+
-+	This is the first commit of a series to create a new top-level
-+	structure (a `style') for handling scripts, writing_systems, and
-+	soon-to-be-added coverages.
-+
-+2013-12-17  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/AF_Script_/AF_WritingSystem_/ where appropriate.
-+
-+2013-12-11  Infinality  <infinality at infinality.net>
-+
-+	[truetype] Simplify logic of rendering modes.
-+
-+	This patch unifies the subpixel and non-subpixel cases.
-+
-+	* src/truetype/ttinterp.h (TT_ExecContextRec): Remove
-+	`grayscale_hinting'; all code should refer to `grayscale' instead.
-+	Remove unused `native_hinting' member.
-+	Rename `subpixel_hinting' member to `subpixel.
-+
-+	* src/truetype/ttgload.c (TT_LOADER_SET_PP): Updated.
-+	(tt_loader_init): Updated.
-+
-+	* src/truetype/ttinterp.c (Ins_GETINFO): Simplify.
-+	Updated.
-+
-+2013-12-11  Werner Lemberg  <wl at gnu.org>
-+
-+	[documentation] Add section how to include FreeType header files.
-+	Problem reported by David Kastrup <dak at gnu.org>.
-+
-+	Surprisingly, a description how to do that was completely missing in
-+	the API reference.
-+
-+	* include/freetype.h, include/ftchapters.h: New documentation
-+	section `header_inclusion'.
-+
-+2013-12-10  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/DFLT/NONE/, s/dflt/none/.
-+
-+2013-12-10  Werner Lemberg  <wl at gnu.org>
-+
-+	[autofit] s/AF_SCRIPT_NONE/AF_SCRIPT_UNASSIGNED/.
-+
-+2013-12-10  Werner Lemberg  <wl at gnu.org>
-+
-+	[truetype] Fix scaling of vertical phantom points.
-+
-+	* src/truetype/ttgload.c (load_truetype_glyph): Scale pp3.x and
-+	pp4.x also.
-+
-+2013-12-10  Werner Lemberg  <wl at gnu.org>
-+
-+	[truetype] Fix positioning of composite glyphs.
-+	Problem reported by Nigel Tao <nigeltao at golang.org>.
-+
-+	* src/truetype/ttgload.c (TT_Hint_Glyph): Remove code that shifts
-+	the glyph (component) by a fractional value computed from the LSB
-+	phantom point.  This is wrong, since the horizontal phantom points
-+	get rounded horizontally later on.
-+
- 2013-12-08  Werner Lemberg  <wl at gnu.org>
- 
- 	* Version 2.5.2 released.
-diff --git a/include/freetype.h b/include/freetype.h
-index 39a18af..372319a 100644
---- a/include/freetype.h
-+++ b/include/freetype.h
-@@ -42,6 +42,38 @@ FT_BEGIN_HEADER
-   /*************************************************************************/
-   /*                                                                       */
-   /* <Section>                                                             */
-+  /*    header_inclusion                                                   */
-+  /*                                                                       */
-+  /* <Title>                                                               */
-+  /*    FreeType's header inclusion scheme                                 */
-+  /*                                                                       */
-+  /* <Abstract>                                                            */
-+  /*    How client applications should include FreeType header files.      */
-+  /*                                                                       */
-+  /* <Description>                                                         */
-+  /*    To be as flexible as possible (and for historical reasons),        */
-+  /*    FreeType uses a very special inclusion scheme to load header       */
-+  /*    files, for example                                                 */
-+  /*                                                                       */
-+  /*    {                                                                  */
-+  /*      #include <ft2build.h>                                            */
-+  /*                                                                       */
-+  /*      #include FT_FREETYPE_H                                           */
-+  /*      #include FT_OUTLINE_H                                            */
-+  /*    }                                                                  */
-+  /*                                                                       */
-+  /*    A compiler and its preprocessor only needs an include path to find */
-+  /*    the file `ft2build.h'; the exact locations and names of the other  */
-+  /*    FreeType header files are hidden by preprocessor macro names,      */
-+  /*    loaded by `ft2build.h'.  The API documentation always gives the    */
-+  /*    header macro name needed for a particular function.                */
-+  /*                                                                       */
-+  /*************************************************************************/
-+
-+
-+  /*************************************************************************/
-+  /*                                                                       */
-+  /* <Section>                                                             */
-   /*    user_allocation                                                    */
-   /*                                                                       */
-   /* <Title>                                                               */
-diff --git a/include/ftchapters.h b/include/ftchapters.h
-index 4b1059a..d333761 100644
---- a/include/ftchapters.h
-+++ b/include/ftchapters.h
-@@ -15,6 +15,7 @@
- /*    General Remarks                                                      */
- /*                                                                         */
- /* <Sections>                                                              */
-+/*    header_inclusion                                                     */
- /*    user_allocation                                                      */
- /*                                                                         */
- /***************************************************************************/
-diff --git a/include/internal/ftrfork.h b/include/internal/ftrfork.h
-index 6307f2d..fbc3283 100644
---- a/include/internal/ftrfork.h
-+++ b/include/internal/ftrfork.h
-@@ -4,7 +4,7 @@
- /*                                                                         */
- /*    Embedded resource forks accessor (specification).                    */
- /*                                                                         */
--/*  Copyright 2004, 2006, 2007, 2012 by                                    */
-+/*  Copyright 2004, 2006, 2007, 2012, 2013 by                              */
- /*  Masatake YAMATO and Redhat K.K.                                        */
- /*                                                                         */
- /*  This file is part of the FreeType project, and may only be used,       */
-@@ -94,7 +94,7 @@ FT_BEGIN_HEADER
-   /* this array is a function in PIC mode, so no ; is needed in END */
- #define CONST_FT_RFORK_RULE_ARRAY_BEGIN( name, type )  \
-           void                                         \
--          FT_Init_ ## name( type*  storage )           \
-+          FT_Init_Table_ ## name( type*  storage )     \
-           {                                            \
-             type*  local = storage;                    \
-                                                        \
-diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
-index 22ef6d5..6e214c8 100644
---- a/src/autofit/afblue.c
-+++ b/src/autofit/afblue.c
-@@ -108,7 +108,7 @@
-   };
- 
- 
--  /* stringsets are specific to scripts */
-+  /* stringsets are specific to styles */
-   FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec )
-   af_blue_stringsets[] =
-   {
-diff --git a/src/autofit/afblue.cin b/src/autofit/afblue.cin
-index c693d89..c6762be 100644
---- a/src/autofit/afblue.cin
-+++ b/src/autofit/afblue.cin
-@@ -27,7 +27,7 @@
-   };
- 
- 
--  /* stringsets are specific to scripts */
-+  /* stringsets are specific to styles */
-   FT_LOCAL_ARRAY_DEF( AF_Blue_StringRec )
-   af_blue_stringsets[] =
-   {
-diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
-index 86a3649..75f60df 100644
---- a/src/autofit/afblue.h
-+++ b/src/autofit/afblue.h
-@@ -130,7 +130,7 @@ FT_BEGIN_HEADER
-   /*************************************************************************/
-   /*************************************************************************/
- 
--  /* The next level is to group blue strings into script-specific sets. */
-+  /* The next level is to group blue strings into style-specific sets. */
- 
- 
-   /* Properties are specific to a writing system.  We assume that a given  */
-diff --git a/src/autofit/afblue.hin b/src/autofit/afblue.hin
-index 00282c3..4fc9917 100644
---- a/src/autofit/afblue.hin
-+++ b/src/autofit/afblue.hin
-@@ -90,7 +90,7 @@ FT_BEGIN_HEADER
-   /*************************************************************************/
-   /*************************************************************************/
- 
--  /* The next level is to group blue strings into script-specific sets. */
-+  /* The next level is to group blue strings into style-specific sets. */
- 
- 
-   /* Properties are specific to a writing system.  We assume that a given  */
-diff --git a/src/autofit/afcjk.c b/src/autofit/afcjk.c
-index 7a6f835..4cc01b6 100644
---- a/src/autofit/afcjk.c
-+++ b/src/autofit/afcjk.c
-@@ -2,7 +2,7 @@
- /*                                                                         */
- /*  afcjk.c                                                                */
- /*                                                                         */
--/*    Auto-fitter hinting routines for CJK script (body).                  */
-+/*    Auto-fitter hinting routines for CJK writing system (body).          */
- /*                                                                         */
- /*  Copyright 2006-2013 by                                                 */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -27,6 +27,7 @@
- #include FT_INTERNAL_DEBUG_H
- 
- #include "afglobal.h"
-+#include "afpic.h"
- #include "aflatin.h"
- 
- 
-@@ -74,10 +75,10 @@
- 
- 
-     FT_TRACE5(( "\n"
--                "cjk standard widths computation (script `%s')\n"
-+                "cjk standard widths computation (style `%s')\n"
-                 "===============================================\n"
-                 "\n",
--                af_script_names[metrics->root.script_class->script] ));
-+                af_style_names[metrics->root.style_class->style] ));
- 
-     af_glyph_hints_init( hints, face->memory );
- 
-@@ -91,15 +92,21 @@
-       AF_CJKMetricsRec  dummy[1];
-       AF_Scaler         scaler = &dummy->root.scaler;
- 
-+#ifdef FT_CONFIG_OPTION_PIC
-+      AF_FaceGlobals  globals = metrics->root.globals;
-+#endif
-+
-+      AF_StyleClass   style_class  = metrics->root.style_class;
-+      AF_ScriptClass  script_class = AF_SCRIPT_CLASSES_GET
-+                                       [style_class->script];
-+
- 
--      glyph_index = FT_Get_Char_Index(
--                      face,
--                      metrics->root.script_class->standard_char );
-+      glyph_index = FT_Get_Char_Index( face, script_class->standard_char );
-       if ( glyph_index == 0 )
-         goto Exit;
- 
-       FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
--                  metrics->root.script_class->standard_char, glyph_index ));
-+                  script_class->standard_char, glyph_index ));
- 
-       error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
-       if ( error || face->glyph->outline.n_points <= 0 )
-@@ -118,7 +125,7 @@
-       scaler->render_mode = FT_RENDER_MODE_NORMAL;
-       scaler->flags       = 0;
- 
--      af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy );
-+      af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
- 
-       error = af_glyph_hints_reload( hints, &face->glyph->outline );
-       if ( error )
-@@ -226,7 +233,9 @@
-     AF_CJKAxis  axis;
-     FT_Outline  outline;
- 
--    AF_Blue_Stringset         bss = metrics->root.script_class->blue_stringset;
-+    AF_StyleClass  sc = metrics->root.style_class;
-+
-+    AF_Blue_Stringset         bss = sc->blue_stringset;
-     const AF_Blue_StringRec*  bs  = &af_blue_stringsets[bss];
- 
- #ifdef FT_DEBUG_LEVEL_TRACE
-@@ -246,9 +255,9 @@
- #endif
- 
- 
--    /* we walk over the blue character strings as specified in the    */
--    /* script's entry in the `af_blue_stringset' array, computing its */
--    /* extremum points (depending on the string properties)           */
-+    /* we walk over the blue character strings as specified in the   */
-+    /* style's entry in the `af_blue_stringset' array, computing its */
-+    /* extremum points (depending on the string properties)          */
- 
-     FT_TRACE5(( "cjk blue zones computation\n"
-                 "==========================\n"
-@@ -1234,7 +1243,7 @@
-     FT_UInt32       scaler_flags, other_flags;
- 
- 
--    af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics );
-+    af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
- 
-     /*
-      *  correct x_scale and y_scale when needed, since they may have
-@@ -1665,9 +1674,9 @@
- #endif
- 
- 
--    FT_TRACE5(( "cjk %s edge hinting (script `%s')\n",
-+    FT_TRACE5(( "cjk %s edge hinting (style `%s')\n",
-                 dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
--                af_script_names[hints->metrics->script_class->script] ));
-+                af_style_names[hints->metrics->style_class->style] ));
- 
-     /* we begin by aligning all stems relative to the blue zone */
- 
-@@ -2210,60 +2219,18 @@
- 
-     sizeof ( AF_CJKMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) af_cjk_metrics_init,
--    (AF_Script_ScaleMetricsFunc)af_cjk_metrics_scale,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) af_cjk_metrics_init,
-+    (AF_WritingSystem_ScaleMetricsFunc)af_cjk_metrics_scale,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   af_cjk_hints_init,
--    (AF_Script_ApplyHintsFunc)  af_cjk_hints_apply
-+    (AF_WritingSystem_InitHintsFunc)   af_cjk_hints_init,
-+    (AF_WritingSystem_ApplyHintsFunc)  af_cjk_hints_apply
-   )
- 
- 
--  /* this corresponds to Unicode 6.0 */
--
--  /* XXX: this should probably fine tuned to differentiate better between */
--  /*      scripts...                                                      */
--
--  static const AF_Script_UniRangeRec  af_hani_uniranges[] =
--  {
--    AF_UNIRANGE_REC(  0x1100UL,  0x11FFUL ),  /* Hangul Jamo                             */
--    AF_UNIRANGE_REC(  0x2E80UL,  0x2EFFUL ),  /* CJK Radicals Supplement                 */
--    AF_UNIRANGE_REC(  0x2F00UL,  0x2FDFUL ),  /* Kangxi Radicals                         */
--    AF_UNIRANGE_REC(  0x2FF0UL,  0x2FFFUL ),  /* Ideographic Description Characters      */
--    AF_UNIRANGE_REC(  0x3000UL,  0x303FUL ),  /* CJK Symbols and Punctuation             */
--    AF_UNIRANGE_REC(  0x3040UL,  0x309FUL ),  /* Hiragana                                */
--    AF_UNIRANGE_REC(  0x30A0UL,  0x30FFUL ),  /* Katakana                                */
--    AF_UNIRANGE_REC(  0x3100UL,  0x312FUL ),  /* Bopomofo                                */
--    AF_UNIRANGE_REC(  0x3130UL,  0x318FUL ),  /* Hangul Compatibility Jamo               */
--    AF_UNIRANGE_REC(  0x3190UL,  0x319FUL ),  /* Kanbun                                  */
--    AF_UNIRANGE_REC(  0x31A0UL,  0x31BFUL ),  /* Bopomofo Extended                       */
--    AF_UNIRANGE_REC(  0x31C0UL,  0x31EFUL ),  /* CJK Strokes                             */
--    AF_UNIRANGE_REC(  0x31F0UL,  0x31FFUL ),  /* Katakana Phonetic Extensions            */
--    AF_UNIRANGE_REC(  0x3200UL,  0x32FFUL ),  /* Enclosed CJK Letters and Months         */
--    AF_UNIRANGE_REC(  0x3300UL,  0x33FFUL ),  /* CJK Compatibility                       */
--    AF_UNIRANGE_REC(  0x3400UL,  0x4DBFUL ),  /* CJK Unified Ideographs Extension A      */
--    AF_UNIRANGE_REC(  0x4DC0UL,  0x4DFFUL ),  /* Yijing Hexagram Symbols                 */
--    AF_UNIRANGE_REC(  0x4E00UL,  0x9FFFUL ),  /* CJK Unified Ideographs                  */
--    AF_UNIRANGE_REC(  0xA960UL,  0xA97FUL ),  /* Hangul Jamo Extended-A                  */
--    AF_UNIRANGE_REC(  0xAC00UL,  0xD7AFUL ),  /* Hangul Syllables                        */
--    AF_UNIRANGE_REC(  0xD7B0UL,  0xD7FFUL ),  /* Hangul Jamo Extended-B                  */
--    AF_UNIRANGE_REC(  0xF900UL,  0xFAFFUL ),  /* CJK Compatibility Ideographs            */
--    AF_UNIRANGE_REC(  0xFE10UL,  0xFE1FUL ),  /* Vertical forms                          */
--    AF_UNIRANGE_REC(  0xFE30UL,  0xFE4FUL ),  /* CJK Compatibility Forms                 */
--    AF_UNIRANGE_REC(  0xFF00UL,  0xFFEFUL ),  /* Halfwidth and Fullwidth Forms           */
--    AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ),  /* Kana Supplement                         */
--    AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ),  /* Tai Xuan Hing Symbols                   */
--    AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ),  /* Enclosed Ideographic Supplement         */
--    AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ),  /* CJK Unified Ideographs Extension B      */
--    AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ),  /* CJK Unified Ideographs Extension C      */
--    AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ),  /* CJK Unified Ideographs Extension D      */
--    AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ),  /* CJK Compatibility Ideographs Supplement */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
--
- #else /* !AF_CONFIG_OPTION_CJK */
- 
-+
-   AF_DEFINE_WRITING_SYSTEM_CLASS(
-     af_cjk_writing_system_class,
- 
-@@ -2271,33 +2238,16 @@
- 
-     sizeof ( AF_CJKMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) NULL,
--    (AF_Script_ScaleMetricsFunc)NULL,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) NULL,
-+    (AF_WritingSystem_ScaleMetricsFunc)NULL,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   NULL,
--    (AF_Script_ApplyHintsFunc)  NULL
-+    (AF_WritingSystem_InitHintsFunc)   NULL,
-+    (AF_WritingSystem_ApplyHintsFunc)  NULL
-   )
- 
- 
--  static const AF_Script_UniRangeRec  af_hani_uniranges[] =
--  {
--    AF_UNIRANGE_REC( 0UL, 0UL )
--  };
--
- #endif /* !AF_CONFIG_OPTION_CJK */
- 
- 
--  AF_DEFINE_SCRIPT_CLASS(
--    af_hani_script_class,
--
--    AF_SCRIPT_HANI,
--    AF_BLUE_STRINGSET_HANI,
--    AF_WRITING_SYSTEM_CJK,
--
--    af_hani_uniranges,
--    0x7530 /* 田 */
--  )
--
--
- /* END */
-diff --git a/src/autofit/afcjk.h b/src/autofit/afcjk.h
-index 6f5bdc5..a260b09 100644
---- a/src/autofit/afcjk.h
-+++ b/src/autofit/afcjk.h
-@@ -2,7 +2,7 @@
- /*                                                                         */
- /*  afcjk.h                                                                */
- /*                                                                         */
--/*    Auto-fitter hinting routines for CJK script (specification).         */
-+/*    Auto-fitter hinting routines for CJK writing system (specification). */
- /*                                                                         */
- /*  Copyright 2006, 2007, 2011-2013 by                                     */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -31,11 +31,6 @@ FT_BEGIN_HEADER
-   AF_DECLARE_WRITING_SYSTEM_CLASS( af_cjk_writing_system_class )
- 
- 
--  /* the CJK-specific script classes */
--
--  AF_DECLARE_SCRIPT_CLASS( af_hani_script_class )
--
--
-   /*************************************************************************/
-   /*************************************************************************/
-   /*****                                                               *****/
-@@ -105,9 +100,9 @@ FT_BEGIN_HEADER
- 
-   typedef struct  AF_CJKMetricsRec_
-   {
--    AF_ScriptMetricsRec  root;
--    FT_UInt              units_per_em;
--    AF_CJKAxisRec        axis[AF_DIMENSION_MAX];
-+    AF_StyleMetricsRec  root;
-+    FT_UInt             units_per_em;
-+    AF_CJKAxisRec       axis[AF_DIMENSION_MAX];
- 
-   } AF_CJKMetricsRec, *AF_CJKMetrics;
- 
-diff --git a/src/autofit/afdummy.c b/src/autofit/afdummy.c
-index aaa034d..f8702a1 100644
---- a/src/autofit/afdummy.c
-+++ b/src/autofit/afdummy.c
-@@ -23,8 +23,8 @@
- 
- 
-   static FT_Error
--  af_dummy_hints_init( AF_GlyphHints     hints,
--                       AF_ScriptMetrics  metrics )
-+  af_dummy_hints_init( AF_GlyphHints    hints,
-+                       AF_StyleMetrics  metrics )
-   {
-     af_glyph_hints_rescale( hints, metrics );
- 
-@@ -57,26 +57,14 @@
- 
-     AF_WRITING_SYSTEM_DUMMY,
- 
--    sizeof ( AF_ScriptMetricsRec ),
-+    sizeof ( AF_StyleMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) NULL,
--    (AF_Script_ScaleMetricsFunc)NULL,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) NULL,
-+    (AF_WritingSystem_ScaleMetricsFunc)NULL,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   af_dummy_hints_init,
--    (AF_Script_ApplyHintsFunc)  af_dummy_hints_apply
--  )
--
--
--  AF_DEFINE_SCRIPT_CLASS(
--    af_dflt_script_class,
--
--    AF_SCRIPT_DFLT,
--    (AF_Blue_Stringset)0,
--    AF_WRITING_SYSTEM_DUMMY,
--
--    NULL,
--    '\0'
-+    (AF_WritingSystem_InitHintsFunc)   af_dummy_hints_init,
-+    (AF_WritingSystem_ApplyHintsFunc)  af_dummy_hints_apply
-   )
- 
- 
-diff --git a/src/autofit/afdummy.h b/src/autofit/afdummy.h
-index bc34ddd..ad1b0d3 100644
---- a/src/autofit/afdummy.h
-+++ b/src/autofit/afdummy.h
-@@ -25,14 +25,10 @@
- 
- FT_BEGIN_HEADER
- 
-- /*  A dummy writing system and script class used when no hinting should be
--  *  performed.
--  */
-+  /* A dummy writing system used when no hinting should be performed. */
- 
-   AF_DECLARE_WRITING_SYSTEM_CLASS( af_dummy_writing_system_class )
- 
--  AF_DECLARE_SCRIPT_CLASS( af_dflt_script_class )
--
- /* */
- 
- FT_END_HEADER
-diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
-index dc62bd7..1b4721c 100644
---- a/src/autofit/afglobal.c
-+++ b/src/autofit/afglobal.c
-@@ -17,6 +17,7 @@
- 
- 
- #include "afglobal.h"
-+#include "afranges.h"
- 
-   /* get writing system specific header files */
- #undef  WRITING_SYSTEM
-@@ -27,6 +28,29 @@
- #include "afpic.h"
- 
- 
-+#undef  SCRIPT
-+#define SCRIPT( s, S, d, dc )          \
-+          AF_DEFINE_SCRIPT_CLASS(      \
-+            af_ ## s ## _script_class, \
-+            AF_SCRIPT_ ## S,           \
-+            af_ ## s ## _uniranges,    \
-+            dc )
-+
-+#include "afscript.h"
-+
-+
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, ss )  \
-+          AF_DEFINE_STYLE_CLASS(      \
-+            af_ ## s ## _style_class, \
-+            AF_STYLE_ ## S,           \
-+            ws,                       \
-+            sc,                       \
-+            ss )
-+
-+#include "afstyles.h"
-+
-+
- #ifndef FT_CONFIG_OPTION_PIC
- 
- #undef  WRITING_SYSTEM
-@@ -44,7 +68,7 @@
- 
- 
- #undef  SCRIPT
--#define SCRIPT( s, S, d )             \
-+#define SCRIPT( s, S, d, dc )         \
-           &af_ ## s ## _script_class,
- 
-   FT_LOCAL_ARRAY_DEF( AF_ScriptClass )
-@@ -56,41 +80,55 @@
-     NULL  /* do not remove */
-   };
- 
-+
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, ss ) \
-+          &af_ ## s ## _style_class,
-+
-+  FT_LOCAL_ARRAY_DEF( AF_StyleClass )
-+  af_style_classes[] =
-+  {
-+
-+#include "afstyles.h"
-+
-+    NULL  /* do not remove */
-+  };
-+
- #endif /* !FT_CONFIG_OPTION_PIC */
- 
- 
- #ifdef FT_DEBUG_LEVEL_TRACE
- 
--#undef  SCRIPT
--#define SCRIPT( s, S, d )  #s,
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, ss )  #s,
- 
-   FT_LOCAL_ARRAY_DEF( char* )
--  af_script_names[] =
-+  af_style_names[] =
-   {
- 
--#include "afscript.h"
-+#include "afstyles.h"
- 
-   };
- 
- #endif /* FT_DEBUG_LEVEL_TRACE */
- 
- 
--  /* Compute the script index of each glyph within a given face. */
-+  /* Compute the style index of each glyph within a given face. */
- 
-   static FT_Error
--  af_face_globals_compute_script_coverage( AF_FaceGlobals  globals )
-+  af_face_globals_compute_style_coverage( AF_FaceGlobals  globals )
-   {
-     FT_Error    error;
-     FT_Face     face        = globals->face;
-     FT_CharMap  old_charmap = face->charmap;
--    FT_Byte*    gscripts    = globals->glyph_scripts;
-+    FT_Byte*    gstyles     = globals->glyph_styles;
-     FT_UInt     ss;
-     FT_UInt     i;
- 
- 
--    /* the value AF_SCRIPT_NONE means `uncovered glyph' */
--    FT_MEM_SET( globals->glyph_scripts,
--                AF_SCRIPT_NONE,
-+    /* the value AF_STYLE_UNASSIGNED means `uncovered glyph' */
-+    FT_MEM_SET( globals->glyph_styles,
-+                AF_STYLE_UNASSIGNED,
-                 globals->glyph_count );
- 
-     error = FT_Select_Charmap( face, FT_ENCODING_UNICODE );
-@@ -104,10 +142,13 @@
-       goto Exit;
-     }
- 
--    /* scan each script in a Unicode charmap */
--    for ( ss = 0; AF_SCRIPT_CLASSES_GET[ss]; ss++ )
-+    /* scan each style in a Unicode charmap */
-+    for ( ss = 0; AF_STYLE_CLASSES_GET[ss]; ss++ )
-     {
--      AF_ScriptClass      script_class = AF_SCRIPT_CLASSES_GET[ss];
-+      AF_StyleClass       style_class =
-+                            AF_STYLE_CLASSES_GET[ss];
-+      AF_ScriptClass      script_class =
-+                            AF_SCRIPT_CLASSES_GET[style_class->script];
-       AF_Script_UniRange  range;
- 
- 
-@@ -116,7 +157,7 @@
- 
-       /*
-        *  Scan all Unicode points in the range and set the corresponding
--       *  glyph script index.
-+       *  glyph style index.
-        */
-       for ( range = script_class->script_uni_ranges;
-             range->first != 0;
-@@ -130,8 +171,8 @@
- 
-         if ( gindex != 0                             &&
-              gindex < (FT_ULong)globals->glyph_count &&
--             gscripts[gindex] == AF_SCRIPT_NONE )
--          gscripts[gindex] = (FT_Byte)ss;
-+             gstyles[gindex] == AF_STYLE_UNASSIGNED  )
-+          gstyles[gindex] = (FT_Byte)ss;
- 
-         for (;;)
-         {
-@@ -141,8 +182,8 @@
-             break;
- 
-           if ( gindex < (FT_ULong)globals->glyph_count &&
--               gscripts[gindex] == AF_SCRIPT_NONE )
--            gscripts[gindex] = (FT_Byte)ss;
-+               gstyles[gindex] == AF_STYLE_UNASSIGNED  )
-+            gstyles[gindex] = (FT_Byte)ss;
-         }
-       }
-     }
-@@ -154,7 +195,7 @@
- 
- 
-       if ( gindex != 0 && gindex < (FT_ULong)globals->glyph_count )
--        gscripts[gindex] |= AF_DIGIT;
-+        gstyles[gindex] |= AF_DIGIT;
-     }
- 
-   Exit:
-@@ -162,17 +203,17 @@
-      *  By default, all uncovered glyphs are set to the fallback script.
-      *  XXX: Shouldn't we disable hinting or do something similar?
-      */
--    if ( globals->module->fallback_script != AF_SCRIPT_NONE )
-+    if ( globals->module->fallback_script != AF_STYLE_UNASSIGNED )
-     {
-       FT_Long  nn;
- 
- 
-       for ( nn = 0; nn < globals->glyph_count; nn++ )
-       {
--        if ( ( gscripts[nn] & ~AF_DIGIT ) == AF_SCRIPT_NONE )
-+        if ( ( gstyles[nn] & ~AF_DIGIT ) == AF_STYLE_UNASSIGNED )
-         {
--          gscripts[nn] &= ~AF_SCRIPT_NONE;
--          gscripts[nn] |= globals->module->fallback_script;
-+          gstyles[nn] &= ~AF_STYLE_UNASSIGNED;
-+          gstyles[nn] |= globals->module->fallback_script;
-         }
-       }
-     }
-@@ -198,12 +239,12 @@
-                             face->num_glyphs * sizeof ( FT_Byte ) ) )
-       goto Exit;
- 
--    globals->face          = face;
--    globals->glyph_count   = face->num_glyphs;
--    globals->glyph_scripts = (FT_Byte*)( globals + 1 );
--    globals->module        = module;
-+    globals->face         = face;
-+    globals->glyph_count  = face->num_glyphs;
-+    globals->glyph_styles = (FT_Byte*)( globals + 1 );
-+    globals->module       = module;
- 
--    error = af_face_globals_compute_script_coverage( globals );
-+    error = af_face_globals_compute_style_coverage( globals );
-     if ( error )
-     {
-       af_face_globals_free( globals );
-@@ -227,26 +268,26 @@
-       FT_UInt    nn;
- 
- 
--      for ( nn = 0; nn < AF_SCRIPT_MAX; nn++ )
-+      for ( nn = 0; nn < AF_STYLE_MAX; nn++ )
-       {
-         if ( globals->metrics[nn] )
-         {
--          AF_ScriptClass         script_class =
--            AF_SCRIPT_CLASSES_GET[nn];
-+          AF_StyleClass          style_class =
-+            AF_STYLE_CLASSES_GET[nn];
-           AF_WritingSystemClass  writing_system_class =
--            AF_WRITING_SYSTEM_CLASSES_GET[script_class->writing_system];
-+            AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
- 
- 
--          if ( writing_system_class->script_metrics_done )
--            writing_system_class->script_metrics_done( globals->metrics[nn] );
-+          if ( writing_system_class->style_metrics_done )
-+            writing_system_class->style_metrics_done( globals->metrics[nn] );
- 
-           FT_FREE( globals->metrics[nn] );
-         }
-       }
- 
--      globals->glyph_count   = 0;
--      globals->glyph_scripts = NULL;  /* no need to free this one! */
--      globals->face          = NULL;
-+      globals->glyph_count  = 0;
-+      globals->glyph_styles = NULL;  /* no need to free this one! */
-+      globals->face         = NULL;
- 
-       FT_FREE( globals );
-     }
-@@ -254,16 +295,16 @@
- 
- 
-   FT_LOCAL_DEF( FT_Error )
--  af_face_globals_get_metrics( AF_FaceGlobals     globals,
--                               FT_UInt            gindex,
--                               FT_UInt            options,
--                               AF_ScriptMetrics  *ametrics )
-+  af_face_globals_get_metrics( AF_FaceGlobals    globals,
-+                               FT_UInt           gindex,
-+                               FT_UInt           options,
-+                               AF_StyleMetrics  *ametrics )
-   {
--    AF_ScriptMetrics  metrics = NULL;
-+    AF_StyleMetrics  metrics = NULL;
- 
--    AF_Script              script = (AF_Script)( options & 15 );
-+    AF_Style               style = (AF_Style)( options & 15 );
-     AF_WritingSystemClass  writing_system_class;
--    AF_ScriptClass         script_class;
-+    AF_StyleClass          style_class;
- 
-     FT_Error  error = FT_Err_Ok;
- 
-@@ -274,43 +315,44 @@
-       goto Exit;
-     }
- 
--    /* if we have a forced script (via `options'), use it, */
--    /* otherwise look into `glyph_scripts' array           */
--    if ( script == AF_SCRIPT_DFLT || script + 1 >= AF_SCRIPT_MAX )
--      script = (AF_Script)( globals->glyph_scripts[gindex] & AF_SCRIPT_NONE );
-+    /* if we have a forced style (via `options'), use it, */
-+    /* otherwise look into `glyph_styles' array           */
-+    if ( style == AF_STYLE_NONE_DEFAULT || style + 1 >= AF_STYLE_MAX )
-+      style = (AF_Style)( globals->glyph_styles[gindex] &
-+                          AF_STYLE_UNASSIGNED           );
- 
--    script_class         = AF_SCRIPT_CLASSES_GET[script];
-+    style_class          = AF_STYLE_CLASSES_GET[style];
-     writing_system_class = AF_WRITING_SYSTEM_CLASSES_GET
--                             [script_class->writing_system];
-+                             [style_class->writing_system];
- 
--    metrics = globals->metrics[script];
-+    metrics = globals->metrics[style];
-     if ( metrics == NULL )
-     {
-       /* create the global metrics object if necessary */
-       FT_Memory  memory = globals->face->memory;
- 
- 
--      if ( FT_ALLOC( metrics, writing_system_class->script_metrics_size ) )
-+      if ( FT_ALLOC( metrics, writing_system_class->style_metrics_size ) )
-         goto Exit;
- 
--      metrics->script_class = script_class;
--      metrics->globals      = globals;
-+      metrics->style_class = style_class;
-+      metrics->globals     = globals;
- 
--      if ( writing_system_class->script_metrics_init )
-+      if ( writing_system_class->style_metrics_init )
-       {
--        error = writing_system_class->script_metrics_init( metrics,
--                                                           globals->face );
-+        error = writing_system_class->style_metrics_init( metrics,
-+                                                          globals->face );
-         if ( error )
-         {
--          if ( writing_system_class->script_metrics_done )
--            writing_system_class->script_metrics_done( metrics );
-+          if ( writing_system_class->style_metrics_done )
-+            writing_system_class->style_metrics_done( metrics );
- 
-           FT_FREE( metrics );
-           goto Exit;
-         }
-       }
- 
--      globals->metrics[script] = metrics;
-+      globals->metrics[style] = metrics;
-     }
- 
-   Exit:
-@@ -325,7 +367,7 @@
-                             FT_UInt         gindex )
-   {
-     if ( gindex < (FT_ULong)globals->glyph_count )
--      return (FT_Bool)( globals->glyph_scripts[gindex] & AF_DIGIT );
-+      return (FT_Bool)( globals->glyph_styles[gindex] & AF_DIGIT );
- 
-     return (FT_Bool)0;
-   }
-diff --git a/src/autofit/afglobal.h b/src/autofit/afglobal.h
-index 227eee7..b0316e6 100644
---- a/src/autofit/afglobal.h
-+++ b/src/autofit/afglobal.h
-@@ -31,29 +31,48 @@ FT_BEGIN_HEADER
-   FT_LOCAL_ARRAY( AF_WritingSystemClass )
-   af_writing_system_classes[];
- 
-+
-+#undef  SCRIPT
-+#define SCRIPT( s, S, d, dc )                                  \
-+          AF_DECLARE_SCRIPT_CLASS( af_ ## s ## _script_class )
-+
-+#include "afscript.h"
-+
-   FT_LOCAL_ARRAY( AF_ScriptClass )
-   af_script_classes[];
- 
-+
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, ss )                         \
-+          AF_DECLARE_STYLE_CLASS( af_ ## s ## _style_class )
-+
-+#include "afstyles.h"
-+
-+  FT_LOCAL_ARRAY( AF_StyleClass )
-+  af_style_classes[];
-+
-+
- #ifdef FT_DEBUG_LEVEL_TRACE
-   FT_LOCAL_ARRAY( char* )
--  af_script_names[];
-+  af_style_names[];
- #endif
- 
-+
-   /*
-    *  Default values and flags for both autofitter globals (found in
-    *  AF_ModuleRec) and face globals (in AF_FaceGlobalsRec).
-    */
- 
--  /* index of fallback script in `af_script_classes' */
-+  /* index of fallback script in `af_style_classes' */
- #ifdef AF_CONFIG_OPTION_CJK
--#define AF_SCRIPT_FALLBACK  AF_SCRIPT_HANI
-+#define AF_SCRIPT_FALLBACK  AF_STYLE_HANI_DEFAULT
- #else
--#define AF_SCRIPT_FALLBACK  AF_SCRIPT_DFLT
-+#define AF_SCRIPT_FALLBACK  AF_STYLE_NONE_DEFAULT
- #endif
-   /* a bit mask indicating an uncovered glyph        */
--#define AF_SCRIPT_NONE      0x7F
-+#define AF_STYLE_UNASSIGNED  0x7F
-   /* if this flag is set, we have an ASCII digit     */
--#define AF_DIGIT            0x80
-+#define AF_DIGIT              0x80
- 
-   /* `increase-x-height' property */
- #define AF_PROP_INCREASE_X_HEIGHT_MIN  6
-@@ -70,29 +89,29 @@ FT_BEGIN_HEADER
- 
- 
-   /*
--   *  Note that glyph_scripts[] maps each glyph to an index into the
--   *  `af_script_classes' array.
-+   *  Note that glyph_styles[] maps each glyph to an index into the
-+   *  `af_style_classes' array.
-    *
-    */
-   typedef struct  AF_FaceGlobalsRec_
-   {
--    FT_Face           face;
--    FT_Long           glyph_count;    /* same as face->num_glyphs */
--    FT_Byte*          glyph_scripts;
-+    FT_Face          face;
-+    FT_Long          glyph_count;    /* same as face->num_glyphs */
-+    FT_Byte*         glyph_styles;
- 
-     /* per-face auto-hinter properties */
--    FT_UInt           increase_x_height;
-+    FT_UInt          increase_x_height;
- 
--    AF_ScriptMetrics  metrics[AF_SCRIPT_MAX];
-+    AF_StyleMetrics  metrics[AF_STYLE_MAX];
- 
--    AF_Module         module;         /* to access global properties */
-+    AF_Module        module;         /* to access global properties */
- 
-   } AF_FaceGlobalsRec;
- 
- 
-   /*
-    *  model the global hints data for a given face, decomposed into
--   *  script-specific items
-+   *  style-specific items
-    */
- 
-   FT_LOCAL( FT_Error )
-@@ -101,10 +120,10 @@ FT_BEGIN_HEADER
-                        AF_Module        module );
- 
-   FT_LOCAL( FT_Error )
--  af_face_globals_get_metrics( AF_FaceGlobals     globals,
--                               FT_UInt            gindex,
--                               FT_UInt            options,
--                               AF_ScriptMetrics  *ametrics );
-+  af_face_globals_get_metrics( AF_FaceGlobals    globals,
-+                               FT_UInt           gindex,
-+                               FT_UInt           options,
-+                               AF_StyleMetrics  *ametrics );
- 
-   FT_LOCAL( void )
-   af_face_globals_free( AF_FaceGlobals  globals );
-diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c
-index ce504cc..dc8557e 100644
---- a/src/autofit/afhints.c
-+++ b/src/autofit/afhints.c
-@@ -533,8 +533,8 @@
-   /* Reset metrics. */
- 
-   FT_LOCAL_DEF( void )
--  af_glyph_hints_rescale( AF_GlyphHints     hints,
--                          AF_ScriptMetrics  metrics )
-+  af_glyph_hints_rescale( AF_GlyphHints    hints,
-+                          AF_StyleMetrics  metrics )
-   {
-     hints->metrics      = metrics;
-     hints->scaler_flags = metrics->scaler.flags;
-diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h
-index ce52325..5f1507f 100644
---- a/src/autofit/afhints.h
-+++ b/src/autofit/afhints.h
-@@ -27,7 +27,7 @@ FT_BEGIN_HEADER
- 
-   /*
-    *  The definition of outline glyph hints.  These are shared by all
--   *  script analysis routines (until now).
-+   *  writing system analysis routines (until now).
-    */
- 
-   typedef enum  AF_Dimension_
-@@ -343,31 +343,31 @@ FT_BEGIN_HEADER
- 
-   typedef struct  AF_GlyphHintsRec_
-   {
--    FT_Memory         memory;
-+    FT_Memory        memory;
- 
--    FT_Fixed          x_scale;
--    FT_Pos            x_delta;
-+    FT_Fixed         x_scale;
-+    FT_Pos           x_delta;
- 
--    FT_Fixed          y_scale;
--    FT_Pos            y_delta;
-+    FT_Fixed         y_scale;
-+    FT_Pos           y_delta;
- 
--    FT_Int            max_points;    /* number of allocated points */
--    FT_Int            num_points;    /* number of used points      */
--    AF_Point          points;        /* points array               */
-+    FT_Int           max_points;    /* number of allocated points */
-+    FT_Int           num_points;    /* number of used points      */
-+    AF_Point         points;        /* points array               */
- 
--    FT_Int            max_contours;  /* number of allocated contours */
--    FT_Int            num_contours;  /* number of used contours      */
--    AF_Point*         contours;      /* contours array               */
-+    FT_Int           max_contours;  /* number of allocated contours */
-+    FT_Int           num_contours;  /* number of used contours      */
-+    AF_Point*        contours;      /* contours array               */
- 
--    AF_AxisHintsRec   axis[AF_DIMENSION_MAX];
-+    AF_AxisHintsRec  axis[AF_DIMENSION_MAX];
- 
--    FT_UInt32         scaler_flags;  /* copy of scaler flags     */
--    FT_UInt32         other_flags;   /* free for script-specific */
--                                     /* implementations          */
--    AF_ScriptMetrics  metrics;
-+    FT_UInt32        scaler_flags;  /* copy of scaler flags    */
-+    FT_UInt32        other_flags;   /* free for style-specific */
-+                                    /* implementations         */
-+    AF_StyleMetrics  metrics;
- 
--    FT_Pos            xmin_delta;    /* used for warping */
--    FT_Pos            xmax_delta;
-+    FT_Pos           xmin_delta;    /* used for warping */
-+    FT_Pos           xmax_delta;
- 
-   } AF_GlyphHintsRec;
- 
-@@ -429,8 +429,8 @@ FT_BEGIN_HEADER
-                        FT_Memory      memory );
- 
-   FT_LOCAL( void )
--  af_glyph_hints_rescale( AF_GlyphHints     hints,
--                          AF_ScriptMetrics  metrics );
-+  af_glyph_hints_rescale( AF_GlyphHints    hints,
-+                          AF_StyleMetrics  metrics );
- 
-   FT_LOCAL( FT_Error )
-   af_glyph_hints_reload( AF_GlyphHints  hints,
-diff --git a/src/autofit/afindic.c b/src/autofit/afindic.c
-index ef8299f..197881b 100644
---- a/src/autofit/afindic.c
-+++ b/src/autofit/afindic.c
-@@ -2,7 +2,7 @@
- /*                                                                         */
- /*  afindic.c                                                              */
- /*                                                                         */
--/*    Auto-fitter hinting routines for Indic scripts (body).               */
-+/*    Auto-fitter hinting routines for Indic writing system (body).        */
- /*                                                                         */
- /*  Copyright 2007, 2011-2013 by                                           */
- /*  Rahul Bhalerao <rahul.bhalerao at redhat.com>, <b.rahul.pm at gmail.com>.    */
-@@ -104,32 +104,18 @@
- 
-     sizeof ( AF_CJKMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) af_indic_metrics_init,
--    (AF_Script_ScaleMetricsFunc)af_indic_metrics_scale,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) af_indic_metrics_init,
-+    (AF_WritingSystem_ScaleMetricsFunc)af_indic_metrics_scale,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   af_indic_hints_init,
--    (AF_Script_ApplyHintsFunc)  af_indic_hints_apply
-+    (AF_WritingSystem_InitHintsFunc)   af_indic_hints_init,
-+    (AF_WritingSystem_ApplyHintsFunc)  af_indic_hints_apply
-   )
- 
--  /* XXX: this should probably fine tuned to differentiate better between */
--  /*      scripts...                                                      */
--
--  static const AF_Script_UniRangeRec  af_deva_uniranges[] =
--  {
--    AF_UNIRANGE_REC(  0x0900UL,  0x0DFFUL ),  /* Indic Range  */
--    AF_UNIRANGE_REC(  0x0F00UL,  0x0FFFUL ),  /* Tibetan      */
--    AF_UNIRANGE_REC(  0x1900UL,  0x194FUL ),  /* Limbu        */
--    AF_UNIRANGE_REC(  0x1B80UL,  0x1BBFUL ),  /* Sundanese    */
--    AF_UNIRANGE_REC(  0x1C80UL,  0x1CDFUL ),  /* Meetei Mayak */
--    AF_UNIRANGE_REC(  0xA800UL,  0xA82FUL ),  /* Syloti Nagri */
--    AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL ),  /* Sharada      */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
- 
- #else /* !AF_CONFIG_OPTION_INDIC */
- 
-+
-   AF_DEFINE_WRITING_SYSTEM_CLASS(
-     af_indic_writing_system_class,
- 
-@@ -137,33 +123,16 @@
- 
-     sizeof ( AF_CJKMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) NULL,
--    (AF_Script_ScaleMetricsFunc)NULL,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) NULL,
-+    (AF_WritingSystem_ScaleMetricsFunc)NULL,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   NULL,
--    (AF_Script_ApplyHintsFunc)  NULL
-+    (AF_WritingSystem_InitHintsFunc)   NULL,
-+    (AF_WritingSystem_ApplyHintsFunc)  NULL
-   )
- 
- 
--  static const AF_Script_UniRangeRec  af_deva_uniranges[] =
--  {
--    AF_UNIRANGE_REC( 0UL, 0UL )
--  };
--
- #endif /* !AF_CONFIG_OPTION_INDIC */
- 
- 
--  AF_DEFINE_SCRIPT_CLASS(
--    af_deva_script_class,
--
--    AF_SCRIPT_DEVA,
--    (AF_Blue_Stringset)0, /* XXX */
--    AF_WRITING_SYSTEM_INDIC,
--
--    af_deva_uniranges,
--    'o' /* XXX */
--  )
--
--
- /* END */
-diff --git a/src/autofit/afindic.h b/src/autofit/afindic.h
-index db38e96..9e13cf7 100644
---- a/src/autofit/afindic.h
-+++ b/src/autofit/afindic.h
-@@ -2,7 +2,8 @@
- /*                                                                         */
- /*  afindic.h                                                              */
- /*                                                                         */
--/*    Auto-fitter hinting routines for Indic scripts (specification).      */
-+/*    Auto-fitter hinting routines for Indic writing system                */
-+/*    (specification).                                                     */
- /*                                                                         */
- /*  Copyright 2007, 2012, 2013 by                                          */
- /*  Rahul Bhalerao <rahul.bhalerao at redhat.com>, <b.rahul.pm at gmail.com>.    */
-@@ -30,11 +31,6 @@ FT_BEGIN_HEADER
-   AF_DECLARE_WRITING_SYSTEM_CLASS( af_indic_writing_system_class )
- 
- 
--  /* the indic-specific script classes */
--
--  AF_DECLARE_SCRIPT_CLASS( af_deva_script_class )
--
--
- /* */
- 
- FT_END_HEADER
-diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
-index 15a241e..518ceeb 100644
---- a/src/autofit/aflatin.c
-+++ b/src/autofit/aflatin.c
-@@ -2,7 +2,7 @@
- /*                                                                         */
- /*  aflatin.c                                                              */
- /*                                                                         */
--/*    Auto-fitter hinting routines for latin script (body).                */
-+/*    Auto-fitter hinting routines for latin writing system (body).        */
- /*                                                                         */
- /*  Copyright 2003-2013 by                                                 */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -21,6 +21,7 @@
- #include FT_INTERNAL_DEBUG_H
- 
- #include "afglobal.h"
-+#include "afpic.h"
- #include "aflatin.h"
- #include "aferrors.h"
- 
-@@ -61,10 +62,10 @@
- 
- 
-     FT_TRACE5(( "\n"
--                "latin standard widths computation (script `%s')\n"
--                "=================================================\n"
-+                "latin standard widths computation (style `%s')\n"
-+                "================================================\n"
-                 "\n",
--                af_script_names[metrics->root.script_class->script] ));
-+                af_style_names[metrics->root.style_class->style] ));
- 
-     af_glyph_hints_init( hints, face->memory );
- 
-@@ -78,15 +79,21 @@
-       AF_LatinMetricsRec  dummy[1];
-       AF_Scaler           scaler = &dummy->root.scaler;
- 
-+#ifdef FT_CONFIG_OPTION_PIC
-+      AF_FaceGlobals  globals = metrics->root.globals;
-+#endif
-+
-+      AF_StyleClass   style_class  = metrics->root.style_class;
-+      AF_ScriptClass  script_class = AF_SCRIPT_CLASSES_GET
-+                                       [style_class->script];
-+
- 
--      glyph_index = FT_Get_Char_Index(
--                      face,
--                      metrics->root.script_class->standard_char );
-+      glyph_index = FT_Get_Char_Index( face, script_class->standard_char );
-       if ( glyph_index == 0 )
-         goto Exit;
- 
-       FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
--                  metrics->root.script_class->standard_char, glyph_index ));
-+                  script_class->standard_char, glyph_index ));
- 
-       error = FT_Load_Glyph( face, glyph_index, FT_LOAD_NO_SCALE );
-       if ( error || face->glyph->outline.n_points <= 0 )
-@@ -105,7 +112,7 @@
-       scaler->render_mode = FT_RENDER_MODE_NORMAL;
-       scaler->flags       = 0;
- 
--      af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy );
-+      af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
- 
-       error = af_glyph_hints_reload( hints, &face->glyph->outline );
-       if ( error )
-@@ -214,12 +221,14 @@
-     AF_LatinAxis  axis = &metrics->axis[AF_DIMENSION_VERT];
-     FT_Outline    outline;
- 
--    AF_Blue_Stringset         bss = metrics->root.script_class->blue_stringset;
-+    AF_StyleClass  sc = metrics->root.style_class;
-+
-+    AF_Blue_Stringset         bss = sc->blue_stringset;
-     const AF_Blue_StringRec*  bs  = &af_blue_stringsets[bss];
- 
- 
--    /* we walk over the blue character strings as specified in the  */
--    /* script's entry in the `af_blue_stringset' array              */
-+    /* we walk over the blue character strings as specified in the */
-+    /* style's entry in the `af_blue_stringset' array              */
- 
-     FT_TRACE5(( "latin blue zones computation\n"
-                 "============================\n"
-@@ -879,11 +888,11 @@
- 
-             FT_TRACE5((
-               "af_latin_metrics_scale_dim:"
--              " x height alignment (script `%s'):\n"
-+              " x height alignment (style `%s'):\n"
-               "                           "
-               " vertical scaling changed from %.4f to %.4f (by %d%%)\n"
-               "\n",
--              af_script_names[metrics->root.script_class->script],
-+              af_style_names[metrics->root.style_class->style],
-               axis->org_scale / 65536.0,
-               scale / 65536.0,
-               ( fitted - scaled ) * 100 / scaled ));
-@@ -906,9 +915,9 @@
-       metrics->root.scaler.y_delta = delta;
-     }
- 
--    FT_TRACE5(( "%s widths (script `%s')\n",
-+    FT_TRACE5(( "%s widths (style `%s')\n",
-                 dim == AF_DIMENSION_HORZ ? "horizontal" : "vertical",
--                af_script_names[metrics->root.script_class->script] ));
-+                af_style_names[metrics->root.style_class->style] ));
- 
-     /* scale the widths */
-     for ( nn = 0; nn < axis->width_count; nn++ )
-@@ -933,15 +942,15 @@
- 
- #ifdef FT_DEBUG_LEVEL_TRACE
-     if ( axis->extra_light )
--      FT_TRACE5(( "`%s' script is extra light (at current resolution)\n"
-+      FT_TRACE5(( "`%s' style is extra light (at current resolution)\n"
-                   "\n",
--                  af_script_names[metrics->root.script_class->script] ));
-+                  af_style_names[metrics->root.style_class->style] ));
- #endif
- 
-     if ( dim == AF_DIMENSION_VERT )
-     {
--      FT_TRACE5(( "blue zones (script `%s')\n",
--                  af_script_names[metrics->root.script_class->script] ));
-+      FT_TRACE5(( "blue zones (style `%s')\n",
-+                  af_style_names[metrics->root.style_class->style] ));
- 
-       /* scale the blue zones */
-       for ( nn = 0; nn < axis->blue_count; nn++ )
-@@ -1797,7 +1806,7 @@
-     FT_Face         face = metrics->root.scaler.face;
- 
- 
--    af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics );
-+    af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
- 
-     /*
-      *  correct x_scale and y_scale if needed, since they may have
-@@ -2148,9 +2157,9 @@
- #endif
- 
- 
--    FT_TRACE5(( "latin %s edge hinting (script `%s')\n",
-+    FT_TRACE5(( "latin %s edge hinting (style `%s')\n",
-                 dim == AF_DIMENSION_VERT ? "horizontal" : "vertical",
--                af_script_names[hints->metrics->script_class->script] ));
-+                af_style_names[hints->metrics->style_class->style] ));
- 
-     /* we begin by aligning all stems relative to the blue zone */
-     /* if needed -- that's only for horizontal edges            */
-@@ -2709,111 +2718,12 @@
- 
-     sizeof ( AF_LatinMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) af_latin_metrics_init,
--    (AF_Script_ScaleMetricsFunc)af_latin_metrics_scale,
--    (AF_Script_DoneMetricsFunc) NULL,
--
--    (AF_Script_InitHintsFunc)   af_latin_hints_init,
--    (AF_Script_ApplyHintsFunc)  af_latin_hints_apply
--  )
--
--
--  /* XXX: this should probably fine tuned to differentiate better between */
--  /*      scripts...                                                      */
--
--  static const AF_Script_UniRangeRec  af_latn_uniranges[] =
--  {
--    AF_UNIRANGE_REC(  0x0020UL,  0x007FUL ),  /* Basic Latin (no control chars) */
--    AF_UNIRANGE_REC(  0x00A0UL,  0x00FFUL ),  /* Latin-1 Supplement (no control chars) */
--    AF_UNIRANGE_REC(  0x0100UL,  0x017FUL ),  /* Latin Extended-A */
--    AF_UNIRANGE_REC(  0x0180UL,  0x024FUL ),  /* Latin Extended-B */
--    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(  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(  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(  0x2E00UL,  0x2E7FUL ),  /* Supplemental Punctuation */
--    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 */
--    AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ),  /* Enclosed Alphanumeric Supplement */
--    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 */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
--  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 */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
--  static const AF_Script_UniRangeRec  af_hebr_uniranges[] =
--  {
--    AF_UNIRANGE_REC(  0x0590UL,  0x05FFUL ),  /* Hebrew */
--    AF_UNIRANGE_REC(  0xFB1DUL,  0xFB4FUL ),  /* Alphab. Present. Forms (Hebrew) */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
--
--  AF_DEFINE_SCRIPT_CLASS(
--    af_latn_script_class,
--
--    AF_SCRIPT_LATN,
--    AF_BLUE_STRINGSET_LATN,
--    AF_WRITING_SYSTEM_LATIN,
--
--    af_latn_uniranges,
--    'o'
--  )
--
--  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,
--    AF_BLUE_STRINGSET_HEBR,
--    AF_WRITING_SYSTEM_LATIN,
-+    (AF_WritingSystem_InitMetricsFunc) af_latin_metrics_init,
-+    (AF_WritingSystem_ScaleMetricsFunc)af_latin_metrics_scale,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    af_hebr_uniranges,
--    0x5DD /* ם */
-+    (AF_WritingSystem_InitHintsFunc)   af_latin_hints_init,
-+    (AF_WritingSystem_ApplyHintsFunc)  af_latin_hints_apply
-   )
- 
- 
-diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
-index c06cbd9..a958af3 100644
---- a/src/autofit/aflatin.h
-+++ b/src/autofit/aflatin.h
-@@ -2,7 +2,8 @@
- /*                                                                         */
- /*  aflatin.h                                                              */
- /*                                                                         */
--/*    Auto-fitter hinting routines for latin script (specification).       */
-+/*    Auto-fitter hinting routines for latin writing system                */
-+/*    (specification).                                                     */
- /*                                                                         */
- /*  Copyright 2003-2007, 2009, 2011-2013 by                                */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -29,17 +30,6 @@ FT_BEGIN_HEADER
-   AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin_writing_system_class )
- 
- 
--  /* the latin-specific script classes */
--
--  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 )
--#endif
--
--
-   /* constants are given with units_per_em == 2048 in mind */
- #define AF_LATIN_CONSTANT( metrics, c )                                      \
-   ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
-@@ -56,8 +46,8 @@ FT_BEGIN_HEADER
- 
-   /*
-    *  The following declarations could be embedded in the file `aflatin.c';
--   *  they have been made semi-public to allow alternate script hinters to
--   *  re-use some of them.
-+   *  they have been made semi-public to allow alternate writing system
-+   *  hinters to re-use some of them.
-    */
- 
- 
-@@ -113,9 +103,9 @@ FT_BEGIN_HEADER
- 
-   typedef struct  AF_LatinMetricsRec_
-   {
--    AF_ScriptMetricsRec  root;
--    FT_UInt              units_per_em;
--    AF_LatinAxisRec      axis[AF_DIMENSION_MAX];
-+    AF_StyleMetricsRec  root;
-+    FT_UInt             units_per_em;
-+    AF_LatinAxisRec     axis[AF_DIMENSION_MAX];
- 
-   } AF_LatinMetricsRec, *AF_LatinMetrics;
- 
-@@ -171,7 +161,7 @@ FT_BEGIN_HEADER
- 
-   /*
-    *  The next functions shouldn't normally be exported.  However, other
--   *  scripts might like to use these functions as-is.
-+   *  writing systems might like to use these functions as-is.
-    */
-   FT_LOCAL( FT_Error )
-   af_latin_hints_compute_segments( AF_GlyphHints  hints,
-diff --git a/src/autofit/aflatin2.c b/src/autofit/aflatin2.c
-index a6d564a..930fa98 100644
---- a/src/autofit/aflatin2.c
-+++ b/src/autofit/aflatin2.c
-@@ -2,7 +2,7 @@
- /*                                                                         */
- /*  aflatin2.c                                                             */
- /*                                                                         */
--/*    Auto-fitter hinting routines for latin script (body).                */
-+/*    Auto-fitter hinting routines for latin writing system (body).        */
- /*                                                                         */
- /*  Copyright 2003-2013 by                                                 */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -78,7 +78,7 @@
- 
-       glyph_index = FT_Get_Char_Index(
-                       face,
--                      metrics->root.script_class->standard_char );
-+                      metrics->root.style_class->standard_char );
-       if ( glyph_index == 0 )
-         goto Exit;
- 
-@@ -95,7 +95,7 @@
-       scaler->render_mode = FT_RENDER_MODE_NORMAL;
-       scaler->flags       = 0;
- 
--      af_glyph_hints_rescale( hints, (AF_ScriptMetrics)dummy );
-+      af_glyph_hints_rescale( hints, (AF_StyleMetrics)dummy );
- 
-       error = af_glyph_hints_reload( hints, &face->glyph->outline );
-       if ( error )
-@@ -1501,7 +1501,7 @@
-     FT_Face         face = metrics->root.scaler.face;
- 
- 
--    af_glyph_hints_rescale( hints, (AF_ScriptMetrics)metrics );
-+    af_glyph_hints_rescale( hints, (AF_StyleMetrics)metrics );
- 
-     /*
-      *  correct x_scale and y_scale if needed, since they may have
-@@ -2387,61 +2387,12 @@
- 
-     sizeof ( AF_LatinMetricsRec ),
- 
--    (AF_Script_InitMetricsFunc) af_latin2_metrics_init,
--    (AF_Script_ScaleMetricsFunc)af_latin2_metrics_scale,
--    (AF_Script_DoneMetricsFunc) NULL,
-+    (AF_WritingSystem_InitMetricsFunc) af_latin2_metrics_init,
-+    (AF_WritingSystem_ScaleMetricsFunc)af_latin2_metrics_scale,
-+    (AF_WritingSystem_DoneMetricsFunc) NULL,
- 
--    (AF_Script_InitHintsFunc)   af_latin2_hints_init,
--    (AF_Script_ApplyHintsFunc)  af_latin2_hints_apply
--  )
--
--
--  /* XXX: this should probably fine tuned to differentiate better between */
--  /*      scripts...                                                      */
--
--  static const AF_Script_UniRangeRec  af_ltn2_uniranges[] =
--  {
--    AF_UNIRANGE_REC(  0x0020UL,  0x007FUL ),  /* Basic Latin (no control chars) */
--    AF_UNIRANGE_REC(  0x00A0UL,  0x00FFUL ),  /* Latin-1 Supplement (no control chars) */
--    AF_UNIRANGE_REC(  0x0100UL,  0x017FUL ),  /* Latin Extended-A */
--    AF_UNIRANGE_REC(  0x0180UL,  0x024FUL ),  /* Latin Extended-B */
--    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 */
--    AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ),  /* Enclosed Alphanumeric Supplement */
--    AF_UNIRANGE_REC(       0UL,       0UL )
--  };
--
--
--  AF_DEFINE_SCRIPT_CLASS(
--    af_ltn2_script_class,
--
--    AF_SCRIPT_LTN2,
--    AF_BLUE_STRINGSET_LATN,
--    AF_WRITING_SYSTEM_LATIN2,
--
--    af_ltn2_uniranges,
--    'o'
-+    (AF_WritingSystem_InitHintsFunc)   af_latin2_hints_init,
-+    (AF_WritingSystem_ApplyHintsFunc)  af_latin2_hints_apply
-   )
- 
- 
-diff --git a/src/autofit/aflatin2.h b/src/autofit/aflatin2.h
-index f7f6d8d..b5d252a 100644
---- a/src/autofit/aflatin2.h
-+++ b/src/autofit/aflatin2.h
-@@ -2,7 +2,8 @@
- /*                                                                         */
- /*  aflatin2.h                                                             */
- /*                                                                         */
--/*    Auto-fitter hinting routines for latin script (specification).       */
-+/*    Auto-fitter hinting routines for latin writing system                */
-+/*    (specification).                                                     */
- /*                                                                         */
- /*  Copyright 2003-2007, 2012, 2013 by                                     */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-@@ -30,17 +31,6 @@ FT_BEGIN_HEADER
-   AF_DECLARE_WRITING_SYSTEM_CLASS( af_latin2_writing_system_class )
- 
- 
--  /* the latin-specific script classes */
--
--  AF_DECLARE_SCRIPT_CLASS( af_ltn2_script_class )  /* XXX */
--#if 0
--  AF_DECLARE_SCRIPT_CLASS( af_arm2_script_class )
--  AF_DECLARE_SCRIPT_CLASS( af_cyr2_script_class )
--  AF_DECLARE_SCRIPT_CLASS( af_grk2_script_class )
--  AF_DECLARE_SCRIPT_CLASS( af_hbr2_script_class )
--#endif
--
--
- /* */
- 
- FT_END_HEADER
-diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c
-index b49f8c0..80c3950 100644
---- a/src/autofit/afloader.c
-+++ b/src/autofit/afloader.c
-@@ -109,7 +109,7 @@
-     FT_Error          error;
-     FT_Face           face     = loader->face;
-     FT_GlyphLoader    gloader  = loader->gloader;
--    AF_ScriptMetrics  metrics  = loader->metrics;
-+    AF_StyleMetrics   metrics  = loader->metrics;
-     AF_GlyphHints     hints    = &loader->hints;
-     FT_GlyphSlot      slot     = face->glyph;
-     FT_Slot_Internal  internal = slot->internal;
-@@ -183,17 +183,17 @@
-       /* automatic hinting process                                 */
-       {
- #ifdef FT_CONFIG_OPTION_PIC
--        AF_FaceGlobals         globals              = loader->globals;
-+        AF_FaceGlobals         globals = loader->globals;
- #endif
-+        AF_StyleClass          style_class = metrics->style_class;
-         AF_WritingSystemClass  writing_system_class =
--                                 AF_WRITING_SYSTEM_CLASSES_GET
--                                   [metrics->script_class->writing_system];
-+          AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
- 
- 
--        if ( writing_system_class->script_hints_apply )
--          writing_system_class->script_hints_apply( hints,
--                                                    &gloader->current.outline,
--                                                    metrics );
-+        if ( writing_system_class->style_hints_apply )
-+          writing_system_class->style_hints_apply( hints,
-+                                                   &gloader->current.outline,
-+                                                   metrics );
-       }
- 
-       /* we now need to adjust the metrics according to the change in */
-@@ -529,14 +529,14 @@
-     error = af_loader_reset( module, face );
-     if ( !error )
-     {
--      AF_ScriptMetrics  metrics;
--      FT_UInt           options = AF_SCRIPT_DFLT;
-+      AF_StyleMetrics  metrics;
-+      FT_UInt          options = AF_STYLE_NONE_DEFAULT;
- 
- 
- #ifdef FT_OPTION_AUTOFIT2
-       /* XXX: undocumented hook to activate the latin2 writing system */
-       if ( load_flags & ( 1UL << 20 ) )
--        options = AF_SCRIPT_LTN2;
-+        options = AF_STYLE_LTN2_DEFAULT;
- #endif
- 
-       error = af_face_globals_get_metrics( loader->globals, gindex,
-@@ -544,27 +544,27 @@
-       if ( !error )
-       {
- #ifdef FT_CONFIG_OPTION_PIC
--        AF_FaceGlobals         globals              = loader->globals;
-+        AF_FaceGlobals         globals = loader->globals;
- #endif
-+        AF_StyleClass          style_class = metrics->style_class;
-         AF_WritingSystemClass  writing_system_class =
--                                 AF_WRITING_SYSTEM_CLASSES_GET
--                                   [metrics->script_class->writing_system];
-+          AF_WRITING_SYSTEM_CLASSES_GET[style_class->writing_system];
- 
- 
-         loader->metrics = metrics;
- 
--        if ( writing_system_class->script_metrics_scale )
--          writing_system_class->script_metrics_scale( metrics, &scaler );
-+        if ( writing_system_class->style_metrics_scale )
-+          writing_system_class->style_metrics_scale( metrics, &scaler );
-         else
-           metrics->scaler = scaler;
- 
-         load_flags |=  FT_LOAD_NO_SCALE | FT_LOAD_IGNORE_TRANSFORM;
-         load_flags &= ~FT_LOAD_RENDER;
- 
--        if ( writing_system_class->script_hints_init )
-+        if ( writing_system_class->style_hints_init )
-         {
--          error = writing_system_class->script_hints_init( &loader->hints,
--                                                           metrics );
-+          error = writing_system_class->style_hints_init( &loader->hints,
-+                                                          metrics );
-           if ( error )
-             goto Exit;
-         }
-diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h
-index 1f34d17..9601e24 100644
---- a/src/autofit/afloader.h
-+++ b/src/autofit/afloader.h
-@@ -4,7 +4,7 @@
- /*                                                                         */
- /*    Auto-fitter glyph loading routines (specification).                  */
- /*                                                                         */
--/*  Copyright 2003-2005, 2011-2012 by                                      */
-+/*  Copyright 2003-2005, 2011-2013 by                                      */
- /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
- /*                                                                         */
- /*  This file is part of the FreeType project, and may only be used,       */
-@@ -44,7 +44,7 @@ FT_BEGIN_HEADER
-     /* current glyph data */
-     FT_GlyphLoader    gloader;
-     AF_GlyphHintsRec  hints;
--    AF_ScriptMetrics  metrics;
-+    AF_StyleMetrics   metrics;
-     FT_Bool           transformed;
-     FT_Matrix         trans_matrix;
-     FT_Vector         trans_delta;
-diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c
-index b1bb5ee..1ebe4a4 100644
---- a/src/autofit/afmodule.c
-+++ b/src/autofit/afmodule.c
-@@ -60,8 +60,8 @@
-     globals = (AF_FaceGlobals)face->autohint.data;
-     if ( !globals )
-     {
--      /* trigger computation of the global script data */
--      /* in case it hasn't been done yet               */
-+      /* trigger computation of the global style data */
-+      /* in case it hasn't been done yet              */
-       error = af_face_globals_new( face, &globals, module );
-       if ( !error )
-       {
-@@ -134,7 +134,7 @@
- 
-       error = af_property_get_face_globals( prop->face, &globals, module );
-       if ( !error )
--        prop->map = globals->glyph_scripts;
-+        prop->map = globals->glyph_styles;
- 
-       return error;
-     }
-diff --git a/src/autofit/afpic.c b/src/autofit/afpic.c
-index 92d696d..eba6a89 100644
---- a/src/autofit/afpic.c
-+++ b/src/autofit/afpic.c
-@@ -20,6 +20,7 @@
- #include FT_FREETYPE_H
- #include FT_INTERNAL_OBJECTS_H
- #include "afpic.h"
-+#include "afglobal.h"
- #include "aferrors.h"
- 
- 
-@@ -42,7 +43,7 @@
-     FT_AutoHinter_InterfaceRec*  clazz );
- 
- 
--  /* forward declaration of PIC init functions from script classes */
-+  /* forward declaration of PIC init functions from writing system classes */
- #undef  WRITING_SYSTEM
- #define WRITING_SYSTEM( ws, WS )  /* empty */
- 
-@@ -97,15 +98,20 @@
- 
-     FT_Init_Class_af_service_properties( &container->af_service_properties );
- 
--    for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX - 1; ss++ )
-+    for ( ss = 0; ss < AF_WRITING_SYSTEM_MAX; ss++ )
-       container->af_writing_system_classes[ss] =
-         &container->af_writing_system_classes_rec[ss];
--    container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX - 1] = NULL;
-+    container->af_writing_system_classes[AF_WRITING_SYSTEM_MAX] = NULL;
- 
--    for ( ss = 0; ss < AF_SCRIPT_MAX - 1; ss++ )
-+    for ( ss = 0; ss < AF_SCRIPT_MAX; ss++ )
-       container->af_script_classes[ss] =
-         &container->af_script_classes_rec[ss];
--    container->af_script_classes[AF_SCRIPT_MAX - 1] = NULL;
-+    container->af_script_classes[AF_SCRIPT_MAX] = NULL;
-+
-+    for ( ss = 0; ss < AF_STYLE_MAX; ss++ )
-+      container->af_style_classes[ss] =
-+        &container->af_style_classes_rec[ss];
-+    container->af_style_classes[AF_STYLE_MAX] = NULL;
- 
- #undef  WRITING_SYSTEM
- #define WRITING_SYSTEM( ws, WS )                             \
-@@ -116,13 +122,21 @@
- #include "afwrtsys.h"
- 
- #undef  SCRIPT
--#define SCRIPT( s, S, d )                            \
-+#define SCRIPT( s, S, d, dc )                        \
-         FT_Init_Class_af_ ## s ## _script_class(     \
-           &container->af_script_classes_rec[ss++] );
- 
-     ss = 0;
- #include "afscript.h"
- 
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, bss )               \
-+        FT_Init_Class_af_ ## s ## _style_class(     \
-+          &container->af_style_classes_rec[ss++] );
-+
-+    ss = 0;
-+#include "afstyles.h"
-+
-     FT_Init_Class_af_autofitter_interface(
-       library, &container->af_autofitter_interface );
- 
-diff --git a/src/autofit/afpic.h b/src/autofit/afpic.h
-index 09f8258..9a68b4a 100644
---- a/src/autofit/afpic.h
-+++ b/src/autofit/afpic.h
-@@ -32,6 +32,7 @@ FT_BEGIN_HEADER
- 
- #define AF_WRITING_SYSTEM_CLASSES_GET  af_writing_system_classes
- #define AF_SCRIPT_CLASSES_GET          af_script_classes
-+#define AF_STYLE_CLASSES_GET           af_style_classes
- #define AF_INTERFACE_GET               af_autofitter_interface
- 
- #else /* FT_CONFIG_OPTION_PIC */
-@@ -48,14 +49,19 @@ FT_BEGIN_HEADER
-     FT_Service_PropertiesRec    af_service_properties;
- 
-     AF_WritingSystemClass       af_writing_system_classes
--                                  [AF_WRITING_SYSTEM_MAX];
-+                                  [AF_WRITING_SYSTEM_MAX + 1];
-     AF_WritingSystemClassRec    af_writing_system_classes_rec
--                                  [AF_WRITING_SYSTEM_MAX - 1];
-+                                  [AF_WRITING_SYSTEM_MAX];
- 
-     AF_ScriptClass              af_script_classes
--                                  [AF_SCRIPT_MAX];
-+                                  [AF_SCRIPT_MAX + 1];
-     AF_ScriptClassRec           af_script_classes_rec
--                                  [AF_SCRIPT_MAX - 1];
-+                                  [AF_SCRIPT_MAX];
-+
-+    AF_StyleClass               af_style_classes
-+                                  [AF_STYLE_MAX + 1];
-+    AF_StyleClassRec            af_style_classes_rec
-+                                  [AF_STYLE_MAX];
- 
-     FT_AutoHinter_InterfaceRec  af_autofitter_interface;
- 
-@@ -74,6 +80,8 @@ FT_BEGIN_HEADER
-           ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_writing_system_classes )
- #define AF_SCRIPT_CLASSES_GET  \
-           ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_script_classes )
-+#define AF_STYLE_CLASSES_GET  \
-+          ( GET_PIC( FT_FACE_LIBRARY( globals->face ) )->af_style_classes )
- #define AF_INTERFACE_GET  \
-           ( GET_PIC( library )->af_autofitter_interface )
- 
-diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c
-new file mode 100644
-index 0000000..607733c
---- /dev/null
-+++ b/src/autofit/afranges.c
-@@ -0,0 +1,154 @@
-+/***************************************************************************/
-+/*                                                                         */
-+/*  afranges.c                                                             */
-+/*                                                                         */
-+/*    Auto-fitter Unicode script ranges (body).                            */
-+/*                                                                         */
-+/*  Copyright 2013 by                                                      */
-+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-+/*                                                                         */
-+/*  This file is part of the FreeType project, and may only be used,       */
-+/*  modified, and distributed under the terms of the FreeType project      */
-+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-+/*  this file you indicate that you have read the license and              */
-+/*  understand and accept it fully.                                        */
-+/*                                                                         */
-+/***************************************************************************/
-+
-+
-+#include "afranges.h"
-+
-+
-+  /* XXX: this should probably fine tuned to differentiate better between */
-+  /*      scripts...                                                      */
-+
-+  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 */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+#ifdef AF_CONFIG_OPTION_INDIC
-+
-+  const AF_Script_UniRangeRec  af_deva_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC(  0x0900UL,  0x0DFFUL ),  /* Indic Range  */
-+    AF_UNIRANGE_REC(  0x0F00UL,  0x0FFFUL ),  /* Tibetan      */
-+    AF_UNIRANGE_REC(  0x1900UL,  0x194FUL ),  /* Limbu        */
-+    AF_UNIRANGE_REC(  0x1B80UL,  0x1BBFUL ),  /* Sundanese    */
-+    AF_UNIRANGE_REC(  0x1C80UL,  0x1CDFUL ),  /* Meetei Mayak */
-+    AF_UNIRANGE_REC(  0xA800UL,  0xA82FUL ),  /* Syloti Nagri */
-+    AF_UNIRANGE_REC( 0x11800UL, 0x118DFUL ),  /* Sharada      */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+#else /* !AF_CONFIG_OPTION_INDIC */
-+
-+  const AF_Script_UniRangeRec  af_deva_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC( 0UL, 0UL )
-+  };
-+
-+#endif /* !AF_CONFIG_OPTION_INDIC */
-+
-+  const AF_Script_UniRangeRec  af_grek_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC(  0x0370UL,  0x03FFUL ),  /* Greek and Coptic */
-+    AF_UNIRANGE_REC(  0x1F00UL,  0x1FFFUL ),  /* Greek Extended */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+#ifdef AF_CONFIG_OPTION_CJK
-+
-+  /* this corresponds to Unicode 6.0 */
-+
-+  const AF_Script_UniRangeRec  af_hani_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC(  0x1100UL,  0x11FFUL ),  /* Hangul Jamo                             */
-+    AF_UNIRANGE_REC(  0x2E80UL,  0x2EFFUL ),  /* CJK Radicals Supplement                 */
-+    AF_UNIRANGE_REC(  0x2F00UL,  0x2FDFUL ),  /* Kangxi Radicals                         */
-+    AF_UNIRANGE_REC(  0x2FF0UL,  0x2FFFUL ),  /* Ideographic Description Characters      */
-+    AF_UNIRANGE_REC(  0x3000UL,  0x303FUL ),  /* CJK Symbols and Punctuation             */
-+    AF_UNIRANGE_REC(  0x3040UL,  0x309FUL ),  /* Hiragana                                */
-+    AF_UNIRANGE_REC(  0x30A0UL,  0x30FFUL ),  /* Katakana                                */
-+    AF_UNIRANGE_REC(  0x3100UL,  0x312FUL ),  /* Bopomofo                                */
-+    AF_UNIRANGE_REC(  0x3130UL,  0x318FUL ),  /* Hangul Compatibility Jamo               */
-+    AF_UNIRANGE_REC(  0x3190UL,  0x319FUL ),  /* Kanbun                                  */
-+    AF_UNIRANGE_REC(  0x31A0UL,  0x31BFUL ),  /* Bopomofo Extended                       */
-+    AF_UNIRANGE_REC(  0x31C0UL,  0x31EFUL ),  /* CJK Strokes                             */
-+    AF_UNIRANGE_REC(  0x31F0UL,  0x31FFUL ),  /* Katakana Phonetic Extensions            */
-+    AF_UNIRANGE_REC(  0x3200UL,  0x32FFUL ),  /* Enclosed CJK Letters and Months         */
-+    AF_UNIRANGE_REC(  0x3300UL,  0x33FFUL ),  /* CJK Compatibility                       */
-+    AF_UNIRANGE_REC(  0x3400UL,  0x4DBFUL ),  /* CJK Unified Ideographs Extension A      */
-+    AF_UNIRANGE_REC(  0x4DC0UL,  0x4DFFUL ),  /* Yijing Hexagram Symbols                 */
-+    AF_UNIRANGE_REC(  0x4E00UL,  0x9FFFUL ),  /* CJK Unified Ideographs                  */
-+    AF_UNIRANGE_REC(  0xA960UL,  0xA97FUL ),  /* Hangul Jamo Extended-A                  */
-+    AF_UNIRANGE_REC(  0xAC00UL,  0xD7AFUL ),  /* Hangul Syllables                        */
-+    AF_UNIRANGE_REC(  0xD7B0UL,  0xD7FFUL ),  /* Hangul Jamo Extended-B                  */
-+    AF_UNIRANGE_REC(  0xF900UL,  0xFAFFUL ),  /* CJK Compatibility Ideographs            */
-+    AF_UNIRANGE_REC(  0xFE10UL,  0xFE1FUL ),  /* Vertical forms                          */
-+    AF_UNIRANGE_REC(  0xFE30UL,  0xFE4FUL ),  /* CJK Compatibility Forms                 */
-+    AF_UNIRANGE_REC(  0xFF00UL,  0xFFEFUL ),  /* Halfwidth and Fullwidth Forms           */
-+    AF_UNIRANGE_REC( 0x1B000UL, 0x1B0FFUL ),  /* Kana Supplement                         */
-+    AF_UNIRANGE_REC( 0x1D300UL, 0x1D35FUL ),  /* Tai Xuan Hing Symbols                   */
-+    AF_UNIRANGE_REC( 0x1F200UL, 0x1F2FFUL ),  /* Enclosed Ideographic Supplement         */
-+    AF_UNIRANGE_REC( 0x20000UL, 0x2A6DFUL ),  /* CJK Unified Ideographs Extension B      */
-+    AF_UNIRANGE_REC( 0x2A700UL, 0x2B73FUL ),  /* CJK Unified Ideographs Extension C      */
-+    AF_UNIRANGE_REC( 0x2B740UL, 0x2B81FUL ),  /* CJK Unified Ideographs Extension D      */
-+    AF_UNIRANGE_REC( 0x2F800UL, 0x2FA1FUL ),  /* CJK Compatibility Ideographs Supplement */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+#else /* !AF_CONFIG_OPTION_CJK */
-+
-+  const AF_Script_UniRangeRec  af_hani_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC( 0UL, 0UL )
-+  };
-+
-+#endif /* !AF_CONFIG_OPTION_CJK */
-+
-+  const AF_Script_UniRangeRec  af_hebr_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC(  0x0590UL,  0x05FFUL ),  /* Hebrew */
-+    AF_UNIRANGE_REC(  0xFB1DUL,  0xFB4FUL ),  /* Alphab. Present. Forms (Hebrew) */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+  const AF_Script_UniRangeRec  af_latn_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC(  0x0020UL,  0x007FUL ),  /* Basic Latin (no control chars) */
-+    AF_UNIRANGE_REC(  0x00A0UL,  0x00FFUL ),  /* Latin-1 Supplement (no control chars) */
-+    AF_UNIRANGE_REC(  0x0100UL,  0x017FUL ),  /* Latin Extended-A */
-+    AF_UNIRANGE_REC(  0x0180UL,  0x024FUL ),  /* Latin Extended-B */
-+    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(  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(  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(  0x2E00UL,  0x2E7FUL ),  /* Supplemental Punctuation */
-+    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 */
-+    AF_UNIRANGE_REC( 0x1F100UL, 0x1F1FFUL ),  /* Enclosed Alphanumeric Supplement */
-+    AF_UNIRANGE_REC(       0UL,       0UL )
-+  };
-+
-+  const AF_Script_UniRangeRec  af_none_uniranges[] =
-+  {
-+    AF_UNIRANGE_REC( 0UL, 0UL )
-+  };
-+
-+
-+/* END */
-diff --git a/src/autofit/afranges.h b/src/autofit/afranges.h
-new file mode 100644
-index 0000000..8869695
---- /dev/null
-+++ b/src/autofit/afranges.h
-@@ -0,0 +1,41 @@
-+/***************************************************************************/
-+/*                                                                         */
-+/*  afranges.h                                                             */
-+/*                                                                         */
-+/*    Auto-fitter Unicode script ranges (specification).                   */
-+/*                                                                         */
-+/*  Copyright 2013 by                                                      */
-+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-+/*                                                                         */
-+/*  This file is part of the FreeType project, and may only be used,       */
-+/*  modified, and distributed under the terms of the FreeType project      */
-+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-+/*  this file you indicate that you have read the license and              */
-+/*  understand and accept it fully.                                        */
-+/*                                                                         */
-+/***************************************************************************/
-+
-+
-+#ifndef __AFRANGES_H__
-+#define __AFRANGES_H__
-+
-+
-+#include "aftypes.h"
-+
-+
-+FT_BEGIN_HEADER
-+
-+#undef  SCRIPT
-+#define SCRIPT( s, S, d, dc )                                           \
-+          extern const AF_Script_UniRangeRec  af_ ## s ## _uniranges[];
-+
-+#include "afscript.h"
-+
-+ /* */
-+
-+FT_END_HEADER
-+
-+#endif /* __AFRANGES_H__ */
-+
-+
-+/* END */
-diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
-index be0169a..063f2af 100644
---- a/src/autofit/afscript.h
-+++ b/src/autofit/afscript.h
-@@ -22,16 +22,33 @@
- 
-   /* Add new scripts here. */
- 
--  SCRIPT( cyrl, CYRL, "Cyrillic" )
--  SCRIPT( deva, DEVA, "Indic scripts" )
--  SCRIPT( dflt, DFLT, "no script" )
--  SCRIPT( grek, GREK, "Greek" )
--  SCRIPT( hani, HANI, "CJKV ideographs" )
--  SCRIPT( hebr, HEBR, "Hebrew" )
--  SCRIPT( latn, LATN, "Latin" )
--#ifdef FT_OPTION_AUTOFIT2
--  SCRIPT( ltn2, LTN2, "Latin 2" )
--#endif
-+  SCRIPT( cyrl, CYRL,
-+          "Cyrillic",
-+          0x43E ) /* о */
-+
-+  SCRIPT( deva, DEVA,
-+          "Indic scripts",
-+          'o' ) /* XXX */
-+
-+  SCRIPT( none, NONE,
-+          "no script",
-+          '\0' )
-+
-+  SCRIPT( grek, GREK,
-+          "Greek",
-+          0x3BF ) /* ο */
-+
-+  SCRIPT( hani, HANI,
-+          "CJKV ideographs",
-+          0x7530 ) /* 田 */
-+
-+  SCRIPT( hebr, HEBR,
-+          "Hebrew",
-+          0x5DD ) /* ם */
-+
-+  SCRIPT( latn, LATN,
-+          "Latin",
-+          'o' )
- 
- 
- /* END */
-diff --git a/src/autofit/afstyles.h b/src/autofit/afstyles.h
-new file mode 100644
-index 0000000..ded8048
---- /dev/null
-+++ b/src/autofit/afstyles.h
-@@ -0,0 +1,76 @@
-+/***************************************************************************/
-+/*                                                                         */
-+/*  afstyles.h                                                             */
-+/*                                                                         */
-+/*    Auto-fitter styles (specification only).                             */
-+/*                                                                         */
-+/*  Copyright 2013 by                                                      */
-+/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
-+/*                                                                         */
-+/*  This file is part of the FreeType project, and may only be used,       */
-+/*  modified, and distributed under the terms of the FreeType project      */
-+/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
-+/*  this file you indicate that you have read the license and              */
-+/*  understand and accept it fully.                                        */
-+/*                                                                         */
-+/***************************************************************************/
-+
-+
-+  /* The following part can be included multiple times. */
-+  /* Define `STYLE' as needed.                          */
-+
-+
-+  /* Add new styles here. */
-+
-+  STYLE( cyrl_default, CYRL_DEFAULT,
-+         "Cyrillic default style",
-+         AF_WRITING_SYSTEM_LATIN,
-+         AF_SCRIPT_CYRL,
-+         AF_BLUE_STRINGSET_CYRL )
-+
-+  STYLE( deva_default, DEVA_DEFAULT,
-+         "Indic scripts default style",
-+         AF_WRITING_SYSTEM_INDIC,
-+         AF_SCRIPT_DEVA,
-+         (AF_Blue_Stringset)0 ) /* XXX */
-+
-+  STYLE( none_default, NONE_DEFAULT,
-+         "no style",
-+         AF_WRITING_SYSTEM_DUMMY,
-+         AF_SCRIPT_NONE,
-+         (AF_Blue_Stringset)0 )
-+
-+  STYLE( grek_default, GREK_DEFAULT,
-+         "Greek default style",
-+         AF_WRITING_SYSTEM_LATIN,
-+         AF_SCRIPT_GREK,
-+         AF_BLUE_STRINGSET_GREK )
-+
-+  STYLE( hani_default, HANI_DEFAULT,
-+         "CJKV ideographs default style",
-+         AF_WRITING_SYSTEM_CJK,
-+         AF_SCRIPT_HANI,
-+         AF_BLUE_STRINGSET_HANI )
-+
-+  STYLE( hebr_default, HEBR_DEFAULT,
-+         "Hebrew default style",
-+         AF_WRITING_SYSTEM_LATIN,
-+         AF_SCRIPT_HEBR,
-+         AF_BLUE_STRINGSET_HEBR )
-+
-+  STYLE( latn_default, LATN_DEFAULT,
-+         "Latin default style",
-+         AF_WRITING_SYSTEM_LATIN,
-+         AF_SCRIPT_LATN,
-+         AF_BLUE_STRINGSET_LATN )
-+
-+#ifdef FT_OPTION_AUTOFIT2
-+  STYLE( ltn2_default, LTN2_DEFAULT,
-+         "Latin 2 default style",
-+         AF_WRITING_SYSTEM_LATIN2,
-+         AF_SCRIPT_LATN,
-+         AF_BLUE_STRINGSET_LATN )
-+#endif
-+
-+
-+/* END */
-diff --git a/src/autofit/aftypes.h b/src/autofit/aftypes.h
-index cda1f89..70ddc7f 100644
---- a/src/autofit/aftypes.h
-+++ b/src/autofit/aftypes.h
-@@ -20,7 +20,7 @@
-    *
-    *  The auto-fitter is a complete rewrite of the old auto-hinter.
-    *  Its main feature is the ability to differentiate between different
--   *  writing systems in order to apply script-specific rules.
-+   *  writing systems and scripts in order to apply specific rules.
-    *
-    *  The code has also been compartmentized into several entities that
-    *  should make algorithmic experimentation easier than with the old
-@@ -197,55 +197,31 @@ extern void*  _af_debug_hints;
-             (a)->y_delta == (b)->y_delta )
- 
- 
--  /*************************************************************************/
--  /*************************************************************************/
--  /*****                                                               *****/
--  /*****                 S C R I P T   M E T R I C S                   *****/
--  /*****                                                               *****/
--  /*************************************************************************/
--  /*************************************************************************/
--
--  /* This is the main structure which combines writing systems and script */
--  /* data (for a given face object, see below).                           */
--
--  typedef struct AF_WritingSystemClassRec_ const*  AF_WritingSystemClass;
--  typedef struct AF_ScriptClassRec_ const*         AF_ScriptClass;
--  typedef struct AF_FaceGlobalsRec_*               AF_FaceGlobals;
--
--  typedef struct  AF_ScriptMetricsRec_
--  {
--    AF_ScriptClass  script_class;
--    AF_ScalerRec    scaler;
--    FT_Bool         digits_have_same_width;
--
--    AF_FaceGlobals  globals;    /* to access properties */
--
--  } AF_ScriptMetricsRec, *AF_ScriptMetrics;
--
-+  typedef struct AF_StyleMetricsRec_*  AF_StyleMetrics;
- 
-   /*  This function parses an FT_Face to compute global metrics for
--   *  a specific script.
-+   *  a specific style.
-    */
-   typedef FT_Error
--  (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics  metrics,
--                                FT_Face           face );
-+  (*AF_WritingSystem_InitMetricsFunc)( AF_StyleMetrics  metrics,
-+                                       FT_Face          face );
- 
-   typedef void
--  (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics  metrics,
--                                 AF_Scaler         scaler );
-+  (*AF_WritingSystem_ScaleMetricsFunc)( AF_StyleMetrics  metrics,
-+                                        AF_Scaler        scaler );
- 
-   typedef void
--  (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics  metrics );
-+  (*AF_WritingSystem_DoneMetricsFunc)( AF_StyleMetrics  metrics );
- 
- 
-   typedef FT_Error
--  (*AF_Script_InitHintsFunc)( AF_GlyphHints     hints,
--                              AF_ScriptMetrics  metrics );
-+  (*AF_WritingSystem_InitHintsFunc)( AF_GlyphHints    hints,
-+                                     AF_StyleMetrics  metrics );
- 
-   typedef void
--  (*AF_Script_ApplyHintsFunc)( AF_GlyphHints     hints,
--                               FT_Outline*       outline,
--                               AF_ScriptMetrics  metrics );
-+  (*AF_WritingSystem_ApplyHintsFunc)( AF_GlyphHints    hints,
-+                                      FT_Outline*      outline,
-+                                      AF_StyleMetrics  metrics );
- 
- 
-   /*************************************************************************/
-@@ -257,14 +233,14 @@ extern void*  _af_debug_hints;
-   /*************************************************************************/
- 
-   /*
--   *  In FreeType, a writing system consists of multiple scripts which can
-+   *  In FreeType, a writing system consists of multiple scripts that can
-    *  be handled similarly *in a typographical way*; the relationship is not
-    *  based on history.  For example, both the Greek and the unrelated
-    *  Armenian scripts share the same features like ascender, descender,
-    *  x-height, etc.  Essentially, a writing system is covered by a
-    *  submodule of the auto-fitter; it contains
-    *
--   *  - a specific global analyzer which computes global metrics specific to
-+   *  - a specific global analyzer that computes global metrics specific to
-    *    the script (based on script-specific characters to identify ascender
-    *    height, x-height, etc.),
-    *
-@@ -297,16 +273,18 @@ extern void*  _af_debug_hints;
-   {
-     AF_WritingSystem  writing_system;
- 
--    FT_Offset                   script_metrics_size;
--    AF_Script_InitMetricsFunc   script_metrics_init;
--    AF_Script_ScaleMetricsFunc  script_metrics_scale;
--    AF_Script_DoneMetricsFunc   script_metrics_done;
-+    FT_Offset                          style_metrics_size;
-+    AF_WritingSystem_InitMetricsFunc   style_metrics_init;
-+    AF_WritingSystem_ScaleMetricsFunc  style_metrics_scale;
-+    AF_WritingSystem_DoneMetricsFunc   style_metrics_done;
- 
--    AF_Script_InitHintsFunc     script_hints_init;
--    AF_Script_ApplyHintsFunc    script_hints_apply;
-+    AF_WritingSystem_InitHintsFunc     style_hints_init;
-+    AF_WritingSystem_ApplyHintsFunc    style_hints_apply;
- 
-   } AF_WritingSystemClassRec;
- 
-+  typedef const AF_WritingSystemClassRec*  AF_WritingSystemClass;
-+
- 
-   /*************************************************************************/
-   /*************************************************************************/
-@@ -317,15 +295,15 @@ extern void*  _af_debug_hints;
-   /*************************************************************************/
- 
-   /*
--   *  Each script is associated with a set of Unicode ranges which gets used
--   *  to test whether the font face supports the script.  It also references
--   *  the writing system it belongs to.
-+   *  Each script is associated with a set of Unicode ranges that gets used
-+   *  to test whether the font face supports the script.
-    *
--   *  We use four-letter script tags from the OpenType specification.
-+   *  We use four-letter script tags from the OpenType specification,
-+   *  extended by `NONE', which indicates `no script'.
-    */
- 
- #undef  SCRIPT
--#define SCRIPT( s, S, d ) \
-+#define SCRIPT( s, S, d, dc ) \
-           AF_SCRIPT_ ## S,
- 
-   /* The list of known scripts. */
-@@ -353,15 +331,81 @@ extern void*  _af_debug_hints;
- 
-   typedef struct  AF_ScriptClassRec_
-   {
--    AF_Script          script;
--    AF_Blue_Stringset  blue_stringset;
--    AF_WritingSystem   writing_system;
-+    AF_Script  script;
- 
-     AF_Script_UniRange  script_uni_ranges; /* last must be { 0, 0 }        */
-     FT_UInt32           standard_char;     /* for default width and height */
- 
-   } AF_ScriptClassRec;
- 
-+  typedef const AF_ScriptClassRec*  AF_ScriptClass;
-+
-+
-+  /*************************************************************************/
-+  /*************************************************************************/
-+  /*****                                                               *****/
-+  /*****                         S T Y L E S                           *****/
-+  /*****                                                               *****/
-+  /*************************************************************************/
-+  /*************************************************************************/
-+
-+  /*
-+   *  The topmost structure for modelling the auto-hinter glyph input data
-+   *  is a `style class', grouping everything together.
-+   */
-+
-+#undef  STYLE
-+#define STYLE( s, S, d, ws, sc, ss ) \
-+          AF_STYLE_ ## S,
-+
-+  /* The list of known styles. */
-+  typedef enum  AF_Style_
-+  {
-+
-+#include "afstyles.h"
-+
-+    AF_STYLE_MAX   /* do not remove */
-+
-+  } AF_Style;
-+
-+
-+  typedef struct  AF_StyleClassRec_
-+  {
-+    AF_Style  style;
-+
-+    AF_WritingSystem   writing_system;
-+    AF_Script          script;
-+    AF_Blue_Stringset  blue_stringset;
-+
-+  } AF_StyleClassRec;
-+
-+  typedef const AF_StyleClassRec*  AF_StyleClass;
-+
-+
-+  /*************************************************************************/
-+  /*************************************************************************/
-+  /*****                                                               *****/
-+  /*****                   S T Y L E   M E T R I C S                   *****/
-+  /*****                                                               *****/
-+  /*************************************************************************/
-+  /*************************************************************************/
-+
-+  typedef struct AF_FaceGlobalsRec_*  AF_FaceGlobals;
-+
-+  /* This is the main structure that combines everything.  Autofit modules */
-+  /* specific to writing systems derive their structures from it, for      */
-+  /* example `AF_LatinMetrics'.                                            */
-+
-+  typedef struct  AF_StyleMetricsRec_
-+  {
-+    AF_StyleClass   style_class;
-+    AF_ScalerRec    scaler;
-+    FT_Bool         digits_have_same_width;
-+
-+    AF_FaceGlobals  globals;    /* to access properties */
-+
-+  } AF_StyleMetricsRec;
-+
- 
-   /* Declare and define vtables for classes */
- #ifndef FT_CONFIG_OPTION_PIC
-@@ -401,21 +445,37 @@ extern void*  _af_debug_hints;
- 
- #define AF_DEFINE_SCRIPT_CLASS(           \
-           script_class,                   \
--          script_,                        \
--          blue_stringset_,                \
--          writing_system_,                \
-+          script,                         \
-           ranges,                         \
-           std_char )                      \
-   FT_CALLBACK_TABLE_DEF                   \
-   const AF_ScriptClassRec  script_class = \
-   {                                       \
--    script_,                              \
--    blue_stringset_,                      \
--    writing_system_,                      \
-+    script,                               \
-     ranges,                               \
-     std_char                              \
-   };
- 
-+
-+#define AF_DECLARE_STYLE_CLASS( style_class ) \
-+  FT_CALLBACK_TABLE const AF_StyleClassRec    \
-+  style_class;
-+
-+#define AF_DEFINE_STYLE_CLASS(          \
-+          style_class,                  \
-+          style,                        \
-+          writing_system,               \
-+          script,                       \
-+          blue_stringset )              \
-+  FT_CALLBACK_TABLE_DEF                 \
-+  const AF_StyleClassRec  style_class = \
-+  {                                     \
-+    style,                              \
-+    writing_system,                     \
-+    script,                             \
-+    blue_stringset                      \
-+  };
-+
- #else /* FT_CONFIG_OPTION_PIC */
- 
- #define AF_DECLARE_WRITING_SYSTEM_CLASS( writing_system_class )            \
-@@ -434,16 +494,16 @@ extern void*  _af_debug_hints;
-   FT_LOCAL_DEF( void )                                                    \
-   FT_Init_Class_ ## writing_system_class( AF_WritingSystemClassRec*  ac ) \
-   {                                                                       \
--    ac->writing_system       = system;                                    \
-+    ac->writing_system      = system;                                     \
-                                                                           \
--    ac->script_metrics_size  = m_size;                                    \
-+    ac->style_metrics_size  = m_size;                                     \
-                                                                           \
--    ac->script_metrics_init  = m_init;                                    \
--    ac->script_metrics_scale = m_scale;                                   \
--    ac->script_metrics_done  = m_done;                                    \
-+    ac->style_metrics_init  = m_init;                                     \
-+    ac->style_metrics_scale = m_scale;                                    \
-+    ac->style_metrics_done  = m_done;                                     \
-                                                                           \
--    ac->script_hints_init    = h_init;                                    \
--    ac->script_hints_apply   = h_apply;                                   \
-+    ac->style_hints_init    = h_init;                                     \
-+    ac->style_hints_apply   = h_apply;                                    \
-   }
- 
- 
-@@ -454,20 +514,36 @@ extern void*  _af_debug_hints;
- #define AF_DEFINE_SCRIPT_CLASS(                            \
-           script_class,                                    \
-           script_,                                         \
--          blue_string_set_,                                \
--          writing_system_,                                 \
-           ranges,                                          \
-           std_char )                                       \
-   FT_LOCAL_DEF( void )                                     \
-   FT_Init_Class_ ## script_class( AF_ScriptClassRec*  ac ) \
-   {                                                        \
-     ac->script            = script_;                       \
--    ac->blue_stringset    = blue_stringset_;               \
--    ac->writing_system    = writing_system_;               \
-     ac->script_uni_ranges = ranges;                        \
-     ac->standard_char     = std_char;                      \
-   }
- 
-+
-+#define AF_DECLARE_STYLE_CLASS( style_class )             \
-+  FT_LOCAL( void )                                        \
-+  FT_Init_Class_ ## style_class( AF_StyleClassRec*  ac );
-+
-+#define AF_DEFINE_STYLE_CLASS(                           \
-+          style_class,                                   \
-+          style_,                                        \
-+          writing_system_,                               \
-+          script_,                                       \
-+          blue_stringset_ )                              \
-+  FT_LOCAL_DEF( void )                                   \
-+  FT_Init_Class_ ## style_class( AF_StyleClassRec*  ac ) \
-+  {                                                      \
-+    ac->style          = style_;                         \
-+    ac->writing_system = writing_system_;                \
-+    ac->script         = script_;                        \
-+    ac->blue_stringset = blue_stringset_;                \
-+  }
-+
- #endif /* FT_CONFIG_OPTION_PIC */
- 
- 
-diff --git a/src/autofit/autofit.c b/src/autofit/autofit.c
-index b23374a..930387c 100644
---- a/src/autofit/autofit.c
-+++ b/src/autofit/autofit.c
-@@ -24,6 +24,8 @@
- #include "afglobal.c"
- #include "afhints.c"
- 
-+#include "afranges.c"
-+
- #include "afdummy.c"
- #include "aflatin.c"
- #ifdef FT_OPTION_AUTOFIT2
-diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk
-index 745adab..5bf3893 100644
---- a/src/autofit/rules.mk
-+++ b/src/autofit/rules.mk
-@@ -36,6 +36,7 @@ AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
-                  $(AUTOF_DIR)/afloader.c \
-                  $(AUTOF_DIR)/afmodule.c \
-                  $(AUTOF_DIR)/afpic.c    \
-+                 $(AUTOF_DIR)/afranges.c \
-                  $(AUTOF_DIR)/afwarp.c
- 
- # AUTOF driver headers
-@@ -43,6 +44,7 @@ AUTOF_DRV_SRC := $(AUTOF_DIR)/afangles.c \
- AUTOF_DRV_H := $(AUTOF_DRV_SRC:%c=%h)  \
-                $(AUTOF_DIR)/aferrors.h \
-                $(AUTOF_DIR)/afscript.h \
-+               $(AUTOF_DIR)/afstyles.h \
-                $(AUTOF_DIR)/aftypes.h  \
-                $(AUTOF_DIR)/afwrtsys.h
- 
-diff --git a/src/base/basepic.c b/src/base/basepic.c
-index 0af770e..aeb6fd5 100644
---- a/src/base/basepic.c
-+++ b/src/base/basepic.c
-@@ -4,7 +4,7 @@
- /*                                                                         */
- /*    The FreeType position independent code services for base.            */
- /*                                                                         */
--/*  Copyright 2009, 2012 by                                                */
-+/*  Copyright 2009, 2012, 2013 by                                          */
- /*  Oran Agra and Mickey Gabel.                                            */
- /*                                                                         */
- /*  This file is part of the FreeType project, and may only be used,       */
-@@ -35,7 +35,7 @@
-   /* forward declaration of PIC init function from ftrfork.c */
-   /* (not modularized)                                       */
-   void
--  FT_Init_Table_raccess_guess_table( ft_raccess_guess_rec*  record );
-+  FT_Init_Table_ft_raccess_guess_table( ft_raccess_guess_rec*  record );
- #endif
- 
-   /* forward declaration of PIC init functions from ftinit.c */
-@@ -92,7 +92,7 @@
-     FT_Init_Class_ft_bitmap_glyph_class(
-       &container->ft_bitmap_glyph_class );
- #ifdef FT_CONFIG_OPTION_MAC_FONTS
--    FT_Init_Table_raccess_guess_table(
-+    FT_Init_Table_ft_raccess_guess_table(
-       (ft_raccess_guess_rec*)&container->ft_raccess_guess_table );
- #endif
- 
-diff --git a/src/base/rules.mk b/src/base/rules.mk
-index 8745337..cbd8107 100644
---- a/src/base/rules.mk
-+++ b/src/base/rules.mk
-@@ -33,12 +33,14 @@ BASE_COMPILE := $(FT_COMPILE) $I$(subst /,$(COMPILER_SEP),$(SRC_DIR)/base)
- # All files listed here should be included in `ftbase.c' (for a `single'
- # build).
- #
--BASE_SRC := $(BASE_DIR)/ftadvanc.c \
-+BASE_SRC := $(BASE_DIR)/basepic.c  \
-+            $(BASE_DIR)/ftadvanc.c \
-             $(BASE_DIR)/ftcalc.c   \
-             $(BASE_DIR)/ftdbgmem.c \
-             $(BASE_DIR)/ftgloadr.c \
-             $(BASE_DIR)/ftobjs.c   \
-             $(BASE_DIR)/ftoutln.c  \
-+            $(BASE_DIR)/ftpic.c    \
-             $(BASE_DIR)/ftrfork.c  \
-             $(BASE_DIR)/ftsnames.c \
-             $(BASE_DIR)/ftstream.c \
-@@ -51,8 +53,9 @@ ifneq ($(ftmac_c),)
- endif
- 
- # for simplicity, we also handle `md5.c' (which gets included by `ftobjs.h')
--BASE_H := $(BASE_DIR)/ftbase.h \
--          $(BASE_DIR)/md5.c    \
-+BASE_H := $(BASE_DIR)/basepic.h \
-+          $(BASE_DIR)/ftbase.h  \
-+          $(BASE_DIR)/md5.c     \
-           $(BASE_DIR)/md5.h
- 
- # Base layer `extensions' sources
-diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk
-index 4cd39a8..f321de2 100644
---- a/src/psnames/rules.mk
-+++ b/src/psnames/rules.mk
-@@ -3,7 +3,7 @@
- #
- 
- 
--# Copyright 1996-2000, 2001, 2003, 2011 by
-+# Copyright 1996-2001, 2003, 2011, 2013 by
- # David Turner, Robert Wilhelm, and Werner Lemberg.
- #
- # This file is part of the FreeType project, and may only be used, modified,
-@@ -46,7 +46,7 @@ PSNAMES_DRV_OBJ_S := $(OBJ_DIR)/psnames.$O
- 
- # PSNames driver source file for single build
- #
--PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psmodule.c
-+PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psnames.c
- 
- 
- # PSNames driver - single object
-diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
-index 0d74248..b10e390 100644
---- a/src/truetype/ttgload.c
-+++ b/src/truetype/ttgload.c
-@@ -738,7 +738,6 @@
- #endif
- 
-     TT_GlyphZone  zone = &loader->zone;
--    FT_Pos        origin;
- 
- #ifdef TT_USE_BYTECODE_INTERPRETER
-     FT_UInt       n_ins;
-@@ -755,14 +754,7 @@
-                  loader->glyph->control_len ));
-     }
-     n_ins = (FT_UInt)( loader->glyph->control_len );
--#endif
--
--    origin = zone->cur[zone->n_points - 4].x;
--    origin = FT_PIX_ROUND( origin ) - origin;
--    if ( origin )
--      translate_array( zone->n_points, zone->cur, origin, 0 );
- 
--#ifdef TT_USE_BYTECODE_INTERPRETER
-     /* save original point position in org */
-     if ( n_ins > 0 )
-       FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
-@@ -1083,9 +1075,9 @@
-       if ( !x && !y )
-         return FT_Err_Ok;
- 
--  /* Use a default value dependent on                                     */
--  /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED.  This is useful for old TT */
--  /* fonts which don't set the xxx_COMPONENT_OFFSET bit.                  */
-+      /* Use a default value dependent on                                  */
-+      /* TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED.  This is useful for old */
-+      /* TT fonts which don't set the xxx_COMPONENT_OFFSET bit.            */
- 
-       if ( have_scale &&
- #ifdef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED
-@@ -1097,10 +1089,10 @@
- 
- #if 0
- 
--  /*************************************************************************/
--  /*                                                                       */
--  /* This algorithm is what Apple documents.  But it doesn't work.         */
--  /*                                                                       */
-+        /*******************************************************************/
-+        /*                                                                 */
-+        /* This algorithm is what Apple documents.  But it doesn't work.   */
-+        /*                                                                 */
-         int  a = subglyph->transform.xx > 0 ?  subglyph->transform.xx
-                                             : -subglyph->transform.xx;
-         int  b = subglyph->transform.yx > 0 ?  subglyph->transform.yx
-@@ -1120,12 +1112,12 @@
-         x = FT_MulFix( x, m );
-         y = FT_MulFix( y, n );
- 
--#else /* 0 */
-+#else /* 1 */
- 
--  /*************************************************************************/
--  /*                                                                       */
--  /* This algorithm is a guess and works much better than the above.       */
--  /*                                                                       */
-+        /*******************************************************************/
-+        /*                                                                 */
-+        /* This algorithm is a guess and works much better than the above. */
-+        /*                                                                 */
-         FT_Fixed  mac_xscale = FT_Hypot( subglyph->transform.xx,
-                                          subglyph->transform.xy );
-         FT_Fixed  mac_yscale = FT_Hypot( subglyph->transform.yy,
-@@ -1135,7 +1127,7 @@
-         x = FT_MulFix( x, mac_xscale );
-         y = FT_MulFix( y, mac_yscale );
- 
--#endif /* 0 */
-+#endif /* 1 */
- 
-       }
- 
-@@ -1286,8 +1278,8 @@
-    *   pp1 = (round(xmin - lsb), 0)      ,
-    *   pp2 = (round(pp1 + aw), 0)        .
-    *
--   * Note that the rounding to the grid is not documented currently in the
--   * specification.
-+   * Note that the rounding to the grid (in the device space) is not
-+   * documented currently in the specification.
-    *
-    * However, the specification lacks the precise definition of vertical
-    * phantom points.  Greg Hitchcock provided the following explanation.
-@@ -1360,12 +1352,10 @@
- #define TT_LOADER_SET_PP( loader )                                          \
-           do                                                                \
-           {                                                                 \
--            FT_Bool  subpixel_  = loader->exec                              \
--                                    ? loader->exec->subpixel_hinting        \
--                                    : 0;                                    \
--            FT_Bool  grayscale_ = loader->exec                              \
--                                    ? loader->exec->grayscale_hinting       \
--                                    : 0;                                    \
-+            FT_Bool  subpixel_  = loader->exec ? loader->exec->subpixel     \
-+                                               : 0;                         \
-+            FT_Bool  grayscale_ = loader->exec ? loader->exec->grayscale    \
-+                                               : 0;                         \
-             FT_Bool  use_aw_2_  = (FT_Bool)( subpixel_ && grayscale_ );     \
-                                                                             \
-                                                                             \
-@@ -1373,6 +1363,7 @@
-             (loader)->pp1.y = 0;                                            \
-             (loader)->pp2.x = (loader)->pp1.x + (loader)->advance;          \
-             (loader)->pp2.y = 0;                                            \
-+                                                                            \
-             (loader)->pp3.x = use_aw_2_ ? (loader)->advance / 2 : 0;        \
-             (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing;  \
-             (loader)->pp4.x = use_aw_2_ ? (loader)->advance / 2 : 0;        \
-@@ -1388,6 +1379,7 @@
-             (loader)->pp1.y = 0;                                            \
-             (loader)->pp2.x = (loader)->pp1.x + (loader)->advance;          \
-             (loader)->pp2.y = 0;                                            \
-+                                                                            \
-             (loader)->pp3.x = 0;                                            \
-             (loader)->pp3.y = (loader)->bbox.yMax + (loader)->top_bearing;  \
-             (loader)->pp4.x = 0;                                            \
-@@ -1567,21 +1559,32 @@
-         if ( error )
-           goto Exit;
- 
--        loader->pp1.x += deltas[0].x; loader->pp1.y += deltas[0].y;
--        loader->pp2.x += deltas[1].x; loader->pp2.y += deltas[1].y;
--        loader->pp3.x += deltas[2].x; loader->pp3.y += deltas[2].y;
--        loader->pp4.x += deltas[3].x; loader->pp4.y += deltas[3].y;
-+        loader->pp1.x += deltas[0].x;
-+        loader->pp1.y += deltas[0].y;
-+        loader->pp2.x += deltas[1].x;
-+        loader->pp2.y += deltas[1].y;
-+
-+        loader->pp3.x += deltas[2].x;
-+        loader->pp3.y += deltas[2].y;
-+        loader->pp4.x += deltas[3].x;
-+        loader->pp4.y += deltas[3].y;
- 
-         FT_FREE( deltas );
-       }
- 
--#endif
-+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
- 
-+      /* scale phantom points, if necessary; */
-+      /* they get rounded in `TT_Hint_Glyph' */
-       if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
-       {
-         loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
-         loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
-+        /* pp1.y and pp2.y are always zero */
-+
-+        loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
-         loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
-+        loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
-         loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
-       }
- 
-@@ -1589,8 +1592,8 @@
-       goto Exit;
-     }
- 
--    /* must initialize points before (possibly) overriding */
--    /* glyph metrics from the incremental interface        */
-+    /* must initialize phantom points before (possibly) overriding */
-+    /* glyph metrics from the incremental interface                */
-     TT_LOADER_SET_PP( loader );
- 
- #ifdef FT_CONFIG_OPTION_INCREMENTAL
-@@ -1663,7 +1666,7 @@
-                          face,
-                          glyph_index,
-                          &deltas,
--                         gloader->current.num_subglyphs + 4 )) != 0 )
-+                         gloader->current.num_subglyphs + 4 ) ) != 0 )
-           goto Exit;
- 
-         subglyph = gloader->current.subglyphs + gloader->base.num_subglyphs;
-@@ -1681,21 +1684,32 @@
-           }
-         }
- 
--        loader->pp1.x += deltas[i + 0].x; loader->pp1.y += deltas[i + 0].y;
--        loader->pp2.x += deltas[i + 1].x; loader->pp2.y += deltas[i + 1].y;
--        loader->pp3.x += deltas[i + 2].x; loader->pp3.y += deltas[i + 2].y;
--        loader->pp4.x += deltas[i + 3].x; loader->pp4.y += deltas[i + 3].y;
-+        loader->pp1.x += deltas[i + 0].x;
-+        loader->pp1.y += deltas[i + 0].y;
-+        loader->pp2.x += deltas[i + 1].x;
-+        loader->pp2.y += deltas[i + 1].y;
-+
-+        loader->pp3.x += deltas[i + 2].x;
-+        loader->pp3.y += deltas[i + 2].y;
-+        loader->pp4.x += deltas[i + 3].x;
-+        loader->pp4.y += deltas[i + 3].y;
- 
-         FT_FREE( deltas );
-       }
- 
- #endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
- 
-+      /* scale phantom points, if necessary; */
-+      /* they get rounded in `TT_Hint_Glyph' */
-       if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
-       {
-         loader->pp1.x = FT_MulFix( loader->pp1.x, x_scale );
-         loader->pp2.x = FT_MulFix( loader->pp2.x, x_scale );
-+        /* pp1.y and pp2.y are always zero */
-+
-+        loader->pp3.x = FT_MulFix( loader->pp3.x, x_scale );
-         loader->pp3.y = FT_MulFix( loader->pp3.y, y_scale );
-+        loader->pp4.x = FT_MulFix( loader->pp4.x, x_scale );
-         loader->pp4.y = FT_MulFix( loader->pp4.y, y_scale );
-       }
- 
-@@ -1755,6 +1769,7 @@
-           /* restore subglyph pointer */
-           subglyph = gloader->base.subglyphs + num_base_subgs + n;
- 
-+          /* restore phantom points if necessary */
-           if ( !( subglyph->flags & USE_MY_METRICS ) )
-           {
-             loader->pp1 = pp[0];
-@@ -2091,8 +2106,7 @@
- #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-       TT_Driver  driver = (TT_Driver)FT_FACE_DRIVER( face );
- 
--      FT_Bool  subpixel_hinting  = FALSE;
--      FT_Bool  grayscale_hinting = TRUE;
-+      FT_Bool  subpixel = FALSE;
- 
- #if 0
-       /* not used yet */
-@@ -2125,24 +2139,24 @@
- 
-       if ( driver->interpreter_version == TT_INTERPRETER_VERSION_38 )
-       {
--        subpixel_hinting = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags )
--                                      != FT_RENDER_MODE_MONO )          &&
--                                    SPH_OPTION_SET_SUBPIXEL             );
-+        subpixel = FT_BOOL( ( FT_LOAD_TARGET_MODE( load_flags ) !=
-+                              FT_RENDER_MODE_MONO               )  &&
-+                            SPH_OPTION_SET_SUBPIXEL                );
- 
--        if ( subpixel_hinting )
--          grayscale = grayscale_hinting = FALSE;
-+        if ( subpixel )
-+          grayscale = FALSE;
-         else if ( SPH_OPTION_SET_GRAYSCALE )
-         {
--          grayscale = grayscale_hinting = TRUE;
--          subpixel_hinting              = FALSE;
-+          grayscale = TRUE;
-+          subpixel  = FALSE;
-         }
-         else
--          grayscale = grayscale_hinting = FALSE;
-+          grayscale = FALSE;
- 
-         if ( FT_IS_TRICKY( glyph->face ) )
--          subpixel_hinting = grayscale_hinting = FALSE;
-+          subpixel = FALSE;
- 
--        exec->ignore_x_mode      = subpixel_hinting || grayscale_hinting;
-+        exec->ignore_x_mode      = subpixel || grayscale;
-         exec->rasterizer_version = SPH_OPTION_SET_RASTERIZER_VERSION;
-         if ( exec->sph_tweak_flags & SPH_TWEAK_RASTERIZER_35 )
-           exec->rasterizer_version = TT_INTERPRETER_VERSION_35;
-@@ -2185,24 +2199,24 @@
-       {
-         /* a change from mono to subpixel rendering (and vice versa) */
-         /* requires a re-execution of the CVT program                */
--        if ( subpixel_hinting != exec->subpixel_hinting )
-+        if ( subpixel != exec->subpixel )
-         {
-           FT_TRACE4(( "tt_loader_init: subpixel hinting change,"
-                       " re-executing `prep' table\n" ));
- 
--          exec->subpixel_hinting = subpixel_hinting;
--          reexecute              = TRUE;
-+          exec->subpixel = subpixel;
-+          reexecute      = TRUE;
-         }
- 
-         /* a change from mono to grayscale rendering (and vice versa) */
-         /* requires a re-execution of the CVT program                 */
--        if ( grayscale != exec->grayscale_hinting )
-+        if ( grayscale != exec->grayscale )
-         {
-           FT_TRACE4(( "tt_loader_init: grayscale hinting change,"
-                       " re-executing `prep' table\n" ));
- 
--          exec->grayscale_hinting = grayscale_hinting;
--          reexecute               = TRUE;
-+          exec->grayscale = grayscale;
-+          reexecute       = TRUE;
-         }
-       }
-       else
-diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
-index 92e6d43..4c384ec 100644
---- a/src/truetype/ttinterp.c
-+++ b/src/truetype/ttinterp.c
-@@ -7169,7 +7169,7 @@
-         org_dist = CUR_fast_dualproj( &vec );
-       }
- 
--      cur_dist = CUR_Func_project ( &CUR.zp2.cur[point], cur_base );
-+      cur_dist = CUR_Func_project( &CUR.zp2.cur[point], cur_base );
- 
-       if ( org_dist )
-       {
-@@ -7180,14 +7180,20 @@
-           /* This is the same as what MS does for the invalid case:  */
-           /*                                                         */
-           /*   delta = (Original_Pt - Original_RP1) -                */
--          /*           (Current_Pt - Current_RP1)                    */
-+          /*           (Current_Pt - Current_RP1)         ;          */
-           /*                                                         */
-           /* In FreeType speak:                                      */
-           /*                                                         */
--          /*   new_dist = cur_dist -                                 */
--          /*              org_dist - cur_dist;                       */
-+          /*   delta = org_dist - cur_dist          .                */
-+          /*                                                         */
-+          /* We move `point' by `new_dist - cur_dist' after leaving  */
-+          /* this block, thus we have                                */
-+          /*                                                         */
-+          /*   new_dist - cur_dist = delta                   ,       */
-+          /*   new_dist - cur_dist = org_dist - cur_dist     ,       */
-+          /*              new_dist = org_dist                .       */
- 
--          new_dist = -org_dist;
-+          new_dist = org_dist;
-         }
-       }
-       else
-@@ -7820,13 +7826,6 @@
-          CUR.ignore_x_mode                                   &&
-          CUR.rasterizer_version >= TT_INTERPRETER_VERSION_35 )
-     {
--      /********************************/
--      /* HINTING FOR GRAYSCALE        */
--      /* Selector Bit:  5             */
--      /* Return Bit(s): 12            */
--      /*                              */
--      if ( ( args[0] & 32 ) != 0 && CUR.grayscale_hinting )
--        K |= 1 << 12;
- 
-       if ( CUR.rasterizer_version >= 37 )
-       {
-@@ -7835,7 +7834,7 @@
-         /* Selector Bit:  6             */
-         /* Return Bit(s): 13            */
-         /*                              */
--        if ( ( args[0] & 64 ) != 0 && CUR.subpixel_hinting )
-+        if ( ( args[0] & 64 ) != 0 && CUR.subpixel )
-           K |= 1 << 13;
- 
-         /********************************/
-diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h
-index b3916ac..1d8825d 100644
---- a/src/truetype/ttinterp.h
-+++ b/src/truetype/ttinterp.h
-@@ -263,12 +263,10 @@ FT_BEGIN_HEADER
- #ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
-     TT_Round_Func      func_round_sphn;   /* subpixel rounding function */
- 
--    FT_Bool            grayscale_hinting; /* Using grayscale hinting?      */
--    FT_Bool            subpixel_hinting;  /* Using subpixel hinting?       */
--    FT_Bool            native_hinting;    /* Using native hinting?         */
-+    FT_Bool            subpixel;          /* Using subpixel hinting?       */
-     FT_Bool            ignore_x_mode;     /* Standard rendering mode for   */
-                                           /* subpixel hinting.  On if gray */
--                                          /* or subpixel hinting is on )   */
-+                                          /* or subpixel hinting is on.    */
- 
-     /* The following 4 aren't fully implemented but here for MS rasterizer */
-     /* compatibility.                                                      */
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/freetype.git/commitdiff/2ea2159be78c5d8e7e4f083a26751536a46f4f21



More information about the pld-cvs-commit mailing list