Upgrade freetype to VER-2-10-1

Exempt-From-Owner-Approval: Upgrade library
Test: None
Change-Id: I2d49bf289d4db461879e023967e1a03cd112a7ad
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3f58337..e3ffb83 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,6 +1,6 @@
 # CMakeLists.txt
 #
-# Copyright 2013-2018 by
+# Copyright (C) 2013-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # Written originally by John Cary <cary@txcorp.com>
@@ -134,7 +134,7 @@
 project(freetype C)
 
 set(VERSION_MAJOR "2")
-set(VERSION_MINOR "9")
+set(VERSION_MINOR "10")
 set(VERSION_PATCH "1")
 
 # SOVERSION scheme: CURRENT.AGE.REVISION
@@ -234,12 +234,20 @@
   endif ()
   string(REPLACE "/undef " "#undef "
     FTCONFIG_H "${FTCONFIG_H}")
-else()
+else ()
   file(READ "${PROJECT_SOURCE_DIR}/include/freetype/config/ftconfig.h"
     FTCONFIG_H)
 endif ()
-file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h"
-  "${FTCONFIG_H}")
+
+set(FTCONFIG_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftconfig.h")
+if (EXISTS "${FTCONFIG_H_NAME}")
+  file(READ "${FTCONFIG_H_NAME}" ORIGINAL_FTCONFIG_H)
+else ()
+  set(ORIGINAL_FTCONFIG_H "")
+endif ()
+if (NOT (ORIGINAL_FTCONFIG_H STREQUAL FTCONFIG_H))
+  file(WRITE "${FTCONFIG_H_NAME}" "${FTCONFIG_H}")
+endif ()
 
 
 # Create the options file
@@ -265,8 +273,16 @@
     "/\\* +(#define +FT_CONFIG_OPTION_USE_HARFBUZZ) +\\*/" "\\1"
     FTOPTION_H "${FTOPTION_H}")
 endif ()
-file(WRITE "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h"
-  "${FTOPTION_H}")
+
+set(FTOPTION_H_NAME "${PROJECT_BINARY_DIR}/include/freetype/config/ftoption.h")
+if (EXISTS "${FTOPTION_H_NAME}")
+  file(READ "${FTOPTION_H_NAME}" ORIGINAL_FTOPTION_H)
+else ()
+  set(ORIGINAL_FTOPTION_H "")
+endif ()
+if (NOT (ORIGINAL_FTOPTION_H STREQUAL FTOPTION_H))
+  file(WRITE "${FTOPTION_H_NAME}" "${FTOPTION_H}")
+endif ()
 
 
 file(GLOB PUBLIC_HEADERS "include/ft2build.h" "include/freetype/*.h")
@@ -333,7 +349,7 @@
 
 if (NOT DISABLE_FORCE_DEBUG_POSTFIX)
   set(CMAKE_DEBUG_POSTFIX d)
-endif()
+endif ()
 
 
 add_library(freetype
@@ -372,7 +388,7 @@
       $<INSTALL_INTERFACE:include/freetype2>
       $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
       $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
-    PRIVATE 
+    PRIVATE
       ${CMAKE_CURRENT_BINARY_DIR}/include
       ${CMAKE_CURRENT_SOURCE_DIR}/include)
 
@@ -456,7 +472,15 @@
     string(REPLACE "%LIBS_PRIVATE%" ""  # All libs support pkg-config
            FREETYPE2_PC_IN ${FREETYPE2_PC_IN})
 
-    file(WRITE ${PROJECT_BINARY_DIR}/freetype2.pc ${FREETYPE2_PC_IN})
+    set(FREETYPE2_PC_IN_NAME "${PROJECT_BINARY_DIR}/freetype2.pc")
+    if (EXISTS "${FREETYPE2_PC_IN_NAME}")
+      file(READ "${FREETYPE2_PC_IN_NAME}" ORIGINAL_FREETYPE2_PC_IN)
+    else ()
+      set(ORIGINAL_FREETYPE2_PC_IN "")
+    endif ()
+    if (NOT (ORIGINAL_FREETYPE2_PC_IN STREQUAL FREETYPE2_PC_IN))
+      file(WRITE "${FREETYPE2_PC_IN_NAME}" ${FREETYPE2_PC_IN})
+    endif ()
 
     install(
       FILES ${PROJECT_BINARY_DIR}/freetype2.pc
@@ -469,6 +493,7 @@
       EXPORT freetype-targets
       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+      RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
       FRAMEWORK DESTINATION Library/Frameworks
       COMPONENT libraries)
   install(
@@ -492,9 +517,9 @@
 
 if (WIN32)
   set(CPACK_GENERATOR ZIP)
-else()
+else ()
   set(CPACK_GENERATOR TGZ)
-endif()
+endif ()
 
 set(CPACK_COMPONENT_LIBRARIES_DISPLAY_NAME "Libraries")
 set(CPACK_COMPONENT_HEADERS_DISPLAY_NAME "C/C++ Headers")
diff --git a/ChangeLog b/ChangeLog
index b6cb46b..6450a60 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,1747 @@
+2019-07-01  Werner Lemberg  <wl@gnu.org>
+
+	* Version 2.10.1 released.
+	==========================
+
+
+	Tag sources with `VER-2-10-1'.
+
+	* docs/VERSION.TXT: Add entry for version 2.10.1.
+
+	* README, Jamfile (RefDoc), src/base/ftver.rc,
+	builds/windows/vc2010/freetype.vcxproj,
+	builds/windows/vc2010/index.html,
+	builds/windows/visualc/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualc/index.html,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualce/freetype.vcproj,
+	builds/windows/visualce/index.html,
+	builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2005-ce/index.html,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/index.html: s/2.10.0/2.10.1/, s/2100/2101/.
+
+	* include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+	* builds/unix/configure.raw (version_info): Set to 23:1:17.
+	* CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+	* include/freetype/fterrors.h (FT_Error_String): Fix C++ compilation.
+
+2019-06-26  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Fix inequality.
+
+	Reported by Armin Hasitzka.
+
+2019-06-16  Werner Lemberg  <wl@gnu.org>
+
+	* src/tools/apinames.c: Formatting, minor edits.
+
+2019-06-16  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Disable hinting if no blue zones are available (#56450).
+
+	* src/autofit/afglobal.c (af_face_global_get_metrics): Start again
+	(with dummy hinter module) if no blue zones are present.
+
+	* src/autofit/aflatin.c (af_latin_metrics_init_blues): Change
+	signature to return error code.
+	If no blue zones are found, update `glyph_styles' array to hold
+	AF_STYLE_NONE_DFLT instead of the current style.
+	(af_latin_metrics_init): Return internal error code if no blue zones
+	are found.
+
+2019-06-16  Werner Lemberg  <wl@gnu.org>
+
+	Towards better VMS support.
+
+	More to come.
+
+	* builds/vms/LIBS.OPT_IA64, builds/vms/_LINK.OPT_IA64,
+	builds/vms/vmslib.dat: New files provided by Jouk Jansen
+	<joukj@hrem.nano.tudelft.nl>.
+
+	* builds/vms/ftconfig.h: Update, also from Jouk.
+
+2019-06-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/autofit/aflatin.c (af_latin_metrics_init_widths): Minor.
+
+2019-06-13  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Restore the span buffering for direct mode only.
+
+	The buffer size FT_MAX_GRAY_SPANS is set to 10 spans, which should be
+	enough to cover the entire scanline for simple glyphs in most cases:
+	each slightly slanted edge needs up to two spans, plus a filling span
+	in-between.  This is not new, we used to do it before cb4388783cecc.
+
+	* src/smooth/ftgrays.c (gray_TWorker): Add `spans' and `num_spans'.
+	(gray_hline, gray_sweep): Implement the span buffering.
+	(gray_raster_render): Use negative `num_spans' to avoid the direct
+	mode.
+
+2019-06-12  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* include/freetype/ftmodapi.h (FT_DebugHook_Func): Return error.
+
+	Fix a warning by adding a return value as in `TT_RunIns',
+	which should not be a compatibility issue. 
+
+2019-06-11  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttobjs.c (tt_check_trickyness_family): Add `const'.
+
+2019-06-11  Moazin Khatti  <moazinkhatri@gmail.com>
+
+	[gzip] Add support for `gzip' encoded header.
+
+	* src/gzip/ftgzip.c (FT_Gzip_Uncompress): Modify the the call to
+	`inflateInit2' to enable support for `gzip' encoded headers. 
+
+2019-06-10  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[type1,type42] Use `const' for string literals.
+
+	* include/freetype/internal/psaux.h (PS_Table_FuncsRec): Updated.
+	* include/freetype/internal/t1types.h (T1_EncodingRec): Updated.
+	* src/psaux/psobjs.[ch] (ps_table_add): Updated.
+	* src/type1/t1load.c (T1_Open_Face, parse_encoding): Updated.
+	* src/type42/t42objs.c (T42_Open_Face): Updated.
+	* src/type42/t42parse.c (t42_parse_encoding): Updated.
+
+	* src/cff/cffobjs.c (cff_face_init): Minor.
+
+2019-06-10  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf,pcf] Use `const' for string literals.
+
+	* src/bdf/bdf.h (bdf_property_t): Updated `name'.
+	* src/bdf/bdflib.c (_bdf_list_split,bdf_create_property,
+	_bdf_add_property,_bdf_ato*): Updated.
+	* src/bdf/bdfdrivr.c (bdf_interpret_style): Updated.
+	* src/pcf/pcfread.c (pcf_intrpret_style): Ditto.
+
+2019-06-07  Philip Race  <philip.race@oracle.com>
+
+	* src/base/ftinit.c (FT_Set_Default_Properties): Fix crash.
+
+	Terminate loop at end of environment.
+
+2019-05-31  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Solidify VC2005 builds.
+
+	* include/freetype/internal/ftcalc.h (FT_MSB) [_MSC_VER]: Explicitly
+	declare `_BitScanReverse' intrinsic.
+	* builds/windows/visualc/freetype.vcproj [Debug]: Disable intrinsics.
+
+2019-05-30  Nikhil Ramakrishnan  <ramakrishnan.nikhil@gmail.com>
+
+	[sfnt] Separate WOFF sources and headers.
+
+	Move WOFF sources and headers to separate files.
+
+	* include/freetype/internal/wofftypes.h, src/sfnt/sfwoff.c,
+	src/sfnt/sfwoff.h: New files.
+
+	* include/freetype/internal/fttrace.h: Register `sfwoff.c'.
+
+	* include/freetype/internal/internal.h: Define
+	FT_INTERNAL_WOFF_TYPES_H.
+
+	* include/freetype/internal/sfnt.h: Include FT_INTERNAL_WOFF_TYPES_H.
+
+	* include/freetype/internal/tttypes.h: Move out WOFF structures.
+
+	* src/sfnt/rules.mk: Add `sfwoff.c'.
+
+	* src/sfnt/sfnt.c: Include `sfwoff.c'.
+
+	* src/sfnt/sfobjs.c: Include `sfwoff.h', move out WOFF sources.
+
+2019-05-30  Werner Lemberg  <wl@gnu.org>
+
+	[base] Fix `make multi'.
+
+	Reported by Nikhil.
+
+	* src/base/fterrors.c: Include FT_INTERNAL_DEBUG_H.
+
+2019-05-29  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Fix copy-and-paste error (#56409).
+
+	* src/truetype/ttgload.c (load_truetype_glyph): Use correct indices
+	into `unrounded' array for phantom points.
+
+2019-05-29  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix 32bit builds (#56404).
+
+	Patch suggested by Ben Wagner <bungeman@google.com>.
+
+	* src/truetype/ttgxvar.c (FT_fixedToInt, FT_fixedToFdot6): Remove
+	harmful cast to unsigned type.
+
+2019-05-26  Ben Wagner  <bungeman@google.com>
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Improve accuracy.
+
+2019-05-23  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Draw glyphs without deltas in variation font (#56374).
+
+	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Always fill
+	`unrounded' array.
+
+2019-05-21  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttinterp.c (opcode_name): Improve mnemonics.
+
+2019-05-16  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Actually scale varied CVT values.
+
+	Up to now, only the unscaled CVT values were varied; in other words,
+	the `CVAR' data was never used for bytecode hinting.
+
+	* src/truetype/ttgxvar.c (tt_cvt_ready_iterator): New auxiliary
+	function.
+	(tt_face_vary_cvt): Use it to trigger rescaling of CVT values.
+
+2019-05-16  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Use 26.6 format for storing unscaled CVT values.
+
+	If `CVAR' data is applied to variation fonts, fractional values are
+	possible.
+
+	* include/freetype/internal/tttypes.h (TT_FaceRec): Change type of
+	`cvt' from `FT_Short' to `FT_Int32'.
+
+	* src/truetype/ttgxvar.c (FT_fdot6ToFixed): New macro.
+	(tt_face_vary_cvt): Use it to update code to 26.6 format.
+
+	* src/truetype/ttobjs.c (tt_size_run_prep): Update code to 26.6
+	format.
+
+	* src/truetype/ttpload.c (tt_face_load_cvt): Stora data in 26.6
+	format.
+
+2019-05-16  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgload.c (load_truetype_glyph): Init `unrounded'.
+
+	This fixes linear advance width values for spacing glyphs.  Bug
+	introduced 2019-05-09.
+
+2019-05-16  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Avoid code duplication.
+
+	* src/truetype/ttobjs.c (tt_size_run_prep): Scale CVT values in this
+	function.
+	(tt_size_ready_bytecode): Updated.
+	* src/truetype/ttgload.c (tt_loader_init): Updated.
+
+2019-05-13  Jouk Jansen  <joukj@hrem.nano.tudelft.nl>
+
+	* vms_make.com: Updated.  Handle `bzip2' directory, too.
+
+2019-05-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/psaux/psfont.c (cf2_font_setup): Fix compiler warning.
+
+2019-05-12  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Doh.  Fix last commit to make it work.
+
+	Very embarassing :-)
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14701
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14705
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14710
+
+	* src/truetype/ttgload.c (IS_DEFAULT_INSTANCE): Move up and add
+	argument; update all callers.
+	(TT_Process_Simple_Glyph): Use it.  The `unrounded' array is active
+	for variation fonts only, thus also enclose related code with
+	`#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT ...  #endif' where
+	necessary.
+	Revert commit a113e5d from 2019-05-09, and don't use `extra_points2'
+	but allocate a temporary array.
+	Speed up the scaling of the `unrounded' array.
+
+	* src/truetype/ttgxvar.c (FT_fixedToInt, FT_FixedToFdot6): Fix type
+	conversions and rounding.  The unsigned type must have more or equal
+	bits to the signed type.
+
+2019-05-09  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Increase precision of font variation (#54371).
+
+	This patch makes FreeType use font units in 26.6 format internally
+	instead of integers.
+
+	* src/truetype/ttgxvar.c (FT_fixedToFdot6): New macro.
+	(TT_Vary_Apply_Glyph_Deltas): Add argument to output unrounded font
+	coordinates.
+	* src/truetype/ttgxvar.h: Updated.
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Use
+	`extra_points2' array to temporarily hold unrounded point
+	coordinates; use them to compute scaled coordinates and linear
+	advance width and height.
+	(load_truetype_code): Adjust similarly.
+
+2019-05-09  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Minor.
+
+2019-05-08  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Faster fractions.
+
+	* src/smooth/ftgrays.c (SUBPIXELS): Replace with...
+	(FRACT): A fractional coordinate macro to use in...
+	(gray_render_line, gray_render_scanline): ... here.
+
+2019-05-07  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/raster/ftraster.c (Draw_Sweep): Unbreak.
+
+2019-05-05  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/raster/ftraster.c: Clean-ups.
+
+2019-05-05  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgxvar.c: More use of `FT_fdot14ToFixed'.
+
+2019-05-04  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/smooth/ftgrays.c (gray_render_line): Small shortcut.
+
+2019-05-04  Werner Lemberg  <wl@gnu.org>
+
+	Various clang 8.0 static analyzer fixes.
+
+	Reported by Sender Ghost <lightside@gmx.com>.
+
+	* src/autofit/afcjk.c (af_cjk_hints_compute_edges): Catch a corner
+	case where `edge->first' could be NULL.
+
+	* src/pfr/pfrobjs.c (pfr_slot_load): Remove unnecessary test of
+	`size'.
+
+	* src/raster/ftraster.c (Draw_Sweep): Catch a corner case where
+	`draw_right' might be NULL.
+
+	* src/sfnt/ttmtx.c (tt_face_get_metrics): Fix limit test for
+	`aadvance'.
+	Ensure `abearing' always hold a meaningful result.
+
+	* src/truetype/ttgload.c (load_truetype_glyph): Ensure `subglyph' is
+	not NULL before accessing it.
+	* src/truetype/ttgxvar.c (TT_Set_Named_Instance): Remove unnecessary
+	test of `namedstyle'.
+
+	* src/type42/t42parse.c (t42_parser_done): Ensure
+	`parser->root.funcs.done' is not NULL before accessing it.
+
+2019-05-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Miscellaneous macro updates.
+
+	* src/base/ftoutln.c (SCALED): Updated.
+	* src/smooth/ftgrays.c (SCALED): Ditto.
+	(FLOOR, ROUND, CEILING): Removed.
+	* src/psaux/psfixed.h (cf2_fracToFixed): Updated.
+
+2019-05-02  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Tweak LCD filtering.
+
+	* src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+	Choose direction from bitmap's pixel_mode.
+	* include/freetype/internal/ftobjs.c (FT_Bitmap_LcdFilterFunc):
+	Updated.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Updated.
+
+2019-05-02  Werner Lemberg  <wl@gnu.org>
+
+	* vms_make.com: Updated (#56253).
+
+	Remove no longer existing directories (`autohint', `otlayout').
+	Update used base extensions.
+	Activate `autofit' module.
+	Add `gxvalid' module.
+	Update copyright notices.
+
+2019-04-29  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Simplify cubic Bézier flattening.
+
+	The previous implementation is correct but it is too complex.
+	The revised algorithm is based on the fact that each split moves
+	the control points closer to the trisection points on the chord.
+	The corresponding distances are good surrogates for the curve
+	deviation from the straight line.
+
+	This cubic flattening algorithm is somewhat similar to the conic
+	algorithm based the distance from the control point to the middle of
+	the chord.  The cubic distances, however, decrease less predictably
+	but are easy enough to calculate on each step.
+
+	The new algorithm produces slightly larger number of splits, which is
+	compensated by its simplicity.  The overall rendering performance is
+	improved by 1-2%.  The larger number of splits does not necessarily
+	result in higher quality, which stays comparable.
+
+	* src/smooth/ftgrays.c (gray_render_cubic): Replace the split
+	condition.
+
+2019-04-26  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Bithacks and cosmetics.
+
+	* src/smooth/ftgrays.c (gray_record_cell, gray_set_cell, gray_hline,
+	gray_render_conic, gray_convert_glyph_inner): Updated.
+
+2019-04-25  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Optimize Bézier bisections.
+
+	This change makes bisections faster by 20-30%. When inlined into
+	`gray_render_cubic', this makes the function faster by 10% and is
+	noticeable in the overall rendering performance.
+
+	* src/raster/ftraster.c (Split_Conic, Split_Cubic): Use shifts and
+	refactor.
+	* src/smooth/ftgrays.c (gray_split_conic, gray_split_cubic): Ditto.
+	* src/base/ftstroke.c (ft_conic_split, ft_cubic_split): Ditto.
+	* src/base/ftbbox.c (cubic_peak): Use shifts.
+
+2019-04-23  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttcmap.c (tt_cmap12_next): Remove dead code.
+
+	Found by clang 8.0's static analyzer and reported by Sender Ghost
+	<lightside@gmx.com>.
+
+2019-04-23  Werner Lemberg  <wl@gnu.org>
+
+	[base] Fix thinko in previous commit.
+
+	* src/base/ftbitmap.c (FT_Bitmap_Blend): Check final width, not
+	target pitch.
+
+	Problem reported by Sender Ghost <lightside@gmx.com>.
+
+2019-04-22  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftbitmap.c (FT_Bitmap_Blend): Check target pitch.
+
+	Problem reported by Sender Ghost <lightside@gmx.com>.
+
+2019-04-22  Werner Lemberg  <wl@gnu.org>
+
+	Fix return value of `FT_Set_Named_Instance' (#56186).
+
+	* src/truetype/ttgxvar.c (TT_Set_Named_Instance): Correctly handle
+	internal return value -1 of `TT_Set_Var_Design'.
+
+2019-04-18  Werner Lemberg  <wl@gnu.org>
+
+	[pcf] Fix handling of undefined glyph (#56067).
+
+	This commit fixes the changes from 2018-07-21, which broke charmap
+	iteration.  We now add the default character as a new glyph with
+	index 0, thus increasing the number of glyphs by one (as before).
+
+	* src/pcf/pcfread.c (pcf_get_metrics): Adjust to new artificial
+	glyph with index 0.
+	Limit number of elements to 65534.
+	(pcf_get_bitmaps): Ditto.
+	Unify two loops into one; this avoids allocation of an intermediate
+	array.
+	(pcf_get_encodings): Don't flip indices but copy glyph metrics of
+	default character to index 0.
+	Also handle invalid default character.
+
+	* docs/CHANGES: Updated.
+
+2019-04-15  Minmin Gong  <gongminmin@msn.com>
+
+	* CMakeLists.txt: Avoid rewriting of unchanged configuration files.
+
+	Reported as
+
+	  https://savannah.nongnu.org/patch/index.php?9755
+
+2019-04-15  JDG  <JonathanG@iQmetrix.com>
+
+	* src/tools/apinames.c (main): Fix error message.
+
+	Reported as
+
+	  https://savannah.nongnu.org/patch/?9796
+
+2019-04-11  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Fix segfault in direct mode (#56092).
+
+	* src/base/ftoutln.c (FT_Outline_Render): Set missing clip_box for
+	direct mode.
+	* src/smooth/ftgrays.c (gray_raster_render): Use it.
+
+2019-04-06  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttcmap.c (tt_get_glyph_name): Pacify compiler (#56061).
+
+	This is for Visual Studio 2019 on ARM.
+
+2019-04-06  Werner Lemberg  <wl@gnu.org>
+
+	For distribution, replace `.tar.bz2' with `.tar.xz' bundles.
+
+	* builds/toplevel.mk (build): Do it.
+
+	* README, docs/CHANGES, docs/release: Updated.
+
+2019-04-06  Antony Lee  <anntzer.lee@gmail.com>
+
+	Make `glyph_name' parameter to `FT_Get_Name_Index' a `const'.
+
+	* include/freetype/freetype.h (FT_Get_Name_Index),
+	include/freetype/internal/ftobjs.h (FT_Face_GetGlyphNameIndexFunc),
+	include/freetype/internal/services/svgldict.h
+	(FT_GlyphDict_NameIndexFunc), src/base/ftobjs.c (FT_Get_Name_Index),
+	src/cff/cffdrivr.c (cff_get_name_index), src/sfnt/sfdriver.c
+	(sfnt_get_name_index), src/type1/t1driver.c (t1_get_name_index),
+	src/type42/t42drivr.c (t42_get_name_index): Add `const' to second
+	argument.
+
+2019-03-31  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[cff] Fix boundary checks.
+
+	642bc7590c701c8cd35a9f60fa899cfa518b17ff introduced dynamically
+	allocated memory when parsing CFF files with the "old" engine.  Bounds
+	checks have never been updated, however, leading to pointless
+	comparisons of pointers in some cases.  This commit presents a
+	solution for bounds checks in the CFF module with an extended logic
+	for the "old" engine while staying as concise as possible for the
+	"new" one.
+
+	* src/cff/cffparse.h: Introduce the struct `CFF_T2_StringRec' and
+	the additional field `t2_strings' within `CFF_ParserRec'.
+
+	* src/cff/cffparse.c (cff_parser_within_limits): Move all boundary
+	checks into this new function and update the rest of `cffparse.c' to
+	use it.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=12137
+
+2019-03-20  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Fix Mongolian blue zone characters.
+
+	* src/autofit/afblue.dat: Use U+200D (ZERO-WIDTH JOINER) characters
+	to get medial forms for some Mongolian characters.
+	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+2019-03-19  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Add support for Mongolian script.
+
+	As a de-facto standard, layouts using this script are constructed
+	horizontally line by line, then the lines are rotated clockwise for
+	vertical display.
+
+	* src/autofit/afblue.dat: Add blue zone data for Mongolian.
+	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+	* src/autofit/afscript.h: Add Mongolian standard characters.
+
+	* src/autofit/afranges.c, src/autofit/afstyles.h: Add Mongolian
+	data.
+
+2019-03-15  Werner Lemberg  <wl@gnu.org>
+
+	* Version 2.10.0 released.
+	==========================
+
+
+	Tag sources with `VER-2-10-0'.
+
+	* docs/VERSION.TXT: Add entry for version 2.10.0.
+	* docs/CHANGES: Updated.
+
+	* README, Jamfile (RefDoc), src/base/ftver.rc,
+	builds/windows/vc2010/freetype.vcxproj,
+	builds/windows/vc2010/index.html,
+	builds/windows/visualc/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualc/index.html,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualce/freetype.vcproj,
+	builds/windows/visualce/index.html,
+	builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2005-ce/index.html,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/index.html: s/2.9.1/2.10.0/, s/291/2100/.
+
+	* include/freetype/freetype.h (FREETYPE_MINOR): Set to 10.
+	(FREETYPE_PATCH): Set to 0.
+
+	* builds/unix/configure.raw (version_info): Set to 23:0:17.
+	* CMakeLists.txt (VERSION_MINOR): Set to 10.
+	(VERSION_PATCH): Set to 0.
+
+	* builds/toplevel.mk (version, winversion): Since the minor version
+	number has two digits now, never omit the patch number.  We would
+	get ambiguous zip file names otherwise.
+	(dist): Remove remnants of `docmaker' tool.
+	(do-dist): Remove unused intermediate files.
+
+	* src/cff/cffparse.c (destrict_c2s_item): Guard function with
+	CFF_CONFIG_OPTION_OLD_ENGINE macro.
+
+2019-03-07  Andrei Alexeyev  <0x416b617269@gmail.com>
+            Werner Lemberg  <wl@gnu.org>
+
+	Fix invalid function pointer casts.
+
+	This change should allow Freetype to work on WASM/Emscripten without
+	needing `-s EMULATE_FUNCTION_POINTER_CASTS=1'.
+
+	* src/autofit/afdummy.c (af_dummy_hints_apply): Fix signature.
+
+	* src/cid/cidload.c (cid_parse_font_matrix, parse_fd_array,
+	parse_expansion_factor, parse_font_name): Return `void', not
+	`FT_Error'.
+
+	* include/freetype/internal/ftobjs.h (FT_CMap_CharVarIsDefaultFunc):
+	Fix signature.
+
+2019-03-05  Werner Lemberg  <wl@gnu.org>
+
+	[base] Handle numeric overflow (#55827).
+
+	* src/base/ftglyph.c (FT_Glyph_Get_CBox): Use `FT_PIX_CEIL_LONG'.
+
+2019-03-05  Sebastian Rasmussen  <sebras@gmail.com>
+
+	[psaux] Fix use of uninitialized memory (#55832).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString): The call to
+	`cf2_arrstack_setCount' may fail because the allocator ran out of
+	memory.  When this happens the stack is still written to before the
+	error condition is checked.  This means that FreeType writes outside
+	of allocated memory.  This commit moves the error check prior to the
+	stack assignment, hence the function now properly returns with an
+	error condition.
+
+2019-02-23  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftbitmap.c (FT_Bitmap_Blend): No fractional offsets.
+
+	The function only provided a framework without an actual
+	implementation, which this commit removes.
+
+2019-02-23  Werner Lemberg  <wl@gnu.org>
+
+	* src/tools/update-copyright-year: Insert `(C)'.
+
+2019-02-21  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[truetype] Mask numeric overflows.
+
+	* src/truetype/ttinterp.c (Move_CVT, Move_CVT_Stretched, Ins_MIRP):
+	Mask numeric overflows.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11681
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11734
+
+2019-02-21  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[psaux] Mask numeric overflow.
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings): Mask numeric
+	overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=13041
+
+2019-02-16  Wink Saville  <wink@saville.com>
+
+	* src/autofit/afwarp.h (af_warper_compute): Fix declaration.
+
+2019-02-02  Nikolaus Waxweiler  <madigens@gmail.com>
+
+	[truetype] Apply MVAR hasc, hdsc and hlgp metrics to current FT_Face metrics.
+
+	Instead of setting typo or win metrics as the new `FT_Face' metrics
+	indiscriminately, apply only typo deltas to the currently active
+	`FT_Face' metrics.  This prevents line height differences when the
+	default outlines were used as the regular face and instances for
+	everything else, for example.
+
+	* src/truetype/ttgxvar.c (tt_apply_mvar): Implement.
+
+2019-02-02  Nikolaus Waxweiler  <madigens@gmail.com>
+
+	[sfnt] Use typo metrics if OS/2 fsSelection USE_TYPO_METRICS bit is set.
+
+	If the `OS/2' table exists and `fsSelection' bit 7
+	(USE_TYPO_METRICS) is set, use the `sTypo*' set of values to compute
+	the `FT_Face's ascender, descender, and height.  Otherwise, fall
+	back to old behavior.
+
+	* src/sfnt/sfobjs.c (sfnt_load_face): Implement.
+
+2019-01-18  John Tytgat  <John.Tytgat@esko.com>
+
+	[sfnt] Handle TT fonts having two PostScript font names (#55471).
+
+	* src/sfnt/sfdriver.c (sfnt_get_name_id): Prefer English over any
+	other language found for PostScript font names.
+
+2019-01-08  Chris Liddell <chris.liddell@artifex.com>
+
+	[psaux] Fix closepath (#55414).
+
+	All of the Type 1 path building is done with code common to the
+	revised CFF engine, with the exception of closepath, which was still
+	calling ps_builder_close_contour(), thus previously cached segments
+	were not always written to the path, and glyph corruption, or even
+	invalid outlines were possible.
+
+	* src/psauc/psinterp.c (cf2_interpT2CharString) <cf2_cmdCLOSEPATH>:
+	Switch to calling `cf2_glyphpath_closeOpenPath'.
+
+2018-12-29  Werner Lemberg  <wl@gnu.org>
+
+	* src/autofit/aflatin2.c: Some fixes from `aflatin.c' (#55310).
+
+2018-12-25  Werner Lemberg  <wl@gnu.org>
+
+	* src/psaux/cffdecode.c (cff_operaor_seac): Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11915
+
+2018-12-12  Werner Lemberg  <wl@gnu.org>
+
+	[gxvalid] Fix compiler warnings.
+
+	* src/gxvalid/gxvjust.c (gxv_just_check_max_gid),
+	src/gxvalid/gxvmort.c (gxv_mort_coverage_validate): Use `FT_UNUSED'.
+
+2018-12-11  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgload.c (TT_Hint_Glyph): Remove useless test.
+
+	`control_len' only gets its value from `n_ins' (and vice versa),
+	which is always read as `unsigned short' and thus can't be larger
+	than 0xFFFF.
+
+2018-12-04  Werner Lemberg  <wl@gnu.org>
+
+	[bdf] Ignore data after `ENDFONT'.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10798
+
+	* src/bdf/bdflib.c (_bdf_parse_end): New function.
+	(_bdf_parse_glyphs): Switch to `_bdf_parse_end' after `ENDFONT' has
+	been encountered.
+
+2018-12-02  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/visualc/freetype.dsp: Dust off.
+
+2018-11-27  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/vc2010/freetype.vcxproj: Simplify.
+
+2018-11-27  Chris Liddell  <chris.liddell@artifex.com>
+
+	[type1,cff] Add FT_{Set,Get}_MM_WeightVector API calls.
+
+	For multiple master fonts, common usage (in Postscript) is to modify
+	the WeightVector of an existing font instance, this addition
+	supports that use.
+
+	* include/freetype/ftmm.h, src/base/ftmm.c (FT_Set_MM_WeightVector,
+	FT_Get_MM_WeightVector): New API functions.
+
+	* include/freetype/internalservices/svmm.h
+	(FT_Set_MM_WeightVector_Func, FT_Get_MM_WeightVector_Func): New
+	function types.
+	(MultiMasters): Add `set_mm_weightvector' and `get_mm_weightvector'
+	members.
+	(FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+
+	* src/cffcffdrivr.c (cff_set_mm_weightvector,
+	cff_get_mm_weightvector): New functions.
+	(cff_service_multi_masters): Register them.
+
+	* src/truetype/ttdriver.c (tt_service_gx_multi_masters): Updated.
+	This driver doesn't use the new interface.
+
+	* src/type1/t1load.c (T1_Set_MM_WeightVector,
+	T1_Get_MM_WeightVector): New functions.
+	* src/type1/t1driver.c (t1_service_multi_masters): Register them.
+	* src/type1/t1load.h: Updated.
+
+2018-11-27  Ben Wagner  <bungeman@google.com>
+
+	[cff] Fix compiler warning (#55105).
+
+	* src/cff/cffparse.c (cff_parser_run): Guard label only used if
+	CFF_CONFIG_OPTION_OLD_ENGINE is active.
+
+2018-11-27  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Fix numeric overflow (#55103).
+
+	* src/truetype/ttgload.c (compute_glyph_metrics): Use `SUB_LONG'.
+
+2018-11-25  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[builds] Belated DLL support with vc2002-vc2008.
+
+	The solution and project files should be automatically upgraded for
+	the approriate Visual C++ version.
+
+	* builds/windows/visualc/freetype.{sln,vcproj}: Major upgrades.
+	* builds/windows/visualc/index.html: Document the change.
+	* builds/windows/vc2005, builds/windows/vc2008: Removed as redundant.
+
+2018-11-22  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	* src/cff/cffparse.c: Please the compiler.
+
+2018-11-22  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[cff] Fix memory overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9869
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10869
+
+	* src/cff/cffparse.c (destruct_t2s_item, cff_parser_run): Store
+	evaluated T2 charstrings in separately allocated memory.
+
+2018-11-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/{visualc,vc2005,vc2008}/freetype.vcproj: Fix it.
+
+2018-11-10  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Placeholder only for library-enabled LCD filtering.
+
+	* src/smooth/ftsmooth.c (ft_smooth_init): Add disabled
+	`FT_Library_SetLcdFilter' call.
+
+2018-11-09  Young Xiao  <yangx92@hotmail.com>
+
+	[psaux] Add safety guard (#54985).
+
+	* src/psaux/psobjs.c (cff_builder_close_contour): Do it.
+
+2018-11-08  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/unix/configure.raw: Require `windows.h' for windres.
+
+2018-11-08  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[ftstroke] Fix unpredictable failures (#54986).
+
+	* src/base/ftstroke.c (ft_sroke_border_lineto): Fix lineto check.
+
+2018-11-08  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[ftstroke] Fix unpredictable failures (#54976).
+
+	* src/base/ftstroke.c (ft_sroke_border_close): Set the start tags.
+
+2018-11-07  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Fix VF check from 2018-09-12 (#54973).
+
+	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Use correct
+	offsets for estimates.
+
+2018-11-06  Werner Lemberg  <wl@gnu.org>
+
+	[pshinter] Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11242
+
+	* src/pshinter/pshrec.c (ps_dimension_add_t1stem): Implement it.
+
+2018-11-06  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Fix timeout in old CFF engine.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11260
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	<cff_op_sqrt> [CFF_CONFIG_OPTION_OLD_ENGINE]: Fix potential endless
+	loop.
+
+2018-11-04  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttgxvar.c: Use enum definitions.
+
+2018-11-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttgxvar.c (ft_var_apply_tuple): Adjust condition.
+
+2018-11-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttgxvar.c (ft_var_apply_tuple): Tracing tweaks.
+
+2018-11-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Revert due to specs: [truetype] Speed up variation IUP.
+
+2018-11-02  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttgxvar.c (ft_var_get_item_delta): Fixed logic.
+
+	Reported and tested by Behdad.
+
+2018-11-02  Shailesh Mistry  <shailesh.mistry@hotmail.co.uk>
+
+	[autofit] Prevent SEGV.
+
+	See
+
+	  https://bugs.ghostscript.com/show_bug.cgi?id=697545
+
+	for more details on how the bug was found.
+
+	* src/autofit/afloader.c (af_loader_load_glyph): Propagate error
+	code.
+
+2018-10-31  Alexei Podtelezhnikov <apodtele@gmail.com>
+
+	[truetype] Speed up variation IUP.
+
+	* src/truetype/ttgxvar.c (tt_delta_interpolate): Separate trivial
+	snapping to the same position from true interpolation.
+
+2018-10-31  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/type1/t1load.c (t1_set_mm_blend): Optimized.
+
+2018-10-31  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/truetype/ttgxvar.c (ft_var_get_item_delta): Optimized.
+
+2018-10-29  Werner Lemberg  <wl@gnu.org>
+
+	[base] Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11080
+
+	* src/base/ftoutln.c (FT_Outline_Get_Orientation): Use `MUL_LONG'.
+
+2018-10-29  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10988
+
+	* src/cff/cffparse.c (cff_parser_run)
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Use `NEG_LONG'.
+
+2018-10-27  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[sfnt] Make `head' timestamps unsigned.
+
+	It's been more than 2^31 seconds since 1904.
+
+	* include/freetype/tttables.h (TT_Header): Change field types.
+	* src/sfnt/ttload.c (tt_face_load_generic_header): Updated.
+
+2018-10-27  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Revert: Align FreeType with standard C memory management.
+
+2018-10-27  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Fix numeric overflow.
+
+	Triggered by
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=11157
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_blend>
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Fix integer overflow.
+
+2018-10-20  Werner Lemberg  <wl@gnu.org>
+
+	Avoid endless loop while tracing (#54858).
+
+	* src/type1/t1load.c (parse_buildchar): Guard tracing stuff with
+	FT_DEBUG_LEVEL_TRACE.
+
+2018-10-17  David Demelier  <markand@malikania.fr>
+
+	* CMakeLists.txt: Specify `RUNTIME DESTINATION'.
+
+	This is needed for DLL builds.
+
+2018-10-07  Werner Lemberg  <wl@gnu.org>
+
+	A missing Unicode cmap is not a fatal error.
+
+	This is a follow-up to the previous commit.
+
+	* src/cff/cffobjs.c (cff_face_init), src/sfnt/sfobjs.c
+	(sfnt_load_face), src/type1/t1objs.c (T1_Face_Init),
+	src/type42/t42objs.c (T42_Face_Init): Implement it.
+
+2018-10-07  Werner Lemberg  <wl@gnu.org>
+
+	Fix handling of FT_CONFIG_OPTION_ADOBE_GLYPH_LIST (#54794).
+
+	* src/cff/cffcmap.c (cff_cmap_unicode_init), src/psaux/t1cmap.c
+	(t1_cmap_unicode_init), src/sfnt/ttcmap.c (tt_cmap_unicode_init):
+	Check `unicodes_init' field.
+
+2018-10-03  Werner Lemberg  <wl@gnu.org>
+
+	[ftgrays] Fix typo in stand-alone mode (#54771).
+
+	* src/smooth/ftgrays.c (FT_THROW) [STANDALONE_ &&
+	FT_DEBUG_LEVEL_TRACE]: Fix call to `FT_ERR_CAT'.
+
+2018-10-02  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Fix segfault.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10768
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	<cff_op_callothersubr> [CFF_CONFIG_OPTION_OLD_ENGINE]: Check
+	argument.
+
+2018-10-02  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10740
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_roll>
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Use NEG_INT.
+
+2018-10-02  Werner Lemberg  <wl@gnu.org>
+
+	[pshinter] Handle numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10550
+
+	* src/pshinter/pshglob.c (psh_blues_snap_stem): Mask numeric
+	overflow.
+
+2018-09-27  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Align FreeType with standard C memory management.
+
+	* include/freetype/ftsystem.h: Include FT_TYPES_H.
+	(*FT_Alloc_Func, *FT_Realloc_Func): Use size_t for the size arguments.
+	* src/raster/ftmisc.h: Ditto.
+
+	* builds/amiga/src/base/ftsystem.c, builds/unix/ftsystem.c,
+	* builds/vms/ftsystem.c, src/base/ftsystem.c (ft_alloc, ft_realloc):
+	Use size_t for the size arguments.
+
+	* src/base/ftdbgmem.c (ft_mem_debug_alloc, ft_mem_debug_realloc): Use
+	FT_Offset, aka size_t, for the size arguments.
+
+2018-09-25  Werner Lemberg  <wl@gnu.org>
+
+	Fix handling of `FT_Bool'.
+
+	Before this commit we had code like
+
+	  (FT_Bool)( globals->glyph_styles[gindex] & 0x8000)
+
+	Since `FT_Bool' is defined to be an `unsigned char', the code
+	evaluated to something like
+
+	  (unsigned char)( 0x8532 & 0x8000)
+
+	which in turn expanded to
+
+	  (unsigned char)( 0x8000)
+
+	and finally yielded 0x00 – i.e., false – not as expected.
+
+	Problem reported and analyzed by Tony Smith <tony.smith@macro4.com>.
+
+	* include/freetype/fttypes.h (FT_BOOL): Add a comparison against
+	zero so that we always have a Boolean expression.
+
+	*/*: Replace castings to `FT_Bool' with calls to `FT_BOOL' where
+	possible.
+
+2018-09-23  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf] Speed up charmap access.
+
+	This makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times faster.
+
+	* src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Help binary search
+	with continuous prediction.
+
+2018-09-22  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bimap): Another tweak.
+
+	This one should be clearer. When the rounded monochrome bbox collapses
+	we add a pixel that covers most if not all original cbox.
+
+2018-09-21  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bimap): Further tweak.
+
+2018-09-21  Ben Wagner  <bungeman@google.com>
+
+	Improve auto-hinter handling of bitmap fonts (#54681).
+
+	For bitmap fonts, `FT_Load_Glyph' should either return an error or
+	not set the format to `FT_GLYPH_FORMAT_OUTLINE'.  However, in this
+	case `FT_Load_Glyph' calls into the auto-hinter which calls back
+	into `FT_Load_Glyph' with `FT_LOAD_NO_SCALE' in the flags, which
+	marks the glyph as `FT_GLYPH_FORMAT_OUTLINE' with an empty path
+	(even though it doesn't have any path).  It appears that the
+	auto-hinter should not be called when the face doesn't have
+	outlines.  The current test for using the auto-hinter in
+	`FT_Load_Glyph' checks whether the driver supports scalable
+	outlines, but not if the face supports scalable outlines.
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Directly check whether we have
+	scalable outlines.
+
+2018-09-21  Werner Lemberg  <wl@gnu.org>
+
+	[raster] Fix disappearing vertical lines (#54589).
+
+	* src/raster/ftraster.c (Vertical_Sweep_Span): Handle special case
+	where both left and right outline exactly pass pixel centers.
+
+2018-09-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bimap): Tiny rounding tweak.
+
+	This adds pixels in case a contour goes through the center
+	and they need to be turned on in the b/w rasterizer.
+
+2018-09-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[pcf] Replace charmap implementation.
+
+	PCF comes with charmap lookup table, aka PCF encodings.  Using it
+	directly makes FT_Get_Char_Index and FT_Get_Next_Char 4-5 times
+	faster than the original BDF-like binary searches.
+
+	* src/pcf/pcf.h (PCF_EncodingRec): Removed.
+	(PCF_FaceRec): Remove `nencodings' and `encodings'.
+	* src/pcf/pcfdrivr.c (pcf_cmap_char_{index,next}): Replaced.
+	* src/pcf/pcfread.c (pcf_get_encodings): Store data differently.
+
+2018-09-20  Werner Lemberg  <wl@gnu.org>
+
+	[base] Remove unused function `FT_GlyphLoader_CopyPoints'.
+
+	* include/freetype/internal/ftgloadr.h, src/base/ftgloadr.c
+	(FT_GlyphLoader_CopyPoints): Do it.
+
+2018-09-19  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[pcf] Prepare to replace charmap implementation.
+
+	* src/pcf/pcf.h (PCF_FaceRec): Updated to include...
+	(PCF_EncRec): ... this new structure to store charmap geometry.
+
+	* src/pcf/pcfread.c (pcf_get_encodings): Store charmap geometry.
+
+2018-09-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Remove unused fields.
+
+	* src/pcf.h (PCF_FaceRec): Remove `charmap' and `charmap_handle'.
+	* src/bdfdrvr.h (BDF_FaceRec): Ditto.
+	* src/winfonts/winfnt.h (FNT_FaceRec): Ditto.
+
+2018-09-17  Werner Lemberg  <wl@gnu.org>
+
+	[pshinter] Handle numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10396
+
+	* src/pshinter/pshglob.c: Include FT_INTERNAL_CALC_H.
+	(psh_blues_snap_stem): Mask numeric overflow.
+
+2018-09-13  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Some fixes for VF checks.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10317
+
+	* src/truetype/ttgxvar.c (ft_var_load_gvar): Properly exit memory
+	frame if we have invalid glyph variation data offsets.
+	(tt_face_vary_cvt): Protect against missing `tuplecoords' array.
+	Fix typo.
+
+2018-09-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Fix last commit.
+
+2018-09-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Check `result'.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10316
+
+2018-09-12  John Tytgat  <John.Tytgat@esko.com>
+
+	[sfnt] Better PS name handling (#54629).
+
+	* src/sfnt/sfdriver (IS_WIN, IS_APPLE): Omit language ID checks.
+	(get_win_string, get_apple_string): Return NULL when the PostScript
+	font name characters is not according to specification.
+	(get_win_string): Make trace output work if the high byte if
+	non-zero.
+	(sfnt_get_var_ps_name, sfnt_get_ps_name): Previously we preferred
+	Win PS name (when there is also an Apple PS name); change this into
+	a fallback to Apple PS name in case the Win PS name is invalid.
+
+2018-09-12  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Improve VF check.
+
+	Triggered by
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10255
+
+	* src/truetype/ttgxvar.c (ft_var_load_gvar): Use better limit check
+	for `tupleCount'.
+
+2018-09-12  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgxvar.c (ft_var_load_gvar): Check `glyphoffsets'.
+
+2018-09-10  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	* src/pshinter/pshrec.c (t2_hints_stems): Mask numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10215
+
+2018-09-09  Ben Wagner  <bungeman@google.com>
+
+	* builds/freetype.mk (refdoc-venv): Ensure python version (#54631).
+
+2018-09-07  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix assertion failure.
+
+	Triggered by
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10212
+
+	* src/truetype/ttgload.c (load_truetype_glyph): Reintroduce
+	`opened_frame' (removed in a change from 2018-08-26) to handle
+	deallocation of the second frame.
+
+2018-09-05  Werner Lemberg  <wl@gnu.org>
+
+	Synchronize `ftdebug.c' files.
+
+	* builds/amiga/src/base/ftdebug.c, builds/wince/ftdebug.c,
+	builds/windows/ftdebug.c: Synchronize with `src/base/ftdebug.c'.
+
+2018-09-05  Nikhil Ramakrishnan  <ramakrishnan.nikhil@gmail.com>
+
+	Add documentation guidelines file.
+
+	* docs/DOCGUIDE: New file.
+
+2018-09-04  Werner Lemberg  <wl@gnu.org>
+
+	* devel/ftoption.h: Synchronize with master `ftoption.h'.
+
+2018-09-03  Nikhil Ramakrishnan  <ramakrishnan.nikhil@gmail.com>
+
+	[docwriter] Don't break code snippets accross lines.
+
+	Reported as
+
+	  https://lists.nongnu.org/archive/html/freetype-devel/2018-08/msg00124.html
+
+	* docs/reference/markdown/stylesheets/extra.css (.md-typeset code):
+	Add rule `white-space'.
+
+2018-09-03  Werner Lemberg  <wl@gnu.org>
+
+	*/*: s/PSNames/psnames/.
+
+	Only tracing messages are affected.
+
+2018-09-03  Werner Lemberg  <wl@gnu.org>
+
+	[sfnt] Fix heap buffer overflow in CPAL handling.
+
+	* src/sfnt/ttcpal.c (tt_face_palette_set): Fix boundary test.
+	(tt_face_load_cpal): Updated.
+
+2018-09-01  Werner Lemberg  <wl@gnu.org>
+
+	Remove `FT_Outline_{New,Done}_Internal'.
+
+	These public API functions(!) were always undocumented and have
+	escaped all clean-up efforts until now.
+
+	* include/freetype/ftoutln.h (FT_Outline_New_Internal,
+	FT_Outline_Done_Internal): Removed.
+
+	* src/base/ftoutln.h (FT_Outline_New_Internal,
+	FT_Outline_Done_Internal): Merge into...
+	(FT_Outline_New, FT_Outline_Done): ... these functions.
+
+	* docs/README: Updated.
+
+2018-08-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Check glyph format.
+
+2018-08-31  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[errors] Refine the macro logic surrounding `FT_Error_String'.
+
+	* include/freetype/fterrors.h (FT_INCLUDE_ERR_PROTOS,
+	FT_ERR_PROTOS_DEFINED): Undefine `FT_INCLUDE_ERR_PROTOS' after
+	checking it and introduce a new macro that takes proper care of
+	multiple-inclusion protection.
+
+2018-08-31  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftdebug.c (FT_Throw): Restore missing `FT_UNUSED' calls.
+
+2018-08-31  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftdebug.c (FT_Throw): Reduce chattiness.
+
+2018-08-31  Werner Lemberg  <wl@gnu.org>
+
+	* src/autofit/afhints.c (af_glyph_hints_reload): Add initialization.
+
+2018-08-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Consolidate bitmap presetting and size assessment.
+
+	* include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
+	Change return type.
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Return the bitmap
+	size assessment.
+
+	* src/raster/ftrend1.c (ft_raster1_render): Use it to refuse the
+	rendering of enourmous or far-fetched outlines.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+
+2018-08-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Correct mono.
+
+2018-08-30  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[errors] Introduce a macro to control `FT_Error_String'.
+
+	* devel/ftoption.h (FT_CONFIG_OPTION_ERROR_STRINGS),
+	include/freetype/config/ftoption.h (FT_CONFIG_OPTION_ERROR_STRINGS):
+	New macro.
+
+2018-08-30  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	[errors] Introduce `FT_Error_String'.
+
+	* include/freetype/fterrors.h (FT_Error_String),
+	src/base/fterrors.c (FT_Error_String): Implement `FT_Error_String'.
+
+	* src/base/ftbase.c, src/base/Jamfile (_source),
+	src/base/rules.mk (BASE_SRC): Add `fterrors.c' to the build logic.
+
+	* src/base/ftdebug.c (FT_Throw): Use `FT_Error_String'.
+
+2018-08-30  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Trace `before' and `after' edges of strong points.
+
+	* src/autofit/afhints.h (AF_PointRec) [FT_DEBUG_AUTOFIT]: New arrays
+	`before' and `after'.
+
+	* src/autofit/afhints.c (af_get_strong_edge_index): New auxiliary
+	function.
+	(af_glyph_hints_dump_points): Trace `before' and `after' edges.
+	(af_glyph_hints_align_strong_points) [FT_DEBUG_AUTOFIT]: Set
+	`before' and `after' information.
+
+2018-08-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base] Overflow-resistant bitmap presetting.
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Implement it.
+
+2018-08-29  Armin Hasitzka  <prince.cherusker@gmail.com>
+
+	Fix numeric overflows.
+
+	* src/pshint/pshalgo.c (psh_hint_align, psh_hint_align_light,
+	psh_hint_table_find_strong_points): Fix numeric overflows.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10083
+
+2018-08-29  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix handling of `roll' op in old engine.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10080
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings) <cff_op_roll>
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Use modulo for loop count, as
+	documented in the specification.
+
+2018-08-26  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttobjs.c (tt_size_read_bytecode): Trace CVT values.
+
+2018-08-26  Nikhil Ramakrishnan  <ramakrishnan.nikhil@gmail.com>
+
+	* configure: Copy assets required by docwriter.
+
+	Copy directory `docs/reference/markdown' when FreeType is compiled in a
+	different directory.
+
+	Fixes `make refdoc' if builddir != srcdir.
+
+	Reported as
+
+	  https://lists.nongnu.org/archive/html/freetype-devel/2018-08/msg00083.html
+
+2018-08-26  Werner Lemberg  <wl@gnu.org>
+
+	* src/pshint/pshalgo.c (psh_hint_overlap): Fix numeric overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10057
+
+2018-08-26  Werner Lemberg  <wl@gnu.org>
+
+	Minor tracing adjustments.
+
+	* src/base/ftstream.c (FT_Stream_EnterFrame, FT_Stream_ExitFrame):
+	Trace.
+
+	* src/truetype/ttgload.c (TT_Access_Glyph_Frame): Remove tracing.
+
+2018-08-26  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Avoid nested frames.
+
+	Triggered by
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10054
+
+	* src/truetype/ttgload.c (load_truetype_glyph): Don't use variable
+	`opened_frame' to trace whether a frame must be closed at the end of
+	function: This fails because `TT_Vary_Apply_Glyph_Deltas' (which
+	gets called for space glyphs) uses a frame by itself.  Instead,
+	close the frame after loading the header, then use another frame for
+	the remaining part of the glyph later on.
+
+	Also avoid calling `tt_get_metrics' twice under some circumstances.
+
+2018-08-26  Werner Lemberg  <wl@gnu.org>
+
+	Various minor clean-ups.
+
+	* src/base/ftapi.c: Remove.  Unused.
+	* src/base/Jamfile (_sources): Updated.
+
+	* src/base/ftstream.c (FT_Stream_ReleaseFrame): Remove redundant
+	code.
+
+2018-08-25  Nikhil Ramakrishnan  <ramakrishnan.nikhil@gmail.com>
+
+	Convert documentation markup to Markdown.
+
+	It is the result of a GSoC 2018 project; this separate ChangeLog
+	commit covers the last four commits
+
+	  ae5d1a4cec37557f31aec270332cfe886a62f9a0
+	  53c69ce04faed3dcc68ca0f54cb8d703d8babf69
+	  195728d5ba38f34fb2c2c20807c01656f2f59b66
+	  c962db28ea59225f0105c03d907d4a9b71765687
+
+	* docs/reference/markdown/images/favico.ico,
+	docs/reference/markdown/javascripts/extra.js,
+	docs/reference/markdown/stylesheets/extra.css: New files.
+
+	* docs/reference/.gitignore, docs/reference/README: Updated.
+
+	* src/tools/docmaker/*: Removed.  It has been replaced with
+	`docwriter', a python package available at
+
+	  https://pypi.org/project/docwriter/
+
+	* Jamfile: Updated.
+	* builds/ansi/ansi-def.mk, builds/beos/beos-def.mk,
+	builds/dos/dos-def.mk, builds/os2/os2-def.mk (BIN),
+	builds/unix/unixddef.mk, builds/windows/win32-def.mk: New variable.
+
+	* builds/unix/configure.raw: Check for `python' and `pip'.
+	If not present, warn that `make refdoc' will fail.
+	* builds/unix/unix-def.in (PYTHON, PIP, BIN): New variables.
+
+	* builds/freetype.mk (PYTHON, PIP, VENV_NAME, VENV_DIR, ENV_PYTHON,
+	ENV_PIP): New variables.
+	(refdoc): Updated.
+	(refdoc-venv): New target.
+	(.PHONY): Updated.
+
+2018-08-23  Werner Lemberg  <wl@gnu.org>
+
+	Add macros for handling over-/underflowing `FT_Int64' values.
+
+	* include/freetype/internal/ftcalc.h (ADD_INT64, SUB_INT64,
+	MUL_INT64, DIV_INT64) [FT_LONG64]: New macros.
+
+	* src/base/ftcalc.c (ft_corner_orientation) [FT_LONG64]: Use
+	`SUB_INT64' and `MUL_INT64'.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=10028
+
+2018-08-22  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Improve legibility of `glyf' parsing.
+
+	* src/truetype/ttgload.c (ON_CURVE_POINT, X_SHORT_VECTOR,
+	Y_SHORT_VECTOR, REPEAT_FLAG, X_POSITIVE, SAME_X, Y_POSITIVE, SAME_Y,
+	OVERLAP_SIMPLE): New macros.
+	(TT_Load_Simple_Glyph): Use new macros to make code more readable.
+	Remove useless adjustment of `outline->tags' elements.
+
+2018-08-21  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttcpal.c (tt_face_load_cpal): Add missing safety check.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9981
+
+2018-08-18  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Avoid slow PS font parsing in case of error.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9955
+
+	* src/psaux/psobjs.c (ps_parser_to_bytes): Set `parser->cursor' even
+	in case of error to avoid potential re-scanning.
+
+2018-08-18  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix heap buffer overflow in old engine.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9967
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	<cff_op_blend> [CFF_CONFIG_OPTION_OLD_ENGINE]: `num_designs' must be
+	non-zero.
+
+2018-08-16  Young Xiao  <yangx92@hotmail.com>
+
+	* builds/mac/ftmac.c (parse_fond): Fix buffer overrun.
+
+	Reported as bug #54515, duplicate of #43540.
+
+2018-08-16  Werner Lemberg  <wl@gnu.org>
+
+	* builds/*/ftsystem.c (FT_COMPONENT): Updated also.
+
+2018-08-15  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf] Don't track duplicate encodings.
+
+	There is no harm except some umbiguity in broken fonts with duplicate
+	encodings.
+
+	* src/bdf/bdflib.c (_bdf_parse_glyphs): Remove duplicate tracking.
+	(_bdf_parse_t): Remove large `have' bitfield.
+
+2018-08-15  Werner Lemberg  <wl@gnu.org>
+
+	Don't use `trace_' prefix for FT_COMPONENT arguments.
+
+	* include/freetype/internal/ftdebug.h (FT_TRACE_COMP,
+	FT_TRACE_COMP_): New auxiliary macros to add `trace_' prefix.
+	(FT_TRACE): Use `FT_TRACE_COMP'.
+
+	*/* (FT_COMPONENT): Updated.
+
+2018-08-14  Werner Lemberg  <wl@gnu.org>
+
+	Use formatting string in FT_TRACEX calls for non-simple arguments.
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	<cff_op_hstem, cff_op_hintmask, cff_op_hlineto, cff_op_vhcurveto>:
+	Do it.
+
+	* src/psaux/pshints.c (cf2_hintmap_build): Ditto.
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+	cf2_cmdVSTEM, cf2_cmdHLINETO, cf2_cmdRRCURVETO, cf2_cmdCALLSUBR,
+	cf2_escHSTEM3, cf2_cmdHINTMASK, cf2_cmdHVCURVETO>: Ditto.
+
+	* src/truetype/ttinterp.c (TT_RunIns): Ditto.
+
+2018-08-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf] Remove unused fields.
+
+	* src/bdf/bdf.h (bdf_font_t): Remove `nmod', `umod', and `modified',
+	which were set but never used.
+	* src/bdf/bdflib.c (_bdf_parse_{glyphs,properties}, bdf_load_font):
+	Updated accordingly.
+
+2018-08-14  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix another segv in old engine.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9872
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Disallow invalid T1 opcodes in
+	dictionaries.
+
+2018-08-14  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix missing error handling.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9865
+
+	* src/psaux/cffparse.c (cff_parser_run)
+	[CFF_CONFIG_OPTION_OLD_ENGINE]: Don't ignore return value of
+	`parse_charstrings_old'.
+
+2018-08-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf] Remove unused overflow storage.
+
+	* src/bdf/bdf.h (bdf_glyphlist_t): Remove this type.
+	(bdf_font_t): Remove `overflow' field.
+	* src/bdf/bdflib.c (bdf_free_font): Remove `overflow' freeing.
+
+2018-08-14  Werner Lemberg  <wl@gnu.org>
+
+	[cff] Fix segv in old engine.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9864
+
+	* src/psaux/cffdecode.c (cff_decoder_parse_charstrings)
+	<cff_op_random> [CFF_CONFIG_OPTION_OLD_ENGINE]: Use top dict's
+	`random' field directly if parsing dictionaries.
+
+2018-08-13  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[bdf] Use unsigned types.
+
+	* src/bdf/bdf.h (bdf_glyph_t): Unsign `encoding'.
+	(bdf_font_t): Unsign `default_char'.
+	* src/bdf/bdfdrivr.h (BDF_encoding_el): Unsign `enc'.
+
+	* src/bdf/bdflib.c (_bdf_add_property, _bdf_parse_glyphs,
+	_bdf_parse_start): Updated accordingly.
+	* src/bdf/bdfdrivr.c (bdf_cmap_char_{index,next}): Ditto.
+
+2018-08-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/type42/t42parse.c (t42_parse_sfnts): One more format check.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9832
+
+2018-08-11  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftcalc.c (FT_Matrix_Check): Fix integer overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9811
+
+2018-08-10  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/sfnt/ttsbit.c (tt_sbit_decoder_load_compound): Follow specs.
+
 2018-08-10  Ben Wagner  <bungeman@google.com>
 
 	* src/sfnt/sfobjs.c (sfnt_done_face): Fix memory leak (#54435).
@@ -77,7 +1821,7 @@
 
 	* src/pcf/pcf.h (PCF_ParsePropertyRec): Use unsigned `name' and
 	`value'.
-	* src/pcf/pcfread.c (pcf_get_propeerties, pcf_load_font): Updated
+	* src/pcf/pcfread.c (pcf_get_properties, pcf_load_font): Updated
 	parsing code and handling of AVERAGE_WIDTH, POINT_SIZE, PIXEL_SIZE,
 	RESOLUTION_X and RESOLUTION_Y.
 
@@ -146,7 +1890,7 @@
 
 	[cid] Trace PostScript dictionaries.
 
-	* src/cid/cidload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H
+	* src/cid/cidload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
 	(cid_load_keyword, cid_parse_font_matrix, parse_fd_array,
 	parse_expansion_factor, cid_parse_dict): Add tracing calls.
 	(parse_font_name): New function to trace `/FontName' keywords in
@@ -181,7 +1925,7 @@
 	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9501
 
 	* src/smooth/ftgrays.c (ft_smooth_render_generic): Restore buffer
-	after each rendering in case of failure. 
+	after each rendering in case of failure.
 
 2018-07-28  Werner Lemberg  <wl@gnu.org>
 
@@ -269,7 +2013,7 @@
 
 	[type1] Check relationship between number of axes and designs.
 
-	For Multiple Masters fonts We don't support intermediate designs;
+	For Multiple Masters fonts we don't support intermediate designs;
 	this implies that
 
 	  number_of_designs == 2 ^^ number_of_axes
@@ -1357,2345 +3101,10 @@
 	src/smooth/ftspic.h, src/truetype/ttpic.c, src/truetype/ttpic.h:
 	Removed.
 
-2018-05-01  Werner Lemberg  <wl@gnu.org>
-
-	* Version 2.9.1 released.
-	=========================
-
-
-	Tag sources with `VER-2-9-1'.
-
-	* docs/VERSION.TXT: Add entry for version 2.9.1.
-	* docs/CHANGES: Updated.
-
-	* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
-	src/base/ftver.rc, builds/windows/vc2005/index.html,
-	builds/windows/vc2008/freetype.vcproj,
-	builds/windows/vc2008/index.html,
-	builds/windows/vc2010/freetype.vcxproj,
-	builds/windows/vc2010/index.html,
-	builds/windows/visualc/freetype.dsp,
-	builds/windows/visualc/freetype.vcproj,
-	builds/windows/visualc/index.html,
-	builds/windows/visualce/freetype.dsp,
-	builds/windows/visualce/freetype.vcproj,
-	builds/windows/visualce/index.html,
-	builds/wince/vc2005-ce/freetype.vcproj,
-	builds/wince/vc2005-ce/index.html,
-	builds/wince/vc2008-ce/freetype.vcproj,
-	builds/wince/vc2008-ce/index.html: s/2.9/2.9.1/, s/29/291/.
-
-	* include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
-
-	* builds/unix/configure.raw (version_info): Set to 22:1:16.
-	* CMakeLists.txt (VERSION_PATCH): Set to 1.
-
-	* include/freetype/ftgasp.h: Use FT_BEGIN_HEADER and FT_END_HEADER.
-
-2018-04-26  Werner Lemberg  <wl@gnu.org>
-
-	Another fix for handling invalid format 2 cmaps.
-
-	Sigh.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8003
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
-	an endless loop.
-
-2018-04-24  Ben Wagner  <bungeman@google.com>
-
-	[base] Avoid undefined behaviour in lcd filtering code (#53727).
-
-	* src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
-	Ensure `height > 0'.
-
-2018-04-22  Werner Lemberg  <wl@gnu.org>
-
-	* src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing.
-
-2018-04-22  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[base] Fix bitmap emboldening.
-
-	Bug introduced after release 2.8.
-
-	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): We use
-	`FT_QALLOC_MULT', which doesn't zero out the buffer.  Adjust the
-	bitmap copying code to take care of this fact.
-
-2018-04-22  Werner Lemberg  <wl@gnu.org>
-
-	Another fix for handling invalid format 2 cmaps.
-
-	The previous commit was incomplete.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7928
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
-	an endless loop.
-
-2018-04-19  Werner Lemberg  <wl@gnu.org
-
-	[autofit] Add support for Georgian Mtavruli characters.
-
-	This will be part of the forthcoming Unicode 11.0.
-
-	* src/autofit/afblue.dat: Add blue zone data for Mtavruli.
-	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
-
-	* src/autofit/afscript.h: Add Mtavruli standard character.
-
-2018-04-18  Werner Lemberg  <wl@gnu.org>
-
-	Fix handling of invalid format 2 cmaps.
-
-	The problem was introduced after the last release.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7828
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Avoid endless loop.
-
-2018-04-17  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow issues.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7739
-
-	* src/truetype/ttinterp.c (Ins_CEILING): Use FT_PIX_CEIL_LONG.
-
-2018-04-16  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow issues.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7718
-
-	* src/truetype/ttinterp.c (Ins_MIRP): Use ADD_LONG.
-
-2018-04-15  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Use `info' function of make 3.81.
-
-	* configure, docs/INSTALL, docs/INSTALL.CROSS, docs/INSTALL.GNU,
-	docs/INSTALL.UNIX, docs/MAKEPP: Bump make version requirements.
-
-	* builds/detect.mk (std_setup): Replace `echo' with `info'.
-	(dos_setup): Removed.
-	* builds/unix/install.mk, builds/modules.mk, builds/dos/detect.mk,
-	builds/windows/detect.mk, builds/os2/detect.mk: Updated.
-	* builds/newline: No longer needed.
-
-2018-04-15  Werner Lemberg  <wl@gnu.org>
-
-	[truetype]: Limit `SLOOP' bytecode argument to 16 bits.
-
-	This fixes
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7707
-
-	* src/truetype/ttinterp.c (Ins_SLOOP): Do it.
-
-2018-04-14  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow issues.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7652
-
-	* src/truetype/ttinterp.c (Ins_MDAP): Use SUB_LONG.
-
-2018-04-14  Werner Lemberg  <wl@gnu.org>
-
-	[autofit] Update to Unicode 11.0.0.
-
-	But no support new scripts (volunteers welcomed).
-
-	* src/autofit/afranges.c (af_arab_nonbase_uniranges,
-	af_beng_nonbase_uniranges, af_cakm_nonbase_uniranges,
-	af_deva_nonbase_uniranges, af_geor_uniranges,
-	af_gujr_nonbase_uniranges, af_mlym_nonbase_uniranges,
-	af_nkoo_nonbase_uniranges, af_telu_nonbase_uniranges,
-	af_hani_uniranges): Add new data.
-
-2018-04-10  Nikolaus Waxweiler  <madigens@gmail.com>
-
-	* CMakeLists.txt, builds/cmake/FindHarfBuzz.cmake: Extensive
-	modernization measures.
-
-	This brings up the minimum required CMake version to 2.8.12.
-
-	The installation paths follow the GNU defaults now, e.g. installing on a
-	64 bit host will place binaries into the lib64/ folder on e.g. Fedora.
-
-	Symbols are hidden by default (e.g. `-fvisibility=hidden' on GCC).
-
-	CMake will no longer look for a C++ compiler.
-
-	Library and .so version now match the Autotools build.
-
-	Comments in the build file and informational messages now use platform
-	agnostic example commands.
-
-	ftoption.h and ftconfig.h are written directly without a redundant `-new'
-	copy.
-
-	External dependencies are expressed as option()s and will turn up as such
-	in cmake-gui.
-
-	Internal: Properties such as dependencies and include directories are now
-	privately set on the freetype library instead of globally.
-
-	The CPack definitions have been cleaned up, the `make dist' has been
-	removed. Source packages generated with CPack don't contain Autotools
-	files and aren't used by the maintainers anyway.
-
-	On Windows, src/base/ftver.rc is compiled to decorate the library with
-	version and copyright information.
-
-	A pkg-config file is now generated and installed.
-
-2018-04-09  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow issues.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7453
-
-	* src/truetype/ttinterp.c (Round_Super, Round_Super_45): Use
-	ADD_LONG and SUB_LONG.
-
-2018-04-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[windows, wince] Clean up legacy project files.
-
-	* builds/wince/vc2005-ce/freetype.vcproj,
-	builds/wince/vc2008-ce/freetype.vcproj,
-	builds/windows/vc2005/freetype.vcproj,
-	builds/windows/vc2008/freetype.vcproj,
-	builds/windows/visualce/freetype.vcproj,
-	builds/windows/visualce/freetype.dsp,
-	builds/windows/visualc/freetype.vcproj,
-	builds/windows/visualc/freetype.dsp: Remove per-file compile flags.
-
-2018-04-04  Werner Lemberg  <wl@gnu.org>
-
-	[cff, type1] Sanitize `BlueFuzz' and `BlueShift'.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7371
-
-	* src/cff/cffload.c (cff_load_private_dict): Sanitize
-	`priv->blue_shift' and `priv->blue_fuzz' to avoid overflows later
-	on.
-
-	* src/type1/t1load.c (T1_Open_Face): Ditto.
-
-2018-04-04  Ben Wagner  <bungeman@google.com>
-
-	* src/truetype/ttobjs.c (trick_names): Add 3 tricky fonts (#53554),
-	`DFHei-Md-HK-BF', `DFKaiShu-Md-HK-BF' and `DFMing-Bd-HK-BF'.
-	(tt_check_trickyness_sfnt_ids): Add checksums for 3 tricky fonts
-	in above.
-
-2018-04-01  Werner Lemberg  <wl@gnu.org>
-
-	* builds/toplevel.mk (work): Use $(SEP).
-
-	This fixes the `make refdoc' using Cygwin: $(CAT) is `type' on this
-	platform, and this program only understands backslashes in paths.
-
-	Reported by Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>.
-
-2018-03-30  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Fix memory leak (only if tracing is on).
-
-	* src/truetype/ttgxvar.c (TT_Get_MM_Var) [FT_DEBUG_LEVEL_TRACE}: Fix
-	it.
-
-2018-03-23  Ben Wagner  <bungeman@google.com>
-
-	[sfnt] Correctly handle missing bitmaps in sbix format (#53404).
-
-	* src/sfnt/ttfsbit.c (tt_face_load_sbix_image): Fix return value.
-
-2018-03-23  Ben Wagner  <bungeman@google.com>
-
-	[truetype] Fix advance of empty glyphs in bitmap fonts (#53393).
-
-	* src/truetype/ttgload.c (TT_Load_Glyph): Apply scaling to metrics
-	for empty bitmaps.
-
-2018-03-22  Werner Lemberg  <wl@gnu.org>
-
-	Remove `ftlcdfil.c' and `ftfntfmt.c' from build files (#53415).
-
-	builds/amiga/makefile, builds/amiga/makefile.os4,
-	builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
-	builds/mac/FreeType.m68k_far.make.txt,
-	builds/mac/FreeType.ppc_carbon.make.txt,
-	builds/mac/FreeType.ppc_classic.make.txt,
-	builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
-	builds/wince/vc2008-ce/freetype.vcproj,
-	builds/windows/vc2005/freetype.vcproj,
-	builds/windows/vc2008/freetype.vcproj,
-	builds/windows/vc2010/freetype.vcxproj,
-	builds/windows/vc2010/freetype.vcxproj.filters,
-	builds/windows/visualc/freetype.dsp,
-	builds/windows/visualc/freetype.vcproj,
-	builds/windows/visualce/freetype.dsp,
-	builds/windows/visualce/freetype.vcproj, vms_make.com: Do it.
-
-2018-03-13  Werner Lemberg  <wl@gnu.org>
-
-	* src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric
-	overflow.
-
-2018-03-13  Werner Lemberg  <wl@gnu.org>
-
-	Fix cmap format 2 handling (#53320).
-
-	The patch introduced for #52646 was not correct.
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition.
-
-2018-03-10  Nikolaus Waxweiler  <madigens@gmail.com>
-
-	* CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05.
-
-2018-03-09  Chun-wei Fan  <fanc999@yahoo.com.tw>
-
-	* CMakeLists.txt [win32]: Allow MSVC DLL builds (#53287).
-
-	Do not limit DLL builds to MinGW, since we already have
-	`__declspec(dllexport)' directives in `ftconfig.h'.
-	Also suppress more warnings for POSIX functions.
-
-2018-03-08  Hugh McMaster  <hugh.mcmaster@outlook.com>
-
-	Make installation of `freetype-config' optional (#53093).
-
-	* builds/unix/configure.raw: Add option `--enable-freetype-config'
-	and set `INSTALL_FT2_CONFIG'.
-	* builds/unix/unix-def.in (INSTALL_FT2_CONFIG): Define.
-	* builds/unix/install.mk (install): Handle it.
-
-2018-03-05  Werner Lemberg  <wl@gnu.org>
-
-	Make `ftlcdfil.c' part of the `base' module.
-
-	`ftobjs.c' needs `ft_lcd_padding'.
-
-	Problem reported by duhuanpeng <548708880@qq.com>.
-
-	* modules.cfg (BASE_EXTENSIONS): Don't include `ftlcdfil.c'.
-
-	* src/base/ftbase.c: Include `ftlcdfil.c'.
-	* src/base/rules.mk (BASE_SRC): Add `ftlcdfil.c'.
-	* src/base/Jamfile (_sources): Adjusted.
-
-	* docs/INSTALL.ANY: Updated.
-
-2018-03-05  Werner Lemberg  <wl@gnu.org>
-
-	Make `ftfntfmt.c' part of the `base' module.
-
-	`ftobjs.c' needs `FT_Get_Font_Format'.
-
-	Problem reported by duhuanpeng <548708880@qq.com>.
-
-	* modules.cfg (BASE_EXTENSIONS): Don't include `ftfntfmt.c'.
-
-	* src/base/ftbase.c: Include `ftfntfmt.c'.
-	* src/base/rules.mk (BASE_SRC): Add `ftfntfmt.c'.
-	* src/base/Jamfile (_sources): Adjusted.
-
-	* docs/INSTALL.ANY: Updated.
-
-2018-03-01  Werner Lemberg  <wl@gnu.org>
-
-	* src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments.
-
-2018-02-23  Werner Lemberg  <wl@gnu.org>
-
-	* builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer.
-
-	Problem reported by Alan Coopersmith <alan.coopersmith@oracle.com>.
-
-2018-02-17  Werner Lemberg  <wl@gnu.org>
-
-	[sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154).
-
-2018-02-06  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow issues.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6027
-
-	* src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIAP, Ins_MIRP): Use
-	SUB_LONG; avoid FT_ABS.
-
-2018-02-04  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[unix] Use -fvisibility=hidden.
-
-	It is now widely recommended that ELF shared libraries hide symbols
-	except those with explicit __attribute__((visibility("default"))).
-	This is supported by all major compilers and should rather be an
-	option in libtool.
-
-	* builds/unix/configure.raw: Add -fvisibility=hidden to CFLAGS.
-	* builds/unix/ftconfig.in, builds/vms/ftconfig.h,
-	include/freetype/config/ftconfig.h (FT_EXPORT): Use visibility
-	attribute.
-
-2018-01-27  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Better protection against invalid VF data.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5739
-
-	Bug introduced in commit 08cd62deedefe217f2ea50e392923ce8b5bc7ac7.
-
-	* src/truetype/ttgxvar.c (TT_Set_Var_Design): Always initialize
-	`normalizedcoords'.
-
-2018-01-27  Werner Lemberg  <wl@gnu.org>
-
-	* src/truetype/ttinterp.c (Ins_GETVARIATION): Avoid NULL reference.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5736
-
-2018-01-27  Werner Lemberg  <wl@gnu.org>
-
-	* src/truetype/ttgxvar.c (tt_set_mm_blend): Minor.
-
-2018-01-27  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Better trace VF instances.
-
-	* src/truetype/ttgxvar.c (ft_var_to_normalized): Don't emit number
-	of coordinates.
-	(TT_Get_MM_Var): Trace instance indices names.
-	(TT_Set_Var_Design): Updated.
-
-2018-01-27  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Beautify tracing of VF axis records.
-
-	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Show axis records in a
-	table-like manner.
-
-2018-01-26  Ben Wagner  <bungeman@google.com>
-
-	[truetype] Fix multiple calls of `FT_Get_MM_Var' (#52955).
-
-	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Set
-	`face->blend->num_axis' in case we have to initialize the
-	`face->blend'.
-
-2018-01-23  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[apinames] Anonymous version map for GNU linker.
-
-	* src/tools/apinames.c (PROGRAM_VERSION): Set to 0.3.
-	(OutputFormat): Add `OUTPUT_GNU_VERMAP'.
-	(names_dump): Handle it.
-	(usage): Updated.
-	(main): Handle new command line flag `-wL'.
-
-2018-01-21  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[unix] Call libtool to clean up.
-
-	* builds/unix/install.mk (clean_project_unix, distclean_project_unix):
-	Use libtool.
-	* builds/freetype.mk: Minor.
-
-2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* src/base/ftver.rc: Fix mingw-w64 compilation.
-
-2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Enable VERSIONINFO resource for Cygwin/MinGW.
-
-	* builds/unix/configure.raw: Check for resource compiler.
-	* builds/unix/unix-cc.in: Conditionally set up resource compiler.
-	* builds/freetype.mk: Add conditional rule for `ftver.rc'.
-	* src/base/ftver.rc: Copyright notice and year update.
-
-2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Move VERSIONINFO resource.
-
-	* builds/windows/vc2010/freetype.vcxproj: Updated.
-	* builds/windows/ftver.rc: Move file from here...
-	* src/base/ftver.rc: ... to here.
-
-2018-01-12  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Expand dllexport/dllimport to Cygwin/MinGW.
-
-	* include/freetype/config/ftconfig.h: Respect DLL_EXPORT,
-	s/_MSC_VER/_WIN32/.
-	* builds/unix/ftconfig.in: Replicate here.
-	* builds/vms/ftconfig.h: Replicate here.
-
-2018-01-12  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Improve and document MSVC build.
-
-	* include/freetype/config/ftconfig.h: Guard dllexport/dllimport
-	attributes with _DLL and FT2_DLLIMPORT.
-	* builds/windows/vc2010/index.html: Update documentation.
-
-2018-01-10  Steve Robinson  <ssrobins@gmail.com>
-
-	* CMakeLists.txt [win32]: Suppress warnings for POSIX functions.
-
-2018-01-10  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Correctly handle Flex features (#52846).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO,
-	cf2_cmdHMOVETO>: Do not move if doing Flex.
-
-2018-01-09  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* builds/windows/vc2010/freetype.sln: Synchronize with the project.
-
-2018-01-08  Werner Lemberg  <wl@gnu.org>
-
-	* Version 2.9 released.
-	=======================
-
-
-	Tag sources with `VER-2-9'.
-
-	* docs/VERSION.TXT: Add entry for version 2.9.
-
-	* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
-	builds/windows/vc2005/index.html,
-	builds/windows/vc2008/freetype.vcproj,
-	builds/windows/vc2008/index.html,
-	builds/windows/vc2010/freetype.vcxproj,
-	builds/windows/vc2010/index.html,
-	builds/windows/visualc/freetype.dsp,
-	builds/windows/visualc/freetype.vcproj,
-	builds/windows/visualc/index.html,
-	builds/windows/visualce/freetype.dsp,
-	builds/windows/visualce/freetype.vcproj,
-	builds/windows/visualce/index.html,
-	builds/windows/ftver.rc,
-	builds/wince/vc2005-ce/freetype.vcproj,
-	builds/wince/vc2005-ce/index.html,
-	builds/wince/vc2008-ce/freetype.vcproj,
-	builds/wince/vc2008-ce/index.html: s/2.8.1/2.9/, s/281/29/.
-
-	* include/freetype/freetype.h (FREETYPE_MINOR): Set to 9.
-	(FREETYPE_PATCH): Set to 0.
-
-	* builds/unix/configure.raw (version_info): Set to 22:0:16.
-	* CMakeLists.txt (VERSION_PATCH): Set to 0.
-
-2018-01-07  Werner Lemberg  <wl@gnu.org>
-
-	Add check for librt, needed for `ftbench' (#52824).
-
-	* builds/unix/configure.raw (LIB_CLOCK_GETTIME): Define; this will
-	hold `-lrt' if necessary.
-
-	* builds/unix/unix-cc.in (LIB_CLOCK_GETTIME): New variable.
-
-2018-01-07  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Fix Type 1 glyphs with too many stem hints.
-
-	According to the CFF specification, charstrings can have up to 96 stem
-	hints. Due to hint replacement routines in Type 1 charstrings, some
-	glyphs are rejected by the Adobe engine, which implements the above
-	limit. This fix turns off hinting for such glyphs.
-
-	* src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
-	`cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
-	hinting.
-
-2018-01-06  Werner Lemberg  <wl@gnu.org>
-
-	Add `FT_Done_MM_Var'.
-
-	This is necessary in case the application's memory routines differ
-	from FreeType.  A typical example is a Python application on Windows
-	that calls FreeType compiled as a DLL via the `ctypes' interface.
-
-	* include/freetype/ftmm.h, src/base/ftmm.c (FT_Done_MM_Var): Declare
-	and define.
-
-	* docs/CHANGES: Updated.
-
-2018-01-03  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Round offsets of glyph components only if hinting is on.
-
-	* src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
-	it.
-
-2018-01-03  Werner Lemberg  <wl@gnu.org>
-
-	* src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.
-
-	This is a better fix than the previous commit, which is now
-	reverted.
-
-2018-01-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	Move internal LCD-related declarations.
-
-	* include/freetype/ftlcdfil.h (ft_lcd_padding, ft_lcd_filter_fir):
-	Move from here...
-	* include/freetype/internal/ftobjs.h: ... to here.
-
-2018-01-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
-	[_MSC_VER]: Limit Visual C++ attributes.
-
-2018-01-03  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Make blend/design coordinate round-tripping work.
-
-	Behdad reported that setting blend coordinates, then getting design
-	coordinates did incorrectly return the default instance's
-	coordinates.
-
-	* src/truetype/ttgxvar.c (tt_set_mm_blend): Fix it.
-
-2017-12-31  Werner Lemberg  <wl@gnu.org>
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix endless loop.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4838
-
-2017-12-31  Werner Lemberg  <wl@gnu.org>
-
-	Synchronize other Windows project files.
-
-	* builds/windows/*: Add missing files.
-
-2017-12-31  Werner Lemberg  <wl@gnu.org>
-
-	Update Visual C 2010 project files.
-
-	Problem reported by Hin-Tak.
-
-	* builds/windows/vc2010/freetype.vcxproj: Add files `ftbdf.c' and
-	`ftcid.c'.
-	Sort entries.
-	* builds/windows/vc2010/freetype.vcxproj.filter: Ditto.
-	Fix members of `FT_MODULE' group.
-
-2017-12-30  Werner Lemberg  <wl@gnu.org>
-
-	* builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file.
-
-2017-12-28  Werner Lemberg  <wl@gnu.org>
-
-	* builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file.
-
-	Reported by Nikolaus.
-
-2017-12-27  Werner Lemberg  <wl@gnu.org>
-
-	Fix compiler warnings.
-
-	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Make `pitch' and
-	`new_pitch' unsigned.
-
-	* src/base/ftpsprop.c: Include FT_INTERNAL_POSTSCRIPT_PROPS_H.
-
-2017-12-27  Werner Lemberg  <wl@gnu.org>
-
-	Fixes for `make multi'.
-
-	* include/freetype/internal/ftpsprop.h: Use `FT_BASE_CALLBACK'.
-	(ps_property_get): Harmonize declaration with corresponding
-	function typedef.
-
-	* include/freety[e/internal/fttrace.h: Add `trace_psprops'.
-
-	* src/base/ftpsprop.c: Include necessary header files.
-	(FT_COMPONENT): Define.
-	(ps_property_set): Tag with `FT_BASE_CALLBACK_DEF'.
-	(ps_property_get): Tag with `FT_BASE_CALLBACK_DEF'.
-	Harmonize declaration with corresponding function typedef.
-
-2017-12-27  Werner Lemberg  <wl@gnu.org>
-
-	Provide support for intra-module callback functions.
-
-	This is needed especially for `make multi' with C++.
-
-	* include/freetype/config/ftconfig.h (FT_BASE_CALLBACK,
-	FT_BASE_CALLBACK_DEF): New macros.
-
-2017-12-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	Move PostScript drivers' property handlers to `base'.
-
-	This reduces the amount of duplicated code across PostScript
-	drivers.
-
-	* src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c
-	({cff,cid,t1}_property_{get,set}): Moved to...
-	* include/freetype/internal/ftpsprop.h: ...this new file.
-	(ps_property_{get,set}): New functions to replace moved ones.
-
-	* src/base/ftpsprop.c: New file that implements above functions.
-
-	* include/freetype/internal/internal.h
-	(FT_INTERNAL_POSTSCRIPT_PROPS_H): New macro.
-
-	* src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c:
-	Updated.
-
-	* src/base/Jamfile, src/base/rules.mk (BASE_SRC), src/base/ftbase.c:
-	Updated.
-
-2017-12-20  Werner Lemberg  <wl@gnu.org>
-
-	Speed up FT_Set_Var_{Design,Blend}_Coordinates if curr == new.
-
-	We exit early if the current design or blend coordinates are
-	identical to the new ones.
-
-	* src/truetype/ttgxvar.c (tt_set_mm_blend, TT_Set_Var_Design):
-	Implement it, returning internal error code -1 if there will be no
-	variation change.
-
-	* src/type1/t1load.c (t1_set_mm_blend): Ditto.
-
-	* src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
-	FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Updated.
-
-2017-12-18  Werner Lemberg  <wl@gnu.org>
-
-	[sfnt] Fix charmap type 2 iterator (#52646).
-
-	The subsetted demo font of the report that exhibits the bug has a
-	very unusual type 2 cmap for Unicode(!): It contains only two
-	sub-headers, one for one-byte characters (covering the range 0x20 to
-	0xFA), and a second one for higher byte 0x01 (just for character
-	code U+0131).
-
-	Before this commit, the iterator wasn't able to correctly handle a
-	sub-header for higher byte 0x01.
-
-	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix character increment
-	for outer loop.
-
-2017-12-18  Matthias Clasen  <matthias.clasen@gmail.com>
-
-	[truetype] Fix clamping, minor tracing code beautification.
-
-	* src/truetype/ttgxvar.c (ft_var_to_normalized): Trace number of
-	design coordinates.
-	Use clamped value.
-
-2017-12-18  Werner Lemberg  <wl@gnu.org>
-
-	* src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff.
-
-2017-12-18  Werner Lemberg  <wl@gnu.org>
-
-	* src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688).
-
-2017-12-18  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Fix previous commit.
-
-	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Correctly handle
-	unhinted phantom points, which must be properly scaled.
-
-2017-12-18  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Don't apply HVAR and VVAR deltas twice (#52683).
-
-	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Always adjust
-	`pp1' to `pp4', except if we have an HVAR and/or VVAR table.
-
-	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Handle
-	alternative code branch identically w.r.t. presence of an HVAR
-	and/or VVAR table.
-
-2017-12-17  Jonathan Kew  <jfkthame@gmail.com>
-
-	[truetype] Correctly handle variation font phantom points (#52683).
-
-	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix phantom
-	point indices.
-
-2017-12-17  Jonathan Kew  <jfkthame@gmail.com>
-
-	Fix incorrect advance width scaling (#52683).
-
-	* src/base/ftadvance.c (FT_Get_Advances): Always respect the
-	FT_LOAD_NO_SCALE flag if present.
-
-2017-12-16  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* builds/windows/vc2010/freetype.vcxproj: AfterBuild copy.
-	* objs/.gitignore: Ignore almost everything.
-
-2017-12-11  Werner Lemberg  <wl@gnu.org>
-
-	Fix compiler warning (#52640).
-
-	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused
-	variable.
-
-2017-12-08  Azzuro  <azzuro@team-mediaportal.com>
-
-	* builds/windows/vc2010/freetype.vcxproj: Adjust output directory.
-
-	This allows builds with different configurations in parallel.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	Fix `make setup dos', second try (#52622).
-
-	* builds/detect.mk (dos_setup): Don't use literal `>' character at
-	all.  Mixing the different escaping rules from make, dos, and
-	windows is too fragile.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	[docmaker] Fix code section parsing.
-
-	Stuff like
-
-	  {
-	    <bla>
-	  }
-
-	confused the parser, which incorrectly treated `<bla>' as a markup
-	tag.
-
-	* src/tools/docmaker/content.py (ContentProcessor::process_content):
-	Apply `re_markup_tags' only outside of code sections.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	New `ftdriver.h' file, covering all driver modules.
-
-	This reduces redundancy and increases synergy; it also reduces the
-	number of header files.
-
-	* include/freetype/config/ftheader.h (FT_DRIVER_H): New macro.
-	(FT_AUTOHINTER_H, FT_CFF_DRIVER_H, FT_TRUETYPE_DRIVER_H,
-	FT_PCF_DRIVER_H, FT_TYPE1_DRIVER_H): Make them aliases to
-	FT_DRIVER_H.
-
-	* include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
-	include/freetype/ftpcfdrv.h, include/freetype/ftt1drv.h,
-	include/freetype/ftttdrv.h: Replaced with...
-	* include/freetype/ftdriver.h: ...this new file.
-	(FT_CFF_HINTING_ADOBE, FT_T1_HINTING_ADOBE): Renamed to...
-	(FT_HINTING_ADOBE): ... this new macro.
-	(FT_CFF_HINTING_FREETYPE, FT_T1_HINTING_FREETYPE): Renamed to...
-	(FT_HINTING_FREETYPE): ... this new macro.
-
-	* src/*/*: Updated accordingly.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	Move `ftdriver.h' to `ftdrv.h'.
-
-	* include/freetype/internal/ftdriver.h: Renamed to...
-	* include/freetype/internal/ftdrv.h: ... this name.
-
-	* include/freetype/internal/internal.h (FT_INTERNAL_DRIVER_H):
-	Updated.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	Fix access to uninitalized memory (#52613).
-
-	Also reported as
-
-	  https://bugs.chromium.org/p/chromium/issues/detail?id=791317
-
-	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): If increasing the
-	bitmap size needs a larger bitmap buffer, assure that the new memory
-	areas are initialized also.
-
-2017-12-08  Werner Lemberg  <wl@gnu.org>
-
-	Fix `make setup dos' (#52622).
-
-	* builds/detect.mk (dos_setup): Properly escape literal `>'
-	character.
-
-2017-12-07  Werner Lemberg  <wl@gnu.org>
-
-	Fix C++ compilation.
-
-	* src/psaux/psauxmod.h: Use FT_CALLBACK_TABLE macro where necessary.
-
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix warning.
-
-2017-12-07  Werner Lemberg  <wl@gnu.org>
-
-	Fix `make multi'.
-
-	* include/freetype/internal/fttrace.h: Remove unused tracing macros.
-	s/pshalgo2/pshalgo/.
-	Add `trace_cffdecode'.
-	* src/pshinter/pshalgo.c (FT_COMPONENT): Updated.
-
-	* src/cff/cffload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
-	* src/cff/cffobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H and
-	FT_SERVICE_CFF_TABLE_LOAD_H.
-
-	* src/cid/cidriver.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
-
-	* src/psaux/cffdecode.c: Include FT_FREETYPE_H and
-	FT_INTERNAL_DEBUG_H.
-	(FT_COMPONENT): Define.
-	* src/psaux/cffdecode.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
-	* src/psaux/psauxmod.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
-	Declare `cff_builder_funcs' and `ps_builder_funcs'.
-	* src/psaux/psft.c: Include `psobjs.h' and `cffdecode.h'.
-	* src/psaux/psobjs.c : Include `psauxmod.h'.
-
-2017-12-07  Werner Lemberg  <wl@gnu.org>
-
-	* include/freetype/config/ftheader.h: Some clean-up.
-
-	This commit removes documentation of deprecated macros and does some
-	minor streamlining.
-
-2017-12-06  Werner Lemberg  <wl@gnu.org>
-
-	* builds/symbian/bld.inf: Updated.
-
-2017-12-06  Werner Lemberg  <wl@gnu.org>
-
-	New header file `ftparams.h' that collects all parameter tags.
-
-	* include/freetype/config/ftheader.h (FT_PARAMETER_TAGS_H): New
-	macro.
-	(FT_TRUETYPE_UNPATENTED_H, FT_UNPATENTED_HINTING_H): Define it to
-	`ftparams.h'.
-
-	* include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
-	include/freetype/ftincrem.h, include/freetype/ftlcdfil.h,
-	include/freetype/ftsnames.h, include/freetype/ftt1drv.h: Include
-	FT_PARAMETER_TAGS_H.
-	Move FT_PARAM_TAG_XXX definitions to...
-	* include/freetype/ftparams.h: ...this new file.
-
-	* include/freetype/ttunpat.h: Remove.  No longer needed.
-
-2017-12-05  Werner Lemberg  <wl@gnu.org>
-
-	Improve tracing messages by using singular and plural forms.
-
-	* src/*/*.c: Implement it.
-
-2017-12-04  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Allow shared points in `cvar' table (#52532).
-
-	* src/truetype/ttgxvar.c (tt_face_vary_cvt): Implement it by copying
-	and adjusting the corresponding code from
-	`TT_Vary_Apply_Glyph_Deltas'.
-
-2017-11-28  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Improving tracing of composite glyphs.
-
-	* src/truetype/ttgload.c (TT_Load_Composite_Glyph)
-	[FT_DEBUG_LEVEL_TRACE]: Show composite glyph information.
-
-2017-11-27  Werner Lemberg  <wl@gnu.org>
-
-	[type1] Allow (again) `/Encoding' with >256 elements (#52464).
-
-	In version 2.6.1, this has been disallowed to better reject
-	malformed fonts; however, this restriction was too strong.  This
-	time, we only take the first 256 elements into account, since
-	encoding arrays are always accessed with a 8bit integer, according
-	to the PostScript Language Reference.
-
-	* src/type1/t1load.c (parse_encoding): Implement it.
-
-2017-11-27  Jan Alexander Steffens (heftig)  <jan.steffens@gmail.com>
-
-	Fix last commit (#52522).
-
-	* builds/freetype.mk: Set `FT_OPTION_H' and `FTOPTION_FLAG'
-	properly if we have `ftoption.h' in `BUILD_DIR'.
-
-2017-11-24  Werner Lemberg  <wl@gnu.org>
-
-	[unix] Install a massaged `ftoption.h' file (#51780).
-
-	* builds/unix/configure.raw (ftoption_set, ftoption_unset): New
-	auxiliary functions to construct...
-	(FTOPTION_H_SED): ... this new variable.
-	Apply it as a sed argument while copying `ftoption.h' to the
-	`builds/unix' directory (using `AC_CONFIG_FILES').
-	Simplify code of test that checks cpp's computation of bit length
-	(the test previously created an empty `ftoption.h' file and deleted
-	it immediately afterwards); without this change, it can happen on my
-	GNU/Linux box that `configure's execution of `config.status' doesn't
-	create `ftoption.h' (no idea why this happens).
-
-	* builds/unix/install.mk (install): Install
-	`builds/unix/ftoption.h'.
-
-	* builds/unix/unix-def.in (DISTCLEAN): Updated.
-
-	* builds/unix/.gitignore: Updated.
-
-2017-11-23  Tor Andersson  <tor.andersson@artifex.com>
-
-	Silence unused function warnings (#52465).
-
-	Some static function declarations cause unused function warnings if
-	certain config options are turned off via `ftoption.h'.
-
-	* src/base/ftbase.h, src/base/ftrfork.c, src/sfnt/ttbdf.h,
-	src/truetype/ttgxvar.h: Add #ifdef guards around these sections.
-
-2017-11-22  Ewald Hew  <ewaldhew@gmail.com>
-
-	* src/psaux/psft.c (cf2_setGlyphWidth): Check format before setting.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4377
-
-2017-11-22  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Fix CFF advance widths. (#52466)
-
-	Glyph advance widths were being written to the new `PS_Decoder' but not
-	saved to the underlying format specific decoder. This caused pure CFF
-	fonts to have bad advance width.
-
-	* include/freetype/internal/psaux.h (PS_Decoder): Change `glyph_width'
-	field to pointer.
-	Remove unused fields.
-	* src/psaux/psobjs.c (ps_decoder_init): Change `glyph_width' from copy
-	to reference.
-	Remove unused.
-	* src/psaux/psft.c (cf2_setGlyphWidth): Update code.
-
-2017-11-15  Vlad Tsyrklevich  <vtsyrklevich@google.com>
-
-	* include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type.
-
-2017-11-14  Nikolaus Waxweiler  <madigens@gmail.com>
-
-	Use Adobe hinting engine for `light' hinting of both CFF and Type 1.
-
-	Since Ewald Hew factored the Adobe hinting engine out of the CFF
-	driver code, we can now use it on Type 1 (and CID) font formats, as
-	both have the same hinting philosophy.
-
-	This change activates the Adobe hinter when in LIGHT mode, and
-	therefore always unless explicitly asking for the auto-hinter.  This
-	makes LIGHT behavior consistent with CFF fonts.  As of this commit,
-	the hinting engine table looks as follows.
-
-	             LIGHT  NORMAL
-	  -------------------------
-	   TrueType  Auto   v40
-	   CFF       Adobe  Adobe
-	   Type 1    Adobe  Adobe
-
-2017-11-10  Yuri Levchenko  <yuri_levchenko@boolat.com>
-
-	* CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option.
-
-2017-11-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* src/base/ftobjs.c (FT_Load_Glyph): Relocate condition.
-
-2017-11-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables.
-
-2017-11-03  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Fix PostScript interpreter rewinding in Type 1 mode. (#52251)
-
-	The interpreter in Type 1 mode rewinds the charstring after collecting
-	all hints for building the initial hintmap (commit d52dd7f). However,
-	some charstrings use `endchar' in a final subroutine call, rewinding to
-	the start of that subroutine, and only a small section of the actual
-	glyph is drawn.
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdENDCHAR>:
-	Ensure we are on the top level charstring before rewinding.
-
-2017-11-03  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
-
-	[truetype] Add more tricky fonts.
-
-	See the report by Yang Yinsen.
-	https://lists.gnu.org/archive/html/freetype-devel/2017-11/msg00000.html
-
-	* src/truetype/ttobjs.c (trick_names): Add `DFGothic-EB',
-	`DFGyoSho-Lt', `DFHSGothic-W5', `DFHSMincho-W3' and `DFHSMincho-W7'.
-	(tt_check_trickyness_sfnt_ids): Add checksums for DFGothic-EB,
-	DFGyoSho-Lt, DFHSGothic-W5, DFHSMincho-W3 and DFHSMincho-W7.  Also
-	add checksums for DLCLiShu and DLCHayBold which their family names
-	were already listed but their checksums were previously unknown.
-
-2017-11-01  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[smooth] Fix complex rendering at high ppem.
-
-	We used to split large glyphs into horizontal bands and continue
-	bisecting them still horizontally if that was not enough.  This is
-	guaranteed to fail when a single scanline cannot fit into the
-	rendering memory pool.  Now we bisect the bands vertically so that
-	the smallest unit is a column of the band height, which is guranteed
-	to fit into memory.
-
-	* src/smooth/ftgrays.c (gray_convert_glyph): Implement it.
-
-2017-10-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[smooth] Improve complex rendering at high ppem.
-
-	At large sizes almost but not exactly horizontal segments can quickly
-	drain the rendering pool. This patch at least avoids filling the pool
-	with trivial cells. Beyond this, we can only increase the pool size.
-
-	Reported, analyzed, and tested by Colin Fahey.
-
-	* src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
-
-2017-10-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[base] Improve tracing in FT_Load_Glyph, FT_*_Size.
-
-	* src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
-	function name, glyph index, and load flags.
-	(FT_Select_Metrics, FT_Request_Metrics): Remove all tracing.
-	(FT_Select_Size, FT_Request_Size): Improve tracing.
-
-2017-10-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[base] Improve tracing in FT_Render_Glyph.
-
-	* src/base/ftobjs.c (FT_Render_Glyph_Internal): Add total coverage
-	calculations and downgrade Netpbm dump to bitmap:7.
-
-2017-10-15  Ewald Hew  <ewaldhew@gmail.com>
-
-	[cff] Fix segfault on missing `psaux' (#52218)
-
-	* src/cff/cffload.c (cff_done_blend): Add a check for possible nullptr.
-
-	* modules.cfg: Update dependency list.
-
-2017-10-15  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[base, cff] Fix MSVC warnings.
-
-	* src/base/ftobjs.c (FT_New_Library): C4702: unreachable code.
-	(ft_glyphslot_preset_bitmap): C4244: possible loss of data.
-	* src/cff/cffload.c (cff_blend_doBlend): C4244: possible loss of data.
-	Turn `sum' into unsigned.
-
-2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[base] Netpbm image tracing.
-
-	* src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
-	(FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
-
-	* src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
-
-2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	* builds/windows/ftdebug.c (FT_Message): Print to stderr.
-	* builds/wince/ftdebug.c (FT_Message): Ditto.
-
-2017-10-14  Behdad Esfahbod  <behdad@behdad.org>
-
-	[afshaper] Delay creating `hb_set' objects until needed.
-
-	In runs on Noto Naskh Arabic, this results in 89 sets created
-	instead of 340 before.  Makes auto-hinter setup with HarfBuzz
-	enabled 20% to 30% faster.
-
-	* src/autofit/afshaper.c (af_shaper_get_coverage): Implement it.
-
-2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
-
-	[type1, cid] Add hinting engine switch.
-
-	Implement property service in `type1' and `cid' drivers to allow
-	switching between FreeType or Adobe hinting engine when both are
-	available.
-
-	* src/cid/cidriver.c (cid_property_{set,get}, cid_services),
-	src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
-	Properties service.
-
-	* src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
-	(T1_Driver_Init): Add default property values.
-
-2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
-
-	Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
-
-	This controls whether the old Type 1 engine gets compiled into FreeType.
-	It is disabled by default.
-
-	* devel/ftoption.h, include/freetype/config/ftoption.h
-	(T1_CONFIG_OPTION_OLD_ENGINE): New macro.
-
-	* include/freetype/internal/psaux.h (PS_Decoder): Remove unused field.
-	* include/freetype/internal/psaux.h, src/cid/cidgload.c
-	(cid_load_glyph), src/psaux/psauxmod.c, src/psaux/psobjs.c
-	(ps_builder_add_point), src/psaux/t1decode.c
-	(t1_lookup_glyph_by_stdcharcode, t1_decoder_parse_glyph,
-	t1operator_seac, t1_decoder_parse_charstrings), src/psaux/t1decode.h,
-	src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Surround
-	relevant code with macro.
-	Minor code changes.
-
-2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
-
-	Extract width parsing from Type 1 parser.
-
-	Duplicate the fast advance width calculations from the old parser.
-	This is to facilitate adding options for compiling out the old parser.
-
-	* src/psaux/t1decode.{c,h} (t1_decoder_parse_metrics): New function.
-	* include/freetype/internal/psaux.h (T1_Decoder_Funcs): New entry
-	`parse_metrics'.
-	* src/psaux/psauxmod.c: Set the new entry.
-
-	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String),
-	src/cid/cidgload.c (cid_load_glyph): Separate
-	conditional for selecting engine.
-
-2017-10-09  Werner Lemberg  <wl@gnu.org>
-
-	* src/base/ftoutln.c (FT_Outline_Translate): Fix integer overflow.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/chromium/issues/detail?id=772775
-
-2017-10-08  Werner Lemberg  <wl@gnu.org>
-
-	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Integer overflows.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3579
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	[sfnt] Adjust behaviour of PS font names for variation fonts.
-
-	* src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Use a named instance's
-	PS name only if no variation is applied.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	[cff, truetype] Adjust behaviour of named instances.
-
-	This commit completely separates the interaction between named
-	instances and variation functions.  In particular, resetting the
-	variation returns to the current named instance (if set) and not to
-	the base font.
-
-	As a side effect, variation functions no longer change the named
-	instance index.
-
-	* src/cff/cffobjs.c (cff_face_init): Use MM service's `set_instance'
-	function.
-	Also apply `MVAR' table to named instances.
-
-	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Add cast.
-	(tt_set_mm_blend): No longer check whether requested variation
-	coincides with a named instance.
-	(TT_Set_Var_Design): Use current named instance for default
-	coordinates.
-	* src/truetype/ttobjs.c (tt_face_init): Use `TT_Set_Named_Instance'.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	Make `FT_Set_Named_Instance' work.
-
-	* src/cff/cffdrivr.c (cff_set_instance): New function.
-	(cff_service_multi_masters): Register it.
-
-	* src/truetype/ttgxvar.c (TT_Set_Named_Instance): New function.
-	* src/truetype/ttgxvar.h: Updated.
-	* src/truetype/ttdriver.c (tt_service_gx_multi_masters): Register
-	it.
-
-	* src/type1/t1load.c (T1_Reset_MM_Blend): New function.
-	* src/type1/t1load.h: Updated.
-	* src/type1/t1driver.c (t1_service_multi_masters): Register it.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	Make `FT_FACE_FLAG_VARIATION' work.
-
-	* include/freetype/internal/tttypes.h (TT_Face): Remove
-	`is_default_instance'; this can be replaced with a combination of
-	`FT_IS_VARIATION' and `FT_IS_INSTANCE'.
-
-	* src/cff/cffdrivr.c (cff_get_advances): Updated.
-
-	* src/sfnt/sfdriver.c (sfnt_get_ps_name), src/sfnt/sfobjs.c
-	(sfnt_init_face): Updated.
-
-	* src/truetype/ttdriver.c (tt_get_advances), src/truetype/ttgload.c
-	(TT_Process_Simple_Glyph, load_truetype_glyph, IS_DEFAULT_INSTANCE),
-	src/truetype/ttgxvar.c (tt_set_mm_blend): Updated.
-	* src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
-	Handle `FT_FACE_FLAG_VARIATION'.
-
-	* src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Handle
-	`FT_FACE_FLAG_VARIATION'.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	New function `FT_Set_Named_Instance'.
-
-	No effect yet.
-
-	* src/base/ftmm.c (FT_Set_Named_Instance): New function.
-
-	* include/freetype/ftmm.h: Updated.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	Add macros for checking whether a font variation is active.
-
-	* include/freetype/freetype.h (FT_FACE_FLAG_VARIATION,
-	FT_IS_VARIATION): New macros.
-	No effect yet.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	Add framework for setting named instance in MM service.
-
-	* include/freetype/internal/services/svmm.h (FT_Set_Instance_Func):
-	New function typedef.
-	(MultiMasters): Add `set_instance' member.
-	(FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
-
-	* src/cff/cffdrivr.c (cff_service_multi_masters),
-	src/truetype/ttdriver (tt_service_gx_multi_masters),
-	src/type1/t1driver.c (t1_service_multi_masters): Updated.
-
-2017-10-07  Werner Lemberg  <wl@gnu.org>
-
-	[type1] Minor code shuffling.
-
-	* src/type1/t1load.c (T1_Set_MM_Blend): Make it a wrapper of...
-	(t1_set_mm_blend): ...this new function.
-	(T1_Set_MM_Design): Use `t1_set_mm_blend'.
-
-2017-10-05  Werner Lemberg  <wl@gnu.org>
-
-	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Fix integer
-	overflow.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3539
-
-2017-10-05  Werner Lemberg  <wl@gnu.org>
-
-	Fix compiler warnings.
-
-	* src/cff/cffdrivr.c (cff_ps_get_font_extra): Avoid code that relies
-	on numeric overflow.
-	Add cast.
-
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix variable
-	types, add cast.
-
-2017-10-04  John Tytgat  <John.Tytgat@esko.com>
-
-	[cff] Add support for `FSType'.
-
-	* include/freetype/internal/cfftypes.h (CFF_FontRec): Add
-	`font_extra' entry.
-
-	* src/cff/cffdrivr.c (cff_ps_get_font_extra): New function to
-	retrieve FSType info from the embedded PostScript data.
-	(cff_service_ps_info): Register function.
-
-	* src/cff/cffload.c (cff_font_done): Free `font_extra'.
-
-2017-09-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	Signedness fixes in bitmap presetting.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3514.
-
-	* src/raster/ftrend1.c (ft_raster1_render): Explicitly signed height.
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
-	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Explicitly unsigned
-	subtraction.
-
-2017-09-29  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	Bitmap metrics presetting [2/2].
-
-	* src/base/ftobjs.c (FT_Load_Glyph): Preset the bitmap metrics when
-	appropriate but `FT_Render_Glyph' is not called.
-	* include/freetype/freetype.h (FT_GlyphSlotRec): Document the change.
-
-2017-09-28  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[smooth, raster] Miscellaneous cleanups.
-
-	* src/raster/ftrend1.c (ft_raster1_render): Clean up the exit.
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Reduce
-	translations and clean up the exit.
-	(ft_smooth_render_lcd, ft_smooth_render_lcd): Remove unused `error'.
-
-2017-09-28  Ben Wagner  <bungeman@google.com>
-
-	[truetype] Really, really fix #52082.
-
-	* src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
-
-2017-09-28  Werner Lemberg  <wl@gnu.org>
-
-	* src/psaux/psintrp.c (cf2_doStems): Fix integer overflow.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3510
-
-2017-09-28  Ewald Hew  <ewaldhew@gmail.com>
-
-	* src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak.
-
-	Reported as
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489
-
-2017-09-28  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	Bitmap metrics presetting [1/2].
-
-	This mainly just extracts the code for presetting the bitmap metrics
-	from the monochrome, grayscale, and LCD renderers into a separate
-	function.
-
-	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): New function that
-	calculates prospective bitmap metrics for the given rendering mode.
-	* include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
-	Declare it.
-
-	* src/base/ftlcdfil.c (ft_lcd_padding): New helper function that adds
-	padding to CBox taking into account pecularities of LCD rendering.
-	* include/freetype/ftlcdfil.h (ft_lcd_padding): Declare it.
-
-	* src/raster/ftrend1.c (ft_raster1_render): Reworked to use
-	`ft_glyphslot_preset_bitmap'.
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
-	(ft_smooth_render_lcd, ft_smooth_render_lcd): The pixel_mode setting
-	is moved to `ft_glyphslot_preset_bitmap'.
-
-2017-09-28  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Fix compiler warning.
-
-	* src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing
-	code.
-
-2017-09-27  Werner Lemberg  <wl@gnu.org>
-
-	* src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
-
-2017-09-25  Werner Lemberg  <wl@gnu.org>
-
-	[psaux] Fix compiler warnings.
-
-	* src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant
-	test.
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString)
-	<cf2_escCALLOTHERSUBR>: Add casts.
-
-	* src/psaux/psobjs.c (ps_decoder_init): Add cast.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Minor fixes.
-
-	* include/freetype/internal/psaux.h, src/psaux/psobjs.{c,h}:
-	Rearrange `ps_builder_init' arguments to conventional order.
-
-	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Add a check and
-	notice for `SubFont' in Type 1 mode.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Move `psdecode' into `psobjs'.
-
-	As the former only contains a single procedure, move it into
-	`psobjs' for simplicity.  Also change the parameter order to the
-	conventional one.
-
-	* src/psaux/psdecode.c (ps_decoder_init): Moved to...
-	* src/psaux/psobjs.c: ...Here.
-	* src/psaux/psdecode.h, src/psaux/psobjs.h: Ditto.
-
-	* include/freetype/internal/psaux.h (PSAux_ServiceRec): Update
-	`ps_decoder_init' function signature.
-
-	* src/cff/cffgload.c, src/cid/cidgload.c, src/type1/t1gload.c:
-	Update calls.
-
-	* src/psaux/psaux.c, src/psaux/psauxmod.c: Update includes.
-
-	* src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRV_SRC):
-	Update file references.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Fix Type 1 hinting.
-
-	Type 1 hinting breaks sometimes when mid-charstring hints should
-	have been in the initial hintmap.  This fix adds a preprocessing
-	pass that reads all hints and builds the correct initial hintmap
-	first, before proceeding to build the glyph outline.
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString): New
-	`initial_map_ready' boolean flag.
-	Ignore outline commands and hint changes on first pass.
-	<cf2_cmdENDCHAR>: Add section to build hintmap and rewind.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Add tracing for hints.
-
-	* src/psaux/pshints.c (cf2_hintmap_dump): New function.
-	(cf2_hintmap_insertHint): Trace incoming and inserted hints.
-	(cf2_hintmap_build): Dump hintmap before and after hint adjustment.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Minor fixes.
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop
-	results.
-	s/font->decoder/decoder/ where necessary.
-	<cf2_cmdHSTEM, cf2_cmdVSTEM, cf2_escHSTEM3, cf2_escVSTEM3>: Use
-	offset parameter in `cf2_doStems' instead of doing correction for
-	left-sidebearing.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[cid] Use the new engine.
-
-	* src/cid/cidgload.c: Update includes.
-	(cid_load_glyph, cid_slot_load_glyph): Implement changes to glyph
-	loading code as with `type1' module.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[cid] Add Adobe engine configuration.
-
-	This is similar to what was done in the `type1' module.
-
-	* src/cid/cidriver.c (t1cid_driver_class): Update declaration.
-	* src/cid/cidobjs.c: Include FT_TYPE1_DRIVER_H.
-	(cid_driver_init): Update code.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Change subfont synthesis for CID fonts.
-
-	Change `t1_make_subfont' to take in the Private dict record as an
-	argument.  This is because Type 1 and CID font records in FreeType
-	have this in different places.
-
-	* src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
-	`FT_Face' so that CID is also accepted.
-	Take `PS_Private' as an argument and let caller figure out where the
-	Private dict actually is.
-	Update references.
-
-	* include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
-	declaration.
-
-	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
-	call.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[type1] Switch to Adobe engine.
-
-	* src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (seac).
-
-	This concludes the changes needed to add Type 1 support.
-
-	* src/psaux/psintrp.c: Update includes.
-	(cf2_interpT2CharString) <cf2_escSEAC>: Implement this similarly to
-	implied seac for CFF.
-
-	* src/psaux/t1decode.c (t1_lookup_glyph_by_stdcharcode_ps): New
-	function to look up the glyph index.
-
-	* src/psaux/psft.c (cf2_getT1SeacComponent,
-	cf2_freeT1SeacComponent): New functions to get the charstrings for
-	seac components.
-
-	* src/psaux/t1decode.h, src/psaux/psft.h: Update declarations.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (flex in callothersubr).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString)
-	<cf2_escCALLOTHERSUBR>: Fix Flex feature handling (OtherSubrs 0, 1,
-	2).
-	<cf2_cmdRMOVETO>: Do not actually move the `glyphPath' while doing
-	flex.  This is to avoid closing the current contour.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (callothersubr).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString)
-	<cf2_escCALLOTHERSUBR>: Copy code from
-	`t1_decoder_parse_charstrings' (in `t1decode.c').
-	OtherSubr 3 (change hints) should reset the hintmask, so that the
-	new hints are applied.
-	Fix function calls and stack access.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (pop).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString): Change how unhandled
-	OtherSubr results are stored.  Implement the PostScript stack using
-	an array.
-	<cf2_escPOP>: Ensure that the stack is not cleared after getting
-	`OtherSubr' results.
-	Fix stack access.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (callsubr).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
-	Type 1 mode.
-
-	* src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (div, four-byte numbers).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escDIV>: Add
-	Type 1 mode.  Type 1 requires large integers to be followed by
-	`div'; cf. `Adobe Type 1 Font Format', section 6.2.
-	<op == 255>: Push Type 1 four-byte numbers as `Int' always.  This is
-	to ensure `div' and `callsubr' get values they can use.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (hints).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
-	cf2_cmdVSTEM>: Add correction for left sidebearing in Type 1 mode.
-	Allow adding hints mid-charstring.
-	<cf2_escVSTEM3, cf2_escHSTEM3>: Translate into equivalent commands
-	for three normal stem hints.  This requires some recalculation of
-	stem positions.
-	Correction for left sidebearing.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (hsbw, sbw).
-
-	* src/psaux/psintrp.c (cf2_doStems): `hsbw' or `sbw' must be the
-	first operation in a Type 1 charstring.
-	(cf2_interpT2CharString): Remove unused variables.
-	<cf2_cmdHMOVETO, cf2_cmdVMOVETO, cf2_cmdRMOVETO>: `hsbw' or `sbw'
-	must be the first operation in a Type 1 charstring.
-	<cf2_cmdHSBW, cf2_escSBW>: Fix data access and add correction for
-	left sidebearing.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (setcurrentpoint).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString)
-	<cf2_escSETCURRENTPT>: Fix stack access.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Extend Adobe interpreter (closepath).
-
-	* src/psaux/psintrp.c (cf2_interpT2CharString) <c2f_cmdCLOSEPATH>:
-	Use the right builder function.  We can use the `haveWidth' boolean
-	already present, instead of implementing `parse_state'.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Add Type 1 operations to Adobe CFF interpreter.
-
-	The following Type 1 specific ops have been added (copied from
-	`t1decode'):
-
-	  closepath
-	  vstem3
-	  hstem3
-	  seac
-	  sbw
-	  callothersubr
-	  pop
-	  setcurrentpoint
-	  hsbw
-
-	The following require a Type 1 mode, because of differences in
-	specification:
-
-	  hstem
-	  vstem
-	  vmoveto
-	  callsubr
-	  div
-	  rmoveto
-	  hmoveto
-	  Numbers
-
-	The subsequent commits will implement these changes and adapt
-	accesses of data and objects to the new interpreter.
-
-	NOTE: Will not compile in the meantime!
-
-	* src/psaux/psintrp.c: Add opcodes to enum.
-	(cf2_interpT2CharString): Copy relevant code over from
-	`t1_decoder_parse_charstrings' (in `t1decode.c').
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[type1] Fixes for rendering.
-
-	The Type 1 advance width calculation passes null for glyph slot,
-	etc, which can cause null pointer access in the new interpreter.
-	Fall back to the old one for now.
-
-	Fix the large glyph retry code and ensure hinting and scaling flags
-	are set properly.
-
-	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add a
-	check for metrics_only.
-	Set the `force_scaling' flag.
-	(T1_Parse_Glyph): Updated.
-	(T1_Load_Glyph): Add `hinting' and `scaled' flags.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Add missing objects (2/2).
-
-	Synthesize a `SubFont' object for Type 1 fonts.  This is used in the
-	interpreter to access Private dict data, which are stored in
-	different places for Type 1 and CFF.  This allows the same data to
-	be used in either mode.
-
-	* src/psaux/psobjs.c (t1_make_subfont): New procedure to copy
-	required values to a dummy `CFF_SubFont' object.  This is similar to
-	`cff_make_private_dict'.
-	* src/psaux/psobjs.h: Add the new declaration.
-
-	* include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Ditto.
-	Add this to the PSAux Service for future use with CID fonts.
-
-	* src/type1/t1gload.c: Include FT_INTERNAL_CFF_TYPES_H.
-	(T1_Parse_Glyph_And_Get_Char_String): Add the call.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Add missing objects for Type 1 (1/2).
-
-	Move `CF2_Font' instance to `PS_Decoder'.  This is the context for
-	the interpreter and since it is currently stored in `CFF_Font', is
-	unavailable in Type 1 mode.
-
-	* include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): New
-	`cf2_instance' field.
-
-	* src/psaux/psdecode.c (ps_decoder_init): Copy `cf2_instance' to
-	`PS_Decoder'.
-
-	* src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
-
-	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Update accesses.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	Allow `type1' module to use the Adobe engine.
-
-	Add the callback and some conditionals to switch between the two
-	engines.
-
-	* include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Change
-	function declarations.
-	* src/psaux/psauxmod.c (T1_Decoder_FuncsRec): Register the
-	callbacks.
-
-	* src/psaux/psobjs.c (ps_builder_add_point): Add conditionals for
-	number conversion.
-
-	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add code
-	to choose which renderer to use.
-
-	* src/cid/cidgload.c (cid_load_glyph): Update call.
-	* src/base/ftobjs.c, src/psaux/psobjs.c, src/type1/t1gload.c: Update
-	includes.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[type1] Add Adobe engine configuration.
-
-	Use the previously changed PS_Driver in type1 module to store
-	hinting engine configuration.
-
-	* include/freetype/ftt1drv.h: New file.
-	Duplicate and rename config options from CFF.
-	* include/freetype/config/ftheader.h (FT_TYPE1_DRIVER_H): New macro.
-
-	* src/type1/t1driver.c (t1_driver_class): Update declaration.
-	* src/type1/t1objs.c: Include FT_TYPE1_DRIVER_H.
-	(T1_Driver_Init): Update code.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[cff] Move and rename `CFF_Driver'.
-
-	This is so that we can use the same hinting engine parameters for
-	Type 1.
-
-	* include/freetype/internal/cffotypes.h (CFF_Driver): Rename and
-	move to...
-	* include/freetype/internal/psaux.h (PS_Driver): ...here.
-
-	* src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffload.c,
-	src/cff/cffobjs.c, src/cff/cffobjs.h, src/psaux/psft.c,
-	src/psaux/psobjs.c: Update references.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, type1] Reorganize object fields.
-
-	Make some fields more generic, so that we can access them the same
-	way regardless of Type 1 or CFF.
-
-	* include/freetype/internal/psaux.h (PS_Builder): Change `TT_Face'
-	to `FT_Face'.
-	Remove unused fields.
-
-	* src/psaux/psft.c: Update all accesses of `PS_Builder.face'.
-	Add some asserts to guard against casting `T1_Face' as `TT_Face'.
-
-	* src/type1/t1objs.h (T1_GlyphSlot): Reorder fields to follow
-	`CFF_GlyphSlot', so that we can pretend they are the same in the
-	interpreter.
-
-	* src/psaux/psobjs.c (ps_builder_init, ps_builder_add_point):
-	Updated with above changes.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Prepare for Type 1 mode.
-
-	Add some checks for Type 1 data passing through.
-
-	* src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
-	* src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
-	code which is not applicable for Type 1.
-
-	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
-	`decoder->cff' in Type 1 mode.
-	Copy `is_t1' flag to `CF2_Font'.
-
-2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Use the new objects.
-
-	* include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Fix
-	switching between new and old engines.
-
-	* src/cff/cffgload.c, src/cff/cffparse.c: Update calls.
-
-	* src/psaux/psblues.c, src/psaux/psfont.c, src/psaux/psfont.h,
-	src/psaux/psft.c, src/psaux/psft.h, src/psaux/psintrp.c: Update all
-	to use new objects.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Objects for new interpreter (part 2).
-
-	Make the new objects copy over values.  They are essentially wrapper
-	types for the different decoders/builders.
-
-	* include/freetype/internal/psaux.h: Update declarations.
-	(PS_Builder): Add `is_t1' flag.
-	(PS_Decoder_{Get,Free}_Glyph_Callback): Renamed to...
-	(CFF_Decoder_{Get,Free}_Glyph_Callback: ... this.
-	(PS_Decoder): Updated.
-	Add `t1_parse_callback' member.
-	(PSAux_ServiceRec): Add `ps_decoder_init' member.
-
-	* src/psaux/psdecode.h, src/psaux/psobjs.h: Update declarations.
-
-	* src/psaux/psdecode.c, src/psaux/psobjs.c: Implement copy with two
-	modes.
-
-	* src/psaux/psauxmod.c: Add builder and decoder functions to `PSAux'
-	service.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Add objects for new interpreter.
-
-	Introduce `PS_Decoder' and `PS_Builder' which include all fields
-	from either Type 1 or CFF decoders/builders.
-
-	* include/freetype/internal/psaux.h (PS_Builder, PS_Decoder): New
-	structs.
-
-	* src/psaux/psobjs.c, src/psaux/psobjs.h: Add `PS_Builder'
-	functions.
-
-	* src/psaux/psdecode.c, src/psaux/psdecode.h: New files to hold
-	`PS_Decoder' initialization functions.
-
-	* src/psaux/psaux.c, src/psaux/Jamfile (_sources),
-	src/psaux/rules.mk (PSAUX_DRV_SRC): Updated.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Rename files.
-
-	Replace the `cf2' file name prefix with `ps' as the Adobe engine
-	will be used for both PostScript Types 1 and 2 (CFF) instead of just
-	CFF.
-
-	s/cf2/ps/ for all following.
-
-	* src/psaux/cf2*: Rename files.
-	* src/psaux/*: Update includes.
-
-	* src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRC_SRC,
-	PSAUX_DRV_H): Update file references.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux] Minor fix.
-
-	Use `MultiMasters' service in `psaux' instead of a call to `cff'.
-	The project builds if CFF_CONFIG_OPTION_OLD_ENGINE is not defined.
-
-	* src/psaux/cf2ft.c: Update includes.
-	(cf2_getNormalizedVector): Use `mm->get_var_blend' instead of
-	`cff_get_var_blend'.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Move `cff_random' into `psaux' service.
-
-	NOTE: Does not compile!
-
-	Minor fix to allow both `cff' and `psaux' to use `cff_random'.
-
-	* src/cff/cffload.c (cff_random): Move to...
-	* src/psaux/psobjs.c: Here.
-	* src/cff/cffload.h: Move corresponding declaration to
-	`src/psaux/psobjs.h'.
-
-	* include/freetype/internal/psaux.h (PSAux_ServiceRec): Register the
-	function here...
-	* src/psaux/psauxmod.c: And here.
-
-	* src/cff/cffload.c, src/psaux/cf2intrp.c: Update code.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[cff] Move struct declarations to `freetype/internal'.
-
-	NOTE: Does not compile!
-
-	This is so that the CFF functions moved to `psaux' can access the
-	same structs that they need.
-
-	* src/cff/cfftypes.h: Moved to...
-	* include/freetype/internal/cfftypes.h: ...Here.
-
-	* src/cff/cffobjs.h: Moved the struct declarations to...
-	* include/freetype/internal/cffotypes.h: ... this new file.
-
-	* include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
-	FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
-
-	* src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
-	src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
-	src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
-	include/freetype/internal/psaux.h,
-	include/freetype/internal/services/svcfftl.h: Update includes.
-
-	* src/cff/rules.mk (CFF_DRV_H): Updated.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Add new service for inter-module calls.
-
-	NOTE: Does not compile!
-
-	This is to allow CFF functions moved to `psaux' to call functions
-	declared in `src/cff/cffload.h'.
-
-	* include/freetype/internal/services/svcfftl.h: New file, setting up
-	a `CFFLoad' service.
-
-	* include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC10,
-	FT_DEFINE_SERVICEDESCREC): New macros.
-	(FT_SERVICE_CFF_TABLE_LOAD_H): New macro.
-
-	* src/cff/cffdrivr.c, src/cff/cffpic.h: Register the new service.
-
-	* src/cff/cfftypes.h (CFF_FontRec), src/psaux/cf2font.h
-	(CF2_FontRec): Add service interface.
-
-	* src/cff/cffobjs.c, src/psaux/cf2font.c, src/psaux/cf2ft.c,
-	src/psaux/cf2intrp.c, src/psaux/cffdecode.c: Use the new service.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Add callbacks for inter-module calls.
-
-	NOTE: Does not compile!
-
-	* include/freetype/internal/psaux.h: Add function pointer
-	declarations.
-
-	* src/psaux/cffdecode.c (cff_decoder_init): Update to take in
-	callbacks.
-	* src/psaux/cffdecode.h: Ditto.
-
-	* src/cff/cffgload.c (cff_compute_max_advance, cff_slot_load):
-	Update calls to pass in callbacks.
-	* src/psaux/cf2ft.c, src/psaux/cffdecode.c: Use them.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Create new `PSAux' service interface entries.
-
-	NOTE: Does not compile!
-
-	* include/freetype/internal/psaux.h: Include
-	FT_INTERNAL_TRUETYPE_TYPES_H.
-	(CFF_Builder_FuncsRec, CFF_Decocer_FuncsRec): New function tables.
-	(CFF_Builder): Updated.
-	Fix for forward declaration.
-	(PSAux_ServiceRec): New field `cff_decoder_funcs'.
-
-	* src/psaux/psauxmod.c (cff_builder_funcs, cff_decoder_funcs): New
-	function tables.
-	(PSAux_Interface): Updated.
-
-	* include/freetype/internal/tttypes.h (TT_FaceRec): Add `psaux'
-	service interface.
-
-	* src/cff/cffgload.c, src/cff/cffobjs.c, src/cff/cffparse.c: Update
-	function calls to use psaux service.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Move CFF builder components into `psaux' module.
-
-	NOTE: Does not compile!
-
-	* src/cff/cffgload.c
-	(cff_builder_{init,done,add_point,add_point1,add_contour,start_point,close_contour},
-	cff_check_points): Move to...
-	* src/psaux/psobjs.c: Here.
-
-	* src/cff/cffgload.h: Move corresponding declarations to
-	`src/psaux/psobjs.h'.
-
-	* src/cff/cffgload.h (CFF_Builder): Move struct declaration to...
-	* include/freetype/internal/psaux.h: Here.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Move CFF decoder components into `psaux' module.
-
-	NOTE: Does not compile!
-
-	* src/cff/cffgload.c (CFF_Operator,
-	CFF_COUNT_{CHECK_WIDTH,EXACT,CLEAR_STACK}, cff_argument_counts,
-	cff_operator_seac, cff_compute_bias,
-	cff_lookup_glyph_by_stdcharcode,
-	cff_decoder_{parse_charstrings,init,prepare}): Move to...
-	* src/psaux/cffdecode.c: This new file.
-
-	* src/cff/cffgload.h: Move corresponding declarations to...
-	* src/psaux/cffdecode.h: This new file.
-
-	* src/cff/cffgload.h (CFF_MAX_{OPERANDS,SUBRS_CALLS,TRANS_ELEMENTS},
-	CFF_Decoder_Zone, CFF_Decoder): Move declarations to...
-	* include/freetype/internal/psaux.h: Here.
-
-	* src/psaux/cf2ft.h: Update include.
-
-	* src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Update with
-	the new file.
-
-2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
-
-	[psaux, cff] Move Adobe's engine components into `psaux' module.
-
-	This is the first patch of a sequence to move the Type 2 charstring
-	processing capability from the `cff' module to the `psaux' module.
-
-	NOTE: Does not compile!
-
-	* src/cff/cf2*: Move these files to...
-	* src/psaux/cf2*: Here.
-
-	* src/cff/Jamfile (_sources), src/cff/rules.mk (CFF_DRV_SRC,
-	CFF_DRV_H), src/cff/cff.c, src/cff/cffgload.c: Remove file
-	references.
-
-	* src/psaux/Jamfile (_sources), src/psaux/rules.mk, src/psaux/psaux.c
-	(PSAUX_DRV_SRC, PSAUX_DRV_H): Add file references.
-
-2017-09-24  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	Tweak per-face LCD filtering controls.
-
-	Thing are simpler with a NULL-function pointer.
-
-	* include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
-	pointer to the filter function.
-	(FT_LibraryRec): Remove unused `lcd_filter'.
-	(FT_Bitmap_LcdFilterFunc, ft_lcd_filter_fir):  Move from here...
-	* include/freetype/ftlcdfil.h (FT_Bitmap_LcdFilterFunc,
-	ft_lcd_filter_fir): ... to here.
-
-	* src/base/ftobjs.c (ft_open_face_internal): NULL-initialize the
-	per-face filter.
-	(FT_Face_Properties): Set it.
-	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Simplify.
-
-	* src/base/ftlcdfil.c (ft_lcd_filter_fir, FT_Libary_SetLcdFilter):
-	Minor.
-
-2017-09-24  Jonathan Kew  <jfkthame@gmail.com>
-
-	[sfnt] Fix `premultiply_data' (#52092).
-
-	* src/sfnt/pngshim.c (premultiply_data): Don't use vector extension
-	if we have less than 16 bytes of data.
-
-2017-09-24  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Fix handling of ValueRecords.
-
-	For GPOS pair positioning format 1 the description of ValueRecords
-	in the OpenType specification (1.8.2, from today) is wrong – the
-	offset has to be taken from the parent structure; in this case the
-	`PairSet' table.
-
-	* src/otvalid/otvgpos.c (otv_PairSet_validate): Set `extra3'.
-	(otv_PairPos_validate): Adjust.
-
-2017-09-23  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
-
-	* src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
-	(otv_GPOS_validate): Implement it.
-
-2017-09-23  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Update common table handling to OpenType 1.8.2.
-
-	* src/otvalid/otvcommn.c (otv_Device_validate): Handle
-	VariationIndex subtable.
-	(otv_Lookup_validate): Handle MarkFilteringSet.
-
-2017-09-23  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Windows-style DLL versioning.
-
-	* build/windows/ftver.rc: New VERSIONINFO resource.
-	* build/windows/vc2010/freetype.vcxproj: Further improvements.
-
-2017-09-23  Ben Wagner  <bungeman@google.com>
-
-	[truetype] Really fix #52082.
-
-	* src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
-
-2017-09-23  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Handle `GDEF' v1.2 and v1.3 tables.
-
-	No validation of variation stuff yet.
-
-	* src/otvalid/otvgdef.c (otv_MarkGlyphSets_validate): New function.
-	(otv_GDEF_validate): Implement it.
-
-2017-09-22  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Handle `BASE' v1.1 table.
-
-	No validation of variation stuff yet.
-
-	* src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
-
-2017-09-22  Werner Lemberg  <wl@gnu.org>
-
-	[otvalid] Macros for 32bit offset support.
-
-	* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
-	OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
-
-2017-09-21  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Simplify Visual C++ 2010 project.
-
-	* build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded
-	configurations and tweak.
-
-2017-09-21  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflow (#52082).
-
-	* src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS.
-
-2017-09-21  Werner Lemberg  <wl@gnu.org>
-
-	[sfnt] Fix postscript name for default instance of variation fonts.
-
-	Problem reported by Behdad.
-
-	* src/sfnt/sfdriver.c (sfnt_get_ps_name): Test
-	`is_default_instance'.
-
-2017-09-21  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Fix `mmvar' array pointers, part 2.
-
-	The previous commit was incomplete.
-
-	* src/truetype/ttgxvar.c: Properly initialize sub-array offsets for
-	`master' also.
-
-2017-09-21  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Fix `mmvar' array pointers.
-
-	Without this change, clang's AddressSanitizer reports many runtime
-	errors due to misaligned addresses.
-
-	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Use multiples of pointer
-	size for sub-array offsets into `mmvar'.
-
-2017-09-20  Werner Lemberg  <wl@gnu.org>
-
-	[truetype] Integer overflows.
-
-	Changes triggered by
-
-	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3429
-
-	* src/truetype/ttinterp.c (Ins_SHPIX, Ins_DELTAP): Use NEG_LONG.
-	(Ins_MIAP): Use SUB_LONG.
-
-2017-09-19  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Fix DLL builds in Visual C++ project.
-
-	* build/windows/vc2010/freetype.vcxproj: Use DynamicLibrary in Debug
-	and Release configurations.
-	* include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
-	[_DLL]: Use Visual C++ extensions.
-
-2017-09-19  John Tytgat  <John.Tytgat@esko.com>
-
-	[cff] Fix family name logic of pure CFF fontdata (#52056).
-
-	1. If `FamilyName' is present in the CFF font, use this for
-	   FT_Face's `family_name'.
-	2. Otherwise, use the face name and chop off any subset prefix.
-	3. If at this point FT_Face's `family_name' is set, use this
-	   together with the full name to determine the style.
-	4. Otherwise, use `CIDFontName' as FT_Face's `family_name'.
-	5. If we don't have a valid style, use "Regular".
-
-	Previously, FT_Face's `family_name' entry for pure CFF fontdata
-	nearly always was the fontname itself, instead of the `FamilyName'
-	entry in the CFF font (assuming there is one).
-
-	* src/cff/cffobjs.c (cff_face_init) [pure_cff]: Implement it.
-
-2017-09-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
-
-	[build] Declutter Visual C++ 2010-2017 project.
-
-	* build/windows/vc2010/freetype.vcxproj: Use MaxSpeed (/02)
-	optimization for Release configuration throughout the project.
-
 
 ----------------------------------------------------------------------------
 
-Copyright 2017-2018 by
+Copyright (C) 2018-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.20 b/ChangeLog.20
index 63e3116..a589e13 100644
--- a/ChangeLog.20
+++ b/ChangeLog.20
@@ -1688,7 +1688,7 @@
 
 2001-04-03  Werner Lemberg  <wl@gnu.org>
 
-	* src/*/Jamfile: Slight changes	to make files more cryptic.
+	* src/*/Jamfile: Slight changes to make files more cryptic.
 
 2001-04-03  Werner Lemberg  <wl@gnu.org>
 
@@ -1928,7 +1928,7 @@
 
 	* src/autohint/ahtypes.h (AH_Hinter): Add elements
 	`disable_horz_edges', `disable_vert_edges'.
-	* src/autohint/ahhint.c	(ah_hint_edges_3, ah_hinter_hint_edges): Use
+	* src/autohint/ahhint.c (ah_hint_edges_3, ah_hinter_hint_edges): Use
 	them (and remove static variables with the same names).
 	* src/pcf/pcfutil.c (BitOrderInvert): Add `const'.
 	* docs/glnames.py: Updated to latest pstables.h changes.
@@ -2109,7 +2109,7 @@
 	* include/freetype/internal/t2types.h: This file was merged with
 	cfftypes.h and is no longer necessary.
 
-	* include/freetype/internal/t2errors.h:	Renamed to cfferrs.h.
+	* include/freetype/internal/t2errors.h: Renamed to cfferrs.h.
 
 	* src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c,
 	src/cff/cffdrivr.c, src/cff/cff.c, src/cff/cffload.c,
@@ -2184,11 +2184,11 @@
 
 2000-12-24  Tom Kacvinsky  <tkacvins@freetype.org>
 
-	* src/cff/t2gload.c (T2_Load_Glyph): Added code	so that the font
+	* src/cff/t2gload.c (T2_Load_Glyph): Added code so that the font
 	transform is applied.
 
 	* src/cff/cffparse.c (cff_parse_font_matrix): Added code so that
-	the font matrix numbers	are scaled by 1/(matrix->yy).  Also, the
+	the font matrix numbers are scaled by 1/(matrix->yy).  Also, the
 	offset vector now contains integer values instead of 16.16 fixed
 	numbers.
 
@@ -2597,7 +2597,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.21 b/ChangeLog.21
index 1adc817..ea889ee 100644
--- a/ChangeLog.21
+++ b/ChangeLog.21
@@ -553,7 +553,7 @@
 	(T1_New_Parser): Use it to check font header before allocating
 	anything on the heap.
 
-	* src/type42/t42parse.c	(t42_parser_init): Modify functions to check
+	* src/type42/t42parse.c (t42_parser_init): Modify functions to check
 	the font header before allocating anything on the heap.
 
 	* include/freetype/internal/ftmemory.h (FT_ARRAY_MAX,
@@ -9422,7 +9422,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.22 b/ChangeLog.22
index 4517c32..feaab86 100644
--- a/ChangeLog.22
+++ b/ChangeLog.22
@@ -2821,7 +2821,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.23 b/ChangeLog.23
index 85253f1..f137252 100644
--- a/ChangeLog.23
+++ b/ChangeLog.23
@@ -750,7 +750,7 @@
 2009-07-31  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
 
 	sfnt: Cast a charcode to 32-bit in cmap format 14 parser.
-	
+
 	* src/sfnt/ttcmap.c (tt_cmap14_char_var_index,
 	tt_cmap14_char_var_isdefault, tt_cmap14_char_variants,
 	tt_cmap14_variant_chars): Correct mismatches from
@@ -1344,24 +1344,24 @@
 	* include/freetype/config/ftstdlib.h: Introduce
 	FT_INT_MIN, to use in signed integer overflow in
 	16-bit and 64-bit platforms.
-	
+
 	* include/freetype/internal/fttrace.h: Add a tracer
 	to ftsynth.c.
-	
+
 	* src/base/ftbitmap.c (FT_Bitmap_Embolden): Check
 	invalid strength causing integer overflow on 16-bit
 	platform.
-	
+
 	* src/base/ftcalc.c (ft_corner_orientation): Change
 	the internal calculation from FT_Int to FT_Long, to
 	avoid an overflow on 16-bit platforms.  The caller of
 	this function should use only the sign of result,
 	so the cast to FT_Int is acceptable.
-	
+
 	* src/base/ftsynth.c: Introduce a tracer for synth module.
 	(FT_GlyphSlot_Embolden): Check invalid strength causing
 	integer overflow on 16-bit platform.
-	
+
 	* src/bdf/bdfdrivr.c (BDF_Face_Init): The glyph index
 	in FT2 API is typed as FT_UInt, although BDF driver
 	can handle unsigned long glyph index internally.  To
@@ -1372,25 +1372,25 @@
 	glyph pitch internally.  To avoid integer overflow on
 	16-bit platform, too large glyph pitch should not be
 	returned.
-	
+
 	* src/pfr/pfrsbit.c (pfr_slot_load_bitmap): The glyph
 	pitch in FT2 is typed as FT_UInt, although PFR font
 	format can include huge bitmap glyph with 24-bit pitch
 	(however, a glyph spends 16.7 pixel, it's not realistic).
 	To avoid integer overflow on 16-bit platform, huge
 	bitmap glyph should be excluded.
-	
+
 	* src/smooth/ftgrays.c (gray_hline): As FT_Span.x is
 	truncated to fit its type (16-bit short), FT_Span.y
 	should be truncated to fit its type (FT_Int).
-	
+
 	* src/cff/cffdrivr.c (cff_get_ros): CFF specification
 	defines the supplement in ROS as a real number.
 	Truncate it to fit public FT2 API.
-	
+
 	* src/cff/cffparse.c (cff_parse_cid_ros): Warn the
 	supplement if it is truncated or rounded in cff_get_ros().
-	
+
 	* src/cff/cfftypes.h: Change the type of internal variable
 	`supplement' from FT_Long to FT_ULong to fit the signedness
 	to the type in public API.
@@ -1653,7 +1653,7 @@
 
 	cff: Fix some data types mismatching with their sources.
 
-	* src/cff/cffgload.c (cff_slot_load): The types of	
+	* src/cff/cffgload.c (cff_slot_load): The types of
 	`top_upm' and `sub_upm' are matched with
 	CFF_FontRecDict->units_per_em.
 
@@ -1811,56 +1811,56 @@
 	gxv_XClassTable_lookupval_validate,
 	gxv_XClassTable_lookupfmt4_transit):
 	Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-	
+
 	* src/gxvalid/gxvbsln.c (gxv_bsln_LookupValue_validate,
 	gxv_bsln_LookupFmt4_transit): Ditto.
-	
+
 	* src/gxvalid/gxvjust.c
 	(gxv_just_pcTable_LookupValue_entry_validate,
 	gxv_just_classTable_entry_validate,
 	gxv_just_wdcTable_LookupValue_validate): Ditto.
-	
+
 	* src/gxvalid/gxvkern.c
 	(gxv_kern_subtable_fmt1_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvlcar.c (gxv_lcar_LookupValue_validate,
 	gxv_lcar_LookupFmt4_transit): Ditto.
-	
+
 	* src/gxvalid/gxvopbd.c (gxv_opbd_LookupValue_validate,
 	gxv_opbd_LookupFmt4_transit): Ditto.
-	
+
 	* src/gxvalid/gxvprop.c (gxv_prop_LookupValue_validate,
 	gxv_prop_LookupFmt4_transit): Ditto.
-	
+
 	* src/gxvalid/gxvmort4.c
 	(gxv_mort_subtable_type4_lookupval_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmort0.c
 	(gxv_mort_subtable_type0_entry_validate): Update
 	from GXV_StateTable_GlyphOffsetDesc
 	to GXV_StateTable_GlyphOffsetCPtr.
-	
+
 	* src/gxvalid/gxvmort1.c
 	(gxv_mort_subtable_type1_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmort2.c
 	(gxv_mort_subtable_type2_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmort5.c
 	(gxv_mort_subtable_type5_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmorx2.c
 	(gxv_morx_subtable_type2_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmorx5.c
 	(gxv_morx_subtable_type5_entry_validate): Ditto.
-	
+
 	* src/gxvalid/gxvmorx1.c
 	(gxv_morx_subtable_type1_entry_validate): Ditto.
 	(gxv_morx_subtable_type1_LookupValue_validate,
 	gxv_morx_subtable_type1_LookupFmt4_transit):
 	Update from GXV_LookupValueDesc to GXV_LookupValueCPtr.
-	
+
 	* src/gxvalid/gxvmorx0.c
 	(gxv_morx_subtable_type0_entry_validate): Update
 	from GXV_XStateTable_GlyphOffsetDesc
@@ -1976,7 +1976,7 @@
 	Prevent the overflows by a glyph with too many points or contours.
 	The bug is reported by Boris Letocha <b.letocha@gmc.net>.  See
 	https://lists.gnu.org/archive/html/freetype-devel/2009-06/msg00031.html
-	https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html	
+	https://lists.gnu.org/archive/html/freetype-devel/2009-07/msg00002.html
 
 	* include/freetype/ftimage.h (FT_OUTLINE_CONTOURS_MAX,
 	FT_OUTLINE_POINTS_MAX): New macros to declare the maximum
@@ -6948,7 +6948,7 @@
 
 2006-11-25  David Turner  <david@freetype.org>
 
-	* src/autofit/afhints.c	(af_glyph_hints_dump_points,
+	* src/autofit/afhints.c (af_glyph_hints_dump_points,
 	af_glyph_hints_dump_segments, af_glyph_hints_dumpedges) [!AF_DEBUG]:
 	Add stubs to link the `ftgrid' test program when debugging is
 	disabled in the auto-hinter.
@@ -7932,7 +7932,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.24 b/ChangeLog.24
index 44abc40..52004db 100644
--- a/ChangeLog.24
+++ b/ChangeLog.24
@@ -231,7 +231,7 @@
 
 	* src/base/md5.c, src/base/md5.h: New files, taken from
 
-	  http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
+	  https://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
 
 	* include/freetype/internal/fttrace.h: Add `bitmap'.
 
@@ -774,7 +774,7 @@
 
 	(Font_Class): Rename to...
 	(SPH_Font_Class): This.  Decorate with `const' where appropriate.
-	
+
 	* src/truetype/ttsubpix.h (scale_test_tweak, sph_test_tweak):
 	Decorate arguments with `const' where appropriate.
 
@@ -1271,7 +1271,7 @@
 	* src/autofit/afcjk.c (af_cjk_metrics_init_widths): Use it.
 	(af_cjk_metrics_init, af_cjk_script_class): Updated.
 
-	* src/autofit/afindic.c	(af_indic_metrics_init,
+	* src/autofit/afindic.c (af_indic_metrics_init,
 	af_indic_script_class): Updated.
 
 	* src/autofit/afcjk.h, src/autofit/aflatin.h: Updated.
@@ -6344,7 +6344,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2010-2018 by
+Copyright (C) 2010-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.25 b/ChangeLog.25
index 59cf2bf..c4a3c53 100644
--- a/ChangeLog.25
+++ b/ChangeLog.25
@@ -3405,7 +3405,7 @@
 
 	The canonical URL to get updates for this file is
 
-	  http://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
+	  https://cvsweb.openwall.com/cgi/cvsweb.cgi/Owl/packages/popa3d/popa3d/md5/
 
 	as the author told me in private communication.
 
@@ -4837,7 +4837,7 @@
 
 	Apply fixes for cppcheck nitpicks.
 
-	  http://cppcheck.sourceforge.net/
+	  https://cppcheck.sourceforge.net/
 
 	The call was (from the top-level of the FreeType tree):
 
@@ -5145,7 +5145,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2013-2018 by
+Copyright (C) 2013-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.26 b/ChangeLog.26
index ea89e91..5e0911c 100644
--- a/ChangeLog.26
+++ b/ChangeLog.26
@@ -2393,7 +2393,7 @@
 
 	* src/autofit/afcjk.c (af_cjk_get_standard_width): New function.
 	(af_cjk_writing_system_class): Updated.
-	* src/autofit/afdummy.c	(af_dummy_writing_system_class): Updated.
+	* src/autofit/afdummy.c (af_dummy_writing_system_class): Updated.
 	* src/autofit/afindic.c (af_cjk_get_standard_width): New function.
 	(af_indic_writing_system_class): Updated.
 	* src/autofit/aflatin.c (af_latin_get_standard_width): New function.
@@ -5695,7 +5695,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2015-2018 by
+Copyright (C) 2015-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.27 b/ChangeLog.27
index 0e82b2f..e9d1ec1 100644
--- a/ChangeLog.27
+++ b/ChangeLog.27
@@ -2090,7 +2090,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2016-2018 by
+Copyright (C) 2016-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.28 b/ChangeLog.28
index ca1ff38..c288bb9 100644
--- a/ChangeLog.28
+++ b/ChangeLog.28
@@ -2489,8 +2489,8 @@
 
 	Based on ideas taken from
 
-	  http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
-	  http://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
+	  https://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-multilib.patch
+	  https://pkgs.fedoraproject.org/cgit/rpms/freetype.git/tree/freetype-2.5.3-freetype-config-prefix.patch
 
 	* builds/unix/freetype-config.in: Rewritten.  Use `pkg-config' to
 	set output variables if program is available.
@@ -3120,7 +3120,7 @@
 
 ----------------------------------------------------------------------------
 
-Copyright 2016-2018 by
+Copyright (C) 2016-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This file is part of the FreeType project, and may only be used, modified,
diff --git a/ChangeLog.29 b/ChangeLog.29
new file mode 100644
index 0000000..2134071
--- /dev/null
+++ b/ChangeLog.29
@@ -0,0 +1,2352 @@
+2018-05-01  Werner Lemberg  <wl@gnu.org>
+
+	* Version 2.9.1 released.
+	=========================
+
+
+	Tag sources with `VER-2-9-1'.
+
+	* docs/VERSION.TXT: Add entry for version 2.9.1.
+	* docs/CHANGES: Updated.
+
+	* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
+	src/base/ftver.rc, builds/windows/vc2005/index.html,
+	builds/windows/vc2008/freetype.vcproj,
+	builds/windows/vc2008/index.html,
+	builds/windows/vc2010/freetype.vcxproj,
+	builds/windows/vc2010/index.html,
+	builds/windows/visualc/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualc/index.html,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualce/freetype.vcproj,
+	builds/windows/visualce/index.html,
+	builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2005-ce/index.html,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/index.html: s/2.9/2.9.1/, s/29/291/.
+
+	* include/freetype/freetype.h (FREETYPE_PATCH): Set to 1.
+
+	* builds/unix/configure.raw (version_info): Set to 22:1:16.
+	* CMakeLists.txt (VERSION_PATCH): Set to 1.
+
+	* include/freetype/ftgasp.h: Use FT_BEGIN_HEADER and FT_END_HEADER.
+
+2018-04-26  Werner Lemberg  <wl@gnu.org>
+
+	Another fix for handling invalid format 2 cmaps.
+
+	Sigh.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8003
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+	an endless loop.
+
+2018-04-24  Ben Wagner  <bungeman@google.com>
+
+	[base] Avoid undefined behaviour in lcd filtering code (#53727).
+
+	* src/base/ftlcdfil.c (ft_lcd_filter_fir, _ft_lcd_filter_legacy):
+	Ensure `height > 0'.
+
+2018-04-22  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftoutln.c (FT_Outline_Decompose): Improve error tracing.
+
+2018-04-22  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base] Fix bitmap emboldening.
+
+	Bug introduced after release 2.8.
+
+	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): We use
+	`FT_QALLOC_MULT', which doesn't zero out the buffer.  Adjust the
+	bitmap copying code to take care of this fact.
+
+2018-04-22  Werner Lemberg  <wl@gnu.org>
+
+	Another fix for handling invalid format 2 cmaps.
+
+	The previous commit was incomplete.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7928
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition to avoid
+	an endless loop.
+
+2018-04-19  Werner Lemberg  <wl@gnu.org
+
+	[autofit] Add support for Georgian Mtavruli characters.
+
+	This will be part of the forthcoming Unicode 11.0.
+
+	* src/autofit/afblue.dat: Add blue zone data for Mtavruli.
+	* src/autofit/afblue.c, src/autofit/afblue.h: Regenerated.
+
+	* src/autofit/afscript.h: Add Mtavruli standard character.
+
+2018-04-18  Werner Lemberg  <wl@gnu.org>
+
+	Fix handling of invalid format 2 cmaps.
+
+	The problem was introduced after the last release.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7828
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Avoid endless loop.
+
+2018-04-17  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow issues.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7739
+
+	* src/truetype/ttinterp.c (Ins_CEILING): Use FT_PIX_CEIL_LONG.
+
+2018-04-16  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow issues.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7718
+
+	* src/truetype/ttinterp.c (Ins_MIRP): Use ADD_LONG.
+
+2018-04-15  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Use `info' function of make 3.81.
+
+	* configure, docs/INSTALL, docs/INSTALL.CROSS, docs/INSTALL.GNU,
+	docs/INSTALL.UNIX, docs/MAKEPP: Bump make version requirements.
+
+	* builds/detect.mk (std_setup): Replace `echo' with `info'.
+	(dos_setup): Removed.
+	* builds/unix/install.mk, builds/modules.mk, builds/dos/detect.mk,
+	builds/windows/detect.mk, builds/os2/detect.mk: Updated.
+	* builds/newline: No longer needed.
+
+2018-04-15  Werner Lemberg  <wl@gnu.org>
+
+	[truetype]: Limit `SLOOP' bytecode argument to 16 bits.
+
+	This fixes
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7707
+
+	* src/truetype/ttinterp.c (Ins_SLOOP): Do it.
+
+2018-04-14  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow issues.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7652
+
+	* src/truetype/ttinterp.c (Ins_MDAP): Use SUB_LONG.
+
+2018-04-14  Werner Lemberg  <wl@gnu.org>
+
+	[autofit] Update to Unicode 11.0.0.
+
+	But no support new scripts (volunteers welcomed).
+
+	* src/autofit/afranges.c (af_arab_nonbase_uniranges,
+	af_beng_nonbase_uniranges, af_cakm_nonbase_uniranges,
+	af_deva_nonbase_uniranges, af_geor_uniranges,
+	af_gujr_nonbase_uniranges, af_mlym_nonbase_uniranges,
+	af_nkoo_nonbase_uniranges, af_telu_nonbase_uniranges,
+	af_hani_uniranges): Add new data.
+
+2018-04-10  Nikolaus Waxweiler  <madigens@gmail.com>
+
+	* CMakeLists.txt, builds/cmake/FindHarfBuzz.cmake: Extensive
+	modernization measures.
+
+	This brings up the minimum required CMake version to 2.8.12.
+
+	The installation paths follow the GNU defaults now, e.g. installing on a
+	64 bit host will place binaries into the lib64/ folder on e.g. Fedora.
+
+	Symbols are hidden by default (e.g. `-fvisibility=hidden' on GCC).
+
+	CMake will no longer look for a C++ compiler.
+
+	Library and .so version now match the Autotools build.
+
+	Comments in the build file and informational messages now use platform
+	agnostic example commands.
+
+	ftoption.h and ftconfig.h are written directly without a redundant `-new'
+	copy.
+
+	External dependencies are expressed as option()s and will turn up as such
+	in cmake-gui.
+
+	Internal: Properties such as dependencies and include directories are now
+	privately set on the freetype library instead of globally.
+
+	The CPack definitions have been cleaned up, the `make dist' has been
+	removed. Source packages generated with CPack don't contain Autotools
+	files and aren't used by the maintainers anyway.
+
+	On Windows, src/base/ftver.rc is compiled to decorate the library with
+	version and copyright information.
+
+	A pkg-config file is now generated and installed.
+
+2018-04-09  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow issues.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7453
+
+	* src/truetype/ttinterp.c (Round_Super, Round_Super_45): Use
+	ADD_LONG and SUB_LONG.
+
+2018-04-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[windows, wince] Clean up legacy project files.
+
+	* builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/windows/vc2005/freetype.vcproj,
+	builds/windows/vc2008/freetype.vcproj,
+	builds/windows/visualce/freetype.vcproj,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualc/freetype.dsp: Remove per-file compile flags.
+
+2018-04-04  Werner Lemberg  <wl@gnu.org>
+
+	[cff, type1] Sanitize `BlueFuzz' and `BlueShift'.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7371
+
+	* src/cff/cffload.c (cff_load_private_dict): Sanitize
+	`priv->blue_shift' and `priv->blue_fuzz' to avoid overflows later
+	on.
+
+	* src/type1/t1load.c (T1_Open_Face): Ditto.
+
+2018-04-04  Ben Wagner  <bungeman@google.com>
+
+	* src/truetype/ttobjs.c (trick_names): Add 3 tricky fonts (#53554),
+	`DFHei-Md-HK-BF', `DFKaiShu-Md-HK-BF' and `DFMing-Bd-HK-BF'.
+	(tt_check_trickyness_sfnt_ids): Add checksums for 3 tricky fonts
+	in above.
+
+2018-04-01  Werner Lemberg  <wl@gnu.org>
+
+	* builds/toplevel.mk (work): Use $(SEP).
+
+	This fixes the `make refdoc' using Cygwin: $(CAT) is `type' on this
+	platform, and this program only understands backslashes in paths.
+
+	Reported by Nikhil Ramakrishnan <ramakrishnan.nikhil@gmail.com>.
+
+2018-03-30  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix memory leak (only if tracing is on).
+
+	* src/truetype/ttgxvar.c (TT_Get_MM_Var) [FT_DEBUG_LEVEL_TRACE}: Fix
+	it.
+
+2018-03-23  Ben Wagner  <bungeman@google.com>
+
+	[sfnt] Correctly handle missing bitmaps in sbix format (#53404).
+
+	* src/sfnt/ttfsbit.c (tt_face_load_sbix_image): Fix return value.
+
+2018-03-23  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Fix advance of empty glyphs in bitmap fonts (#53393).
+
+	* src/truetype/ttgload.c (TT_Load_Glyph): Apply scaling to metrics
+	for empty bitmaps.
+
+2018-03-22  Werner Lemberg  <wl@gnu.org>
+
+	Remove `ftlcdfil.c' and `ftfntfmt.c' from build files (#53415).
+
+	builds/amiga/makefile, builds/amiga/makefile.os4,
+	builds/amiga/smakefile, builds/mac/FreeType.m68k_cfm.make.txt,
+	builds/mac/FreeType.m68k_far.make.txt,
+	builds/mac/FreeType.ppc_carbon.make.txt,
+	builds/mac/FreeType.ppc_classic.make.txt,
+	builds/symbian/freetype.mmp, builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/windows/vc2005/freetype.vcproj,
+	builds/windows/vc2008/freetype.vcproj,
+	builds/windows/vc2010/freetype.vcxproj,
+	builds/windows/vc2010/freetype.vcxproj.filters,
+	builds/windows/visualc/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualce/freetype.vcproj, vms_make.com: Do it.
+
+2018-03-13  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttcmap.c (tt_cmap2_validate): Fix potential numeric
+	overflow.
+
+2018-03-13  Werner Lemberg  <wl@gnu.org>
+
+	Fix cmap format 2 handling (#53320).
+
+	The patch introduced for #52646 was not correct.
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Adjust condition.
+
+2018-03-10  Nikolaus Waxweiler  <madigens@gmail.com>
+
+	* CMakeLists.txt (BASE_SRCS): Update to changes from 2018-03-05.
+
+2018-03-09  Chun-wei Fan  <fanc999@yahoo.com.tw>
+
+	* CMakeLists.txt [win32]: Allow MSVC DLL builds (#53287).
+
+	Do not limit DLL builds to MinGW, since we already have
+	`__declspec(dllexport)' directives in `ftconfig.h'.
+	Also suppress more warnings for POSIX functions.
+
+2018-03-08  Hugh McMaster  <hugh.mcmaster@outlook.com>
+
+	Make installation of `freetype-config' optional (#53093).
+
+	* builds/unix/configure.raw: Add option `--enable-freetype-config'
+	and set `INSTALL_FT2_CONFIG'.
+	* builds/unix/unix-def.in (INSTALL_FT2_CONFIG): Define.
+	* builds/unix/install.mk (install): Handle it.
+
+2018-03-05  Werner Lemberg  <wl@gnu.org>
+
+	Make `ftlcdfil.c' part of the `base' module.
+
+	`ftobjs.c' needs `ft_lcd_padding'.
+
+	Problem reported by duhuanpeng <548708880@qq.com>.
+
+	* modules.cfg (BASE_EXTENSIONS): Don't include `ftlcdfil.c'.
+
+	* src/base/ftbase.c: Include `ftlcdfil.c'.
+	* src/base/rules.mk (BASE_SRC): Add `ftlcdfil.c'.
+	* src/base/Jamfile (_sources): Adjusted.
+
+	* docs/INSTALL.ANY: Updated.
+
+2018-03-05  Werner Lemberg  <wl@gnu.org>
+
+	Make `ftfntfmt.c' part of the `base' module.
+
+	`ftobjs.c' needs `FT_Get_Font_Format'.
+
+	Problem reported by duhuanpeng <548708880@qq.com>.
+
+	* modules.cfg (BASE_EXTENSIONS): Don't include `ftfntfmt.c'.
+
+	* src/base/ftbase.c: Include `ftfntfmt.c'.
+	* src/base/rules.mk (BASE_SRC): Add `ftfntfmt.c'.
+	* src/base/Jamfile (_sources): Adjusted.
+
+	* docs/INSTALL.ANY: Updated.
+
+2018-03-01  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttinterp.c (TT_RunIns): Fix tracing arguments.
+
+2018-02-23  Werner Lemberg  <wl@gnu.org>
+
+	* builds/unix/configure.raw: Need HarfBuzz 1.3.0 or newer.
+
+	Problem reported by Alan Coopersmith <alan.coopersmith@oracle.com>.
+
+2018-02-17  Werner Lemberg  <wl@gnu.org>
+
+	[sfnt] Prefer `CBDT'/`CBLC' over `glyf' table (#53154).
+
+2018-02-06  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow issues.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6027
+
+	* src/truetype/ttinterp.c (Ins_MSIRP, Ins_MIAP, Ins_MIRP): Use
+	SUB_LONG; avoid FT_ABS.
+
+2018-02-04  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[unix] Use -fvisibility=hidden.
+
+	It is now widely recommended that ELF shared libraries hide symbols
+	except those with explicit __attribute__((visibility("default"))).
+	This is supported by all major compilers and should rather be an
+	option in libtool.
+
+	* builds/unix/configure.raw: Add -fvisibility=hidden to CFLAGS.
+	* builds/unix/ftconfig.in, builds/vms/ftconfig.h,
+	include/freetype/config/ftconfig.h (FT_EXPORT): Use visibility
+	attribute.
+
+2018-01-27  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Better protection against invalid VF data.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5739
+
+	Bug introduced in commit 08cd62deedefe217f2ea50e392923ce8b5bc7ac7.
+
+	* src/truetype/ttgxvar.c (TT_Set_Var_Design): Always initialize
+	`normalizedcoords'.
+
+2018-01-27  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttinterp.c (Ins_GETVARIATION): Avoid NULL reference.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5736
+
+2018-01-27  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgxvar.c (tt_set_mm_blend): Minor.
+
+2018-01-27  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Better trace VF instances.
+
+	* src/truetype/ttgxvar.c (ft_var_to_normalized): Don't emit number
+	of coordinates.
+	(TT_Get_MM_Var): Trace instance indices names.
+	(TT_Set_Var_Design): Updated.
+
+2018-01-27  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Beautify tracing of VF axis records.
+
+	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Show axis records in a
+	table-like manner.
+
+2018-01-26  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Fix multiple calls of `FT_Get_MM_Var' (#52955).
+
+	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Set
+	`face->blend->num_axis' in case we have to initialize the
+	`face->blend'.
+
+2018-01-23  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[apinames] Anonymous version map for GNU linker.
+
+	* src/tools/apinames.c (PROGRAM_VERSION): Set to 0.3.
+	(OutputFormat): Add `OUTPUT_GNU_VERMAP'.
+	(names_dump): Handle it.
+	(usage): Updated.
+	(main): Handle new command line flag `-wL'.
+
+2018-01-21  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[unix] Call libtool to clean up.
+
+	* builds/unix/install.mk (clean_project_unix, distclean_project_unix):
+	Use libtool.
+	* builds/freetype.mk: Minor.
+
+2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftver.rc: Fix mingw-w64 compilation.
+
+2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Enable VERSIONINFO resource for Cygwin/MinGW.
+
+	* builds/unix/configure.raw: Check for resource compiler.
+	* builds/unix/unix-cc.in: Conditionally set up resource compiler.
+	* builds/freetype.mk: Add conditional rule for `ftver.rc'.
+	* src/base/ftver.rc: Copyright notice and year update.
+
+2018-01-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Move VERSIONINFO resource.
+
+	* builds/windows/vc2010/freetype.vcxproj: Updated.
+	* builds/windows/ftver.rc: Move file from here...
+	* src/base/ftver.rc: ... to here.
+
+2018-01-12  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Expand dllexport/dllimport to Cygwin/MinGW.
+
+	* include/freetype/config/ftconfig.h: Respect DLL_EXPORT,
+	s/_MSC_VER/_WIN32/.
+	* builds/unix/ftconfig.in: Replicate here.
+	* builds/vms/ftconfig.h: Replicate here.
+
+2018-01-12  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Improve and document MSVC build.
+
+	* include/freetype/config/ftconfig.h: Guard dllexport/dllimport
+	attributes with _DLL and FT2_DLLIMPORT.
+	* builds/windows/vc2010/index.html: Update documentation.
+
+2018-01-10  Steve Robinson  <ssrobins@gmail.com>
+
+	* CMakeLists.txt [win32]: Suppress warnings for POSIX functions.
+
+2018-01-10  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Correctly handle Flex features (#52846).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdVMOVETO,
+	cf2_cmdHMOVETO>: Do not move if doing Flex.
+
+2018-01-09  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/vc2010/freetype.sln: Synchronize with the project.
+
+2018-01-08  Werner Lemberg  <wl@gnu.org>
+
+	* Version 2.9 released.
+	=======================
+
+
+	Tag sources with `VER-2-9'.
+
+	* docs/VERSION.TXT: Add entry for version 2.9.
+
+	* README, Jamfile (RefDoc), builds/windows/vc2005/freetype.vcproj,
+	builds/windows/vc2005/index.html,
+	builds/windows/vc2008/freetype.vcproj,
+	builds/windows/vc2008/index.html,
+	builds/windows/vc2010/freetype.vcxproj,
+	builds/windows/vc2010/index.html,
+	builds/windows/visualc/freetype.dsp,
+	builds/windows/visualc/freetype.vcproj,
+	builds/windows/visualc/index.html,
+	builds/windows/visualce/freetype.dsp,
+	builds/windows/visualce/freetype.vcproj,
+	builds/windows/visualce/index.html,
+	builds/windows/ftver.rc,
+	builds/wince/vc2005-ce/freetype.vcproj,
+	builds/wince/vc2005-ce/index.html,
+	builds/wince/vc2008-ce/freetype.vcproj,
+	builds/wince/vc2008-ce/index.html: s/2.8.1/2.9/, s/281/29/.
+
+	* include/freetype/freetype.h (FREETYPE_MINOR): Set to 9.
+	(FREETYPE_PATCH): Set to 0.
+
+	* builds/unix/configure.raw (version_info): Set to 22:0:16.
+	* CMakeLists.txt (VERSION_PATCH): Set to 0.
+
+2018-01-07  Werner Lemberg  <wl@gnu.org>
+
+	Add check for librt, needed for `ftbench' (#52824).
+
+	* builds/unix/configure.raw (LIB_CLOCK_GETTIME): Define; this will
+	hold `-lrt' if necessary.
+
+	* builds/unix/unix-cc.in (LIB_CLOCK_GETTIME): New variable.
+
+2018-01-07  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Fix Type 1 glyphs with too many stem hints.
+
+	According to the CFF specification, charstrings can have up to 96 stem
+	hints. Due to hint replacement routines in Type 1 charstrings, some
+	glyphs are rejected by the Adobe engine, which implements the above
+	limit. This fix turns off hinting for such glyphs.
+
+	* src/psaux/pshints.c (cf2_hintmap_build): Reset the error from calling
+	`cf2_hintmask_setAll' on a problematic Type 1 charstring and turn off
+	hinting.
+
+2018-01-06  Werner Lemberg  <wl@gnu.org>
+
+	Add `FT_Done_MM_Var'.
+
+	This is necessary in case the application's memory routines differ
+	from FreeType.  A typical example is a Python application on Windows
+	that calls FreeType compiled as a DLL via the `ctypes' interface.
+
+	* include/freetype/ftmm.h, src/base/ftmm.c (FT_Done_MM_Var): Declare
+	and define.
+
+	* docs/CHANGES: Updated.
+
+2018-01-03  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Round offsets of glyph components only if hinting is on.
+
+	* src/truetype/ttgload.c (TT_Process_Composite_Component): Implement
+	it.
+
+2018-01-03  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgxvar.c (ft_var_to_design): Remove dead code.
+
+	This is a better fix than the previous commit, which is now
+	reverted.
+
+2018-01-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Move internal LCD-related declarations.
+
+	* include/freetype/ftlcdfil.h (ft_lcd_padding, ft_lcd_filter_fir):
+	Move from here...
+	* include/freetype/internal/ftobjs.h: ... to here.
+
+2018-01-03  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+	[_MSC_VER]: Limit Visual C++ attributes.
+
+2018-01-03  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Make blend/design coordinate round-tripping work.
+
+	Behdad reported that setting blend coordinates, then getting design
+	coordinates did incorrectly return the default instance's
+	coordinates.
+
+	* src/truetype/ttgxvar.c (tt_set_mm_blend): Fix it.
+
+2017-12-31  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix endless loop.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4838
+
+2017-12-31  Werner Lemberg  <wl@gnu.org>
+
+	Synchronize other Windows project files.
+
+	* builds/windows/*: Add missing files.
+
+2017-12-31  Werner Lemberg  <wl@gnu.org>
+
+	Update Visual C 2010 project files.
+
+	Problem reported by Hin-Tak.
+
+	* builds/windows/vc2010/freetype.vcxproj: Add files `ftbdf.c' and
+	`ftcid.c'.
+	Sort entries.
+	* builds/windows/vc2010/freetype.vcxproj.filter: Ditto.
+	Fix members of `FT_MODULE' group.
+
+2017-12-30  Werner Lemberg  <wl@gnu.org>
+
+	* builds/vms/ftconfig.h: Synchronize with unix `ftconfig.in' file.
+
+2017-12-28  Werner Lemberg  <wl@gnu.org>
+
+	* builds/unix/ftconfig.in: Synchronize with main `ftconfig.h' file.
+
+	Reported by Nikolaus.
+
+2017-12-27  Werner Lemberg  <wl@gnu.org>
+
+	Fix compiler warnings.
+
+	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Make `pitch' and
+	`new_pitch' unsigned.
+
+	* src/base/ftpsprop.c: Include FT_INTERNAL_POSTSCRIPT_PROPS_H.
+
+2017-12-27  Werner Lemberg  <wl@gnu.org>
+
+	Fixes for `make multi'.
+
+	* include/freetype/internal/ftpsprop.h: Use `FT_BASE_CALLBACK'.
+	(ps_property_get): Harmonize declaration with corresponding
+	function typedef.
+
+	* include/freety[e/internal/fttrace.h: Add `trace_psprops'.
+
+	* src/base/ftpsprop.c: Include necessary header files.
+	(FT_COMPONENT): Define.
+	(ps_property_set): Tag with `FT_BASE_CALLBACK_DEF'.
+	(ps_property_get): Tag with `FT_BASE_CALLBACK_DEF'.
+	Harmonize declaration with corresponding function typedef.
+
+2017-12-27  Werner Lemberg  <wl@gnu.org>
+
+	Provide support for intra-module callback functions.
+
+	This is needed especially for `make multi' with C++.
+
+	* include/freetype/config/ftconfig.h (FT_BASE_CALLBACK,
+	FT_BASE_CALLBACK_DEF): New macros.
+
+2017-12-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	Move PostScript drivers' property handlers to `base'.
+
+	This reduces the amount of duplicated code across PostScript
+	drivers.
+
+	* src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c
+	({cff,cid,t1}_property_{get,set}): Moved to...
+	* include/freetype/internal/ftpsprop.h: ...this new file.
+	(ps_property_{get,set}): New functions to replace moved ones.
+
+	* src/base/ftpsprop.c: New file that implements above functions.
+
+	* include/freetype/internal/internal.h
+	(FT_INTERNAL_POSTSCRIPT_PROPS_H): New macro.
+
+	* src/cff/cffdrivr.c, src/cid/cidriver.c, src/type1/t1driver.c:
+	Updated.
+
+	* src/base/Jamfile, src/base/rules.mk (BASE_SRC), src/base/ftbase.c:
+	Updated.
+
+2017-12-20  Werner Lemberg  <wl@gnu.org>
+
+	Speed up FT_Set_Var_{Design,Blend}_Coordinates if curr == new.
+
+	We exit early if the current design or blend coordinates are
+	identical to the new ones.
+
+	* src/truetype/ttgxvar.c (tt_set_mm_blend, TT_Set_Var_Design):
+	Implement it, returning internal error code -1 if there will be no
+	variation change.
+
+	* src/type1/t1load.c (t1_set_mm_blend): Ditto.
+
+	* src/base/ftmm.c (FT_Set_Var_Design_Coordinates,
+	FT_Set_MM_Blend_Coordinates, FT_Set_Var_Blend_Coordinates): Updated.
+
+2017-12-18  Werner Lemberg  <wl@gnu.org>
+
+	[sfnt] Fix charmap type 2 iterator (#52646).
+
+	The subsetted demo font of the report that exhibits the bug has a
+	very unusual type 2 cmap for Unicode(!): It contains only two
+	sub-headers, one for one-byte characters (covering the range 0x20 to
+	0xFA), and a second one for higher byte 0x01 (just for character
+	code U+0131).
+
+	Before this commit, the iterator wasn't able to correctly handle a
+	sub-header for higher byte 0x01.
+
+	* src/sfnt/ttcmap.c (tt_cmap2_char_next): Fix character increment
+	for outer loop.
+
+2017-12-18  Matthias Clasen  <matthias.clasen@gmail.com>
+
+	[truetype] Fix clamping, minor tracing code beautification.
+
+	* src/truetype/ttgxvar.c (ft_var_to_normalized): Trace number of
+	design coordinates.
+	Use clamped value.
+
+2017-12-18  Werner Lemberg  <wl@gnu.org>
+
+	* src/*/*: Only use `ft_' and `FT_' variants of stdc library stuff.
+
+2017-12-18  Werner Lemberg  <wl@gnu.org>
+
+	* src/truetype/ttgxvar.c (tt_face_vary_cvt): Add size guard (#52688).
+
+2017-12-18  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix previous commit.
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Correctly handle
+	unhinted phantom points, which must be properly scaled.
+
+2017-12-18  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Don't apply HVAR and VVAR deltas twice (#52683).
+
+	* src/truetype/ttgload.c (TT_Process_Simple_Glyph): Always adjust
+	`pp1' to `pp4', except if we have an HVAR and/or VVAR table.
+
+	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Handle
+	alternative code branch identically w.r.t. presence of an HVAR
+	and/or VVAR table.
+
+2017-12-17  Jonathan Kew  <jfkthame@gmail.com>
+
+	[truetype] Correctly handle variation font phantom points (#52683).
+
+	* src/truetype/ttgxvar.c (TT_Vary_Apply_Glyph_Deltas): Fix phantom
+	point indices.
+
+2017-12-17  Jonathan Kew  <jfkthame@gmail.com>
+
+	Fix incorrect advance width scaling (#52683).
+
+	* src/base/ftadvance.c (FT_Get_Advances): Always respect the
+	FT_LOAD_NO_SCALE flag if present.
+
+2017-12-16  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/vc2010/freetype.vcxproj: AfterBuild copy.
+	* objs/.gitignore: Ignore almost everything.
+
+2017-12-11  Werner Lemberg  <wl@gnu.org>
+
+	Fix compiler warning (#52640).
+
+	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): Remove unused
+	variable.
+
+2017-12-08  Azzuro  <azzuro@team-mediaportal.com>
+
+	* builds/windows/vc2010/freetype.vcxproj: Adjust output directory.
+
+	This allows builds with different configurations in parallel.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	Fix `make setup dos', second try (#52622).
+
+	* builds/detect.mk (dos_setup): Don't use literal `>' character at
+	all.  Mixing the different escaping rules from make, dos, and
+	windows is too fragile.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	[docmaker] Fix code section parsing.
+
+	Stuff like
+
+	  {
+	    <bla>
+	  }
+
+	confused the parser, which incorrectly treated `<bla>' as a markup
+	tag.
+
+	* src/tools/docmaker/content.py (ContentProcessor::process_content):
+	Apply `re_markup_tags' only outside of code sections.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	New `ftdriver.h' file, covering all driver modules.
+
+	This reduces redundancy and increases synergy; it also reduces the
+	number of header files.
+
+	* include/freetype/config/ftheader.h (FT_DRIVER_H): New macro.
+	(FT_AUTOHINTER_H, FT_CFF_DRIVER_H, FT_TRUETYPE_DRIVER_H,
+	FT_PCF_DRIVER_H, FT_TYPE1_DRIVER_H): Make them aliases to
+	FT_DRIVER_H.
+
+	* include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+	include/freetype/ftpcfdrv.h, include/freetype/ftt1drv.h,
+	include/freetype/ftttdrv.h: Replaced with...
+	* include/freetype/ftdriver.h: ...this new file.
+	(FT_CFF_HINTING_ADOBE, FT_T1_HINTING_ADOBE): Renamed to...
+	(FT_HINTING_ADOBE): ... this new macro.
+	(FT_CFF_HINTING_FREETYPE, FT_T1_HINTING_FREETYPE): Renamed to...
+	(FT_HINTING_FREETYPE): ... this new macro.
+
+	* src/*/*: Updated accordingly.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	Move `ftdriver.h' to `ftdrv.h'.
+
+	* include/freetype/internal/ftdriver.h: Renamed to...
+	* include/freetype/internal/ftdrv.h: ... this name.
+
+	* include/freetype/internal/internal.h (FT_INTERNAL_DRIVER_H):
+	Updated.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	Fix access to uninitalized memory (#52613).
+
+	Also reported as
+
+	  https://bugs.chromium.org/p/chromium/issues/detail?id=791317
+
+	* src/base/ftbitmap.c (ft_bitmap_assure_buffer): If increasing the
+	bitmap size needs a larger bitmap buffer, assure that the new memory
+	areas are initialized also.
+
+2017-12-08  Werner Lemberg  <wl@gnu.org>
+
+	Fix `make setup dos' (#52622).
+
+	* builds/detect.mk (dos_setup): Properly escape literal `>'
+	character.
+
+2017-12-07  Werner Lemberg  <wl@gnu.org>
+
+	Fix C++ compilation.
+
+	* src/psaux/psauxmod.h: Use FT_CALLBACK_TABLE macro where necessary.
+
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix warning.
+
+2017-12-07  Werner Lemberg  <wl@gnu.org>
+
+	Fix `make multi'.
+
+	* include/freetype/internal/fttrace.h: Remove unused tracing macros.
+	s/pshalgo2/pshalgo/.
+	Add `trace_cffdecode'.
+	* src/pshinter/pshalgo.c (FT_COMPONENT): Updated.
+
+	* src/cff/cffload.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+	* src/cff/cffobjs.c: Include FT_SERVICE_METRICS_VARIATIONS_H and
+	FT_SERVICE_CFF_TABLE_LOAD_H.
+
+	* src/cid/cidriver.c: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+
+	* src/psaux/cffdecode.c: Include FT_FREETYPE_H and
+	FT_INTERNAL_DEBUG_H.
+	(FT_COMPONENT): Define.
+	* src/psaux/cffdecode.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+	* src/psaux/psauxmod.h: Include FT_INTERNAL_POSTSCRIPT_AUX_H.
+	Declare `cff_builder_funcs' and `ps_builder_funcs'.
+	* src/psaux/psft.c: Include `psobjs.h' and `cffdecode.h'.
+	* src/psaux/psobjs.c : Include `psauxmod.h'.
+
+2017-12-07  Werner Lemberg  <wl@gnu.org>
+
+	* include/freetype/config/ftheader.h: Some clean-up.
+
+	This commit removes documentation of deprecated macros and does some
+	minor streamlining.
+
+2017-12-06  Werner Lemberg  <wl@gnu.org>
+
+	* builds/symbian/bld.inf: Updated.
+
+2017-12-06  Werner Lemberg  <wl@gnu.org>
+
+	New header file `ftparams.h' that collects all parameter tags.
+
+	* include/freetype/config/ftheader.h (FT_PARAMETER_TAGS_H): New
+	macro.
+	(FT_TRUETYPE_UNPATENTED_H, FT_UNPATENTED_HINTING_H): Define it to
+	`ftparams.h'.
+
+	* include/freetype/ftautoh.h, include/freetype/ftcffdrv.h,
+	include/freetype/ftincrem.h, include/freetype/ftlcdfil.h,
+	include/freetype/ftsnames.h, include/freetype/ftt1drv.h: Include
+	FT_PARAMETER_TAGS_H.
+	Move FT_PARAM_TAG_XXX definitions to...
+	* include/freetype/ftparams.h: ...this new file.
+
+	* include/freetype/ttunpat.h: Remove.  No longer needed.
+
+2017-12-05  Werner Lemberg  <wl@gnu.org>
+
+	Improve tracing messages by using singular and plural forms.
+
+	* src/*/*.c: Implement it.
+
+2017-12-04  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Allow shared points in `cvar' table (#52532).
+
+	* src/truetype/ttgxvar.c (tt_face_vary_cvt): Implement it by copying
+	and adjusting the corresponding code from
+	`TT_Vary_Apply_Glyph_Deltas'.
+
+2017-11-28  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Improving tracing of composite glyphs.
+
+	* src/truetype/ttgload.c (TT_Load_Composite_Glyph)
+	[FT_DEBUG_LEVEL_TRACE]: Show composite glyph information.
+
+2017-11-27  Werner Lemberg  <wl@gnu.org>
+
+	[type1] Allow (again) `/Encoding' with >256 elements (#52464).
+
+	In version 2.6.1, this has been disallowed to better reject
+	malformed fonts; however, this restriction was too strong.  This
+	time, we only take the first 256 elements into account, since
+	encoding arrays are always accessed with a 8bit integer, according
+	to the PostScript Language Reference.
+
+	* src/type1/t1load.c (parse_encoding): Implement it.
+
+2017-11-27  Jan Alexander Steffens (heftig)  <jan.steffens@gmail.com>
+
+	Fix last commit (#52522).
+
+	* builds/freetype.mk: Set `FT_OPTION_H' and `FTOPTION_FLAG'
+	properly if we have `ftoption.h' in `BUILD_DIR'.
+
+2017-11-24  Werner Lemberg  <wl@gnu.org>
+
+	[unix] Install a massaged `ftoption.h' file (#51780).
+
+	* builds/unix/configure.raw (ftoption_set, ftoption_unset): New
+	auxiliary functions to construct...
+	(FTOPTION_H_SED): ... this new variable.
+	Apply it as a sed argument while copying `ftoption.h' to the
+	`builds/unix' directory (using `AC_CONFIG_FILES').
+	Simplify code of test that checks cpp's computation of bit length
+	(the test previously created an empty `ftoption.h' file and deleted
+	it immediately afterwards); without this change, it can happen on my
+	GNU/Linux box that `configure's execution of `config.status' doesn't
+	create `ftoption.h' (no idea why this happens).
+
+	* builds/unix/install.mk (install): Install
+	`builds/unix/ftoption.h'.
+
+	* builds/unix/unix-def.in (DISTCLEAN): Updated.
+
+	* builds/unix/.gitignore: Updated.
+
+2017-11-23  Tor Andersson  <tor.andersson@artifex.com>
+
+	Silence unused function warnings (#52465).
+
+	Some static function declarations cause unused function warnings if
+	certain config options are turned off via `ftoption.h'.
+
+	* src/base/ftbase.h, src/base/ftrfork.c, src/sfnt/ttbdf.h,
+	src/truetype/ttgxvar.h: Add #ifdef guards around these sections.
+
+2017-11-22  Ewald Hew  <ewaldhew@gmail.com>
+
+	* src/psaux/psft.c (cf2_setGlyphWidth): Check format before setting.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=4377
+
+2017-11-22  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Fix CFF advance widths. (#52466)
+
+	Glyph advance widths were being written to the new `PS_Decoder' but not
+	saved to the underlying format specific decoder. This caused pure CFF
+	fonts to have bad advance width.
+
+	* include/freetype/internal/psaux.h (PS_Decoder): Change `glyph_width'
+	field to pointer.
+	Remove unused fields.
+	* src/psaux/psobjs.c (ps_decoder_init): Change `glyph_width' from copy
+	to reference.
+	Remove unused.
+	* src/psaux/psft.c (cf2_setGlyphWidth): Update code.
+
+2017-11-15  Vlad Tsyrklevich  <vtsyrklevich@google.com>
+
+	* include/freetype/ftrender.h: Fix `FT_Renderer_RenderFunc' type.
+
+2017-11-14  Nikolaus Waxweiler  <madigens@gmail.com>
+
+	Use Adobe hinting engine for `light' hinting of both CFF and Type 1.
+
+	Since Ewald Hew factored the Adobe hinting engine out of the CFF
+	driver code, we can now use it on Type 1 (and CID) font formats, as
+	both have the same hinting philosophy.
+
+	This change activates the Adobe hinter when in LIGHT mode, and
+	therefore always unless explicitly asking for the auto-hinter.  This
+	makes LIGHT behavior consistent with CFF fonts.  As of this commit,
+	the hinting engine table looks as follows.
+
+	             LIGHT  NORMAL
+	  -------------------------
+	   TrueType  Auto   v40
+	   CFF       Adobe  Adobe
+	   Type 1    Adobe  Adobe
+
+2017-11-10  Yuri Levchenko  <yuri_levchenko@boolat.com>
+
+	* CMakeLists.txt: Add `DISABLE_FORCE_DEBUG_PREFIX' option.
+
+2017-11-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Relocate condition.
+
+2017-11-06  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* src/smooth/ftgrays.c (gray_set_cell): Fix uninitialized variables.
+
+2017-11-03  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Fix PostScript interpreter rewinding in Type 1 mode. (#52251)
+
+	The interpreter in Type 1 mode rewinds the charstring after collecting
+	all hints for building the initial hintmap (commit d52dd7f). However,
+	some charstrings use `endchar' in a final subroutine call, rewinding to
+	the start of that subroutine, and only a small section of the actual
+	glyph is drawn.
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdENDCHAR>:
+	Ensure we are on the top level charstring before rewinding.
+
+2017-11-03  suzuki toshiya  <mpsuzuki@hiroshima-u.ac.jp>
+
+	[truetype] Add more tricky fonts.
+
+	See the report by Yang Yinsen.
+	https://lists.gnu.org/archive/html/freetype-devel/2017-11/msg00000.html
+
+	* src/truetype/ttobjs.c (trick_names): Add `DFGothic-EB',
+	`DFGyoSho-Lt', `DFHSGothic-W5', `DFHSMincho-W3' and `DFHSMincho-W7'.
+	(tt_check_trickyness_sfnt_ids): Add checksums for DFGothic-EB,
+	DFGyoSho-Lt, DFHSGothic-W5, DFHSMincho-W3 and DFHSMincho-W7.  Also
+	add checksums for DLCLiShu and DLCHayBold which their family names
+	were already listed but their checksums were previously unknown.
+
+2017-11-01  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Fix complex rendering at high ppem.
+
+	We used to split large glyphs into horizontal bands and continue
+	bisecting them still horizontally if that was not enough.  This is
+	guaranteed to fail when a single scanline cannot fit into the
+	rendering memory pool.  Now we bisect the bands vertically so that
+	the smallest unit is a column of the band height, which is guranteed
+	to fit into memory.
+
+	* src/smooth/ftgrays.c (gray_convert_glyph): Implement it.
+
+2017-10-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth] Improve complex rendering at high ppem.
+
+	At large sizes almost but not exactly horizontal segments can quickly
+	drain the rendering pool. This patch at least avoids filling the pool
+	with trivial cells. Beyond this, we can only increase the pool size.
+
+	Reported, analyzed, and tested by Colin Fahey.
+
+	* src/smooth/ftgrays.c (gray_set_cell): Do not record trivial cells.
+
+2017-10-20  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base] Improve tracing in FT_Load_Glyph, FT_*_Size.
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Tag tracing messages with
+	function name, glyph index, and load flags.
+	(FT_Select_Metrics, FT_Request_Metrics): Remove all tracing.
+	(FT_Select_Size, FT_Request_Size): Improve tracing.
+
+2017-10-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base] Improve tracing in FT_Render_Glyph.
+
+	* src/base/ftobjs.c (FT_Render_Glyph_Internal): Add total coverage
+	calculations and downgrade Netpbm dump to bitmap:7.
+
+2017-10-15  Ewald Hew  <ewaldhew@gmail.com>
+
+	[cff] Fix segfault on missing `psaux' (#52218)
+
+	* src/cff/cffload.c (cff_done_blend): Add a check for possible nullptr.
+
+	* modules.cfg: Update dependency list.
+
+2017-10-15  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base, cff] Fix MSVC warnings.
+
+	* src/base/ftobjs.c (FT_New_Library): C4702: unreachable code.
+	(ft_glyphslot_preset_bitmap): C4244: possible loss of data.
+	* src/cff/cffload.c (cff_blend_doBlend): C4244: possible loss of data.
+	Turn `sum' into unsigned.
+
+2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[base] Netpbm image tracing.
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Trace bitmap size.
+	(FT_Render_Glyph_Internal): Trace bitmap in Netpbm format.
+
+	* src/smooth/ftgrays.c (gray_sweep): Sweep remnants of span tracing.
+
+2017-10-14  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	* builds/windows/ftdebug.c (FT_Message): Print to stderr.
+	* builds/wince/ftdebug.c (FT_Message): Ditto.
+
+2017-10-14  Behdad Esfahbod  <behdad@behdad.org>
+
+	[afshaper] Delay creating `hb_set' objects until needed.
+
+	In runs on Noto Naskh Arabic, this results in 89 sets created
+	instead of 340 before.  Makes auto-hinter setup with HarfBuzz
+	enabled 20% to 30% faster.
+
+	* src/autofit/afshaper.c (af_shaper_get_coverage): Implement it.
+
+2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
+
+	[type1, cid] Add hinting engine switch.
+
+	Implement property service in `type1' and `cid' drivers to allow
+	switching between FreeType or Adobe hinting engine when both are
+	available.
+
+	* src/cid/cidriver.c (cid_property_{set,get}, cid_services),
+	src/type1/t1driver.c (t1_property_{set,get}, t1_services): Add
+	Properties service.
+
+	* src/cid/cidobjs.c (cid_driver_init), src/type1/t1objs.c
+	(T1_Driver_Init): Add default property values.
+
+2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
+
+	Add T1_CONFIG_OPTION_OLD_ENGINE configuration option.
+
+	This controls whether the old Type 1 engine gets compiled into FreeType.
+	It is disabled by default.
+
+	* devel/ftoption.h, include/freetype/config/ftoption.h
+	(T1_CONFIG_OPTION_OLD_ENGINE): New macro.
+
+	* include/freetype/internal/psaux.h (PS_Decoder): Remove unused field.
+	* include/freetype/internal/psaux.h, src/cid/cidgload.c
+	(cid_load_glyph), src/psaux/psauxmod.c, src/psaux/psobjs.c
+	(ps_builder_add_point), src/psaux/t1decode.c
+	(t1_lookup_glyph_by_stdcharcode, t1_decoder_parse_glyph,
+	t1operator_seac, t1_decoder_parse_charstrings), src/psaux/t1decode.h,
+	src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Surround
+	relevant code with macro.
+	Minor code changes.
+
+2017-10-12  Ewald Hew  <ewaldhew@gmail.com>
+
+	Extract width parsing from Type 1 parser.
+
+	Duplicate the fast advance width calculations from the old parser.
+	This is to facilitate adding options for compiling out the old parser.
+
+	* src/psaux/t1decode.{c,h} (t1_decoder_parse_metrics): New function.
+	* include/freetype/internal/psaux.h (T1_Decoder_Funcs): New entry
+	`parse_metrics'.
+	* src/psaux/psauxmod.c: Set the new entry.
+
+	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String),
+	src/cid/cidgload.c (cid_load_glyph): Separate
+	conditional for selecting engine.
+
+2017-10-09  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftoutln.c (FT_Outline_Translate): Fix integer overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/chromium/issues/detail?id=772775
+
+2017-10-08  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Integer overflows.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3579
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	[sfnt] Adjust behaviour of PS font names for variation fonts.
+
+	* src/sfnt/sfdriver.c (sfnt_get_var_ps_name): Use a named instance's
+	PS name only if no variation is applied.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	[cff, truetype] Adjust behaviour of named instances.
+
+	This commit completely separates the interaction between named
+	instances and variation functions.  In particular, resetting the
+	variation returns to the current named instance (if set) and not to
+	the base font.
+
+	As a side effect, variation functions no longer change the named
+	instance index.
+
+	* src/cff/cffobjs.c (cff_face_init): Use MM service's `set_instance'
+	function.
+	Also apply `MVAR' table to named instances.
+
+	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Add cast.
+	(tt_set_mm_blend): No longer check whether requested variation
+	coincides with a named instance.
+	(TT_Set_Var_Design): Use current named instance for default
+	coordinates.
+	* src/truetype/ttobjs.c (tt_face_init): Use `TT_Set_Named_Instance'.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	Make `FT_Set_Named_Instance' work.
+
+	* src/cff/cffdrivr.c (cff_set_instance): New function.
+	(cff_service_multi_masters): Register it.
+
+	* src/truetype/ttgxvar.c (TT_Set_Named_Instance): New function.
+	* src/truetype/ttgxvar.h: Updated.
+	* src/truetype/ttdriver.c (tt_service_gx_multi_masters): Register
+	it.
+
+	* src/type1/t1load.c (T1_Reset_MM_Blend): New function.
+	* src/type1/t1load.h: Updated.
+	* src/type1/t1driver.c (t1_service_multi_masters): Register it.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	Make `FT_FACE_FLAG_VARIATION' work.
+
+	* include/freetype/internal/tttypes.h (TT_Face): Remove
+	`is_default_instance'; this can be replaced with a combination of
+	`FT_IS_VARIATION' and `FT_IS_INSTANCE'.
+
+	* src/cff/cffdrivr.c (cff_get_advances): Updated.
+
+	* src/sfnt/sfdriver.c (sfnt_get_ps_name), src/sfnt/sfobjs.c
+	(sfnt_init_face): Updated.
+
+	* src/truetype/ttdriver.c (tt_get_advances), src/truetype/ttgload.c
+	(TT_Process_Simple_Glyph, load_truetype_glyph, IS_DEFAULT_INSTANCE),
+	src/truetype/ttgxvar.c (tt_set_mm_blend): Updated.
+	* src/truetype/ttgxvar.c (TT_Set_MM_Blend, TT_Set_Var_Design):
+	Handle `FT_FACE_FLAG_VARIATION'.
+
+	* src/type1/t1load.c (T1_Set_MM_Blend, T1_Set_MM_Design): Handle
+	`FT_FACE_FLAG_VARIATION'.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	New function `FT_Set_Named_Instance'.
+
+	No effect yet.
+
+	* src/base/ftmm.c (FT_Set_Named_Instance): New function.
+
+	* include/freetype/ftmm.h: Updated.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	Add macros for checking whether a font variation is active.
+
+	* include/freetype/freetype.h (FT_FACE_FLAG_VARIATION,
+	FT_IS_VARIATION): New macros.
+	No effect yet.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	Add framework for setting named instance in MM service.
+
+	* include/freetype/internal/services/svmm.h (FT_Set_Instance_Func):
+	New function typedef.
+	(MultiMasters): Add `set_instance' member.
+	(FT_DEFINE_SERVICE_MULTIMASTERSREC): Updated.
+
+	* src/cff/cffdrivr.c (cff_service_multi_masters),
+	src/truetype/ttdriver (tt_service_gx_multi_masters),
+	src/type1/t1driver.c (t1_service_multi_masters): Updated.
+
+2017-10-07  Werner Lemberg  <wl@gnu.org>
+
+	[type1] Minor code shuffling.
+
+	* src/type1/t1load.c (T1_Set_MM_Blend): Make it a wrapper of...
+	(t1_set_mm_blend): ...this new function.
+	(T1_Set_MM_Design): Use `t1_set_mm_blend'.
+
+2017-10-05  Werner Lemberg  <wl@gnu.org>
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Fix integer
+	overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3539
+
+2017-10-05  Werner Lemberg  <wl@gnu.org>
+
+	Fix compiler warnings.
+
+	* src/cff/cffdrivr.c (cff_ps_get_font_extra): Avoid code that relies
+	on numeric overflow.
+	Add cast.
+
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Fix variable
+	types, add cast.
+
+2017-10-04  John Tytgat  <John.Tytgat@esko.com>
+
+	[cff] Add support for `FSType'.
+
+	* include/freetype/internal/cfftypes.h (CFF_FontRec): Add
+	`font_extra' entry.
+
+	* src/cff/cffdrivr.c (cff_ps_get_font_extra): New function to
+	retrieve FSType info from the embedded PostScript data.
+	(cff_service_ps_info): Register function.
+
+	* src/cff/cffload.c (cff_font_done): Free `font_extra'.
+
+2017-09-30  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Signedness fixes in bitmap presetting.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3514.
+
+	* src/raster/ftrend1.c (ft_raster1_render): Explicitly signed height.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): Explicitly unsigned
+	subtraction.
+
+2017-09-29  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Bitmap metrics presetting [2/2].
+
+	* src/base/ftobjs.c (FT_Load_Glyph): Preset the bitmap metrics when
+	appropriate but `FT_Render_Glyph' is not called.
+	* include/freetype/freetype.h (FT_GlyphSlotRec): Document the change.
+
+2017-09-28  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[smooth, raster] Miscellaneous cleanups.
+
+	* src/raster/ftrend1.c (ft_raster1_render): Clean up the exit.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Reduce
+	translations and clean up the exit.
+	(ft_smooth_render_lcd, ft_smooth_render_lcd): Remove unused `error'.
+
+2017-09-28  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Really, really fix #52082.
+
+	* src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+
+2017-09-28  Werner Lemberg  <wl@gnu.org>
+
+	* src/psaux/psintrp.c (cf2_doStems): Fix integer overflow.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3510
+
+2017-09-28  Ewald Hew  <ewaldhew@gmail.com>
+
+	* src/cid/cidgload.c (cid_slot_load_glyph): Fix memory leak.
+
+	Reported as
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3489
+
+2017-09-28  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Bitmap metrics presetting [1/2].
+
+	This mainly just extracts the code for presetting the bitmap metrics
+	from the monochrome, grayscale, and LCD renderers into a separate
+	function.
+
+	* src/base/ftobjs.c (ft_glyphslot_preset_bitmap): New function that
+	calculates prospective bitmap metrics for the given rendering mode.
+	* include/freetype/internal/ftobjs.h (ft_glyphslot_preset_bitmap):
+	Declare it.
+
+	* src/base/ftlcdfil.c (ft_lcd_padding): New helper function that adds
+	padding to CBox taking into account pecularities of LCD rendering.
+	* include/freetype/ftlcdfil.h (ft_lcd_padding): Declare it.
+
+	* src/raster/ftrend1.c (ft_raster1_render): Reworked to use
+	`ft_glyphslot_preset_bitmap'.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Ditto.
+	(ft_smooth_render_lcd, ft_smooth_render_lcd): The pixel_mode setting
+	is moved to `ft_glyphslot_preset_bitmap'.
+
+2017-09-28  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Fix compiler warning.
+
+	* src/psaux/pshints.c (cf2_hintmap_dump): Add switch for tracing
+	code.
+
+2017-09-27  Werner Lemberg  <wl@gnu.org>
+
+	* src/sfnt/ttload.c (tt_face_load_font_dir): Fix compiler warning.
+
+2017-09-25  Werner Lemberg  <wl@gnu.org>
+
+	[psaux] Fix compiler warnings.
+
+	* src/psaux/psft.c (cf2_initLocalRegionBuffer): Remove redundant
+	test.
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString)
+	<cf2_escCALLOTHERSUBR>: Add casts.
+
+	* src/psaux/psobjs.c (ps_decoder_init): Add cast.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Minor fixes.
+
+	* include/freetype/internal/psaux.h, src/psaux/psobjs.{c,h}:
+	Rearrange `ps_builder_init' arguments to conventional order.
+
+	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Add a check and
+	notice for `SubFont' in Type 1 mode.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Move `psdecode' into `psobjs'.
+
+	As the former only contains a single procedure, move it into
+	`psobjs' for simplicity.  Also change the parameter order to the
+	conventional one.
+
+	* src/psaux/psdecode.c (ps_decoder_init): Moved to...
+	* src/psaux/psobjs.c: ...Here.
+	* src/psaux/psdecode.h, src/psaux/psobjs.h: Ditto.
+
+	* include/freetype/internal/psaux.h (PSAux_ServiceRec): Update
+	`ps_decoder_init' function signature.
+
+	* src/cff/cffgload.c, src/cid/cidgload.c, src/type1/t1gload.c:
+	Update calls.
+
+	* src/psaux/psaux.c, src/psaux/psauxmod.c: Update includes.
+
+	* src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRV_SRC):
+	Update file references.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Fix Type 1 hinting.
+
+	Type 1 hinting breaks sometimes when mid-charstring hints should
+	have been in the initial hintmap.  This fix adds a preprocessing
+	pass that reads all hints and builds the correct initial hintmap
+	first, before proceeding to build the glyph outline.
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString): New
+	`initial_map_ready' boolean flag.
+	Ignore outline commands and hint changes on first pass.
+	<cf2_cmdENDCHAR>: Add section to build hintmap and rewind.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Add tracing for hints.
+
+	* src/psaux/pshints.c (cf2_hintmap_dump): New function.
+	(cf2_hintmap_insertHint): Trace incoming and inserted hints.
+	(cf2_hintmap_build): Dump hintmap before and after hint adjustment.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Minor fixes.
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString): Fix check for pop
+	results.
+	s/font->decoder/decoder/ where necessary.
+	<cf2_cmdHSTEM, cf2_cmdVSTEM, cf2_escHSTEM3, cf2_escVSTEM3>: Use
+	offset parameter in `cf2_doStems' instead of doing correction for
+	left-sidebearing.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[cid] Use the new engine.
+
+	* src/cid/cidgload.c: Update includes.
+	(cid_load_glyph, cid_slot_load_glyph): Implement changes to glyph
+	loading code as with `type1' module.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[cid] Add Adobe engine configuration.
+
+	This is similar to what was done in the `type1' module.
+
+	* src/cid/cidriver.c (t1cid_driver_class): Update declaration.
+	* src/cid/cidobjs.c: Include FT_TYPE1_DRIVER_H.
+	(cid_driver_init): Update code.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Change subfont synthesis for CID fonts.
+
+	Change `t1_make_subfont' to take in the Private dict record as an
+	argument.  This is because Type 1 and CID font records in FreeType
+	have this in different places.
+
+	* src/psaux/psobjs.c (t1_make_subfont): Change `T1_Face' to
+	`FT_Face' so that CID is also accepted.
+	Take `PS_Private' as an argument and let caller figure out where the
+	Private dict actually is.
+	Update references.
+
+	* include/freetype/internal/psaux.h, src/psaux/psobjs.h: Update
+	declaration.
+
+	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Update
+	call.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[type1] Switch to Adobe engine.
+
+	* src/type1/t1objs.c (T1_Driver_Init): Set default to Adobe engine.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (seac).
+
+	This concludes the changes needed to add Type 1 support.
+
+	* src/psaux/psintrp.c: Update includes.
+	(cf2_interpT2CharString) <cf2_escSEAC>: Implement this similarly to
+	implied seac for CFF.
+
+	* src/psaux/t1decode.c (t1_lookup_glyph_by_stdcharcode_ps): New
+	function to look up the glyph index.
+
+	* src/psaux/psft.c (cf2_getT1SeacComponent,
+	cf2_freeT1SeacComponent): New functions to get the charstrings for
+	seac components.
+
+	* src/psaux/t1decode.h, src/psaux/psft.h: Update declarations.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (flex in callothersubr).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString)
+	<cf2_escCALLOTHERSUBR>: Fix Flex feature handling (OtherSubrs 0, 1,
+	2).
+	<cf2_cmdRMOVETO>: Do not actually move the `glyphPath' while doing
+	flex.  This is to avoid closing the current contour.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (callothersubr).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString)
+	<cf2_escCALLOTHERSUBR>: Copy code from
+	`t1_decoder_parse_charstrings' (in `t1decode.c').
+	OtherSubr 3 (change hints) should reset the hintmask, so that the
+	new hints are applied.
+	Fix function calls and stack access.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (pop).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString): Change how unhandled
+	OtherSubr results are stored.  Implement the PostScript stack using
+	an array.
+	<cf2_escPOP>: Ensure that the stack is not cleared after getting
+	`OtherSubr' results.
+	Fix stack access.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (callsubr).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdCALLSUBR>:
+	Type 1 mode.
+
+	* src/psaux/psft.c (cf2_initLocalRegionBuffer): Add Type 1 mode.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (div, four-byte numbers).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_escDIV>: Add
+	Type 1 mode.  Type 1 requires large integers to be followed by
+	`div'; cf. `Adobe Type 1 Font Format', section 6.2.
+	<op == 255>: Push Type 1 four-byte numbers as `Int' always.  This is
+	to ensure `div' and `callsubr' get values they can use.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (hints).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <cf2_cmdHSTEM,
+	cf2_cmdVSTEM>: Add correction for left sidebearing in Type 1 mode.
+	Allow adding hints mid-charstring.
+	<cf2_escVSTEM3, cf2_escHSTEM3>: Translate into equivalent commands
+	for three normal stem hints.  This requires some recalculation of
+	stem positions.
+	Correction for left sidebearing.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (hsbw, sbw).
+
+	* src/psaux/psintrp.c (cf2_doStems): `hsbw' or `sbw' must be the
+	first operation in a Type 1 charstring.
+	(cf2_interpT2CharString): Remove unused variables.
+	<cf2_cmdHMOVETO, cf2_cmdVMOVETO, cf2_cmdRMOVETO>: `hsbw' or `sbw'
+	must be the first operation in a Type 1 charstring.
+	<cf2_cmdHSBW, cf2_escSBW>: Fix data access and add correction for
+	left sidebearing.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (setcurrentpoint).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString)
+	<cf2_escSETCURRENTPT>: Fix stack access.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Extend Adobe interpreter (closepath).
+
+	* src/psaux/psintrp.c (cf2_interpT2CharString) <c2f_cmdCLOSEPATH>:
+	Use the right builder function.  We can use the `haveWidth' boolean
+	already present, instead of implementing `parse_state'.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Add Type 1 operations to Adobe CFF interpreter.
+
+	The following Type 1 specific ops have been added (copied from
+	`t1decode'):
+
+	  closepath
+	  vstem3
+	  hstem3
+	  seac
+	  sbw
+	  callothersubr
+	  pop
+	  setcurrentpoint
+	  hsbw
+
+	The following require a Type 1 mode, because of differences in
+	specification:
+
+	  hstem
+	  vstem
+	  vmoveto
+	  callsubr
+	  div
+	  rmoveto
+	  hmoveto
+	  Numbers
+
+	The subsequent commits will implement these changes and adapt
+	accesses of data and objects to the new interpreter.
+
+	NOTE: Will not compile in the meantime!
+
+	* src/psaux/psintrp.c: Add opcodes to enum.
+	(cf2_interpT2CharString): Copy relevant code over from
+	`t1_decoder_parse_charstrings' (in `t1decode.c').
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[type1] Fixes for rendering.
+
+	The Type 1 advance width calculation passes null for glyph slot,
+	etc, which can cause null pointer access in the new interpreter.
+	Fall back to the old one for now.
+
+	Fix the large glyph retry code and ensure hinting and scaling flags
+	are set properly.
+
+	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add a
+	check for metrics_only.
+	Set the `force_scaling' flag.
+	(T1_Parse_Glyph): Updated.
+	(T1_Load_Glyph): Add `hinting' and `scaled' flags.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Add missing objects (2/2).
+
+	Synthesize a `SubFont' object for Type 1 fonts.  This is used in the
+	interpreter to access Private dict data, which are stored in
+	different places for Type 1 and CFF.  This allows the same data to
+	be used in either mode.
+
+	* src/psaux/psobjs.c (t1_make_subfont): New procedure to copy
+	required values to a dummy `CFF_SubFont' object.  This is similar to
+	`cff_make_private_dict'.
+	* src/psaux/psobjs.h: Add the new declaration.
+
+	* include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Ditto.
+	Add this to the PSAux Service for future use with CID fonts.
+
+	* src/type1/t1gload.c: Include FT_INTERNAL_CFF_TYPES_H.
+	(T1_Parse_Glyph_And_Get_Char_String): Add the call.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Add missing objects for Type 1 (1/2).
+
+	Move `CF2_Font' instance to `PS_Decoder'.  This is the context for
+	the interpreter and since it is currently stored in `CFF_Font', is
+	unavailable in Type 1 mode.
+
+	* include/freetype/internal/psaux.h (T1_Decoder, PS_Decoder): New
+	`cf2_instance' field.
+
+	* src/psaux/psdecode.c (ps_decoder_init): Copy `cf2_instance' to
+	`PS_Decoder'.
+
+	* src/psaux/t1decode.c (t1_decoder_done): Add finalization code.
+
+	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Update accesses.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	Allow `type1' module to use the Adobe engine.
+
+	Add the callback and some conditionals to switch between the two
+	engines.
+
+	* include/freetype/internal/psaux.h (T1_Decoder_FuncsRec): Change
+	function declarations.
+	* src/psaux/psauxmod.c (T1_Decoder_FuncsRec): Register the
+	callbacks.
+
+	* src/psaux/psobjs.c (ps_builder_add_point): Add conditionals for
+	number conversion.
+
+	* src/type1/t1gload.c (T1_Parse_Glyph_And_Get_Char_String): Add code
+	to choose which renderer to use.
+
+	* src/cid/cidgload.c (cid_load_glyph): Update call.
+	* src/base/ftobjs.c, src/psaux/psobjs.c, src/type1/t1gload.c: Update
+	includes.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[type1] Add Adobe engine configuration.
+
+	Use the previously changed PS_Driver in type1 module to store
+	hinting engine configuration.
+
+	* include/freetype/ftt1drv.h: New file.
+	Duplicate and rename config options from CFF.
+	* include/freetype/config/ftheader.h (FT_TYPE1_DRIVER_H): New macro.
+
+	* src/type1/t1driver.c (t1_driver_class): Update declaration.
+	* src/type1/t1objs.c: Include FT_TYPE1_DRIVER_H.
+	(T1_Driver_Init): Update code.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[cff] Move and rename `CFF_Driver'.
+
+	This is so that we can use the same hinting engine parameters for
+	Type 1.
+
+	* include/freetype/internal/cffotypes.h (CFF_Driver): Rename and
+	move to...
+	* include/freetype/internal/psaux.h (PS_Driver): ...here.
+
+	* src/cff/cffdrivr.c, src/cff/cffgload.c, src/cff/cffload.c,
+	src/cff/cffobjs.c, src/cff/cffobjs.h, src/psaux/psft.c,
+	src/psaux/psobjs.c: Update references.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, type1] Reorganize object fields.
+
+	Make some fields more generic, so that we can access them the same
+	way regardless of Type 1 or CFF.
+
+	* include/freetype/internal/psaux.h (PS_Builder): Change `TT_Face'
+	to `FT_Face'.
+	Remove unused fields.
+
+	* src/psaux/psft.c: Update all accesses of `PS_Builder.face'.
+	Add some asserts to guard against casting `T1_Face' as `TT_Face'.
+
+	* src/type1/t1objs.h (T1_GlyphSlot): Reorder fields to follow
+	`CFF_GlyphSlot', so that we can pretend they are the same in the
+	interpreter.
+
+	* src/psaux/psobjs.c (ps_builder_init, ps_builder_add_point):
+	Updated with above changes.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Prepare for Type 1 mode.
+
+	Add some checks for Type 1 data passing through.
+
+	* src/psaux/psfont.h (CF2_Font): Add `isT1' flag.
+	* src/psaux/psfont.c (cf2_font_setup): Skip the variations and blend
+	code which is not applicable for Type 1.
+
+	* src/psaux/psft.c (cf2_decoder_parse_charstrings): Avoid accessing
+	`decoder->cff' in Type 1 mode.
+	Copy `is_t1' flag to `CF2_Font'.
+
+2017-09-25  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Use the new objects.
+
+	* include/freetype/internal/psaux.h, src/psaux/psauxmod.c: Fix
+	switching between new and old engines.
+
+	* src/cff/cffgload.c, src/cff/cffparse.c: Update calls.
+
+	* src/psaux/psblues.c, src/psaux/psfont.c, src/psaux/psfont.h,
+	src/psaux/psft.c, src/psaux/psft.h, src/psaux/psintrp.c: Update all
+	to use new objects.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Objects for new interpreter (part 2).
+
+	Make the new objects copy over values.  They are essentially wrapper
+	types for the different decoders/builders.
+
+	* include/freetype/internal/psaux.h: Update declarations.
+	(PS_Builder): Add `is_t1' flag.
+	(PS_Decoder_{Get,Free}_Glyph_Callback): Renamed to...
+	(CFF_Decoder_{Get,Free}_Glyph_Callback: ... this.
+	(PS_Decoder): Updated.
+	Add `t1_parse_callback' member.
+	(PSAux_ServiceRec): Add `ps_decoder_init' member.
+
+	* src/psaux/psdecode.h, src/psaux/psobjs.h: Update declarations.
+
+	* src/psaux/psdecode.c, src/psaux/psobjs.c: Implement copy with two
+	modes.
+
+	* src/psaux/psauxmod.c: Add builder and decoder functions to `PSAux'
+	service.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Add objects for new interpreter.
+
+	Introduce `PS_Decoder' and `PS_Builder' which include all fields
+	from either Type 1 or CFF decoders/builders.
+
+	* include/freetype/internal/psaux.h (PS_Builder, PS_Decoder): New
+	structs.
+
+	* src/psaux/psobjs.c, src/psaux/psobjs.h: Add `PS_Builder'
+	functions.
+
+	* src/psaux/psdecode.c, src/psaux/psdecode.h: New files to hold
+	`PS_Decoder' initialization functions.
+
+	* src/psaux/psaux.c, src/psaux/Jamfile (_sources),
+	src/psaux/rules.mk (PSAUX_DRV_SRC): Updated.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Rename files.
+
+	Replace the `cf2' file name prefix with `ps' as the Adobe engine
+	will be used for both PostScript Types 1 and 2 (CFF) instead of just
+	CFF.
+
+	s/cf2/ps/ for all following.
+
+	* src/psaux/cf2*: Rename files.
+	* src/psaux/*: Update includes.
+
+	* src/psaux/Jamfile (_sources), src/psaux/rules.mk (PSAUX_DRC_SRC,
+	PSAUX_DRV_H): Update file references.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux] Minor fix.
+
+	Use `MultiMasters' service in `psaux' instead of a call to `cff'.
+	The project builds if CFF_CONFIG_OPTION_OLD_ENGINE is not defined.
+
+	* src/psaux/cf2ft.c: Update includes.
+	(cf2_getNormalizedVector): Use `mm->get_var_blend' instead of
+	`cff_get_var_blend'.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Move `cff_random' into `psaux' service.
+
+	NOTE: Does not compile!
+
+	Minor fix to allow both `cff' and `psaux' to use `cff_random'.
+
+	* src/cff/cffload.c (cff_random): Move to...
+	* src/psaux/psobjs.c: Here.
+	* src/cff/cffload.h: Move corresponding declaration to
+	`src/psaux/psobjs.h'.
+
+	* include/freetype/internal/psaux.h (PSAux_ServiceRec): Register the
+	function here...
+	* src/psaux/psauxmod.c: And here.
+
+	* src/cff/cffload.c, src/psaux/cf2intrp.c: Update code.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[cff] Move struct declarations to `freetype/internal'.
+
+	NOTE: Does not compile!
+
+	This is so that the CFF functions moved to `psaux' can access the
+	same structs that they need.
+
+	* src/cff/cfftypes.h: Moved to...
+	* include/freetype/internal/cfftypes.h: ...Here.
+
+	* src/cff/cffobjs.h: Moved the struct declarations to...
+	* include/freetype/internal/cffotypes.h: ... this new file.
+
+	* include/freetype/internal/internal.h (FT_INTERNAL_CFF_TYPES_H,
+	FT_INTERNAL_CFF_OBJECT_TYPES_H): New macros.
+
+	* src/cff/cffcmap.h, src/cff/cffdrivr.c, src/cff/cffgload.c,
+	src/cff/cffgload.h, src/cff/cffload.h, src/cff/cffobjs.c,
+	src/cff/cffobjs.h, src/cff/cffparse.h, src/psaux/psobjs.h,
+	include/freetype/internal/psaux.h,
+	include/freetype/internal/services/svcfftl.h: Update includes.
+
+	* src/cff/rules.mk (CFF_DRV_H): Updated.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Add new service for inter-module calls.
+
+	NOTE: Does not compile!
+
+	This is to allow CFF functions moved to `psaux' to call functions
+	declared in `src/cff/cffload.h'.
+
+	* include/freetype/internal/services/svcfftl.h: New file, setting up
+	a `CFFLoad' service.
+
+	* include/freetype/internal/ftserv.h (FT_DEFINE_SERVICEDESCREC10,
+	FT_DEFINE_SERVICEDESCREC): New macros.
+	(FT_SERVICE_CFF_TABLE_LOAD_H): New macro.
+
+	* src/cff/cffdrivr.c, src/cff/cffpic.h: Register the new service.
+
+	* src/cff/cfftypes.h (CFF_FontRec), src/psaux/cf2font.h
+	(CF2_FontRec): Add service interface.
+
+	* src/cff/cffobjs.c, src/psaux/cf2font.c, src/psaux/cf2ft.c,
+	src/psaux/cf2intrp.c, src/psaux/cffdecode.c: Use the new service.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Add callbacks for inter-module calls.
+
+	NOTE: Does not compile!
+
+	* include/freetype/internal/psaux.h: Add function pointer
+	declarations.
+
+	* src/psaux/cffdecode.c (cff_decoder_init): Update to take in
+	callbacks.
+	* src/psaux/cffdecode.h: Ditto.
+
+	* src/cff/cffgload.c (cff_compute_max_advance, cff_slot_load):
+	Update calls to pass in callbacks.
+	* src/psaux/cf2ft.c, src/psaux/cffdecode.c: Use them.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Create new `PSAux' service interface entries.
+
+	NOTE: Does not compile!
+
+	* include/freetype/internal/psaux.h: Include
+	FT_INTERNAL_TRUETYPE_TYPES_H.
+	(CFF_Builder_FuncsRec, CFF_Decocer_FuncsRec): New function tables.
+	(CFF_Builder): Updated.
+	Fix for forward declaration.
+	(PSAux_ServiceRec): New field `cff_decoder_funcs'.
+
+	* src/psaux/psauxmod.c (cff_builder_funcs, cff_decoder_funcs): New
+	function tables.
+	(PSAux_Interface): Updated.
+
+	* include/freetype/internal/tttypes.h (TT_FaceRec): Add `psaux'
+	service interface.
+
+	* src/cff/cffgload.c, src/cff/cffobjs.c, src/cff/cffparse.c: Update
+	function calls to use psaux service.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Move CFF builder components into `psaux' module.
+
+	NOTE: Does not compile!
+
+	* src/cff/cffgload.c
+	(cff_builder_{init,done,add_point,add_point1,add_contour,start_point,close_contour},
+	cff_check_points): Move to...
+	* src/psaux/psobjs.c: Here.
+
+	* src/cff/cffgload.h: Move corresponding declarations to
+	`src/psaux/psobjs.h'.
+
+	* src/cff/cffgload.h (CFF_Builder): Move struct declaration to...
+	* include/freetype/internal/psaux.h: Here.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Move CFF decoder components into `psaux' module.
+
+	NOTE: Does not compile!
+
+	* src/cff/cffgload.c (CFF_Operator,
+	CFF_COUNT_{CHECK_WIDTH,EXACT,CLEAR_STACK}, cff_argument_counts,
+	cff_operator_seac, cff_compute_bias,
+	cff_lookup_glyph_by_stdcharcode,
+	cff_decoder_{parse_charstrings,init,prepare}): Move to...
+	* src/psaux/cffdecode.c: This new file.
+
+	* src/cff/cffgload.h: Move corresponding declarations to...
+	* src/psaux/cffdecode.h: This new file.
+
+	* src/cff/cffgload.h (CFF_MAX_{OPERANDS,SUBRS_CALLS,TRANS_ELEMENTS},
+	CFF_Decoder_Zone, CFF_Decoder): Move declarations to...
+	* include/freetype/internal/psaux.h: Here.
+
+	* src/psaux/cf2ft.h: Update include.
+
+	* src/psaux/psaux.c, src/psaux/rules.mk (PSAUX_DRV_SRC): Update with
+	the new file.
+
+2017-09-24  Ewald Hew  <ewaldhew@gmail.com>
+
+	[psaux, cff] Move Adobe's engine components into `psaux' module.
+
+	This is the first patch of a sequence to move the Type 2 charstring
+	processing capability from the `cff' module to the `psaux' module.
+
+	NOTE: Does not compile!
+
+	* src/cff/cf2*: Move these files to...
+	* src/psaux/cf2*: Here.
+
+	* src/cff/Jamfile (_sources), src/cff/rules.mk (CFF_DRV_SRC,
+	CFF_DRV_H), src/cff/cff.c, src/cff/cffgload.c: Remove file
+	references.
+
+	* src/psaux/Jamfile (_sources), src/psaux/rules.mk, src/psaux/psaux.c
+	(PSAUX_DRV_SRC, PSAUX_DRV_H): Add file references.
+
+2017-09-24  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	Tweak per-face LCD filtering controls.
+
+	Thing are simpler with a NULL-function pointer.
+
+	* include/freetype/internal/ftobjs.h (FT_Face_InternalRec): New
+	pointer to the filter function.
+	(FT_LibraryRec): Remove unused `lcd_filter'.
+	(FT_Bitmap_LcdFilterFunc, ft_lcd_filter_fir):  Move from here...
+	* include/freetype/ftlcdfil.h (FT_Bitmap_LcdFilterFunc,
+	ft_lcd_filter_fir): ... to here.
+
+	* src/base/ftobjs.c (ft_open_face_internal): NULL-initialize the
+	per-face filter.
+	(FT_Face_Properties): Set it.
+	* src/smooth/ftsmooth.c (ft_smooth_render_generic): Simplify.
+
+	* src/base/ftlcdfil.c (ft_lcd_filter_fir, FT_Libary_SetLcdFilter):
+	Minor.
+
+2017-09-24  Jonathan Kew  <jfkthame@gmail.com>
+
+	[sfnt] Fix `premultiply_data' (#52092).
+
+	* src/sfnt/pngshim.c (premultiply_data): Don't use vector extension
+	if we have less than 16 bytes of data.
+
+2017-09-24  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Fix handling of ValueRecords.
+
+	For GPOS pair positioning format 1 the description of ValueRecords
+	in the OpenType specification (1.8.2, from today) is wrong – the
+	offset has to be taken from the parent structure; in this case the
+	`PairSet' table.
+
+	* src/otvalid/otvgpos.c (otv_PairSet_validate): Set `extra3'.
+	(otv_PairPos_validate): Adjust.
+
+2017-09-23  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Handle `GSUB' and `GPOS' v1.1 tables.
+
+	* src/otvalid/otvgsub.c (otv_GSUB_validate), src/otvalid/otvgpos.c
+	(otv_GPOS_validate): Implement it.
+
+2017-09-23  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Update common table handling to OpenType 1.8.2.
+
+	* src/otvalid/otvcommn.c (otv_Device_validate): Handle
+	VariationIndex subtable.
+	(otv_Lookup_validate): Handle MarkFilteringSet.
+
+2017-09-23  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Windows-style DLL versioning.
+
+	* build/windows/ftver.rc: New VERSIONINFO resource.
+	* build/windows/vc2010/freetype.vcxproj: Further improvements.
+
+2017-09-23  Ben Wagner  <bungeman@google.com>
+
+	[truetype] Really fix #52082.
+
+	* src/truetype/ttinterp.c (Ins_MDRP): Correct conditional.
+
+2017-09-23  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Handle `GDEF' v1.2 and v1.3 tables.
+
+	No validation of variation stuff yet.
+
+	* src/otvalid/otvgdef.c (otv_MarkGlyphSets_validate): New function.
+	(otv_GDEF_validate): Implement it.
+
+2017-09-22  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Handle `BASE' v1.1 table.
+
+	No validation of variation stuff yet.
+
+	* src/otvalid/otvbase.c (otv_BASE_validate): Implement it.
+
+2017-09-22  Werner Lemberg  <wl@gnu.org>
+
+	[otvalid] Macros for 32bit offset support.
+
+	* src/otvalid/otvcommn.h (OTV_OPTIONAL_TABLE32,
+	OTV_OPTIONAL_OFFSET32, OTV_SIZE_CHECK32): New macros.
+
+2017-09-21  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Simplify Visual C++ 2010 project.
+
+	* build/windows/vc2010/freetype.vcxproj: Remove fake singlethreaded
+	configurations and tweak.
+
+2017-09-21  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflow (#52082).
+
+	* src/truetype/ttinterp.c (Ins_MDRP): Avoid FT_ABS.
+
+2017-09-21  Werner Lemberg  <wl@gnu.org>
+
+	[sfnt] Fix postscript name for default instance of variation fonts.
+
+	Problem reported by Behdad.
+
+	* src/sfnt/sfdriver.c (sfnt_get_ps_name): Test
+	`is_default_instance'.
+
+2017-09-21  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix `mmvar' array pointers, part 2.
+
+	The previous commit was incomplete.
+
+	* src/truetype/ttgxvar.c: Properly initialize sub-array offsets for
+	`master' also.
+
+2017-09-21  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Fix `mmvar' array pointers.
+
+	Without this change, clang's AddressSanitizer reports many runtime
+	errors due to misaligned addresses.
+
+	* src/truetype/ttgxvar.c (TT_Get_MM_Var): Use multiples of pointer
+	size for sub-array offsets into `mmvar'.
+
+2017-09-20  Werner Lemberg  <wl@gnu.org>
+
+	[truetype] Integer overflows.
+
+	Changes triggered by
+
+	  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=3429
+
+	* src/truetype/ttinterp.c (Ins_SHPIX, Ins_DELTAP): Use NEG_LONG.
+	(Ins_MIAP): Use SUB_LONG.
+
+2017-09-19  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Fix DLL builds in Visual C++ project.
+
+	* build/windows/vc2010/freetype.vcxproj: Use DynamicLibrary in Debug
+	and Release configurations.
+	* include/freetype/config/ftconfig.h (FT_EXPORT, FT_EXPORT_DEF)
+	[_DLL]: Use Visual C++ extensions.
+
+2017-09-19  John Tytgat  <John.Tytgat@esko.com>
+
+	[cff] Fix family name logic of pure CFF fontdata (#52056).
+
+	1. If `FamilyName' is present in the CFF font, use this for
+	   FT_Face's `family_name'.
+	2. Otherwise, use the face name and chop off any subset prefix.
+	3. If at this point FT_Face's `family_name' is set, use this
+	   together with the full name to determine the style.
+	4. Otherwise, use `CIDFontName' as FT_Face's `family_name'.
+	5. If we don't have a valid style, use "Regular".
+
+	Previously, FT_Face's `family_name' entry for pure CFF fontdata
+	nearly always was the fontname itself, instead of the `FamilyName'
+	entry in the CFF font (assuming there is one).
+
+	* src/cff/cffobjs.c (cff_face_init) [pure_cff]: Implement it.
+
+2017-09-18  Alexei Podtelezhnikov  <apodtele@gmail.com>
+
+	[build] Declutter Visual C++ 2010-2017 project.
+
+	* build/windows/vc2010/freetype.vcxproj: Use MaxSpeed (/02)
+	optimization for Release configuration throughout the project.
+
+
+----------------------------------------------------------------------------
+
+Copyright (C) 2017-2019 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.
+
+
+Local Variables:
+version-control: never
+coding: utf-8
+End:
diff --git a/Jamfile b/Jamfile
index 9078a5f..37b4d58 100644
--- a/Jamfile
+++ b/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 top Jamfile.
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -208,12 +208,13 @@
 
 actions RefDoc
 {
-  python $(FT2_SRC)/tools/docmaker/docmaker.py
+  python -m docwriter
          --prefix=ft2
-         --title=FreeType-2.9.1
+         --title=FreeType-2.10.1
          --output=$(DOC_DIR)
          $(FT2_INCLUDE)/freetype/*.h
          $(FT2_INCLUDE)/freetype/config/*.h
+         $(FT2_INCLUDE)/freetype/cache/*.h
 }
 
 RefDoc  refdoc ;
diff --git a/Jamrules b/Jamrules
index bdd04bc..aa2ef5b 100644
--- a/Jamrules
+++ b/Jamrules
@@ -1,6 +1,6 @@
 # FreeType 2 JamRules.
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/METADATA b/METADATA
index 6d97d66..caf325f 100644
--- a/METADATA
+++ b/METADATA
@@ -9,10 +9,10 @@
     type: GIT
     value: "git://git.sv.nongnu.org/freetype/freetype2.git"
   }
-  version: "96b5e500909cfce39ff78feabefd8063a229b951"
+  version: "VER-2-10-1"
   last_upgrade_date {
-    year: 2018
+    year: 2019
     month: 7
-    day: 27
+    day: 9
   }
 }
diff --git a/Makefile b/Makefile
index 0c7ee0e..3f6a8be 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/README b/README
index c23b99e..8f3e2bc 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
-  FreeType 2.9.1
-  ==============
+  FreeType 2.10.1
+  ===============
 
   Homepage: https://www.freetype.org
 
@@ -15,8 +15,8 @@
   Read the  files `docs/INSTALL*'  for installation  instructions; see
   the file `docs/LICENSE.TXT' for the available licenses.
 
-  The FreeType 2 API reference is located in `docs/reference'; use the
-  file   `ft2-toc.html'   as   the   top  entry   point.    Additional
+  The FreeType  2 API  reference is located  in `docs/reference/site';
+  use  the  file `index.html'  as  the  top entry  point.   Additional
   documentation is available as a separate package from our sites.  Go
   to
 
@@ -24,13 +24,13 @@
 
   and download one of the following files.
 
-    freetype-doc-2.9.1.tar.bz2
-    freetype-doc-2.9.1.tar.gz
-    ftdoc291.zip
+    freetype-doc-2.10.1.tar.xz
+    freetype-doc-2.10.1.tar.gz
+    ftdoc2101.zip
 
   To view the documentation online, go to
 
-    https://www.freetype.org/freetype2/documentation.html
+    https://www.freetype.org/freetype2/docs/
 
 
   Mailing Lists
@@ -71,7 +71,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/README.git b/README.git
index a3d7fc0..95f40e1 100644
--- a/README.git
+++ b/README.git
@@ -37,7 +37,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/autogen.sh b/autogen.sh
index ab90e64..af6cf34 100755
--- a/autogen.sh
+++ b/autogen.sh
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/amiga/README b/builds/amiga/README
index 29e97d6..ff5e652 100644
--- a/builds/amiga/README
+++ b/builds/amiga/README
@@ -1,7 +1,7 @@
 
 README for the builds/amiga subdirectory.
 
-Copyright 2005-2018 by
+Copyright (C) 2005-2019 by
 Werner Lemberg and Detlef Würkner.
 
 This file is part of the FreeType project, and may only be used, modified,
@@ -26,7 +26,7 @@
 http://ragriffi.home.sprynet.com).
 
 You will also need the latest include files and amiga.lib from the
-Amiga web site (http://www.amiga.com/3.9/download/NDK3.9.lha) for
+Amiga web site (https://os.amigaworld.de/download.php?id=3) for
 AmigaOS 3.9; the generated code should work under AmigaOS 2.04 and up.
 
 To use it, call "smake assign" and then "smake" from the builds/amiga
diff --git a/builds/amiga/include/config/ftconfig.h b/builds/amiga/include/config/ftconfig.h
index 0217e0e..7c5fa02 100644
--- a/builds/amiga/include/config/ftconfig.h
+++ b/builds/amiga/include/config/ftconfig.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Amiga-specific configuration file (specification only).              */
 /*                                                                         */
-/*  Copyright 2005-2018 by                                                 */
+/*  Copyright (C) 2005-2019 by                                             */
 /*  Werner Lemberg and Detlef Würkner.                                     */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
diff --git a/builds/amiga/include/config/ftmodule.h b/builds/amiga/include/config/ftmodule.h
index f8baab5..9dc4631 100644
--- a/builds/amiga/include/config/ftmodule.h
+++ b/builds/amiga/include/config/ftmodule.h
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Amiga-specific FreeType module selection.                            */
 /*                                                                         */
-/*  Copyright 2005-2018 by                                                 */
+/*  Copyright (C) 2005-2019 by                                             */
 /*  Werner Lemberg and Detlef Würkner.                                     */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
diff --git a/builds/amiga/makefile b/builds/amiga/makefile
index 6a7700a..92da26d 100644
--- a/builds/amiga/makefile
+++ b/builds/amiga/makefile
@@ -5,7 +5,7 @@
 #
 
 
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # Werner Lemberg and Detlef Würkner.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/amiga/makefile.os4 b/builds/amiga/makefile.os4
index 0d340cf..823b9b5 100644
--- a/builds/amiga/makefile.os4
+++ b/builds/amiga/makefile.os4
@@ -4,7 +4,7 @@
 #
 
 
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # Werner Lemberg and Detlef Würkner.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/amiga/smakefile b/builds/amiga/smakefile
index f5de308..ded76a0 100644
--- a/builds/amiga/smakefile
+++ b/builds/amiga/smakefile
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # Werner Lemberg and Detlef Würkner.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c
index f3ba48c..4a738d3 100644
--- a/builds/amiga/src/base/ftdebug.c
+++ b/builds/amiga/src/base/ftdebug.c
@@ -1,67 +1,69 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftdebug.c                                                              */
-/*                                                                         */
-/*    Debugging and logging component for amiga (body).                    */
-/*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
-/*  David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner.       */
-/*                                                                         */
-/*  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.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ *   Debugging and logging component for amiga (body).
+ *
+ * Copyright (C) 1996-2019 by
+ * David Turner, Robert Wilhelm, Werner Lemberg, and Detlef Wuerkner.
+ *
+ * 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.
+ *
+ */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* This component contains various macros and functions used to ease the */
-  /* debugging of the FreeType engine.  Its main purpose is in assertion   */
-  /* checking, tracing, and error detection.                               */
-  /*                                                                       */
-  /* There are now three debugging modes:                                  */
-  /*                                                                       */
-  /* - trace mode                                                          */
-  /*                                                                       */
-  /*   Error and trace messages are sent to the log file (which can be the */
-  /*   standard error output).                                             */
-  /*                                                                       */
-  /* - error mode                                                          */
-  /*                                                                       */
-  /*   Only error messages are generated.                                  */
-  /*                                                                       */
-  /* - release mode:                                                       */
-  /*                                                                       */
-  /*   No error message is sent or generated.  The code is free from any   */
-  /*   debugging parts.                                                    */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * This component contains various macros and functions used to ease the
+   * debugging of the FreeType engine.  Its main purpose is in assertion
+   * checking, tracing, and error detection.
+   *
+   * There are now three debugging modes:
+   *
+   * - trace mode
+   *
+   *   Error and trace messages are sent to the log file (which can be the
+   *   standard error output).
+   *
+   * - error mode
+   *
+   *   Only error messages are generated.
+   *
+   * - release mode:
+   *
+   *   No error message is sent or generated.  The code is free from any
+   *   debugging parts.
+   *
+   */
 
 
   /*
-   * Based on the default ftdebug.c,
-   * replaced vprintf() with KVPrintF(),
-   * commented out exit(),
-   * replaced getenv() with GetVar().
+   * Based on the default `ftdebug.c' file,
+   * replaced `vprintf' with `KVPrintF',
+   * commented out `exit',
+   * replaced `getenv' with `GetVar'.
    */
 
 #include <exec/types.h>
 #include <utility/tagitem.h>
 #include <dos/exall.h>
 #include <dos/var.h>
+
 #define __NOLIBBASE__
 #define __NOLOBALIFACE__
 #define __USE_INLINE__
+
 #include <proto/dos.h>
 #include <clib/debug_protos.h>
 
 #ifndef __amigaos4__
-  extern struct Library *DOSBase;
+  extern struct Library*  DOSBase;
 #else
-  extern struct DOSIFace *IDOS;
+  extern struct DOSIFace*  IDOS;
 #endif
 
 
@@ -70,7 +72,7 @@
 #include FT_INTERNAL_DEBUG_H
 
 
-#if defined( FT_DEBUG_LEVEL_ERROR )
+#ifdef FT_DEBUG_LEVEL_ERROR
 
   /* documentation is in ftdebug.h */
 
@@ -100,7 +102,7 @@
     KVPrintF( fmt, ap );
     va_end( ap );
 
-/*  exit( EXIT_FAILURE ); */
+    /* exit( EXIT_FAILURE ); */
   }
 
 
@@ -111,9 +113,19 @@
             int          line,
             const char*  file )
   {
+#if 0
+    /* activating the code in this block makes FreeType very chatty */
+    fprintf( stderr,
+             "%s:%d: error 0x%02x: %s\n",
+             file,
+             line,
+             error,
+             FT_Error_String( error ) );
+#else
     FT_UNUSED( error );
     FT_UNUSED( line );
     FT_UNUSED( file );
+#endif
 
     return 0;
   }
@@ -124,9 +136,16 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
 
-  /* array of trace levels, initialized to 0 */
-  int  ft_trace_levels[trace_count];
+  /* array of trace levels, initialized to 0; */
+  /* this gets adjusted at run-time           */
+  static int  ft_trace_levels_enabled[trace_count];
 
+  /* array of trace levels, always initialized to 0 */
+  static int  ft_trace_levels_disabled[trace_count];
+
+  /* a pointer to either `ft_trace_levels_enabled' */
+  /* or `ft_trace_levels_disabled'                 */
+  int*  ft_trace_levels;
 
   /* define array of trace toggle names */
 #define FT_TRACE_DEF( x )  #x ,
@@ -164,33 +183,51 @@
   }
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* Initialize the tracing sub-system.  This is done by retrieving the    */
-  /* value of the `FT2_DEBUG' environment variable.  It must be a list of  */
-  /* toggles, separated by spaces, `;', or `,'.  Example:                  */
-  /*                                                                       */
-  /*    export FT2_DEBUG="any:3 memory:7 stream:5"                         */
-  /*                                                                       */
-  /* This requests that all levels be set to 3, except the trace level for */
-  /* the memory and stream components which are set to 7 and 5,            */
-  /* respectively.                                                         */
-  /*                                                                       */
-  /* See the file `include/freetype/internal/fttrace.h' for details of the */
-  /* available toggle names.                                               */
-  /*                                                                       */
-  /* The level must be between 0 and 7; 0 means quiet (except for serious  */
-  /* runtime errors), and 7 means _very_ verbose.                          */
-  /*                                                                       */
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    ft_trace_levels = ft_trace_levels_disabled;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    ft_trace_levels = ft_trace_levels_enabled;
+  }
+
+
+  /**************************************************************************
+   *
+   * Initialize the tracing sub-system.  This is done by retrieving the
+   * value of the `FT2_DEBUG' environment variable.  It must be a list of
+   * toggles, separated by spaces, `;', or `,'.  Example:
+   *
+   *   export FT2_DEBUG="any:3 memory:7 stream:5"
+   *
+   * This requests that all levels be set to 3, except the trace level for
+   * the memory and stream components which are set to 7 and 5,
+   * respectively.
+   *
+   * See the file `include/freetype/internal/fttrace.h' for details of
+   * the available toggle names.
+   *
+   * The level must be between 0 and 7; 0 means quiet (except for serious
+   * runtime errors), and 7 means _very_ verbose.
+   */
   FT_BASE_DEF( void )
   ft_debug_init( void )
   {
-/*  const char*  ft2_debug = getenv( "FT2_DEBUG" ); */
+    /* const char*  ft2_debug = ft_getenv( "FT2_DEBUG" ); */
     char         buf[256];
     const char*  ft2_debug = &buf[0];
 
 
-/*  if ( ft2_debug ) */
+    /* if ( ft2_debug ) */
     if ( GetVar( "FT2_DEBUG", (STRPTR)ft2_debug, 256, LV_VAR ) > 0 )
     {
       const char*  p = ft2_debug;
@@ -250,14 +287,16 @@
             {
               /* special case for `any' */
               for ( n = 0; n < trace_count; n++ )
-                ft_trace_levels[n] = level;
+                ft_trace_levels_enabled[n] = level;
             }
             else
-              ft_trace_levels[found] = level;
+              ft_trace_levels_enabled[found] = level;
           }
         }
       }
     }
+
+    ft_trace_levels = ft_trace_levels_enabled;
   }
 
 
@@ -287,11 +326,23 @@
   }
 
 
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    /* nothing */
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    /* nothing */
+  }
+
+
 #endif /* !FT_DEBUG_LEVEL_TRACE */
 
-/*
-Local Variables:
-coding: latin-1
-End:
-*/
+
 /* END */
diff --git a/builds/amiga/src/base/ftsystem.c b/builds/amiga/src/base/ftsystem.c
index babaeeb..7e9dcb7 100644
--- a/builds/amiga/src/base/ftsystem.c
+++ b/builds/amiga/src/base/ftsystem.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Amiga-specific FreeType low-level system interface (body).           */
 /*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
+/*  Copyright (C) 1996-2019 by                                             */
 /*  David Turner, Robert Wilhelm, Werner Lemberg and Detlef Würkner.       */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -235,7 +235,7 @@
   /* messages during execution.                                            */
   /*                                                                       */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_io
+#define FT_COMPONENT  io
 
   /* We use the macro STREAM_FILE for convenience to extract the       */
   /* system-specific stream handle from a given FreeType stream object */
diff --git a/builds/ansi/ansi-def.mk b/builds/ansi/ansi-def.mk
index 1484f96..9e1f57d 100644
--- a/builds/ansi/ansi-def.mk
+++ b/builds/ansi/ansi-def.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,9 @@
 BUILD_DIR := $(TOP_DIR)/builds/ansi
 PLATFORM  := ansi
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
 
 # The directory where all library files are placed.
 #
diff --git a/builds/ansi/ansi.mk b/builds/ansi/ansi.mk
index c06732c..eb97df4 100644
--- a/builds/ansi/ansi.mk
+++ b/builds/ansi/ansi.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/beos/beos-def.mk b/builds/beos/beos-def.mk
index 89c54dd..7a9d91c 100644
--- a/builds/beos/beos-def.mk
+++ b/builds/beos/beos-def.mk
@@ -5,7 +5,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -21,6 +21,9 @@
 BUILD_DIR := $(TOP_DIR)/builds/beos
 PLATFORM  := beos
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
 
 # The directory where all library files are placed.
 #
diff --git a/builds/beos/beos.mk b/builds/beos/beos.mk
index 619ceaf..180be58 100644
--- a/builds/beos/beos.mk
+++ b/builds/beos/beos.mk
@@ -2,7 +2,7 @@
 # FreeType 2 configuration rules for a BeOS system
 #
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/beos/detect.mk b/builds/beos/detect.mk
index 82f6205..19205eb 100644
--- a/builds/beos/detect.mk
+++ b/builds/beos/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/cmake/iOS.cmake b/builds/cmake/iOS.cmake
index c6da70c..3a350d2 100644
--- a/builds/cmake/iOS.cmake
+++ b/builds/cmake/iOS.cmake
@@ -1,6 +1,6 @@
 # iOS.cmake
 #
-# Copyright 2014-2018 by
+# Copyright (C) 2014-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # Written by David Wimsey <david@wimsey.us>
diff --git a/builds/cmake/testbuild.sh b/builds/cmake/testbuild.sh
index 1fa3a18..65c481f 100755
--- a/builds/cmake/testbuild.sh
+++ b/builds/cmake/testbuild.sh
@@ -1,6 +1,6 @@
 #!/bin/sh -e
 
-# Copyright 2015-2018 by
+# Copyright (C) 2015-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/ansi-cc.mk b/builds/compiler/ansi-cc.mk
index 99fe8cb..3c3fd73 100644
--- a/builds/compiler/ansi-cc.mk
+++ b/builds/compiler/ansi-cc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/bcc-dev.mk b/builds/compiler/bcc-dev.mk
index 8d67fa1..62a51c4 100644
--- a/builds/compiler/bcc-dev.mk
+++ b/builds/compiler/bcc-dev.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/bcc.mk b/builds/compiler/bcc.mk
index 02d4833..5ba6798 100644
--- a/builds/compiler/bcc.mk
+++ b/builds/compiler/bcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/emx.mk b/builds/compiler/emx.mk
index 2926b11..0c2aa31 100644
--- a/builds/compiler/emx.mk
+++ b/builds/compiler/emx.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/gcc-dev.mk b/builds/compiler/gcc-dev.mk
index 48d2848..46dad39 100644
--- a/builds/compiler/gcc-dev.mk
+++ b/builds/compiler/gcc-dev.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/gcc.mk b/builds/compiler/gcc.mk
index 9c77239..b1ee409 100644
--- a/builds/compiler/gcc.mk
+++ b/builds/compiler/gcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/intelc.mk b/builds/compiler/intelc.mk
index e9236d3..3a19702 100644
--- a/builds/compiler/intelc.mk
+++ b/builds/compiler/intelc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/unix-lcc.mk b/builds/compiler/unix-lcc.mk
index 09fffeb..9fe6753 100644
--- a/builds/compiler/unix-lcc.mk
+++ b/builds/compiler/unix-lcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/visualage.mk b/builds/compiler/visualage.mk
index 10299da..26c99f7 100644
--- a/builds/compiler/visualage.mk
+++ b/builds/compiler/visualage.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/visualc.mk b/builds/compiler/visualc.mk
index 74f498b..17c8e76 100644
--- a/builds/compiler/visualc.mk
+++ b/builds/compiler/visualc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/watcom.mk b/builds/compiler/watcom.mk
index e455922..2ec24ef 100644
--- a/builds/compiler/watcom.mk
+++ b/builds/compiler/watcom.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/compiler/win-lcc.mk b/builds/compiler/win-lcc.mk
index 1356c1c..fc1f23b 100644
--- a/builds/compiler/win-lcc.mk
+++ b/builds/compiler/win-lcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/detect.mk b/builds/detect.mk
index eb7f797..93b2861 100644
--- a/builds/detect.mk
+++ b/builds/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/detect.mk b/builds/dos/detect.mk
index 14d8c03..53c1caa 100644
--- a/builds/dos/detect.mk
+++ b/builds/dos/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-def.mk b/builds/dos/dos-def.mk
index cb1154d..a5c56b6 100644
--- a/builds/dos/dos-def.mk
+++ b/builds/dos/dos-def.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,9 @@
 BUILD_DIR := $(TOP_DIR)/builds/dos
 PLATFORM  := dos
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
 
 # The executable file extension (for tools), *with* leading dot.
 #
diff --git a/builds/dos/dos-emx.mk b/builds/dos/dos-emx.mk
index dedcc3f..dbba33e 100644
--- a/builds/dos/dos-emx.mk
+++ b/builds/dos/dos-emx.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-gcc.mk b/builds/dos/dos-gcc.mk
index 53099ab..c281318 100644
--- a/builds/dos/dos-gcc.mk
+++ b/builds/dos/dos-gcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/dos/dos-wat.mk b/builds/dos/dos-wat.mk
index 1bd00e7..8c5062d 100644
--- a/builds/dos/dos-wat.mk
+++ b/builds/dos/dos-wat.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/exports.mk b/builds/exports.mk
index 59fe31a..9dc21e2 100644
--- a/builds/exports.mk
+++ b/builds/exports.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/freetype.mk b/builds/freetype.mk
index 6f68a0f..2b0ffae 100644
--- a/builds/freetype.mk
+++ b/builds/freetype.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -75,7 +75,7 @@
 # The targets `objects' and `library' are defined at the end of this
 # Makefile after all other rules have been included.
 #
-.PHONY: single multi objects library refdoc
+.PHONY: single multi objects library refdoc refdoc-venv
 
 # default target -- build single objects and library
 #
@@ -289,18 +289,53 @@
 
 library: $(PROJECT_LIBRARY)
 
-
+# Run `docwriter' in the current Python environment.
 # Option `-B' disables generation of .pyc files (available since python 2.6)
 #
-refdoc:
-	python -B $(SRC_DIR)/tools/docmaker/docmaker.py \
-                  --prefix=ft2                          \
-                  --title=FreeType-$(version)           \
-                  --output=$(DOC_DIR)                   \
-                  $(PUBLIC_DIR)/*.h                     \
-                  $(PUBLIC_DIR)/config/*.h              \
-                  $(PUBLIC_DIR)/cache/*.h
 
+PYTHON ?= python
+PIP    ?= pip
+
+refdoc:
+	@echo Running docwriter...
+	$(PYTHON) -m docwriter \
+                  --prefix=ft2 \
+                  --title=FreeType-$(version) \
+                  --output=$(DOC_DIR) \
+                  $(PUBLIC_DIR)/*.h \
+                  $(PUBLIC_DIR)/config/*.h \
+                  $(PUBLIC_DIR)/cache/*.h
+	@echo Building static site...
+	cd $(DOC_DIR) && mkdocs build
+	@echo Done.
+
+# Variables for running `refdoc' with Python's `virtualenv'.  The
+# environment is created in `DOC_DIR/env' and is gitignored.
+#
+# We still need to cd into `DOC_DIR' to build `mkdocs' because paths in
+# `mkdocs.yml' are relative to the current working directory.
+#
+VENV_NAME  := env
+VENV_DIR   := $(DOC_DIR)$(SEP)$(VENV_NAME)
+ENV_PYTHON := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PYTHON)
+ENV_PIP    := $(VENV_DIR)$(SEP)$(BIN)$(SEP)$(PIP)
+
+refdoc-venv:
+	@echo Setting up virtualenv for Python...
+	virtualenv --python=$(PYTHON) $(VENV_DIR)
+	@echo Installing docwriter...
+	$(ENV_PIP) install docwriter
+	@echo Running docwriter...
+	$(ENV_PYTHON) -m docwriter \
+                      --prefix=ft2 \
+                      --title=FreeType-$(version) \
+                      --output=$(DOC_DIR) \
+                      $(PUBLIC_DIR)/*.h \
+                      $(PUBLIC_DIR)/config/*.h \
+                      $(PUBLIC_DIR)/cache/*.h
+	@echo Building static site...
+	cd $(DOC_DIR) && $(VENV_NAME)$(SEP)$(BIN)$(SEP)python -m mkdocs build
+	@echo Done.
 
 .PHONY: clean_project_std distclean_project_std
 
diff --git a/builds/link_dos.mk b/builds/link_dos.mk
index 3b0e8da..4c9076a 100644
--- a/builds/link_dos.mk
+++ b/builds/link_dos.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/link_std.mk b/builds/link_std.mk
index 8ba5e64..7eedf1e 100644
--- a/builds/link_std.mk
+++ b/builds/link_std.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/mac/README b/builds/mac/README
index f58e47d..092487a 100644
--- a/builds/mac/README
+++ b/builds/mac/README
@@ -46,7 +46,7 @@
 
   Required files are downloadable from:
 
-      http://developer.apple.com/tools/mpw-tools/index.html
+      http://macintoshgarden.org/apps/macintosh-programmers-workshop
 
   Also you can find documents how to update by MPW-PR.
 
@@ -54,7 +54,7 @@
   skeletons. Python bundled to Mac OS X is enough. For
   classic MacOS, MacPython is available:
 
-      http://homepages.cwi.nl/~jack/macpython/
+      https://homepages.cwi.nl/~jack/macpython/
 
   MPW requires all files are typed by resource fork.
   ResEdit bundled to MPW is enough. In Mac OS X,
@@ -280,7 +280,7 @@
     migrate to FSRef datatype. The big differences of FSRef
     against FSSpec are explained in Apple TechNotes 2078.
 
-    http://developer.apple.com/technotes/tn2002/tn2078.html
+    https://developer.apple.com/library/archive/technotes/tn2078/
 
     - filename length: the max length of file
     name of FSRef is 255 chars (it is limit of HFS+),
@@ -314,7 +314,7 @@
     of FontManager emulation without QuickDraw is
     explained in
 
-      http://www.gyve.org/~mpsuzuki/ats_benchmark.html
+      http://gyvern.ipc.hiroshima-u.ac.jp/~mpsuzuki/ats_benchmark.html
 
   A-3. Framework Availabilities
   -----------------------------
diff --git a/builds/mac/freetype-Info.plist b/builds/mac/freetype-Info.plist
index b3d114d..4b5d79b 100644
--- a/builds/mac/freetype-Info.plist
+++ b/builds/mac/freetype-Info.plist
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
-          "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+          "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
 
 <plist version="1.0">
 
diff --git a/builds/mac/ftmac.c b/builds/mac/ftmac.c
index c45546c..6adf800 100644
--- a/builds/mac/ftmac.c
+++ b/builds/mac/ftmac.c
@@ -5,7 +5,7 @@
 /*    Mac FOND support.  Written by just@letterror.com.                    */
 /*  Heavily Fixed by mpsuzuki, George Williams and Sean McBride            */
 /*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
+/*  Copyright (C) 1996-2019 by                                             */
 /*  Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.     */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -780,9 +780,10 @@
       style = (StyleTable*)p;
       p += sizeof ( StyleTable );
       string_count = EndianS16_BtoN( *(short*)(p) );
+      string_count = FT_MIN( 64, string_count );
       p += sizeof ( short );
 
-      for ( i = 0; i < string_count && i < 64; i++ )
+      for ( i = 0; i < string_count; i++ )
       {
         names[i] = p;
         p       += names[i][0];
@@ -799,7 +800,7 @@
           ps_name[ps_name_len] = 0;
         }
         if ( style->indexes[face_index] > 1 &&
-             style->indexes[face_index] <= FT_MIN( string_count, 64 ) )
+             style->indexes[face_index] <= string_count )
         {
           unsigned char*  suffixes = names[style->indexes[face_index] - 1];
 
diff --git a/builds/modules.mk b/builds/modules.mk
index 9a7a4a0..8886fb3 100644
--- a/builds/modules.mk
+++ b/builds/modules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/os2/detect.mk b/builds/os2/detect.mk
index 5a80a22..8e29450 100644
--- a/builds/os2/detect.mk
+++ b/builds/os2/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/os2/os2-def.mk b/builds/os2/os2-def.mk
index 7ad1ffb..7a1699e 100644
--- a/builds/os2/os2-def.mk
+++ b/builds/os2/os2-def.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,10 @@
 BUILD_DIR := $(TOP_DIR)/builds/os2
 PLATFORM  := os2
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
+
 # The executable file extension (for tools), *with* leading dot.
 #
 E := .exe
diff --git a/builds/os2/os2-dev.mk b/builds/os2/os2-dev.mk
index 505a754..1b83836 100644
--- a/builds/os2/os2-dev.mk
+++ b/builds/os2/os2-dev.mk
@@ -5,7 +5,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/os2/os2-gcc.mk b/builds/os2/os2-gcc.mk
index 65026b1..63a3ed1 100644
--- a/builds/os2/os2-gcc.mk
+++ b/builds/os2/os2-gcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/symbian/bld.inf b/builds/symbian/bld.inf
index 9c6d8dc..0fa16c3 100644
--- a/builds/symbian/bld.inf
+++ b/builds/symbian/bld.inf
@@ -2,7 +2,7 @@
 // FreeType 2 project for the symbian platform
 //
 
-// Copyright 2008-2018 by
+// Copyright (C) 2008-2019 by
 // David Turner, Robert Wilhelm, and Werner Lemberg.
 //
 // This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/symbian/freetype.mmp b/builds/symbian/freetype.mmp
index 4e4a041..bfbbcaf 100644
--- a/builds/symbian/freetype.mmp
+++ b/builds/symbian/freetype.mmp
@@ -2,7 +2,7 @@
 // FreeType 2 makefile for the symbian platform
 //
 
-// Copyright 2008-2018 by
+// Copyright (C) 2008-2019 by
 // David Turner, Robert Wilhelm, and Werner Lemberg.
 //
 // This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/toplevel.mk b/builds/toplevel.mk
index 7ce0ed8..333b775 100644
--- a/builds/toplevel.mk
+++ b/builds/toplevel.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -191,13 +191,13 @@
 patch := $(subst |,$(space),$(work))
 patch := $(firstword $(patch))
 
-ifneq ($(findstring x0x,x$(patch)x),)
-  version := $(major).$(minor)
-  winversion := $(major)$(minor)
-else
+# ifneq ($(findstring x0x,x$(patch)x),)
+#   version := $(major).$(minor)
+#   winversion := $(major)$(minor)
+# else
   version := $(major).$(minor).$(patch)
   winversion := $(major)$(minor)$(patch)
-endif
+# endif
 
 
 # This target builds the tarballs.
@@ -208,7 +208,7 @@
 dist:
 	-rm -rf tmp
 	rm -f freetype-$(version).tar.gz
-	rm -f freetype-$(version).tar.bz2
+	rm -f freetype-$(version).tar.xz
 	rm -f ft$(winversion).zip
 
 	for d in `find . -wholename '*/.git' -prune \
@@ -226,23 +226,16 @@
 	  ln -s $$currdir/$$f tmp/$$f ; \
 	done
 
-	@# Prevent generation of .pyc files.  Python follows (soft) links if
-	@# the link's directory is write protected, so we have temporarily
-	@# disable write access here too.
-	chmod -w src/tools/docmaker
-
 	cd tmp ; \
 	$(MAKE) devel ; \
 	$(MAKE) do-dist
 
-	chmod +w src/tools/docmaker
-
 	mv tmp freetype-$(version)
 
 	tar -H ustar -chf - freetype-$(version) \
 	| gzip -9 -c > freetype-$(version).tar.gz
 	tar -H ustar -chf - freetype-$(version) \
-	| bzip2 -c > freetype-$(version).tar.bz2
+	| xz -c > freetype-$(version).tar.xz
 
 	@# Use CR/LF for zip files.
 	zip -lr9 ft$(winversion).zip freetype-$(version)
@@ -274,4 +267,8 @@
 	cp $(CONFIG_GUESS) builds/unix
 	cp $(CONFIG_SUB) builds/unix
 
+	@# Remove intermediate files created by the `refdoc' target.
+	rm -rf docs/reference/markdown
+	rm -f docs/reference/mkdocs.yml
+
 # EOF
diff --git a/builds/unix/configure.raw b/builds/unix/configure.raw
index f18bb3d..a1a6dbe 100644
--- a/builds/unix/configure.raw
+++ b/builds/unix/configure.raw
@@ -2,7 +2,7 @@
 #
 # Process this file with autoconf to produce a configure script.
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -17,7 +17,7 @@
 
 # Don't forget to update `docs/VERSIONS.TXT'!
 
-version_info='22:1:16'
+version_info='23:1:17'
 AC_SUBST([version_info])
 ft_version=`echo $version_info | tr : .`
 AC_SUBST([ft_version])
@@ -37,7 +37,7 @@
 PKG_PROG_PKG_CONFIG([0.24])
 
 LT_INIT(win32-dll)
-LT_PROG_RC
+AC_CHECK_HEADER([windows.h], [LT_PROG_RC])
 
 
 # checks for native programs to generate building tool
@@ -196,7 +196,7 @@
 AC_ARG_ENABLE([mmap],
   AS_HELP_STRING([--disable-mmap],
                  [do not check mmap() and do not use]),
-  [enable_mmap="no"],[enable_mmap="yes"])
+  [enable_mmap="no"], [enable_mmap="yes"])
 if test "x${enable_mmap}" != "xno"; then
   AC_FUNC_MMAP
 fi
@@ -315,7 +315,7 @@
 AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
 orig_CFLAGS="${CFLAGS}"
 CFLAGS="${CFLAGS} -fvisibility=hidden"
-AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
                [found_visibility_flag=yes
                 AC_MSG_RESULT(yes)],
                [CFLAGS="${orig_CFLAGS}"
@@ -325,7 +325,7 @@
   AC_MSG_CHECKING([for -xldscope=hidden compiler flag])
   orig_CFLAGS="${CFLAGS}"
   CFLAGS="${CFLAGS} -xldscope=hidden"
-  AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
+  AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],
                  [found_visibility_flag=yes
                   AC_MSG_RESULT(yes)],
                  [CFLAGS="${orig_CFLAGS}"
@@ -968,6 +968,25 @@
     ;;
 esac
 
+# Check for python and docwriter
+
+AC_CHECK_PROGS([PYTHON], [python3 python2 python], [missing])
+have_docwriter=no
+if test "x$PYTHON" != "xmissing"; then
+  AC_CHECK_PROGS([PIP], [pip3 pip2 pip], [missing])
+
+  if test "x$PIP" != "xmissing"; then
+    AC_MSG_CHECKING([for \`docwriter' Python module])
+    $PIP show -q docwriter
+    if test "x$?" = "x0"; then
+      have_docwriter=yes
+      AC_MSG_RESULT([yes])
+    else
+      AC_MSG_RESULT([no])
+    fi
+  fi
+fi
+
 
 # entries in Requires.private are separated by commas;
 REQUIRES_PRIVATE="$zlib_reqpriv,     \
@@ -1112,4 +1131,15 @@
   harfbuzz:      $have_harfbuzz
 ])
 
+# Warn if docwriter is not installed
+
+if test $have_docwriter = no; then
+  AC_MSG_NOTICE([
+  Warning: \`make refdoc' will fail since pip package \`docwriter' is not
+  installed.  To install, run \`$PIP install docwriter', or to use a python
+  virtual environment, run \`make refdoc-venv' (requires pip package
+  \`virtualenv').
+  ])
+fi
+
 # end of configure.raw
diff --git a/builds/unix/detect.mk b/builds/unix/detect.mk
index 5f9b9e2..7ce7d8a 100644
--- a/builds/unix/detect.mk
+++ b/builds/unix/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/freetype-config.in b/builds/unix/freetype-config.in
index 2d5b90d..9e8d3c2 100644
--- a/builds/unix/freetype-config.in
+++ b/builds/unix/freetype-config.in
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright 2000-2018 by
+# Copyright (C) 2000-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/freetype2.m4 b/builds/unix/freetype2.m4
index af2e659..d68d15e 100644
--- a/builds/unix/freetype2.m4
+++ b/builds/unix/freetype2.m4
@@ -1,7 +1,7 @@
 # Configure paths for FreeType2
 # Marcelo Magallon 2001-10-26, based on gtk.m4 by Owen Taylor
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/ft-munmap.m4 b/builds/unix/ft-munmap.m4
index 00eda49..4384013 100644
--- a/builds/unix/ft-munmap.m4
+++ b/builds/unix/ft-munmap.m4
@@ -1,6 +1,6 @@
 ## FreeType specific autoconf tests
 #
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/ftconfig.in b/builds/unix/ftconfig.in
index cdb7f22..019793e 100644
--- a/builds/unix/ftconfig.in
+++ b/builds/unix/ftconfig.in
@@ -1,38 +1,36 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftconfig.in                                                            */
-/*                                                                         */
-/*    UNIX-specific configuration file (specification only).               */
-/*                                                                         */
-/*  Copyright 1996-2018 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.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftconfig.in
+ *
+ *   UNIX-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2019 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.
+ *
+ */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* This header file contains a number of macro definitions that are used */
-  /* by the rest of the engine.  Most of the macros here are automatically */
-  /* determined at compile time, and you should not need to change it to   */
-  /* port FreeType, except to compile the library with a non-ANSI          */
-  /* compiler.                                                             */
-  /*                                                                       */
-  /* Note however that if some specific modifications are needed, we       */
-  /* advise you to place a modified copy in your build directory.          */
-  /*                                                                       */
-  /* The build directory is usually `builds/<system>', and contains        */
-  /* system-specific files that are always included first when building    */
-  /* the library.                                                          */
-  /*                                                                       */
-  /*************************************************************************/
-
+  /**************************************************************************
+   *
+   * This header file contains a number of macro definitions that are used by
+   * the rest of the engine.  Most of the macros here are automatically
+   * determined at compile time, and you should not need to change it to port
+   * FreeType, except to compile the library with a non-ANSI compiler.
+   *
+   * Note however that if some specific modifications are needed, we advise
+   * you to place a modified copy in your build directory.
+   *
+   * The build directory is usually `builds/<system>`, and contains
+   * system-specific files that are always included first when building the
+   * library.
+   *
+   */
 
 #ifndef FTCONFIG_H_
 #define FTCONFIG_H_
@@ -45,30 +43,28 @@
 FT_BEGIN_HEADER
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
-  /*                                                                       */
-  /* These macros can be toggled to suit a specific system.  The current   */
-  /* ones are defaults used to compile FreeType in an ANSI C environment   */
-  /* (16bit compilers are also supported).  Copy this file to your own     */
-  /* `builds/<system>' directory, and edit it to port the engine.          */
-  /*                                                                       */
-  /*************************************************************************/
-
+  /**************************************************************************
+   *
+   *              PLATFORM-SPECIFIC CONFIGURATION MACROS
+   *
+   * These macros can be toggled to suit a specific system.  The current ones
+   * are defaults used to compile FreeType in an ANSI C environment (16bit
+   * compilers are also supported).  Copy this file to your own
+   * `builds/<system>` directory, and edit it to port the engine.
+   *
+   */
 
 #undef HAVE_UNISTD_H
 #undef HAVE_FCNTL_H
 #undef HAVE_STDINT_H
 
-
-  /* There are systems (like the Texas Instruments 'C54x) where a `char' */
-  /* has 16 bits.  ANSI C says that sizeof(char) is always 1.  Since an  */
-  /* `int' has 16 bits also for this system, sizeof(int) gives 1 which   */
-  /* is probably unexpected.                                             */
-  /*                                                                     */
-  /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a      */
-  /* `char' type.                                                        */
+  /* There are systems (like the Texas Instruments 'C54x) where a `char`  */
+  /* has 16~bits.  ANSI~C says that `sizeof(char)` is always~1.  Since an */
+  /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which  */
+  /* is probably unexpected.                                              */
+  /*                                                                      */
+  /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a     */
+  /* `char` type.                                                         */
 
 #ifndef FT_CHAR_BIT
 #define FT_CHAR_BIT  CHAR_BIT
@@ -85,67 +81,66 @@
 
 #else /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
 
-  /* Following cpp computation of the bit length of int and long */
-  /* is copied from default include/freetype/config/ftconfig.h.  */
-  /* If any improvement is required for this file, it should be  */
-  /* applied to the original header file for the builders that   */
-  /* do not use configure script.                                */
+  /* Following cpp computation of the bit length of `int` and `long` */
+  /* is copied from default `include/freetype/config/ftconfig.h`.    */
+  /* If any improvement is required for this file, it should be      */
+  /* applied to the original header file for the builders that do    */
+  /* not use configure script.                                       */
 
-  /* The size of an `int' type.  */
+  /* The size of an `int` type. */
 #if                                 FT_UINT_MAX == 0xFFFFUL
-#define FT_SIZEOF_INT  (16 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT  ( 16 / FT_CHAR_BIT )
 #elif                               FT_UINT_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_INT  (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT  ( 32 / FT_CHAR_BIT )
 #elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_INT  (64 / FT_CHAR_BIT)
+#define FT_SIZEOF_INT  ( 64 / FT_CHAR_BIT )
 #else
 #error "Unsupported size of `int' type!"
 #endif
 
-  /* The size of a `long' type.  A five-byte `long' (as used e.g. on the */
+  /* The size of a `long` type.  A five-byte `long` (as used e.g. on the */
   /* DM642) is recognized but avoided.                                   */
 #if                                  FT_ULONG_MAX == 0xFFFFFFFFUL
-#define FT_SIZEOF_LONG  (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG  ( 32 / FT_CHAR_BIT )
 #elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL
-#define FT_SIZEOF_LONG  (32 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG  ( 32 / FT_CHAR_BIT )
 #elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL
-#define FT_SIZEOF_LONG  (64 / FT_CHAR_BIT)
+#define FT_SIZEOF_LONG  ( 64 / FT_CHAR_BIT )
 #else
 #error "Unsupported size of `long' type!"
 #endif
 
 #endif /* !FT_USE_AUTOCONF_SIZEOF_TYPES */
 
-
-  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
-  /* used -- this is only used to get rid of unpleasant compiler warnings */
+  /* `FT_UNUSED` indicates that a given parameter is not used --   */
+  /* this is only used to get rid of unpleasant compiler warnings. */
 #ifndef FT_UNUSED
 #define FT_UNUSED( arg )  ( (arg) = (arg) )
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /*                     AUTOMATIC CONFIGURATION MACROS                    */
-  /*                                                                       */
-  /* These macros are computed from the ones defined above.  Don't touch   */
-  /* their definition, unless you know precisely what you are doing.  No   */
-  /* porter should need to mess with them.                                 */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   *                    AUTOMATIC CONFIGURATION MACROS
+   *
+   * These macros are computed from the ones defined above.  Don't touch
+   * their definition, unless you know precisely what you are doing.  No
+   * porter should need to mess with them.
+   *
+   */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* Mac support                                                           */
-  /*                                                                       */
-  /*   This is the only necessary change, so it is defined here instead    */
-  /*   providing a new configuration file.                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * Mac support
+   *
+   *   This is the only necessary change, so it is defined here instead
+   *   providing a new configuration file.
+   */
 #if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
-  /* no Carbon frameworks for 64bit 10.4.x */
-  /* AvailabilityMacros.h is available since Mac OS X 10.2,        */
-  /* so guess the system version by maximum errno before inclusion */
+  /* No Carbon frameworks for 64bit 10.4.x.                         */
+  /* `AvailabilityMacros.h` is available since Mac OS X 10.2,       */
+  /* so guess the system version by maximum errno before inclusion. */
 #include <errno.h>
 #ifdef ECANCELED /* defined since 10.2 */
 #include "AvailabilityMacros.h"
@@ -165,7 +160,7 @@
 #endif
 
 
-  /* Fix compiler warning with sgi compiler */
+  /* Fix compiler warning with sgi compiler. */
 #if defined( __sgi ) && !defined( __GNUC__ )
 #if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
 #pragma set woff 3505
@@ -173,33 +168,33 @@
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * @section:
+   *   basic_types
+   *
+   */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int16                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit signed integer type.                         */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int16
+   *
+   * @description:
+   *   A typedef for a 16bit signed integer type.
+   */
   typedef signed short  FT_Int16;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt16                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit unsigned integer type.                       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt16
+   *
+   * @description:
+   *   A typedef for a 16bit unsigned integer type.
+   */
   typedef unsigned short  FT_UInt16;
 
   /* */
@@ -208,50 +203,50 @@
   /* this #if 0 ... #endif clause is for documentation purposes */
 #if 0
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int32                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 32bit signed integer type.  The size depends on    */
-  /*    the configuration.                                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int32
+   *
+   * @description:
+   *   A typedef for a 32bit signed integer type.  The size depends on the
+   *   configuration.
+   */
   typedef signed XXX  FT_Int32;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt32                                                          */
-  /*                                                                       */
-  /*    A typedef for a 32bit unsigned integer type.  The size depends on  */
-  /*    the configuration.                                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt32
+   *
+   *   A typedef for a 32bit unsigned integer type.  The size depends on the
+   *   configuration.
+   */
   typedef unsigned XXX  FT_UInt32;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int64                                                           */
-  /*                                                                       */
-  /*    A typedef for a 64bit signed integer type.  The size depends on    */
-  /*    the configuration.  Only defined if there is real 64bit support;   */
-  /*    otherwise, it gets emulated with a structure (if necessary).       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int64
+   *
+   *   A typedef for a 64bit signed integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
+   *   otherwise, it gets emulated with a structure (if necessary).
+   */
   typedef signed XXX  FT_Int64;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt64                                                          */
-  /*                                                                       */
-  /*    A typedef for a 64bit unsigned integer type.  The size depends on  */
-  /*    the configuration.  Only defined if there is real 64bit support;   */
-  /*    otherwise, it gets emulated with a structure (if necessary).       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt64
+   *
+   *   A typedef for a 64bit unsigned integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
+   *   otherwise, it gets emulated with a structure (if necessary).
+   */
   typedef unsigned XXX  FT_UInt64;
 
   /* */
@@ -273,7 +268,7 @@
 #endif
 
 
-  /* look up an integer type that is at least 32 bits */
+  /* look up an integer type that is at least 32~bits */
 #if FT_SIZEOF_INT >= 4
 
   typedef int            FT_Fast;
@@ -287,17 +282,17 @@
 #endif
 
 
-  /* determine whether we have a 64-bit int type  */
-  /* (mostly for environments without `autoconf') */
+  /* determine whether we have a 64-bit `int` type for platforms without */
+  /* Autoconf                                                            */
 #if FT_SIZEOF_LONG == 8
 
-  /* FT_LONG64 must be defined if a 64-bit type is available */
+  /* `FT_LONG64` must be defined if a 64-bit type is available */
 #define FT_LONG64
 #define FT_INT64   long
 #define FT_UINT64  unsigned long
 
   /* we handle the LLP64 scheme separately for GCC and clang, */
-  /* suppressing the `long long' warning                      */
+  /* suppressing the `long long` warning                      */
 #elif ( FT_SIZEOF_LONG == 4 )       && \
       defined( HAVE_LONG_LONG_INT ) && \
       defined( __GNUC__ )
@@ -306,13 +301,13 @@
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* A 64-bit data type may create compilation problems if you compile     */
-  /* in strict ANSI mode.  To avoid them, we disable other 64-bit data     */
-  /* types if __STDC__ is defined.  You can however ignore this rule       */
-  /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro.     */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * A 64-bit data type may create compilation problems if you compile in
+   * strict ANSI mode.  To avoid them, we disable other 64-bit data types if
+   * `__STDC__` is defined.  You can however ignore this rule by defining the
+   * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+   */
 #elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
 
 #if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
@@ -321,19 +316,19 @@
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
 
 #elif defined( __BORLANDC__ )  /* Borland C++ */
 
-  /* XXXX: We should probably check the value of __BORLANDC__ in order */
-  /*       to test the compiler version.                               */
+  /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+  /*       to test the compiler version.                                 */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
@@ -350,7 +345,7 @@
 
 #elif defined( __GNUC__ )
 
-  /* GCC provides the `long long' type */
+  /* GCC provides the `long long` type */
 #define FT_LONG64
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
@@ -374,11 +369,11 @@
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* miscellaneous                                                         */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * miscellaneous
+   *
+   */
 
 
 #define FT_BEGIN_STMNT  do {
@@ -386,7 +381,7 @@
 #define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
 
 
-  /* typeof condition taken from gnulib's `intprops.h' header file */
+  /* `typeof` condition taken from gnulib's `intprops.h` header file */
 #if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 )                       || \
       ( defined( __IBMC__ ) && __IBMC__ >= 1210 &&                      \
         defined( __IBM__TYPEOF__ ) )                                 || \
@@ -397,14 +392,14 @@
 #endif
 
 
-  /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
-  /* a function that gets used only within the scope of a module.       */
-  /* Normally, both the header and source code files for such a         */
-  /* function are within a single module directory.                     */
-  /*                                                                    */
-  /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and       */
-  /* FT_LOCAL_ARRAY_DEF.                                                */
-  /*                                                                    */
+  /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define,            */
+  /* respectively, a function that gets used only within the scope of a  */
+  /* module.  Normally, both the header and source code files for such a */
+  /* function are within a single module directory.                      */
+  /*                                                                     */
+  /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and      */
+  /* `FT_LOCAL_ARRAY_DEF`.                                               */
+  /*                                                                     */
 #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
 
 #define FT_LOCAL( x )      static  x
@@ -426,12 +421,12 @@
 #define FT_LOCAL_ARRAY_DEF( x )  const  x
 
 
-  /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
-  /* functions that are used in more than a single module.  In the    */
-  /* current setup this implies that the declaration is in a header   */
-  /* file in the `include/freetype/internal' directory, and the       */
-  /* function body is in a file in `src/base'.                        */
-  /*                                                                  */
+  /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+  /* functions that are used in more than a single module.  In the        */
+  /* current setup this implies that the declaration is in a header file  */
+  /* in the `include/freetype/internal` directory, and the function body  */
+  /* is in a file in `src/base`.                                          */
+  /*                                                                      */
 #ifndef FT_BASE
 
 #ifdef __cplusplus
@@ -454,37 +449,40 @@
 #endif /* !FT_BASE_DEF */
 
 
-  /*   When compiling FreeType as a DLL or DSO with hidden visibility      */
-  /*   some systems/compilers need a special attribute in front OR after   */
-  /*   the return type of function declarations.                           */
-  /*                                                                       */
-  /*   Two macros are used within the FreeType source code to define       */
-  /*   exported library functions: FT_EXPORT and FT_EXPORT_DEF.            */
-  /*                                                                       */
-  /*     FT_EXPORT( return_type )                                          */
-  /*                                                                       */
-  /*       is used in a function declaration, as in                        */
-  /*                                                                       */
-  /*         FT_EXPORT( FT_Error )                                         */
-  /*         FT_Init_FreeType( FT_Library*  alibrary );                    */
-  /*                                                                       */
-  /*                                                                       */
-  /*     FT_EXPORT_DEF( return_type )                                      */
-  /*                                                                       */
-  /*       is used in a function definition, as in                         */
-  /*                                                                       */
-  /*         FT_EXPORT_DEF( FT_Error )                                     */
-  /*         FT_Init_FreeType( FT_Library*  alibrary )                     */
-  /*         {                                                             */
-  /*           ... some code ...                                           */
-  /*           return FT_Err_Ok;                                           */
-  /*         }                                                             */
-  /*                                                                       */
-  /*   You can provide your own implementation of FT_EXPORT and            */
-  /*   FT_EXPORT_DEF here if you want.                                     */
-  /*                                                                       */
-  /*   To export a variable, use FT_EXPORT_VAR.                            */
-  /*                                                                       */
+  /* When compiling FreeType as a DLL or DSO with hidden visibility    */
+  /* some systems/compilers need a special attribute in front OR after */
+  /* the return type of function declarations.                         */
+  /*                                                                   */
+  /* Two macros are used within the FreeType source code to define     */
+  /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.      */
+  /*                                                                   */
+  /* - `FT_EXPORT( return_type )`                                      */
+  /*                                                                   */
+  /*   is used in a function declaration, as in                        */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT( FT_Error )                                         */
+  /*     FT_Init_FreeType( FT_Library*  alibrary );                    */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* - `FT_EXPORT_DEF( return_type )`                                  */
+  /*                                                                   */
+  /*   is used in a function definition, as in                         */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT_DEF( FT_Error )                                     */
+  /*     FT_Init_FreeType( FT_Library*  alibrary )                     */
+  /*     {                                                             */
+  /*       ... some code ...                                           */
+  /*       return FT_Err_Ok;                                           */
+  /*     }                                                             */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* You can provide your own implementation of `FT_EXPORT` and        */
+  /* `FT_EXPORT_DEF` here if you want.                                 */
+  /*                                                                   */
+  /* To export a variable, use `FT_EXPORT_VAR`.                        */
+  /*                                                                   */
 #ifndef FT_EXPORT
 
 #ifdef FT2_BUILD_LIBRARY
@@ -537,11 +535,12 @@
 
 #endif /* !FT_EXPORT_VAR */
 
+
   /* The following macros are needed to compile the library with a   */
   /* C++ compiler and with 16bit compilers.                          */
   /*                                                                 */
 
-  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* This is special.  Within C++, you must specify `extern "C"` for */
   /* functions which are used via function pointers, and you also    */
   /* must do that for structures which contain function pointers to  */
   /* assure C linkage -- it's not possible to have (local) anonymous */
@@ -564,7 +563,7 @@
   /*                                                                 */
   /*                                                                 */
   /* Some 16bit compilers have to redefine these macros to insert    */
-  /* the infamous `_cdecl' or `__fastcall' declarations.             */
+  /* the infamous `_cdecl` or `__fastcall` declarations.             */
   /*                                                                 */
 #ifndef FT_CALLBACK_DEF
 #ifdef __cplusplus
diff --git a/builds/unix/ftsystem.c b/builds/unix/ftsystem.c
index 8fdbeb0..826713f 100644
--- a/builds/unix/ftsystem.c
+++ b/builds/unix/ftsystem.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    Unix-specific FreeType low-level system interface (body).            */
 /*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
+/*  Copyright (C) 1996-2019 by                                             */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -173,7 +173,7 @@
   /* messages during execution.                                            */
   /*                                                                       */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_io
+#define FT_COMPONENT  io
 
   /* We use the macro STREAM_FILE for convenience to extract the       */
   /* system-specific stream handle from a given FreeType stream object */
diff --git a/builds/unix/install.mk b/builds/unix/install.mk
index c08c3b7..2287dfc 100644
--- a/builds/unix/install.mk
+++ b/builds/unix/install.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix-cc.in b/builds/unix/unix-cc.in
index 5675866..ed51fde 100644
--- a/builds/unix/unix-cc.in
+++ b/builds/unix/unix-cc.in
@@ -2,7 +2,7 @@
 # FreeType 2 template for Unix-specific compiler definitions
 #
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix-def.in b/builds/unix/unix-def.in
index 6957053..e74844d 100644
--- a/builds/unix/unix-def.in
+++ b/builds/unix/unix-def.in
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -21,6 +21,12 @@
 CAT    := cat
 SEP    := /
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+PYTHON := @PYTHON@
+PIP    := @PIP@
+BIN    := bin
+
 # this is used for `make distclean' and `make install'
 OBJ_BUILD ?= $(BUILD_DIR)
 
diff --git a/builds/unix/unix-dev.mk b/builds/unix/unix-dev.mk
index 5a516ad..3cb171a 100644
--- a/builds/unix/unix-dev.mk
+++ b/builds/unix/unix-dev.mk
@@ -6,7 +6,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix-lcc.mk b/builds/unix/unix-lcc.mk
index 73a02d4..e632e9a 100644
--- a/builds/unix/unix-lcc.mk
+++ b/builds/unix/unix-lcc.mk
@@ -6,7 +6,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unix.mk b/builds/unix/unix.mk
index acd54d3..2d04eef 100644
--- a/builds/unix/unix.mk
+++ b/builds/unix/unix.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/unix/unixddef.mk b/builds/unix/unixddef.mk
index a8da63a..9aad35c 100644
--- a/builds/unix/unixddef.mk
+++ b/builds/unix/unixddef.mk
@@ -4,7 +4,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -23,6 +23,10 @@
 CAT    := cat
 SEP    := /
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := bin
+
 # we use a special devel ftoption.h
 DEVEL_DIR := $(TOP_DIR)/devel
 
diff --git a/builds/vms/LIBS.OPT_IA64 b/builds/vms/LIBS.OPT_IA64
new file mode 100644
index 0000000..6768c76
--- /dev/null
+++ b/builds/vms/LIBS.OPT_IA64
Binary files differ
diff --git a/builds/vms/_LINK.OPT_IA64 b/builds/vms/_LINK.OPT_IA64
new file mode 100644
index 0000000..b8cbd1b
--- /dev/null
+++ b/builds/vms/_LINK.OPT_IA64
Binary files differ
diff --git a/builds/vms/ftconfig.h b/builds/vms/ftconfig.h
index 733b09b..7825db0 100644
--- a/builds/vms/ftconfig.h
+++ b/builds/vms/ftconfig.h
@@ -1,38 +1,36 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftconfig.h                                                             */
-/*                                                                         */
-/*    VMS-specific configuration file (specification only).                */
-/*                                                                         */
-/*  Copyright 1996-2018 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.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftconfig.h
+ *
+ *   VMS-specific configuration file (specification only).
+ *
+ * Copyright (C) 1996-2019 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.
+ *
+ */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* This header file contains a number of macro definitions that are used */
-  /* by the rest of the engine.  Most of the macros here are automatically */
-  /* determined at compile time, and you should not need to change it to   */
-  /* port FreeType, except to compile the library with a non-ANSI          */
-  /* compiler.                                                             */
-  /*                                                                       */
-  /* Note however that if some specific modifications are needed, we       */
-  /* advise you to place a modified copy in your build directory.          */
-  /*                                                                       */
-  /* The build directory is usually `builds/<system>', and contains        */
-  /* system-specific files that are always included first when building    */
-  /* the library.                                                          */
-  /*                                                                       */
-  /*************************************************************************/
-
+  /**************************************************************************
+   *
+   * This header file contains a number of macro definitions that are used by
+   * the rest of the engine.  Most of the macros here are automatically
+   * determined at compile time, and you should not need to change it to port
+   * FreeType, except to compile the library with a non-ANSI compiler.
+   *
+   * Note however that if some specific modifications are needed, we advise
+   * you to place a modified copy in your build directory.
+   *
+   * The build directory is usually `builds/<system>`, and contains
+   * system-specific files that are always included first when building the
+   * library.
+   *
+   */
 
 #ifndef FTCONFIG_H_
 #define FTCONFIG_H_
@@ -45,17 +43,16 @@
 FT_BEGIN_HEADER
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /*               PLATFORM-SPECIFIC CONFIGURATION MACROS                  */
-  /*                                                                       */
-  /* These macros can be toggled to suit a specific system.  The current   */
-  /* ones are defaults used to compile FreeType in an ANSI C environment   */
-  /* (16bit compilers are also supported).  Copy this file to your own     */
-  /* `builds/<system>' directory, and edit it to port the engine.          */
-  /*                                                                       */
-  /*************************************************************************/
-
+  /**************************************************************************
+   *
+   *              PLATFORM-SPECIFIC CONFIGURATION MACROS
+   *
+   * These macros can be toggled to suit a specific system.  The current ones
+   * are defaults used to compile FreeType in an ANSI C environment (16bit
+   * compilers are also supported).  Copy this file to your own
+   * `builds/<system>` directory, and edit it to port the engine.
+   *
+   */
 
 #define HAVE_UNISTD_H  1
 #define HAVE_FCNTL_H   1
@@ -66,38 +63,36 @@
 #define FT_SIZEOF_INT   4
 #define FT_SIZEOF_LONG  4
 
-#define FT_CHAR_BIT  8
 
-
-  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
-  /* used -- this is only used to get rid of unpleasant compiler warnings */
+  /* `FT_UNUSED` indicates that a given parameter is not used --   */
+  /* this is only used to get rid of unpleasant compiler warnings. */
 #ifndef FT_UNUSED
 #define FT_UNUSED( arg )  ( (arg) = (arg) )
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /*                     AUTOMATIC CONFIGURATION MACROS                    */
-  /*                                                                       */
-  /* These macros are computed from the ones defined above.  Don't touch   */
-  /* their definition, unless you know precisely what you are doing.  No   */
-  /* porter should need to mess with them.                                 */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   *                    AUTOMATIC CONFIGURATION MACROS
+   *
+   * These macros are computed from the ones defined above.  Don't touch
+   * their definition, unless you know precisely what you are doing.  No
+   * porter should need to mess with them.
+   *
+   */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* Mac support                                                           */
-  /*                                                                       */
-  /*   This is the only necessary change, so it is defined here instead    */
-  /*   providing a new configuration file.                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * Mac support
+   *
+   *   This is the only necessary change, so it is defined here instead
+   *   providing a new configuration file.
+   */
 #if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
-  /* no Carbon frameworks for 64bit 10.4.x */
-  /* AvailabilityMacros.h is available since Mac OS X 10.2,        */
-  /* so guess the system version by maximum errno before inclusion */
+  /* No Carbon frameworks for 64bit 10.4.x.                         */
+  /* `AvailabilityMacros.h` is available since Mac OS X 10.2,       */
+  /* so guess the system version by maximum errno before inclusion. */
 #include <errno.h>
 #ifdef ECANCELED /* defined since 10.2 */
 #include "AvailabilityMacros.h"
@@ -117,7 +112,7 @@
 #endif
 
 
-  /* Fix compiler warning with sgi compiler */
+  /* Fix compiler warning with sgi compiler. */
 #if defined( __sgi ) && !defined( __GNUC__ )
 #if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
 #pragma set woff 3505
@@ -125,33 +120,33 @@
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Section>                                                             */
-  /*    basic_types                                                        */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * @section:
+   *   basic_types
+   *
+   */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int16                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit signed integer type.                         */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int16
+   *
+   * @description:
+   *   A typedef for a 16bit signed integer type.
+   */
   typedef signed short  FT_Int16;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt16                                                          */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 16bit unsigned integer type.                       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt16
+   *
+   * @description:
+   *   A typedef for a 16bit unsigned integer type.
+   */
   typedef unsigned short  FT_UInt16;
 
   /* */
@@ -160,50 +155,50 @@
   /* this #if 0 ... #endif clause is for documentation purposes */
 #if 0
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int32                                                           */
-  /*                                                                       */
-  /* <Description>                                                         */
-  /*    A typedef for a 32bit signed integer type.  The size depends on    */
-  /*    the configuration.                                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int32
+   *
+   * @description:
+   *   A typedef for a 32bit signed integer type.  The size depends on the
+   *   configuration.
+   */
   typedef signed XXX  FT_Int32;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt32                                                          */
-  /*                                                                       */
-  /*    A typedef for a 32bit unsigned integer type.  The size depends on  */
-  /*    the configuration.                                                 */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt32
+   *
+   *   A typedef for a 32bit unsigned integer type.  The size depends on the
+   *   configuration.
+   */
   typedef unsigned XXX  FT_UInt32;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_Int64                                                           */
-  /*                                                                       */
-  /*    A typedef for a 64bit signed integer type.  The size depends on    */
-  /*    the configuration.  Only defined if there is real 64bit support;   */
-  /*    otherwise, it gets emulated with a structure (if necessary).       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_Int64
+   *
+   *   A typedef for a 64bit signed integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
+   *   otherwise, it gets emulated with a structure (if necessary).
+   */
   typedef signed XXX  FT_Int64;
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* <Type>                                                                */
-  /*    FT_UInt64                                                          */
-  /*                                                                       */
-  /*    A typedef for a 64bit unsigned integer type.  The size depends on  */
-  /*    the configuration.  Only defined if there is real 64bit support;   */
-  /*    otherwise, it gets emulated with a structure (if necessary).       */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * @type:
+   *   FT_UInt64
+   *
+   *   A typedef for a 64bit unsigned integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
+   *   otherwise, it gets emulated with a structure (if necessary).
+   */
   typedef unsigned XXX  FT_UInt64;
 
   /* */
@@ -225,7 +220,7 @@
 #endif
 
 
-  /* look up an integer type that is at least 32 bits */
+  /* look up an integer type that is at least 32~bits */
 #if FT_SIZEOF_INT >= 4
 
   typedef int            FT_Fast;
@@ -239,17 +234,17 @@
 #endif
 
 
-  /* determine whether we have a 64-bit int type  */
-  /* (mostly for environments without `autoconf') */
+  /* determine whether we have a 64-bit `int` type for platforms without */
+  /* Autoconf                                                            */
 #if FT_SIZEOF_LONG == 8
 
-  /* FT_LONG64 must be defined if a 64-bit type is available */
+  /* `FT_LONG64` must be defined if a 64-bit type is available */
 #define FT_LONG64
 #define FT_INT64   long
 #define FT_UINT64  unsigned long
 
   /* we handle the LLP64 scheme separately for GCC and clang, */
-  /* suppressing the `long long' warning                      */
+  /* suppressing the `long long` warning                      */
 #elif ( FT_SIZEOF_LONG == 4 )       && \
       defined( HAVE_LONG_LONG_INT ) && \
       defined( __GNUC__ )
@@ -258,13 +253,13 @@
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* A 64-bit data type may create compilation problems if you compile     */
-  /* in strict ANSI mode.  To avoid them, we disable other 64-bit data     */
-  /* types if __STDC__ is defined.  You can however ignore this rule       */
-  /* by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro.     */
-  /*                                                                       */
+  /**************************************************************************
+   *
+   * A 64-bit data type may create compilation problems if you compile in
+   * strict ANSI mode.  To avoid them, we disable other 64-bit data types if
+   * `__STDC__` is defined.  You can however ignore this rule by defining the
+   * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
+   */
 #elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
 
 #if defined( __STDC_VERSION__ ) && __STDC_VERSION__ >= 199901L
@@ -273,19 +268,19 @@
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
 
 #elif defined( __BORLANDC__ )  /* Borland C++ */
 
-  /* XXXX: We should probably check the value of __BORLANDC__ in order */
-  /*       to test the compiler version.                               */
+  /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+  /*       to test the compiler version.                                 */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
@@ -302,7 +297,7 @@
 
 #elif defined( __GNUC__ )
 
-  /* GCC provides the `long long' type */
+  /* GCC provides the `long long` type */
 #define FT_LONG64
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
@@ -326,11 +321,11 @@
 #endif
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* miscellaneous                                                         */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * miscellaneous
+   *
+   */
 
 
 #define FT_BEGIN_STMNT  do {
@@ -338,7 +333,7 @@
 #define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
 
 
-  /* typeof condition taken from gnulib's `intprops.h' header file */
+  /* `typeof` condition taken from gnulib's `intprops.h` header file */
 #if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 )                       || \
       ( defined( __IBMC__ ) && __IBMC__ >= 1210 &&                      \
         defined( __IBM__TYPEOF__ ) )                                 || \
@@ -349,14 +344,14 @@
 #endif
 
 
-  /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
-  /* a function that gets used only within the scope of a module.       */
-  /* Normally, both the header and source code files for such a         */
-  /* function are within a single module directory.                     */
-  /*                                                                    */
-  /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and       */
-  /* FT_LOCAL_ARRAY_DEF.                                                */
-  /*                                                                    */
+  /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define,            */
+  /* respectively, a function that gets used only within the scope of a  */
+  /* module.  Normally, both the header and source code files for such a */
+  /* function are within a single module directory.                      */
+  /*                                                                     */
+  /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and      */
+  /* `FT_LOCAL_ARRAY_DEF`.                                               */
+  /*                                                                     */
 #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
 
 #define FT_LOCAL( x )      static  x
@@ -378,12 +373,12 @@
 #define FT_LOCAL_ARRAY_DEF( x )  const  x
 
 
-  /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
-  /* functions that are used in more than a single module.  In the    */
-  /* current setup this implies that the declaration is in a header   */
-  /* file in the `include/freetype/internal' directory, and the       */
-  /* function body is in a file in `src/base'.                        */
-  /*                                                                  */
+  /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+  /* functions that are used in more than a single module.  In the        */
+  /* current setup this implies that the declaration is in a header file  */
+  /* in the `include/freetype/internal` directory, and the function body  */
+  /* is in a file in `src/base`.                                          */
+  /*                                                                      */
 #ifndef FT_BASE
 
 #ifdef __cplusplus
@@ -406,37 +401,40 @@
 #endif /* !FT_BASE_DEF */
 
 
-  /*   When compiling FreeType as a DLL or DSO with hidden visibility      */
-  /*   some systems/compilers need a special attribute in front OR after   */
-  /*   the return type of function declarations.                           */
-  /*                                                                       */
-  /*   Two macros are used within the FreeType source code to define       */
-  /*   exported library functions: FT_EXPORT and FT_EXPORT_DEF.            */
-  /*                                                                       */
-  /*     FT_EXPORT( return_type )                                          */
-  /*                                                                       */
-  /*       is used in a function declaration, as in                        */
-  /*                                                                       */
-  /*         FT_EXPORT( FT_Error )                                         */
-  /*         FT_Init_FreeType( FT_Library*  alibrary );                    */
-  /*                                                                       */
-  /*                                                                       */
-  /*     FT_EXPORT_DEF( return_type )                                      */
-  /*                                                                       */
-  /*       is used in a function definition, as in                         */
-  /*                                                                       */
-  /*         FT_EXPORT_DEF( FT_Error )                                     */
-  /*         FT_Init_FreeType( FT_Library*  alibrary )                     */
-  /*         {                                                             */
-  /*           ... some code ...                                           */
-  /*           return FT_Err_Ok;                                           */
-  /*         }                                                             */
-  /*                                                                       */
-  /*   You can provide your own implementation of FT_EXPORT and            */
-  /*   FT_EXPORT_DEF here if you want.                                     */
-  /*                                                                       */
-  /*   To export a variable, use FT_EXPORT_VAR.                            */
-  /*                                                                       */
+  /* When compiling FreeType as a DLL or DSO with hidden visibility    */
+  /* some systems/compilers need a special attribute in front OR after */
+  /* the return type of function declarations.                         */
+  /*                                                                   */
+  /* Two macros are used within the FreeType source code to define     */
+  /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.      */
+  /*                                                                   */
+  /* - `FT_EXPORT( return_type )`                                      */
+  /*                                                                   */
+  /*   is used in a function declaration, as in                        */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT( FT_Error )                                         */
+  /*     FT_Init_FreeType( FT_Library*  alibrary );                    */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* - `FT_EXPORT_DEF( return_type )`                                  */
+  /*                                                                   */
+  /*   is used in a function definition, as in                         */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT_DEF( FT_Error )                                     */
+  /*     FT_Init_FreeType( FT_Library*  alibrary )                     */
+  /*     {                                                             */
+  /*       ... some code ...                                           */
+  /*       return FT_Err_Ok;                                           */
+  /*     }                                                             */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* You can provide your own implementation of `FT_EXPORT` and        */
+  /* `FT_EXPORT_DEF` here if you want.                                 */
+  /*                                                                   */
+  /* To export a variable, use `FT_EXPORT_VAR`.                        */
+  /*                                                                   */
 #ifndef FT_EXPORT
 
 #ifdef FT2_BUILD_LIBRARY
@@ -489,11 +487,12 @@
 
 #endif /* !FT_EXPORT_VAR */
 
+
   /* The following macros are needed to compile the library with a   */
   /* C++ compiler and with 16bit compilers.                          */
   /*                                                                 */
 
-  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* This is special.  Within C++, you must specify `extern "C"` for */
   /* functions which are used via function pointers, and you also    */
   /* must do that for structures which contain function pointers to  */
   /* assure C linkage -- it's not possible to have (local) anonymous */
@@ -516,7 +515,7 @@
   /*                                                                 */
   /*                                                                 */
   /* Some 16bit compilers have to redefine these macros to insert    */
-  /* the infamous `_cdecl' or `__fastcall' declarations.             */
+  /* the infamous `_cdecl` or `__fastcall` declarations.             */
   /*                                                                 */
 #ifndef FT_CALLBACK_DEF
 #ifdef __cplusplus
diff --git a/builds/vms/ftsystem.c b/builds/vms/ftsystem.c
index 7d79f9a..af6fe46 100644
--- a/builds/vms/ftsystem.c
+++ b/builds/vms/ftsystem.c
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    VMS-specific FreeType low-level system interface (body).             */
 /*                                                                         */
-/*  Copyright 1996-2018 by                                                 */
+/*  Copyright (C) 1996-2019 by                                             */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -172,7 +172,7 @@
   /* messages during execution.                                            */
   /*                                                                       */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_io
+#define FT_COMPONENT  io
 
   /* We use the macro STREAM_FILE for convenience to extract the       */
   /* system-specific stream handle from a given FreeType stream object */
diff --git a/builds/vms/vmslib.dat b/builds/vms/vmslib.dat
new file mode 100644
index 0000000..4c817da
--- /dev/null
+++ b/builds/vms/vmslib.dat
@@ -0,0 +1,28 @@
+!
+! This is a simple driver file with information used by make.com to
+! check if external libraries (like t1lib and freetype) are available on
+! the system.
+!
+! Layout of the file:
+!
+!    - Lines starting with ! are treated as comments
+!    - Elements in a data line are separated by # signs
+!    - The elements need to be listed in the following order
+!      1.) Name of the Library 
+!      2.) Location where the object library can be found
+!      3.) Location where the include files for the library can be found
+!      4.) Include file used to verify library location
+!      5.) CPP define to pass to the build to indicate availability of
+!          the library
+!
+! Example: The following  lines show how definitions
+!          might look like. They are site specific and the locations of the
+!          library and include files need almost certainly to be changed.
+!
+! Location: All of the libaries can be found at the following addresses
+!
+!   ZLIB:     http://www.decus.de:8080/www/vms/sw/zlib.htmlx
+!
+BZ2LIB # sys$library:libbz2.olb # decc$user_include: # bzlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
+PNGLIB # sys$library:libpng.olb # sys$library: # png.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
+ZLIB # sys$library:libz.olb # sys$library: # zlib.h # FT_CONFIG_OPTION_SYSTEM_ZLIB
diff --git a/builds/wince/ftdebug.c b/builds/wince/ftdebug.c
index 83c5f44..d0ca999 100644
--- a/builds/wince/ftdebug.c
+++ b/builds/wince/ftdebug.c
@@ -1,53 +1,53 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftdebug.c                                                              */
-/*                                                                         */
-/*    Debugging and logging component for WinCE (body).                    */
-/*                                                                         */
-/*  Copyright 1996-2018 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.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ *   Debugging and logging component for WinCE (body).
+ *
+ * Copyright (C) 1996-2019 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.
+ *
+ */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* This component contains various macros and functions used to ease the */
-  /* debugging of the FreeType engine.  Its main purpose is in assertion   */
-  /* checking, tracing, and error detection.                               */
-  /*                                                                       */
-  /* There are now three debugging modes:                                  */
-  /*                                                                       */
-  /* - trace mode                                                          */
-  /*                                                                       */
-  /*   Error and trace messages are sent to the log file (which can be the */
-  /*   standard error output).                                             */
-  /*                                                                       */
-  /* - error mode                                                          */
-  /*                                                                       */
-  /*   Only error messages are generated.                                  */
-  /*                                                                       */
-  /* - release mode:                                                       */
-  /*                                                                       */
-  /*   No error message is sent or generated.  The code is free from any   */
-  /*   debugging parts.                                                    */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * This component contains various macros and functions used to ease the
+   * debugging of the FreeType engine.  Its main purpose is in assertion
+   * checking, tracing, and error detection.
+   *
+   * There are now three debugging modes:
+   *
+   * - trace mode
+   *
+   *   Error and trace messages are sent to the log file (which can be the
+   *   standard error output).
+   *
+   * - error mode
+   *
+   *   Only error messages are generated.
+   *
+   * - release mode:
+   *
+   *   No error message is sent or generated.  The code is free from any
+   *   debugging parts.
+   *
+   */
 
 
 #include <ft2build.h>
+#include FT_FREETYPE_H
 #include FT_INTERNAL_DEBUG_H
 
 
 #ifdef FT_DEBUG_LEVEL_ERROR
 
-
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
@@ -55,14 +55,15 @@
 #include <windows.h>
 
 
-  void
+  static void
   OutputDebugStringEx( const char*  str )
   {
     static WCHAR  buf[8192];
 
+    int  sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
+                                   sizeof ( buf ) / sizeof ( *buf ) );
 
-    int sz = MultiByteToWideChar( CP_ACP, 0, str, -1, buf,
-                                  sizeof ( buf ) / sizeof ( *buf ) );
+
     if ( !sz )
       lstrcpyW( buf, L"OutputDebugStringEx: MultiByteToWideChar failed" );
 
@@ -70,6 +71,8 @@
   }
 
 
+  /* documentation is in ftdebug.h */
+
   FT_BASE_DEF( void )
   FT_Message( const char*  fmt,
               ... )
@@ -87,6 +90,8 @@
   }
 
 
+  /* documentation is in ftdebug.h */
+
   FT_BASE_DEF( void )
   FT_Panic( const char*  fmt,
             ... )
@@ -111,18 +116,38 @@
             int          line,
             const char*  file )
   {
+#if 0
+    /* activating the code in this block makes FreeType very chatty */
+    fprintf( stderr,
+             "%s:%d: error 0x%02x: %s\n",
+             file,
+             line,
+             error,
+             FT_Error_String( error ) );
+#else
     FT_UNUSED( error );
     FT_UNUSED( line );
     FT_UNUSED( file );
+#endif
 
     return 0;
   }
 
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
+
 #ifdef FT_DEBUG_LEVEL_TRACE
 
+  /* array of trace levels, initialized to 0; */
+  /* this gets adjusted at run-time           */
+  static int  ft_trace_levels_enabled[trace_count];
 
-  /* array of trace levels, initialized to 0 */
-  int  ft_trace_levels[trace_count];
+  /* array of trace levels, always initialized to 0 */
+  static int  ft_trace_levels_disabled[trace_count];
+
+  /* a pointer to either `ft_trace_levels_enabled' */
+  /* or `ft_trace_levels_disabled'                 */
+  int*  ft_trace_levels;
 
   /* define array of trace toggle names */
 #define FT_TRACE_DEF( x )  #x ,
@@ -136,24 +161,66 @@
 #undef FT_TRACE_DEF
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* Initialize the tracing sub-system.  This is done by retrieving the    */
-  /* value of the "FT2_DEBUG" environment variable.  It must be a list of  */
-  /* toggles, separated by spaces, `;' or `,'.  Example:                   */
-  /*                                                                       */
-  /*    "any:3 memory:6 stream:5"                                          */
-  /*                                                                       */
-  /* This will request that all levels be set to 3, except the trace level */
-  /* for the memory and stream components which are set to 6 and 5,        */
-  /* respectively.                                                         */
-  /*                                                                       */
-  /* See the file `include/freetype/internal/fttrace.h' for details of the */
-  /* available toggle names.                                               */
-  /*                                                                       */
-  /* The level must be between 0 and 6; 0 means quiet (except for serious  */
-  /* runtime errors), and 6 means _very_ verbose.                          */
-  /*                                                                       */
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return trace_count;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    int  max = FT_Trace_Get_Count();
+
+
+    if ( idx < max )
+      return ft_trace_toggles[idx];
+    else
+      return NULL;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    ft_trace_levels = ft_trace_levels_disabled;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    ft_trace_levels = ft_trace_levels_enabled;
+  }
+
+
+  /**************************************************************************
+   *
+   * Initialize the tracing sub-system.  This is done by retrieving the
+   * value of the `FT2_DEBUG' environment variable.  It must be a list of
+   * toggles, separated by spaces, `;', or `,'.  Example:
+   *
+   *   export FT2_DEBUG="any:3 memory:7 stream:5"
+   *
+   * This requests that all levels be set to 3, except the trace level for
+   * the memory and stream components which are set to 7 and 5,
+   * respectively.
+   *
+   * See the file `include/freetype/internal/fttrace.h' for details of
+   * the available toggle names.
+   *
+   * The level must be between 0 and 7; 0 means quiet (except for serious
+   * runtime errors), and 7 means _very_ verbose.
+   */
   FT_BASE_DEF( void )
   ft_debug_init( void )
   {
@@ -189,8 +256,8 @@
 
         if ( *p == ':' && p > q )
         {
-          int  n, i, len = (int)( p - q );
-          int  level = -1, found = -1;
+          FT_Int  n, i, len = (FT_Int)( p - q );
+          FT_Int  level = -1, found = -1;
 
 
           for ( n = 0; n < trace_count; n++ )
@@ -224,16 +291,18 @@
           {
             if ( found == trace_any )
             {
-              /* special case for "any" */
+              /* special case for `any' */
               for ( n = 0; n < trace_count; n++ )
-                ft_trace_levels[n] = level;
+                ft_trace_levels_enabled[n] = level;
             }
             else
-              ft_trace_levels[found] = level;
+              ft_trace_levels_enabled[found] = level;
           }
         }
       }
     }
+
+    ft_trace_levels = ft_trace_levels_enabled;
   }
 
 
@@ -247,9 +316,39 @@
   }
 
 
-#endif /* !FT_DEBUG_LEVEL_TRACE */
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return 0;
+  }
 
-#endif /* FT_DEBUG_LEVEL_ERROR */
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    FT_UNUSED( idx );
+
+    return NULL;
+  }
+
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    /* nothing */
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    /* nothing */
+  }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
 
 
 /* END */
diff --git a/builds/wince/vc2005-ce/freetype.vcproj b/builds/wince/vc2005-ce/freetype.vcproj
index 1ca45a8..de556aa 100644
--- a/builds/wince/vc2005-ce/freetype.vcproj
+++ b/builds/wince/vc2005-ce/freetype.vcproj
@@ -21,7 +21,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -41,7 +41,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -61,7 +61,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -81,7 +81,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -101,7 +101,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -121,7 +121,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -141,7 +141,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -161,7 +161,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -181,7 +181,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -201,7 +201,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -221,7 +221,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -241,7 +241,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -261,7 +261,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -281,7 +281,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -301,7 +301,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -321,7 +321,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -341,7 +341,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -361,7 +361,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST.lib" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST.lib" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -381,7 +381,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -401,7 +401,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -421,7 +421,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -441,7 +441,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -461,7 +461,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -481,7 +481,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -501,7 +501,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -521,7 +521,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -541,7 +541,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -561,7 +561,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -581,7 +581,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -601,7 +601,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291ST_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101ST_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -621,7 +621,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -641,7 +641,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -661,7 +661,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -681,7 +681,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -701,7 +701,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -721,7 +721,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -741,7 +741,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

@@ -758,7 +758,7 @@
       <Tool Name="VCManagedResourceCompilerTool" />

       <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

       <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype291MT_D.lib" SuppressStartupBanner="true" />

+      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\wince\vc2005-ce\freetype2101MT_D.lib" SuppressStartupBanner="true" />

       <Tool Name="VCALinkTool" />

       <Tool Name="VCXDCMakeTool" />

       <Tool Name="VCBscMakeTool" />

diff --git a/builds/wince/vc2005-ce/index.html b/builds/wince/vc2005-ce/index.html
index 02a1caf..16a1062 100644
--- a/builds/wince/vc2005-ce/index.html
+++ b/builds/wince/vc2005-ce/index.html
@@ -21,21 +21,21 @@
   <li>PPC/SP WM6 (Windows Mobile 6)</li>
 </ul>
 
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
 
 <ul>
   <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
+    freetype2101.lib     - release build; single threaded
+    freetype2101_D.lib   - debug build;   single threaded
+    freetype2101MT.lib   - release build; multi-threaded
+    freetype2101MT_D.lib - debug build;   multi-threaded</pre>
 </ul>
 
 <p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
 archives are already stored this way, so no further action is required.  If
 you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
 tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
 file smart CR/LF Conversion</em> option.  Alternatively, you may consider
 using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
 around, which specifically deal with this particular problem.
diff --git a/builds/wince/vc2008-ce/freetype.vcproj b/builds/wince/vc2008-ce/freetype.vcproj
index 7a5445e..f9479da 100644
--- a/builds/wince/vc2008-ce/freetype.vcproj
+++ b/builds/wince/vc2008-ce/freetype.vcproj
@@ -88,7 +88,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -177,7 +177,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -266,7 +266,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -355,7 +355,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -444,7 +444,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -533,7 +533,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -621,7 +621,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -709,7 +709,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -797,7 +797,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -885,7 +885,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -973,7 +973,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1061,7 +1061,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1149,7 +1149,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1236,7 +1236,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1323,7 +1323,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1410,7 +1410,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1497,7 +1497,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1584,7 +1584,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1668,7 +1668,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1753,7 +1753,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1838,7 +1838,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1923,7 +1923,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2008,7 +2008,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2093,7 +2093,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2178,7 +2178,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2263,7 +2263,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2348,7 +2348,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2433,7 +2433,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2518,7 +2518,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2603,7 +2603,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2689,7 +2689,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2775,7 +2775,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2861,7 +2861,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2947,7 +2947,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3033,7 +3033,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3119,7 +3119,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3205,7 +3205,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3279,7 +3279,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\wince\vc2008-ce\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

diff --git a/builds/wince/vc2008-ce/index.html b/builds/wince/vc2008-ce/index.html
index f7a3583..9d71b09 100644
--- a/builds/wince/vc2008-ce/index.html
+++ b/builds/wince/vc2008-ce/index.html
@@ -21,21 +21,21 @@
   <li>PPC/SP WM6 (Windows Mobile 6)</li>
 </ul>
 
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
 
 <ul>
   <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
+    freetype2101.lib     - release build; single threaded
+    freetype2101_D.lib   - debug build;   single threaded
+    freetype2101MT.lib   - release build; multi-threaded
+    freetype2101MT_D.lib - debug build;   multi-threaded</pre>
 </ul>
 
 <p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
 archives are already stored this way, so no further action is required.  If
 you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
 tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
 file smart CR/LF Conversion</em> option.  Alternatively, you may consider
 using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
 around, which specifically deal with this particular problem.
diff --git a/builds/windows/detect.mk b/builds/windows/detect.mk
index 05b0e6a..351e256 100644
--- a/builds/windows/detect.mk
+++ b/builds/windows/detect.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/ftdebug.c b/builds/windows/ftdebug.c
index ec70a0e..7c47fb5 100644
--- a/builds/windows/ftdebug.c
+++ b/builds/windows/ftdebug.c
@@ -1,47 +1,48 @@
-/***************************************************************************/
-/*                                                                         */
-/*  ftdebug.c                                                              */
-/*                                                                         */
-/*    Debugging and logging component for Win32 (body).                    */
-/*                                                                         */
-/*  Copyright 1996-2018 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.                                        */
-/*                                                                         */
-/***************************************************************************/
+/****************************************************************************
+ *
+ * ftdebug.c
+ *
+ *   Debugging and logging component for Win32 (body).
+ *
+ * Copyright (C) 1996-2019 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.
+ *
+ */
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* This component contains various macros and functions used to ease the */
-  /* debugging of the FreeType engine.  Its main purpose is in assertion   */
-  /* checking, tracing, and error detection.                               */
-  /*                                                                       */
-  /* There are now three debugging modes:                                  */
-  /*                                                                       */
-  /* - trace mode                                                          */
-  /*                                                                       */
-  /*   Error and trace messages are sent to the log file (which can be the */
-  /*   standard error output).                                             */
-  /*                                                                       */
-  /* - error mode                                                          */
-  /*                                                                       */
-  /*   Only error messages are generated.                                  */
-  /*                                                                       */
-  /* - release mode:                                                       */
-  /*                                                                       */
-  /*   No error message is sent or generated.  The code is free from any   */
-  /*   debugging parts.                                                    */
-  /*                                                                       */
-  /*************************************************************************/
+  /**************************************************************************
+   *
+   * This component contains various macros and functions used to ease the
+   * debugging of the FreeType engine.  Its main purpose is in assertion
+   * checking, tracing, and error detection.
+   *
+   * There are now three debugging modes:
+   *
+   * - trace mode
+   *
+   *   Error and trace messages are sent to the log file (which can be the
+   *   standard error output).
+   *
+   * - error mode
+   *
+   *   Only error messages are generated.
+   *
+   * - release mode:
+   *
+   *   No error message is sent or generated.  The code is free from any
+   *   debugging parts.
+   *
+   */
 
 
 #include <ft2build.h>
+#include FT_FREETYPE_H
 #include FT_INTERNAL_DEBUG_H
 
 
@@ -99,19 +100,38 @@
             int          line,
             const char*  file )
   {
+#if 0
+    /* activating the code in this block makes FreeType very chatty */
+    fprintf( stderr,
+             "%s:%d: error 0x%02x: %s\n",
+             file,
+             line,
+             error,
+             FT_Error_String( error ) );
+#else
     FT_UNUSED( error );
     FT_UNUSED( line );
     FT_UNUSED( file );
+#endif
 
     return 0;
   }
 
+#endif /* FT_DEBUG_LEVEL_ERROR */
+
 
 #ifdef FT_DEBUG_LEVEL_TRACE
 
+  /* array of trace levels, initialized to 0; */
+  /* this gets adjusted at run-time           */
+  static int  ft_trace_levels_enabled[trace_count];
 
-  /* array of trace levels, initialized to 0 */
-  int  ft_trace_levels[trace_count];
+  /* array of trace levels, always initialized to 0 */
+  static int  ft_trace_levels_disabled[trace_count];
+
+  /* a pointer to either `ft_trace_levels_enabled' */
+  /* or `ft_trace_levels_disabled'                 */
+  int*  ft_trace_levels;
 
   /* define array of trace toggle names */
 #define FT_TRACE_DEF( x )  #x ,
@@ -125,24 +145,66 @@
 #undef FT_TRACE_DEF
 
 
-  /*************************************************************************/
-  /*                                                                       */
-  /* Initialize the tracing sub-system.  This is done by retrieving the    */
-  /* value of the "FT2_DEBUG" environment variable.  It must be a list of  */
-  /* toggles, separated by spaces, `;' or `,'.  Example:                   */
-  /*                                                                       */
-  /*    "any:3 memory:6 stream:5"                                          */
-  /*                                                                       */
-  /* This will request that all levels be set to 3, except the trace level */
-  /* for the memory and stream components which are set to 6 and 5,        */
-  /* respectively.                                                         */
-  /*                                                                       */
-  /* See the file `include/freetype/internal/fttrace.h' for details of the */
-  /* available toggle names.                                               */
-  /*                                                                       */
-  /* The level must be between 0 and 6; 0 means quiet (except for serious  */
-  /* runtime errors), and 6 means _very_ verbose.                          */
-  /*                                                                       */
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return trace_count;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    int  max = FT_Trace_Get_Count();
+
+
+    if ( idx < max )
+      return ft_trace_toggles[idx];
+    else
+      return NULL;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    ft_trace_levels = ft_trace_levels_disabled;
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    ft_trace_levels = ft_trace_levels_enabled;
+  }
+
+
+  /**************************************************************************
+   *
+   * Initialize the tracing sub-system.  This is done by retrieving the
+   * value of the `FT2_DEBUG' environment variable.  It must be a list of
+   * toggles, separated by spaces, `;', or `,'.  Example:
+   *
+   *   export FT2_DEBUG="any:3 memory:7 stream:5"
+   *
+   * This requests that all levels be set to 3, except the trace level for
+   * the memory and stream components which are set to 7 and 5,
+   * respectively.
+   *
+   * See the file `include/freetype/internal/fttrace.h' for details of
+   * the available toggle names.
+   *
+   * The level must be between 0 and 7; 0 means quiet (except for serious
+   * runtime errors), and 7 means _very_ verbose.
+   */
   FT_BASE_DEF( void )
   ft_debug_init( void )
   {
@@ -171,8 +233,8 @@
 
         if ( *p == ':' && p > q )
         {
-          int  n, i, len = (int)( p - q );
-          int  level = -1, found = -1;
+          FT_Int  n, i, len = (FT_Int)( p - q );
+          FT_Int  level = -1, found = -1;
 
 
           for ( n = 0; n < trace_count; n++ )
@@ -206,16 +268,18 @@
           {
             if ( found == trace_any )
             {
-              /* special case for "any" */
+              /* special case for `any' */
               for ( n = 0; n < trace_count; n++ )
-                ft_trace_levels[n] = level;
+                ft_trace_levels_enabled[n] = level;
             }
             else
-              ft_trace_levels[found] = level;
+              ft_trace_levels_enabled[found] = level;
           }
         }
       }
     }
+
+    ft_trace_levels = ft_trace_levels_enabled;
   }
 
 
@@ -229,9 +293,39 @@
   }
 
 
-#endif /* !FT_DEBUG_LEVEL_TRACE */
+  FT_BASE_DEF( FT_Int )
+  FT_Trace_Get_Count( void )
+  {
+    return 0;
+  }
 
-#endif /* FT_DEBUG_LEVEL_ERROR */
+
+  FT_BASE_DEF( const char * )
+  FT_Trace_Get_Name( FT_Int  idx )
+  {
+    FT_UNUSED( idx );
+
+    return NULL;
+  }
+
+
+  FT_BASE_DEF( void )
+  FT_Trace_Disable( void )
+  {
+    /* nothing */
+  }
+
+
+  /* documentation is in ftdebug.h */
+
+  FT_BASE_DEF( void )
+  FT_Trace_Enable( void )
+  {
+    /* nothing */
+  }
+
+
+#endif /* !FT_DEBUG_LEVEL_TRACE */
 
 
 /* END */
diff --git a/builds/windows/vc2005/freetype.sln b/builds/windows/vc2005/freetype.sln
deleted file mode 100644
index ec3345d..0000000
--- a/builds/windows/vc2005/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 9.00

-# Visual Studio 2005

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32

-		LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32

-		LIB Debug|Win32 = LIB Debug|Win32

-		LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32

-		LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32

-		LIB Release|Win32 = LIB Release|Win32

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

diff --git a/builds/windows/vc2005/freetype.vcproj b/builds/windows/vc2005/freetype.vcproj
deleted file mode 100644
index b1e2ae6..0000000
--- a/builds/windows/vc2005/freetype.vcproj
+++ /dev/null
@@ -1,217 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject ProjectType="Visual C++" Version="8.00" Name="freetype" ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}" TargetFrameworkVersion="131072">

-  <Platforms>

-    <Platform Name="Win32" />

-  </Platforms>

-  <ToolFiles>

-  </ToolFiles>

-  <Configurations>

-    <Configuration Name="Release|Win32" OutputDirectory=".\..\..\..\objs\release" IntermediateDirectory=".\..\..\..\objs\release" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release/" ObjectFile=".\..\..\..\objs\release/" ProgramDataBaseFileName=".\..\..\..\objs\release/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291.lib" SuppressStartupBanner="true" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-    <Configuration Name="Release Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\release_mt" IntermediateDirectory=".\..\..\..\objs\release_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_mt/" ObjectFile=".\..\..\..\objs\release_mt/" ProgramDataBaseFileName=".\..\..\..\objs\release_mt/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT.lib" SuppressStartupBanner="true" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-    <Configuration Name="Release Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\release_st" IntermediateDirectory=".\..\..\..\objs\release_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="2" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\release_st/" ObjectFile=".\..\..\..\objs\release_st/" ProgramDataBaseFileName=".\..\..\..\objs\release_st/" WarningLevel="4" DebugInformationFormat="0" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="NDEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST.lib" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-    <Configuration Name="Debug|Win32" OutputDirectory=".\..\..\..\objs\debug" IntermediateDirectory=".\..\..\..\objs\debug" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="3" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug/" ObjectFile=".\..\..\..\objs\debug/" ProgramDataBaseFileName=".\..\..\..\objs\debug/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291_D.lib" SuppressStartupBanner="true" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-    <Configuration Name="Debug Singlethreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_st" IntermediateDirectory=".\..\..\..\objs\debug_st" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_st/" ObjectFile=".\..\..\..\objs\debug_st/" ProgramDataBaseFileName=".\..\..\..\objs\debug_st/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291ST_D.lib" SuppressStartupBanner="true" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-    <Configuration Name="Debug Multithreaded|Win32" OutputDirectory=".\..\..\..\objs\debug_mt" IntermediateDirectory=".\..\..\..\objs\debug_mt" ConfigurationType="4" InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops" UseOfMFC="0" ATLMinimizesCRunTimeLibraryUsage="false" CharacterSet="2">

-      <Tool Name="VCPreBuildEventTool" />

-      <Tool Name="VCCustomBuildTool" />

-      <Tool Name="VCXMLDataGeneratorTool" />

-      <Tool Name="VCWebServiceProxyGeneratorTool" />

-      <Tool Name="VCMIDLTool" />

-      <Tool Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\include" PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE" GeneratePreprocessedFile="0" BasicRuntimeChecks="3" RuntimeLibrary="1" DisableLanguageExtensions="true" PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch" AssemblerListingLocation=".\..\..\..\objs\debug_mt/" ObjectFile=".\..\..\..\objs\debug_mt/" ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/" WarningLevel="4" DebugInformationFormat="3" CompileAs="0" />

-      <Tool Name="VCManagedResourceCompilerTool" />

-      <Tool Name="VCResourceCompilerTool" PreprocessorDefinitions="_DEBUG" Culture="1033" />

-      <Tool Name="VCPreLinkEventTool" />

-      <Tool Name="VCLibrarianTool" OutputFile="..\..\..\objs\win32\vc2005\freetype291MT_D.lib" SuppressStartupBanner="true" />

-      <Tool Name="VCALinkTool" />

-      <Tool Name="VCXDCMakeTool" />

-      <Tool Name="VCBscMakeTool" />

-      <Tool Name="VCFxCopTool" />

-      <Tool Name="VCPostBuildEventTool" />

-    </Configuration>

-  </Configurations>

-  <References>

-  </References>

-  <Files>

-    <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">

-      <File RelativePath="..\..\..\src\autofit\autofit.c">

-      </File>

-      <File RelativePath="..\..\..\src\bdf\bdf.c">

-      </File>

-      <File RelativePath="..\..\..\src\cff\cff.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftbase.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftbitmap.c">

-      </File>

-      <File RelativePath="..\..\..\src\cache\ftcache.c">

-      </File>

-      <File RelativePath="..\ftdebug.c">

-        <FileConfiguration>

-          <Tool Name="VCCLCompilerTool" DisableLanguageExtensions="false" />

-        </FileConfiguration>

-      </File>

-      <File RelativePath="..\..\..\src\base\ftfstype.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftgasp.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftglyph.c">

-      </File>

-      <File RelativePath="..\..\..\src\gzip\ftgzip.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftinit.c">

-      </File>

-      <File RelativePath="..\..\..\src\lzw\ftlzw.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftstroke.c">

-      </File>

-      <File RelativePath="..\..\..\src\base\ftsystem.c">

-      </File>

-      <File RelativePath="..\..\..\src\smooth\smooth.c">

-      </File>

-      <Filter Name="FT_MODULES">

-        <File RelativePath="..\..\..\src\base\ftbdf.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftbbox.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftcid.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftmm.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftpfr.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftsynth.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\fttype1.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftwinfnt.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftgxval.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftotval.c">

-        </File>

-        <File RelativePath="..\..\..\src\base\ftpatent.c">

-        </File>

-        <File RelativePath="..\..\..\src\pcf\pcf.c">

-        </File>

-        <File RelativePath="..\..\..\src\pfr\pfr.c">

-        </File>

-        <File RelativePath="..\..\..\src\psaux\psaux.c">

-        </File>

-        <File RelativePath="..\..\..\src\pshinter\pshinter.c">

-        </File>

-        <File RelativePath="..\..\..\src\psnames\psmodule.c">

-        </File>

-        <File RelativePath="..\..\..\src\raster\raster.c">

-        </File>

-        <File RelativePath="..\..\..\src\sfnt\sfnt.c">

-        </File>

-        <File RelativePath="..\..\..\src\truetype\truetype.c">

-        </File>

-        <File RelativePath="..\..\..\src\type1\type1.c">

-        </File>

-        <File RelativePath="..\..\..\src\cid\type1cid.c">

-        </File>

-        <File RelativePath="..\..\..\src\type42\type42.c">

-        </File>

-        <File RelativePath="..\..\..\src\winfonts\winfnt.c">

-        </File>

-      </Filter>

-    </Filter>

-    <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl">

-      <File RelativePath="..\..\..\include\ft2build.h">

-      </File>

-      <File RelativePath="..\..\..\include\freetype\config\ftconfig.h">

-      </File>

-      <File RelativePath="..\..\..\include\freetype\config\ftheader.h">

-      </File>

-      <File RelativePath="..\..\..\include\freetype\config\ftmodule.h">

-      </File>

-      <File RelativePath="..\..\..\include\freetype\config\ftoption.h">

-      </File>

-      <File RelativePath="..\..\..\include\freetype\config\ftstdlib.h">

-      </File>

-    </Filter>

-  </Files>

-  <Globals>

-  </Globals>

-</VisualStudioProject>

diff --git a/builds/windows/vc2005/index.html b/builds/windows/vc2005/index.html
deleted file mode 100644
index c5e182e..0000000
--- a/builds/windows/vc2005/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
-  FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</title>
-
-<body>
-<h1>
-  FreeType&nbsp;2 Project Files for VS.NET&nbsp;2005
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>.  It
-compiles the following libraries from the FreeType 2.9.1 sources:</p>
-
-<ul>
-  <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
-archives are already stored this way, so no further action is required.  If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option.  Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/vc2008/freetype.sln b/builds/windows/vc2008/freetype.sln
deleted file mode 100644
index 6c522f9..0000000
--- a/builds/windows/vc2008/freetype.sln
+++ /dev/null
@@ -1,31 +0,0 @@
-Microsoft Visual Studio Solution File, Format Version 10.00

-# Visual Studio 2008

-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"

-EndProject

-Global

-	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		LIB Debug Multithreaded|Win32 = LIB Debug Multithreaded|Win32

-		LIB Debug Singlethreaded|Win32 = LIB Debug Singlethreaded|Win32

-		LIB Debug|Win32 = LIB Debug|Win32

-		LIB Release Multithreaded|Win32 = LIB Release Multithreaded|Win32

-		LIB Release Singlethreaded|Win32 = LIB Release Singlethreaded|Win32

-		LIB Release|Win32 = LIB Release|Win32

-	EndGlobalSection

-	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.ActiveCfg = Debug|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Debug|Win32.Build.0 = Debug|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.ActiveCfg = Release|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.LIB Release|Win32.Build.0 = Release|Win32

-	EndGlobalSection

-	GlobalSection(SolutionProperties) = preSolution

-		HideSolutionNode = FALSE

-	EndGlobalSection

-EndGlobal

diff --git a/builds/windows/vc2008/freetype.vcproj b/builds/windows/vc2008/freetype.vcproj
deleted file mode 100644
index f526cd2..0000000
--- a/builds/windows/vc2008/freetype.vcproj
+++ /dev/null
@@ -1,668 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>

-<VisualStudioProject

-	ProjectType="Visual C++"

-	Version="9,00"

-	Name="freetype"

-	ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"

-	TargetFrameworkVersion="131072"

-	>

-	<Platforms>

-		<Platform

-			Name="Win32"

-		/>

-	</Platforms>

-	<ToolFiles>

-	</ToolFiles>

-	<Configurations>

-		<Configuration

-			Name="Release|Win32"

-			OutputDirectory=".\..\..\..\objs\release"

-			IntermediateDirectory=".\..\..\..\objs\release"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"

-				StringPooling="true"

-				RuntimeLibrary="2"

-				EnableFunctionLevelLinking="true"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release/"

-				ObjectFile=".\..\..\..\objs\release/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release/"

-				WarningLevel="4"

-				DebugInformationFormat="0"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release Multithreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\release_mt"

-			IntermediateDirectory=".\..\..\..\objs\release_mt"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release_mt/"

-				ObjectFile=".\..\..\..\objs\release_mt/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"

-				WarningLevel="4"

-				DebugInformationFormat="0"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291MT.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release Singlethreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\release_st"

-			IntermediateDirectory=".\..\..\..\objs\release_st"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release_st/"

-				ObjectFile=".\..\..\..\objs\release_st/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release_st/"

-				WarningLevel="4"

-				DebugInformationFormat="0"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291ST.lib"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug|Win32"

-			OutputDirectory=".\..\..\..\objs\debug"

-			IntermediateDirectory=".\..\..\..\objs\debug"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="3"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug/"

-				ObjectFile=".\..\..\..\objs\debug/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug/"

-				WarningLevel="4"

-				DebugInformationFormat="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291_D.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug Singlethreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\debug_st"

-			IntermediateDirectory=".\..\..\..\objs\debug_st"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug_st/"

-				ObjectFile=".\..\..\..\objs\debug_st/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"

-				WarningLevel="4"

-				DebugInformationFormat="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291ST_D.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug Multithreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\debug_mt"

-			IntermediateDirectory=".\..\..\..\objs\debug_mt"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"

-				GeneratePreprocessedFile="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug_mt/"

-				ObjectFile=".\..\..\..\objs\debug_mt/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"

-				WarningLevel="4"

-				DebugInformationFormat="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\win32\vc2008\freetype291MT_D.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-	</Configurations>

-	<References>

-	</References>

-	<Files>

-		<Filter

-			Name="Source Files"

-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

-			>

-			<File

-				RelativePath="..\..\..\src\autofit\autofit.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\bdf\bdf.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\cff\cff.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftbase.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftbitmap.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\cache\ftcache.c"

-				>

-			</File>

-			<File

-				RelativePath="..\ftdebug.c"

-				>

-				<FileConfiguration>

-					<Tool

-						Name="VCCLCompilerTool"

-						DisableLanguageExtensions="false"

-					/>

-				</FileConfiguration>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftfstype.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftgasp.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftglyph.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\gzip\ftgzip.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftinit.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\lzw\ftlzw.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftstroke.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftsystem.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\smooth\smooth.c"

-				>

-			</File>

-			<Filter

-				Name="FT_MODULES"

-				>

-				<File

-					RelativePath="..\..\..\src\base\ftbbox.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftbdf.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftcid.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftmm.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftpfr.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftsynth.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\fttype1.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftwinfnt.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftgxval.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftotval.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftpatent.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\pcf\pcf.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\pfr\pfr.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\psaux\psaux.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\pshinter\pshinter.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\psnames\psmodule.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\raster\raster.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\sfnt\sfnt.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\truetype\truetype.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\type1\type1.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\cid\type1cid.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\type42\type42.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\winfonts\winfnt.c"

-					>

-				</File>

-			</Filter>

-		</Filter>

-		<Filter

-			Name="Header Files"

-			Filter="h;hpp;hxx;hm;inl"

-			>

-			<File

-				RelativePath="..\..\..\include\ft2build.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\include\freetype\config\ftconfig.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\include\freetype\config\ftheader.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\include\freetype\config\ftmodule.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\include\freetype\config\ftoption.h"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\include\freetype\config\ftstdlib.h"

-				>

-			</File>

-		</Filter>

-	</Files>

-	<Globals>

-	</Globals>

-</VisualStudioProject>

diff --git a/builds/windows/vc2008/index.html b/builds/windows/vc2008/index.html
deleted file mode 100644
index 25c6f9b..0000000
--- a/builds/windows/vc2008/index.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<html>
-<header>
-<title>
-  FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</title>
-
-<body>
-<h1>
-  FreeType&nbsp;2 Project Files for VS.NET&nbsp;2008
-</h1>
-
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.vcproj</tt>, and Visual Studio, called <tt>freetype.sln</tt>.  It
-compiles the following libraries from the FreeType 2.9.1 sources:</p>
-
-<ul>
-  <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
-</ul>
-
-<p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
-archives are already stored this way, so no further action is required.  If
-you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
-tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
-file smart CR/LF Conversion</em> option.  Alternatively, you may consider
-using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
-around, which specifically deal with this particular problem.
-
-<p>Build directories are placed in the top-level <tt>objs</tt>
-directory.</p>
-
-</body>
-</html>
diff --git a/builds/windows/vc2010/freetype.vcxproj b/builds/windows/vc2010/freetype.vcxproj
index 7052c6c..d61eeec 100644
--- a/builds/windows/vc2010/freetype.vcxproj
+++ b/builds/windows/vc2010/freetype.vcxproj
@@ -34,75 +34,44 @@
       <Platform>x64</Platform>

     </ProjectConfiguration>

   </ItemGroup>

-  <!--

-    Switch the PlatformToolset based on the Visual Studio Version

--->

-  <PropertyGroup>

-    <!-- Assume Visual Studio 2010 / 4.0 as the default -->

-    <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">4.0</VisualStudioVersion>

-  </PropertyGroup>

-  <!-- Visual Studio 2010 (4.0) -->

-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '4.0'">

-    <PlatformToolset>v100</PlatformToolset>

-  </PropertyGroup>

-  <!-- Visual Studio 2013 (12.0) -->

-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '12.0'">

-    <PlatformToolset>v120</PlatformToolset>

-  </PropertyGroup>

-  <!-- Visual Studio 2015 (14.0) -->

-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '14.0'">

-    <PlatformToolset>v140</PlatformToolset>

-  </PropertyGroup>

-  <!-- Visual Studio 2017 (15.0) -->

-  <PropertyGroup Condition="'$(VisualStudioVersion)' == '15.0'">

-    <PlatformToolset>v141</PlatformToolset>

-  </PropertyGroup>

-  <!--

-    End of: Switch the PlatformToolset based on the Visual Studio Version

--->

   <PropertyGroup Label="Globals">

     <ProjectGuid>{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}</ProjectGuid>

     <RootNamespace>FreeType</RootNamespace>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

+  <PropertyGroup Label="PlatformToolset">

+    <PlatformToolset>$(DefaultPlatformToolset)</PlatformToolset>

+  </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Static|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Static|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

-    <UseOfMfc>false</UseOfMfc>

     <CharacterSet>Unicode</CharacterSet>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

@@ -130,7 +99,6 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <CompileAsManaged>false</CompileAsManaged>

       <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>

       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>

     </ClCompile>

@@ -139,7 +107,6 @@
       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <TargetMachine>MachineX86</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>

@@ -158,7 +125,6 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <CompileAsManaged>false</CompileAsManaged>

       <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>

       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>

     </ClCompile>

@@ -167,7 +133,6 @@
       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <TargetMachine>MachineX64</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>

@@ -186,7 +151,6 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <CompileAsManaged>false</CompileAsManaged>

       <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>

       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>

     </ClCompile>

@@ -195,7 +159,6 @@
       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <TargetMachine>MachineX86</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>

@@ -214,7 +177,6 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <CompileAsManaged>false</CompileAsManaged>

       <ProgramDataBaseFileName>$(OutDir)$(TargetName).pdb</ProgramDataBaseFileName>

       <InlineFunctionExpansion>Disabled</InlineFunctionExpansion>

     </ClCompile>

@@ -223,7 +185,6 @@
       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <TargetMachine>MachineX64</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <AdditionalDependencies>$(UserDependencies);%(AdditionalDependencies)</AdditionalDependencies>

@@ -235,7 +196,6 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

       <FunctionLevelLinking>true</FunctionLevelLinking>

       <DisableLanguageExtensions>true</DisableLanguageExtensions>

@@ -243,26 +203,14 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <WholeProgramOptimization>false</WholeProgramOptimization>

       <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>

-      <FloatingPointExceptions>false</FloatingPointExceptions>

-      <CreateHotpatchableImage>false</CreateHotpatchableImage>

-      <CompileAsManaged>false</CompileAsManaged>

-      <ProgramDataBaseFileName>

-      </ProgramDataBaseFileName>

-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

       <IntrinsicFunctions>true</IntrinsicFunctions>

-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>

-      <OmitFramePointers>true</OmitFramePointers>

     </ClCompile>

     <ResourceCompile>

       <PreprocessorDefinitions>NDEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>

       <TargetMachine>MachineX86</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

@@ -275,7 +223,6 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

       <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>

       <FunctionLevelLinking>true</FunctionLevelLinking>

       <DisableLanguageExtensions>true</DisableLanguageExtensions>

@@ -283,26 +230,14 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <WholeProgramOptimization>false</WholeProgramOptimization>

       <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>

-      <FloatingPointExceptions>false</FloatingPointExceptions>

-      <CreateHotpatchableImage>false</CreateHotpatchableImage>

-      <CompileAsManaged>false</CompileAsManaged>

-      <ProgramDataBaseFileName>

-      </ProgramDataBaseFileName>

-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

       <IntrinsicFunctions>true</IntrinsicFunctions>

-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>

-      <OmitFramePointers>true</OmitFramePointers>

     </ClCompile>

     <ResourceCompile>

       <PreprocessorDefinitions>NDEBUG;DLL_EXPORT;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>

       <TargetMachine>MachineX64</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

@@ -315,7 +250,6 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <FunctionLevelLinking>true</FunctionLevelLinking>

       <DisableLanguageExtensions>true</DisableLanguageExtensions>

@@ -323,27 +257,14 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <WholeProgramOptimization>false</WholeProgramOptimization>

       <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>

-      <FloatingPointExceptions>false</FloatingPointExceptions>

-      <CreateHotpatchableImage>false</CreateHotpatchableImage>

-      <RuntimeTypeInfo>false</RuntimeTypeInfo>

-      <CompileAsManaged>false</CompileAsManaged>

-      <ProgramDataBaseFileName>

-      </ProgramDataBaseFileName>

-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

       <IntrinsicFunctions>true</IntrinsicFunctions>

-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>

-      <OmitFramePointers>true</OmitFramePointers>

     </ClCompile>

     <ResourceCompile>

       <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>

       <TargetMachine>MachineX86</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

@@ -356,7 +277,6 @@
       <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion>

       <AdditionalIncludeDirectories>$(UserOptionDirectory);..\..\..\include;$(UserIncludeDirectories);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>

       <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

-      <StringPooling>true</StringPooling>

       <RuntimeLibrary>MultiThreaded</RuntimeLibrary>

       <FunctionLevelLinking>true</FunctionLevelLinking>

       <DisableLanguageExtensions>true</DisableLanguageExtensions>

@@ -364,27 +284,14 @@
       <CompileAs>Default</CompileAs>

       <DisableSpecificWarnings>4001</DisableSpecificWarnings>

       <MultiProcessorCompilation>true</MultiProcessorCompilation>

-      <WholeProgramOptimization>false</WholeProgramOptimization>

       <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>

-      <FloatingPointExceptions>false</FloatingPointExceptions>

-      <CreateHotpatchableImage>false</CreateHotpatchableImage>

-      <RuntimeTypeInfo>false</RuntimeTypeInfo>

-      <CompileAsManaged>false</CompileAsManaged>

-      <ProgramDataBaseFileName>

-      </ProgramDataBaseFileName>

-      <EnableFiberSafeOptimizations>true</EnableFiberSafeOptimizations>

-      <DebugInformationFormat>

-      </DebugInformationFormat>

       <IntrinsicFunctions>true</IntrinsicFunctions>

-      <FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>

-      <OmitFramePointers>true</OmitFramePointers>

     </ClCompile>

     <ResourceCompile>

       <PreprocessorDefinitions>NDEBUG;$(UserDefines);%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <Culture>0x0409</Culture>

     </ResourceCompile>

     <Lib>

-      <SuppressStartupBanner>true</SuppressStartupBanner>

       <LinkTimeCodeGeneration>true</LinkTimeCodeGeneration>

       <TargetMachine>MachineX64</TargetMachine>

       <AdditionalLibraryDirectories>$(UserLibraryDirectories);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

diff --git a/builds/windows/vc2010/index.html b/builds/windows/vc2010/index.html
index 634ea93..eed4dd3 100644
--- a/builds/windows/vc2010/index.html
+++ b/builds/windows/vc2010/index.html
@@ -12,7 +12,7 @@
 <p>This directory contains solution and project files for
 Visual&nbsp;C++&nbsp;2010 or newer, named <tt>freetype.sln</tt>,
 and <tt>freetype.vcxproj</tt>.  It compiles the following libraries
-from the FreeType 2.9.1 sources:</p>
+from the FreeType 2.10.1 sources:</p>
 
 <ul>
   <li>freetype.dll using 'Release' or 'Debug' configurations</li>
@@ -30,7 +30,7 @@
 <p>To configure library dependencies like <em>zlib</em> and <em>libpng</em>,
 edit the <tt>freetype.users.props</tt> file in this directory.  It also
 simplifies automated (command-line) builds using <a
-href="http://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
+href="https://msdn.microsoft.com/library/dd393574%28v=vs.100%29.aspx">msbuild</a>.</p>
 
 <p>To link your executable with FreeType DLL, you may want to define
 DLL_IMPORT so that the imported functions are appropriately
diff --git a/builds/windows/visualc/freetype.dsp b/builds/windows/visualc/freetype.dsp
index dac3d25..028dd7b 100644
--- a/builds/windows/visualc/freetype.dsp
+++ b/builds/windows/visualc/freetype.dsp
@@ -2,9 +2,10 @@
 # Microsoft Developer Studio Generated Build File, Format Version 6.00

 # ** DO NOT EDIT **

 

+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102

 # TARGTYPE "Win32 (x86) Static Library" 0x0104

 

-CFG=freetype - Win32 Debug Singlethreaded

+CFG=freetype - Win32 Release

 !MESSAGE This is not a valid makefile. To build this project using NMAKE,

 !MESSAGE use the Export Makefile command and run

 !MESSAGE

@@ -13,24 +14,20 @@
 !MESSAGE You can specify a configuration when running NMAKE

 !MESSAGE by defining the macro CFG on the command line. For example:

 !MESSAGE

-!MESSAGE NMAKE /f "freetype.mak" CFG="freetype - Win32 Debug Singlethreaded"

+!MESSAGE NMAKE /f "freetype.mak" CFG="freetype - Win32 Release"

 !MESSAGE

 !MESSAGE Possible choices for configuration are:

 !MESSAGE

-!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Static Library")

-!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Static Library")

-!MESSAGE "freetype - Win32 Debug Multithreaded" (based on "Win32 (x86) Static Library")

-!MESSAGE "freetype - Win32 Release Multithreaded" (based on "Win32 (x86) Static Library")

-!MESSAGE "freetype - Win32 Release Singlethreaded" (based on "Win32 (x86) Static Library")

-!MESSAGE "freetype - Win32 Debug Singlethreaded" (based on "Win32 (x86) Static Library")

+!MESSAGE "freetype - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")

+!MESSAGE "freetype - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")

+!MESSAGE "freetype - Win32 Release Static" (based on "Win32 (x86) Static Library")

+!MESSAGE "freetype - Win32 Debug Static" (based on "Win32 (x86) Static Library")

 !MESSAGE

 

 # Begin Project

 # PROP AllowPerConfigDependencies 0

 # PROP Scc_ProjName ""

 # PROP Scc_LocalPath ""

-CPP=cl.exe

-RSC=rc.exe

 

 !IF  "$(CFG)" == "freetype - Win32 Release"

 

@@ -41,20 +38,27 @@
 # PROP BASE Target_Dir ""

 # PROP Use_MFC 0

 # PROP Use_Debug_Libraries 0

-# PROP Output_Dir "..\..\..\objs\release"

-# PROP Intermediate_Dir "..\..\..\objs\release"

+# PROP Output_Dir "..\..\..\objs\Win32\Release"

+# PROP Intermediate_Dir "..\..\..\objs\Win32\Release"

+# PROP Ignore_Export_Lib 0

 # PROP Target_Dir ""

-# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c

-# ADD CPP /MD /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c

-# SUBTRACT CPP /nologo /Z<none> /YX

+CPP=cl.exe

+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c

+# SUBTRACT BASE CPP /YX /Yc /Yu

+# ADD CPP /nologo /Za /MD /W3 /O2 /Oi /D "WIN32" /I "..\..\..\include" /D "_CRT_SECURE_NO_WARNINGS" /D "NDEBUG" /D "FT2_BUILD_LIBRARY" /D "DLL_EXPORT" /FD /c

+# SUBTRACT CPP /YX /Yc /Yu

+MTL=midl.exe

+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32

+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32

+RSC=rc.exe

 # ADD BASE RSC /l 0x409 /d "NDEBUG"

-# ADD RSC /l 0x409 /d "NDEBUG"

+# ADD RSC /l 0x409 /d "NDEBUG" /d "DLL_EXPORT"

 BSC32=bscmake.exe

 # ADD BASE BSC32 /nologo

 # ADD BSC32 /nologo

-LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"

+LINK32=link.exe

+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386

+# ADD LINK32 /nologo /dll /machine:I386 /out:"$(OutDir)\freetype.dll"

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug"

 

@@ -65,12 +69,73 @@
 # PROP BASE Target_Dir ""

 # PROP Use_MFC 0

 # PROP Use_Debug_Libraries 1

-# PROP Output_Dir "..\..\..\objs\debug"

-# PROP Intermediate_Dir "..\..\..\objs\debug"

+# PROP Output_Dir "..\..\..\objs\Win32\Debug"

+# PROP Intermediate_Dir "..\..\..\objs\Win32\Debug"

+# PROP Ignore_Export_Lib 0

 # PROP Target_Dir ""

-# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c

-# ADD CPP /MDd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c

-# SUBTRACT CPP /nologo /X /YX

+CPP=cl.exe

+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c

+# SUBTRACT BASE CPP /YX /Yc /Yu

+# ADD CPP /nologo /Za /MDd /W3 /Gm /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_CRT_SECURE_NO_WARNINGS" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "FT2_BUILD_LIBRARY" /D "DLL_EXPORT" /FR /FD /GZ /c

+# SUBTRACT CPP /YX /Yc /Yu

+MTL=midl.exe

+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32

+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32

+RSC=rc.exe

+# ADD BASE RSC /l 0x409 /d "_DEBUG"

+# ADD RSC /l 0x409 /d "_DEBUG" /d "DLL_EXPORT"

+BSC32=bscmake.exe

+# ADD BASE BSC32 /nologo

+# ADD BSC32 /nologo

+LINK32=link.exe

+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept

+# ADD LINK32 /nologo /dll /debug /machine:I386 /out:"$(OutDir)\freetype.dll" /pdbtype:sept

+

+!ELSEIF  "$(CFG)" == "freetype - Win32 Release Static"

+

+# PROP BASE Use_MFC 0

+# PROP BASE Use_Debug_Libraries 0

+# PROP BASE Output_Dir "Release Static"

+# PROP BASE Intermediate_Dir "Release Static"

+# PROP BASE Target_Dir ""

+# PROP Use_MFC 0

+# PROP Use_Debug_Libraries 0

+# PROP Output_Dir "..\..\..\objs\Win32\Release Static"

+# PROP Intermediate_Dir "..\..\..\objs\Win32\Release Static"

+# PROP Target_Dir ""

+CPP=cl.exe

+# ADD BASE CPP /nologo /MD /W3 /O2 /D "WIN32" /D "NDEBUG" /FD /c

+# SUBTRACT BASE CPP /YX /Yc /Yu

+# ADD CPP /nologo /Za /MD /W3 /O2 /Oi /D "WIN32" /I "..\..\..\include" /D "_CRT_SECURE_NO_WARNINGS" /D "NDEBUG" /D "FT2_BUILD_LIBRARY" /FD /c

+# SUBTRACT CPP /YX /Yc /Yu

+RSC=rc.exe

+# ADD BASE RSC /l 0x409 /d "NDEBUG"

+# ADD RSC /l 0x409 /d "NDEBUG"

+BSC32=bscmake.exe

+# ADD BASE BSC32 /nologo

+# ADD BSC32 /nologo

+LIB32=link.exe -lib

+# ADD BASE LIB32 /nologo

+# ADD LIB32 /nologo /out:"$(OutDir)\freetype.lib"

+

+!ELSEIF  "$(CFG)" == "freetype - Win32 Debug Static"

+

+# PROP BASE Use_MFC 0

+# PROP BASE Use_Debug_Libraries 1

+# PROP BASE Output_Dir "Debug Static"

+# PROP BASE Intermediate_Dir "Debug Static"

+# PROP BASE Target_Dir ""

+# PROP Use_MFC 0

+# PROP Use_Debug_Libraries 1

+# PROP Output_Dir "..\..\..\objs\Win32\Debug Static"

+# PROP Intermediate_Dir "..\..\..\objs\Win32\Debug Static"

+# PROP Target_Dir ""

+CPP=cl.exe

+# ADD BASE CPP /nologo /MDd /W3 /Gm /ZI /Od /D "WIN32" /D "_DEBUG" /FD /GZ /c

+# SUBTRACT BASE CPP /YX /Yc /Yu

+# ADD CPP /nologo /Za /MDd /W3 /Gm /ZI /Od /I "..\..\..\include" /D "WIN32" /D "_CRT_SECURE_NO_WARNINGS" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "FT2_BUILD_LIBRARY" /FR /FD /GZ /c

+# SUBTRACT CPP /YX /Yc /Yu

+RSC=rc.exe

 # ADD BASE RSC /l 0x409 /d "_DEBUG"

 # ADD RSC /l 0x409 /d "_DEBUG"

 BSC32=bscmake.exe

@@ -78,107 +143,7 @@
 # ADD BSC32 /nologo

 LIB32=link.exe -lib

 # ADD BASE LIB32 /nologo

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"

-

-!ELSEIF  "$(CFG)" == "freetype - Win32 Debug Multithreaded"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "freetype___Win32_Debug_Multithreaded"

-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Multithreaded"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "..\..\..\objs\debug_mt"

-# PROP Intermediate_Dir "..\..\..\objs\debug_mt"

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /Za /W3 /Gm /GX /ZI /Od /I "..\include\\" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /GZ /c

-# SUBTRACT BASE CPP /X

-# ADD CPP /MTd /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c

-# SUBTRACT CPP /nologo /X /YX

-# ADD BASE RSC /l 0x409 /d "_DEBUG"

-# ADD RSC /l 0x409 /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"

-

-!ELSEIF  "$(CFG)" == "freetype - Win32 Release Multithreaded"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "freetype___Win32_Release_Multithreaded"

-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Multithreaded"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "..\..\..\objs\release_mt"

-# PROP Intermediate_Dir "..\..\..\objs\release_mt"

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /Za /W3 /GX /O2 /I "..\include\\" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_FLAT_COMPILE" /YX /FD /c

-# ADD CPP /MT /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c

-# SUBTRACT CPP /nologo /Z<none> /YX

-# ADD BASE RSC /l 0x409 /d "NDEBUG"

-# ADD RSC /l 0x409 /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.lib"

-

-!ELSEIF  "$(CFG)" == "freetype - Win32 Release Singlethreaded"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 0

-# PROP BASE Output_Dir "freetype___Win32_Release_Singlethreaded"

-# PROP BASE Intermediate_Dir "freetype___Win32_Release_Singlethreaded"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 0

-# PROP Output_Dir "..\..\..\objs\release_st"

-# PROP Intermediate_Dir "..\..\..\objs\release_st"

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MD /Za /W4 /GX /Zi /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /FD /c

-# SUBTRACT BASE CPP /YX

-# ADD CPP /Za /W4 /GX /O2 /I "..\..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /c

-# SUBTRACT CPP /nologo /Z<none> /YX

-# ADD BASE RSC /l 0x409 /d "NDEBUG"

-# ADD RSC /l 0x409 /d "NDEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"

-# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"

-# SUBTRACT LIB32 /nologo

-

-!ELSEIF  "$(CFG)" == "freetype - Win32 Debug Singlethreaded"

-

-# PROP BASE Use_MFC 0

-# PROP BASE Use_Debug_Libraries 1

-# PROP BASE Output_Dir "freetype___Win32_Debug_Singlethreaded"

-# PROP BASE Intermediate_Dir "freetype___Win32_Debug_Singlethreaded"

-# PROP BASE Target_Dir ""

-# PROP Use_MFC 0

-# PROP Use_Debug_Libraries 1

-# PROP Output_Dir "..\..\..\objs\debug_st"

-# PROP Intermediate_Dir "..\..\..\objs\debug_st"

-# PROP Target_Dir ""

-# ADD BASE CPP /nologo /MDd /Za /W4 /Gm /GX /Zi /Od /I "..\..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /FD /GZ /c

-# SUBTRACT BASE CPP /X /YX

-# ADD CPP /Za /W4 /GX /Z7 /Od /I "..\..\..\include" /D "_DEBUG" /D "FT_DEBUG_LEVEL_ERROR" /D "FT_DEBUG_LEVEL_TRACE" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FT2_BUILD_LIBRARY" /FD /GZ /c

-# SUBTRACT CPP /nologo /X /YX

-# ADD BASE RSC /l 0x409 /d "_DEBUG"

-# ADD RSC /l 0x409 /d "_DEBUG"

-BSC32=bscmake.exe

-# ADD BASE BSC32 /nologo

-# ADD BSC32 /nologo

-LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"

+# ADD LIB32 /nologo /out:"$(OutDir)\freetype.lib"

 

 !ENDIF

 

@@ -186,10 +151,8 @@
 

 # Name "freetype - Win32 Release"

 # Name "freetype - Win32 Debug"

-# Name "freetype - Win32 Debug Multithreaded"

-# Name "freetype - Win32 Release Multithreaded"

-# Name "freetype - Win32 Release Singlethreaded"

-# Name "freetype - Win32 Debug Singlethreaded"

+# Name "freetype - Win32 Release Static"

+# Name "freetype - Win32 Debug Static"

 # Begin Group "Source Files"

 

 # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"

@@ -379,5 +342,13 @@
 SOURCE=..\..\..\include\freetype\config\ftstdlib.h

 # End Source File

 # End Group

+# Begin Group "Resource Files"

+

+# PROP Default_Filter "rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"

+# Begin Source File

+

+SOURCE=..\..\..\src\base\ftver.rc

+# End Source File

+# End Group

 # End Target

 # End Project

diff --git a/builds/windows/visualc/freetype.sln b/builds/windows/visualc/freetype.sln
index 1f64be2..9054d0a 100644
--- a/builds/windows/visualc/freetype.sln
+++ b/builds/windows/visualc/freetype.sln
@@ -1,27 +1,21 @@
-Microsoft Visual Studio Solution File, Format Version 9.00

-# Visual Studio 2005

+Microsoft Visual Studio Solution File, Format Version 7.00

+# Visual C++ 2002-2008

 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "freetype", "freetype.vcproj", "{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"

 EndProject

 Global

 	GlobalSection(SolutionConfigurationPlatforms) = preSolution

-		Debug Multithreaded|Win32 = Debug Multithreaded|Win32

-		Debug Singlethreaded|Win32 = Debug Singlethreaded|Win32

+		Debug Static|Win32 = Debug Static|Win32

 		Debug|Win32 = Debug|Win32

-		Release Multithreaded|Win32 = Release Multithreaded|Win32

-		Release Singlethreaded|Win32 = Release Singlethreaded|Win32

+		Release Static|Win32 = Release Static|Win32

 		Release|Win32 = Release|Win32

 	EndGlobalSection

 	GlobalSection(ProjectConfigurationPlatforms) = postSolution

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.ActiveCfg = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Multithreaded|Win32.Build.0 = Debug Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.ActiveCfg = Debug Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Singlethreaded|Win32.Build.0 = Debug Singlethreaded|Win32

+		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|Win32.ActiveCfg = Debug Static|Win32

+		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug Static|Win32.Build.0 = Debug Static|Win32

 		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.ActiveCfg = Debug|Win32

 		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Debug|Win32.Build.0 = Debug|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.ActiveCfg = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Multithreaded|Win32.Build.0 = Release Multithreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.ActiveCfg = Release Singlethreaded|Win32

-		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Singlethreaded|Win32.Build.0 = Release Singlethreaded|Win32

+		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|Win32.ActiveCfg = Release Static|Win32

+		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release Static|Win32.Build.0 = Release Static|Win32

 		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.ActiveCfg = Release|Win32

 		{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}.Release|Win32.Build.0 = Release|Win32

 	EndGlobalSection

diff --git a/builds/windows/visualc/freetype.vcproj b/builds/windows/visualc/freetype.vcproj
index dd0c418..ecb5b05 100644
--- a/builds/windows/visualc/freetype.vcproj
+++ b/builds/windows/visualc/freetype.vcproj
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="Windows-1252"?>

 <VisualStudioProject

 	ProjectType="Visual C++"

-	Version="8.00"

 	Name="freetype"

 	ProjectGUID="{78B079BD-9FC7-4B9E-B4A6-96DA0F00248B}"

 	>

@@ -15,13 +14,12 @@
 	<Configurations>

 		<Configuration

 			Name="Release|Win32"

-			OutputDirectory=".\..\..\..\objs\release"

-			IntermediateDirectory=".\..\..\..\objs\release"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

+			OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			ConfigurationType="2"

 			UseOfMFC="0"

 			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			CharacterSet="1"

 			>

 			<Tool

 				Name="VCPreBuildEventTool"

@@ -42,40 +40,39 @@
 				Name="VCCLCompilerTool"

 				Optimization="2"

 				InlineFunctionExpansion="1"

+				EnableIntrinsicFunctions="true"

 				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"

+				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY;DLL_EXPORT"

 				StringPooling="true"

 				RuntimeLibrary="2"

 				EnableFunctionLevelLinking="true"

 				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release/"

-				ObjectFile=".\..\..\..\objs\release/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release/"

 				WarningLevel="4"

 				DebugInformationFormat="0"

 				CompileAs="0"

+				DisableSpecificWarnings="4001"

 			/>

 			<Tool

 				Name="VCManagedResourceCompilerTool"

 			/>

 			<Tool

 				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

+				PreprocessorDefinitions="NDEBUG;DLL_EXPORT"

 				Culture="1033"

 			/>

 			<Tool

 				Name="VCPreLinkEventTool"

 			/>

 			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

-				SuppressStartupBanner="true"

+				Name="VCLinkerTool"

 			/>

 			<Tool

 				Name="VCALinkTool"

 			/>

 			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

 				Name="VCXDCMakeTool"

 			/>

 			<Tool

@@ -85,18 +82,20 @@
 				Name="VCFxCopTool"

 			/>

 			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

 		<Configuration

-			Name="Release Multithreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\release_mt"

-			IntermediateDirectory=".\..\..\..\objs\release_mt"

+			Name="Release Static|Win32"

+			OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

 			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

 			UseOfMFC="0"

 			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			CharacterSet="1"

 			>

 			<Tool

 				Name="VCPreBuildEventTool"

@@ -117,19 +116,17 @@
 				Name="VCCLCompilerTool"

 				Optimization="2"

 				InlineFunctionExpansion="1"

+				EnableIntrinsicFunctions="true"

 				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"

+				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT2_BUILD_LIBRARY"

 				StringPooling="true"

 				RuntimeLibrary="0"

 				EnableFunctionLevelLinking="true"

 				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release_mt/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release_mt/"

-				ObjectFile=".\..\..\..\objs\release_mt/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release_mt/"

 				WarningLevel="4"

 				DebugInformationFormat="0"

 				CompileAs="0"

+				DisableSpecificWarnings="4001"

 			/>

 			<Tool

 				Name="VCManagedResourceCompilerTool"

@@ -144,82 +141,6 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Release Singlethreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\release_st"

-			IntermediateDirectory=".\..\..\..\objs\release_st"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="2"

-				InlineFunctionExpansion="1"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="NDEBUG;WIN32;_LIB;FT2_BUILD_LIBRARY"

-				StringPooling="true"

-				RuntimeLibrary="0"

-				EnableFunctionLevelLinking="true"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\release_st/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\release_st/"

-				ObjectFile=".\..\..\..\objs\release_st/"

-				ProgramDataBaseFileName=".\..\..\..\objs\release_st/"

-				WarningLevel="4"

-				DebugInformationFormat="0"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="NDEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -239,13 +160,12 @@
 		</Configuration>

 		<Configuration

 			Name="Debug|Win32"

-			OutputDirectory=".\..\..\..\objs\debug"

-			IntermediateDirectory=".\..\..\..\objs\debug"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

+			OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			ConfigurationType="2"

 			UseOfMFC="0"

 			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			CharacterSet="1"

 			>

 			<Tool

 				Name="VCPreBuildEventTool"

@@ -266,38 +186,36 @@
 				Name="VCCLCompilerTool"

 				Optimization="0"

 				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"

+				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;DLL_EXPORT"

 				BasicRuntimeChecks="3"

 				RuntimeLibrary="3"

 				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug/"

-				ObjectFile=".\..\..\..\objs\debug/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug/"

 				WarningLevel="4"

 				DebugInformationFormat="3"

 				CompileAs="0"

+				DisableSpecificWarnings="4001"

 			/>

 			<Tool

 				Name="VCManagedResourceCompilerTool"

 			/>

 			<Tool

 				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

+				PreprocessorDefinitions="_DEBUG;DLL_EXPORT"

 				Culture="1033"

 			/>

 			<Tool

 				Name="VCPreLinkEventTool"

 			/>

 			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

-				SuppressStartupBanner="true"

+				Name="VCLinkerTool"

 			/>

 			<Tool

 				Name="VCALinkTool"

 			/>

 			<Tool

+				Name="VCManifestTool"

+			/>

+			<Tool

 				Name="VCXDCMakeTool"

 			/>

 			<Tool

@@ -307,18 +225,20 @@
 				Name="VCFxCopTool"

 			/>

 			<Tool

+				Name="VCAppVerifierTool"

+			/>

+			<Tool

 				Name="VCPostBuildEventTool"

 			/>

 		</Configuration>

 		<Configuration

-			Name="Debug Singlethreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\debug_st"

-			IntermediateDirectory=".\..\..\..\objs\debug_st"

+			Name="Debug Static|Win32"

+			OutputDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

+			IntermediateDirectory="..\..\..\objs\$(PlatformName)\$(ConfigurationName)\"

 			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

 			UseOfMFC="0"

 			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

+			CharacterSet="1"

 			>

 			<Tool

 				Name="VCPreBuildEventTool"

@@ -339,17 +259,14 @@
 				Name="VCCLCompilerTool"

 				Optimization="0"

 				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"

+				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY"

 				BasicRuntimeChecks="3"

 				RuntimeLibrary="1"

 				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug_st/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug_st/"

-				ObjectFile=".\..\..\..\objs\debug_st/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug_st/"

 				WarningLevel="4"

 				DebugInformationFormat="3"

 				CompileAs="0"

+				DisableSpecificWarnings="4001"

 			/>

 			<Tool

 				Name="VCManagedResourceCompilerTool"

@@ -364,82 +281,6 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

-				SuppressStartupBanner="true"

-			/>

-			<Tool

-				Name="VCALinkTool"

-			/>

-			<Tool

-				Name="VCXDCMakeTool"

-			/>

-			<Tool

-				Name="VCBscMakeTool"

-			/>

-			<Tool

-				Name="VCFxCopTool"

-			/>

-			<Tool

-				Name="VCPostBuildEventTool"

-			/>

-		</Configuration>

-		<Configuration

-			Name="Debug Multithreaded|Win32"

-			OutputDirectory=".\..\..\..\objs\debug_mt"

-			IntermediateDirectory=".\..\..\..\objs\debug_mt"

-			ConfigurationType="4"

-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"

-			UseOfMFC="0"

-			ATLMinimizesCRunTimeLibraryUsage="false"

-			CharacterSet="2"

-			>

-			<Tool

-				Name="VCPreBuildEventTool"

-			/>

-			<Tool

-				Name="VCCustomBuildTool"

-			/>

-			<Tool

-				Name="VCXMLDataGeneratorTool"

-			/>

-			<Tool

-				Name="VCWebServiceProxyGeneratorTool"

-			/>

-			<Tool

-				Name="VCMIDLTool"

-			/>

-			<Tool

-				Name="VCCLCompilerTool"

-				Optimization="0"

-				AdditionalIncludeDirectories="..\..\..\include"

-				PreprocessorDefinitions="_DEBUG;WIN32;_LIB;FT_DEBUG_LEVEL_ERROR;FT_DEBUG_LEVEL_TRACE;FT2_BUILD_LIBRARY;_CRT_SECURE_NO_DEPRECATE"

-				GeneratePreprocessedFile="0"

-				BasicRuntimeChecks="3"

-				RuntimeLibrary="1"

-				DisableLanguageExtensions="true"

-				PrecompiledHeaderFile=".\..\..\..\objs\debug_mt/freetype.pch"

-				AssemblerListingLocation=".\..\..\..\objs\debug_mt/"

-				ObjectFile=".\..\..\..\objs\debug_mt/"

-				ProgramDataBaseFileName=".\..\..\..\objs\debug_mt/"

-				WarningLevel="4"

-				DebugInformationFormat="3"

-				CompileAs="0"

-			/>

-			<Tool

-				Name="VCManagedResourceCompilerTool"

-			/>

-			<Tool

-				Name="VCResourceCompilerTool"

-				PreprocessorDefinitions="_DEBUG"

-				Culture="1033"

-			/>

-			<Tool

-				Name="VCPreLinkEventTool"

-			/>

-			<Tool

-				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

-				SuppressStartupBanner="true"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -486,26 +327,52 @@
 				>

 			</File>

 			<File

-				RelativePath="..\..\..\src\base\ftfstype.c"

-				>

-			</File>

-			<File

-				RelativePath="..\..\..\src\base\ftgasp.c"

-				>

-			</File>

-			<File

 				RelativePath="..\..\..\src\cache\ftcache.c"

 				>

 			</File>

 			<File

 				RelativePath="..\ftdebug.c"

 				>

-				<FileConfiguration>

+				<FileConfiguration

+					Name="Release|Win32"

+					>

 					<Tool

 						Name="VCCLCompilerTool"

 						DisableLanguageExtensions="false"

 					/>

 				</FileConfiguration>

+				<FileConfiguration

+					Name="Release Static|Win32"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+						DisableLanguageExtensions="false"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

+					Name="Debug|Win32"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+						DisableLanguageExtensions="false"

+					/>

+				</FileConfiguration>

+				<FileConfiguration

+					Name="Debug Static|Win32"

+					>

+					<Tool

+						Name="VCCLCompilerTool"

+						DisableLanguageExtensions="false"

+					/>

+				</FileConfiguration>

+			</File>

+			<File

+				RelativePath="..\..\..\src\base\ftfstype.c"

+				>

+			</File>

+			<File

+				RelativePath="..\..\..\src\base\ftgasp.c"

+				>

 			</File>

 			<File

 				RelativePath="..\..\..\src\base\ftglyph.c"

@@ -551,10 +418,22 @@
 					>

 				</File>

 				<File

+					RelativePath="..\..\..\src\base\ftgxval.c"

+					>

+				</File>

+				<File

 					RelativePath="..\..\..\src\base\ftmm.c"

 					>

 				</File>

 				<File

+					RelativePath="..\..\..\src\base\ftotval.c"

+					>

+				</File>

+				<File

+					RelativePath="..\..\..\src\base\ftpatent.c"

+					>

+				</File>

+				<File

 					RelativePath="..\..\..\src\base\ftpfr.c"

 					>

 				</File>

@@ -571,18 +450,6 @@
 					>

 				</File>

 				<File

-					RelativePath="..\..\..\src\base\ftgxval.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftotval.c"

-					>

-				</File>

-				<File

-					RelativePath="..\..\..\src\base\ftpatent.c"

-					>

-				</File>

-				<File

 					RelativePath="..\..\..\src\pcf\pcf.c"

 					>

 				</File>

@@ -661,6 +528,15 @@
 				>

 			</File>

 		</Filter>

+		<Filter

+			Name="Resource Files"

+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx"

+			>

+			<File

+				RelativePath="..\..\..\src\base\ftver.rc"

+				>

+			</File>

+		</Filter>

 	</Files>

 	<Globals>

 	</Globals>

diff --git a/builds/windows/visualc/index.html b/builds/windows/visualc/index.html
index c0611d2..423244a 100644
--- a/builds/windows/visualc/index.html
+++ b/builds/windows/visualc/index.html
@@ -1,31 +1,32 @@
 <html>
 <header>
 <title>
-  FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+  FreeType&nbsp;2 Project Files for Visual&nbsp;C++ 6.0 and 2002-2008
 </title>
 
 <body>
 <h1>
-  FreeType&nbsp;2 Project Files for Visual&nbsp;C++ and VS.NET&nbsp;2005
+  FreeType&nbsp;2 Project Files for Visual&nbsp;C++ 6.0 and 2002-2008
 </h1>
 
-<p>This directory contains project files for Visual C++, named
-<tt>freetype.dsp</tt>, and Visual Studio, called <tt>freetype.sln</tt>.  It
-compiles the following libraries from the FreeType 2.9.1 sources:</p>
+<p>This directory contains project files <tt>freetype.dsp</tt> for
+Visual C++ 6.0, and <tt>freetype.vcproj</tt> for Visual C++ 2002
+through 2008, which you might need to upgrade automatically.
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
 
 <ul>
-  <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
+  <li>freetype.dll using 'Release' or 'Debug' configurations</li>
+  <li>freetype.lib using 'Release Static' or 'Debug Static' configurations</li>
 </ul>
 
+<p>Build directories and target files are placed in the top-level
+<tt>objs</tt> directory.</p>
+
 <p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
 archives are already stored this way, so no further action is required.  If
 you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
 tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
 file smart CR/LF Conversion</em> option.  Alternatively, you may consider
 using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
 around, which specifically deal with this particular problem.
diff --git a/builds/windows/visualce/freetype.dsp b/builds/windows/visualce/freetype.dsp
index 5fe2b5a..cb1205d 100644
--- a/builds/windows/visualce/freetype.dsp
+++ b/builds/windows/visualce/freetype.dsp
@@ -54,7 +54,7 @@
 # ADD BSC32 /nologo

 LIB32=link.exe -lib

 # ADD BASE LIB32 /nologo

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"

+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101.lib"

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug"

 

@@ -78,7 +78,7 @@
 # ADD BSC32 /nologo

 LIB32=link.exe -lib

 # ADD BASE LIB32 /nologo

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"

+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101_D.lib"

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug Multithreaded"

 

@@ -102,8 +102,8 @@
 # ADD BASE BSC32 /nologo

 # ADD BSC32 /nologo

 LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"lib\freetype291_D.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT_D.lib"

+# ADD BASE LIB32 /nologo /out:"lib\freetype2101_D.lib"

+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101MT_D.lib"

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Release Multithreaded"

 

@@ -126,8 +126,8 @@
 # ADD BASE BSC32 /nologo

 # ADD BSC32 /nologo

 LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"lib\freetype291.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291MT.lib"

+# ADD BASE LIB32 /nologo /out:"lib\freetype2101.lib"

+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101MT.lib"

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Release Singlethreaded"

 

@@ -151,8 +151,8 @@
 # ADD BASE BSC32 /nologo

 # ADD BSC32 /nologo

 LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291.lib"

-# ADD LIB32 /out:"..\..\..\objs\freetype291ST.lib"

+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2101.lib"

+# ADD LIB32 /out:"..\..\..\objs\freetype2101ST.lib"

 # SUBTRACT LIB32 /nologo

 

 !ELSEIF  "$(CFG)" == "freetype - Win32 Debug Singlethreaded"

@@ -177,8 +177,8 @@
 # ADD BASE BSC32 /nologo

 # ADD BSC32 /nologo

 LIB32=link.exe -lib

-# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype291_D.lib"

-# ADD LIB32 /nologo /out:"..\..\..\objs\freetype291ST_D.lib"

+# ADD BASE LIB32 /nologo /out:"..\..\..\objs\freetype2101_D.lib"

+# ADD LIB32 /nologo /out:"..\..\..\objs\freetype2101ST_D.lib"

 

 !ENDIF

 

diff --git a/builds/windows/visualce/freetype.vcproj b/builds/windows/visualce/freetype.vcproj
index b797311..96b51e9 100644
--- a/builds/windows/visualce/freetype.vcproj
+++ b/builds/windows/visualce/freetype.vcproj
@@ -87,7 +87,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -162,7 +162,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -237,7 +237,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -309,7 +309,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -382,7 +382,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -456,7 +456,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -534,7 +534,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -619,7 +619,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -704,7 +704,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -785,7 +785,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -867,7 +867,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -950,7 +950,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1036,7 +1036,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1121,7 +1121,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1206,7 +1206,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1287,7 +1287,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1369,7 +1369,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1452,7 +1452,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1538,7 +1538,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1623,7 +1623,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1708,7 +1708,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -1789,7 +1789,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1871,7 +1871,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -1954,7 +1954,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2040,7 +2040,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2125,7 +2125,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2210,7 +2210,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -2291,7 +2291,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2373,7 +2373,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2456,7 +2456,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2542,7 +2542,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2627,7 +2627,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2712,7 +2712,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -2793,7 +2793,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2875,7 +2875,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -2958,7 +2958,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3044,7 +3044,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291.lib"

+				OutputFile="..\..\..\objs\freetype2101.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3129,7 +3129,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT.lib"

+				OutputFile="..\..\..\objs\freetype2101MT.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3214,7 +3214,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST.lib"

+				OutputFile="..\..\..\objs\freetype2101ST.lib"

 			/>

 			<Tool

 				Name="VCALinkTool"

@@ -3295,7 +3295,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291_D.lib"

+				OutputFile="..\..\..\objs\freetype2101_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3377,7 +3377,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291ST_D.lib"

+				OutputFile="..\..\..\objs\freetype2101ST_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

@@ -3460,7 +3460,7 @@
 			/>

 			<Tool

 				Name="VCLibrarianTool"

-				OutputFile="..\..\..\objs\freetype291MT_D.lib"

+				OutputFile="..\..\..\objs\freetype2101MT_D.lib"

 				SuppressStartupBanner="true"

 			/>

 			<Tool

diff --git a/builds/windows/visualce/index.html b/builds/windows/visualce/index.html
index d5a3ca3..95e61fc 100644
--- a/builds/windows/visualce/index.html
+++ b/builds/windows/visualce/index.html
@@ -21,21 +21,21 @@
   <li>PPC/SP WM6 (Windows Mobile 6)</li>
 </ul>
 
-It compiles the following libraries from the FreeType 2.9.1 sources:</p>
+It compiles the following libraries from the FreeType 2.10.1 sources:</p>
 
 <ul>
   <pre>
-    freetype291.lib     - release build; single threaded
-    freetype291_D.lib   - debug build;   single threaded
-    freetype291MT.lib   - release build; multi-threaded
-    freetype291MT_D.lib - debug build;   multi-threaded</pre>
+    freetype2101.lib     - release build; single threaded
+    freetype2101_D.lib   - debug build;   single threaded
+    freetype2101MT.lib   - release build; multi-threaded
+    freetype2101MT_D.lib - debug build;   multi-threaded</pre>
 </ul>
 
 <p>Be sure to extract the files with the Windows (CR+LF) line endings.  ZIP
 archives are already stored this way, so no further action is required.  If
 you use some <tt>.tar.*z</tt> archives, be sure to configure your extracting
 tool to convert the line endings.  For example, with <a
-href="http://www.winzip.com">WinZip</a>, you should activate the <em>TAR
+href="https://www.winzip.com">WinZip</a>, you should activate the <em>TAR
 file smart CR/LF Conversion</em> option.  Alternatively, you may consider
 using the <tt>unix2dos</tt> or <tt>u2d</tt> utilities that are floating
 around, which specifically deal with this particular problem.
diff --git a/builds/windows/w32-bcc.mk b/builds/windows/w32-bcc.mk
index 01aab1c..39262ff 100644
--- a/builds/windows/w32-bcc.mk
+++ b/builds/windows/w32-bcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-bccd.mk b/builds/windows/w32-bccd.mk
index 2c14d6c..20e272f 100644
--- a/builds/windows/w32-bccd.mk
+++ b/builds/windows/w32-bccd.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-dev.mk b/builds/windows/w32-dev.mk
index 279d5f9..30c5a8f 100644
--- a/builds/windows/w32-dev.mk
+++ b/builds/windows/w32-dev.mk
@@ -5,7 +5,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-gcc.mk b/builds/windows/w32-gcc.mk
index 9e3476b..4a07bb0 100644
--- a/builds/windows/w32-gcc.mk
+++ b/builds/windows/w32-gcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-icc.mk b/builds/windows/w32-icc.mk
index e695c12..fb1fc1a 100644
--- a/builds/windows/w32-icc.mk
+++ b/builds/windows/w32-icc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-intl.mk b/builds/windows/w32-intl.mk
index 1e36662..252eae2 100644
--- a/builds/windows/w32-intl.mk
+++ b/builds/windows/w32-intl.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-lcc.mk b/builds/windows/w32-lcc.mk
index 5729d36..aa40e56 100644
--- a/builds/windows/w32-lcc.mk
+++ b/builds/windows/w32-lcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-mingw32.mk b/builds/windows/w32-mingw32.mk
index b3a210d..3913dac 100644
--- a/builds/windows/w32-mingw32.mk
+++ b/builds/windows/w32-mingw32.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-vcc.mk b/builds/windows/w32-vcc.mk
index 342c8aa..cc38a45 100644
--- a/builds/windows/w32-vcc.mk
+++ b/builds/windows/w32-vcc.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/w32-wat.mk b/builds/windows/w32-wat.mk
index 37ecc88..842fbce 100644
--- a/builds/windows/w32-wat.mk
+++ b/builds/windows/w32-wat.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/builds/windows/win32-def.mk b/builds/windows/win32-def.mk
index f83d444..23ba80a 100644
--- a/builds/windows/win32-def.mk
+++ b/builds/windows/win32-def.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -19,6 +19,10 @@
 BUILD_DIR := $(TOP_DIR)/builds/windows
 PLATFORM  := windows
 
+# This is used for `make refdoc' and `make refdoc-venv'
+#
+BIN := Scripts
+
 # The executable file extension (for tools). NOTE: WE INCLUDE THE DOT HERE !!
 #
 E := .exe
diff --git a/configure b/configure
index f9d2186..9a64f69 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -96,6 +96,8 @@
 if test $inode_src -ne $inode_dst; then
   if test ! -d reference; then
     mkdir reference
+    echo "Copying documentation assets"
+    cp -R $abs_ft2_dir/docs/reference/markdown $abs_curr_dir/reference
   fi
   if test ! -r $abs_curr_dir/modules.cfg; then
     echo "Copying \`modules.cfg'"
diff --git a/devel/ft2build.h b/devel/ft2build.h
index bd4dddb..42fd39f 100644
--- a/devel/ft2build.h
+++ b/devel/ft2build.h
@@ -4,7 +4,7 @@
  *
  *   FreeType 2 build and setup macros (development version).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/devel/ftoption.h b/devel/ftoption.h
index c434ac1..16cf4e1 100644
--- a/devel/ftoption.h
+++ b/devel/ftoption.h
@@ -4,7 +4,7 @@
  *
  *   User-selectable configuration macros (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,39 +29,39 @@
    *
    *                USER-SELECTABLE CONFIGURATION MACROS
    *
-   * This file contains the default configuration macro definitions for
-   * a standard build of the FreeType library.  There are three ways to
-   * use this file to build project-specific versions of the library:
+   * This file contains the default configuration macro definitions for a
+   * standard build of the FreeType library.  There are three ways to use
+   * this file to build project-specific versions of the library:
    *
    * - You can modify this file by hand, but this is not recommended in
-   *   cases where you would like to build several versions of the
-   *   library from a single source directory.
+   *   cases where you would like to build several versions of the library
+   *   from a single source directory.
    *
    * - You can put a copy of this file in your build directory, more
-   *   precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD'
-   *   is the name of a directory that is included _before_ the FreeType
-   *   include path during compilation.
+   *   precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is
+   *   the name of a directory that is included _before_ the FreeType include
+   *   path during compilation.
    *
-   *   The default FreeType Makefiles and Jamfiles use the build
-   *   directory `builds/<system>' by default, but you can easily change
-   *   that for your own projects.
+   *   The default FreeType Makefiles and Jamfiles use the build directory
+   *   `builds/<system>` by default, but you can easily change that for your
+   *   own projects.
    *
-   * - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it
-   *   slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to
-   *   locate this file during the build.  For example,
+   * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it
+   *   slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate
+   *   this file during the build.  For example,
    *
-   *   {
+   *   ```
    *     #define FT_CONFIG_OPTIONS_H  <myftoptions.h>
    *     #include <freetype/config/ftheader.h>
-   *   }
+   *   ```
    *
-   *   will use `$BUILD/myftoptions.h' instead of this file for macro
+   *   will use `$BUILD/myftoptions.h` instead of this file for macro
    *   definitions.
    *
    *   Note also that you can similarly pre-define the macro
-   *   FT_CONFIG_MODULES_H used to locate the file listing of the modules
+   *   `FT_CONFIG_MODULES_H` used to locate the file listing of the modules
    *   that are statically linked to the library at compile time.  By
-   *   default, this file is <freetype/config/ftmodule.h>.
+   *   default, this file is `<freetype/config/ftmodule.h>`.
    *
    * We highly recommend using the third method whenever possible.
    *
@@ -80,18 +80,18 @@
   /*#************************************************************************
    *
    * If you enable this configuration option, FreeType recognizes an
-   * environment variable called `FREETYPE_PROPERTIES', which can be used to
+   * environment variable called `FREETYPE_PROPERTIES`, which can be used to
    * control the various font drivers and modules.  The controllable
    * properties are listed in the section @properties.
    *
    * You have to undefine this configuration option on platforms that lack
-   * the concept of environment variables (and thus don't have the `getenv'
+   * the concept of environment variables (and thus don't have the `getenv`
    * function), for example Windows CE.
    *
-   * `FREETYPE_PROPERTIES' has the following syntax form (broken here into
+   * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
    * multiple lines for better readability).
    *
-   * {
+   * ```
    *   <optional whitespace>
    *   <module-name1> ':'
    *   <property-name1> '=' <property-value1>
@@ -99,15 +99,15 @@
    *   <module-name2> ':'
    *   <property-name2> '=' <property-value2>
    *   ...
-   * }
+   * ```
    *
    * Example:
    *
-   * {
+   * ```
    *   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
    *                       cff:no-stem-darkening=1 \
    *                       autofitter:warping=1
-   * }
+   * ```
    *
    */
 #define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
@@ -117,35 +117,34 @@
    *
    * Uncomment the line below if you want to activate LCD rendering
    * technology similar to ClearType in this build of the library.  This
-   * technology triples the resolution in the direction color subpixels.
-   * To mitigate color fringes inherent to this technology, you also need
-   * to explicitly set up LCD filtering.
+   * technology triples the resolution in the direction color subpixels.  To
+   * mitigate color fringes inherent to this technology, you also need to
+   * explicitly set up LCD filtering.
    *
-   * Note that this feature is covered by several Microsoft patents
-   * and should not be activated in any default build of the library.
-   * When this macro is not defined, FreeType offers alternative LCD
-   * rendering technology that produces excellent output without LCD
-   * filtering.
+   * Note that this feature is covered by several Microsoft patents and
+   * should not be activated in any default build of the library.  When this
+   * macro is not defined, FreeType offers alternative LCD rendering
+   * technology that produces excellent output without LCD filtering.
    */
 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
 
 
   /**************************************************************************
    *
-   * Many compilers provide a non-ANSI 64-bit data type that can be used
-   * by FreeType to speed up some computations.  However, this will create
-   * some problems when compiling the library in strict ANSI mode.
+   * Many compilers provide a non-ANSI 64-bit data type that can be used by
+   * FreeType to speed up some computations.  However, this will create some
+   * problems when compiling the library in strict ANSI mode.
    *
    * For this reason, the use of 64-bit integers is normally disabled when
-   * the __STDC__ macro is defined.  You can however disable this by
-   * defining the macro FT_CONFIG_OPTION_FORCE_INT64 here.
+   * the `__STDC__` macro is defined.  You can however disable this by
+   * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here.
    *
    * For most compilers, this will only create compilation warnings when
    * building the library.
    *
    * ObNote: The compiler-specific 64-bit integers are detected in the
-   *         file `ftconfig.h' either statically or through the
-   *         `configure' script on supported platforms.
+   *         file `ftconfig.h` either statically or through the `configure`
+   *         script on supported platforms.
    */
 #undef FT_CONFIG_OPTION_FORCE_INT64
 
@@ -153,21 +152,21 @@
   /**************************************************************************
    *
    * If this macro is defined, do not try to use an assembler version of
-   * performance-critical functions (e.g. FT_MulFix).  You should only do
-   * that to verify that the assembler function works properly, or to
-   * execute benchmark tests of the various implementations.
+   * performance-critical functions (e.g., @FT_MulFix).  You should only do
+   * that to verify that the assembler function works properly, or to execute
+   * benchmark tests of the various implementations.
    */
 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
 
 
   /**************************************************************************
    *
-   * If this macro is defined, try to use an inlined assembler version of
-   * the `FT_MulFix' function, which is a `hotspot' when loading and
-   * hinting glyphs, and which should be executed as fast as possible.
+   * If this macro is defined, try to use an inlined assembler version of the
+   * @FT_MulFix function, which is a 'hotspot' when loading and hinting
+   * glyphs, and which should be executed as fast as possible.
    *
-   * Note that if your compiler or CPU is not supported, this will default
-   * to the standard and portable implementation found in `ftcalc.c'.
+   * Note that if your compiler or CPU is not supported, this will default to
+   * the standard and portable implementation found in `ftcalc.c`.
    */
 #define FT_CONFIG_OPTION_INLINE_MULFIX
 
@@ -177,12 +176,12 @@
    * LZW-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `compress' program.  This is mostly used to parse many of the PCF
+   *   `compress` program.  This is mostly used to parse many of the PCF
    *   files that come with various X11 distributions.  The implementation
-   *   uses NetBSD's `zopen' to partially uncompress the file on the fly
-   *   (see src/lzw/ftgzip.c).
+   *   uses NetBSD's `zopen` to partially uncompress the file on the fly (see
+   *   `src/lzw/ftgzip.c`).
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    */
 #define FT_CONFIG_OPTION_USE_LZW
 
@@ -192,12 +191,12 @@
    * Gzip-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `gzip' program.  This is mostly used to parse many of the PCF files
-   *   that come with XFree86.  The implementation uses `zlib' to
-   *   partially uncompress the file on the fly (see src/gzip/ftgzip.c).
+   *   `gzip` program.  This is mostly used to parse many of the PCF files
+   *   that come with XFree86.  The implementation uses 'zlib' to partially
+   *   uncompress the file on the fly (see `src/gzip/ftgzip.c`).
    *
-   *   Define this macro if you want to enable this `feature'.  See also
-   *   the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below.
+   *   Define this macro if you want to enable this 'feature'.  See also the
+   *   macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below.
    */
 #define FT_CONFIG_OPTION_USE_ZLIB
 
@@ -206,23 +205,23 @@
    *
    * ZLib library selection
    *
-   *   This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined.
-   *   It allows FreeType's `ftgzip' component to link to the system's
+   *   This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined.
+   *   It allows FreeType's 'ftgzip' component to link to the system's
    *   installation of the ZLib library.  This is useful on systems like
    *   Unix or VMS where it generally is already available.
    *
-   *   If you let it undefined, the component will use its own copy
-   *   of the zlib sources instead.  These have been modified to be
-   *   included directly within the component and *not* export external
-   *   function names.  This allows you to link any program with FreeType
-   *   _and_ ZLib without linking conflicts.
+   *   If you let it undefined, the component will use its own copy of the
+   *   zlib sources instead.  These have been modified to be included
+   *   directly within the component and **not** export external function
+   *   names.  This allows you to link any program with FreeType _and_ ZLib
+   *   without linking conflicts.
    *
-   *   Do not #undef this macro here since the build system might define
+   *   Do not `#undef` this macro here since the build system might define
    *   it for certain configurations only.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
 
@@ -232,28 +231,28 @@
    * Bzip2-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `bzip2' program.  This is mostly used to parse many of the PCF
-   *   files that come with XFree86.  The implementation uses `libbz2' to
-   *   partially uncompress the file on the fly (see src/bzip2/ftbzip2.c).
-   *   Contrary to gzip, bzip2 currently is not included and need to use
-   *   the system available bzip2 implementation.
+   *   `bzip2` program.  This is mostly used to parse many of the PCF files
+   *   that come with XFree86.  The implementation uses `libbz2` to partially
+   *   uncompress the file on the fly (see `src/bzip2/ftbzip2.c`).  Contrary
+   *   to gzip, bzip2 currently is not included and need to use the system
+   *   available bzip2 implementation.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 #define FT_CONFIG_OPTION_USE_BZIP2
 
 
   /**************************************************************************
    *
-   * Define to disable the use of file stream functions and types, FILE,
-   * fopen() etc.  Enables the use of smaller system libraries on embedded
-   * systems that have multiple system libraries, some with or without
-   * file stream support, in the cases where file stream support is not
-   * necessary such as memory loading of font files.
+   * Define to disable the use of file stream functions and types, `FILE`,
+   * `fopen`, etc.  Enables the use of smaller system libraries on embedded
+   * systems that have multiple system libraries, some with or without file
+   * stream support, in the cases where file stream support is not necessary
+   * such as memory loading of font files.
    */
 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
 
@@ -264,14 +263,14 @@
    *
    *   FreeType now handles loading color bitmap glyphs in the PNG format.
    *   This requires help from the external libpng library.  Uncompressed
-   *   color bitmaps do not need any external libraries and will be
-   *   supported regardless of this configuration.
+   *   color bitmaps do not need any external libraries and will be supported
+   *   regardless of this configuration.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 #define FT_CONFIG_OPTION_USE_PNG
 
@@ -280,15 +279,15 @@
    *
    * HarfBuzz support.
    *
-   *   FreeType uses the HarfBuzz library to improve auto-hinting of
-   *   OpenType fonts.  If available, many glyphs not directly addressable
-   *   by a font's character map will be hinted also.
+   *   FreeType uses the HarfBuzz library to improve auto-hinting of OpenType
+   *   fonts.  If available, many glyphs not directly addressable by a font's
+   *   character map will be hinted also.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 #define FT_CONFIG_OPTION_USE_HARFBUZZ
 
@@ -297,23 +296,23 @@
    *
    * Glyph Postscript Names handling
    *
-   *   By default, FreeType 2 is compiled with the `psnames' module.  This
-   *   module is in charge of converting a glyph name string into a
-   *   Unicode value, or return a Macintosh standard glyph name for the
-   *   use with the TrueType `post' table.
+   *   By default, FreeType 2 is compiled with the 'psnames' module.  This
+   *   module is in charge of converting a glyph name string into a Unicode
+   *   value, or return a Macintosh standard glyph name for the use with the
+   *   TrueType 'post' table.
    *
-   *   Undefine this macro if you do not want `psnames' compiled in your
+   *   Undefine this macro if you do not want 'psnames' compiled in your
    *   build of FreeType.  This has the following effects:
    *
-   *   - The TrueType driver will provide its own set of glyph names,
-   *     if you build it to support postscript names in the TrueType
-   *     `post' table, but will not synthesize a missing Unicode charmap.
+   *   - The TrueType driver will provide its own set of glyph names, if you
+   *     build it to support postscript names in the TrueType 'post' table,
+   *     but will not synthesize a missing Unicode charmap.
    *
-   *   - The Type 1 driver will not be able to synthesize a Unicode
-   *     charmap out of the glyphs found in the fonts.
+   *   - The Type~1 driver will not be able to synthesize a Unicode charmap
+   *     out of the glyphs found in the fonts.
    *
-   *   You would normally undefine this configuration macro when building
-   *   a version of FreeType that doesn't contain a Type 1 or CFF driver.
+   *   You would normally undefine this configuration macro when building a
+   *   version of FreeType that doesn't contain a Type~1 or CFF driver.
    */
 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
 
@@ -322,16 +321,15 @@
    *
    * Postscript Names to Unicode Values support
    *
-   *   By default, FreeType 2 is built with the `PSNames' module compiled
-   *   in.  Among other things, the module is used to convert a glyph name
-   *   into a Unicode value.  This is especially useful in order to
-   *   synthesize on the fly a Unicode charmap from the CFF/Type 1 driver
-   *   through a big table named the `Adobe Glyph List' (AGL).
+   *   By default, FreeType~2 is built with the 'psnames' module compiled in.
+   *   Among other things, the module is used to convert a glyph name into a
+   *   Unicode value.  This is especially useful in order to synthesize on
+   *   the fly a Unicode charmap from the CFF/Type~1 driver through a big
+   *   table named the 'Adobe Glyph List' (AGL).
    *
-   *   Undefine this macro if you do not want the Adobe Glyph List
-   *   compiled in your `PSNames' module.  The Type 1 driver will not be
-   *   able to synthesize a Unicode charmap out of the glyphs found in the
-   *   fonts.
+   *   Undefine this macro if you do not want the Adobe Glyph List compiled
+   *   in your 'psnames' module.  The Type~1 driver will not be able to
+   *   synthesize a Unicode charmap out of the glyphs found in the fonts.
    */
 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
 
@@ -340,11 +338,11 @@
    *
    * Support for Mac fonts
    *
-   *   Define this macro if you want support for outline fonts in Mac
-   *   format (mac dfont, mac resource, macbinary containing a mac
-   *   resource) on non-Mac platforms.
+   *   Define this macro if you want support for outline fonts in Mac format
+   *   (mac dfont, mac resource, macbinary containing a mac resource) on
+   *   non-Mac platforms.
    *
-   *   Note that the `FOND' resource isn't checked.
+   *   Note that the 'FOND' resource isn't checked.
    */
 #define FT_CONFIG_OPTION_MAC_FONTS
 
@@ -358,13 +356,12 @@
    *   Resource forks which include fonts data are stored sometimes in
    *   locations which users or developers don't expected.  In some cases,
    *   resource forks start with some offset from the head of a file.  In
-   *   other cases, the actual resource fork is stored in file different
-   *   from what the user specifies.  If this option is activated,
-   *   FreeType tries to guess whether such offsets or different file
-   *   names must be used.
+   *   other cases, the actual resource fork is stored in file different from
+   *   what the user specifies.  If this option is activated, FreeType tries
+   *   to guess whether such offsets or different file names must be used.
    *
    *   Note that normal, direct access of resource forks is controlled via
-   *   the FT_CONFIG_OPTION_MAC_FONTS option.
+   *   the `FT_CONFIG_OPTION_MAC_FONTS` option.
    */
 #ifdef FT_CONFIG_OPTION_MAC_FONTS
 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
@@ -373,19 +370,19 @@
 
   /**************************************************************************
    *
-   * Allow the use of FT_Incremental_Interface to load typefaces that
-   * contain no glyph data, but supply it via a callback function.
-   * This is required by clients supporting document formats which
-   * supply font data incrementally as the document is parsed, such
-   * as the Ghostscript interpreter for the PostScript language.
+   * Allow the use of `FT_Incremental_Interface` to load typefaces that
+   * contain no glyph data, but supply it via a callback function.  This is
+   * required by clients supporting document formats which supply font data
+   * incrementally as the document is parsed, such as the Ghostscript
+   * interpreter for the PostScript language.
    */
 #define FT_CONFIG_OPTION_INCREMENTAL
 
 
   /**************************************************************************
    *
-   * The size in bytes of the render pool used by the scan-line converter
-   * to do all of its work.
+   * The size in bytes of the render pool used by the scan-line converter to
+   * do all of its work.
    */
 #define FT_RENDER_POOL_SIZE  16384L
 
@@ -395,7 +392,7 @@
    * FT_MAX_MODULES
    *
    *   The maximum number of modules that can be registered in a single
-   *   FreeType library object.  32 is the default.
+   *   FreeType library object.  32~is the default.
    */
 #define FT_MAX_MODULES  32
 
@@ -405,16 +402,15 @@
    * Debug level
    *
    *   FreeType can be compiled in debug or trace mode.  In debug mode,
-   *   errors are reported through the `ftdebug' component.  In trace
-   *   mode, additional messages are sent to the standard output during
-   *   execution.
+   *   errors are reported through the 'ftdebug' component.  In trace mode,
+   *   additional messages are sent to the standard output during execution.
    *
-   *   Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode.
-   *   Define FT_DEBUG_LEVEL_TRACE to build it in trace mode.
+   *   Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode.
+   *   Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode.
    *
-   *   Don't define any of these macros to compile in `release' mode!
+   *   Don't define any of these macros to compile in 'release' mode!
    *
-   *   Do not #undef these macros here since the build system might define
+   *   Do not `#undef` these macros here since the build system might define
    *   them for certain configurations only.
    */
 #define FT_DEBUG_LEVEL_ERROR
@@ -425,38 +421,38 @@
    *
    * Autofitter debugging
    *
-   *   If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to
+   *   If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to
    *   control the autofitter behaviour for debugging purposes with global
-   *   boolean variables (consequently, you should *never* enable this
-   *   while compiling in `release' mode):
+   *   boolean variables (consequently, you should **never** enable this
+   *   while compiling in 'release' mode):
    *
-   *   {
+   *   ```
    *     _af_debug_disable_horz_hints
    *     _af_debug_disable_vert_hints
    *     _af_debug_disable_blue_hints
-   *   }
+   *   ```
    *
    *   Additionally, the following functions provide dumps of various
-   *   internal autofit structures to stdout (using `printf'):
+   *   internal autofit structures to stdout (using `printf`):
    *
-   *   {
+   *   ```
    *     af_glyph_hints_dump_points
    *     af_glyph_hints_dump_segments
    *     af_glyph_hints_dump_edges
    *     af_glyph_hints_get_num_segments
    *     af_glyph_hints_get_segment_offset
-   *   }
+   *   ```
    *
    *   As an argument, they use another global variable:
    *
-   *   {
+   *   ```
    *     _af_debug_hints
-   *   }
+   *   ```
    *
-   *   Please have a look at the `ftgrid' demo program to see how those
+   *   Please have a look at the `ftgrid` demo program to see how those
    *   variables and macros should be used.
    *
-   *   Do not #undef these macros here since the build system might define
+   *   Do not `#undef` these macros here since the build system might define
    *   them for certain configurations only.
    */
 #define FT_DEBUG_AUTOFIT
@@ -466,16 +462,16 @@
    *
    * Memory Debugging
    *
-   *   FreeType now comes with an integrated memory debugger that is
-   *   capable of detecting simple errors like memory leaks or double
-   *   deletes.  To compile it within your build of the library, you
-   *   should define FT_DEBUG_MEMORY here.
+   *   FreeType now comes with an integrated memory debugger that is capable
+   *   of detecting simple errors like memory leaks or double deletes.  To
+   *   compile it within your build of the library, you should define
+   *   `FT_DEBUG_MEMORY` here.
    *
-   *   Note that the memory debugger is only activated at runtime when
-   *   when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also!
+   *   Note that the memory debugger is only activated at runtime when when
+   *   the _environment_ variable `FT2_DEBUG_MEMORY` is defined also!
    *
-   *   Do not #undef this macro here since the build system might define
-   *   it for certain configurations only.
+   *   Do not `#undef` this macro here since the build system might define it
+   *   for certain configurations only.
    */
 #define FT_DEBUG_MEMORY
 
@@ -484,19 +480,32 @@
    *
    * Module errors
    *
-   *   If this macro is set (which is _not_ the default), the higher byte
-   *   of an error code gives the module in which the error has occurred,
-   *   while the lower byte is the real error code.
+   *   If this macro is set (which is _not_ the default), the higher byte of
+   *   an error code gives the module in which the error has occurred, while
+   *   the lower byte is the real error code.
    *
-   *   Setting this macro makes sense for debugging purposes only, since
-   *   it would break source compatibility of certain programs that use
-   *   FreeType 2.
+   *   Setting this macro makes sense for debugging purposes only, since it
+   *   would break source compatibility of certain programs that use
+   *   FreeType~2.
    *
-   *   More details can be found in the files ftmoderr.h and fterrors.h.
+   *   More details can be found in the files `ftmoderr.h` and `fterrors.h`.
    */
 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
 
 
+  /**************************************************************************
+   *
+   * Error Strings
+   *
+   *   If this macro is set, `FT_Error_String` will return meaningful
+   *   descriptions.  This is not enabled by default to reduce the overall
+   *   size of FreeType.
+   *
+   *   More details can be found in the file `fterrors.h`.
+   */
+/* #define FT_CONFIG_OPTION_ERROR_STRINGS */
+
+
   /*************************************************************************/
   /*************************************************************************/
   /****                                                                 ****/
@@ -508,47 +517,47 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support
-   * embedded bitmaps in all formats using the SFNT module (namely
-   * TrueType & OpenType).
+   * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support
+   * embedded bitmaps in all formats using the 'sfnt' module (namely
+   * TrueType~& OpenType).
    */
 #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_COLOR_LAYERS if you want to support coloured
-   * outlines (from the COLR/CPAL tables) in all formats using the SFNT
-   * module (namely TrueType & OpenType).
+   * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support coloured
+   * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
+   * module (namely TrueType~& OpenType).
    */
 #define TT_CONFIG_OPTION_COLOR_LAYERS
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to
-   * load and enumerate the glyph Postscript names in a TrueType or
-   * OpenType file.
+   * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
+   * load and enumerate the glyph Postscript names in a TrueType or OpenType
+   * file.
    *
-   * Note that when you do not compile the `PSNames' module by undefining
-   * the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will
+   * Note that when you do not compile the 'psnames' module by undefining the
+   * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
    * contain additional code used to read the PS Names table from a font.
    *
-   * (By default, the module uses `PSNames' to extract glyph names.)
+   * (By default, the module uses 'psnames' to extract glyph names.)
    */
 #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to
-   * access the internal name table in a SFNT-based format like TrueType
-   * or OpenType.  The name table contains various strings used to
-   * describe the font, like family name, copyright, version, etc.  It
-   * does not contain any glyph name though.
+   * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access
+   * the internal name table in a SFNT-based format like TrueType or
+   * OpenType.  The name table contains various strings used to describe the
+   * font, like family name, copyright, version, etc.  It does not contain
+   * any glyph name though.
    *
    * Accessing SFNT names is done through the functions declared in
-   * `ftsnames.h'.
+   * `ftsnames.h`.
    */
 #define TT_CONFIG_OPTION_SFNT_NAMES
 
@@ -581,54 +590,53 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile
-   * a bytecode interpreter in the TrueType driver.
+   * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a
+   * bytecode interpreter in the TrueType driver.
    *
    * By undefining this, you will only compile the code necessary to load
    * TrueType glyphs without hinting.
    *
-   *   Do not #undef this macro here, since the build system might
-   *   define it for certain configurations only.
+   * Do not `#undef` this macro here, since the build system might define it
+   * for certain configurations only.
    */
 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile
+   * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile
    * subpixel hinting support into the TrueType driver.  This modifies the
-   * TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is
+   * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is
    * requested.
    *
    * In particular, it modifies the bytecode interpreter to interpret (or
-   * not) instructions in a certain way so that all TrueType fonts look
-   * like they do in a Windows ClearType (DirectWrite) environment.  See
-   * [1] for a technical overview on what this means.  See `ttinterp.h'
-   * for more details on the LEAN option.
+   * not) instructions in a certain way so that all TrueType fonts look like
+   * they do in a Windows ClearType (DirectWrite) environment.  See [1] for a
+   * technical overview on what this means.  See `ttinterp.h` for more
+   * details on the LEAN option.
    *
    * There are three possible values.
    *
    * Value 1:
-   *   This value is associated with the `Infinality' moniker,
-   *   contributed by an individual nicknamed Infinality with the goal of
-   *   making TrueType fonts render better than on Windows.  A high
-   *   amount of configurability and flexibility, down to rules for
-   *   single glyphs in fonts, but also very slow.  Its experimental and
-   *   slow nature and the original developer losing interest meant that
-   *   this option was never enabled in default builds.
+   *   This value is associated with the 'Infinality' moniker, contributed by
+   *   an individual nicknamed Infinality with the goal of making TrueType
+   *   fonts render better than on Windows.  A high amount of configurability
+   *   and flexibility, down to rules for single glyphs in fonts, but also
+   *   very slow.  Its experimental and slow nature and the original
+   *   developer losing interest meant that this option was never enabled in
+   *   default builds.
    *
    *   The corresponding interpreter version is v38.
    *
    * Value 2:
    *   The new default mode for the TrueType driver.  The Infinality code
-   *   base was stripped to the bare minimum and all configurability
-   *   removed in the name of speed and simplicity.  The configurability
-   *   was mainly aimed at legacy fonts like Arial, Times New Roman, or
-   *   Courier.  Legacy fonts are fonts that modify vertical stems to
-   *   achieve clean black-and-white bitmaps.  The new mode focuses on
-   *   applying a minimal set of rules to all fonts indiscriminately so
-   *   that modern and web fonts render well while legacy fonts render
-   *   okay.
+   *   base was stripped to the bare minimum and all configurability removed
+   *   in the name of speed and simplicity.  The configurability was mainly
+   *   aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
+   *   Legacy fonts are fonts that modify vertical stems to achieve clean
+   *   black-and-white bitmaps.  The new mode focuses on applying a minimal
+   *   set of rules to all fonts indiscriminately so that modern and web
+   *   fonts render well while legacy fonts render okay.
    *
    *   The corresponding interpreter version is v40.
    *
@@ -636,18 +644,18 @@
    *   Compile both, making both v38 and v40 available (the latter is the
    *   default).
    *
-   * By undefining these, you get rendering behavior like on Windows
-   * without ClearType, i.e., Windows XP without ClearType enabled and
-   * Win9x (interpreter version v35).  Or not, depending on how much
-   * hinting blood and testing tears the font designer put into a given
-   * font.  If you define one or both subpixel hinting options, you can
-   * switch between between v35 and the ones you define (using
-   * `FT_Property_Set').
+   * By undefining these, you get rendering behavior like on Windows without
+   * ClearType, i.e., Windows XP without ClearType enabled and Win9x
+   * (interpreter version v35).  Or not, depending on how much hinting blood
+   * and testing tears the font designer put into a given font.  If you
+   * define one or both subpixel hinting options, you can switch between
+   * between v35 and the ones you define (using `FT_Property_Set`).
    *
-   * This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be
+   * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be
    * defined.
    *
-   * [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+   * [1]
+   * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
    */
 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  1     */
 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  2     */
@@ -656,16 +664,16 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the
+   * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the
    * TrueType glyph loader to use Apple's definition of how to handle
    * component offsets in composite glyphs.
    *
-   * Apple and MS disagree on the default behavior of component offsets
-   * in composites.  Apple says that they should be scaled by the scaling
-   * factors in the transformation matrix (roughly, it's more complex)
-   * while MS says they should not.  OpenType defines two bits in the
-   * composite flags array which can be used to disambiguate, but old
-   * fonts will not have them.
+   * Apple and MS disagree on the default behavior of component offsets in
+   * composites.  Apple says that they should be scaled by the scaling
+   * factors in the transformation matrix (roughly, it's more complex) while
+   * MS says they should not.  OpenType defines two bits in the composite
+   * flags array which can be used to disambiguate, but old fonts will not
+   * have them.
    *
    *   https://www.microsoft.com/typography/otspec/glyf.htm
    *   https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
@@ -675,34 +683,34 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include
-   * support for Apple's distortable font technology (fvar, gvar, cvar,
-   * and avar tables).  This has many similarities to Type 1 Multiple
-   * Masters support.
+   * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support
+   * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and
+   * 'avar' tables).  Tagged 'Font Variations', this is now part of OpenType
+   * also.  This has many similarities to Type~1 Multiple Masters support.
    */
 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_BDF if you want to include support for
-   * an embedded `BDF ' table within SFNT-based bitmap formats.
+   * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an
+   * embedded 'BDF~' table within SFNT-based bitmap formats.
    */
 #define TT_CONFIG_OPTION_BDF
 
 
   /**************************************************************************
    *
-   * Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum
+   * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum
    * number of bytecode instructions executed for a single run of the
-   * bytecode interpreter, needed to prevent infinite loops.  You don't
-   * want to change this except for very special situations (e.g., making
-   * a library fuzzer spend less time to handle broken fonts).
+   * bytecode interpreter, needed to prevent infinite loops.  You don't want
+   * to change this except for very special situations (e.g., making a
+   * library fuzzer spend less time to handle broken fonts).
    *
    * It is not expected that this value is ever modified by a configuring
-   * script; instead, it gets surrounded with #ifndef ... #endif so that
-   * the value can be set as a preprocessor option on the compiler's
-   * command line.
+   * script; instead, it gets surrounded with `#ifndef ... #endif` so that
+   * the value can be set as a preprocessor option on the compiler's command
+   * line.
    */
 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES  1000000L
@@ -720,16 +728,15 @@
 
   /**************************************************************************
    *
-   * T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and
-   * arrays in the Type 1 stream (see t1load.c).  A minimum of 4 is
-   * required.
+   * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays
+   * in the Type~1 stream (see `t1load.c`).  A minimum of~4 is required.
    */
 #define T1_MAX_DICT_DEPTH  5
 
 
   /**************************************************************************
    *
-   * T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine
+   * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine
    * calls during glyph loading.
    */
 #define T1_MAX_SUBRS_CALLS  16
@@ -737,19 +744,20 @@
 
   /**************************************************************************
    *
-   * T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity.  A
-   * minimum of 16 is required.
+   * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity.  A
+   * minimum of~16 is required.
    *
-   * The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256.
+   * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character
+   * set) needs 256.
    */
 #define T1_MAX_CHARSTRINGS_OPERANDS  256
 
 
   /**************************************************************************
    *
-   * Define this configuration macro if you want to prevent the
-   * compilation of `t1afm', which is in charge of reading Type 1 AFM
-   * files into an existing face.  Note that if set, the T1 driver will be
+   * Define this configuration macro if you want to prevent the compilation
+   * of the 't1afm' module, which is in charge of reading Type~1 AFM files
+   * into an existing face.  Note that if set, the Type~1 driver will be
    * unable to produce kerning distances.
    */
 #undef T1_CONFIG_OPTION_NO_AFM
@@ -757,19 +765,18 @@
 
   /**************************************************************************
    *
-   * Define this configuration macro if you want to prevent the
-   * compilation of the Multiple Masters font support in the Type 1
-   * driver.
+   * Define this configuration macro if you want to prevent the compilation
+   * of the Multiple Masters font support in the Type~1 driver.
    */
 #undef T1_CONFIG_OPTION_NO_MM_SUPPORT
 
 
   /**************************************************************************
    *
-   * T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1
+   * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1
    * engine gets compiled into FreeType.  If defined, it is possible to
-   * switch between the two engines using the `hinting-engine' property of
-   * the type1 driver module.
+   * switch between the two engines using the `hinting-engine` property of
+   * the 'type1' driver module.
    */
 #define T1_CONFIG_OPTION_OLD_ENGINE
 
@@ -785,14 +792,13 @@
 
   /**************************************************************************
    *
-   * Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is
+   * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is
    * possible to set up the default values of the four control points that
-   * define the stem darkening behaviour of the (new) CFF engine.  For
-   * more details please read the documentation of the
-   * `darkening-parameters' property (file `ftdriver.h'), which allows the
-   * control at run-time.
+   * define the stem darkening behaviour of the (new) CFF engine.  For more
+   * details please read the documentation of the `darkening-parameters`
+   * property (file `ftdriver.h`), which allows the control at run-time.
    *
-   * Do *not* undefine these macros!
+   * Do **not** undefine these macros!
    */
 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1   500
 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1   400
@@ -809,10 +815,10 @@
 
   /**************************************************************************
    *
-   * CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF
-   * engine gets compiled into FreeType.  If defined, it is possible to
-   * switch between the two engines using the `hinting-engine' property of
-   * the cff driver module.
+   * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine
+   * gets compiled into FreeType.  If defined, it is possible to switch
+   * between the two engines using the `hinting-engine` property of the 'cff'
+   * driver module.
    */
 #define CFF_CONFIG_OPTION_OLD_ENGINE
 
@@ -828,18 +834,18 @@
 
   /**************************************************************************
    *
-   * There are many PCF fonts just called `Fixed' which look completely
-   * different, and which have nothing to do with each other.  When
-   * selecting `Fixed' in KDE or Gnome one gets results that appear rather
-   * random, the style changes often if one changes the size and one
-   * cannot select some fonts at all.  This option makes the PCF module
-   * prepend the foundry name (plus a space) to the family name.
+   * There are many PCF fonts just called 'Fixed' which look completely
+   * different, and which have nothing to do with each other.  When selecting
+   * 'Fixed' in KDE or Gnome one gets results that appear rather random, the
+   * style changes often if one changes the size and one cannot select some
+   * fonts at all.  This option makes the 'pcf' module prepend the foundry
+   * name (plus a space) to the family name.
    *
-   * We also check whether we have `wide' characters; all put together, we
-   * get family names like `Sony Fixed' or `Misc Fixed Wide'.
+   * We also check whether we have 'wide' characters; all put together, we
+   * get family names like 'Sony Fixed' or 'Misc Fixed Wide'.
    *
    * If this option is activated, it can be controlled with the
-   * `no-long-family-names' property of the pcf driver module.
+   * `no-long-family-names` property of the 'pcf' driver module.
    */
 #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
 
@@ -855,51 +861,56 @@
 
   /**************************************************************************
    *
-   * Compile autofit module with CJK (Chinese, Japanese, Korean) script
+   * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script
    * support.
    */
 #define AF_CONFIG_OPTION_CJK
 
+
   /**************************************************************************
    *
-   * Compile autofit module with fallback Indic script support, covering
-   * some scripts that the `latin' submodule of the autofit module doesn't
+   * Compile 'autofit' module with fallback Indic script support, covering
+   * some scripts that the 'latin' submodule of the 'autofit' module doesn't
    * (yet) handle.
    */
 #define AF_CONFIG_OPTION_INDIC
 
-  /**************************************************************************
-   *
-   * Compile autofit module with warp hinting.  The idea of the warping
-   * code is to slightly scale and shift a glyph within a single dimension
-   * so that as much of its segments are aligned (more or less) on the
-   * grid.  To find out the optimal scaling and shifting value, various
-   * parameter combinations are tried and scored.
-   *
-   * This experimental option is active only if the rendering mode is
-   * FT_RENDER_MODE_LIGHT; you can switch warping on and off with the
-   * `warping' property of the auto-hinter (see file `ftdriver.h' for more
-   * information; by default it is switched off).
-   */
-#define AF_CONFIG_OPTION_USE_WARPER
 
   /**************************************************************************
    *
-   * Use TrueType-like size metrics for `light' auto-hinting.
+   * Compile 'autofit' module with warp hinting.  The idea of the warping
+   * code is to slightly scale and shift a glyph within a single dimension so
+   * that as much of its segments are aligned (more or less) on the grid.  To
+   * find out the optimal scaling and shifting value, various parameter
+   * combinations are tried and scored.
+   *
+   * You can switch warping on and off with the `warping` property of the
+   * auto-hinter (see file `ftdriver.h` for more information; by default it
+   * is switched off).
+   *
+   * This experimental option is not active if the rendering mode is
+   * `FT_RENDER_MODE_LIGHT`.
+   */
+#define AF_CONFIG_OPTION_USE_WARPER
+
+
+  /**************************************************************************
+   *
+   * Use TrueType-like size metrics for 'light' auto-hinting.
    *
    * It is strongly recommended to avoid this option, which exists only to
-   * help some legacy applications retain its appearance and behaviour
-   * with respect to auto-hinted TrueType fonts.
+   * help some legacy applications retain its appearance and behaviour with
+   * respect to auto-hinted TrueType fonts.
    *
    * The very reason this option exists at all are GNU/Linux distributions
    * like Fedora that did not un-patch the following change (which was
    * present in FreeType between versions 2.4.6 and 2.7.1, inclusive).
    *
-   * {
+   * ```
    *   2011-07-16  Steven Chu  <steven.f.chu@gmail.com>
    *
    *     [truetype] Fix metrics on size request for scalable fonts.
-   * }
+   * ```
    *
    * This problematic commit is now reverted (more or less).
    */
@@ -909,15 +920,15 @@
 
 
   /*
-   * This macro is obsolete.  Support has been removed in FreeType
-   * version 2.5.
+   * This macro is obsolete.  Support has been removed in FreeType version
+   * 2.5.
    */
 /* #define FT_CONFIG_OPTION_OLD_INTERNALS */
 
 
   /*
-   * This macro is defined if native TrueType hinting is requested by the
-   * definitions above.
+   * The next three macros are defined if native TrueType hinting is
+   * requested by the definitions above.  Don't change this.
    */
 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 #define  TT_USE_BYTECODE_INTERPRETER
@@ -936,7 +947,7 @@
 
   /*
    * Check CFF darkening parameters.  The checks are the same as in function
-   * `cff_property_set' in file `cffdrivr.c'.
+   * `cff_property_set` in file `cffdrivr.c`.
    */
 #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0   || \
     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0   || \
diff --git a/docs/CHANGES b/docs/CHANGES
index a6d088a..f36cb19 100644
--- a/docs/CHANGES
+++ b/docs/CHANGES
@@ -1,3 +1,184 @@
+
+CHANGES BETWEEN 2.10.0 and 2.10.1
+
+  I. IMPORTANT BUG FIXES
+
+  - The bytecode hinting of OpenType variation fonts was flawed, since
+    the data in the `CVAR' table wasn't correctly applied.
+
+
+  II. MISCELLANEOUS
+
+  - Auto-hinter support for Mongolian.
+
+  - For distribution,  `.tar.bz2' packages are replaced with `.tar.xz'
+    bundles.
+
+  - The handling of  the default character in PCF fonts as  introduced
+    in version 2.10.0 was partially broken, causing premature abortion
+    of charmap iteration for many fonts.
+
+  - If  `FT_Set_Named_Instance' was  called  with  the same  arguments
+    twice in a row, the function  returned an incorrect error code the
+    second time.
+
+  - Direct   rendering   using  FT_RASTER_FLAG_DIRECT   crashed   (bug
+    introduced in version 2.10.0).
+
+  - Increased  precision  while  computing  OpenType  font   variation
+    instances.
+
+  - The  flattening  algorithm of  cubic  Bezier  curves was  slightly
+    changed to make  it faster.  This can cause  very subtle rendering
+    changes, which aren't noticeable by the eye, however.
+
+  - The  auto-hinter  now  disables hinting  if there  are blue  zones
+    defined for a `style' (i.e., a certain combination of a script and
+    its related typographic features) but the font doesn't contain any
+    characters needed to set up at least one blue zone.
+
+  - The `ftmulti' demo program now  supports multiple hidden axes with
+    the same name tag.
+
+  - `ftview', `ftstring', and `ftgrid' got  a `-k' command line option
+    to emulate a sequence of keystrokes at start-up.
+
+  - `ftview', `ftstring', and `ftgrid' now support screen dumping to a
+    PNG file.
+
+  - The bytecode debugger, `ttdebug',  now supports variation TrueType
+    fonts; a variation font instance can be selected with the new `-d'
+    command line option.
+
+
+======================================================================
+
+CHANGES BETWEEN 2.9.1 and 2.10.0
+
+  I. IMPORTANT CHANGES
+
+    - A bunch  of new functions has  been added to access  and process
+      COLR/CPAL data of OpenType fonts with color-layered glyphs.
+
+        FT_Palette_Data_Get
+          Retrieve color palette data.
+        FT_Palette_Select
+          Select and activate a color palette for color-layered
+          glyphs.
+        FT_Palette_Set_Foreground_Color
+          Set text foreground color for palette index 0xFFFF.
+
+        FT_Get_Color_Glyph_Layer
+          Get color layers for a given glyph (using an interator
+          object).
+
+        FT_Bitmap_Blend
+          Blend one bitmap onto another with a given color.
+
+    - An   experimental  feature   is   the  new   behaviour  of   the
+      `FT_LOAD_COLOR' load  flag for color-layered  glyphs: Internally
+      it  sets a  flag so  that  if `FT_Render_Glyph'  is called  with
+      `FT_RENDER_MODE_NORMAL'      (or       `FT_Load_Glyph'      with
+      `FT_LOAD_RENDER'), a default blending  of the color glyph layers
+      will happen automatically for convenience.
+
+    - As  a   GSoC  2018   project,  Nikhil   Ramakrishnan  completely
+      overhauled and modernized the API reference.
+
+
+  II. MISCELLANEOUS
+
+    - The  logic for  computing  the global  ascender, descender,  and
+      height  of  OpenType  fonts   has  been  slightly  adjusted  for
+      consistency.
+
+      . If the `useTypoMetrics' flag (i.e., bit 7 in the `fsSelection'
+        field) in the  `OS/2' table is set, use the  `sTypo' fields in
+        `OS/2' unconditionally.
+      . Otherwise use  the metrics data from the `hhea'  table (if not
+        zero).
+      . Otherwise use the `sTypo' fields from the `OS/2' table (if not
+        zero).
+      . Otherwise use the `usWin' data from the `OS/2' table as a last
+        resort.
+
+      Variable fonts will apply the `MVAR' deltas to whichever metrics
+      were picked.
+
+    - `TT_Set_MM_Blend' could  fail if  call repeatedly with  the same
+      arguments.
+
+    - The precision  of handling  deltas in  Variation Fonts  has been
+      increased.  The  problem did only show  up with multidimensional
+      designspaces.
+
+    - New function `FT_Library_SetLcdGeometry' to  set up the geometry
+      of LCD subpixels.
+
+    - FreeType now uses the `defaultChar' property of PCF fonts to set
+      the  glyph for  the undefined  character  at glyph  index 0  (as
+      FreeType already does for all other supported font formats).  As
+      a consequence,  the order of  glyphs of  a PCF font  if accessed
+      with  FreeType  can  be   different  now  compared  to  previous
+      versions.
+
+      This change doesn't affect PCF font access with cmaps.
+
+    - `FT_Select_Charmap' has  been changed  to allow  parameter value
+      `FT_ENCODING_NONE', which is valid for BDF, PCF, and Windows FNT
+      formats to  access built-in cmaps  that don't have  a predefined
+      `FT_Encoding' value.
+
+    - A previously  reserved field in the  `FT_GlyphSlotRec' structure
+      now holds the glyph index.
+
+    - On Win32 platforms,  the use of `_DLL' to build  the library has
+      been replaced with `DLL_EXPORT' and `DLL_IMPORT'.
+
+    - The usual round  of fuzzer bug fixes to  better reject malformed
+      fonts.
+
+    - `FT_Outline_New_Internal'  and  `FT_Outline_Done_Internal'  have
+      been removed.  These two functions were public by oversight only
+      and were never documented.
+
+    - A new  function `FT_Error_String' returns descriptions  of error
+      codes if  configuration macro  FT_CONFIG_OPTION_ERROR_STRINGS is
+      defined.
+
+    - `FT_Set_MM_WeightVector'  and  `FT_Get_MM_WeightVector' are  new
+      functions limited to Adobe MultiMaster fonts to directly set and
+      get the weight vector.
+
+    - Support for Position Independent Code as needed by  systems that
+      prohibit  automatic  address  fixups,  such  as BREW,  has  been
+      removed.  [Compilation with modern compilers that use flags like
+      `-fPIC' or `-fPIE' is not affected.]
+
+    - The  `ftdump' demo  program has  new  options `-c'  and `-C'  to
+      display charmaps  in compact and detailed  format, respectively.
+      Option `-V' has been removed.
+
+    - The `ftview', `ftstring',  and `ftgrid' demo programs  use a new
+      command line option `-d' to  specify the program window's width,
+      height, and color depth.
+
+    - The `ftview' demo program now  displays red boxes for zero-width
+      glyphs.
+
+    - `ftglyph'   has   limited   support  to   display   fonts   with
+      color-layered glyphs.  This will be improved later on.
+
+    - `ftgrid' can now display bitmap fonts also.
+
+    - The `ttdebug'  demo program has  a new  option `-f' to  select a
+      member of a TrueType collection (TTC).
+
+    - Other various improvements to the demo programs.
+
+
+======================================================================
+
 CHANGES BETWEEN 2.9 and 2.9.1
 
   I. IMPORTANT BUG FIXES
@@ -8,7 +189,7 @@
     - CVE-2018-6942: Older  FreeType versions  can crash  with certain
       malformed variation fonts.
 
-        http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
+        https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
 
 
   II. MISCELLANEOUS
@@ -232,7 +413,7 @@
       following properties can be  handled: stem darkening, LCD filter
       weights, and the random seed for the `random' CFF operator.
 
-    - The PCF change to show more `colourful' family names (introduced
+    - The PCF change to show more `colorful'  family names (introduced
       in version 2.7.1) was too radical; it can now be configured with
       PCF_CONFIG_OPTION_LONG_FAMILY_NAMES   at   compile   time.    If
       activated, it can  be switched off at run time  with the new pcf
@@ -383,7 +564,7 @@
       and the number of CVT entries.  Please report if you encounter a
       font where the selected values are not adequate.
 
-    - PCF family names are made more `colourful'; they now include the
+    - PCF family names are made more `colorful';  they now include the
       foundry  and information  whether they contain  wide characters.
       For example,  you no longer get `Fixed' but  rather `Sony Fixed'
       or `Misc Fixed Wide'.
@@ -667,8 +848,8 @@
     - The `ftstring' demo program now supports subpixel rendering; use
       key `l' to cycle through the LCD modes.
 
-    - The `ftstring'  demo program now supports  colour rendering; use
-      the `space' key to cycle through various colour combinations.
+    - The `ftstring'  demo program now supports  color rendering;  use
+      the `space' key to cycle through various color combinations.
 
     - The graphical demo programs now use a default gamma value of 1.8
       (instead of 1.2).
@@ -1325,7 +1506,7 @@
 
       Originally, it was a separate patch available from
 
-        http://www.infinality.net/blog/
+        https://web.archive.org/web/20150710073951/http://www.infinality.net:80/blog/
 
       and which has been integrated.
 
@@ -4047,7 +4228,7 @@
     untested for now.
 
   - Updated `docs/docmaker.py', a draft  API reference is available at
-    http://www.freetype.org/ft2api.html.
+    https://web.archive.org/web/20001215173400/http://www.freetype.org:80/ft2api.html.
 
   - Changed `type1' to use `psaux'.
 
@@ -5017,7 +5198,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/docs/CUSTOMIZE b/docs/CUSTOMIZE
index 916be32..f3f9f8e 100644
--- a/docs/CUSTOMIZE
+++ b/docs/CUSTOMIZE
@@ -139,7 +139,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/docs/DEBUG b/docs/DEBUG
index 751eaf0..828f294 100644
--- a/docs/DEBUG
+++ b/docs/DEBUG
@@ -88,14 +88,13 @@
     for example as in
 
       #undef  FT_COMPONENT
-      #define FT_COMPONENT  trace_io
+      #define FT_COMPONENT  io
 
-    The  value  of the  FT_COMPONENT  macro  is an  enumeration  named
-    `trace_XXXX' where `XXXX' is one of the component names defined in
-    the internal  file `internal/fttrace.h'.   If you  modify FreeType
-    source and insert new `trace_XXXX'  macro, you must register it in
-    `fttrace.h'. If  you insert or  remove many trace macros,  you can
-    check   the    undefined   or   the   unused    trace   macro   by
+    The  value  of the  FT_COMPONENT  macro  is  one  of the component
+    names  defined in the internal  file `internal/fttrace.h'.  If you
+    modify FreeType source and insert new FT_COMPONENT macro, you must
+    register it  in `fttrace.h'.  If  you insert or  remove many trace
+    macros, you can check the undefined or the unused trace  macro  by
     `src/tools/chktrcmp.py'.
 
     Each such component is assigned a `debug level', ranging from 0 to
@@ -138,8 +137,8 @@
       component1:level1 component2:level2 component3:level3 ...
 
     where `componentX' is the name  of a tracing component, as defined
-    in `fttrace.h', but without the  `trace_' prefix.  `levelX' is the
-    corresponding level to use at runtime.
+    in `fttrace.h'.  `levelX' is  the corresponding level  to  use  at
+    runtime.
 
     `any'  is a  special component  name that  will be  interpreted as
     `any/all components'.  For example, the following definitions
@@ -191,7 +190,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part  of the  FreeType  project, and  may  only be  used,
diff --git a/docs/DOCGUIDE b/docs/DOCGUIDE
new file mode 100644
index 0000000..da76c88
--- /dev/null
+++ b/docs/DOCGUIDE
@@ -0,0 +1,298 @@
+Introduction
+------------
+
+Documentation is an extremely important part of any project, and it
+helps a lot if it uses consistent syntax and layout.
+
+The documentation for the FreeType library is maintained in header
+files in the `include/` directory in the form of code comments.  These
+comments are extracted and organized by 'docwriter' (previously
+'docmaker').  The generated docs can be viewed in the
+`docs/reference/site/` directory after running `make refdoc`.
+
+Documentation comments follow a specific structure and format as
+described below.
+
+
+Documentation Structure
+-----------------------
+
+The documentation is divided into multiple chapters, which contain
+sections relevant to it.  The chapter details and sections contained
+in them are listed in `include/freetype/ftchapters.h`.  Any unlisted
+section is added to the 'Miscellaneous' chapter.
+
+Sections may contain sub-sections which consist of properties,
+enumerations, and other data types.
+
+
+Comment Blocks
+--------------
+
+Documentation blocks follow a specific format:
+
+    /***************************** (should end on column 77)
+     *
+     *                             (1 asterisk, 1 space, then content)
+     *
+     */                            (end of block)
+
+To make 'docwriter' recognize a comment block, there must be at least
+two asterisks in the first line.  As a consequence, you should change
+the second asterisk to something else if you want to prevent a comment
+block being handled by 'docwriter' (for example, change `/****/` to
+`/*#**/`).
+
+
+Markup Tags
+-----------
+
+Markup tags are used to indicate what comes next.  The syntax for a
+tag is:
+
+    @foo:
+
+An `@`, followed by the tag, and then `:`.
+
+
+Reserved Tags
+-------------
+
+There are some keywords that have a special meaning to docwriter.
+As a convention, all keywords are written in lowercase.
+
+* `chapter`: Defines a chapter.  Usually the title with underscores.
+* `sections`: List of sections in the chapter, in order.
+* `section`: Defines the start or continuation of a section.
+* `title`: Title for a chapter or section.  May contain spaces.
+* `abstract`: The abstract for a section, visible in the Table of
+              Contents (TOC).
+* `description`: Detailed description of a tag (except chapters),
+                 shown as synopsis.
+* `values`: A list of 'values' for the tag.  These values are used for
+            cross-referencing.
+
+
+Other Tags
+----------
+
+Except the ones given above, any other tags will be added as a part of
+a subsection.  All tags are lowercase by convention.
+
+
+Public Header Definitions
+-------------------------
+
+The public headers for FreeType have their names defined in
+`include/freetype/config/ftheader.h`.  Any new public header file must
+be defined in this file, in the following format:
+
+    #define FT_NEWNAME_H  <freetype/newname.h>
+
+Where `newname` is the name of the header file.
+
+This macro is combined with the file location of a sub-section and
+printed with the object.
+
+
+Note on code blocks captured after comments
+-------------------------------------------
+
+All non-documentation lines after a documentation comment block are
+captured to be displayed as the code for the sub-section.  To stop
+collection, a line with `/* */` should be added.
+
+
+General Formatting Conventions
+------------------------------
+
+* Use two spaces after a full stop ending a sentence.
+* Use appropriate uppercasing in titles.  Refer
+
+  https://english.stackexchange.com/a/34
+
+  for more information.
+* Do not add trailing parentheses when citing a C function.
+
+
+Markdown Usage
+--------------
+
+All tags, except the ones that define the name and title for a block
+support markdown in them.  Docwriter uses a markdown parser that
+follows rules given in John Gruber's markdown guide:
+
+  https://daringfireball.net/projects/markdown/syntax
+
+with a few exceptions and extensions, detailed below.  This may also
+be referred to as the **FreeType Flavored Markdown**.
+
+
+Headers
+-------
+
+Markdown headers should not be used directly, because these are added
+based on section titles, sub-section names, and tags.  However, if a
+header needs to be added, note the following correspondence to HTML tags:
+
+* Section title on top of the page is `H1`.
+* Sub-section titles are `H2`.
+* Parts of sub-sections are `H4`.
+* Any header added will be visible in the Table of Contents (TOC) of
+  the page.
+
+
+Emphasis
+--------
+
+* Use `_underscores_` for italics.
+* Use `**double asterisks**` for bold.
+
+Although the other notations (double underscore for bold, single
+asterisk for italics) are supported, it is recommended to use the
+above for consistency.
+
+Note that there may be cases where having two asterisks or underscores
+in a line may lead to text being picked up as italics or bold.
+Although unintentional, this is correct markdown behavior. 
+
+For inline code, wrap the sequence with backticks (see below).  This
+renders symbols correctly without modifications.  If a symbol is
+absolutely required outside of an inline code block or code sequence,
+escape it with a backslash (like `\*` or `\_`).
+
+
+Lists
+-----
+
+Unordered lists can be created with asterisks:
+
+    * Unordered list items can use asterisks.
+    * Another list item.
+
+Ordered lists start with numbers:
+
+    1. This is an ordered list item.
+    2. Brackets after numbers won't work.
+
+To continue a list over multiple paragraphs, indent them with at least
+four spaces.  For example:
+
+    1.  Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+        Aliquam hendrerit mi posuere lectus.  Vestibulum enim wisi,
+        viverra nec, fringilla in, laoreet vitae, risus.
+
+        Donec sit amet nisl.  Aliquam semper ipsum sit amet velit.
+        Suspendisse id sem consectetuer libero luctus adipiscing.
+
+    2.  This is the second list item.
+
+    This paragraph is not a part of the list.
+
+More information on lists in markdown is available at
+
+  https://daringfireball.net/projects/markdown/syntax#list
+
+
+Cross-references
+----------------
+
+Other sub-sections can be linked with the `@` symbol:
+
+    @description:
+      While FreeType's CFF driver doesn't expose API functions by
+      itself, it is possible to control its behaviour with 
+      @FT_Property_Set and @FT_Property_Get.
+
+If a field in the `values` table of another sub-section is linked, the
+link leads to its parent sub-section.
+
+
+Links and Images
+----------------
+
+All URLs are converted to links in the HTML documentation.
+
+Markdown syntax for links and images are fully supported.
+
+
+Inline Code
+-----------
+
+To indicate a span of code, wrap it with backtick quotes (`` ` ``):
+
+    Use the `printf()` function.
+
+Cross-references, markdown, and html styling do not work in inline code
+sequences.
+
+
+Code and Syntax Highlighting
+----------------------------
+
+Blocks of code are fenced by lines with three back-ticks `` ``` ``
+followed by the language name, if any (used for syntax highlighting),
+as demonstrated in the following example.
+
+    ```c
+      x = y + z;
+      if ( zookoo == 2 )
+      {
+        foobar();
+      }
+    ```
+
+Note that the indentation of the opening line and the closing line
+must be exactly the same.  The code sequence itself should have a
+larger indentation than the surrounding back-ticks.
+
+Like inline code, markdown and html styling is *not* supported inside
+code blocks.
+
+
+Tables
+------
+
+Tables are used to list values, input, and other fields.  The FreeType
+Flavored Markdown adopts a simple approach to tables with two columns,
+or field definition tables.
+
+Field definition names may contain alphanumeric, underscore, and the
+`.` characters.  This is followed by `::`.  The following lines are
+the second column of the table.  A field definition ends with the
+start of another field definition, or a markup tag.
+
+    @Input:
+      pathname ::
+        A path to the font file.
+
+      face_index ::
+        See @FT_Open_Face for a detailed description of this
+        parameter.
+
+
+Non-breaking Space
+------------------
+
+A tilde can be used to create a non-breaking space.  The example
+
+    The encoding value~0 is reserved.
+
+is converted to
+
+    The encoding value&nbsp;0 is reserved.
+
+
+----------------------------------------------------------------------
+
+Copyright (C) 2018-2019 by
+Nikhil Ramakrishnan, 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.
+
+
+--- end of DOCGUIDE ---
diff --git a/docs/INSTALL b/docs/INSTALL
index 71d4a05..6105025 100644
--- a/docs/INSTALL
+++ b/docs/INSTALL
@@ -70,14 +70,14 @@
 [1] make++, a make tool written in Perl, has sufficient support of GNU
     make extensions to build FreeType.  See
 
-      http://makepp.sourceforge.net
+      https://makepp.sourceforge.net
 
     for more information;  you need version 2.0 or newer, and you must
     pass option `--norc-substitution'.
 
 ----------------------------------------------------------------------
 
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/docs/INSTALL.ANY b/docs/INSTALL.ANY
index fddac9a..4d5fd8d 100644
--- a/docs/INSTALL.ANY
+++ b/docs/INSTALL.ANY
@@ -141,7 +141,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/docs/INSTALL.CROSS b/docs/INSTALL.CROSS
index 239e1a9..8f4cf6e 100644
--- a/docs/INSTALL.CROSS
+++ b/docs/INSTALL.CROSS
@@ -163,7 +163,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2006-2018 by
+Copyright (C) 2006-2019 by
 suzuki toshiya, David Turner, Robert Wilhelm, and Werner Lemberg.
 
 
diff --git a/docs/INSTALL.GNU b/docs/INSTALL.GNU
index e314ecf..6f37a0f 100644
--- a/docs/INSTALL.GNU
+++ b/docs/INSTALL.GNU
@@ -23,7 +23,7 @@
     Note that  make++, a  make tool written  in Perl,  supports enough
     features of GNU make to compile FreeType.  See
 
-      http://makepp.sourceforge.net
+      https://makepp.sourceforge.net
 
     for more information;  you need version 2.0 or newer, and you must
     pass option `--norc-substitution'.
@@ -148,7 +148,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/docs/INSTALL.UNIX b/docs/INSTALL.UNIX
index f92d828..602744d 100644
--- a/docs/INSTALL.UNIX
+++ b/docs/INSTALL.UNIX
@@ -105,7 +105,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/docs/INSTALL.VMS b/docs/INSTALL.VMS
index c1d30e0..54fa2f8 100644
--- a/docs/INSTALL.VMS
+++ b/docs/INSTALL.VMS
@@ -49,7 +49,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2000-2018 by
+Copyright (C) 2000-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/docs/MAKEPP b/docs/MAKEPP
index a4d44b7..4450e47 100644
--- a/docs/MAKEPP
+++ b/docs/MAKEPP
@@ -1,5 +1,5 @@
 As a special  exception, FreeType can also be  built with the 'makepp'
-build tool, available from http://makepp.sourceforge.net.
+build tool, available from https://makepp.sourceforge.net.
 
 Note, however,  that  you will need at least version 2.0  and pass the
 option --norc-substitution to have it work correctly.
diff --git a/docs/TODO b/docs/TODO
index 1a443a2..1efccc6 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -27,7 +27,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2001-2018 by
+Copyright (C) 2001-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/docs/VERSIONS.TXT b/docs/VERSIONS.TXT
index 3774157..5cdf378 100644
--- a/docs/VERSIONS.TXT
+++ b/docs/VERSIONS.TXT
@@ -52,6 +52,8 @@
 
     release     libtool     so
   -------------------------------
+     2.10.1     23.1.17   6.17.1
+     2.10.0     23.0.17   6.17.0
      2.9.1      22.1.16   6.16.1
      2.9.0      22.0.16   6.16.0
      2.8.1      21.0.15   6.15.0
@@ -114,7 +116,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2002-2018 by
+Copyright (C) 2002-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part  of the  FreeType  project, and  may  only be  used,
diff --git a/docs/formats.txt b/docs/formats.txt
index 75aba92..5ec5442 100644
--- a/docs/formats.txt
+++ b/docs/formats.txt
@@ -165,8 +165,8 @@
     partially defined in MHP 1.0.3 (also called ETSI TS 101812 V1.3.1)
     section 7.4.
 
-      http://www.etsi.org/
-      http://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
+      https://www.etsi.org/
+      https://webapp.etsi.org/workprogram/Report_WorkItem.asp?WKI_ID=18799
 
 [3] Support  is rudimentary  currently; some  tables or  data are  not
     loaded yet.
@@ -191,7 +191,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2004-2018 by
+Copyright (C) 2004-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part  of the  FreeType  project, and  may  only be  used,
diff --git a/docs/freetype-config.1 b/docs/freetype-config.1
index 164b8ff..96ff0f2 100644
--- a/docs/freetype-config.1
+++ b/docs/freetype-config.1
@@ -1,4 +1,4 @@
-.TH FREETYPE-CONFIG 1 "May 2018" "FreeType 2.9.1"
+.TH FREETYPE-CONFIG 1 "July 2019" "FreeType 2.10.1"
 .
 .
 .SH NAME
diff --git a/docs/raster.txt b/docs/raster.txt
index 8ef466e..3aa3822 100644
--- a/docs/raster.txt
+++ b/docs/raster.txt
@@ -618,7 +618,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file  is  part  of the  FreeType  project, and may  only be  used,
diff --git a/docs/reference/.gitignore b/docs/reference/.gitignore
index 2d19fc7..e245bdc 100644
--- a/docs/reference/.gitignore
+++ b/docs/reference/.gitignore
@@ -1 +1,12 @@
+# Static site folder
+site/
+
+# HTML and Markdown files
 *.html
+*.md
+
+# MkDocs Config file
+mkdocs.yml
+
+# Python virtualenv
+env/
diff --git a/docs/reference/README b/docs/reference/README
index 51b04d6..3ffcfc0 100644
--- a/docs/reference/README
+++ b/docs/reference/README
@@ -1,5 +1,35 @@
-After saying `make refdoc' this directory contains the FreeType API
-reference.  You need python to make this target.
+After saying `make refdoc' or `make refdoc-venv' the `site/' directory
+contains the FreeType API reference.  You need python and pip to make this
+target.
+
+There are two ways to generate the documentation:
+
+1. Using `make refdoc':
+
+    - Ensure `python' and `pip' are available.
+    - Install pip package `docwriter' with `pip install --user docwriter'.
+    - Make target with `make refdoc'.
+    - This target can be run offline once required packages are installed.
+
+2. Using `make refdoc-venv' (requires internet access):
+
+    - Ensure `python', `pip' and python package `virtualenv' are available.
+    - Make target with `make refdoc-venv'.
+    - This may or may not require internet access every time depending on
+    pip and system caching.
 
 This also works with Jam: Just type `jam refdoc' in the main directory.
 
+Some troubleshooting tips:
+
+* Regularly run `pip install --upgrade docwriter' to check for updates which
+may include bug fixes.
+
+* Ensure that `docwriter' is installed in the same python target that
+`make refdoc' uses (python3/python2/python).
+
+* `pip' and `python' may point to different versions of Python.  Check using
+`python --version' and `pip --version'.
+
+* If none of this works, send a mail to `freetype-devel@nongnu.org' or file
+an issue at `https://github.com/freetype/docwriter/issues'.
diff --git a/docs/reference/markdown/images/favico.ico b/docs/reference/markdown/images/favico.ico
new file mode 100644
index 0000000..a1a22ed
--- /dev/null
+++ b/docs/reference/markdown/images/favico.ico
Binary files differ
diff --git a/docs/reference/markdown/javascripts/extra.js b/docs/reference/markdown/javascripts/extra.js
new file mode 100644
index 0000000..00f1670
--- /dev/null
+++ b/docs/reference/markdown/javascripts/extra.js
@@ -0,0 +1,54 @@
+/*
+Internal link topbar offest adjust Javascript
+Code provided by @makshh on GitHub
+
+Bug report on material-mkdocs
+  https://github.com/squidfunk/mkdocs-material/issues/791
+*/
+
+// Offset top helper
+function offsetY(elem) {
+    if(!elem) elem = this;
+    var y = elem.offsetTop;
+    while (elem = elem.offsetParent) {
+        y += elem.offsetTop;
+    }
+    return y;
+}
+
+// If a link on the same page is clicked, calculate the
+// correct offset and scroll to that part of the page.
+//
+var links = document.getElementsByTagName('a');
+for(var i = 0; i < links.length; i++) {
+    links[i].onclick = function (event) {
+        if (this.pathname == window.location.pathname &&
+            this.protocol == window.location.protocol &&
+            this.host == window.location.host) {
+                event.preventDefault();
+                if(this.hash.substr(1)){
+                    var o = document.getElementById(this.hash.substr(1));
+                    var sT = offsetY(o) - document.getElementsByClassName('md-header')[0].clientHeight;
+                    window.location.hash = this.hash;
+                    window.scrollTo(0, sT);
+                }
+        }
+    }
+}
+
+// Slugify supplied text
+function slugify(text){
+    text = text.toLowerCase();
+    text = text.replace(" ", "-");
+    return text;
+}
+
+// If there is a hash in the url, slugify it
+// and replace
+if(window.location.hash) {
+    // Fragment exists
+    slug = slugify(window.location.hash);
+    history.replaceState(undefined, undefined, slug)
+    //window.location.hash = slug;
+    document.location.replace(window.location.href);
+}
diff --git a/docs/reference/markdown/stylesheets/extra.css b/docs/reference/markdown/stylesheets/extra.css
new file mode 100644
index 0000000..cd6a1ee
--- /dev/null
+++ b/docs/reference/markdown/stylesheets/extra.css
@@ -0,0 +1,221 @@
+/* Body and page */
+.wy-nav-content {
+    max-width: 90%;
+}
+.md-grid {
+    max-width: 90%;
+}
+.md-sidebar--secondary {
+    margin-left: 90%;
+}
+p {
+    text-align: justify;
+   /* margin: 1.5ex 0 1.5ex 0;
+    */
+}
+/* .md-typeset p{
+    margin: 1em 1em 0 1em;
+}
+*/
+/* code blocks */
+pre.colored {
+    color: blue;
+}
+pre {
+    font-family: monospace;
+    background-color: #D6E8FF;
+    padding: 2ex 0 2ex 1%;
+    overflow-x:auto;
+}
+span.keyword {
+    font-family: monospace;
+    text-align: left;
+    white-space: pre;
+    color: #d73a49;
+}
+.md-typeset code {
+    white-space: pre;
+}
+/* H4 Heading */
+h4 {
+    background-color: #EEEEFF;
+    font-size: medium;
+    font-style: oblique;
+    font-weight: bold;
+   /* margin: 3ex 0 1.5ex 9%;
+    */
+    padding: 0.3em 0 0.3em 1%;
+}
+/* Fields table */
+table.fields {
+    width: 90%;
+    margin: 1.5ex 0 1.5ex 10%;
+}
+table.fields td.val {
+    font-weight: bold;
+    text-align: right;
+    width: 30%;
+    vertical-align: baseline;
+    padding: 1em 1em 0 0;
+}
+table.fields td.desc {
+    vertical-align: baseline;
+    padding: 1ex 0 0 1em;
+}
+table.fields td.desc p:first-child {
+    margin: 0;
+}
+
+table.fields td.desc p {
+    margin: 1.5ex 0 0 0;
+}
+
+/* START EXPERIMENTAL CODE */
+table.long {
+    display: block;
+    width: 93%;
+}
+table.long thead,
+table.long tbody,
+table.long th,
+table.long td,
+table.long tr {
+    display: block;
+}
+/* Hide table headers (but not display: none;
+, for accessibility) */
+table.long thead tr {
+    position: absolute;
+    top: -9999px;
+    left: -9999px;
+}
+table.long tr {
+    border: 0;
+}
+table.long {
+    margin: 1.5ex 3% 1.5ex 3%;
+}
+table.long td.val {
+    text-align: left;
+}
+table.long td {
+   /* Behave like a "row" */
+    border: none;
+    border-bottom: 0;
+    position: relative;
+    padding-left: 50%;
+}
+table.long td:before {
+   /* Now like a table header */
+    position: absolute;
+   /* Top/left values mimic padding */
+    top: 6px;
+    left: 6px;
+    width: 45%;
+    padding-right: 10px;
+    white-space: nowrap;
+}
+/* END EXPERIMENTAL CODE */
+
+/* Index table */
+table.index {
+    width: 100%;
+    border-collapse: collapse;
+    border: 0;
+    border-spacing: 1em 0.3ex;
+}
+table.index tr {
+    padding: 0;
+}
+table.index td {
+    padding: 0;
+}
+table.index-toc-link {
+    width: 100%;
+    border: 0;
+    border-spacing: 0;
+    margin: 1ex 0 1ex 0;
+}
+table.index-toc-link td.left {
+    padding: 0 0.5em 0 0.5em;
+    font-size: 83%;
+    text-align: left;
+}
+table.index-toc-link td.middle {
+    padding: 0 0.5em 0 0.5em;
+    font-size: 83%;
+    text-align: center;
+}
+table.index-toc-link td.right {
+    padding: 0 0.5em 0 0.5em;
+    font-size: 83%;
+    text-align: right;
+}
+/* toc table */
+table.toc {
+    width: 95%;
+    margin: 1.5ex 0 1.5ex 5%;
+}
+table.toc td.link {
+    width: 30%;
+    text-align: right;
+    vertical-align: baseline;
+    padding: 1ex 1em 1ex 0;
+}
+table.toc td.desc {
+    vertical-align: baseline;
+    padding: 1ex 0 1ex 1em;
+    text-align: left;
+}
+table.toc td.desc p:first-child {
+    margin: 0;
+    text-align: left;
+}
+table.toc td.desc p {
+    margin: 1.5ex 0 0 0;
+    text-align: left;
+}
+div.timestamp {
+    font-size: small;
+}
+/* Max width before this PARTICULAR table gets nasty This query will take effect for any screen smaller than 760px and also iPads specifically. */
+@media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) {
+   /* Force table to not be like tables anymore */
+    table, thead, tbody, th, td, tr {
+        display: block;
+   }
+   /* Hide table headers (but not display: none;
+    , for accessibility) */
+    thead tr {
+        position: absolute;
+        top: -9999px;
+        left: -9999px;
+   }
+    tr {
+        border: 0;
+   }
+    table.fields {
+        width: 93%;
+        margin: 1.5ex 3% 1.5ex 3%;
+   }
+    table.fields td.val {
+        text-align: left;
+   }
+    td {
+       /* Behave like a "row" */
+        border: none;
+        border-bottom: 0;
+        position: relative;
+        padding-left: 50%;
+   }
+    td:before {
+       /* Now like a table header */
+        position: absolute;
+       /* Top/left values mimic padding */
+        top: 6px;
+        left: 6px;
+        width: 45%;
+        padding-right: 10px;
+        white-space: nowrap;
+   }
+}
diff --git a/docs/release b/docs/release
index 44b4cb1..1b0c1ee 100644
--- a/docs/release
+++ b/docs/release
@@ -58,10 +58,10 @@
   if necessary).
 
 . Say `make  dist' in both the  freetype2 and freetype2-demos  modules
-  to generate the .tar.gz, .tar.bz2, and .zip files.
+  to generate the .tar.gz, .tar.xz, and .zip files.
 
 . Create     the     doc    bundles    (freetype-doc-<version>.tar.gz,
-  freetype-doc-<version>.tar.bz2,    ftdoc<version>.zip).    This   is
+  freetype-doc-<version>.tar.xz,    ftdoc<version>.zip).    This    is
   everything in
 
     <freetype-web git repository>/freetype2/docs
@@ -87,13 +87,13 @@
     version=`echo $VERSION | sed "s/\\.//g"`
 
     FREETYPE_PACKAGES="freetype-$VERSION.tar.gz \
-                       freetype-$VERSION.tar.bz2 \
+                       freetype-$VERSION.tar.xz \
                        ft$version.zip"
     FT2DEMOS_PACKAGES="ft2demos-$VERSION.tar.gz \
-                       ft2demos-$VERSION.tar.bz2 \
+                       ft2demos-$VERSION.tar.xz \
                        ftdmo$version.zip"
     FTDOC_PACKAGES="freetype-doc-$VERSION.tar.gz \
-                    freetype-doc-$VERSION.tar.bz2 \
+                    freetype-doc-$VERSION.tar.xz \
                     ftdoc$version.zip"
 
     PACKAGE_LIST="$FREETYPE_PACKAGES \
@@ -171,7 +171,7 @@
     # EOF
 
 . On   SourceForge,   tag   the    just   uploaded   `ftXXX.zip'   and
-  `freetype-XXX.tar.bz2'  files as the  default files to  download for
+  `freetype-XXX.tar.xz'  files as the  default files to  download  for
   `Windows' and `Others', respectively.
 
 . Copy the reference files (generated by `make dist') to
@@ -189,7 +189,7 @@
 
 ----------------------------------------------------------------------
 
-Copyright 2003-2018 by
+Copyright (C) 2003-2019 by
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
 This  file is  part of  the FreeType  project, and  may only  be used,
diff --git a/include/freetype/config/ftconfig.h b/include/freetype/config/ftconfig.h
index 3d127f8..9466603 100644
--- a/include/freetype/config/ftconfig.h
+++ b/include/freetype/config/ftconfig.h
@@ -4,7 +4,7 @@
  *
  *   ANSI-specific configuration file (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,20 +18,19 @@
 
   /**************************************************************************
    *
-   * This header file contains a number of macro definitions that are used
-   * by the rest of the engine.  Most of the macros here are automatically
-   * determined at compile time, and you should not need to change it to
-   * port FreeType, except to compile the library with a non-ANSI
-   * compiler.
+   * This header file contains a number of macro definitions that are used by
+   * the rest of the engine.  Most of the macros here are automatically
+   * determined at compile time, and you should not need to change it to port
+   * FreeType, except to compile the library with a non-ANSI compiler.
    *
-   * Note however that if some specific modifications are needed, we
-   * advise you to place a modified copy in your build directory.
+   * Note however that if some specific modifications are needed, we advise
+   * you to place a modified copy in your build directory.
    *
-   * The build directory is usually `builds/<system>', and contains
-   * system-specific files that are always included first when building
-   * the library.
+   * The build directory is usually `builds/<system>`, and contains
+   * system-specific files that are always included first when building the
+   * library.
    *
-   * This ANSI version should stay in `include/config/'.
+   * This ANSI version should stay in `include/config/`.
    *
    */
 
@@ -50,28 +49,28 @@
    *
    *              PLATFORM-SPECIFIC CONFIGURATION MACROS
    *
-   * These macros can be toggled to suit a specific system.  The current
-   * ones are defaults used to compile FreeType in an ANSI C environment
-   * (16bit compilers are also supported).  Copy this file to your own
-   * `builds/<system>' directory, and edit it to port the engine.
+   * These macros can be toggled to suit a specific system.  The current ones
+   * are defaults used to compile FreeType in an ANSI C environment (16bit
+   * compilers are also supported).  Copy this file to your own
+   * `builds/<system>` directory, and edit it to port the engine.
    *
    */
 
 
-  /* There are systems (like the Texas Instruments 'C54x) where a `char' */
-  /* has 16 bits.  ANSI C says that sizeof(char) is always 1.  Since an  */
-  /* `int' has 16 bits also for this system, sizeof(int) gives 1 which   */
-  /* is probably unexpected.                                             */
-  /*                                                                     */
-  /* `CHAR_BIT' (defined in limits.h) gives the number of bits in a      */
-  /* `char' type.                                                        */
+  /* There are systems (like the Texas Instruments 'C54x) where a `char`  */
+  /* has 16~bits.  ANSI~C says that `sizeof(char)` is always~1.  Since an */
+  /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which  */
+  /* is probably unexpected.                                              */
+  /*                                                                      */
+  /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a     */
+  /* `char` type.                                                         */
 
 #ifndef FT_CHAR_BIT
 #define FT_CHAR_BIT  CHAR_BIT
 #endif
 
 
-  /* The size of an `int' type.  */
+  /* The size of an `int` type. */
 #if                                 FT_UINT_MAX == 0xFFFFUL
 #define FT_SIZEOF_INT  ( 16 / FT_CHAR_BIT )
 #elif                               FT_UINT_MAX == 0xFFFFFFFFUL
@@ -82,7 +81,7 @@
 #error "Unsupported size of `int' type!"
 #endif
 
-  /* The size of a `long' type.  A five-byte `long' (as used e.g. on the */
+  /* The size of a `long` type.  A five-byte `long` (as used e.g. on the */
   /* DM642) is recognized but avoided.                                   */
 #if                                  FT_ULONG_MAX == 0xFFFFFFFFUL
 #define FT_SIZEOF_LONG  ( 32 / FT_CHAR_BIT )
@@ -95,8 +94,8 @@
 #endif
 
 
-  /* FT_UNUSED is a macro used to indicate that a given parameter is not  */
-  /* used -- this is only used to get rid of unpleasant compiler warnings */
+  /* `FT_UNUSED` indicates that a given parameter is not used --   */
+  /* this is only used to get rid of unpleasant compiler warnings. */
 #ifndef FT_UNUSED
 #define FT_UNUSED( arg )  ( (arg) = (arg) )
 #endif
@@ -121,9 +120,9 @@
    *   providing a new configuration file.
    */
 #if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) )
-  /* no Carbon frameworks for 64bit 10.4.x */
-  /* AvailabilityMacros.h is available since Mac OS X 10.2,        */
-  /* so guess the system version by maximum errno before inclusion */
+  /* No Carbon frameworks for 64bit 10.4.x.                         */
+  /* `AvailabilityMacros.h` is available since Mac OS X 10.2,       */
+  /* so guess the system version by maximum errno before inclusion. */
 #include <errno.h>
 #ifdef ECANCELED /* defined since 10.2 */
 #include "AvailabilityMacros.h"
@@ -143,7 +142,7 @@
 #endif
 
 
-  /* Fix compiler warning with sgi compiler */
+  /* Fix compiler warning with sgi compiler. */
 #if defined( __sgi ) && !defined( __GNUC__ )
 #if defined( _COMPILER_VERSION ) && ( _COMPILER_VERSION >= 730 )
 #pragma set woff 3505
@@ -192,8 +191,8 @@
    *   FT_Int32
    *
    * @description:
-   *   A typedef for a 32bit signed integer type.  The size depends on
-   *   the configuration.
+   *   A typedef for a 32bit signed integer type.  The size depends on the
+   *   configuration.
    */
   typedef signed XXX  FT_Int32;
 
@@ -203,8 +202,8 @@
    * @type:
    *   FT_UInt32
    *
-   *   A typedef for a 32bit unsigned integer type.  The size depends on
-   *   the configuration.
+   *   A typedef for a 32bit unsigned integer type.  The size depends on the
+   *   configuration.
    */
   typedef unsigned XXX  FT_UInt32;
 
@@ -214,8 +213,8 @@
    * @type:
    *   FT_Int64
    *
-   *   A typedef for a 64bit signed integer type.  The size depends on
-   *   the configuration.  Only defined if there is real 64bit support;
+   *   A typedef for a 64bit signed integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
    *   otherwise, it gets emulated with a structure (if necessary).
    */
   typedef signed XXX  FT_Int64;
@@ -226,8 +225,8 @@
    * @type:
    *   FT_UInt64
    *
-   *   A typedef for a 64bit unsigned integer type.  The size depends on
-   *   the configuration.  Only defined if there is real 64bit support;
+   *   A typedef for a 64bit unsigned integer type.  The size depends on the
+   *   configuration.  Only defined if there is real 64bit support;
    *   otherwise, it gets emulated with a structure (if necessary).
    */
   typedef unsigned XXX  FT_UInt64;
@@ -251,7 +250,7 @@
 #endif
 
 
-  /* look up an integer type that is at least 32 bits */
+  /* look up an integer type that is at least 32~bits */
 #if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT )
 
   typedef int            FT_Fast;
@@ -265,21 +264,21 @@
 #endif
 
 
-  /* determine whether we have a 64-bit int type for platforms without */
-  /* Autoconf                                                          */
+  /* determine whether we have a 64-bit `int` type for platforms without */
+  /* Autoconf                                                            */
 #if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT )
 
-  /* FT_LONG64 must be defined if a 64-bit type is available */
+  /* `FT_LONG64` must be defined if a 64-bit type is available */
 #define FT_LONG64
 #define FT_INT64   long
 #define FT_UINT64  unsigned long
 
   /**************************************************************************
    *
-   * A 64-bit data type may create compilation problems if you compile
-   * in strict ANSI mode.  To avoid them, we disable other 64-bit data
-   * types if __STDC__ is defined.  You can however ignore this rule
-   * by defining the FT_CONFIG_OPTION_FORCE_INT64 configuration macro.
+   * A 64-bit data type may create compilation problems if you compile in
+   * strict ANSI mode.  To avoid them, we disable other 64-bit data types if
+   * `__STDC__` is defined.  You can however ignore this rule by defining the
+   * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro.
    */
 #elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 )
 
@@ -289,19 +288,19 @@
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
 
-#elif defined( _MSC_VER ) && _MSC_VER >= 900  /* Visual C++ (and Intel C++) */
+#elif defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
 
 #elif defined( __BORLANDC__ )  /* Borland C++ */
 
-  /* XXXX: We should probably check the value of __BORLANDC__ in order */
-  /*       to test the compiler version.                               */
+  /* XXXX: We should probably check the value of `__BORLANDC__` in order */
+  /*       to test the compiler version.                                 */
 
-  /* this compiler provides the __int64 type */
+  /* this compiler provides the `__int64` type */
 #define FT_LONG64
 #define FT_INT64   __int64
 #define FT_UINT64  unsigned __int64
@@ -318,7 +317,7 @@
 
 #elif defined( __GNUC__ )
 
-  /* GCC provides the `long long' type */
+  /* GCC provides the `long long` type */
 #define FT_LONG64
 #define FT_INT64   long long int
 #define FT_UINT64  unsigned long long int
@@ -354,7 +353,7 @@
 #define FT_DUMMY_STMNT  FT_BEGIN_STMNT FT_END_STMNT
 
 
-  /* typeof condition taken from gnulib's `intprops.h' header file */
+  /* `typeof` condition taken from gnulib's `intprops.h` header file */
 #if ( ( defined( __GNUC__ ) && __GNUC__ >= 2 )                       || \
       ( defined( __IBMC__ ) && __IBMC__ >= 1210 &&                      \
         defined( __IBM__TYPEOF__ ) )                                 || \
@@ -365,14 +364,14 @@
 #endif
 
 
-  /* Use FT_LOCAL and FT_LOCAL_DEF to declare and define, respectively, */
-  /* a function that gets used only within the scope of a module.       */
-  /* Normally, both the header and source code files for such a         */
-  /* function are within a single module directory.                     */
-  /*                                                                    */
-  /* Intra-module arrays should be tagged with FT_LOCAL_ARRAY and       */
-  /* FT_LOCAL_ARRAY_DEF.                                                */
-  /*                                                                    */
+  /* Use `FT_LOCAL` and `FT_LOCAL_DEF` to declare and define,            */
+  /* respectively, a function that gets used only within the scope of a  */
+  /* module.  Normally, both the header and source code files for such a */
+  /* function are within a single module directory.                      */
+  /*                                                                     */
+  /* Intra-module arrays should be tagged with `FT_LOCAL_ARRAY` and      */
+  /* `FT_LOCAL_ARRAY_DEF`.                                               */
+  /*                                                                     */
 #ifdef FT_MAKE_OPTION_SINGLE_OBJECT
 
 #define FT_LOCAL( x )      static  x
@@ -394,12 +393,12 @@
 #define FT_LOCAL_ARRAY_DEF( x )  const  x
 
 
-  /* Use FT_BASE and FT_BASE_DEF to declare and define, respectively, */
-  /* functions that are used in more than a single module.  In the    */
-  /* current setup this implies that the declaration is in a header   */
-  /* file in the `include/freetype/internal' directory, and the       */
-  /* function body is in a file in `src/base'.                        */
-  /*                                                                  */
+  /* Use `FT_BASE` and `FT_BASE_DEF` to declare and define, respectively, */
+  /* functions that are used in more than a single module.  In the        */
+  /* current setup this implies that the declaration is in a header file  */
+  /* in the `include/freetype/internal` directory, and the function body  */
+  /* is in a file in `src/base`.                                          */
+  /*                                                                      */
 #ifndef FT_BASE
 
 #ifdef __cplusplus
@@ -422,37 +421,40 @@
 #endif /* !FT_BASE_DEF */
 
 
-  /*   When compiling FreeType as a DLL or DSO with hidden visibility      */
-  /*   some systems/compilers need a special attribute in front OR after   */
-  /*   the return type of function declarations.                           */
-  /*                                                                       */
-  /*   Two macros are used within the FreeType source code to define       */
-  /*   exported library functions: FT_EXPORT and FT_EXPORT_DEF.            */
-  /*                                                                       */
-  /*     FT_EXPORT( return_type )                                          */
-  /*                                                                       */
-  /*       is used in a function declaration, as in                        */
-  /*                                                                       */
-  /*         FT_EXPORT( FT_Error )                                         */
-  /*         FT_Init_FreeType( FT_Library*  alibrary );                    */
-  /*                                                                       */
-  /*                                                                       */
-  /*     FT_EXPORT_DEF( return_type )                                      */
-  /*                                                                       */
-  /*       is used in a function definition, as in                         */
-  /*                                                                       */
-  /*         FT_EXPORT_DEF( FT_Error )                                     */
-  /*         FT_Init_FreeType( FT_Library*  alibrary )                     */
-  /*         {                                                             */
-  /*           ... some code ...                                           */
-  /*           return FT_Err_Ok;                                           */
-  /*         }                                                             */
-  /*                                                                       */
-  /*   You can provide your own implementation of FT_EXPORT and            */
-  /*   FT_EXPORT_DEF here if you want.                                     */
-  /*                                                                       */
-  /*   To export a variable, use FT_EXPORT_VAR.                            */
-  /*                                                                       */
+  /* When compiling FreeType as a DLL or DSO with hidden visibility    */
+  /* some systems/compilers need a special attribute in front OR after */
+  /* the return type of function declarations.                         */
+  /*                                                                   */
+  /* Two macros are used within the FreeType source code to define     */
+  /* exported library functions: `FT_EXPORT` and `FT_EXPORT_DEF`.      */
+  /*                                                                   */
+  /* - `FT_EXPORT( return_type )`                                      */
+  /*                                                                   */
+  /*   is used in a function declaration, as in                        */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT( FT_Error )                                         */
+  /*     FT_Init_FreeType( FT_Library*  alibrary );                    */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* - `FT_EXPORT_DEF( return_type )`                                  */
+  /*                                                                   */
+  /*   is used in a function definition, as in                         */
+  /*                                                                   */
+  /*   ```                                                             */
+  /*     FT_EXPORT_DEF( FT_Error )                                     */
+  /*     FT_Init_FreeType( FT_Library*  alibrary )                     */
+  /*     {                                                             */
+  /*       ... some code ...                                           */
+  /*       return FT_Err_Ok;                                           */
+  /*     }                                                             */
+  /*   ```                                                             */
+  /*                                                                   */
+  /* You can provide your own implementation of `FT_EXPORT` and        */
+  /* `FT_EXPORT_DEF` here if you want.                                 */
+  /*                                                                   */
+  /* To export a variable, use `FT_EXPORT_VAR`.                        */
+  /*                                                                   */
 #ifndef FT_EXPORT
 
 #ifdef FT2_BUILD_LIBRARY
@@ -510,7 +512,7 @@
   /* C++ compiler and with 16bit compilers.                          */
   /*                                                                 */
 
-  /* This is special.  Within C++, you must specify `extern "C"' for */
+  /* This is special.  Within C++, you must specify `extern "C"` for */
   /* functions which are used via function pointers, and you also    */
   /* must do that for structures which contain function pointers to  */
   /* assure C linkage -- it's not possible to have (local) anonymous */
@@ -533,7 +535,7 @@
   /*                                                                 */
   /*                                                                 */
   /* Some 16bit compilers have to redefine these macros to insert    */
-  /* the infamous `_cdecl' or `__fastcall' declarations.             */
+  /* the infamous `_cdecl` or `__fastcall` declarations.             */
   /*                                                                 */
 #ifndef FT_CALLBACK_DEF
 #ifdef __cplusplus
diff --git a/include/freetype/config/ftheader.h b/include/freetype/config/ftheader.h
index bb96837..696d6ba 100644
--- a/include/freetype/config/ftheader.h
+++ b/include/freetype/config/ftheader.h
@@ -4,7 +4,7 @@
  *
  *   Build macros of the FreeType 2 library.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
   /* <Description>                                                         */
   /*    This macro is used in association with @FT_END_HEADER in header    */
   /*    files to ensure that the declarations within are properly          */
-  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
+  /*    encapsulated in an `extern "C" { .. }` block when included from a  */
   /*    C++ compiler.                                                      */
   /*                                                                       */
 #ifdef __cplusplus
@@ -45,7 +45,7 @@
   /* <Description>                                                         */
   /*    This macro is used in association with @FT_BEGIN_HEADER in header  */
   /*    files to ensure that the declarations within are properly          */
-  /*    encapsulated in an `extern "C" { .. }' block when included from a  */
+  /*    encapsulated in an `extern "C" { .. }` block when included from a  */
   /*    C++ compiler.                                                      */
   /*                                                                       */
 #ifdef __cplusplus
@@ -70,39 +70,39 @@
    *   Header File Macros
    *
    * @abstract:
-   *   Macro definitions used to #include specific header files.
+   *   Macro definitions used to `#include` specific header files.
    *
    * @description:
-   *   The following macros are defined to the name of specific
-   *   FreeType~2 header files.  They can be used directly in #include
-   *   statements as in:
+   *   The following macros are defined to the name of specific FreeType~2
+   *   header files.  They can be used directly in `#include` statements as
+   *   in:
    *
-   *   {
+   *   ```
    *     #include FT_FREETYPE_H
    *     #include FT_MULTIPLE_MASTERS_H
    *     #include FT_GLYPH_H
-   *   }
+   *   ```
    *
-   *   There are several reasons why we are now using macros to name
-   *   public header files.  The first one is that such macros are not
-   *   limited to the infamous 8.3~naming rule required by DOS (and
-   *   `FT_MULTIPLE_MASTERS_H' is a lot more meaningful than `ftmm.h').
+   *   There are several reasons why we are now using macros to name public
+   *   header files.  The first one is that such macros are not limited to
+   *   the infamous 8.3~naming rule required by DOS (and
+   *   `FT_MULTIPLE_MASTERS_H` is a lot more meaningful than `ftmm.h`).
    *
-   *   The second reason is that it allows for more flexibility in the
-   *   way FreeType~2 is installed on a given system.
+   *   The second reason is that it allows for more flexibility in the way
+   *   FreeType~2 is installed on a given system.
    *
    */
 
 
   /* configuration files */
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CONFIG_CONFIG_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   FreeType~2 configuration data.
    *
    */
@@ -111,13 +111,13 @@
 #endif
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CONFIG_STANDARD_LIBRARY_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   FreeType~2 interface to the standard C library functions.
    *
    */
@@ -126,13 +126,13 @@
 #endif
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CONFIG_OPTIONS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   FreeType~2 project-specific configuration options.
    *
    */
@@ -141,13 +141,13 @@
 #endif
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CONFIG_MODULES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   list of FreeType~2 modules that are statically linked to new library
    *   instances in @FT_Init_FreeType.
    *
@@ -160,26 +160,26 @@
 
   /* public headers */
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_FREETYPE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   base FreeType~2 API.
    *
    */
 #define FT_FREETYPE_H  <freetype/freetype.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ERRORS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   list of FreeType~2 error codes (and messages).
    *
    *   It is included by @FT_FREETYPE_H.
@@ -188,26 +188,26 @@
 #define FT_ERRORS_H  <freetype/fterrors.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_MODULE_ERRORS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   list of FreeType~2 module error offsets (and messages).
    *
    */
 #define FT_MODULE_ERRORS_H  <freetype/ftmoderr.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_SYSTEM_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 interface to low-level operations (i.e., memory management
    *   and stream i/o).
    *
@@ -217,13 +217,13 @@
 #define FT_SYSTEM_H  <freetype/ftsystem.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IMAGE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing type
+   *   A macro used in `#include` statements to name the file containing type
    *   definitions related to glyph images (i.e., bitmaps, outlines,
    *   scan-converter parameters).
    *
@@ -233,13 +233,13 @@
 #define FT_IMAGE_H  <freetype/ftimage.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TYPES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   basic data types defined by FreeType~2.
    *
    *   It is included by @FT_FREETYPE_H.
@@ -248,13 +248,13 @@
 #define FT_TYPES_H  <freetype/fttypes.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_LIST_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   list management API of FreeType~2.
    *
    *   (Most applications will never need to include this file.)
@@ -263,151 +263,151 @@
 #define FT_LIST_H  <freetype/ftlist.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_OUTLINE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   scalable outline management API of FreeType~2.
    *
    */
 #define FT_OUTLINE_H  <freetype/ftoutln.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_SIZES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   API which manages multiple @FT_Size objects per face.
    *
    */
 #define FT_SIZES_H  <freetype/ftsizes.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_MODULE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   module management API of FreeType~2.
    *
    */
 #define FT_MODULE_H  <freetype/ftmodapi.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_RENDER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   renderer module management API of FreeType~2.
    *
    */
 #define FT_RENDER_H  <freetype/ftrender.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_DRIVER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   structures and macros related to the driver modules.
    *
    */
 #define FT_DRIVER_H  <freetype/ftdriver.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_AUTOHINTER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   structures and macros related to the auto-hinting module.
    *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
+   *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
    *
    */
 #define FT_AUTOHINTER_H  FT_DRIVER_H
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CFF_DRIVER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   structures and macros related to the CFF driver module.
    *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
+   *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
    *
    */
 #define FT_CFF_DRIVER_H  FT_DRIVER_H
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TRUETYPE_DRIVER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   structures and macros related to the TrueType driver module.
    *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
+   *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
    *
    */
 #define FT_TRUETYPE_DRIVER_H  FT_DRIVER_H
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_PCF_DRIVER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing
+   *   A macro used in `#include` statements to name the file containing
    *   structures and macros related to the PCF driver module.
    *
-   *   Deprecated since version 2.9; use @FT_DRIVER_H instead.
+   *   Deprecated since version~2.9; use @FT_DRIVER_H instead.
    *
    */
 #define FT_PCF_DRIVER_H  FT_DRIVER_H
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TYPE1_TABLES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   types and API specific to the Type~1 format.
    *
    */
 #define FT_TYPE1_TABLES_H  <freetype/t1tables.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TRUETYPE_IDS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   enumeration values which identify name strings, languages, encodings,
    *   etc.  This file really contains a _large_ set of constant macro
    *   definitions, taken from the TrueType and OpenType specifications.
@@ -416,174 +416,172 @@
 #define FT_TRUETYPE_IDS_H  <freetype/ttnameid.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TRUETYPE_TABLES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   types and API specific to the TrueType (as well as OpenType) format.
    *
    */
 #define FT_TRUETYPE_TABLES_H  <freetype/tttables.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TRUETYPE_TAGS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of TrueType four-byte `tags' which identify blocks in
+   *   A macro used in `#include` statements to name the file containing the
+   *   definitions of TrueType four-byte 'tags' which identify blocks in
    *   SFNT-based font formats (i.e., TrueType and OpenType).
    *
    */
 #define FT_TRUETYPE_TAGS_H  <freetype/tttags.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_BDF_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which accesses BDF-specific strings from a
-   *   face.
+   *   A macro used in `#include` statements to name the file containing the
+   *   definitions of an API which accesses BDF-specific strings from a face.
    *
    */
 #define FT_BDF_H  <freetype/ftbdf.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CID_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   definitions of an API which access CID font information from a
-   *   face.
+   *   A macro used in `#include` statements to name the file containing the
+   *   definitions of an API which access CID font information from a face.
    *
    */
 #define FT_CID_H  <freetype/ftcid.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_GZIP_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   definitions of an API which supports gzip-compressed files.
    *
    */
 #define FT_GZIP_H  <freetype/ftgzip.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_LZW_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   definitions of an API which supports LZW-compressed files.
    *
    */
 #define FT_LZW_H  <freetype/ftlzw.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_BZIP2_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   definitions of an API which supports bzip2-compressed files.
    *
    */
 #define FT_BZIP2_H  <freetype/ftbzip2.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_WINFONTS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   definitions of an API which supports Windows FNT files.
    *
    */
 #define FT_WINFONTS_H   <freetype/ftwinfnt.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_GLYPH_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   API of the optional glyph management component.
    *
    */
 #define FT_GLYPH_H  <freetype/ftglyph.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_BITMAP_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   API of the optional bitmap conversion component.
    *
    */
 #define FT_BITMAP_H  <freetype/ftbitmap.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_BBOX_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   API of the optional exact bounding box computation routines.
    *
    */
 #define FT_BBOX_H  <freetype/ftbbox.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_CACHE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   API of the optional FreeType~2 cache sub-system.
    *
    */
 #define FT_CACHE_H  <freetype/ftcache.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_MAC_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   Macintosh-specific FreeType~2 API.  The latter is used to access
-   *   fonts embedded in resource forks.
+   *   A macro used in `#include` statements to name the file containing the
+   *   Macintosh-specific FreeType~2 API.  The latter is used to access fonts
+   *   embedded in resource forks.
    *
    *   This header file must be explicitly included by client applications
    *   compiled on the Mac (note that the base API still works though).
@@ -592,105 +590,105 @@
 #define FT_MAC_H  <freetype/ftmac.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_MULTIPLE_MASTERS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   optional multiple-masters management API of FreeType~2.
    *
    */
 #define FT_MULTIPLE_MASTERS_H  <freetype/ftmm.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_SFNT_NAMES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which accesses embedded `name' strings in
+   *   A macro used in `#include` statements to name the file containing the
+   *   optional FreeType~2 API which accesses embedded 'name' strings in
    *   SFNT-based font formats (i.e., TrueType and OpenType).
    *
    */
 #define FT_SFNT_NAMES_H  <freetype/ftsnames.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_OPENTYPE_VALIDATE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which validates OpenType tables (BASE, GDEF,
-   *   GPOS, GSUB, JSTF).
+   *   A macro used in `#include` statements to name the file containing the
+   *   optional FreeType~2 API which validates OpenType tables ('BASE',
+   *   'GDEF', 'GPOS', 'GSUB', 'JSTF').
    *
    */
 #define FT_OPENTYPE_VALIDATE_H  <freetype/ftotval.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_GX_VALIDATE_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   optional FreeType~2 API which validates TrueTypeGX/AAT tables (feat,
-   *   mort, morx, bsln, just, kern, opbd, trak, prop).
+   *   A macro used in `#include` statements to name the file containing the
+   *   optional FreeType~2 API which validates TrueTypeGX/AAT tables ('feat',
+   *   'mort', 'morx', 'bsln', 'just', 'kern', 'opbd', 'trak', 'prop').
    *
    */
 #define FT_GX_VALIDATE_H  <freetype/ftgxval.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_PFR_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which accesses PFR-specific data.
    *
    */
 #define FT_PFR_H  <freetype/ftpfr.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_STROKER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which provides functions to stroke outline paths.
    */
 #define FT_STROKER_H  <freetype/ftstroke.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_SYNTHESIS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which performs artificial obliquing and emboldening.
    */
 #define FT_SYNTHESIS_H  <freetype/ftsynth.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_FONT_FORMATS_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which provides functions specific to font formats.
    */
 #define FT_FONT_FORMATS_H  <freetype/ftfntfmt.h>
@@ -699,75 +697,75 @@
 #define FT_XFREE86_H  FT_FONT_FORMATS_H
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_TRIGONOMETRY_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which performs trigonometric computations (e.g.,
    *   cosines and arc tangents).
    */
 #define FT_TRIGONOMETRY_H  <freetype/fttrigon.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_LCD_FILTER_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which performs color filtering for subpixel rendering.
    */
 #define FT_LCD_FILTER_H  <freetype/ftlcdfil.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_INCREMENTAL_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which performs incremental glyph loading.
    */
 #define FT_INCREMENTAL_H  <freetype/ftincrem.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_GASP_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which returns entries from the TrueType GASP table.
    */
 #define FT_GASP_H  <freetype/ftgasp.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ADVANCES_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
+   *   A macro used in `#include` statements to name the file containing the
    *   FreeType~2 API which returns individual and ranged glyph advances.
    */
 #define FT_ADVANCES_H  <freetype/ftadvanc.h>
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_COLOR_H
    *
    * @description:
-   *   A macro used in #include statements to name the file containing the
-   *   FreeType~2 API which handles the OpenType CPAL table.
+   *   A macro used in `#include` statements to name the file containing the
+   *   FreeType~2 API which handles the OpenType 'CPAL' table.
    */
 #define FT_COLOR_H  <freetype/ftcolor.h>
 
@@ -782,14 +780,14 @@
 #define FT_UNPATENTED_HINTING_H   <freetype/ftparams.h>
 #define FT_TRUETYPE_UNPATENTED_H  <freetype/ftparams.h>
 
-  /* FT_CACHE_H is the only header file needed for the cache subsystem. */
+  /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */
 #define FT_CACHE_IMAGE_H          FT_CACHE_H
 #define FT_CACHE_SMALL_BITMAPS_H  FT_CACHE_H
 #define FT_CACHE_CHARMAP_H        FT_CACHE_H
 
   /* The internals of the cache sub-system are no longer exposed.  We */
-  /* default to FT_CACHE_H at the moment just in case, but we know of */
-  /* no rogue client that uses them.                                  */
+  /* default to `FT_CACHE_H` at the moment just in case, but we know  */
+  /* of no rogue client that uses them.                               */
   /*                                                                  */
 #define FT_CACHE_MANAGER_H           FT_CACHE_H
 #define FT_CACHE_INTERNAL_MRU_H      FT_CACHE_H
@@ -801,8 +799,8 @@
 
 
   /*
-   * Include internal headers definitions from <internal/...>
-   * only when building the library.
+   * Include internal headers definitions from `<internal/...>` only when
+   * building the library.
    */
 #ifdef FT2_BUILD_LIBRARY
 #define  FT_INTERNAL_INTERNAL_H  <freetype/internal/internal.h>
diff --git a/include/freetype/config/ftmodule.h b/include/freetype/config/ftmodule.h
index e751509..5ac08c1 100644
--- a/include/freetype/config/ftmodule.h
+++ b/include/freetype/config/ftmodule.h
@@ -2,10 +2,10 @@
  * This file registers the FreeType modules compiled into the library.
  *
  * If you use GNU make, this file IS NOT USED!  Instead, it is created in
- * the objects directory (normally `<topdir>/objs/') based on information
- * from `<topdir>/modules.cfg'.
+ * the objects directory (normally `<topdir>/objs/`) based on information
+ * from `<topdir>/modules.cfg`.
  *
- * Please read `docs/INSTALL.ANY' and `docs/CUSTOMIZE' how to compile
+ * Please read `docs/INSTALL.ANY` and `docs/CUSTOMIZE` how to compile
  * FreeType without GNU make.
  *
  */
diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
index b2e6685..6c7eb55 100644
--- a/include/freetype/config/ftoption.h
+++ b/include/freetype/config/ftoption.h
@@ -4,7 +4,7 @@
  *
  *   User-selectable configuration macros (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,39 +29,39 @@
    *
    *                USER-SELECTABLE CONFIGURATION MACROS
    *
-   * This file contains the default configuration macro definitions for
-   * a standard build of the FreeType library.  There are three ways to
-   * use this file to build project-specific versions of the library:
+   * This file contains the default configuration macro definitions for a
+   * standard build of the FreeType library.  There are three ways to use
+   * this file to build project-specific versions of the library:
    *
    * - You can modify this file by hand, but this is not recommended in
-   *   cases where you would like to build several versions of the
-   *   library from a single source directory.
+   *   cases where you would like to build several versions of the library
+   *   from a single source directory.
    *
    * - You can put a copy of this file in your build directory, more
-   *   precisely in `$BUILD/freetype/config/ftoption.h', where `$BUILD'
-   *   is the name of a directory that is included _before_ the FreeType
-   *   include path during compilation.
+   *   precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is
+   *   the name of a directory that is included _before_ the FreeType include
+   *   path during compilation.
    *
-   *   The default FreeType Makefiles and Jamfiles use the build
-   *   directory `builds/<system>' by default, but you can easily change
-   *   that for your own projects.
+   *   The default FreeType Makefiles and Jamfiles use the build directory
+   *   `builds/<system>` by default, but you can easily change that for your
+   *   own projects.
    *
-   * - Copy the file <ft2build.h> to `$BUILD/ft2build.h' and modify it
-   *   slightly to pre-define the macro FT_CONFIG_OPTIONS_H used to
-   *   locate this file during the build.  For example,
+   * - Copy the file <ft2build.h> to `$BUILD/ft2build.h` and modify it
+   *   slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate
+   *   this file during the build.  For example,
    *
-   *   {
+   *   ```
    *     #define FT_CONFIG_OPTIONS_H  <myftoptions.h>
    *     #include <freetype/config/ftheader.h>
-   *   }
+   *   ```
    *
-   *   will use `$BUILD/myftoptions.h' instead of this file for macro
+   *   will use `$BUILD/myftoptions.h` instead of this file for macro
    *   definitions.
    *
    *   Note also that you can similarly pre-define the macro
-   *   FT_CONFIG_MODULES_H used to locate the file listing of the modules
+   *   `FT_CONFIG_MODULES_H` used to locate the file listing of the modules
    *   that are statically linked to the library at compile time.  By
-   *   default, this file is <freetype/config/ftmodule.h>.
+   *   default, this file is `<freetype/config/ftmodule.h>`.
    *
    * We highly recommend using the third method whenever possible.
    *
@@ -80,18 +80,18 @@
   /*#************************************************************************
    *
    * If you enable this configuration option, FreeType recognizes an
-   * environment variable called `FREETYPE_PROPERTIES', which can be used to
+   * environment variable called `FREETYPE_PROPERTIES`, which can be used to
    * control the various font drivers and modules.  The controllable
    * properties are listed in the section @properties.
    *
    * You have to undefine this configuration option on platforms that lack
-   * the concept of environment variables (and thus don't have the `getenv'
+   * the concept of environment variables (and thus don't have the `getenv`
    * function), for example Windows CE.
    *
-   * `FREETYPE_PROPERTIES' has the following syntax form (broken here into
+   * `FREETYPE_PROPERTIES` has the following syntax form (broken here into
    * multiple lines for better readability).
    *
-   * {
+   * ```
    *   <optional whitespace>
    *   <module-name1> ':'
    *   <property-name1> '=' <property-value1>
@@ -99,15 +99,15 @@
    *   <module-name2> ':'
    *   <property-name2> '=' <property-value2>
    *   ...
-   * }
+   * ```
    *
    * Example:
    *
-   * {
+   * ```
    *   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
    *                       cff:no-stem-darkening=1 \
    *                       autofitter:warping=1
-   * }
+   * ```
    *
    */
 /* ANDROID: disabled */
@@ -118,35 +118,34 @@
    *
    * Uncomment the line below if you want to activate LCD rendering
    * technology similar to ClearType in this build of the library.  This
-   * technology triples the resolution in the direction color subpixels.
-   * To mitigate color fringes inherent to this technology, you also need
-   * to explicitly set up LCD filtering.
+   * technology triples the resolution in the direction color subpixels.  To
+   * mitigate color fringes inherent to this technology, you also need to
+   * explicitly set up LCD filtering.
    *
-   * Note that this feature is covered by several Microsoft patents
-   * and should not be activated in any default build of the library.
-   * When this macro is not defined, FreeType offers alternative LCD
-   * rendering technology that produces excellent output without LCD
-   * filtering.
+   * Note that this feature is covered by several Microsoft patents and
+   * should not be activated in any default build of the library.  When this
+   * macro is not defined, FreeType offers alternative LCD rendering
+   * technology that produces excellent output without LCD filtering.
    */
 /* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
 
 
   /**************************************************************************
    *
-   * Many compilers provide a non-ANSI 64-bit data type that can be used
-   * by FreeType to speed up some computations.  However, this will create
-   * some problems when compiling the library in strict ANSI mode.
+   * Many compilers provide a non-ANSI 64-bit data type that can be used by
+   * FreeType to speed up some computations.  However, this will create some
+   * problems when compiling the library in strict ANSI mode.
    *
    * For this reason, the use of 64-bit integers is normally disabled when
-   * the __STDC__ macro is defined.  You can however disable this by
-   * defining the macro FT_CONFIG_OPTION_FORCE_INT64 here.
+   * the `__STDC__` macro is defined.  You can however disable this by
+   * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here.
    *
    * For most compilers, this will only create compilation warnings when
    * building the library.
    *
    * ObNote: The compiler-specific 64-bit integers are detected in the
-   *         file `ftconfig.h' either statically or through the
-   *         `configure' script on supported platforms.
+   *         file `ftconfig.h` either statically or through the `configure`
+   *         script on supported platforms.
    */
 #undef FT_CONFIG_OPTION_FORCE_INT64
 
@@ -154,21 +153,21 @@
   /**************************************************************************
    *
    * If this macro is defined, do not try to use an assembler version of
-   * performance-critical functions (e.g. FT_MulFix).  You should only do
-   * that to verify that the assembler function works properly, or to
-   * execute benchmark tests of the various implementations.
+   * performance-critical functions (e.g., @FT_MulFix).  You should only do
+   * that to verify that the assembler function works properly, or to execute
+   * benchmark tests of the various implementations.
    */
 /* #define FT_CONFIG_OPTION_NO_ASSEMBLER */
 
 
   /**************************************************************************
    *
-   * If this macro is defined, try to use an inlined assembler version of
-   * the `FT_MulFix' function, which is a `hotspot' when loading and
-   * hinting glyphs, and which should be executed as fast as possible.
+   * If this macro is defined, try to use an inlined assembler version of the
+   * @FT_MulFix function, which is a 'hotspot' when loading and hinting
+   * glyphs, and which should be executed as fast as possible.
    *
-   * Note that if your compiler or CPU is not supported, this will default
-   * to the standard and portable implementation found in `ftcalc.c'.
+   * Note that if your compiler or CPU is not supported, this will default to
+   * the standard and portable implementation found in `ftcalc.c`.
    */
 #define FT_CONFIG_OPTION_INLINE_MULFIX
 
@@ -178,12 +177,12 @@
    * LZW-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `compress' program.  This is mostly used to parse many of the PCF
+   *   `compress` program.  This is mostly used to parse many of the PCF
    *   files that come with various X11 distributions.  The implementation
-   *   uses NetBSD's `zopen' to partially uncompress the file on the fly
-   *   (see src/lzw/ftgzip.c).
+   *   uses NetBSD's `zopen` to partially uncompress the file on the fly (see
+   *   `src/lzw/ftgzip.c`).
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    */
 #define FT_CONFIG_OPTION_USE_LZW
 
@@ -193,12 +192,12 @@
    * Gzip-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `gzip' program.  This is mostly used to parse many of the PCF files
-   *   that come with XFree86.  The implementation uses `zlib' to
-   *   partially uncompress the file on the fly (see src/gzip/ftgzip.c).
+   *   `gzip` program.  This is mostly used to parse many of the PCF files
+   *   that come with XFree86.  The implementation uses 'zlib' to partially
+   *   uncompress the file on the fly (see `src/gzip/ftgzip.c`).
    *
-   *   Define this macro if you want to enable this `feature'.  See also
-   *   the macro FT_CONFIG_OPTION_SYSTEM_ZLIB below.
+   *   Define this macro if you want to enable this 'feature'.  See also the
+   *   macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below.
    */
 #define FT_CONFIG_OPTION_USE_ZLIB
 
@@ -207,23 +206,23 @@
    *
    * ZLib library selection
    *
-   *   This macro is only used when FT_CONFIG_OPTION_USE_ZLIB is defined.
-   *   It allows FreeType's `ftgzip' component to link to the system's
+   *   This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined.
+   *   It allows FreeType's 'ftgzip' component to link to the system's
    *   installation of the ZLib library.  This is useful on systems like
    *   Unix or VMS where it generally is already available.
    *
-   *   If you let it undefined, the component will use its own copy
-   *   of the zlib sources instead.  These have been modified to be
-   *   included directly within the component and *not* export external
-   *   function names.  This allows you to link any program with FreeType
-   *   _and_ ZLib without linking conflicts.
+   *   If you let it undefined, the component will use its own copy of the
+   *   zlib sources instead.  These have been modified to be included
+   *   directly within the component and **not** export external function
+   *   names.  This allows you to link any program with FreeType _and_ ZLib
+   *   without linking conflicts.
    *
-   *   Do not #undef this macro here since the build system might define
+   *   Do not `#undef` this macro here since the build system might define
    *   it for certain configurations only.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 /* #define FT_CONFIG_OPTION_SYSTEM_ZLIB */
 
@@ -233,28 +232,28 @@
    * Bzip2-compressed file support.
    *
    *   FreeType now handles font files that have been compressed with the
-   *   `bzip2' program.  This is mostly used to parse many of the PCF
-   *   files that come with XFree86.  The implementation uses `libbz2' to
-   *   partially uncompress the file on the fly (see src/bzip2/ftbzip2.c).
-   *   Contrary to gzip, bzip2 currently is not included and need to use
-   *   the system available bzip2 implementation.
+   *   `bzip2` program.  This is mostly used to parse many of the PCF files
+   *   that come with XFree86.  The implementation uses `libbz2` to partially
+   *   uncompress the file on the fly (see `src/bzip2/ftbzip2.c`).  Contrary
+   *   to gzip, bzip2 currently is not included and need to use the system
+   *   available bzip2 implementation.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 /* #define FT_CONFIG_OPTION_USE_BZIP2 */
 
 
   /**************************************************************************
    *
-   * Define to disable the use of file stream functions and types, FILE,
-   * fopen() etc.  Enables the use of smaller system libraries on embedded
-   * systems that have multiple system libraries, some with or without
-   * file stream support, in the cases where file stream support is not
-   * necessary such as memory loading of font files.
+   * Define to disable the use of file stream functions and types, `FILE`,
+   * `fopen`, etc.  Enables the use of smaller system libraries on embedded
+   * systems that have multiple system libraries, some with or without file
+   * stream support, in the cases where file stream support is not necessary
+   * such as memory loading of font files.
    */
 /* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
 
@@ -265,14 +264,14 @@
    *
    *   FreeType now handles loading color bitmap glyphs in the PNG format.
    *   This requires help from the external libpng library.  Uncompressed
-   *   color bitmaps do not need any external libraries and will be
-   *   supported regardless of this configuration.
+   *   color bitmaps do not need any external libraries and will be supported
+   *   regardless of this configuration.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
   /* ANDROID: enabled */
 #define FT_CONFIG_OPTION_USE_PNG
@@ -282,15 +281,15 @@
    *
    * HarfBuzz support.
    *
-   *   FreeType uses the HarfBuzz library to improve auto-hinting of
-   *   OpenType fonts.  If available, many glyphs not directly addressable
-   *   by a font's character map will be hinted also.
+   *   FreeType uses the HarfBuzz library to improve auto-hinting of OpenType
+   *   fonts.  If available, many glyphs not directly addressable by a font's
+   *   character map will be hinted also.
    *
-   *   Define this macro if you want to enable this `feature'.
+   *   Define this macro if you want to enable this 'feature'.
    *
-   *   If you use a build system like cmake or the `configure' script,
-   *   options set by those programs have precendence, overwriting the
-   *   value here with the configured one.
+   *   If you use a build system like cmake or the `configure` script,
+   *   options set by those programs have precedence, overwriting the value
+   *   here with the configured one.
    */
 /* #define FT_CONFIG_OPTION_USE_HARFBUZZ */
 
@@ -299,23 +298,23 @@
    *
    * Glyph Postscript Names handling
    *
-   *   By default, FreeType 2 is compiled with the `psnames' module.  This
-   *   module is in charge of converting a glyph name string into a
-   *   Unicode value, or return a Macintosh standard glyph name for the
-   *   use with the TrueType `post' table.
+   *   By default, FreeType 2 is compiled with the 'psnames' module.  This
+   *   module is in charge of converting a glyph name string into a Unicode
+   *   value, or return a Macintosh standard glyph name for the use with the
+   *   TrueType 'post' table.
    *
-   *   Undefine this macro if you do not want `psnames' compiled in your
+   *   Undefine this macro if you do not want 'psnames' compiled in your
    *   build of FreeType.  This has the following effects:
    *
-   *   - The TrueType driver will provide its own set of glyph names,
-   *     if you build it to support postscript names in the TrueType
-   *     `post' table, but will not synthesize a missing Unicode charmap.
+   *   - The TrueType driver will provide its own set of glyph names, if you
+   *     build it to support postscript names in the TrueType 'post' table,
+   *     but will not synthesize a missing Unicode charmap.
    *
-   *   - The Type 1 driver will not be able to synthesize a Unicode
-   *     charmap out of the glyphs found in the fonts.
+   *   - The Type~1 driver will not be able to synthesize a Unicode charmap
+   *     out of the glyphs found in the fonts.
    *
-   *   You would normally undefine this configuration macro when building
-   *   a version of FreeType that doesn't contain a Type 1 or CFF driver.
+   *   You would normally undefine this configuration macro when building a
+   *   version of FreeType that doesn't contain a Type~1 or CFF driver.
    */
 #define FT_CONFIG_OPTION_POSTSCRIPT_NAMES
 
@@ -324,16 +323,15 @@
    *
    * Postscript Names to Unicode Values support
    *
-   *   By default, FreeType 2 is built with the `PSNames' module compiled
-   *   in.  Among other things, the module is used to convert a glyph name
-   *   into a Unicode value.  This is especially useful in order to
-   *   synthesize on the fly a Unicode charmap from the CFF/Type 1 driver
-   *   through a big table named the `Adobe Glyph List' (AGL).
+   *   By default, FreeType~2 is built with the 'psnames' module compiled in.
+   *   Among other things, the module is used to convert a glyph name into a
+   *   Unicode value.  This is especially useful in order to synthesize on
+   *   the fly a Unicode charmap from the CFF/Type~1 driver through a big
+   *   table named the 'Adobe Glyph List' (AGL).
    *
-   *   Undefine this macro if you do not want the Adobe Glyph List
-   *   compiled in your `PSNames' module.  The Type 1 driver will not be
-   *   able to synthesize a Unicode charmap out of the glyphs found in the
-   *   fonts.
+   *   Undefine this macro if you do not want the Adobe Glyph List compiled
+   *   in your 'psnames' module.  The Type~1 driver will not be able to
+   *   synthesize a Unicode charmap out of the glyphs found in the fonts.
    */
 #define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST
 
@@ -342,11 +340,11 @@
    *
    * Support for Mac fonts
    *
-   *   Define this macro if you want support for outline fonts in Mac
-   *   format (mac dfont, mac resource, macbinary containing a mac
-   *   resource) on non-Mac platforms.
+   *   Define this macro if you want support for outline fonts in Mac format
+   *   (mac dfont, mac resource, macbinary containing a mac resource) on
+   *   non-Mac platforms.
    *
-   *   Note that the `FOND' resource isn't checked.
+   *   Note that the 'FOND' resource isn't checked.
    */
 #define FT_CONFIG_OPTION_MAC_FONTS
 
@@ -360,13 +358,12 @@
    *   Resource forks which include fonts data are stored sometimes in
    *   locations which users or developers don't expected.  In some cases,
    *   resource forks start with some offset from the head of a file.  In
-   *   other cases, the actual resource fork is stored in file different
-   *   from what the user specifies.  If this option is activated,
-   *   FreeType tries to guess whether such offsets or different file
-   *   names must be used.
+   *   other cases, the actual resource fork is stored in file different from
+   *   what the user specifies.  If this option is activated, FreeType tries
+   *   to guess whether such offsets or different file names must be used.
    *
    *   Note that normal, direct access of resource forks is controlled via
-   *   the FT_CONFIG_OPTION_MAC_FONTS option.
+   *   the `FT_CONFIG_OPTION_MAC_FONTS` option.
    */
 #ifdef FT_CONFIG_OPTION_MAC_FONTS
 #define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK
@@ -375,11 +372,11 @@
 
   /**************************************************************************
    *
-   * Allow the use of FT_Incremental_Interface to load typefaces that
-   * contain no glyph data, but supply it via a callback function.
-   * This is required by clients supporting document formats which
-   * supply font data incrementally as the document is parsed, such
-   * as the Ghostscript interpreter for the PostScript language.
+   * Allow the use of `FT_Incremental_Interface` to load typefaces that
+   * contain no glyph data, but supply it via a callback function.  This is
+   * required by clients supporting document formats which supply font data
+   * incrementally as the document is parsed, such as the Ghostscript
+   * interpreter for the PostScript language.
    */
 /* ANDROID: disabled */
 /* #define FT_CONFIG_OPTION_INCREMENTAL                                  */
@@ -387,8 +384,8 @@
 
   /**************************************************************************
    *
-   * The size in bytes of the render pool used by the scan-line converter
-   * to do all of its work.
+   * The size in bytes of the render pool used by the scan-line converter to
+   * do all of its work.
    */
 #define FT_RENDER_POOL_SIZE  16384L
 
@@ -398,7 +395,7 @@
    * FT_MAX_MODULES
    *
    *   The maximum number of modules that can be registered in a single
-   *   FreeType library object.  32 is the default.
+   *   FreeType library object.  32~is the default.
    */
 #define FT_MAX_MODULES  32
 
@@ -408,16 +405,15 @@
    * Debug level
    *
    *   FreeType can be compiled in debug or trace mode.  In debug mode,
-   *   errors are reported through the `ftdebug' component.  In trace
-   *   mode, additional messages are sent to the standard output during
-   *   execution.
+   *   errors are reported through the 'ftdebug' component.  In trace mode,
+   *   additional messages are sent to the standard output during execution.
    *
-   *   Define FT_DEBUG_LEVEL_ERROR to build the library in debug mode.
-   *   Define FT_DEBUG_LEVEL_TRACE to build it in trace mode.
+   *   Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode.
+   *   Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode.
    *
-   *   Don't define any of these macros to compile in `release' mode!
+   *   Don't define any of these macros to compile in 'release' mode!
    *
-   *   Do not #undef these macros here since the build system might define
+   *   Do not `#undef` these macros here since the build system might define
    *   them for certain configurations only.
    */
 /* #define FT_DEBUG_LEVEL_ERROR */
@@ -428,38 +424,38 @@
    *
    * Autofitter debugging
    *
-   *   If FT_DEBUG_AUTOFIT is defined, FreeType provides some means to
+   *   If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to
    *   control the autofitter behaviour for debugging purposes with global
-   *   boolean variables (consequently, you should *never* enable this
-   *   while compiling in `release' mode):
+   *   boolean variables (consequently, you should **never** enable this
+   *   while compiling in 'release' mode):
    *
-   *   {
+   *   ```
    *     _af_debug_disable_horz_hints
    *     _af_debug_disable_vert_hints
    *     _af_debug_disable_blue_hints
-   *   }
+   *   ```
    *
    *   Additionally, the following functions provide dumps of various
-   *   internal autofit structures to stdout (using `printf'):
+   *   internal autofit structures to stdout (using `printf`):
    *
-   *   {
+   *   ```
    *     af_glyph_hints_dump_points
    *     af_glyph_hints_dump_segments
    *     af_glyph_hints_dump_edges
    *     af_glyph_hints_get_num_segments
    *     af_glyph_hints_get_segment_offset
-   *   }
+   *   ```
    *
    *   As an argument, they use another global variable:
    *
-   *   {
+   *   ```
    *     _af_debug_hints
-   *   }
+   *   ```
    *
-   *   Please have a look at the `ftgrid' demo program to see how those
+   *   Please have a look at the `ftgrid` demo program to see how those
    *   variables and macros should be used.
    *
-   *   Do not #undef these macros here since the build system might define
+   *   Do not `#undef` these macros here since the build system might define
    *   them for certain configurations only.
    */
 /* #define FT_DEBUG_AUTOFIT */
@@ -469,16 +465,16 @@
    *
    * Memory Debugging
    *
-   *   FreeType now comes with an integrated memory debugger that is
-   *   capable of detecting simple errors like memory leaks or double
-   *   deletes.  To compile it within your build of the library, you
-   *   should define FT_DEBUG_MEMORY here.
+   *   FreeType now comes with an integrated memory debugger that is capable
+   *   of detecting simple errors like memory leaks or double deletes.  To
+   *   compile it within your build of the library, you should define
+   *   `FT_DEBUG_MEMORY` here.
    *
-   *   Note that the memory debugger is only activated at runtime when
-   *   when the _environment_ variable `FT2_DEBUG_MEMORY' is defined also!
+   *   Note that the memory debugger is only activated at runtime when when
+   *   the _environment_ variable `FT2_DEBUG_MEMORY` is defined also!
    *
-   *   Do not #undef this macro here since the build system might define
-   *   it for certain configurations only.
+   *   Do not `#undef` this macro here since the build system might define it
+   *   for certain configurations only.
    */
 /* #define FT_DEBUG_MEMORY */
 
@@ -487,19 +483,32 @@
    *
    * Module errors
    *
-   *   If this macro is set (which is _not_ the default), the higher byte
-   *   of an error code gives the module in which the error has occurred,
-   *   while the lower byte is the real error code.
+   *   If this macro is set (which is _not_ the default), the higher byte of
+   *   an error code gives the module in which the error has occurred, while
+   *   the lower byte is the real error code.
    *
-   *   Setting this macro makes sense for debugging purposes only, since
-   *   it would break source compatibility of certain programs that use
-   *   FreeType 2.
+   *   Setting this macro makes sense for debugging purposes only, since it
+   *   would break source compatibility of certain programs that use
+   *   FreeType~2.
    *
-   *   More details can be found in the files ftmoderr.h and fterrors.h.
+   *   More details can be found in the files `ftmoderr.h` and `fterrors.h`.
    */
 #undef FT_CONFIG_OPTION_USE_MODULE_ERRORS
 
 
+  /**************************************************************************
+   *
+   * Error Strings
+   *
+   *   If this macro is set, `FT_Error_String` will return meaningful
+   *   descriptions.  This is not enabled by default to reduce the overall
+   *   size of FreeType.
+   *
+   *   More details can be found in the file `fterrors.h`.
+   */
+/* #define FT_CONFIG_OPTION_ERROR_STRINGS */
+
+
   /*************************************************************************/
   /*************************************************************************/
   /****                                                                 ****/
@@ -511,47 +520,47 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_EMBEDDED_BITMAPS if you want to support
-   * embedded bitmaps in all formats using the SFNT module (namely
-   * TrueType & OpenType).
+   * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support
+   * embedded bitmaps in all formats using the 'sfnt' module (namely
+   * TrueType~& OpenType).
    */
 #define TT_CONFIG_OPTION_EMBEDDED_BITMAPS
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_COLOR_LAYERS if you want to support coloured
-   * outlines (from the COLR/CPAL tables) in all formats using the SFNT
-   * module (namely TrueType & OpenType).
+   * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support coloured
+   * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt'
+   * module (namely TrueType~& OpenType).
    */
 #define TT_CONFIG_OPTION_COLOR_LAYERS
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_POSTSCRIPT_NAMES if you want to be able to
-   * load and enumerate the glyph Postscript names in a TrueType or
-   * OpenType file.
+   * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to
+   * load and enumerate the glyph Postscript names in a TrueType or OpenType
+   * file.
    *
-   * Note that when you do not compile the `PSNames' module by undefining
-   * the above FT_CONFIG_OPTION_POSTSCRIPT_NAMES, the `sfnt' module will
+   * Note that when you do not compile the 'psnames' module by undefining the
+   * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES`, the 'sfnt' module will
    * contain additional code used to read the PS Names table from a font.
    *
-   * (By default, the module uses `PSNames' to extract glyph names.)
+   * (By default, the module uses 'psnames' to extract glyph names.)
    */
 #define TT_CONFIG_OPTION_POSTSCRIPT_NAMES
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_SFNT_NAMES if your applications need to
-   * access the internal name table in a SFNT-based format like TrueType
-   * or OpenType.  The name table contains various strings used to
-   * describe the font, like family name, copyright, version, etc.  It
-   * does not contain any glyph name though.
+   * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access
+   * the internal name table in a SFNT-based format like TrueType or
+   * OpenType.  The name table contains various strings used to describe the
+   * font, like family name, copyright, version, etc.  It does not contain
+   * any glyph name though.
    *
    * Accessing SFNT names is done through the functions declared in
-   * `ftsnames.h'.
+   * `ftsnames.h`.
    */
 #define TT_CONFIG_OPTION_SFNT_NAMES
 
@@ -584,54 +593,53 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_BYTECODE_INTERPRETER if you want to compile
-   * a bytecode interpreter in the TrueType driver.
+   * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a
+   * bytecode interpreter in the TrueType driver.
    *
    * By undefining this, you will only compile the code necessary to load
    * TrueType glyphs without hinting.
    *
-   *   Do not #undef this macro here, since the build system might
-   *   define it for certain configurations only.
+   * Do not `#undef` this macro here, since the build system might define it
+   * for certain configurations only.
    */
 #define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_SUBPIXEL_HINTING if you want to compile
+   * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile
    * subpixel hinting support into the TrueType driver.  This modifies the
-   * TrueType hinting mechanism when anything but FT_RENDER_MODE_MONO is
+   * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is
    * requested.
    *
    * In particular, it modifies the bytecode interpreter to interpret (or
-   * not) instructions in a certain way so that all TrueType fonts look
-   * like they do in a Windows ClearType (DirectWrite) environment.  See
-   * [1] for a technical overview on what this means.  See `ttinterp.h'
-   * for more details on the LEAN option.
+   * not) instructions in a certain way so that all TrueType fonts look like
+   * they do in a Windows ClearType (DirectWrite) environment.  See [1] for a
+   * technical overview on what this means.  See `ttinterp.h` for more
+   * details on the LEAN option.
    *
    * There are three possible values.
    *
    * Value 1:
-   *   This value is associated with the `Infinality' moniker,
-   *   contributed by an individual nicknamed Infinality with the goal of
-   *   making TrueType fonts render better than on Windows.  A high
-   *   amount of configurability and flexibility, down to rules for
-   *   single glyphs in fonts, but also very slow.  Its experimental and
-   *   slow nature and the original developer losing interest meant that
-   *   this option was never enabled in default builds.
+   *   This value is associated with the 'Infinality' moniker, contributed by
+   *   an individual nicknamed Infinality with the goal of making TrueType
+   *   fonts render better than on Windows.  A high amount of configurability
+   *   and flexibility, down to rules for single glyphs in fonts, but also
+   *   very slow.  Its experimental and slow nature and the original
+   *   developer losing interest meant that this option was never enabled in
+   *   default builds.
    *
    *   The corresponding interpreter version is v38.
    *
    * Value 2:
    *   The new default mode for the TrueType driver.  The Infinality code
-   *   base was stripped to the bare minimum and all configurability
-   *   removed in the name of speed and simplicity.  The configurability
-   *   was mainly aimed at legacy fonts like Arial, Times New Roman, or
-   *   Courier.  Legacy fonts are fonts that modify vertical stems to
-   *   achieve clean black-and-white bitmaps.  The new mode focuses on
-   *   applying a minimal set of rules to all fonts indiscriminately so
-   *   that modern and web fonts render well while legacy fonts render
-   *   okay.
+   *   base was stripped to the bare minimum and all configurability removed
+   *   in the name of speed and simplicity.  The configurability was mainly
+   *   aimed at legacy fonts like 'Arial', 'Times New Roman', or 'Courier'.
+   *   Legacy fonts are fonts that modify vertical stems to achieve clean
+   *   black-and-white bitmaps.  The new mode focuses on applying a minimal
+   *   set of rules to all fonts indiscriminately so that modern and web
+   *   fonts render well while legacy fonts render okay.
    *
    *   The corresponding interpreter version is v40.
    *
@@ -639,18 +647,18 @@
    *   Compile both, making both v38 and v40 available (the latter is the
    *   default).
    *
-   * By undefining these, you get rendering behavior like on Windows
-   * without ClearType, i.e., Windows XP without ClearType enabled and
-   * Win9x (interpreter version v35).  Or not, depending on how much
-   * hinting blood and testing tears the font designer put into a given
-   * font.  If you define one or both subpixel hinting options, you can
-   * switch between between v35 and the ones you define (using
-   * `FT_Property_Set').
+   * By undefining these, you get rendering behavior like on Windows without
+   * ClearType, i.e., Windows XP without ClearType enabled and Win9x
+   * (interpreter version v35).  Or not, depending on how much hinting blood
+   * and testing tears the font designer put into a given font.  If you
+   * define one or both subpixel hinting options, you can switch between
+   * between v35 and the ones you define (using `FT_Property_Set`).
    *
-   * This option requires TT_CONFIG_OPTION_BYTECODE_INTERPRETER to be
+   * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be
    * defined.
    *
-   * [1] https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
+   * [1]
+   * https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
    */
 /* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING  1         */
 
@@ -662,16 +670,16 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED to compile the
+   * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the
    * TrueType glyph loader to use Apple's definition of how to handle
    * component offsets in composite glyphs.
    *
-   * Apple and MS disagree on the default behavior of component offsets
-   * in composites.  Apple says that they should be scaled by the scaling
-   * factors in the transformation matrix (roughly, it's more complex)
-   * while MS says they should not.  OpenType defines two bits in the
-   * composite flags array which can be used to disambiguate, but old
-   * fonts will not have them.
+   * Apple and MS disagree on the default behavior of component offsets in
+   * composites.  Apple says that they should be scaled by the scaling
+   * factors in the transformation matrix (roughly, it's more complex) while
+   * MS says they should not.  OpenType defines two bits in the composite
+   * flags array which can be used to disambiguate, but old fonts will not
+   * have them.
    *
    *   https://www.microsoft.com/typography/otspec/glyf.htm
    *   https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
@@ -681,34 +689,34 @@
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_GX_VAR_SUPPORT if you want to include
-   * support for Apple's distortable font technology (fvar, gvar, cvar,
-   * and avar tables).  This has many similarities to Type 1 Multiple
-   * Masters support.
+   * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support
+   * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and
+   * 'avar' tables).  Tagged 'Font Variations', this is now part of OpenType
+   * also.  This has many similarities to Type~1 Multiple Masters support.
    */
 #define TT_CONFIG_OPTION_GX_VAR_SUPPORT
 
 
   /**************************************************************************
    *
-   * Define TT_CONFIG_OPTION_BDF if you want to include support for
-   * an embedded `BDF ' table within SFNT-based bitmap formats.
+   * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an
+   * embedded 'BDF~' table within SFNT-based bitmap formats.
    */
 #define TT_CONFIG_OPTION_BDF
 
 
   /**************************************************************************
    *
-   * Option TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES controls the maximum
+   * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum
    * number of bytecode instructions executed for a single run of the
-   * bytecode interpreter, needed to prevent infinite loops.  You don't
-   * want to change this except for very special situations (e.g., making
-   * a library fuzzer spend less time to handle broken fonts).
+   * bytecode interpreter, needed to prevent infinite loops.  You don't want
+   * to change this except for very special situations (e.g., making a
+   * library fuzzer spend less time to handle broken fonts).
    *
    * It is not expected that this value is ever modified by a configuring
-   * script; instead, it gets surrounded with #ifndef ... #endif so that
-   * the value can be set as a preprocessor option on the compiler's
-   * command line.
+   * script; instead, it gets surrounded with `#ifndef ... #endif` so that
+   * the value can be set as a preprocessor option on the compiler's command
+   * line.
    */
 #ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES
 #define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES  1000000L
@@ -726,16 +734,15 @@
 
   /**************************************************************************
    *
-   * T1_MAX_DICT_DEPTH is the maximum depth of nest dictionaries and
-   * arrays in the Type 1 stream (see t1load.c).  A minimum of 4 is
-   * required.
+   * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays
+   * in the Type~1 stream (see `t1load.c`).  A minimum of~4 is required.
    */
 #define T1_MAX_DICT_DEPTH  5
 
 
   /**************************************************************************
    *
-   * T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine
+   * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine
    * calls during glyph loading.
    */
 #define T1_MAX_SUBRS_CALLS  16
@@ -743,19 +750,20 @@
 
   /**************************************************************************
    *
-   * T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity.  A
-   * minimum of 16 is required.
+   * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity.  A
+   * minimum of~16 is required.
    *
-   * The Chinese font MingTiEG-Medium (CNS 11643 character set) needs 256.
+   * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character
+   * set) needs 256.
    */
 #define T1_MAX_CHARSTRINGS_OPERANDS  256
 
 
   /**************************************************************************
    *
-   * Define this configuration macro if you want to prevent the
-   * compilation of `t1afm', which is in charge of reading Type 1 AFM
-   * files into an existing face.  Note that if set, the T1 driver will be
+   * Define this configuration macro if you want to prevent the compilation
+   * of the 't1afm' module, which is in charge of reading Type~1 AFM files
+   * into an existing face.  Note that if set, the Type~1 driver will be
    * unable to produce kerning distances.
    */
 #undef T1_CONFIG_OPTION_NO_AFM
@@ -763,19 +771,18 @@
 
   /**************************************************************************
    *
-   * Define this configuration macro if you want to prevent the
-   * compilation of the Multiple Masters font support in the Type 1
-   * driver.
+   * Define this configuration macro if you want to prevent the compilation
+   * of the Multiple Masters font support in the Type~1 driver.
    */
 #undef T1_CONFIG_OPTION_NO_MM_SUPPORT
 
 
   /**************************************************************************
    *
-   * T1_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe Type 1
+   * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1
    * engine gets compiled into FreeType.  If defined, it is possible to
-   * switch between the two engines using the `hinting-engine' property of
-   * the type1 driver module.
+   * switch between the two engines using the `hinting-engine` property of
+   * the 'type1' driver module.
    */
 /* #define T1_CONFIG_OPTION_OLD_ENGINE */
 
@@ -791,14 +798,13 @@
 
   /**************************************************************************
    *
-   * Using CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} it is
+   * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is
    * possible to set up the default values of the four control points that
-   * define the stem darkening behaviour of the (new) CFF engine.  For
-   * more details please read the documentation of the
-   * `darkening-parameters' property (file `ftdriver.h'), which allows the
-   * control at run-time.
+   * define the stem darkening behaviour of the (new) CFF engine.  For more
+   * details please read the documentation of the `darkening-parameters`
+   * property (file `ftdriver.h`), which allows the control at run-time.
    *
-   * Do *not* undefine these macros!
+   * Do **not** undefine these macros!
    */
 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1   500
 #define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1   400
@@ -815,10 +821,10 @@
 
   /**************************************************************************
    *
-   * CFF_CONFIG_OPTION_OLD_ENGINE controls whether the pre-Adobe CFF
-   * engine gets compiled into FreeType.  If defined, it is possible to
-   * switch between the two engines using the `hinting-engine' property of
-   * the cff driver module.
+   * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine
+   * gets compiled into FreeType.  If defined, it is possible to switch
+   * between the two engines using the `hinting-engine` property of the 'cff'
+   * driver module.
    */
 /* #define CFF_CONFIG_OPTION_OLD_ENGINE */
 
@@ -834,18 +840,18 @@
 
   /**************************************************************************
    *
-   * There are many PCF fonts just called `Fixed' which look completely
-   * different, and which have nothing to do with each other.  When
-   * selecting `Fixed' in KDE or Gnome one gets results that appear rather
-   * random, the style changes often if one changes the size and one
-   * cannot select some fonts at all.  This option makes the PCF module
-   * prepend the foundry name (plus a space) to the family name.
+   * There are many PCF fonts just called 'Fixed' which look completely
+   * different, and which have nothing to do with each other.  When selecting
+   * 'Fixed' in KDE or Gnome one gets results that appear rather random, the
+   * style changes often if one changes the size and one cannot select some
+   * fonts at all.  This option makes the 'pcf' module prepend the foundry
+   * name (plus a space) to the family name.
    *
-   * We also check whether we have `wide' characters; all put together, we
-   * get family names like `Sony Fixed' or `Misc Fixed Wide'.
+   * We also check whether we have 'wide' characters; all put together, we
+   * get family names like 'Sony Fixed' or 'Misc Fixed Wide'.
    *
    * If this option is activated, it can be controlled with the
-   * `no-long-family-names' property of the pcf driver module.
+   * `no-long-family-names` property of the 'pcf' driver module.
    */
 /* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
 
@@ -861,51 +867,56 @@
 
   /**************************************************************************
    *
-   * Compile autofit module with CJK (Chinese, Japanese, Korean) script
+   * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script
    * support.
    */
 #define AF_CONFIG_OPTION_CJK
 
+
   /**************************************************************************
    *
-   * Compile autofit module with fallback Indic script support, covering
-   * some scripts that the `latin' submodule of the autofit module doesn't
+   * Compile 'autofit' module with fallback Indic script support, covering
+   * some scripts that the 'latin' submodule of the 'autofit' module doesn't
    * (yet) handle.
    */
 #define AF_CONFIG_OPTION_INDIC
 
-  /**************************************************************************
-   *
-   * Compile autofit module with warp hinting.  The idea of the warping
-   * code is to slightly scale and shift a glyph within a single dimension
-   * so that as much of its segments are aligned (more or less) on the
-   * grid.  To find out the optimal scaling and shifting value, various
-   * parameter combinations are tried and scored.
-   *
-   * This experimental option is active only if the rendering mode is
-   * FT_RENDER_MODE_LIGHT; you can switch warping on and off with the
-   * `warping' property of the auto-hinter (see file `ftdriver.h' for more
-   * information; by default it is switched off).
-   */
-#define AF_CONFIG_OPTION_USE_WARPER
 
   /**************************************************************************
    *
-   * Use TrueType-like size metrics for `light' auto-hinting.
+   * Compile 'autofit' module with warp hinting.  The idea of the warping
+   * code is to slightly scale and shift a glyph within a single dimension so
+   * that as much of its segments are aligned (more or less) on the grid.  To
+   * find out the optimal scaling and shifting value, various parameter
+   * combinations are tried and scored.
+   *
+   * You can switch warping on and off with the `warping` property of the
+   * auto-hinter (see file `ftdriver.h` for more information; by default it
+   * is switched off).
+   *
+   * This experimental option is not active if the rendering mode is
+   * `FT_RENDER_MODE_LIGHT`.
+   */
+#define AF_CONFIG_OPTION_USE_WARPER
+
+
+  /**************************************************************************
+   *
+   * Use TrueType-like size metrics for 'light' auto-hinting.
    *
    * It is strongly recommended to avoid this option, which exists only to
-   * help some legacy applications retain its appearance and behaviour
-   * with respect to auto-hinted TrueType fonts.
+   * help some legacy applications retain its appearance and behaviour with
+   * respect to auto-hinted TrueType fonts.
    *
    * The very reason this option exists at all are GNU/Linux distributions
    * like Fedora that did not un-patch the following change (which was
    * present in FreeType between versions 2.4.6 and 2.7.1, inclusive).
    *
-   * {
+   * ```
    *   2011-07-16  Steven Chu  <steven.f.chu@gmail.com>
    *
    *     [truetype] Fix metrics on size request for scalable fonts.
-   * }
+   * ```
    *
    * This problematic commit is now reverted (more or less).
    */
@@ -915,15 +926,15 @@
 
 
   /*
-   * This macro is obsolete.  Support has been removed in FreeType
-   * version 2.5.
+   * This macro is obsolete.  Support has been removed in FreeType version
+   * 2.5.
    */
 /* #define FT_CONFIG_OPTION_OLD_INTERNALS */
 
 
   /*
-   * This macro is defined if native TrueType hinting is requested by the
-   * definitions above.
+   * The next three macros are defined if native TrueType hinting is
+   * requested by the definitions above.  Don't change this.
    */
 #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
 #define  TT_USE_BYTECODE_INTERPRETER
@@ -942,7 +953,7 @@
 
   /*
    * Check CFF darkening parameters.  The checks are the same as in function
-   * `cff_property_set' in file `cffdrivr.c'.
+   * `cff_property_set` in file `cffdrivr.c`.
    */
 #if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0   || \
     CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0   || \
diff --git a/include/freetype/config/ftstdlib.h b/include/freetype/config/ftstdlib.h
index a744d0d..438b614 100644
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -5,7 +5,7 @@
  *   ANSI-specific library and header configuration file (specification
  *   only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -19,11 +19,11 @@
 
   /**************************************************************************
    *
-   * This file is used to group all #includes to the ANSI C library that
+   * This file is used to group all `#includes` to the ANSI~C library that
    * FreeType normally requires.  It also defines macros to rename the
    * standard functions within the FreeType source code.
    *
-   * Load a file which defines FTSTDLIB_H_ before this one to override it.
+   * Load a file which defines `FTSTDLIB_H_` before this one to override it.
    *
    */
 
@@ -37,21 +37,21 @@
 #define ft_ptrdiff_t  ptrdiff_t
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                          integer limits
    *
-   * UINT_MAX and ULONG_MAX are used to automatically compute the size
-   * of `int' and `long' in bytes at compile-time.  So far, this works
-   * for all platforms the library has been tested on.
+   * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of
+   * `int` and `long` in bytes at compile-time.  So far, this works for all
+   * platforms the library has been tested on.
    *
-   * Note that on the extremely rare platforms that do not provide
-   * integer types that are _exactly_ 16 and 32 bits wide (e.g. some
-   * old Crays where `int' is 36 bits), we do not make any guarantee
-   * about the correct behaviour of FT2 with all fonts.
+   * Note that on the extremely rare platforms that do not provide integer
+   * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where
+   * `int` is 36~bits), we do not make any guarantee about the correct
+   * behaviour of FreeType~2 with all fonts.
    *
-   * In these case, `ftconfig.h' will refuse to compile anyway with a
-   * message like `couldn't find 32-bit type' or something similar.
+   * In these cases, `ftconfig.h` will refuse to compile anyway with a
+   * message like 'couldn't find 32-bit type' or something similar.
    *
    */
 
@@ -68,7 +68,7 @@
 #define FT_ULONG_MAX   ULONG_MAX
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                character and string processing
    *
@@ -92,7 +92,7 @@
 #define ft_strstr   strstr
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                          file handling
    *
@@ -110,7 +110,7 @@
 #define ft_sprintf  sprintf
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                            sorting
    *
@@ -122,7 +122,7 @@
 #define ft_qsort  qsort
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                       memory allocation
    *
@@ -135,7 +135,7 @@
 #define ft_srealloc  realloc
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                         miscellaneous
    *
@@ -146,7 +146,7 @@
 #define ft_getenv  getenv
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    *                        execution control
    *
@@ -155,16 +155,16 @@
 
 #include <setjmp.h>
 
-#define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since */
-                                /*       jmp_buf is defined as a macro  */
-                                /*       on certain platforms           */
+#define ft_jmp_buf     jmp_buf  /* note: this cannot be a typedef since  */
+                                /*       `jmp_buf` is defined as a macro */
+                                /*       on certain platforms            */
 
 #define ft_longjmp     longjmp
 #define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */
 
 
-  /* the following is only used for debugging purposes, i.e., if */
-  /* FT_DEBUG_LEVEL_ERROR or FT_DEBUG_LEVEL_TRACE are defined    */
+  /* The following is only used for debugging purposes, i.e., if   */
+  /* `FT_DEBUG_LEVEL_ERROR` or `FT_DEBUG_LEVEL_TRACE` are defined. */
 
 #include <stdarg.h>
 
diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h
index 620df4c..a6bb667 100644
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -4,7 +4,7 @@
  *
  *   FreeType high-level API and common types (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,21 +51,20 @@
    *   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
+   *   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 @header_file_macros, loaded by
-   *   `ft2build.h'.  The API documentation always gives the header macro
+   *   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 @header_file_macros, loaded by
+   *   `ft2build.h`.  The API documentation always gives the header macro
    *   name needed for a particular function.
    *
    */
@@ -83,10 +82,10 @@
    *   How client applications should allocate FreeType data structures.
    *
    * @description:
-   *   FreeType assumes that structures allocated by the user and passed
-   *   as arguments are zeroed out except for the actual data.  In other
-   *   words, it is recommended to use `calloc' (or variants of it)
-   *   instead of `malloc' for allocation.
+   *   FreeType assumes that structures allocated by the user and passed as
+   *   arguments are zeroed out except for the actual data.  In other words,
+   *   it is recommended to use `calloc` (or variants of it) instead of
+   *   `malloc` for allocation.
    *
    */
 
@@ -269,10 +268,10 @@
    *   FT_Glyph_Metrics
    *
    * @description:
-   *   A structure to model the metrics of a single glyph.  The values
-   *   are expressed in 26.6 fractional pixel format; if the flag
-   *   @FT_LOAD_NO_SCALE has been used while loading the glyph, values
-   *   are expressed in font units instead.
+   *   A structure to model the metrics of a single glyph.  The values are
+   *   expressed in 26.6 fractional pixel format; if the flag
+   *   @FT_LOAD_NO_SCALE has been used while loading the glyph, values are
+   *   expressed in font units instead.
    *
    * @fields:
    *   width ::
@@ -294,25 +293,25 @@
    *     Left side bearing for vertical layout.
    *
    *   vertBearingY ::
-   *     Top side bearing for vertical layout.  Larger positive values
-   *     mean further below the vertical glyph origin.
+   *     Top side bearing for vertical layout.  Larger positive values mean
+   *     further below the vertical glyph origin.
    *
    *   vertAdvance ::
-   *     Advance height for vertical layout.  Positive values mean the
-   *     glyph has a positive advance downward.
+   *     Advance height for vertical layout.  Positive values mean the glyph
+   *     has a positive advance downward.
    *
    * @note:
    *   If not disabled with @FT_LOAD_NO_HINTING, the values represent
    *   dimensions of the hinted glyph (in case hinting is applicable).
    *
    *   Stroking a glyph with an outside border does not increase
-   *   `horiAdvance' or `vertAdvance'; you have to manually adjust these
+   *   `horiAdvance` or `vertAdvance`; you have to manually adjust these
    *   values to account for the added width and height.
    *
-   *   FreeType doesn't use the `VORG' table data for CFF fonts because
-   *   it doesn't have an interface to quickly retrieve the glyph height.
-   *   The y~coordinate of the vertical origin can be simply computed as
-   *   `vertBearingY + height' after loading a glyph.
+   *   FreeType doesn't use the 'VORG' table data for CFF fonts because it
+   *   doesn't have an interface to quickly retrieve the glyph height.  The
+   *   y~coordinate of the vertical origin can be simply computed as
+   *   `vertBearingY + height` after loading a glyph.
    */
   typedef struct  FT_Glyph_Metrics_
   {
@@ -336,42 +335,38 @@
    *   FT_Bitmap_Size
    *
    * @description:
-   *   This structure models the metrics of a bitmap strike (i.e., a set
-   *   of glyphs for a given point size and resolution) in a bitmap font.
-   *   It is used for the `available_sizes' field of @FT_Face.
+   *   This structure models the metrics of a bitmap strike (i.e., a set of
+   *   glyphs for a given point size and resolution) in a bitmap font.  It is
+   *   used for the `available_sizes` field of @FT_Face.
    *
    * @fields:
    *   height ::
-   *     The vertical distance, in pixels, between two
-   *     consecutive baselines.  It is always positive.
+   *     The vertical distance, in pixels, between two consecutive baselines.
+   *     It is always positive.
    *
    *   width ::
-   *     The average width, in pixels, of all glyphs in the
-   *     strike.
+   *     The average width, in pixels, of all glyphs in the strike.
    *
    *   size ::
-   *     The nominal size of the strike in 26.6 fractional
-   *     points.  This field is not very useful.
+   *     The nominal size of the strike in 26.6 fractional points.  This
+   *     field is not very useful.
    *
    *   x_ppem ::
-   *     The horizontal ppem (nominal width) in 26.6 fractional
-   *     pixels.
+   *     The horizontal ppem (nominal width) in 26.6 fractional pixels.
    *
    *   y_ppem ::
-   *     The vertical ppem (nominal height) in 26.6 fractional
-   *     pixels.
+   *     The vertical ppem (nominal height) in 26.6 fractional pixels.
    *
    * @note:
    *   Windows FNT:
-   *     The nominal size given in a FNT font is not reliable.  If the
-   *     driver finds it incorrect, it sets `size' to some calculated
-   *     values, and `x_ppem' and `y_ppem' to the pixel width and height
-   *     given in the font, respectively.
+   *     The nominal size given in a FNT font is not reliable.  If the driver
+   *     finds it incorrect, it sets `size` to some calculated values, and
+   *     `x_ppem` and `y_ppem` to the pixel width and height given in the
+   *     font, respectively.
    *
    *   TrueType embedded bitmaps:
-   *     `size', `width', and `height' values are not contained in the
-   *     bitmap strike itself.  They are computed from the global font
-   *     parameters.
+   *     `size`, `width`, and `height` values are not contained in the bitmap
+   *     strike itself.  They are computed from the global font parameters.
    */
   typedef struct  FT_Bitmap_Size_
   {
@@ -400,24 +395,22 @@
    *   FT_Library
    *
    * @description:
-   *   A handle to a FreeType library instance.  Each `library' is
-   *   completely independent from the others; it is the `root' of a set
-   *   of objects like fonts, faces, sizes, etc.
+   *   A handle to a FreeType library instance.  Each 'library' is completely
+   *   independent from the others; it is the 'root' of a set of objects like
+   *   fonts, faces, sizes, etc.
    *
    *   It also embeds a memory manager (see @FT_Memory), as well as a
    *   scan-line converter object (see @FT_Raster).
    *
-   *   In multi-threaded applications it is easiest to use one
-   *   `FT_Library' object per thread.  In case this is too cumbersome,
-   *   a single `FT_Library' object across threads is possible also
-   *   (since FreeType version 2.5.6), as long as a mutex lock is used
-   *   around @FT_New_Face and @FT_Done_Face.
+   *   [Since 2.5.6] In multi-threaded applications it is easiest to use one
+   *   `FT_Library` object per thread.  In case this is too cumbersome, a
+   *   single `FT_Library` object across threads is possible also, as long as
+   *   a mutex lock is used around @FT_New_Face and @FT_Done_Face.
    *
    * @note:
    *   Library objects are normally created by @FT_Init_FreeType, and
    *   destroyed with @FT_Done_FreeType.  If you need reference-counting
-   *   (cf. @FT_Reference_Library), use @FT_New_Library and
-   *   @FT_Done_Library.
+   *   (cf. @FT_Reference_Library), use @FT_New_Library and @FT_Done_Library.
    */
   typedef struct FT_LibraryRec_  *FT_Library;
 
@@ -435,9 +428,9 @@
    *   FT_Module
    *
    * @description:
-   *   A handle to a given FreeType module object.  A module can be a
-   *   font driver, a renderer, or anything else that provides services
-   *   to the former.
+   *   A handle to a given FreeType module object.  A module can be a font
+   *   driver, a renderer, or anything else that provides services to the
+   *   former.
    */
   typedef struct FT_ModuleRec_*  FT_Module;
 
@@ -448,8 +441,8 @@
    *   FT_Driver
    *
    * @description:
-   *   A handle to a given FreeType font driver object.  A font driver
-   *   is a module capable of creating faces from font files.
+   *   A handle to a given FreeType font driver object.  A font driver is a
+   *   module capable of creating faces from font files.
    */
   typedef struct FT_DriverRec_*  FT_Driver;
 
@@ -461,9 +454,8 @@
    *
    * @description:
    *   A handle to a given FreeType renderer.  A renderer is a module in
-   *   charge of converting a glyph's outline image to a bitmap.  It
-   *   supports a single glyph image format, and one or more target
-   *   surface depths.
+   *   charge of converting a glyph's outline image to a bitmap.  It supports
+   *   a single glyph image format, and one or more target surface depths.
    */
   typedef struct FT_RendererRec_*  FT_Renderer;
 
@@ -481,25 +473,24 @@
    *   FT_Face
    *
    * @description:
-   *   A handle to a typographic face object.  A face object models a
-   *   given typeface, in a given style.
+   *   A handle to a typographic face object.  A face object models a given
+   *   typeface, in a given style.
    *
    * @note:
-   *   A face object also owns a single @FT_GlyphSlot object, as well
-   *   as one or more @FT_Size objects.
+   *   A face object also owns a single @FT_GlyphSlot object, as well as one
+   *   or more @FT_Size objects.
    *
-   *   Use @FT_New_Face or @FT_Open_Face to create a new face object from
-   *   a given filepath or a custom input stream.
+   *   Use @FT_New_Face or @FT_Open_Face to create a new face object from a
+   *   given filepath or a custom input stream.
    *
    *   Use @FT_Done_Face to destroy it (along with its slot and sizes).
    *
-   *   An `FT_Face' object can only be safely used from one thread at a
-   *   time.  Similarly, creation and destruction of `FT_Face' with the
-   *   same @FT_Library object can only be done from one thread at a
-   *   time.  On the other hand, functions like @FT_Load_Glyph and its
-   *   siblings are thread-safe and do not need the lock to be held as
-   *   long as the same `FT_Face' object is not used from multiple
-   *   threads at the same time.
+   *   An `FT_Face` object can only be safely used from one thread at a time.
+   *   Similarly, creation and destruction of `FT_Face` with the same
+   *   @FT_Library object can only be done from one thread at a time.  On the
+   *   other hand, functions like @FT_Load_Glyph and its siblings are
+   *   thread-safe and do not need the lock to be held as long as the same
+   *   `FT_Face` object is not used from multiple threads at the same time.
    *
    * @also:
    *   See @FT_FaceRec for the publicly accessible fields of a given face
@@ -514,23 +505,22 @@
    *   FT_Size
    *
    * @description:
-   *   A handle to an object that models a face scaled to a given
-   *   character size.
+   *   A handle to an object that models a face scaled to a given character
+   *   size.
    *
    * @note:
-   *   An @FT_Face has one _active_ @FT_Size object that is used by
-   *   functions like @FT_Load_Glyph to determine the scaling
-   *   transformation that in turn is used to load and hint glyphs and
-   *   metrics.
+   *   An @FT_Face has one _active_ @FT_Size object that is used by functions
+   *   like @FT_Load_Glyph to determine the scaling transformation that in
+   *   turn is used to load and hint glyphs and metrics.
    *
-   *   You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes,
-   *   @FT_Request_Size or even @FT_Select_Size to change the content
-   *   (i.e., the scaling values) of the active @FT_Size.
+   *   You can use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size
+   *   or even @FT_Select_Size to change the content (i.e., the scaling
+   *   values) of the active @FT_Size.
    *
-   *   You can use @FT_New_Size to create additional size objects for a
-   *   given @FT_Face, but they won't be used by other functions until
-   *   you activate it through @FT_Activate_Size.  Only one size can be
-   *   activated at any given time per face.
+   *   You can use @FT_New_Size to create additional size objects for a given
+   *   @FT_Face, but they won't be used by other functions until you activate
+   *   it through @FT_Activate_Size.  Only one size can be activated at any
+   *   given time per face.
    *
    * @also:
    *   See @FT_SizeRec for the publicly accessible fields of a given size
@@ -545,13 +535,12 @@
    *   FT_GlyphSlot
    *
    * @description:
-   *   A handle to a given `glyph slot'.  A slot is a container that can
-   *   hold any of the glyphs contained in its parent face.
+   *   A handle to a given 'glyph slot'.  A slot is a container that can hold
+   *   any of the glyphs contained in its parent face.
    *
-   *   In other words, each time you call @FT_Load_Glyph or
-   *   @FT_Load_Char, the slot's content is erased by the new glyph data,
-   *   i.e., the glyph's metrics, its image (bitmap or outline), and
-   *   other control information.
+   *   In other words, each time you call @FT_Load_Glyph or @FT_Load_Char,
+   *   the slot's content is erased by the new glyph data, i.e., the glyph's
+   *   metrics, its image (bitmap or outline), and other control information.
    *
    * @also:
    *   See @FT_GlyphSlotRec for the publicly accessible glyph fields.
@@ -565,26 +554,26 @@
    *   FT_CharMap
    *
    * @description:
-   *   A handle to a character map (usually abbreviated to `charmap').  A
-   *   charmap is used to translate character codes in a given encoding
-   *   into glyph indexes for its parent's face.  Some font formats may
-   *   provide several charmaps per font.
+   *   A handle to a character map (usually abbreviated to 'charmap').  A
+   *   charmap is used to translate character codes in a given encoding into
+   *   glyph indexes for its parent's face.  Some font formats may provide
+   *   several charmaps per font.
    *
-   *   Each face object owns zero or more charmaps, but only one of them
-   *   can be `active', providing the data used by @FT_Get_Char_Index or
+   *   Each face object owns zero or more charmaps, but only one of them can
+   *   be 'active', providing the data used by @FT_Get_Char_Index or
    *   @FT_Load_Char.
    *
    *   The list of available charmaps in a face is available through the
-   *   `face->num_charmaps' and `face->charmaps' fields of @FT_FaceRec.
+   *   `face->num_charmaps` and `face->charmaps` fields of @FT_FaceRec.
    *
-   *   The currently active charmap is available as `face->charmap'.
-   *   You should call @FT_Set_Charmap to change it.
+   *   The currently active charmap is available as `face->charmap`.  You
+   *   should call @FT_Set_Charmap to change it.
    *
    * @note:
    *   When a new face is created (either through @FT_New_Face or
-   *   @FT_Open_Face), the library looks for a Unicode charmap within
-   *   the list and automatically activates it.  If there is no Unicode
-   *   charmap, FreeType doesn't set an `active' charmap.
+   *   @FT_Open_Face), the library looks for a Unicode charmap within the
+   *   list and automatically activates it.  If there is no Unicode charmap,
+   *   FreeType doesn't set an 'active' charmap.
    *
    * @also:
    *   See @FT_CharMapRec for the publicly accessible fields of a given
@@ -600,16 +589,15 @@
    *
    * @description:
    *   This macro converts four-letter tags into an unsigned long.  It is
-   *   used to define `encoding' identifiers (see @FT_Encoding).
+   *   used to define 'encoding' identifiers (see @FT_Encoding).
    *
    * @note:
-   *   Since many 16-bit compilers don't like 32-bit enumerations, you
-   *   should redefine this macro in case of problems to something like
-   *   this:
+   *   Since many 16-bit compilers don't like 32-bit enumerations, you should
+   *   redefine this macro in case of problems to something like this:
    *
-   *   {
+   *   ```
    *     #define FT_ENC_TAG( value, a, b, c, d )  value
-   *   }
+   *   ```
    *
    *   to get a simple enumeration without assigning special numbers.
    */
@@ -630,8 +618,8 @@
    *   FT_Encoding
    *
    * @description:
-   *   An enumeration to specify character sets supported by charmaps.
-   *   Used in the @FT_Select_Charmap API function.
+   *   An enumeration to specify character sets supported by charmaps.  Used
+   *   in the @FT_Select_Charmap API function.
    *
    * @note:
    *   Despite the name, this enumeration lists specific character
@@ -646,43 +634,42 @@
    *     and Windows FNT; see below for more information.
    *
    *   FT_ENCODING_UNICODE ::
-   *     The Unicode character set.  This value covers all versions of
-   *     the Unicode repertoire, including ASCII and Latin-1.  Most fonts
-   *     include a Unicode charmap, but not all of them.
+   *     The Unicode character set.  This value covers all versions of the
+   *     Unicode repertoire, including ASCII and Latin-1.  Most fonts include
+   *     a Unicode charmap, but not all of them.
    *
-   *     For example, if you want to access Unicode value U+1F028 (and
-   *     the font contains it), use value 0x1F028 as the input value for
+   *     For example, if you want to access Unicode value U+1F028 (and the
+   *     font contains it), use value 0x1F028 as the input value for
    *     @FT_Get_Char_Index.
    *
    *   FT_ENCODING_MS_SYMBOL ::
-   *     Microsoft Symbol encoding, used to encode mathematical symbols
-   *     and wingdings.  For more information, see
-   *     `https://www.microsoft.com/typography/otspec/recom.htm',
-   *     `http://www.kostis.net/charsets/symbol.htm', and
-   *     `http://www.kostis.net/charsets/wingding.htm'.
+   *     Microsoft Symbol encoding, used to encode mathematical symbols and
+   *     wingdings.  For more information, see
+   *     'https://www.microsoft.com/typography/otspec/recom.htm#non-standard-symbol-fonts',
+   *     'http://www.kostis.net/charsets/symbol.htm', and
+   *     'http://www.kostis.net/charsets/wingding.htm'.
    *
    *     This encoding uses character codes from the PUA (Private Unicode
    *     Area) in the range U+F020-U+F0FF.
    *
    *   FT_ENCODING_SJIS ::
    *     Shift JIS encoding for Japanese.  More info at
-   *     `https://en.wikipedia.org/wiki/Shift_JIS'.  See note on
-   *     multi-byte encodings below.
+   *     'https://en.wikipedia.org/wiki/Shift_JIS'.  See note on multi-byte
+   *     encodings below.
    *
    *   FT_ENCODING_PRC ::
    *     Corresponds to encoding systems mainly for Simplified Chinese as
-   *     used in People's Republic of China (PRC).  The encoding layout
-   *     is based on GB~2312 and its supersets GBK and GB~18030.
+   *     used in People's Republic of China (PRC).  The encoding layout is
+   *     based on GB~2312 and its supersets GBK and GB~18030.
    *
    *   FT_ENCODING_BIG5 ::
-   *     Corresponds to an encoding system for Traditional Chinese as
-   *     used in Taiwan and Hong Kong.
+   *     Corresponds to an encoding system for Traditional Chinese as used in
+   *     Taiwan and Hong Kong.
    *
    *   FT_ENCODING_WANSUNG ::
-   *     Corresponds to the Korean encoding system known as Extended
-   *     Wansung (MS Windows code page 949).
-   *     For more information see
-   *     `https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'.
+   *     Corresponds to the Korean encoding system known as Extended Wansung
+   *     (MS Windows code page 949).  For more information see
+   *     'https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'.
    *
    *   FT_ENCODING_JOHAB ::
    *     The Korean standard character set (KS~C 5601-1992), which
@@ -690,12 +677,12 @@
    *     includes all possible Hangul character combinations.
    *
    *   FT_ENCODING_ADOBE_LATIN_1 ::
-   *     Corresponds to a Latin-1 encoding as defined in a Type~1
-   *     PostScript font.  It is limited to 256 character codes.
+   *     Corresponds to a Latin-1 encoding as defined in a Type~1 PostScript
+   *     font.  It is limited to 256 character codes.
    *
    *   FT_ENCODING_ADOBE_STANDARD ::
-   *     Adobe Standard encoding, as found in Type~1, CFF, and
-   *     OpenType/CFF fonts.  It is limited to 256 character codes.
+   *     Adobe Standard encoding, as found in Type~1, CFF, and OpenType/CFF
+   *     fonts.  It is limited to 256 character codes.
    *
    *   FT_ENCODING_ADOBE_EXPERT ::
    *     Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF
@@ -706,9 +693,9 @@
    *     OpenType/CFF fonts.  It is limited to 256 character codes.
    *
    *   FT_ENCODING_APPLE_ROMAN ::
-   *     Apple roman encoding.  Many TrueType and OpenType fonts contain
-   *     a charmap for this 8-bit encoding, since older versions of Mac
-   *     OS are able to use it.
+   *     Apple roman encoding.  Many TrueType and OpenType fonts contain a
+   *     charmap for this 8-bit encoding, since older versions of Mac OS are
+   *     able to use it.
    *
    *   FT_ENCODING_OLD_LATIN_2 ::
    *     This value is deprecated and was neither used nor reported by
@@ -731,43 +718,40 @@
    *
    * @note:
    *   By default, FreeType enables a Unicode charmap and tags it with
-   *   FT_ENCODING_UNICODE when it is either provided or can be generated
-   *   from PostScript glyph name dictionaries in the font file.
-   *   All other encodings are considered legacy and tagged only if
-   *   explicitly defined in the font file.  Otherwise, FT_ENCODING_NONE
-   *   is used.
+   *   `FT_ENCODING_UNICODE` when it is either provided or can be generated
+   *   from PostScript glyph name dictionaries in the font file.  All other
+   *   encodings are considered legacy and tagged only if explicitly defined
+   *   in the font file.  Otherwise, `FT_ENCODING_NONE` is used.
    *
-   *   FT_ENCODING_NONE is set by the BDF and PCF drivers if the charmap
-   *   is neither Unicode nor ISO-8859-1 (otherwise it is set to
-   *   FT_ENCODING_UNICODE).  Use @FT_Get_BDF_Charset_ID to find out
-   *   which encoding is really present.  If, for example, the
-   *   `cs_registry' field is `KOI8' and the `cs_encoding' field is `R',
-   *   the font is encoded in KOI8-R.
+   *   `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is
+   *   neither Unicode nor ISO-8859-1 (otherwise it is set to
+   *   `FT_ENCODING_UNICODE`).  Use @FT_Get_BDF_Charset_ID to find out which
+   *   encoding is really present.  If, for example, the `cs_registry` field
+   *   is 'KOI8' and the `cs_encoding` field is 'R', the font is encoded in
+   *   KOI8-R.
    *
-   *   FT_ENCODING_NONE is always set (with a single exception) by the
-   *   winfonts driver.  Use @FT_Get_WinFNT_Header and examine the
-   *   `charset' field of the @FT_WinFNT_HeaderRec structure to find out
-   *   which encoding is really present.  For example,
-   *   @FT_WinFNT_ID_CP1251 (204) means Windows code page 1251 (for
-   *   Russian).
+   *   `FT_ENCODING_NONE` is always set (with a single exception) by the
+   *   winfonts driver.  Use @FT_Get_WinFNT_Header and examine the `charset`
+   *   field of the @FT_WinFNT_HeaderRec structure to find out which encoding
+   *   is really present.  For example, @FT_WinFNT_ID_CP1251 (204) means
+   *   Windows code page 1251 (for Russian).
    *
-   *   FT_ENCODING_NONE is set if `platform_id' is @TT_PLATFORM_MACINTOSH
-   *   and `encoding_id' is not `TT_MAC_ID_ROMAN' (otherwise it is set to
-   *   FT_ENCODING_APPLE_ROMAN).
+   *   `FT_ENCODING_NONE` is set if `platform_id` is @TT_PLATFORM_MACINTOSH
+   *   and `encoding_id` is not `TT_MAC_ID_ROMAN` (otherwise it is set to
+   *   `FT_ENCODING_APPLE_ROMAN`).
    *
-   *   If `platform_id' is @TT_PLATFORM_MACINTOSH, use the function
-   *   @FT_Get_CMap_Language_ID to query the Mac language ID that may
-   *   be needed to be able to distinguish Apple encoding variants.  See
+   *   If `platform_id` is @TT_PLATFORM_MACINTOSH, use the function
+   *   @FT_Get_CMap_Language_ID to query the Mac language ID that may be
+   *   needed to be able to distinguish Apple encoding variants.  See
    *
    *     https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
    *
-   *   to get an idea how to do that.  Basically, if the language ID
-   *   is~0, don't use it, otherwise subtract 1 from the language ID.
-   *   Then examine `encoding_id'.  If, for example, `encoding_id' is
-   *   `TT_MAC_ID_ROMAN' and the language ID (minus~1) is
-   *   `TT_MAC_LANGID_GREEK', it is the Greek encoding, not Roman.
-   *   `TT_MAC_ID_ARABIC' with `TT_MAC_LANGID_FARSI' means the Farsi
-   *   variant the Arabic encoding.
+   *   to get an idea how to do that.  Basically, if the language ID is~0,
+   *   don't use it, otherwise subtract 1 from the language ID.  Then examine
+   *   `encoding_id`.  If, for example, `encoding_id` is `TT_MAC_ID_ROMAN`
+   *   and the language ID (minus~1) is `TT_MAC_LANGID_GREEK`, it is the
+   *   Greek encoding, not Roman.  `TT_MAC_ID_ARABIC` with
+   *   `TT_MAC_LANGID_FARSI` means the Farsi variant the Arabic encoding.
    */
   typedef enum  FT_Encoding_
   {
@@ -802,7 +786,7 @@
   } FT_Encoding;
 
 
-  /* these constants are deprecated; use the corresponding `FT_Encoding' */
+  /* these constants are deprecated; use the corresponding `FT_Encoding` */
   /* values instead                                                      */
 #define ft_encoding_none            FT_ENCODING_NONE
 #define ft_encoding_unicode         FT_ENCODING_UNICODE
@@ -834,14 +818,13 @@
    *     A handle to the parent face object.
    *
    *   encoding ::
-   *     An @FT_Encoding tag identifying the charmap.  Use
-   *     this with @FT_Select_Charmap.
+   *     An @FT_Encoding tag identifying the charmap.  Use this with
+   *     @FT_Select_Charmap.
    *
    *   platform_id ::
-   *     An ID number describing the platform for the
-   *     following encoding ID.  This comes directly from
-   *     the TrueType specification and gets emulated for
-   *     other formats.
+   *     An ID number describing the platform for the following encoding ID.
+   *     This comes directly from the TrueType specification and gets
+   *     emulated for other formats.
    *
    *   encoding_id ::
    *     A platform-specific encoding number.  This also comes from the
@@ -872,11 +855,11 @@
    *   FT_Face_Internal
    *
    * @description:
-   *   An opaque handle to an `FT_Face_InternalRec' structure that models
-   *   the private data of a given @FT_Face object.
+   *   An opaque handle to an `FT_Face_InternalRec` structure that models the
+   *   private data of a given @FT_Face object.
    *
-   *   This structure might change between releases of FreeType~2 and is
-   *   not generally available to client applications.
+   *   This structure might change between releases of FreeType~2 and is not
+   *   generally available to client applications.
    */
   typedef struct FT_Face_InternalRec_*  FT_Face_Internal;
 
@@ -887,107 +870,89 @@
    *   FT_FaceRec
    *
    * @description:
-   *   FreeType root face class structure.  A face object models a
-   *   typeface in a font file.
+   *   FreeType root face class structure.  A face object models a typeface
+   *   in a font file.
    *
    * @fields:
    *   num_faces ::
-   *     The number of faces in the font file.  Some
-   *     font formats can have multiple faces in
-   *     a single font file.
+   *     The number of faces in the font file.  Some font formats can have
+   *     multiple faces in a single font file.
    *
    *   face_index ::
-   *     This field holds two different values.
-   *     Bits 0-15 are the index of the face in the
-   *     font file (starting with value~0).  They
-   *     are set to~0 if there is only one face in
-   *     the font file.
+   *     This field holds two different values.  Bits 0-15 are the index of
+   *     the face in the font file (starting with value~0).  They are set
+   *     to~0 if there is only one face in the font file.
    *
-   *     [Since 2.6.1] Bits 16-30 are relevant to GX
-   *     and OpenType variation fonts only, holding
-   *     the named instance index for the current
-   *     face index (starting with value~1; value~0
-   *     indicates font access without a named
-   *     instance).  For non-variation fonts, bits
-   *     16-30 are ignored.  If we have the third
-   *     named instance of face~4, say, `face_index'
-   *     is set to 0x00030004.
+   *     [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation
+   *     fonts only, holding the named instance index for the current face
+   *     index (starting with value~1; value~0 indicates font access without
+   *     a named instance).  For non-variation fonts, bits 16-30 are ignored.
+   *     If we have the third named instance of face~4, say, `face_index` is
+   *     set to 0x00030004.
    *
-   *     Bit 31 is always zero (this is,
-   *     `face_index' is always a positive value).
+   *     Bit 31 is always zero (this is, `face_index` is always a positive
+   *     value).
    *
-   *     [Since 2.9] Changing the design coordinates
-   *     with @FT_Set_Var_Design_Coordinates or
-   *     @FT_Set_Var_Blend_Coordinates does not
-   *     influence the named instance index value
-   *     (only @FT_Set_Named_Instance does that).
+   *     [Since 2.9] Changing the design coordinates with
+   *     @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does
+   *     not influence the named instance index value (only
+   *     @FT_Set_Named_Instance does that).
    *
    *   face_flags ::
-   *     A set of bit flags that give important
-   *     information about the face; see
-   *     @FT_FACE_FLAG_XXX for the details.
+   *     A set of bit flags that give important information about the face;
+   *     see @FT_FACE_FLAG_XXX for the details.
    *
    *   style_flags ::
-   *     The lower 16~bits contain a set of bit
-   *     flags indicating the style of the face; see
-   *     @FT_STYLE_FLAG_XXX for the details.
+   *     The lower 16~bits contain a set of bit flags indicating the style of
+   *     the face; see @FT_STYLE_FLAG_XXX for the details.
    *
-   *     [Since 2.6.1] Bits 16-30 hold the number
-   *     of named instances available for the
-   *     current face if we have a GX or OpenType
-   *     variation (sub)font.  Bit 31 is always zero
-   *     (this is, `style_flags' is always a
-   *     positive value).  Note that a variation
-   *     font has always at least one named
-   *     instance, namely the default instance.
+   *     [Since 2.6.1] Bits 16-30 hold the number of named instances
+   *     available for the current face if we have a GX or OpenType variation
+   *     (sub)font.  Bit 31 is always zero (this is, `style_flags` is always
+   *     a positive value).  Note that a variation font has always at least
+   *     one named instance, namely the default instance.
    *
    *   num_glyphs ::
-   *     The number of glyphs in the face.  If the
-   *     face is scalable and has sbits (see
-   *     `num_fixed_sizes'), it is set to the number
-   *     of outline glyphs.
+   *     The number of glyphs in the face.  If the face is scalable and has
+   *     sbits (see `num_fixed_sizes`), it is set to the number of outline
+   *     glyphs.
    *
-   *     For CID-keyed fonts (not in an SFNT
-   *     wrapper) this value gives the highest CID
-   *     used in the font.
+   *     For CID-keyed fonts (not in an SFNT wrapper) this value gives the
+   *     highest CID used in the font.
    *
    *   family_name ::
    *     The face's family name.  This is an ASCII string, usually in
-   *     English, that describes the typeface's family (like `Times New
-   *     Roman', `Bodoni', `Garamond', etc).  This is a least common
+   *     English, that describes the typeface's family (like 'Times New
+   *     Roman', 'Bodoni', 'Garamond', etc).  This is a least common
    *     denominator used to list fonts.  Some formats (TrueType & OpenType)
-   *     provide localized and Unicode versions of this string.
-   *     Applications should use the format-specific interface to access
-   *     them.  Can be NULL (e.g., in fonts embedded in a PDF file).
+   *     provide localized and Unicode versions of this string.  Applications
+   *     should use the format-specific interface to access them.  Can be
+   *     `NULL` (e.g., in fonts embedded in a PDF file).
    *
-   *     In case the font doesn't provide a specific
-   *     family name entry, FreeType tries to
-   *     synthesize one, deriving it from other name
+   *     In case the font doesn't provide a specific family name entry,
+   *     FreeType tries to synthesize one, deriving it from other name
    *     entries.
    *
    *   style_name ::
-   *     The face's style name.  This is an ASCII string, usually in
-   *     English, that describes the typeface's style (like `Italic',
-   *     `Bold', `Condensed', etc).  Not all font formats provide a style
-   *     name, so this field is optional, and can be set to NULL.  As for
-   *     `family_name', some formats provide localized and Unicode versions
+   *     The face's style name.  This is an ASCII string, usually in English,
+   *     that describes the typeface's style (like 'Italic', 'Bold',
+   *     'Condensed', etc).  Not all font formats provide a style name, so
+   *     this field is optional, and can be set to `NULL`.  As for
+   *     `family_name`, some formats provide localized and Unicode versions
    *     of this string.  Applications should use the format-specific
    *     interface to access them.
    *
    *   num_fixed_sizes ::
-   *     The number of bitmap strikes in the face.
-   *     Even if the face is scalable, there might
-   *     still be bitmap strikes, which are called
-   *     `sbits' in that case.
+   *     The number of bitmap strikes in the face.  Even if the face is
+   *     scalable, there might still be bitmap strikes, which are called
+   *     'sbits' in that case.
    *
    *   available_sizes ::
-   *     An array of @FT_Bitmap_Size for all bitmap
-   *     strikes in the face.  It is set to NULL if
-   *     there is no bitmap strike.
+   *     An array of @FT_Bitmap_Size for all bitmap strikes in the face.  It
+   *     is set to `NULL` if there is no bitmap strike.
    *
-   *     Note that FreeType tries to sanitize the
-   *     strike data since they are sometimes sloppy
-   *     or incorrect, but this can easily fail.
+   *     Note that FreeType tries to sanitize the strike data since they are
+   *     sometimes sloppy or incorrect, but this can easily fail.
    *
    *   num_charmaps ::
    *     The number of charmaps in the face.
@@ -996,80 +961,62 @@
    *     An array of the charmaps of the face.
    *
    *   generic ::
-   *     A field reserved for client uses.  See the
-   *     @FT_Generic type description.
+   *     A field reserved for client uses.  See the @FT_Generic type
+   *     description.
    *
    *   bbox ::
-   *     The font bounding box.  Coordinates are
-   *     expressed in font units (see
-   *     `units_per_EM').  The box is large enough
-   *     to contain any glyph from the font.  Thus,
-   *     `bbox.yMax' can be seen as the `maximum
-   *     ascender', and `bbox.yMin' as the `minimum
-   *     descender'.  Only relevant for scalable
-   *     formats.
+   *     The font bounding box.  Coordinates are expressed in font units (see
+   *     `units_per_EM`).  The box is large enough to contain any glyph from
+   *     the font.  Thus, `bbox.yMax` can be seen as the 'maximum ascender',
+   *     and `bbox.yMin` as the 'minimum descender'.  Only relevant for
+   *     scalable formats.
    *
-   *     Note that the bounding box might be off by
-   *     (at least) one pixel for hinted fonts.  See
-   *     @FT_Size_Metrics for further discussion.
+   *     Note that the bounding box might be off by (at least) one pixel for
+   *     hinted fonts.  See @FT_Size_Metrics for further discussion.
    *
    *   units_per_EM ::
-   *     The number of font units per EM square for
-   *     this face.  This is typically 2048 for
-   *     TrueType fonts, and 1000 for Type~1 fonts.
-   *     Only relevant for scalable formats.
+   *     The number of font units per EM square for this face.  This is
+   *     typically 2048 for TrueType fonts, and 1000 for Type~1 fonts.  Only
+   *     relevant for scalable formats.
    *
    *   ascender ::
-   *     The typographic ascender of the face,
-   *     expressed in font units.  For font formats
-   *     not having this information, it is set to
-   *     `bbox.yMax'.  Only relevant for scalable
-   *     formats.
+   *     The typographic ascender of the face, expressed in font units.  For
+   *     font formats not having this information, it is set to `bbox.yMax`.
+   *     Only relevant for scalable formats.
    *
    *   descender ::
-   *     The typographic descender of the face,
-   *     expressed in font units.  For font formats
-   *     not having this information, it is set to
-   *     `bbox.yMin'.  Note that this field is
-   *     negative for values below the baseline.
+   *     The typographic descender of the face, expressed in font units.  For
+   *     font formats not having this information, it is set to `bbox.yMin`.
+   *     Note that this field is negative for values below the baseline.
    *     Only relevant for scalable formats.
    *
    *   height ::
-   *     This value is the vertical distance
-   *     between two consecutive baselines,
-   *     expressed in font units.  It is always
-   *     positive.  Only relevant for scalable
-   *     formats.
-   *
-   *     If you want the global glyph height, use
-   *     `ascender - descender'.
-   *
-   *   max_advance_width ::
-   *     The maximum advance width, in font units,
-   *     for all glyphs in this face.  This can be
-   *     used to make word wrapping computations
-   *     faster.  Only relevant for scalable
-   *     formats.
-   *
-   *   max_advance_height ::
-   *     The maximum advance height, in font units,
-   *     for all glyphs in this face.  This is only
-   *     relevant for vertical layouts, and is set
-   *     to `height' for fonts that do not provide
-   *     vertical metrics.  Only relevant for
-   *     scalable formats.
-   *
-   *   underline_position ::
-   *     The position, in font units, of the
-   *     underline line for this face.  It is the
-   *     center of the underlining stem.  Only
+   *     This value is the vertical distance between two consecutive
+   *     baselines, expressed in font units.  It is always positive.  Only
    *     relevant for scalable formats.
    *
-   *   underline_thickness ::
-   *     The thickness, in font units, of the
-   *     underline for this face.  Only relevant for
+   *     If you want the global glyph height, use `ascender - descender`.
+   *
+   *   max_advance_width ::
+   *     The maximum advance width, in font units, for all glyphs in this
+   *     face.  This can be used to make word wrapping computations faster.
+   *     Only relevant for scalable formats.
+   *
+   *   max_advance_height ::
+   *     The maximum advance height, in font units, for all glyphs in this
+   *     face.  This is only relevant for vertical layouts, and is set to
+   *     `height` for fonts that do not provide vertical metrics.  Only
+   *     relevant for scalable formats.
+   *
+   *   underline_position ::
+   *     The position, in font units, of the underline line for this face.
+   *     It is the center of the underlining stem.  Only relevant for
    *     scalable formats.
    *
+   *   underline_thickness ::
+   *     The thickness, in font units, of the underline for this face.  Only
+   *     relevant for scalable formats.
+   *
    *   glyph ::
    *     The face's associated glyph slot(s).
    *
@@ -1083,11 +1030,10 @@
    *   Fields may be changed after a call to @FT_Attach_File or
    *   @FT_Attach_Stream.
    *
-   *   For an OpenType variation font, the values of the following fields
-   *   can change after a call to @FT_Set_Var_Design_Coordinates (and
-   *   friends) if the font contains an `MVAR' table: `ascender',
-   *   `descender', `height', `underline_position', and
-   *   `underline_thickness'.
+   *   For an OpenType variation font, the values of the following fields can
+   *   change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+   *   the font contains an 'MVAR' table: `ascender`, `descender`, `height`,
+   *   `underline_position`, and `underline_thickness`.
    *
    *   Especially for TrueType fonts see also the documentation for
    *   @FT_Size_Metrics.
@@ -1113,7 +1059,7 @@
 
     FT_Generic        generic;
 
-    /*# The following member variables (down to `underline_thickness') */
+    /*# The following member variables (down to `underline_thickness`) */
     /*# are only relevant to scalable outlines; cf. @FT_Bitmap_Size    */
     /*# for bitmap fonts.                                              */
     FT_BBox           bbox;
@@ -1157,9 +1103,9 @@
    *   FT_FACE_FLAG_XXX
    *
    * @description:
-   *   A list of bit flags used in the `face_flags' field of the
-   *   @FT_FaceRec structure.  They inform client applications of
-   *   properties of the corresponding face.
+   *   A list of bit flags used in the `face_flags` field of the @FT_FaceRec
+   *   structure.  They inform client applications of properties of the
+   *   corresponding face.
    *
    * @values:
    *   FT_FACE_FLAG_SCALABLE ::
@@ -1168,99 +1114,98 @@
    *     @FT_FACE_FLAG_FIXED_SIZES set.
    *
    *   FT_FACE_FLAG_FIXED_SIZES ::
-   *     The face contains bitmap strikes.  See also the
-   *     `num_fixed_sizes' and `available_sizes' fields of @FT_FaceRec.
+   *     The face contains bitmap strikes.  See also the `num_fixed_sizes`
+   *     and `available_sizes` fields of @FT_FaceRec.
    *
    *   FT_FACE_FLAG_FIXED_WIDTH ::
    *     The face contains fixed-width characters (like Courier, Lucida,
    *     MonoType, etc.).
    *
    *   FT_FACE_FLAG_SFNT ::
-   *     The face uses the SFNT storage scheme.  For now, this means
-   *     TrueType and OpenType.
+   *     The face uses the SFNT storage scheme.  For now, this means TrueType
+   *     and OpenType.
    *
    *   FT_FACE_FLAG_HORIZONTAL ::
-   *     The face contains horizontal glyph metrics.  This should be set
-   *     for all common formats.
+   *     The face contains horizontal glyph metrics.  This should be set for
+   *     all common formats.
    *
    *   FT_FACE_FLAG_VERTICAL ::
-   *     The face contains vertical glyph metrics.  This is only
-   *     available in some formats, not all of them.
+   *     The face contains vertical glyph metrics.  This is only available in
+   *     some formats, not all of them.
    *
    *   FT_FACE_FLAG_KERNING ::
-   *     The face contains kerning information.  If set, the kerning
-   *     distance can be retrieved using the function @FT_Get_Kerning.
-   *     Otherwise the function always return the vector (0,0).  Note
-   *     that FreeType doesn't handle kerning data from the SFNT `GPOS'
-   *     table (as present in many OpenType fonts).
+   *     The face contains kerning information.  If set, the kerning distance
+   *     can be retrieved using the function @FT_Get_Kerning.  Otherwise the
+   *     function always return the vector (0,0).  Note that FreeType doesn't
+   *     handle kerning data from the SFNT 'GPOS' table (as present in many
+   *     OpenType fonts).
    *
    *   FT_FACE_FLAG_FAST_GLYPHS ::
    *     THIS FLAG IS DEPRECATED.  DO NOT USE OR TEST IT.
    *
    *   FT_FACE_FLAG_MULTIPLE_MASTERS ::
-   *     The face contains multiple masters and is capable of
-   *     interpolating between them.  Supported formats are Adobe MM,
-   *     TrueType GX, and OpenType variation fonts.
+   *     The face contains multiple masters and is capable of interpolating
+   *     between them.  Supported formats are Adobe MM, TrueType GX, and
+   *     OpenType variation fonts.
    *
    *     See section @multiple_masters for API details.
    *
    *   FT_FACE_FLAG_GLYPH_NAMES ::
    *     The face contains glyph names, which can be retrieved using
-   *     @FT_Get_Glyph_Name.  Note that some TrueType fonts contain
-   *     broken glyph name tables.  Use the function
-   *     @FT_Has_PS_Glyph_Names when needed.
+   *     @FT_Get_Glyph_Name.  Note that some TrueType fonts contain broken
+   *     glyph name tables.  Use the function @FT_Has_PS_Glyph_Names when
+   *     needed.
    *
    *   FT_FACE_FLAG_EXTERNAL_STREAM ::
    *     Used internally by FreeType to indicate that a face's stream was
-   *     provided by the client application and should not be destroyed
-   *     when @FT_Done_Face is called.  Don't read or test this flag.
+   *     provided by the client application and should not be destroyed when
+   *     @FT_Done_Face is called.  Don't read or test this flag.
    *
    *   FT_FACE_FLAG_HINTER ::
-   *     The font driver has a hinting machine of its own.  For example,
-   *     with TrueType fonts, it makes sense to use data from the SFNT
-   *     `gasp' table only if the native TrueType hinting engine (with
-   *     the bytecode interpreter) is available and active.
+   *     The font driver has a hinting machine of its own.  For example, with
+   *     TrueType fonts, it makes sense to use data from the SFNT 'gasp'
+   *     table only if the native TrueType hinting engine (with the bytecode
+   *     interpreter) is available and active.
    *
    *   FT_FACE_FLAG_CID_KEYED ::
-   *     The face is CID-keyed.  In that case, the face is not accessed
-   *     by glyph indices but by CID values.  For subsetted CID-keyed
-   *     fonts this has the consequence that not all index values are a
-   *     valid argument to @FT_Load_Glyph.  Only the CID values for which
-   *     corresponding glyphs in the subsetted font exist make
-   *     `FT_Load_Glyph' return successfully; in all other cases you get
-   *     an `FT_Err_Invalid_Argument' error.
+   *     The face is CID-keyed.  In that case, the face is not accessed by
+   *     glyph indices but by CID values.  For subsetted CID-keyed fonts this
+   *     has the consequence that not all index values are a valid argument
+   *     to @FT_Load_Glyph.  Only the CID values for which corresponding
+   *     glyphs in the subsetted font exist make `FT_Load_Glyph` return
+   *     successfully; in all other cases you get an
+   *     `FT_Err_Invalid_Argument` error.
    *
-   *     Note that CID-keyed fonts that are in an SFNT wrapper (this is,
-   *     all OpenType/CFF fonts) don't have this flag set since the
-   *     glyphs are accessed in the normal way (using contiguous
-   *     indices); the `CID-ness' isn't visible to the application.
+   *     Note that CID-keyed fonts that are in an SFNT wrapper (this is, all
+   *     OpenType/CFF fonts) don't have this flag set since the glyphs are
+   *     accessed in the normal way (using contiguous indices); the
+   *     'CID-ness' isn't visible to the application.
    *
    *   FT_FACE_FLAG_TRICKY ::
-   *     The face is `tricky', this is, it always needs the font format's
-   *     native hinting engine to get a reasonable result.  A typical
-   *     example is the old Chinese font `mingli.ttf' (but not
-   *     `mingliu.ttc') that uses TrueType bytecode instructions to move
-   *     and scale all of its subglyphs.
+   *     The face is 'tricky', this is, it always needs the font format's
+   *     native hinting engine to get a reasonable result.  A typical example
+   *     is the old Chinese font `mingli.ttf` (but not `mingliu.ttc`) that
+   *     uses TrueType bytecode instructions to move and scale all of its
+   *     subglyphs.
    *
    *     It is not possible to auto-hint such fonts using
-   *     @FT_LOAD_FORCE_AUTOHINT; it will also ignore
-   *     @FT_LOAD_NO_HINTING.  You have to set both @FT_LOAD_NO_HINTING
-   *     and @FT_LOAD_NO_AUTOHINT to really disable hinting; however, you
-   *     probably never want this except for demonstration purposes.
+   *     @FT_LOAD_FORCE_AUTOHINT; it will also ignore @FT_LOAD_NO_HINTING.
+   *     You have to set both @FT_LOAD_NO_HINTING and @FT_LOAD_NO_AUTOHINT to
+   *     really disable hinting; however, you probably never want this except
+   *     for demonstration purposes.
    *
    *     Currently, there are about a dozen TrueType fonts in the list of
-   *     tricky fonts; they are hard-coded in file `ttobjs.c'.
+   *     tricky fonts; they are hard-coded in file `ttobjs.c`.
    *
    *   FT_FACE_FLAG_COLOR ::
-   *     [Since 2.5.1] The face has color glyph tables.  See
-   *     @FT_LOAD_COLOR for more information.
+   *     [Since 2.5.1] The face has color glyph tables.  See @FT_LOAD_COLOR
+   *     for more information.
    *
    *   FT_FACE_FLAG_VARIATION ::
    *     [Since 2.9] Set if the current face (or named instance) has been
    *     altered with @FT_Set_MM_Design_Coordinates,
-   *     @FT_Set_Var_Design_Coordinates, or
-   *     @FT_Set_Var_Blend_Coordinates.  This flag is unset by a call to
-   *     @FT_Set_Named_Instance.
+   *     @FT_Set_Var_Design_Coordinates, or @FT_Set_Var_Blend_Coordinates.
+   *     This flag is unset by a call to @FT_Set_Named_Instance.
    */
 #define FT_FACE_FLAG_SCALABLE          ( 1L <<  0 )
 #define FT_FACE_FLAG_FIXED_SIZES       ( 1L <<  1 )
@@ -1280,14 +1225,14 @@
 #define FT_FACE_FLAG_VARIATION         ( 1L << 15 )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_HORIZONTAL
    *
    * @description:
-   *   A macro that returns true whenever a face object contains
-   *   horizontal metrics (this is true for all font formats though).
+   *   A macro that returns true whenever a face object contains horizontal
+   *   metrics (this is true for all font formats though).
    *
    * @also:
    *   @FT_HAS_VERTICAL can be used to check for vertical metrics.
@@ -1297,7 +1242,7 @@
           ( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_VERTICAL
@@ -1311,45 +1256,45 @@
           ( (face)->face_flags & FT_FACE_FLAG_VERTICAL )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_KERNING
    *
    * @description:
-   *   A macro that returns true whenever a face object contains kerning
-   *   data that can be accessed with @FT_Get_Kerning.
+   *   A macro that returns true whenever a face object contains kerning data
+   *   that can be accessed with @FT_Get_Kerning.
    *
    */
 #define FT_HAS_KERNING( face ) \
           ( (face)->face_flags & FT_FACE_FLAG_KERNING )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_SCALABLE
    *
    * @description:
    *   A macro that returns true whenever a face object contains a scalable
-   *   font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF,
-   *   and PFR font formats).
+   *   font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, and
+   *   PFR font formats).
    *
    */
 #define FT_IS_SCALABLE( face ) \
           ( (face)->face_flags & FT_FACE_FLAG_SCALABLE )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_SFNT
    *
    * @description:
-   *   A macro that returns true whenever a face object contains a font
-   *   whose format is based on the SFNT storage scheme.  This usually
-   *   means: TrueType fonts, OpenType fonts, as well as SFNT-based embedded
-   *   bitmap fonts.
+   *   A macro that returns true whenever a face object contains a font whose
+   *   format is based on the SFNT storage scheme.  This usually means:
+   *   TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap
+   *   fonts.
    *
    *   If this macro is true, all functions defined in @FT_SFNT_NAMES_H and
    *   @FT_TRUETYPE_TABLES_H are available.
@@ -1359,14 +1304,14 @@
           ( (face)->face_flags & FT_FACE_FLAG_SFNT )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_FIXED_WIDTH
    *
    * @description:
    *   A macro that returns true whenever a face object contains a font face
-   *   that contains fixed-width (or `monospace', `fixed-pitch', etc.)
+   *   that contains fixed-width (or 'monospace', 'fixed-pitch', etc.)
    *   glyphs.
    *
    */
@@ -1374,22 +1319,22 @@
           ( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_FIXED_SIZES
    *
    * @description:
    *   A macro that returns true whenever a face object contains some
-   *   embedded bitmaps.  See the `available_sizes' field of the
-   *   @FT_FaceRec structure.
+   *   embedded bitmaps.  See the `available_sizes` field of the @FT_FaceRec
+   *   structure.
    *
    */
 #define FT_HAS_FIXED_SIZES( face ) \
           ( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_FAST_GLYPHS
@@ -1401,7 +1346,7 @@
 #define FT_HAS_FAST_GLYPHS( face )  0
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_GLYPH_NAMES
@@ -1415,7 +1360,7 @@
           ( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_MULTIPLE_MASTERS
@@ -1430,7 +1375,7 @@
           ( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_NAMED_INSTANCE
@@ -1452,14 +1397,14 @@
           ( (face)->face_index & 0x7FFF0000L )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_VARIATION
    *
    * @description:
-   *   A macro that returns true whenever a face object has been altered
-   *   by @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
+   *   A macro that returns true whenever a face object has been altered by
+   *   @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, or
    *   @FT_Set_Var_Blend_Coordinates.
    *
    * @since:
@@ -1470,15 +1415,14 @@
           ( (face)->face_flags & FT_FACE_FLAG_VARIATION )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_CID_KEYED
    *
    * @description:
    *   A macro that returns true whenever a face object contains a CID-keyed
-   *   font.  See the discussion of @FT_FACE_FLAG_CID_KEYED for more
-   *   details.
+   *   font.  See the discussion of @FT_FACE_FLAG_CID_KEYED for more details.
    *
    *   If this macro is true, all functions defined in @FT_CID_H are
    *   available.
@@ -1488,13 +1432,13 @@
           ( (face)->face_flags & FT_FACE_FLAG_CID_KEYED )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_IS_TRICKY
    *
    * @description:
-   *   A macro that returns true whenever a face represents a `tricky' font.
+   *   A macro that returns true whenever a face represents a 'tricky' font.
    *   See the discussion of @FT_FACE_FLAG_TRICKY for more details.
    *
    */
@@ -1502,14 +1446,14 @@
           ( (face)->face_flags & FT_FACE_FLAG_TRICKY )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_HAS_COLOR
    *
    * @description:
-   *   A macro that returns true whenever a face object contains
-   *   tables for color glyphs.
+   *   A macro that returns true whenever a face object contains tables for
+   *   color glyphs.
    *
    * @since:
    *   2.5.1
@@ -1525,8 +1469,8 @@
    *   FT_STYLE_FLAG_XXX
    *
    * @description:
-   *   A list of bit flags to indicate the style of a given face.  These
-   *   are used in the `style_flags' field of @FT_FaceRec.
+   *   A list of bit flags to indicate the style of a given face.  These are
+   *   used in the `style_flags` field of @FT_FaceRec.
    *
    * @values:
    *   FT_STYLE_FLAG_ITALIC ::
@@ -1537,9 +1481,9 @@
    *
    * @note:
    *   The style information as provided by FreeType is very basic.  More
-   *   details are beyond the scope and should be done on a higher level
-   *   (for example, by analyzing various fields of the `OS/2' table in
-   *   SFNT based fonts).
+   *   details are beyond the scope and should be done on a higher level (for
+   *   example, by analyzing various fields of the 'OS/2' table in SFNT based
+   *   fonts).
    */
 #define FT_STYLE_FLAG_ITALIC  ( 1 << 0 )
 #define FT_STYLE_FLAG_BOLD    ( 1 << 1 )
@@ -1551,8 +1495,8 @@
    *   FT_Size_Internal
    *
    * @description:
-   *   An opaque handle to an `FT_Size_InternalRec' structure, used to
-   *   model private data of a given @FT_Size object.
+   *   An opaque handle to an `FT_Size_InternalRec` structure, used to model
+   *   private data of a given @FT_Size object.
    */
   typedef struct FT_Size_InternalRec_*  FT_Size_Internal;
 
@@ -1567,89 +1511,80 @@
    *
    * @fields:
    *   x_ppem ::
-   *     The width of the scaled EM square in pixels, hence
-   *     the term `ppem' (pixels per EM).  It is also
-   *     referred to as `nominal width'.
+   *     The width of the scaled EM square in pixels, hence the term 'ppem'
+   *     (pixels per EM).  It is also referred to as 'nominal width'.
    *
    *   y_ppem ::
-   *     The height of the scaled EM square in pixels,
-   *     hence the term `ppem' (pixels per EM).  It is also
-   *     referred to as `nominal height'.
+   *     The height of the scaled EM square in pixels, hence the term 'ppem'
+   *     (pixels per EM).  It is also referred to as 'nominal height'.
    *
    *   x_scale ::
-   *     A 16.16 fractional scaling value to convert
-   *     horizontal metrics from font units to 26.6
-   *     fractional pixels.  Only relevant for scalable
+   *     A 16.16 fractional scaling value to convert horizontal metrics from
+   *     font units to 26.6 fractional pixels.  Only relevant for scalable
    *     font formats.
    *
    *   y_scale ::
-   *     A 16.16 fractional scaling value to convert
-   *     vertical metrics from font units to 26.6
-   *     fractional pixels.  Only relevant for scalable
+   *     A 16.16 fractional scaling value to convert vertical metrics from
+   *     font units to 26.6 fractional pixels.  Only relevant for scalable
    *     font formats.
    *
    *   ascender ::
-   *     The ascender in 26.6 fractional pixels, rounded up
-   *     to an integer value.  See @FT_FaceRec for the
-   *     details.
+   *     The ascender in 26.6 fractional pixels, rounded up to an integer
+   *     value.  See @FT_FaceRec for the details.
    *
    *   descender ::
-   *     The descender in 26.6 fractional pixels, rounded
-   *     down to an integer value.  See @FT_FaceRec for the
-   *     details.
+   *     The descender in 26.6 fractional pixels, rounded down to an integer
+   *     value.  See @FT_FaceRec for the details.
    *
    *   height ::
-   *     The height in 26.6 fractional pixels, rounded to
-   *     an integer value.  See @FT_FaceRec for the
-   *     details.
+   *     The height in 26.6 fractional pixels, rounded to an integer value.
+   *     See @FT_FaceRec for the details.
    *
    *   max_advance ::
-   *     The maximum advance width in 26.6 fractional
-   *     pixels, rounded to an integer value.  See
-   *     @FT_FaceRec for the details.
+   *     The maximum advance width in 26.6 fractional pixels, rounded to an
+   *     integer value.  See @FT_FaceRec for the details.
    *
    * @note:
-   *   The scaling values, if relevant, are determined first during a
-   *   size changing operation.  The remaining fields are then set by the
-   *   driver.  For scalable formats, they are usually set to scaled
-   *   values of the corresponding fields in @FT_FaceRec.  Some values
-   *   like ascender or descender are rounded for historical reasons;
-   *   more precise values (for outline fonts) can be derived by scaling
-   *   the corresponding @FT_FaceRec values manually, with code similar
-   *   to the following.
+   *   The scaling values, if relevant, are determined first during a size
+   *   changing operation.  The remaining fields are then set by the driver.
+   *   For scalable formats, they are usually set to scaled values of the
+   *   corresponding fields in @FT_FaceRec.  Some values like ascender or
+   *   descender are rounded for historical reasons; more precise values (for
+   *   outline fonts) can be derived by scaling the corresponding @FT_FaceRec
+   *   values manually, with code similar to the following.
    *
-   *   {
+   *   ```
    *     scaled_ascender = FT_MulFix( face->ascender,
    *                                  size_metrics->y_scale );
-   *   }
+   *   ```
    *
-   *   Note that due to glyph hinting and the selected rendering mode
-   *   these values are usually not exact; consequently, they must be
-   *   treated as unreliable with an error margin of at least one pixel!
+   *   Note that due to glyph hinting and the selected rendering mode these
+   *   values are usually not exact; consequently, they must be treated as
+   *   unreliable with an error margin of at least one pixel!
    *
    *   Indeed, the only way to get the exact metrics is to render _all_
    *   glyphs.  As this would be a definite performance hit, it is up to
    *   client applications to perform such computations.
    *
-   *   The `FT_Size_Metrics' structure is valid for bitmap fonts also.
+   *   The `FT_Size_Metrics` structure is valid for bitmap fonts also.
    *
    *
-   *   *TrueType* *fonts* *with* *native* *bytecode* *hinting*
+   *   **TrueType fonts with native bytecode hinting**
    *
-   *   All applications that handle TrueType fonts with native hinting
-   *   must be aware that TTFs expect different rounding of vertical font
-   *   dimensions.  The application has to cater for this, especially if
-   *   it wants to rely on a TTF's vertical data (for example, to
-   *   properly align box characters vertically).
+   *   All applications that handle TrueType fonts with native hinting must
+   *   be aware that TTFs expect different rounding of vertical font
+   *   dimensions.  The application has to cater for this, especially if it
+   *   wants to rely on a TTF's vertical data (for example, to properly align
+   *   box characters vertically).
    *
-   *   Only the application knows _in_ _advance_ that it is going to use
-   *   native hinting for TTFs!  FreeType, on the other hand, selects the
-   *   hinting mode not at the time of creating an @FT_Size object but
-   *   much later, namely while calling @FT_Load_Glyph.
+   *   Only the application knows _in advance_ that it is going to use native
+   *   hinting for TTFs!  FreeType, on the other hand, selects the hinting
+   *   mode not at the time of creating an @FT_Size object but much later,
+   *   namely while calling @FT_Load_Glyph.
    *
    *   Here is some pseudo code that illustrates a possible solution.
    *
-   *   {
+   *   ```
    *     font_format = FT_Get_Font_Format( face );
    *
    *     if ( !strcmp( font_format, "TrueType" ) &&
@@ -1668,7 +1603,7 @@
    *
    *     height      = size_metrics->height;
    *     max_advance = size_metrics->max_advance;
-   *   }
+   *   ```
    */
   typedef struct  FT_Size_Metrics_
   {
@@ -1700,10 +1635,9 @@
    *     Handle to the parent face object.
    *
    *   generic ::
-   *     A typeless pointer, unused by the FreeType library or
-   *     any of its drivers.  It can be used by client
-   *     applications to link their own data to each size
-   *     object.
+   *     A typeless pointer, unused by the FreeType library or any of its
+   *     drivers.  It can be used by client applications to link their own
+   *     data to each size object.
    *
    *   metrics ::
    *     Metrics for this size object.  This field is read-only.
@@ -1728,8 +1662,8 @@
    *   subglyphs (for example, in the case of composites).
    *
    * @note:
-   *   The subglyph implementation is not part of the high-level API,
-   *   hence the forward structure declaration.
+   *   The subglyph implementation is not part of the high-level API, hence
+   *   the forward structure declaration.
    *
    *   You can however retrieve subglyph information with
    *   @FT_Get_SubGlyph_Info.
@@ -1743,8 +1677,8 @@
    *   FT_Slot_Internal
    *
    * @description:
-   *   An opaque handle to an `FT_Slot_InternalRec' structure, used to
-   *   model private data of a given @FT_GlyphSlot object.
+   *   An opaque handle to an `FT_Slot_InternalRec` structure, used to model
+   *   private data of a given @FT_GlyphSlot object.
    */
   typedef struct FT_Slot_InternalRec_*  FT_Slot_Internal;
 
@@ -1755,164 +1689,145 @@
    *   FT_GlyphSlotRec
    *
    * @description:
-   *   FreeType root glyph slot class structure.  A glyph slot is a
-   *   container where individual glyphs can be loaded, be they in
-   *   outline or bitmap format.
+   *   FreeType root glyph slot class structure.  A glyph slot is a container
+   *   where individual glyphs can be loaded, be they in outline or bitmap
+   *   format.
    *
    * @fields:
    *   library ::
-   *     A handle to the FreeType library instance
-   *     this slot belongs to.
+   *     A handle to the FreeType library instance this slot belongs to.
    *
    *   face ::
    *     A handle to the parent face object.
    *
    *   next ::
-   *     In some cases (like some font tools), several
-   *     glyph slots per face object can be a good
-   *     thing.  As this is rare, the glyph slots are
-   *     listed through a direct, single-linked list
-   *     using its `next' field.
+   *     In some cases (like some font tools), several glyph slots per face
+   *     object can be a good thing.  As this is rare, the glyph slots are
+   *     listed through a direct, single-linked list using its `next` field.
    *
    *   glyph_index ::
-   *     The glyph index passed as an argument to @FT_Load_Glyph while
-   *     initializeing the glyph slot (since FreeType version 2.10).
+   *     [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph
+   *     while initializing the glyph slot.
    *
    *   generic ::
-   *     A typeless pointer unused by the FreeType
-   *     library or any of its drivers.  It can be
-   *     used by client applications to link their own
+   *     A typeless pointer unused by the FreeType library or any of its
+   *     drivers.  It can be used by client applications to link their own
    *     data to each glyph slot object.
    *
    *   metrics ::
-   *     The metrics of the last loaded glyph in the
-   *     slot.  The returned values depend on the last
-   *     load flags (see the @FT_Load_Glyph API
-   *     function) and can be expressed either in 26.6
-   *     fractional pixels or font units.
+   *     The metrics of the last loaded glyph in the slot.  The returned
+   *     values depend on the last load flags (see the @FT_Load_Glyph API
+   *     function) and can be expressed either in 26.6 fractional pixels or
+   *     font units.
    *
-   *     Note that even when the glyph image is
-   *     transformed, the metrics are not.
+   *     Note that even when the glyph image is transformed, the metrics are
+   *     not.
    *
    *   linearHoriAdvance ::
-   *     The advance width of the unhinted glyph.
-   *     Its value is expressed in 16.16 fractional
-   *     pixels, unless @FT_LOAD_LINEAR_DESIGN is set
-   *     when loading the glyph.  This field can be
-   *     important to perform correct WYSIWYG layout.
-   *     Only relevant for outline glyphs.
+   *     The advance width of the unhinted glyph.  Its value is expressed in
+   *     16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
+   *     loading the glyph.  This field can be important to perform correct
+   *     WYSIWYG layout.  Only relevant for outline glyphs.
    *
    *   linearVertAdvance ::
-   *     The advance height of the unhinted glyph.
-   *     Its value is expressed in 16.16 fractional
-   *     pixels, unless @FT_LOAD_LINEAR_DESIGN is set
-   *     when loading the glyph.  This field can be
-   *     important to perform correct WYSIWYG layout.
-   *     Only relevant for outline glyphs.
+   *     The advance height of the unhinted glyph.  Its value is expressed in
+   *     16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when
+   *     loading the glyph.  This field can be important to perform correct
+   *     WYSIWYG layout.  Only relevant for outline glyphs.
    *
    *   advance ::
-   *     This shorthand is, depending on
-   *     @FT_LOAD_IGNORE_TRANSFORM, the transformed
-   *     (hinted) advance width for the glyph, in 26.6
-   *     fractional pixel format.  As specified with
-   *     @FT_LOAD_VERTICAL_LAYOUT, it uses either the
-   *     `horiAdvance' or the `vertAdvance' value of
-   *     `metrics' field.
+   *     This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the
+   *     transformed (hinted) advance width for the glyph, in 26.6 fractional
+   *     pixel format.  As specified with @FT_LOAD_VERTICAL_LAYOUT, it uses
+   *     either the `horiAdvance` or the `vertAdvance` value of `metrics`
+   *     field.
    *
    *   format ::
-   *     This field indicates the format of the image
-   *     contained in the glyph slot.  Typically
-   *     @FT_GLYPH_FORMAT_BITMAP,
-   *     @FT_GLYPH_FORMAT_OUTLINE, or
-   *     @FT_GLYPH_FORMAT_COMPOSITE, but other values
-   *     are possible.
+   *     This field indicates the format of the image contained in the glyph
+   *     slot.  Typically @FT_GLYPH_FORMAT_BITMAP, @FT_GLYPH_FORMAT_OUTLINE,
+   *     or @FT_GLYPH_FORMAT_COMPOSITE, but other values are possible.
    *
    *   bitmap ::
-   *     This field is used as a bitmap descriptor.
-   *     Note that the address and content of the
-   *     bitmap buffer can change between calls of
+   *     This field is used as a bitmap descriptor.  Note that the address
+   *     and content of the bitmap buffer can change between calls of
    *     @FT_Load_Glyph and a few other functions.
    *
    *   bitmap_left ::
-   *     The bitmap's left bearing expressed in
-   *     integer pixels.
+   *     The bitmap's left bearing expressed in integer pixels.
    *
    *   bitmap_top ::
-   *     The bitmap's top bearing expressed in integer
-   *     pixels.  This is the distance from the
-   *     baseline to the top-most glyph scanline,
-   *     upwards y~coordinates being *positive*.
+   *     The bitmap's top bearing expressed in integer pixels.  This is the
+   *     distance from the baseline to the top-most glyph scanline, upwards
+   *     y~coordinates being **positive**.
    *
    *   outline ::
-   *     The outline descriptor for the current glyph
-   *     image if its format is
-   *     @FT_GLYPH_FORMAT_OUTLINE.  Once a glyph is
-   *     loaded, `outline' can be transformed,
-   *     distorted, emboldened, etc.  However, it must
-   *     not be freed.
+   *     The outline descriptor for the current glyph image if its format is
+   *     @FT_GLYPH_FORMAT_OUTLINE.  Once a glyph is loaded, `outline` can be
+   *     transformed, distorted, emboldened, etc.  However, it must not be
+   *     freed.
+   *
+   *     [Since 2.10.1] If @FT_LOAD_NO_SCALE is set, outline coordinates of
+   *     OpenType variation fonts for a selected instance are internally
+   *     handled as 26.6 fractional font units but returned as (rounded)
+   *     integers, as expected.  To get unrounded font units, don't use
+   *     @FT_LOAD_NO_SCALE but load the glyph with @FT_LOAD_NO_HINTING and
+   *     scale it, using the font's `units_per_EM` value as the ppem.
    *
    *   num_subglyphs ::
-   *     The number of subglyphs in a composite glyph.
-   *     This field is only valid for the composite
-   *     glyph format that should normally only be
+   *     The number of subglyphs in a composite glyph.  This field is only
+   *     valid for the composite glyph format that should normally only be
    *     loaded with the @FT_LOAD_NO_RECURSE flag.
    *
    *   subglyphs ::
-   *     An array of subglyph descriptors for
-   *     composite glyphs.  There are `num_subglyphs'
-   *     elements in there.  Currently internal to
-   *     FreeType.
+   *     An array of subglyph descriptors for composite glyphs.  There are
+   *     `num_subglyphs` elements in there.  Currently internal to FreeType.
    *
    *   control_data ::
-   *     Certain font drivers can also return the
-   *     control data for a given glyph image (e.g.
-   *     TrueType bytecode, Type~1 charstrings, etc.).
-   *     This field is a pointer to such data; it is
-   *     currently internal to FreeType.
+   *     Certain font drivers can also return the control data for a given
+   *     glyph image (e.g.  TrueType bytecode, Type~1 charstrings, etc.).
+   *     This field is a pointer to such data; it is currently internal to
+   *     FreeType.
    *
    *   control_len ::
-   *     This is the length in bytes of the control
-   *     data.  Currently internal to FreeType.
+   *     This is the length in bytes of the control data.  Currently internal
+   *     to FreeType.
    *
    *   other ::
    *     Reserved.
    *
    *   lsb_delta ::
-   *     The difference between hinted and unhinted
-   *     left side bearing while auto-hinting is
-   *     active.  Zero otherwise.
+   *     The difference between hinted and unhinted left side bearing while
+   *     auto-hinting is active.  Zero otherwise.
    *
    *   rsb_delta ::
-   *     The difference between hinted and unhinted
-   *     right side bearing while auto-hinting is
-   *     active.  Zero otherwise.
+   *     The difference between hinted and unhinted right side bearing while
+   *     auto-hinting is active.  Zero otherwise.
    *
    * @note:
-   *   If @FT_Load_Glyph is called with default flags (see
-   *   @FT_LOAD_DEFAULT) the glyph image is loaded in the glyph slot in
-   *   its native format (e.g., an outline glyph for TrueType and Type~1
-   *   formats).  [Since 2.9] The prospective bitmap metrics are
-   *   calculated according to @FT_LOAD_TARGET_XXX and other flags even
-   *   for the outline glyph, even if @FT_LOAD_RENDER is not set.
+   *   If @FT_Load_Glyph is called with default flags (see @FT_LOAD_DEFAULT)
+   *   the glyph image is loaded in the glyph slot in its native format
+   *   (e.g., an outline glyph for TrueType and Type~1 formats).  [Since 2.9]
+   *   The prospective bitmap metrics are calculated according to
+   *   @FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even
+   *   if @FT_LOAD_RENDER is not set.
    *
    *   This image can later be converted into a bitmap by calling
-   *   @FT_Render_Glyph.  This function searches the current renderer for
-   *   the native image's format, then invokes it.
+   *   @FT_Render_Glyph.  This function searches the current renderer for the
+   *   native image's format, then invokes it.
    *
-   *   The renderer is in charge of transforming the native image through
-   *   the slot's face transformation fields, then converting it into a
-   *   bitmap that is returned in `slot->bitmap'.
+   *   The renderer is in charge of transforming the native image through the
+   *   slot's face transformation fields, then converting it into a bitmap
+   *   that is returned in `slot->bitmap`.
    *
-   *   Note that `slot->bitmap_left' and `slot->bitmap_top' are also used
-   *   to specify the position of the bitmap relative to the current pen
+   *   Note that `slot->bitmap_left` and `slot->bitmap_top` are also used to
+   *   specify the position of the bitmap relative to the current pen
    *   position (e.g., coordinates (0,0) on the baseline).  Of course,
-   *   `slot->format' is also changed to @FT_GLYPH_FORMAT_BITMAP.
+   *   `slot->format` is also changed to @FT_GLYPH_FORMAT_BITMAP.
    *
-   *   Here is a small pseudo code fragment that shows how to use
-   *   `lsb_delta' and `rsb_delta' to do fractional positioning of
-   *   glyphs:
+   *   Here is a small pseudo code fragment that shows how to use `lsb_delta`
+   *   and `rsb_delta` to do fractional positioning of glyphs:
    *
-   *   {
+   *   ```
    *     FT_GlyphSlot  slot     = face->glyph;
    *     FT_Pos        origin_x = 0;
    *
@@ -1928,15 +1843,14 @@
    *        and add it to `origin_x'>
    *
    *       origin_x += slot->advance.x;
-   *       origin_x += slot->rsb_delta - slot->lsb_delta;
+   *       origin_x += slot->lsb_delta - slot->rsb_delta;
    *     endfor
-   *   }
+   *   ```
    *
    *   Here is another small pseudo code fragment that shows how to use
-   *   `lsb_delta' and `rsb_delta' to improve integer positioning of
-   *   glyphs:
+   *   `lsb_delta` and `rsb_delta` to improve integer positioning of glyphs:
    *
-   *   {
+   *   ```
    *     FT_GlyphSlot  slot           = face->glyph;
    *     FT_Pos        origin_x       = 0;
    *     FT_Pos        prev_rsb_delta = 0;
@@ -1959,13 +1873,13 @@
    *
    *       origin_x += slot->advance.x;
    *     endfor
-   *   }
+   *   ```
    *
-   *   If you use strong auto-hinting, you *must* apply these delta
-   *   values!  Otherwise you will experience far too large inter-glyph
-   *   spacing at small rendering sizes in most cases.  Note that it
-   *   doesn't harm to use the above code for other hinting modes also,
-   *   since the delta values are zero then.
+   *   If you use strong auto-hinting, you **must** apply these delta values!
+   *   Otherwise you will experience far too large inter-glyph spacing at
+   *   small rendering sizes in most cases.  Note that it doesn't harm to use
+   *   the above code for other hinting modes also, since the delta values
+   *   are zero then.
    */
   typedef struct  FT_GlyphSlotRec_
   {
@@ -2019,8 +1933,8 @@
    *   FT_Init_FreeType
    *
    * @description:
-   *   Initialize a new FreeType library object.  The set of modules
-   *   that are registered by this function is determined at build time.
+   *   Initialize a new FreeType library object.  The set of modules that are
+   *   registered by this function is determined at build time.
    *
    * @output:
    *   alibrary ::
@@ -2030,21 +1944,21 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   In case you want to provide your own memory allocating routines,
-   *   use @FT_New_Library instead, followed by a call to
-   *   @FT_Add_Default_Modules (or a series of calls to @FT_Add_Module)
-   *   and @FT_Set_Default_Properties.
+   *   In case you want to provide your own memory allocating routines, use
+   *   @FT_New_Library instead, followed by a call to @FT_Add_Default_Modules
+   *   (or a series of calls to @FT_Add_Module) and
+   *   @FT_Set_Default_Properties.
    *
-   *   See the documentation of @FT_Library and @FT_Face for
-   *   multi-threading issues.
+   *   See the documentation of @FT_Library and @FT_Face for multi-threading
+   *   issues.
    *
    *   If you need reference-counting (cf. @FT_Reference_Library), use
    *   @FT_New_Library and @FT_Done_Library.
    *
-   *   If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is
-   *   set, this function reads the `FREETYPE_PROPERTIES' environment
-   *   variable to control driver properties.  See section @properties
-   *   for more.
+   *   If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is
+   *   set, this function reads the `FREETYPE_PROPERTIES` environment
+   *   variable to control driver properties.  See section @properties for
+   *   more.
    */
   FT_EXPORT( FT_Error )
   FT_Init_FreeType( FT_Library  *alibrary );
@@ -2076,7 +1990,7 @@
    *   FT_OPEN_XXX
    *
    * @description:
-   *   A list of bit field constants used within the `flags' field of the
+   *   A list of bit field constants used within the `flags` field of the
    *   @FT_Open_Args structure.
    *
    * @values:
@@ -2084,21 +1998,20 @@
    *     This is a memory-based stream.
    *
    *   FT_OPEN_STREAM ::
-   *     Copy the stream from the `stream' field.
+   *     Copy the stream from the `stream` field.
    *
    *   FT_OPEN_PATHNAME ::
-   *     Create a new input stream from a C~path
-   *     name.
+   *     Create a new input stream from a C~path name.
    *
    *   FT_OPEN_DRIVER ::
-   *     Use the `driver' field.
+   *     Use the `driver` field.
    *
    *   FT_OPEN_PARAMS ::
-   *     Use the `num_params' and `params' fields.
+   *     Use the `num_params` and `params` fields.
    *
    * @note:
-   *   The `FT_OPEN_MEMORY', `FT_OPEN_STREAM', and `FT_OPEN_PATHNAME'
-   *   flags are mutually exclusive.
+   *   The `FT_OPEN_MEMORY`, `FT_OPEN_STREAM`, and `FT_OPEN_PATHNAME` flags
+   *   are mutually exclusive.
    */
 #define FT_OPEN_MEMORY    0x1
 #define FT_OPEN_STREAM    0x2
@@ -2107,7 +2020,7 @@
 #define FT_OPEN_PARAMS    0x10
 
 
-  /* these constants are deprecated; use the corresponding `FT_OPEN_XXX' */
+  /* these constants are deprecated; use the corresponding `FT_OPEN_XXX` */
   /* values instead                                                      */
 #define ft_open_memory    FT_OPEN_MEMORY
 #define ft_open_stream    FT_OPEN_STREAM
@@ -2133,8 +2046,8 @@
    *     A pointer to the parameter data.
    *
    * @note:
-   *   The ID and function of parameters are driver-specific.  See
-   *   section @parameter_tags for more information.
+   *   The ID and function of parameters are driver-specific.  See section
+   *   @parameter_tags for more information.
    */
   typedef struct  FT_Parameter_
   {
@@ -2156,8 +2069,7 @@
    *
    * @fields:
    *   flags ::
-   *     A set of bit flags indicating how to use the
-   *     structure.
+   *     A set of bit flags indicating how to use the structure.
    *
    *   memory_base ::
    *     The first byte of the file in memory.
@@ -2172,44 +2084,41 @@
    *     A handle to a source stream object.
    *
    *   driver ::
-   *     This field is exclusively used by @FT_Open_Face;
-   *     it simply specifies the font driver to use for
-   *     opening the face.  If set to NULL, FreeType tries
-   *     to load the face with each one of the drivers in
-   *     its list.
+   *     This field is exclusively used by @FT_Open_Face; it simply specifies
+   *     the font driver to use for opening the face.  If set to `NULL`,
+   *     FreeType tries to load the face with each one of the drivers in its
+   *     list.
    *
    *   num_params ::
    *     The number of extra parameters.
    *
    *   params ::
-   *     Extra parameters passed to the font driver when
-   *     opening a new face.
+   *     Extra parameters passed to the font driver when opening a new face.
    *
    * @note:
-   *   The stream type is determined by the contents of `flags' that
-   *    are tested in the following order by @FT_Open_Face:
+   *   The stream type is determined by the contents of `flags` that are
+   *   tested in the following order by @FT_Open_Face:
    *
-   *   If the @FT_OPEN_MEMORY bit is set, assume that this is a
-   *   memory file of `memory_size' bytes, located at `memory_address'.
-   *   The data are not copied, and the client is responsible for
-   *   releasing and destroying them _after_ the corresponding call to
-   *   @FT_Done_Face.
+   *   If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file
+   *   of `memory_size` bytes, located at `memory_address`.  The data are not
+   *   copied, and the client is responsible for releasing and destroying
+   *   them _after_ the corresponding call to @FT_Done_Face.
    *
-   *   Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a
-   *   custom input stream `stream' is used.
+   *   Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a custom
+   *   input stream `stream` is used.
    *
-   *   Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this
-   *   is a normal file and use `pathname' to open it.
+   *   Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a
+   *   normal file and use `pathname` to open it.
    *
-   *   If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to
-   *   open the file with the driver whose handler is in `driver'.
+   *   If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open
+   *   the file with the driver whose handler is in `driver`.
    *
    *   If the @FT_OPEN_PARAMS bit is set, the parameters given by
-   *   `num_params' and `params' is used.  They are ignored otherwise.
+   *   `num_params` and `params` is used.  They are ignored otherwise.
    *
-   *   Ideally, both the `pathname' and `params' fields should be tagged
-   *   as `const'; this is missing for API backward compatibility.  In
-   *   other words, applications should treat them as read-only.
+   *   Ideally, both the `pathname` and `params` fields should be tagged as
+   *   'const'; this is missing for API backward compatibility.  In other
+   *   words, applications should treat them as read-only.
    */
   typedef struct  FT_Open_Args_
   {
@@ -2242,20 +2151,19 @@
    *     A path to the font file.
    *
    *   face_index ::
-   *     See @FT_Open_Face for a detailed description of this
-   *     parameter.
+   *     See @FT_Open_Face for a detailed description of this parameter.
    *
    * @output:
    *   aface ::
-   *     A handle to a new face object.  If `face_index' is
-   *     greater than or equal to zero, it must be non-NULL.
+   *     A handle to a new face object.  If `face_index` is greater than or
+   *     equal to zero, it must be non-`NULL`.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Use @FT_Done_Face to destroy the created @FT_Face object (along
-   *   with its slot and sizes).
+   *   Use @FT_Done_Face to destroy the created @FT_Face object (along with
+   *   its slot and sizes).
    */
   FT_EXPORT( FT_Error )
   FT_New_Face( FT_Library   library,
@@ -2270,8 +2178,7 @@
    *   FT_New_Memory_Face
    *
    * @description:
-   *   Call @FT_Open_Face to open a font that has been loaded into
-   *   memory.
+   *   Call @FT_Open_Face to open a font that has been loaded into memory.
    *
    * @inout:
    *   library ::
@@ -2285,13 +2192,12 @@
    *     The size of the memory chunk used by the font data.
    *
    *   face_index ::
-   *     See @FT_Open_Face for a detailed description of this
-   *     parameter.
+   *     See @FT_Open_Face for a detailed description of this parameter.
    *
    * @output:
    *   aface ::
-   *     A handle to a new face object.  If `face_index' is
-   *     greater than or equal to zero, it must be non-NULL.
+   *     A handle to a new face object.  If `face_index` is greater than or
+   *     equal to zero, it must be non-`NULL`.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -2313,8 +2219,7 @@
    *   FT_Open_Face
    *
    * @description:
-   *   Create a face object from a given resource described by
-   *   @FT_Open_Args.
+   *   Create a face object from a given resource described by @FT_Open_Args.
    *
    * @inout:
    *   library ::
@@ -2322,64 +2227,57 @@
    *
    * @input:
    *   args ::
-   *     A pointer to an `FT_Open_Args' structure that must
-   *     be filled by the caller.
+   *     A pointer to an `FT_Open_Args` structure that must be filled by the
+   *     caller.
    *
    *   face_index ::
-   *     This field holds two different values.  Bits 0-15
-   *     are the index of the face in the font file (starting
-   *     with value~0).  Set it to~0 if there is only one
-   *     face in the font file.
+   *     This field holds two different values.  Bits 0-15 are the index of
+   *     the face in the font file (starting with value~0).  Set it to~0 if
+   *     there is only one face in the font file.
    *
-   *     [Since 2.6.1] Bits 16-30 are relevant to GX and
-   *     OpenType variation fonts only, specifying the named
-   *     instance index for the current face index (starting
-   *     with value~1; value~0 makes FreeType ignore named
-   *     instances).  For non-variation fonts, bits 16-30 are
-   *     ignored.  Assuming that you want to access the third
-   *     named instance in face~4, `face_index' should be set
-   *     to 0x00030004.  If you want to access face~4 without
-   *     variation handling, simply set `face_index' to
+   *     [Since 2.6.1] Bits 16-30 are relevant to GX and OpenType variation
+   *     fonts only, specifying the named instance index for the current face
+   *     index (starting with value~1; value~0 makes FreeType ignore named
+   *     instances).  For non-variation fonts, bits 16-30 are ignored.
+   *     Assuming that you want to access the third named instance in face~4,
+   *     `face_index` should be set to 0x00030004.  If you want to access
+   *     face~4 without variation handling, simply set `face_index` to
    *     value~4.
    *
-   *     `FT_Open_Face' and its siblings can be used to
-   *     quickly check whether the font format of a given
-   *     font resource is supported by FreeType.  In general,
-   *     if the `face_index' argument is negative, the
-   *     function's return value is~0 if the font format is
-   *     recognized, or non-zero otherwise.  The function
-   *     allocates a more or less empty face handle in
-   *     `*aface' (if `aface' isn't NULL); the only two
-   *     useful fields in this special case are
-   *     `face->num_faces' and `face->style_flags'.  For any
-   *     negative value of `face_index', `face->num_faces'
-   *     gives the number of faces within the font file.  For
-   *     the negative value `-(N+1)' (with `N' a non-negative
-   *     16-bit value), bits 16-30 in `face->style_flags'
-   *     give the number of named instances in face `N' if we
-   *     have a variation font (or zero otherwise).  After
-   *     examination, the returned @FT_Face structure should
-   *     be deallocated with a call to @FT_Done_Face.
+   *     `FT_Open_Face` and its siblings can be used to quickly check whether
+   *     the font format of a given font resource is supported by FreeType.
+   *     In general, if the `face_index` argument is negative, the function's
+   *     return value is~0 if the font format is recognized, or non-zero
+   *     otherwise.  The function allocates a more or less empty face handle
+   *     in `*aface` (if `aface` isn't `NULL`); the only two useful fields in
+   *     this special case are `face->num_faces` and `face->style_flags`.
+   *     For any negative value of `face_index`, `face->num_faces` gives the
+   *     number of faces within the font file.  For the negative value
+   *     '-(N+1)' (with 'N' a non-negative 16-bit value), bits 16-30 in
+   *     `face->style_flags` give the number of named instances in face 'N'
+   *     if we have a variation font (or zero otherwise).  After examination,
+   *     the returned @FT_Face structure should be deallocated with a call to
+   *     @FT_Done_Face.
    *
    * @output:
    *   aface ::
-   *     A handle to a new face object.  If `face_index' is
-   *     greater than or equal to zero, it must be non-NULL.
+   *     A handle to a new face object.  If `face_index` is greater than or
+   *     equal to zero, it must be non-`NULL`.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Unlike FreeType 1.x, this function automatically creates a glyph
-   *   slot for the face object that can be accessed directly through
-   *   `face->glyph'.
+   *   Unlike FreeType 1.x, this function automatically creates a glyph slot
+   *   for the face object that can be accessed directly through
+   *   `face->glyph`.
    *
-   *   Each new face object created with this function also owns a
-   *   default @FT_Size object, accessible as `face->size'.
+   *   Each new face object created with this function also owns a default
+   *   @FT_Size object, accessible as `face->size`.
    *
    *   One @FT_Library instance can have multiple face objects, this is,
-   *   @FT_Open_Face and its siblings can be called multiple times using
-   *   the same `library' argument.
+   *   @FT_Open_Face and its siblings can be called multiple times using the
+   *   same `library` argument.
    *
    *   See the discussion of reference counters in the description of
    *   @FT_Reference_Face.
@@ -2388,7 +2286,7 @@
    *   To loop over all faces, use code similar to the following snippet
    *   (omitting the error handling).
    *
-   *   {
+   *   ```
    *     ...
    *     FT_Face  face;
    *     FT_Long  i, num_faces;
@@ -2408,15 +2306,14 @@
    *       FT_Done_Face( face );
    *       ...
    *     }
-   *   }
+   *   ```
    *
-   *   To loop over all valid values for `face_index', use something
-   *   similar to the following snippet, again without error handling.
-   *   The code accesses all faces immediately (thus only a single call
-   *   of `FT_Open_Face' within the do-loop), with and without named
-   *   instances.
+   *   To loop over all valid values for `face_index`, use something similar
+   *   to the following snippet, again without error handling.  The code
+   *   accesses all faces immediately (thus only a single call of
+   *   `FT_Open_Face` within the do-loop), with and without named instances.
    *
-   *   {
+   *   ```
    *     ...
    *     FT_Face  face;
    *
@@ -2451,7 +2348,7 @@
    *       }
    *
    *     } while ( face_idx < num_faces )
-   *   }
+   *   ```
    */
   FT_EXPORT( FT_Error )
   FT_Open_Face( FT_Library           library,
@@ -2490,10 +2387,10 @@
    *   FT_Attach_Stream
    *
    * @description:
-   *   `Attach' data to a face object.  Normally, this is used to read
+   *   'Attach' data to a face object.  Normally, this is used to read
    *   additional information for the face object.  For example, you can
-   *   attach an AFM file that comes with a Type~1 font to get the
-   *   kerning values and other metrics.
+   *   attach an AFM file that comes with a Type~1 font to get the kerning
+   *   values and other metrics.
    *
    * @inout:
    *   face ::
@@ -2501,20 +2398,19 @@
    *
    * @input:
    *   parameters ::
-   *     A pointer to @FT_Open_Args that must be filled by
-   *     the caller.
+   *     A pointer to @FT_Open_Args that must be filled by the caller.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The meaning of the `attach' (i.e., what really happens when the
-   *   new file is read) is not fixed by FreeType itself.  It really
-   *   depends on the font format (and thus the font driver).
+   *   The meaning of the 'attach' (i.e., what really happens when the new
+   *   file is read) is not fixed by FreeType itself.  It really depends on
+   *   the font format (and thus the font driver).
    *
-   *   Client applications are expected to know what they are doing
-   *   when invoking this function.  Most drivers simply do not implement
-   *   file or stream attachments.
+   *   Client applications are expected to know what they are doing when
+   *   invoking this function.  Most drivers simply do not implement file or
+   *   stream attachments.
    */
   FT_EXPORT( FT_Error )
   FT_Attach_Stream( FT_Face        face,
@@ -2527,9 +2423,9 @@
    *   FT_Reference_Face
    *
    * @description:
-   *   A counter gets initialized to~1 at the time an @FT_Face structure
-   *   is created.  This function increments the counter.  @FT_Done_Face
-   *   then only destroys a face if the counter is~1, otherwise it simply
+   *   A counter gets initialized to~1 at the time an @FT_Face structure is
+   *   created.  This function increments the counter.  @FT_Done_Face then
+   *   only destroys a face if the counter is~1, otherwise it simply
    *   decrements the counter.
    *
    *   This function helps in managing life-cycles of structures that
@@ -2579,10 +2475,10 @@
    *   FT_Select_Size
    *
    * @description:
-   *   Select a bitmap strike.  To be more precise, this function sets
-   *   the scaling factors of the active @FT_Size object in a face so
-   *   that bitmaps from this particular strike are taken by
-   *   @FT_Load_Glyph and friends.
+   *   Select a bitmap strike.  To be more precise, this function sets the
+   *   scaling factors of the active @FT_Size object in a face so that
+   *   bitmaps from this particular strike are taken by @FT_Load_Glyph and
+   *   friends.
    *
    * @inout:
    *   face ::
@@ -2590,23 +2486,22 @@
    *
    * @input:
    *   strike_index ::
-   *     The index of the bitmap strike in the
-   *     `available_sizes' field of @FT_FaceRec structure.
+   *     The index of the bitmap strike in the `available_sizes` field of
+   *     @FT_FaceRec structure.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   For bitmaps embedded in outline fonts it is common that only a
-   *   subset of the available glyphs at a given ppem value is available.
-   *   FreeType silently uses outlines if there is no bitmap for a given
-   *   glyph index.
+   *   For bitmaps embedded in outline fonts it is common that only a subset
+   *   of the available glyphs at a given ppem value is available.  FreeType
+   *   silently uses outlines if there is no bitmap for a given glyph index.
    *
-   *   For GX and OpenType variation fonts, a bitmap strike makes sense
-   *   only if the default instance is active (this is, no glyph
-   *   variation takes place); otherwise, FreeType simply ignores bitmap
-   *   strikes.  The same is true for all named instances that are
-   *   different from the default instance.
+   *   For GX and OpenType variation fonts, a bitmap strike makes sense only
+   *   if the default instance is active (this is, no glyph variation takes
+   *   place); otherwise, FreeType simply ignores bitmap strikes.  The same
+   *   is true for all named instances that are different from the default
+   *   instance.
    *
    *   Don't use this function if you are using the FreeType cache API.
    */
@@ -2621,40 +2516,38 @@
    *   FT_Size_Request_Type
    *
    * @description:
-   *   An enumeration type that lists the supported size request types,
-   *   i.e., what input size (in font units) maps to the requested output
-   *   size (in pixels, as computed from the arguments of
-   *   @FT_Size_Request).
+   *   An enumeration type that lists the supported size request types, i.e.,
+   *   what input size (in font units) maps to the requested output size (in
+   *   pixels, as computed from the arguments of @FT_Size_Request).
    *
    * @values:
    *   FT_SIZE_REQUEST_TYPE_NOMINAL ::
-   *     The nominal size.  The `units_per_EM' field of @FT_FaceRec is
-   *     used to determine both scaling values.
+   *     The nominal size.  The `units_per_EM` field of @FT_FaceRec is used
+   *     to determine both scaling values.
    *
    *     This is the standard scaling found in most applications.  In
-   *     particular, use this size request type for TrueType fonts if
-   *     they provide optical scaling or something similar.  Note,
-   *     however, that `units_per_EM' is a rather abstract value which
-   *     bears no relation to the actual size of the glyphs in a font.
+   *     particular, use this size request type for TrueType fonts if they
+   *     provide optical scaling or something similar.  Note, however, that
+   *     `units_per_EM` is a rather abstract value which bears no relation to
+   *     the actual size of the glyphs in a font.
    *
    *   FT_SIZE_REQUEST_TYPE_REAL_DIM ::
-   *     The real dimension.  The sum of the `ascender' and (minus of)
-   *     the `descender' fields of @FT_FaceRec is used to determine both
-   *     scaling values.
+   *     The real dimension.  The sum of the `ascender` and (minus of) the
+   *     `descender` fields of @FT_FaceRec is used to determine both scaling
+   *     values.
    *
    *   FT_SIZE_REQUEST_TYPE_BBOX ::
-   *     The font bounding box.  The width and height of the `bbox' field
-   *     of @FT_FaceRec are used to determine the horizontal and vertical
+   *     The font bounding box.  The width and height of the `bbox` field of
+   *     @FT_FaceRec are used to determine the horizontal and vertical
    *     scaling value, respectively.
    *
    *   FT_SIZE_REQUEST_TYPE_CELL ::
-   *     The `max_advance_width' field of @FT_FaceRec is used to
-   *     determine the horizontal scaling value; the vertical scaling
-   *     value is determined the same way as
-   *     @FT_SIZE_REQUEST_TYPE_REAL_DIM does.  Finally, both scaling
-   *     values are set to the smaller one.  This type is useful if you
-   *     want to specify the font size for, say, a window of a given
-   *     dimension and 80x24 cells.
+   *     The `max_advance_width` field of @FT_FaceRec is used to determine
+   *     the horizontal scaling value; the vertical scaling value is
+   *     determined the same way as @FT_SIZE_REQUEST_TYPE_REAL_DIM does.
+   *     Finally, both scaling values are set to the smaller one.  This type
+   *     is useful if you want to specify the font size for, say, a window of
+   *     a given dimension and 80x24 cells.
    *
    *   FT_SIZE_REQUEST_TYPE_SCALES ::
    *     Specify the scaling values directly.
@@ -2692,33 +2585,31 @@
    *     See @FT_Size_Request_Type.
    *
    *   width ::
-   *     The desired width, given as a 26.6 fractional
-   *     point value (with 72pt = 1in).
+   *     The desired width, given as a 26.6 fractional point value (with 72pt
+   *     = 1in).
    *
    *   height ::
-   *     The desired height, given as a 26.6 fractional
-   *     point value (with 72pt = 1in).
+   *     The desired height, given as a 26.6 fractional point value (with
+   *     72pt = 1in).
    *
    *   horiResolution ::
-   *     The horizontal resolution (dpi, i.e., pixels per
-   *     inch).  If set to zero, `width' is treated as a
-   *     26.6 fractional *pixel* value, which gets
-   *     internally rounded to an integer.
+   *     The horizontal resolution (dpi, i.e., pixels per inch).  If set to
+   *     zero, `width` is treated as a 26.6 fractional **pixel** value, which
+   *     gets internally rounded to an integer.
    *
    *   vertResolution ::
-   *     The vertical resolution (dpi, i.e., pixels per
-   *     inch).  If set to zero, `height' is treated as a
-   *     26.6 fractional *pixel* value, which gets
-   *     internally rounded to an integer.
+   *     The vertical resolution (dpi, i.e., pixels per inch).  If set to
+   *     zero, `height` is treated as a 26.6 fractional **pixel** value,
+   *     which gets internally rounded to an integer.
    *
    * @note:
-   *   If `width' is zero, the horizontal scaling value is set equal
-   *   to the vertical scaling value, and vice versa.
+   *   If `width` is zero, the horizontal scaling value is set equal to the
+   *   vertical scaling value, and vice versa.
    *
-   *   If `type' is FT_SIZE_REQUEST_TYPE_SCALES, `width' and `height' are
-   *   interpreted directly as 16.16 fractional scaling values, without
-   *   any further modification, and both `horiResolution' and
-   *   `vertResolution' are ignored.
+   *   If `type` is `FT_SIZE_REQUEST_TYPE_SCALES`, `width` and `height` are
+   *   interpreted directly as 16.16 fractional scaling values, without any
+   *   further modification, and both `horiResolution` and `vertResolution`
+   *   are ignored.
    */
   typedef struct  FT_Size_RequestRec_
   {
@@ -2762,20 +2653,19 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Although drivers may select the bitmap strike matching the
-   *   request, you should not rely on this if you intend to select a
-   *   particular bitmap strike.  Use @FT_Select_Size instead in that
-   *   case.
+   *   Although drivers may select the bitmap strike matching the request,
+   *   you should not rely on this if you intend to select a particular
+   *   bitmap strike.  Use @FT_Select_Size instead in that case.
    *
-   *   The relation between the requested size and the resulting glyph
-   *   size is dependent entirely on how the size is defined in the
-   *   source face.  The font designer chooses the final size of each
-   *   glyph relative to this size.  For more information refer to
-   *   `https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.
+   *   The relation between the requested size and the resulting glyph size
+   *   is dependent entirely on how the size is defined in the source face.
+   *   The font designer chooses the final size of each glyph relative to
+   *   this size.  For more information refer to
+   *   'https://www.freetype.org/freetype2/docs/glyphs/glyphs-2.html'.
    *
-   *   Contrary to @FT_Set_Char_Size, this function doesn't have special
-   *   code to normalize zero-valued widths, heights, or resolutions
-   *   (which lead to errors in most cases).
+   *   Contrary to @FT_Set_Char_Size, this function doesn't have special code
+   *   to normalize zero-valued widths, heights, or resolutions (which lead
+   *   to errors in most cases).
    *
    *   Don't use this function if you are using the FreeType cache API.
    */
@@ -2814,17 +2704,17 @@
    *
    * @note:
    *   While this function allows fractional points as input values, the
-   *   resulting ppem value for the given resolution is always rounded to
-   *   the nearest integer.
+   *   resulting ppem value for the given resolution is always rounded to the
+   *   nearest integer.
    *
-   *   If either the character width or height is zero, it is set equal
-   *   to the other value.
+   *   If either the character width or height is zero, it is set equal to
+   *   the other value.
    *
    *   If either the horizontal or vertical resolution is zero, it is set
    *   equal to the other value.
    *
-   *   A character width or height smaller than 1pt is set to 1pt; if
-   *   both resolution values are zero, they are set to 72dpi.
+   *   A character width or height smaller than 1pt is set to 1pt; if both
+   *   resolution values are zero, they are set to 72dpi.
    *
    *   Don't use this function if you are using the FreeType cache API.
    */
@@ -2881,37 +2771,35 @@
    *
    * @inout:
    *   face ::
-   *     A handle to the target face object where the glyph
-   *     is loaded.
+   *     A handle to the target face object where the glyph is loaded.
    *
    * @input:
    *   glyph_index ::
-   *     The index of the glyph in the font file.  For
-   *     CID-keyed fonts (either in PS or in CFF format)
-   *     this argument specifies the CID value.
+   *     The index of the glyph in the font file.  For CID-keyed fonts
+   *     (either in PS or in CFF format) this argument specifies the CID
+   *     value.
    *
    *   load_flags ::
-   *     A flag indicating what to load for this glyph.  The
-   *     @FT_LOAD_XXX constants can be used to control the
-   *     glyph loading process (e.g., whether the outline
-   *     should be scaled, whether to load bitmaps or not,
-   *     whether to hint the outline, etc).
+   *     A flag indicating what to load for this glyph.  The @FT_LOAD_XXX
+   *     constants can be used to control the glyph loading process (e.g.,
+   *     whether the outline should be scaled, whether to load bitmaps or
+   *     not, whether to hint the outline, etc).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The loaded glyph may be transformed.  See @FT_Set_Transform for
-   *   the details.
+   *   The loaded glyph may be transformed.  See @FT_Set_Transform for the
+   *   details.
    *
-   *   For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument' is
-   *   returned for invalid CID values (this is, for CID values that
-   *   don't have a corresponding glyph in the font).  See the discussion
-   *   of the @FT_FACE_FLAG_CID_KEYED flag for more details.
+   *   For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned
+   *   for invalid CID values (this is, for CID values that don't have a
+   *   corresponding glyph in the font).  See the discussion of the
+   *   @FT_FACE_FLAG_CID_KEYED flag for more details.
    *
-   *   If you receive `FT_Err_Glyph_Too_Big', try getting the glyph
-   *   outline at EM size, then scale it manually and fill it as a
-   *   graphics operation.
+   *   If you receive `FT_Err_Glyph_Too_Big`, try getting the glyph outline
+   *   at EM size, then scale it manually and fill it as a graphics
+   *   operation.
    */
   FT_EXPORT( FT_Error )
   FT_Load_Glyph( FT_Face   face,
@@ -2930,20 +2818,18 @@
    *
    * @inout:
    *   face ::
-   *     A handle to a target face object where the glyph
-   *     is loaded.
+   *     A handle to a target face object where the glyph is loaded.
    *
    * @input:
    *   char_code ::
-   *     The glyph's character code, according to the
-   *     current charmap used in the face.
+   *     The glyph's character code, according to the current charmap used in
+   *     the face.
    *
    *   load_flags ::
-   *     A flag indicating what to load for this glyph.  The
-   *     @FT_LOAD_XXX constants can be used to control the
-   *     glyph loading process (e.g., whether the outline
-   *     should be scaled, whether to load bitmaps or not,
-   *     whether to hint the outline, etc).
+   *     A flag indicating what to load for this glyph.  The @FT_LOAD_XXX
+   *     constants can be used to control the glyph loading process (e.g.,
+   *     whether the outline should be scaled, whether to load bitmaps or
+   *     not, whether to hint the outline, etc).
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -2951,13 +2837,12 @@
    * @note:
    *   This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph.
    *
-   *   Many fonts contain glyphs that can't be loaded by this function
-   *   since its glyph indices are not listed in any of the font's
-   *   charmaps.
+   *   Many fonts contain glyphs that can't be loaded by this function since
+   *   its glyph indices are not listed in any of the font's charmaps.
    *
-   *   If no active cmap is set up (i.e., `face->charmap' is zero), the
-   *   call to @FT_Get_Char_Index is omitted, and the function behaves
-   *   identically to @FT_Load_Glyph.
+   *   If no active cmap is set up (i.e., `face->charmap` is zero), the call
+   *   to @FT_Get_Char_Index is omitted, and the function behaves identically
+   *   to @FT_Load_Glyph.
    */
   FT_EXPORT( FT_Error )
   FT_Load_Char( FT_Face   face,
@@ -2965,14 +2850,14 @@
                 FT_Int32  load_flags );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_LOAD_XXX
    *
    * @description:
-   *   A list of bit field constants for @FT_Load_Glyph to indicate what
-   *   kind of operations to perform during glyph loading.
+   *   A list of bit field constants for @FT_Load_Glyph to indicate what kind
+   *   of operations to perform during glyph loading.
    *
    * @values:
    *   FT_LOAD_DEFAULT ::
@@ -2980,15 +2865,14 @@
    *     operation.  In this case, the following happens:
    *
    *     1. FreeType looks for a bitmap for the glyph corresponding to the
-   *     face's current size.  If one is found, the function returns.
-   *     The bitmap data can be accessed from the glyph slot (see note
-   *     below).
+   *     face's current size.  If one is found, the function returns.  The
+   *     bitmap data can be accessed from the glyph slot (see note below).
    *
    *     2. If no embedded bitmap is searched for or found, FreeType looks
-   *     for a scalable outline.  If one is found, it is loaded from
-   *     the font file, scaled to device pixels, then `hinted' to the
-   *     pixel grid in order to optimize it.  The outline data can be
-   *     accessed from the glyph slot (see note below).
+   *     for a scalable outline.  If one is found, it is loaded from the font
+   *     file, scaled to device pixels, then 'hinted' to the pixel grid in
+   *     order to optimize it.  The outline data can be accessed from the
+   *     glyph slot (see note below).
    *
    *     Note that by default the glyph loader doesn't render outlines into
    *     bitmaps.  The following flags are used to modify this default
@@ -3000,14 +2884,14 @@
    *     This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and
    *     unsets @FT_LOAD_RENDER.
    *
-   *     If the font is `tricky' (see @FT_FACE_FLAG_TRICKY for more), using
-   *     FT_LOAD_NO_SCALE usually yields meaningless outlines because the
-   *     subglyphs must be scaled and positioned with hinting instructions.
-   *     This can be solved by loading the font without FT_LOAD_NO_SCALE and
-   *     setting the character size to `font->units_per_EM'.
+   *     If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using
+   *     `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the
+   *     subglyphs must be scaled and positioned with hinting instructions. 
+   *     This can be solved by loading the font without `FT_LOAD_NO_SCALE`
+   *     and setting the character size to `font->units_per_EM`.
    *
    *   FT_LOAD_NO_HINTING ::
-   *     Disable hinting.  This generally generates `blurrier' bitmap glyphs
+   *     Disable hinting.  This generally generates 'blurrier' bitmap glyphs
    *     when the glyph are rendered in any of the anti-aliased modes.  See
    *     also the note below.
    *
@@ -3028,34 +2912,37 @@
    *
    *   FT_LOAD_VERTICAL_LAYOUT ::
    *     Load the glyph for vertical text layout.  In particular, the
-   *     `advance' value in the @FT_GlyphSlotRec structure is set to the
-   *     `vertAdvance' value of the `metrics' field.
+   *     `advance` value in the @FT_GlyphSlotRec structure is set to the
+   *     `vertAdvance` value of the `metrics` field.
    *
-   *     In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use
-   *     this flag currently.  Reason is that in this case vertical metrics
-   *     get synthesized, and those values are not always consistent across
+   *     In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use this
+   *     flag currently.  Reason is that in this case vertical metrics get
+   *     synthesized, and those values are not always consistent across
    *     various font formats.
    *
    *   FT_LOAD_FORCE_AUTOHINT ::
-   *     Prefer the auto-hinter over the font's native hinter.  See also
-   *     the note below.
+   *     Prefer the auto-hinter over the font's native hinter.  See also the
+   *     note below.
    *
    *   FT_LOAD_PEDANTIC ::
    *     Make the font driver perform pedantic verifications during glyph
-   *     loading.  This is mostly used to detect broken glyphs in fonts.
-   *     By default, FreeType tries to handle broken fonts also.
+   *     loading and hinting.  This is mostly used to detect broken glyphs in
+   *     fonts.  By default, FreeType tries to handle broken fonts also.
    *
    *     In particular, errors from the TrueType bytecode engine are not
-   *     passed to the application if this flag is not set; this might
-   *     result in partially hinted or distorted glyphs in case a glyph's
-   *     bytecode is buggy.
+   *     passed to the application if this flag is not set; this might result
+   *     in partially hinted or distorted glyphs in case a glyph's bytecode
+   *     is buggy.
    *
    *   FT_LOAD_NO_RECURSE ::
-   *     Don't load composite glyphs recursively.  Instead, the font
-   *     driver should set the `num_subglyph' and `subglyphs' values of
-   *     the glyph slot accordingly, and set `glyph->format' to
-   *     @FT_GLYPH_FORMAT_COMPOSITE.  The description of subglyphs can
-   *     then be accessed with @FT_Get_SubGlyph_Info.
+   *     Don't load composite glyphs recursively.  Instead, the font driver
+   *     fills the `num_subglyph` and `subglyphs` values of the glyph slot;
+   *     it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE.  The
+   *     description of subglyphs can then be accessed with
+   *     @FT_Get_SubGlyph_Info.
+   *
+   *     Don't use this flag for retrieving metrics information since some
+   *     font drivers only return rudimentary data.
    *
    *     This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM.
    *
@@ -3072,9 +2959,8 @@
    *     monochrome-optimized hinting algorithm is used.
    *
    *   FT_LOAD_LINEAR_DESIGN ::
-   *     Keep  `linearHoriAdvance' and `linearVertAdvance' fields of
-   *     @FT_GlyphSlotRec in font units.  See @FT_GlyphSlotRec for
-   *     details.
+   *     Keep `linearHoriAdvance` and `linearVertAdvance` fields of
+   *     @FT_GlyphSlotRec in font units.  See @FT_GlyphSlotRec for details.
    *
    *   FT_LOAD_NO_AUTOHINT ::
    *     Disable the auto-hinter.  See also the note below.
@@ -3089,19 +2975,19 @@
    *     color bitmaps are found, they are converted to 256-level gray
    *     bitmaps, using the @FT_PIXEL_MODE_GRAY format.
    *
-   *     [Since 2.10] If the glyph index contains an entry in the face's
-   *     `COLR' table with a `CPAL' palette table (as defined in the
-   *     OpenType specification), make @FT_Render_Glyph provide a default
+   *     [Since 2.10, experimental] If the glyph index contains an entry in
+   *     the face's 'COLR' table with a 'CPAL' palette table (as defined in
+   *     the OpenType specification), make @FT_Render_Glyph provide a default
    *     blending of the color glyph layers associated with the glyph index,
    *     using the same bitmap format as embedded color bitmap images.  This
    *     is mainly for convenience; for full control of color layers use
    *     @FT_Get_Color_Glyph_Layer and FreeType's color functions like
-   *     @FT_Palette_Select instead of setting FT_LOAD_COLOR for rendering
+   *     @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering
    *     so that the client application can handle blending by itself.
    *
    *   FT_LOAD_COMPUTE_METRICS ::
-   *     [Since 2.6.1] Compute glyph metrics from the glyph data, without
-   *     the use of bundled metrics tables (for example, the `hdmx' table in
+   *     [Since 2.6.1] Compute glyph metrics from the glyph data, without the
+   *     use of bundled metrics tables (for example, the 'hdmx' table in
    *     TrueType fonts).  This flag is mainly used by font validating or
    *     font editing applications, which need to ignore, verify, or edit
    *     those tables.
@@ -3110,9 +2996,9 @@
    *
    *   FT_LOAD_BITMAP_METRICS_ONLY ::
    *     [Since 2.7.1] Request loading of the metrics and bitmap image
-   *     information of a (possibly embedded) bitmap glyph without
-   *     allocating or copying the bitmap image data itself.  No effect if
-   *     the target glyph is not a bitmap image.
+   *     information of a (possibly embedded) bitmap glyph without allocating
+   *     or copying the bitmap image data itself.  No effect if the target
+   *     glyph is not a bitmap image.
    *
    *     This flag unsets @FT_LOAD_RENDER.
    *
@@ -3127,8 +3013,8 @@
    *   @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter.  You can
    *   disable hinting by setting @FT_LOAD_NO_HINTING or change the
    *   precedence by setting @FT_LOAD_FORCE_AUTOHINT.  You can also set
-   *   @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be
-   *   used at all.
+   *   @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used
+   *   at all.
    *
    *   See the description of @FT_FACE_FLAG_TRICKY for a special exception
    *   (affecting only a handful of Asian fonts).
@@ -3139,7 +3025,7 @@
    *   Note that the auto-hinter needs a valid Unicode cmap (either a native
    *   one or synthesized by FreeType) for producing correct results.  If a
    *   font provides an incorrect mapping (for example, assigning the
-   *   character code U+005A, LATIN CAPITAL LETTER Z, to a glyph depicting a
+   *   character code U+005A, LATIN CAPITAL LETTER~Z, to a glyph depicting a
    *   mathematical integral sign), the auto-hinter might produce useless
    *   results.
    *
@@ -3159,7 +3045,7 @@
 #define FT_LOAD_MONOCHROME                   ( 1L << 12 )
 #define FT_LOAD_LINEAR_DESIGN                ( 1L << 13 )
 #define FT_LOAD_NO_AUTOHINT                  ( 1L << 15 )
-  /* Bits 16-19 are used by `FT_LOAD_TARGET_' */
+  /* Bits 16-19 are used by `FT_LOAD_TARGET_` */
 #define FT_LOAD_COLOR                        ( 1L << 20 )
 #define FT_LOAD_COMPUTE_METRICS              ( 1L << 21 )
 #define FT_LOAD_BITMAP_METRICS_ONLY          ( 1L << 22 )
@@ -3178,19 +3064,17 @@
    *
    * @description:
    *   A list of values to select a specific hinting algorithm for the
-   *   hinter.  You should OR one of these values to your `load_flags'
-   *   when calling @FT_Load_Glyph.
+   *   hinter.  You should OR one of these values to your `load_flags` when
+   *   calling @FT_Load_Glyph.
    *
-   *   Note that a font's native hinters may ignore the hinting algorithm
-   *   you have specified (e.g., the TrueType bytecode interpreter).  You
-   *   can set @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is
-   *   used.
+   *   Note that a font's native hinters may ignore the hinting algorithm you
+   *   have specified (e.g., the TrueType bytecode interpreter).  You can set
+   *   @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used.
    *
    * @values:
    *   FT_LOAD_TARGET_NORMAL ::
    *     The default hinting algorithm, optimized for standard gray-level
-   *     rendering.  For monochrome output, use @FT_LOAD_TARGET_MONO
-   *     instead.
+   *     rendering.  For monochrome output, use @FT_LOAD_TARGET_MONO instead.
    *
    *   FT_LOAD_TARGET_LIGHT ::
    *     A lighter hinting algorithm for gray-level modes.  Many generated
@@ -3203,13 +3087,13 @@
    *     auto-hinter.
    *
    *     Advance widths are rounded to integer values; however, using the
-   *     `lsb_delta' and `rsb_delta' fields of @FT_GlyphSlotRec, it is
+   *     `lsb_delta` and `rsb_delta` fields of @FT_GlyphSlotRec, it is
    *     possible to get fractional advance widths for subpixel positioning
    *     (which is recommended to use).
    *
-   *     If configuration option AF_CONFIG_OPTION_TT_SIZE_METRICS is active,
-   *     TrueType-like metrics are used to make this mode behave similarly
-   *     as in unpatched FreeType versions between 2.4.6 and 2.7.1
+   *     If configuration option `AF_CONFIG_OPTION_TT_SIZE_METRICS` is
+   *     active, TrueType-like metrics are used to make this mode behave
+   *     similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1
    *     (inclusive).
    *
    *   FT_LOAD_TARGET_MONO ::
@@ -3217,6 +3101,12 @@
    *     output.  The result is probably unpleasant if the glyph is rendered
    *     in non-monochrome modes.
    *
+   *     Note that for outline fonts only the TrueType font driver has proper
+   *     monochrome hinting support, provided the TTFs contain hints for B/W
+   *     rendering (which most fonts no longer provide).  If these conditions
+   *     are not met it is very likely that you get ugly results at smaller
+   *     sizes.
+   *
    *   FT_LOAD_TARGET_LCD ::
    *     A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally
    *     decimated LCD displays.
@@ -3226,25 +3116,25 @@
    *     decimated LCD displays.
    *
    * @note:
-   *   You should use only _one_ of the FT_LOAD_TARGET_XXX values in your
-   *   `load_flags'.  They can't be ORed.
+   *   You should use only _one_ of the `FT_LOAD_TARGET_XXX` values in your
+   *   `load_flags`.  They can't be ORed.
    *
    *   If @FT_LOAD_RENDER is also set, the glyph is rendered in the
    *   corresponding mode (i.e., the mode that matches the used algorithm
-   *   best).  An exception is FT_LOAD_TARGET_MONO since it implies
+   *   best).  An exception is `FT_LOAD_TARGET_MONO` since it implies
    *   @FT_LOAD_MONOCHROME.
    *
    *   You can use a hinting algorithm that doesn't correspond to the same
-   *   rendering mode.  As an example, it is possible to use the `light'
+   *   rendering mode.  As an example, it is possible to use the 'light'
    *   hinting algorithm and have the results rendered in horizontal LCD
    *   pixel mode, with code like
    *
-   *   {
+   *   ```
    *     FT_Load_Glyph( face, glyph_index,
    *                    load_flags | FT_LOAD_TARGET_LIGHT );
    *
    *     FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD );
-   *   }
+   *   ```
    *
    *   In general, you should stick with one rendering mode.  For example,
    *   switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO
@@ -3282,8 +3172,8 @@
    *   FT_Set_Transform
    *
    * @description:
-   *   Set the transformation that is applied to glyph images when they
-   *   are loaded into a glyph slot through @FT_Load_Glyph.
+   *   Set the transformation that is applied to glyph images when they are
+   *   loaded into a glyph slot through @FT_Load_Glyph.
    *
    * @inout:
    *   face ::
@@ -3291,20 +3181,19 @@
    *
    * @input:
    *   matrix ::
-   *     A pointer to the transformation's 2x2 matrix.  Use NULL
-   *     for the identity matrix.
+   *     A pointer to the transformation's 2x2 matrix.  Use `NULL` for the
+   *     identity matrix.
    *   delta ::
-   *     A pointer to the translation vector.  Use NULL for the
-   *     null vector.
+   *     A pointer to the translation vector.  Use `NULL` for the null vector.
    *
    * @note:
-   *   The transformation is only applied to scalable image formats after
-   *   the glyph has been loaded.  It means that hinting is unaltered by
-   *   the transformation and is performed on the character size given in
-   *   the last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes.
+   *   The transformation is only applied to scalable image formats after the
+   *   glyph has been loaded.  It means that hinting is unaltered by the
+   *   transformation and is performed on the character size given in the
+   *   last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes.
    *
-   *   Note that this also transforms the `face.glyph.advance' field, but
-   *   *not* the values in `face.glyph.metrics'.
+   *   Note that this also transforms the `face.glyph.advance` field, but
+   *   **not** the values in `face.glyph.metrics`.
    */
   FT_EXPORT( void )
   FT_Set_Transform( FT_Face     face,
@@ -3321,9 +3210,9 @@
    *   Render modes supported by FreeType~2.  Each mode corresponds to a
    *   specific type of scanline conversion performed on the outline.
    *
-   *   For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode'
-   *   field in the @FT_GlyphSlotRec structure gives the format of the
-   *   returned bitmap.
+   *   For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode` field
+   *   in the @FT_GlyphSlotRec structure gives the format of the returned
+   *   bitmap.
    *
    *   All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity,
    *   indicating pixel coverage.  Use linear alpha blending and gamma
@@ -3332,44 +3221,42 @@
    *
    * @values:
    *   FT_RENDER_MODE_NORMAL ::
-   *     Default render mode; it corresponds to 8-bit anti-aliased
-   *     bitmaps.
+   *     Default render mode; it corresponds to 8-bit anti-aliased bitmaps.
    *
    *   FT_RENDER_MODE_LIGHT ::
-   *     This is equivalent to @FT_RENDER_MODE_NORMAL.  It is only
-   *     defined as a separate value because render modes are also used
-   *     indirectly to define hinting algorithm selectors.  See
-   *     @FT_LOAD_TARGET_XXX for details.
+   *     This is equivalent to @FT_RENDER_MODE_NORMAL.  It is only defined as
+   *     a separate value because render modes are also used indirectly to
+   *     define hinting algorithm selectors.  See @FT_LOAD_TARGET_XXX for
+   *     details.
    *
    *   FT_RENDER_MODE_MONO ::
-   *     This mode corresponds to 1-bit bitmaps (with 2~levels of
-   *     opacity).
+   *     This mode corresponds to 1-bit bitmaps (with 2~levels of opacity).
    *
    *   FT_RENDER_MODE_LCD ::
-   *     This mode corresponds to horizontal RGB and BGR subpixel
-   *     displays like LCD screens.  It produces 8-bit bitmaps that are
-   *     3~times the width of the original glyph outline in pixels, and
-   *     which use the @FT_PIXEL_MODE_LCD mode.
+   *     This mode corresponds to horizontal RGB and BGR subpixel displays
+   *     like LCD screens.  It produces 8-bit bitmaps that are 3~times the
+   *     width of the original glyph outline in pixels, and which use the
+   *     @FT_PIXEL_MODE_LCD mode.
    *
    *   FT_RENDER_MODE_LCD_V ::
    *     This mode corresponds to vertical RGB and BGR subpixel displays
-   *     (like PDA screens, rotated LCD displays, etc.).  It produces
-   *     8-bit bitmaps that are 3~times the height of the original
-   *     glyph outline in pixels and use the @FT_PIXEL_MODE_LCD_V mode.
+   *     (like PDA screens, rotated LCD displays, etc.).  It produces 8-bit
+   *     bitmaps that are 3~times the height of the original glyph outline in
+   *     pixels and use the @FT_PIXEL_MODE_LCD_V mode.
    *
    * @note:
-   *   Should you define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your
-   *   `ftoption.h', which enables patented ClearType-style rendering,
-   *   the LCD-optimized glyph bitmaps should be filtered to reduce color
-   *   fringes inherent to this technology.  You can either set up LCD
-   *   filtering with @FT_Library_SetLcdFilter or @FT_Face_Properties,
-   *   or do the filtering yourself.  The default FreeType LCD rendering
-   *   technology does not require filtering.
+   *   Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
+   *   `ftoption.h`, which enables patented ClearType-style rendering, the
+   *   LCD-optimized glyph bitmaps should be filtered to reduce color fringes
+   *   inherent to this technology.  You can either set up LCD filtering with
+   *   @FT_Library_SetLcdFilter or @FT_Face_Properties, or do the filtering
+   *   yourself.  The default FreeType LCD rendering technology does not
+   *   require filtering.
    *
    *   The selected render mode only affects vector glyphs of a font.
    *   Embedded bitmaps often have a different pixel mode like
-   *   @FT_PIXEL_MODE_MONO.  You can use @FT_Bitmap_Convert to transform
-   *   them into 8-bit pixmaps.
+   *   @FT_PIXEL_MODE_MONO.  You can use @FT_Bitmap_Convert to transform them
+   *   into 8-bit pixmaps.
    */
   typedef enum  FT_Render_Mode_
   {
@@ -3385,7 +3272,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_Render_Mode' values instead                       */
+  /* `FT_Render_Mode` values instead                       */
 #define ft_render_mode_normal  FT_RENDER_MODE_NORMAL
 #define ft_render_mode_mono    FT_RENDER_MODE_MONO
 
@@ -3396,27 +3283,23 @@
    *   FT_Render_Glyph
    *
    * @description:
-   *   Convert a given glyph image to a bitmap.  It does so by inspecting
-   *   the glyph image format, finding the relevant renderer, and
-   *   invoking it.
+   *   Convert a given glyph image to a bitmap.  It does so by inspecting the
+   *   glyph image format, finding the relevant renderer, and invoking it.
    *
    * @inout:
    *   slot ::
-   *     A handle to the glyph slot containing the image to
-   *     convert.
+   *     A handle to the glyph slot containing the image to convert.
    *
    * @input:
    *   render_mode ::
-   *     The render mode used to render the glyph image into
-   *     a bitmap.  See @FT_Render_Mode for a list of
-   *     possible values.
+   *     The render mode used to render the glyph image into a bitmap.  See
+   *     @FT_Render_Mode for a list of possible values.
    *
-   *     If @FT_RENDER_MODE_NORMAL is used, the flag
-   *     @FT_LOAD_COLOR can be additionally set to make the
-   *     function provide a default blending of colored
-   *     glyph layers associated with the current glyph slot
-   *     (provided the font contains such layers) instead of
-   *     rendering the glyph slot's outline.  See
+   *     If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph
+   *     with flag @FT_LOAD_COLOR makes FT_Render_Glyph provide a default
+   *     blending of colored glyph layers associated with the current glyph
+   *     slot (provided the font contains such layers) instead of rendering
+   *     the glyph slot's outline.  This is an experimental feature; see
    *     @FT_LOAD_COLOR for more information.
    *
    * @return:
@@ -3424,84 +3307,80 @@
    *
    * @note:
    *   To get meaningful results, font scaling values must be set with
-   *   functions like @FT_Set_Char_Size before calling `FT_Render_Glyph'.
+   *   functions like @FT_Set_Char_Size before calling `FT_Render_Glyph`.
    *
-   *   When FreeType outputs a bitmap of a glyph, it really outputs an
-   *   alpha coverage map.  If a pixel is completely covered by a
-   *   filled-in outline, the bitmap contains 0xFF at that pixel, meaning
-   *   that 0xFF/0xFF fraction of that pixel is covered, meaning the
-   *   pixel is 100% black (or 0% bright).  If a pixel is only 50%
-   *   covered (value 0x80), the pixel is made 50% black (50% bright or a
-   *   middle shade of grey).  0% covered means 0% black (100% bright or
-   *   white).
+   *   When FreeType outputs a bitmap of a glyph, it really outputs an alpha
+   *   coverage map.  If a pixel is completely covered by a filled-in
+   *   outline, the bitmap contains 0xFF at that pixel, meaning that
+   *   0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100%
+   *   black (or 0% bright).  If a pixel is only 50% covered (value 0x80),
+   *   the pixel is made 50% black (50% bright or a middle shade of grey).
+   *   0% covered means 0% black (100% bright or white).
    *
-   *   On high-DPI screens like on smartphones and tablets, the pixels
-   *   are so small that their chance of being completely covered and
-   *   therefore completely black are fairly good.  On the low-DPI
-   *   screens, however, the situation is different.  The pixels are too
-   *   large for most of the details of a glyph and shades of gray are
-   *   the norm rather than the exception.
+   *   On high-DPI screens like on smartphones and tablets, the pixels are so
+   *   small that their chance of being completely covered and therefore
+   *   completely black are fairly good.  On the low-DPI screens, however,
+   *   the situation is different.  The pixels are too large for most of the
+   *   details of a glyph and shades of gray are the norm rather than the
+   *   exception.
    *
-   *   This is relevant because all our screens have a second problem:
-   *   they are not linear.  1~+~1 is not~2.  Twice the value does not
-   *   result in twice the brightness.  When a pixel is only 50% covered,
-   *   the coverage map says 50% black, and this translates to a pixel
-   *   value of 128 when you use 8~bits per channel (0-255).  However,
-   *   this does not translate to 50% brightness for that pixel on our
-   *   sRGB and gamma~2.2 screens.  Due to their non-linearity, they
-   *   dwell longer in the darks and only a pixel value of about 186
-   *   results in 50% brightness -- 128 ends up too dark on both bright
-   *   and dark backgrounds.  The net result is that dark text looks
-   *   burnt-out, pixely and blotchy on bright background, bright text
-   *   too frail on dark backgrounds, and colored text on colored
+   *   This is relevant because all our screens have a second problem: they
+   *   are not linear.  1~+~1 is not~2.  Twice the value does not result in
+   *   twice the brightness.  When a pixel is only 50% covered, the coverage
+   *   map says 50% black, and this translates to a pixel value of 128 when
+   *   you use 8~bits per channel (0-255).  However, this does not translate
+   *   to 50% brightness for that pixel on our sRGB and gamma~2.2 screens.
+   *   Due to their non-linearity, they dwell longer in the darks and only a
+   *   pixel value of about 186 results in 50% brightness -- 128 ends up too
+   *   dark on both bright and dark backgrounds.  The net result is that dark
+   *   text looks burnt-out, pixely and blotchy on bright background, bright
+   *   text too frail on dark backgrounds, and colored text on colored
    *   background (for example, red on green) seems to have dark halos or
-   *   `dirt' around it.  The situation is especially ugly for diagonal
-   *   stems like in `w' glyph shapes where the quality of FreeType's
-   *   anti-aliasing depends on the correct display of grays.  On
-   *   high-DPI screens where smaller, fully black pixels reign supreme,
-   *   this doesn't matter, but on our low-DPI screens with all the gray
-   *   shades, it does.  0% and 100% brightness are the same things in
-   *   linear and non-linear space, just all the shades in-between
-   *   aren't.
+   *   'dirt' around it.  The situation is especially ugly for diagonal stems
+   *   like in 'w' glyph shapes where the quality of FreeType's anti-aliasing
+   *   depends on the correct display of grays.  On high-DPI screens where
+   *   smaller, fully black pixels reign supreme, this doesn't matter, but on
+   *   our low-DPI screens with all the gray shades, it does.  0% and 100%
+   *   brightness are the same things in linear and non-linear space, just
+   *   all the shades in-between aren't.
    *
    *   The blending function for placing text over a background is
    *
-   *   {
+   *   ```
    *     dst = alpha * src + (1 - alpha) * dst    ,
-   *   }
+   *   ```
    *
    *   which is known as the OVER operator.
    *
-   *   To correctly composite an antialiased pixel of a glyph onto a
-   *   surface,
+   *   To correctly composite an antialiased pixel of a glyph onto a surface,
    *
    *   1. take the foreground and background colors (e.g., in sRGB space)
    *      and apply gamma to get them in a linear space,
    *
    *   2. use OVER to blend the two linear colors using the glyph pixel
-   *      as the alpha value (remember, the glyph bitmap is an alpha
-   *      coverage bitmap), and
+   *      as the alpha value (remember, the glyph bitmap is an alpha coverage
+   *      bitmap), and
    *
    *   3. apply inverse gamma to the blended pixel and write it back to
    *      the image.
    *
-   *   Internal testing at Adobe found that a target inverse gamma of~1.8
-   *   for step~3 gives good results across a wide range of displays with
-   *   an sRGB gamma curve or a similar one.
+   *   Internal testing at Adobe found that a target inverse gamma of~1.8 for
+   *   step~3 gives good results across a wide range of displays with an sRGB
+   *   gamma curve or a similar one.
    *
    *   This process can cost performance.  There is an approximation that
    *   does not need to know about the background color; see
    *   https://bel.fi/alankila/lcd/ and
    *   https://bel.fi/alankila/lcd/alpcor.html for details.
    *
-   *   *ATTENTION*: Linear blending is even more important when dealing
+   *   **ATTENTION**: Linear blending is even more important when dealing
    *   with subpixel-rendered glyphs to prevent color-fringing!  A
    *   subpixel-rendered glyph must first be filtered with a filter that
-   *   gives equal weight to the three color primaries and does not
-   *   exceed a sum of 0x100, see section @lcd_rendering.  Then the
-   *   only difference to gray linear blending is that subpixel-rendered
-   *   linear blending is done 3~times per pixel: red foreground subpixel
-   *   to red background subpixel and so on for green and blue.
+   *   gives equal weight to the three color primaries and does not exceed a
+   *   sum of 0x100, see section @lcd_rendering.  Then the only difference to
+   *   gray linear blending is that subpixel-rendered linear blending is done
+   *   3~times per pixel: red foreground subpixel to red background subpixel
+   *   and so on for green and blue.
    */
   FT_EXPORT( FT_Error )
   FT_Render_Glyph( FT_GlyphSlot    slot,
@@ -3519,23 +3398,20 @@
    *
    * @values:
    *   FT_KERNING_DEFAULT ::
-   *     Return grid-fitted kerning distances in
-   *     26.6 fractional pixels.
+   *     Return grid-fitted kerning distances in 26.6 fractional pixels.
    *
    *   FT_KERNING_UNFITTED ::
-   *     Return un-grid-fitted kerning distances in
-   *     26.6 fractional pixels.
+   *     Return un-grid-fitted kerning distances in 26.6 fractional pixels.
    *
    *   FT_KERNING_UNSCALED ::
-   *     Return the kerning vector in original font
-   *     units.
+   *     Return the kerning vector in original font units.
    *
    * @note:
-   *   FT_KERNING_DEFAULT returns full pixel values; it also makes
-   *   FreeType heuristically scale down kerning distances at small ppem
-   *   values so that they don't become too big.
+   *   `FT_KERNING_DEFAULT` returns full pixel values; it also makes FreeType
+   *   heuristically scale down kerning distances at small ppem values so
+   *   that they don't become too big.
    *
-   *   Both FT_KERNING_DEFAULT and FT_KERNING_UNFITTED use the current
+   *   Both `FT_KERNING_DEFAULT` and `FT_KERNING_UNFITTED` use the current
    *   horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to
    *   convert font units to pixels.
    */
@@ -3549,7 +3425,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_Kerning_Mode' values instead                      */
+  /* `FT_Kerning_Mode` values instead                      */
 #define ft_kerning_default   FT_KERNING_DEFAULT
 #define ft_kerning_unfitted  FT_KERNING_UNFITTED
 #define ft_kerning_unscaled  FT_KERNING_UNSCALED
@@ -3574,29 +3450,27 @@
    *     The index of the right glyph in the kern pair.
    *
    *   kern_mode ::
-   *     See @FT_Kerning_Mode for more information.
-   *     Determines the scale and dimension of the returned
-   *     kerning vector.
+   *     See @FT_Kerning_Mode for more information.  Determines the scale and
+   *     dimension of the returned kerning vector.
    *
    * @output:
    *   akerning ::
-   *     The kerning vector.  This is either in font units,
-   *     fractional pixels (26.6 format), or pixels for
-   *     scalable formats, and in pixels for fixed-sizes
-   *     formats.
+   *     The kerning vector.  This is either in font units, fractional pixels
+   *     (26.6 format), or pixels for scalable formats, and in pixels for
+   *     fixed-sizes formats.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Only horizontal layouts (left-to-right & right-to-left) are
-   *   supported by this method.  Other layouts, or more sophisticated
-   *   kernings, are out of the scope of this API function -- they can be
-   *   implemented through format-specific interfaces.
+   *   Only horizontal layouts (left-to-right & right-to-left) are supported
+   *   by this method.  Other layouts, or more sophisticated kernings, are
+   *   out of the scope of this API function -- they can be implemented
+   *   through format-specific interfaces.
    *
-   *   Kerning for OpenType fonts implemented in a `GPOS' table is not
+   *   Kerning for OpenType fonts implemented in a 'GPOS' table is not
    *   supported; use @FT_HAS_KERNING to find out whether a font has data
-   *   that can be extracted with `FT_Get_Kerning'.
+   *   that can be extracted with `FT_Get_Kerning`.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Kerning( FT_Face     face,
@@ -3622,26 +3496,25 @@
    *     The point size in 16.16 fractional points.
    *
    *   degree ::
-   *     The degree of tightness.  Increasingly negative
-   *     values represent tighter track kerning, while
-   *     increasingly positive values represent looser track
-   *     kerning.  Value zero means no track kerning.
+   *     The degree of tightness.  Increasingly negative values represent
+   *     tighter track kerning, while increasingly positive values represent
+   *     looser track kerning.  Value zero means no track kerning.
    *
    * @output:
    *   akerning ::
-   *     The kerning in 16.16 fractional points, to be
-   *     uniformly applied between all glyphs.
+   *     The kerning in 16.16 fractional points, to be uniformly applied
+   *     between all glyphs.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Currently, only the Type~1 font driver supports track kerning,
-   *   using data from AFM files (if attached with @FT_Attach_File or
+   *   Currently, only the Type~1 font driver supports track kerning, using
+   *   data from AFM files (if attached with @FT_Attach_File or
    *   @FT_Attach_Stream).
    *
-   *   Only very few AFM files come with track kerning data; please refer
-   *   to Adobe's AFM specification for more details.
+   *   Only very few AFM files come with track kerning data; please refer to
+   *   Adobe's AFM specification for more details.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Track_Kerning( FT_Face    face,
@@ -3656,8 +3529,8 @@
    *   FT_Get_Glyph_Name
    *
    * @description:
-   *   Retrieve the ASCII name of a given glyph in a face.  This only
-   *   works for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.
+   *   Retrieve the ASCII name of a given glyph in a face.  This only works
+   *   for those faces where @FT_HAS_GLYPH_NAMES(face) returns~1.
    *
    * @input:
    *   face ::
@@ -3667,31 +3540,28 @@
    *     The glyph index.
    *
    *   buffer_max ::
-   *     The maximum number of bytes available in the
-   *     buffer.
+   *     The maximum number of bytes available in the buffer.
    *
    * @output:
    *   buffer ::
-   *     A pointer to a target buffer where the name is
-   *     copied to.
+   *     A pointer to a target buffer where the name is copied to.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   An error is returned if the face doesn't provide glyph names or if
-   *   the glyph index is invalid.  In all cases of failure, the first
-   *   byte of `buffer' is set to~0 to indicate an empty name.
+   *   An error is returned if the face doesn't provide glyph names or if the
+   *   glyph index is invalid.  In all cases of failure, the first byte of
+   *   `buffer` is set to~0 to indicate an empty name.
    *
    *   The glyph name is truncated to fit within the buffer if it is too
    *   long.  The returned string is always zero-terminated.
    *
-   *   Be aware that FreeType reorders glyph indices internally so that
-   *   glyph index~0 always corresponds to the `missing glyph' (called
-   *   `.notdef').
+   *   Be aware that FreeType reorders glyph indices internally so that glyph
+   *   index~0 always corresponds to the 'missing glyph' (called '.notdef').
    *
    *   This function always returns an error if the config macro
-   *   `FT_CONFIG_OPTION_NO_GLYPH_NAMES' is not defined in `ftoption.h'.
+   *   `FT_CONFIG_OPTION_NO_GLYPH_NAMES` is not defined in `ftoption.h`.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Glyph_Name( FT_Face     face,
@@ -3714,25 +3584,23 @@
    *     A handle to the source face object.
    *
    * @return:
-   *   A pointer to the face's PostScript name.  NULL if unavailable.
+   *   A pointer to the face's PostScript name.  `NULL` if unavailable.
    *
    * @note:
-   *   The returned pointer is owned by the face and is destroyed with
-   *   it.
+   *   The returned pointer is owned by the face and is destroyed with it.
    *
    *   For variation fonts, this string changes if you select a different
-   *   instance, and you have to call `FT_Get_PostScript_Name' again to
-   *   retrieve it.  FreeType follows Adobe TechNote #5902, `Generating
+   *   instance, and you have to call `FT_Get_PostScript_Name` again to
+   *   retrieve it.  FreeType follows Adobe TechNote #5902, 'Generating
    *   PostScript Names for Fonts Using OpenType Font Variations'.
    *
    *     https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html
    *
    *   [Since 2.9] Special PostScript names for named instances are only
-   *   returned if the named instance is set with @FT_Set_Named_Instance
-   *   (and the font has corresponding entries in its `fvar' table).  If
-   *   @FT_IS_VARIATION returns true, the algorithmically derived
-   *   PostScript name is provided, not looking up special entries for
-   *   named instances.
+   *   returned if the named instance is set with @FT_Set_Named_Instance (and
+   *   the font has corresponding entries in its 'fvar' table).  If
+   *   @FT_IS_VARIATION returns true, the algorithmically derived PostScript
+   *   name is provided, not looking up special entries for named instances.
    */
   FT_EXPORT( const char* )
   FT_Get_Postscript_Name( FT_Face  face );
@@ -3745,7 +3613,7 @@
    *
    * @description:
    *   Select a given charmap by its encoding tag (as listed in
-   *   `freetype.h').
+   *   `freetype.h`).
    *
    * @inout:
    *   face ::
@@ -3759,14 +3627,14 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function returns an error if no charmap in the face
-   *   corresponds to the encoding queried here.
+   *   This function returns an error if no charmap in the face corresponds
+   *   to the encoding queried here.
    *
    *   Because many fonts contain more than a single cmap for Unicode
-   *   encoding, this function has some special code to select the one
-   *   that covers Unicode best (`best' in the sense that a UCS-4 cmap is
-   *   preferred to a UCS-2 cmap).  It is thus preferable to
-   *   @FT_Set_Charmap in this case.
+   *   encoding, this function has some special code to select the one that
+   *   covers Unicode best ('best' in the sense that a UCS-4 cmap is
+   *   preferred to a UCS-2 cmap).  It is thus preferable to @FT_Set_Charmap
+   *   in this case.
    */
   FT_EXPORT( FT_Error )
   FT_Select_Charmap( FT_Face      face,
@@ -3793,9 +3661,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function returns an error if the charmap is not part of
-   *   the face (i.e., if it is not listed in the `face->charmaps'
-   *   table).
+   *   This function returns an error if the charmap is not part of the face
+   *   (i.e., if it is not listed in the `face->charmaps` table).
    *
    *   It also fails if an OpenType type~14 charmap is selected (which
    *   doesn't map character codes to glyph indices at all).
@@ -3805,7 +3672,7 @@
                   FT_CharMap  charmap );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Get_Charmap_Index
@@ -3819,7 +3686,7 @@
    *
    * @return:
    *   The index into the array of character maps within the face to which
-   *   `charmap' belongs.  If an error occurs, -1 is returned.
+   *   `charmap` belongs.  If an error occurs, -1 is returned.
    *
    */
   FT_EXPORT( FT_Int )
@@ -3832,8 +3699,8 @@
    *   FT_Get_Char_Index
    *
    * @description:
-   *   Return the glyph index of a given character code.  This function
-   *   uses the currently selected charmap to do the mapping.
+   *   Return the glyph index of a given character code.  This function uses
+   *   the currently selected charmap to do the mapping.
    *
    * @input:
    *   face ::
@@ -3843,20 +3710,19 @@
    *     The character code.
    *
    * @return:
-   *   The glyph index.  0~means `undefined character code'.
+   *   The glyph index.  0~means 'undefined character code'.
    *
    * @note:
-   *   If you use FreeType to manipulate the contents of font files
-   *   directly, be aware that the glyph index returned by this function
-   *   doesn't always correspond to the internal indices used within the
-   *   file.  This is done to ensure that value~0 always corresponds to
-   *   the `missing glyph'.  If the first glyph is not named `.notdef',
-   *   then for Type~1 and Type~42 fonts, `.notdef' will be moved into
-   *   the glyph ID~0 position, and whatever was there will be moved to
-   *   the position `.notdef' had.  For Type~1 fonts, if there is no
-   *   `.notdef' glyph at all, then one will be created at index~0 and
-   *   whatever was there will be moved to the last index -- Type~42
-   *   fonts are considered invalid under this condition.
+   *   If you use FreeType to manipulate the contents of font files directly,
+   *   be aware that the glyph index returned by this function doesn't always
+   *   correspond to the internal indices used within the file.  This is done
+   *   to ensure that value~0 always corresponds to the 'missing glyph'.  If
+   *   the first glyph is not named '.notdef', then for Type~1 and Type~42
+   *   fonts, '.notdef' will be moved into the glyph ID~0 position, and
+   *   whatever was there will be moved to the position '.notdef' had.  For
+   *   Type~1 fonts, if there is no '.notdef' glyph at all, then one will be
+   *   created at index~0 and whatever was there will be moved to the last
+   *   index -- Type~42 fonts are considered invalid under this condition.
    */
   FT_EXPORT( FT_UInt )
   FT_Get_Char_Index( FT_Face   face,
@@ -3878,18 +3744,17 @@
    *
    * @output:
    *   agindex ::
-   *     Glyph index of first character code.  0~if charmap is
-   *     empty.
+   *     Glyph index of first character code.  0~if charmap is empty.
    *
    * @return:
    *   The charmap's first character code.
    *
    * @note:
-   *   You should use this function together with @FT_Get_Next_Char to
-   *   parse all character codes available in a given charmap.  The code
-   *   should look like this:
+   *   You should use this function together with @FT_Get_Next_Char to parse
+   *   all character codes available in a given charmap.  The code should
+   *   look like this:
    *
-   *   {
+   *   ```
    *     FT_ULong  charcode;
    *     FT_UInt   gindex;
    *
@@ -3901,18 +3766,18 @@
    *
    *       charcode = FT_Get_Next_Char( face, charcode, &gindex );
    *     }
-   *   }
+   *   ```
    *
-   *   Be aware that character codes can have values up to 0xFFFFFFFF;
-   *   this might happen for non-Unicode or malformed cmaps.  However,
-   *   even with regular Unicode encoding, so-called `last resort fonts'
-   *   (using SFNT cmap format 13, see function @FT_Get_CMap_Format)
-   *   normally have entries for all Unicode characters up to 0x1FFFFF,
-   *   which can cause *a lot* of iterations.
+   *   Be aware that character codes can have values up to 0xFFFFFFFF; this
+   *   might happen for non-Unicode or malformed cmaps.  However, even with
+   *   regular Unicode encoding, so-called 'last resort fonts' (using SFNT
+   *   cmap format 13, see function @FT_Get_CMap_Format) normally have
+   *   entries for all Unicode characters up to 0x1FFFFF, which can cause *a
+   *   lot* of iterations.
    *
-   *   Note that `*agindex' is set to~0 if the charmap is empty.  The
-   *   result itself can be~0 in two cases: if the charmap is empty or
-   *   if the value~0 is the first valid character code.
+   *   Note that `*agindex` is set to~0 if the charmap is empty.  The result
+   *   itself can be~0 in two cases: if the charmap is empty or if the
+   *   value~0 is the first valid character code.
    */
   FT_EXPORT( FT_ULong )
   FT_Get_First_Char( FT_Face   face,
@@ -3925,9 +3790,9 @@
    *   FT_Get_Next_Char
    *
    * @description:
-   *   Return the next character code in the current charmap of a given
-   *   face following the value `char_code', as well as the corresponding
-   *   glyph index.
+   *   Return the next character code in the current charmap of a given face
+   *   following the value `char_code`, as well as the corresponding glyph
+   *   index.
    *
    * @input:
    *   face ::
@@ -3938,19 +3803,18 @@
    *
    * @output:
    *   agindex ::
-   *     Glyph index of next character code.  0~if charmap
-   *     is empty.
+   *     Glyph index of next character code.  0~if charmap is empty.
    *
    * @return:
    *   The charmap's next character code.
    *
    * @note:
-   *   You should use this function with @FT_Get_First_Char to walk
-   *   over all character codes available in a given charmap.  See the
-   *   note for that function for a simple code example.
+   *   You should use this function with @FT_Get_First_Char to walk over all
+   *   character codes available in a given charmap.  See the note for that
+   *   function for a simple code example.
    *
-   *   Note that `*agindex' is set to~0 when there are no more codes in
-   *   the charmap.
+   *   Note that `*agindex` is set to~0 when there are no more codes in the
+   *   charmap.
    */
   FT_EXPORT( FT_ULong )
   FT_Get_Next_Char( FT_Face    face,
@@ -3958,7 +3822,7 @@
                     FT_UInt   *agindex );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Face_Properties
@@ -3966,27 +3830,26 @@
    * @description:
    *   Set or override certain (library or module-wide) properties on a
    *   face-by-face basis.  Useful for finer-grained control and avoiding
-   *   locks on shared structures (threads can modify their own faces as
-   *   they see fit).
+   *   locks on shared structures (threads can modify their own faces as they
+   *   see fit).
    *
-   *   Contrary to @FT_Property_Set, this function uses @FT_Parameter so
-   *   that you can pass multiple properties to the target face in one call.
-   *   Note that only a subset of the available properties can be
-   *   controlled.
+   *   Contrary to @FT_Property_Set, this function uses @FT_Parameter so that
+   *   you can pass multiple properties to the target face in one call.  Note
+   *   that only a subset of the available properties can be controlled.
    *
    *   * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the
-   *     property `no-stem-darkening' provided by the `autofit', `cff',
-   *     `type1', and `t1cid' modules; see @no-stem-darkening).
+   *     property `no-stem-darkening` provided by the 'autofit', 'cff',
+   *     'type1', and 't1cid' modules; see @no-stem-darkening).
    *
    *   * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding
    *     to function @FT_Library_SetLcdFilterWeights).
    *
    *   * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID
-   *     `random' operator, corresponding to the `random-seed' property
-   *     provided by the `cff', `type1', and `t1cid' modules; see
+   *     'random' operator, corresponding to the `random-seed` property
+   *     provided by the 'cff', 'type1', and 't1cid' modules; see
    *     @random-seed).
    *
-   *   Pass NULL as `data' in @FT_Parameter for a given tag to reset the
+   *   Pass `NULL` as `data` in @FT_Parameter for a given tag to reset the
    *   option and use the library or module default again.
    *
    * @input:
@@ -3997,17 +3860,17 @@
    *     The number of properties that follow.
    *
    *   properties ::
-   *     A handle to an @FT_Parameter array with `num_properties' elements.
+   *     A handle to an @FT_Parameter array with `num_properties` elements.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @example:
-   *   Here an example that sets three properties.  You must define
-   *   FT_CONFIG_OPTION_SUBPIXEL_RENDERING to make the LCD filter examples
+   *   Here is an example that sets three properties.  You must define
+   *   `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` to make the LCD filter examples
    *   work.
    *
-   *   {
+   *   ```
    *     FT_Parameter         property1;
    *     FT_Bool              darken_stems = 1;
    *
@@ -4033,11 +3896,11 @@
    *     property3.data = &random_seed;
    *
    *     FT_Face_Properties( face, 3, properties );
-   *   }
+   *   ```
    *
    *   The next example resets a single property to its default value.
    *
-   *   {
+   *   ```
    *     FT_Parameter  property;
    *
    *
@@ -4045,7 +3908,7 @@
    *     property.data = NULL;
    *
    *     FT_Face_Properties( face, 1, &property );
-   *   }
+   *   ```
    *
    * @since:
    *   2.8
@@ -4073,23 +3936,22 @@
    *     The glyph name.
    *
    * @return:
-   *   The glyph index.  0~means `undefined character code'.
+   *   The glyph index.  0~means 'undefined character code'.
    */
   FT_EXPORT( FT_UInt )
-  FT_Get_Name_Index( FT_Face     face,
-                     FT_String*  glyph_name );
+  FT_Get_Name_Index( FT_Face           face,
+                     const FT_String*  glyph_name );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_SUBGLYPH_FLAG_XXX
    *
    * @description:
-   *   A list of constants describing subglyphs.  Please refer to the
-   *   `glyf' table description in the OpenType specification for the
-   *   meaning of the various flags (which get synthesized for
-   *   non-OpenType subglyphs).
+   *   A list of constants describing subglyphs.  Please refer to the 'glyf'
+   *   table description in the OpenType specification for the meaning of the
+   *   various flags (which get synthesized for non-OpenType subglyphs).
    *
    *     https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description
    *
@@ -4112,15 +3974,15 @@
 #define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Get_SubGlyph_Info
    *
    * @description:
    *   Retrieve a description of a given subglyph.  Only use it if
-   *   `glyph->format' is @FT_GLYPH_FORMAT_COMPOSITE; an error is
-   *   returned otherwise.
+   *   `glyph->format` is @FT_GLYPH_FORMAT_COMPOSITE; an error is returned
+   *   otherwise.
    *
    * @input:
    *   glyph ::
@@ -4128,7 +3990,7 @@
    *
    *   sub_index ::
    *     The index of the subglyph.  Must be less than
-   *     `glyph->num_subglyphs'.
+   *     `glyph->num_subglyphs`.
    *
    * @output:
    *   p_index ::
@@ -4150,10 +4012,12 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The values of `*p_arg1', `*p_arg2', and `*p_transform' must be
-   *   interpreted depending on the flags returned in `*p_flags'.  See the
+   *   The values of `*p_arg1`, `*p_arg2`, and `*p_transform` must be
+   *   interpreted depending on the flags returned in `*p_flags`.  See the
    *   OpenType specification for details.
    *
+   *     https://docs.microsoft.com/en-us/typography/opentype/spec/glyf#composite-glyph-description
+   *
    */
   FT_EXPORT( FT_Error )
   FT_Get_SubGlyph_Info( FT_GlyphSlot  glyph,
@@ -4174,15 +4038,15 @@
    *   Glyph Layer Management
    *
    * @abstract:
-   *   Retrieving and manipulating OpenType's `COLR' table data.
+   *   Retrieving and manipulating OpenType's 'COLR' table data.
    *
    * @description:
    *   The functions described here allow access of colored glyph layer data
-   *   in OpenType's `COLR' tables.
+   *   in OpenType's 'COLR' tables.
    */
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_LayerIterator
@@ -4199,8 +4063,8 @@
    *     The current layer.  Will be set by @FT_Get_Color_Glyph_Layer.
    *
    *   p ::
-   *     An opaque pointer into `COLR' table data.  The caller must set this
-   *     to NULL before the first call of @FT_Get_Color_Glyph_Layer.
+   *     An opaque pointer into 'COLR' table data.  The caller must set this
+   *     to `NULL` before the first call of @FT_Get_Color_Glyph_Layer.
    */
   typedef struct  FT_LayerIterator_
   {
@@ -4211,13 +4075,13 @@
   } FT_LayerIterator;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Get_Color_Glyph_Layer
    *
    * @description:
-   *   This is an interface to the `COLR' table in OpenType fonts to
+   *   This is an interface to the 'COLR' table in OpenType fonts to
    *   iteratively retrieve the colored glyph layers associated with the
    *   current glyph slot.
    *
@@ -4230,7 +4094,7 @@
    *   layer.
    *
    *   The returned elements are ordered in the z~direction from bottom to
-   *   top; the `n'th element should be rendered with the associated palette
+   *   top; the 'n'th element should be rendered with the associated palette
    *   color and blended on top of the already rendered layers (elements 0,
    *   1, ..., n-1).
    *
@@ -4244,7 +4108,7 @@
    * @inout:
    *   iterator ::
    *     An @FT_LayerIterator object.  For the first call you should set
-   *     `iterator->p' to NULL.  For all following calls, simply use the
+   *     `iterator->p` to `NULL`.  For all following calls, simply use the
    *     same object again.
    *
    * @output:
@@ -4260,9 +4124,9 @@
    *     The color palette can be retrieved with @FT_Palette_Select.
    *
    * @return:
-   *   Value~1 if everything is OK.  If there are no more layers (or if
-   *   there are no layers at all), value~0 gets returned.  In case of an
-   *   error, value~0 is returned also.
+   *   Value~1 if everything is OK.  If there are no more layers (or if there
+   *   are no layers at all), value~0 gets returned.  In case of an error,
+   *   value~0 is returned also.
    *
    * @note:
    *   This function is necessary if you want to handle glyph layers by
@@ -4270,11 +4134,12 @@
    *   objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access
    *   to this information.
    *
-   *   @FT_Render_Glyph, however, handles colored glyph layers
-   *   automatically if the @FT_LOAD_COLOR flag is passed to it.
+   *   Note that @FT_Render_Glyph is able to handle colored glyph layers
+   *   automatically if the @FT_LOAD_COLOR flag is passed to a previous call
+   *   to @FT_Load_Glyph.  [This is an experimental feature.]
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Color*         palette;
    *     FT_LayerIterator  iterator;
    *
@@ -4316,7 +4181,7 @@
    *                                           &layer_color_index,
    *                                           &iterator ) );
    *     }
-   *   }
+   *   ```
    */
   FT_EXPORT( FT_Bool )
   FT_Get_Color_Glyph_Layer( FT_Face            face,
@@ -4339,11 +4204,11 @@
    *   FT_FSTYPE_XXX
    *
    * @description:
-   *   A list of bit flags used in the `fsType' field of the OS/2 table
-   *   in a TrueType or OpenType font and the `FSType' entry in a
-   *   PostScript font.  These bit flags are returned by
-   *   @FT_Get_FSType_Flags; they inform client applications of embedding
-   *   and subsetting restrictions associated with a font.
+   *   A list of bit flags used in the `fsType` field of the OS/2 table in a
+   *   TrueType or OpenType font and the `FSType` entry in a PostScript font.
+   *   These bit flags are returned by @FT_Get_FSType_Flags; they inform
+   *   client applications of embedding and subsetting restrictions
+   *   associated with a font.
    *
    *   See
    *   https://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/FontPolicies.pdf
@@ -4355,36 +4220,36 @@
    *     installed on the remote system by an application.
    *
    *   FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING ::
-   *     Fonts that have only this bit set must not be modified, embedded
-   *     or exchanged in any manner without first obtaining permission of
-   *     the font software copyright owner.
+   *     Fonts that have only this bit set must not be modified, embedded or
+   *     exchanged in any manner without first obtaining permission of the
+   *     font software copyright owner.
    *
    *   FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING ::
    *     The font may be embedded and temporarily loaded on the remote
-   *     system.  Documents containing Preview & Print fonts must be
-   *     opened `read-only'; no edits can be applied to the document.
+   *     system.  Documents containing Preview & Print fonts must be opened
+   *     'read-only'; no edits can be applied to the document.
    *
    *   FT_FSTYPE_EDITABLE_EMBEDDING ::
-   *     The font may be embedded but must only be installed temporarily
-   *     on other systems.  In contrast to Preview & Print fonts,
-   *     documents containing editable fonts may be opened for reading,
-   *     editing is permitted, and changes may be saved.
+   *     The font may be embedded but must only be installed temporarily on
+   *     other systems.  In contrast to Preview & Print fonts, documents
+   *     containing editable fonts may be opened for reading, editing is
+   *     permitted, and changes may be saved.
    *
    *   FT_FSTYPE_NO_SUBSETTING ::
    *     The font may not be subsetted prior to embedding.
    *
    *   FT_FSTYPE_BITMAP_EMBEDDING_ONLY ::
-   *     Only bitmaps contained in the font may be embedded; no outline
-   *     data may be embedded.  If there are no bitmaps available in the
-   *     font, then the font is unembeddable.
+   *     Only bitmaps contained in the font may be embedded; no outline data
+   *     may be embedded.  If there are no bitmaps available in the font,
+   *     then the font is unembeddable.
    *
    * @note:
    *   The flags are ORed together, thus more than a single value can be
    *   returned.
    *
-   *   While the `fsType' flags can indicate that a font may be embedded,
-   *   a license with the font vendor may be separately required to use
-   *   the font in this way.
+   *   While the `fsType` flags can indicate that a font may be embedded, a
+   *   license with the font vendor may be separately required to use the
+   *   font in this way.
    */
 #define FT_FSTYPE_INSTALLABLE_EMBEDDING         0x0000
 #define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING  0x0002
@@ -4400,19 +4265,19 @@
    *   FT_Get_FSType_Flags
    *
    * @description:
-   *   Return the `fsType' flags for a font.
+   *   Return the `fsType` flags for a font.
    *
    * @input:
    *   face ::
    *     A handle to the source face object.
    *
    * @return:
-   *   The `fsType' flags, see @FT_FSTYPE_XXX.
+   *   The `fsType` flags, see @FT_FSTYPE_XXX.
    *
    * @note:
-   *   Use this function rather than directly reading the `fs_type' field
-   *   in the @PS_FontInfoRec structure, which is only guaranteed to
-   *   return the correct results for Type~1 fonts.
+   *   Use this function rather than directly reading the `fs_type` field in
+   *   the @PS_FontInfoRec structure, which is only guaranteed to return the
+   *   correct results for Type~1 fonts.
    *
    * @since:
    *   2.3.8
@@ -4430,48 +4295,45 @@
    *   Unicode Variation Sequences
    *
    * @abstract:
-   *   The FreeType~2 interface to Unicode Variation Sequences (UVS),
-   *   using the SFNT cmap format~14.
+   *   The FreeType~2 interface to Unicode Variation Sequences (UVS), using
+   *   the SFNT cmap format~14.
    *
    * @description:
-   *   Many characters, especially for CJK scripts, have variant forms.
-   *   They are a sort of grey area somewhere between being totally
-   *   irrelevant and semantically distinct; for this reason, the Unicode
-   *   consortium decided to introduce Variation Sequences (VS),
-   *   consisting of a Unicode base character and a variation selector
-   *   instead of further extending the already huge number of
-   *   characters.
+   *   Many characters, especially for CJK scripts, have variant forms.  They
+   *   are a sort of grey area somewhere between being totally irrelevant and
+   *   semantically distinct; for this reason, the Unicode consortium decided
+   *   to introduce Variation Sequences (VS), consisting of a Unicode base
+   *   character and a variation selector instead of further extending the
+   *   already huge number of characters.
    *
-   *   Unicode maintains two different sets, namely `Standardized
-   *   Variation Sequences' and registered `Ideographic Variation
-   *   Sequences' (IVS), collected in the `Ideographic Variation
-   *   Database' (IVD).
+   *   Unicode maintains two different sets, namely 'Standardized Variation
+   *   Sequences' and registered 'Ideographic Variation Sequences' (IVS),
+   *   collected in the 'Ideographic Variation Database' (IVD).
    *
    *     https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt
-   *     https://unicode.org/reports/tr37/
-   *     https://unicode.org/ivd/
+   *     https://unicode.org/reports/tr37/ https://unicode.org/ivd/
    *
    *   To date (January 2017), the character with the most ideographic
    *   variations is U+9089, having 32 such IVS.
    *
-   *   Three Mongolian Variation Selectors have the values U+180B-U+180D;
-   *   256 generic Variation Selectors are encoded in the ranges
-   *   U+FE00-U+FE0F and U+E0100-U+E01EF.  IVS currently use Variation
-   *   Selectors from the range U+E0100-U+E01EF only.
+   *   Three Mongolian Variation Selectors have the values U+180B-U+180D; 256
+   *   generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F
+   *   and U+E0100-U+E01EF.  IVS currently use Variation Selectors from the
+   *   range U+E0100-U+E01EF only.
    *
    *   A VS consists of the base character value followed by a single
    *   Variation Selector.  For example, to get the first variation of
-   *   U+9089, you have to write the character sequence `U+9089 U+E0100'.
+   *   U+9089, you have to write the character sequence `U+9089 U+E0100`.
    *
-   *   Adobe and MS decided to support both standardized and ideographic
-   *   VS with a new cmap subtable (format~14).  It is an odd subtable
-   *   because it is not a mapping of input code points to glyphs, but
-   *   contains lists of all variations supported by the font.
+   *   Adobe and MS decided to support both standardized and ideographic VS
+   *   with a new cmap subtable (format~14).  It is an odd subtable because
+   *   it is not a mapping of input code points to glyphs, but contains lists
+   *   of all variations supported by the font.
    *
-   *   A variation may be either `default' or `non-default' for a given
-   *   font.  A default variation is the one you will get for that code
-   *   point if you look it up in the standard Unicode cmap.  A
-   *   non-default variation is a different glyph.
+   *   A variation may be either 'default' or 'non-default' for a given font.
+   *   A default variation is the one you will get for that code point if you
+   *   look it up in the standard Unicode cmap.  A non-default variation is a
+   *   different glyph.
    *
    */
 
@@ -4482,8 +4344,8 @@
    *   FT_Face_GetCharVariantIndex
    *
    * @description:
-   *   Return the glyph index of a given character code as modified by
-   *   the variation selector.
+   *   Return the glyph index of a given character code as modified by the
+   *   variation selector.
    *
    * @input:
    *   face ::
@@ -4496,20 +4358,18 @@
    *     The Unicode code point of the variation selector.
    *
    * @return:
-   *   The glyph index.  0~means either `undefined character code', or
-   *   `undefined selector code', or `no variation selector cmap
-   *   subtable', or `current CharMap is not Unicode'.
+   *   The glyph index.  0~means either 'undefined character code', or
+   *   'undefined selector code', or 'no variation selector cmap subtable',
+   *   or 'current CharMap is not Unicode'.
    *
    * @note:
-   *   If you use FreeType to manipulate the contents of font files
-   *   directly, be aware that the glyph index returned by this function
-   *   doesn't always correspond to the internal indices used within
-   *   the file.  This is done to ensure that value~0 always corresponds
-   *   to the `missing glyph'.
+   *   If you use FreeType to manipulate the contents of font files directly,
+   *   be aware that the glyph index returned by this function doesn't always
+   *   correspond to the internal indices used within the file.  This is done
+   *   to ensure that value~0 always corresponds to the 'missing glyph'.
    *
    *   This function is only meaningful if
-   *     a) the font has a variation selector cmap sub table,
-   *   and
+   *     a) the font has a variation selector cmap sub table, and
    *     b) the current charmap has a Unicode encoding.
    *
    * @since:
@@ -4527,8 +4387,8 @@
    *   FT_Face_GetCharVariantIsDefault
    *
    * @description:
-   *   Check whether this variation of this Unicode character is the one
-   *   to be found in the `cmap'.
+   *   Check whether this variation of this Unicode character is the one to
+   *   be found in the charmap.
    *
    * @input:
    *   face ::
@@ -4541,12 +4401,12 @@
    *     The Unicode codepoint of the variation selector.
    *
    * @return:
-   *   1~if found in the standard (Unicode) cmap, 0~if found in the
-   *   variation selector cmap, or -1 if it is not a variation.
+   *   1~if found in the standard (Unicode) cmap, 0~if found in the variation
+   *   selector cmap, or -1 if it is not a variation.
    *
    * @note:
-   *   This function is only meaningful if the font has a variation
-   *   selector cmap subtable.
+   *   This function is only meaningful if the font has a variation selector
+   *   cmap subtable.
    *
    * @since:
    *   2.3.6
@@ -4563,21 +4423,21 @@
    *   FT_Face_GetVariantSelectors
    *
    * @description:
-   *   Return a zero-terminated list of Unicode variation selectors found
-   *   in the font.
+   *   Return a zero-terminated list of Unicode variation selectors found in
+   *   the font.
    *
    * @input:
    *   face ::
    *     A handle to the source face object.
    *
    * @return:
-   *   A pointer to an array of selector code points, or NULL if there is
+   *   A pointer to an array of selector code points, or `NULL` if there is
    *   no valid variation selector cmap subtable.
    *
    * @note:
-   *   The last item in the array is~0; the array is owned by the
-   *   @FT_Face object but can be overwritten or released on the next
-   *   call to a FreeType function.
+   *   The last item in the array is~0; the array is owned by the @FT_Face
+   *   object but can be overwritten or released on the next call to a
+   *   FreeType function.
    *
    * @since:
    *   2.3.6
@@ -4592,8 +4452,8 @@
    *   FT_Face_GetVariantsOfChar
    *
    * @description:
-   *   Return a zero-terminated list of Unicode variation selectors found
-   *   for the specified character code.
+   *   Return a zero-terminated list of Unicode variation selectors found for
+   *   the specified character code.
    *
    * @input:
    *   face ::
@@ -4604,13 +4464,13 @@
    *
    * @return:
    *   A pointer to an array of variation selector code points that are
-   *   active for the given character, or NULL if the corresponding list
-   *   is empty.
+   *   active for the given character, or `NULL` if the corresponding list is
+   *   empty.
    *
    * @note:
-   *   The last item in the array is~0; the array is owned by the
-   *   @FT_Face object but can be overwritten or released on the next
-   *   call to a FreeType function.
+   *   The last item in the array is~0; the array is owned by the @FT_Face
+   *   object but can be overwritten or released on the next call to a
+   *   FreeType function.
    *
    * @since:
    *   2.3.6
@@ -4626,8 +4486,8 @@
    *   FT_Face_GetCharsOfVariant
    *
    * @description:
-   *   Return a zero-terminated list of Unicode character codes found for
-   *   the specified variation selector.
+   *   Return a zero-terminated list of Unicode character codes found for the
+   *   specified variation selector.
    *
    * @input:
    *   face ::
@@ -4638,13 +4498,13 @@
    *
    * @return:
    *   A list of all the code points that are specified by this selector
-   *   (both default and non-default codes are returned) or NULL if there
+   *   (both default and non-default codes are returned) or `NULL` if there
    *   is no valid cmap or the variation selector is invalid.
    *
    * @note:
-   *   The last item in the array is~0; the array is owned by the
-   *   @FT_Face object but can be overwritten or released on the next
-   *   call to a FreeType function.
+   *   The last item in the array is~0; the array is owned by the @FT_Face
+   *   object but can be overwritten or released on the next call to a
+   *   FreeType function.
    *
    * @since:
    *   2.3.6
@@ -4666,8 +4526,13 @@
    *   Crunching fixed numbers and vectors.
    *
    * @description:
-   *   This section contains various functions used to perform
-   *   computations on 16.16 fixed-float numbers or 2d vectors.
+   *   This section contains various functions used to perform computations
+   *   on 16.16 fixed-float numbers or 2d vectors.
+   *
+   *   **Attention**: Most arithmetic functions take `FT_Long` as arguments.
+   *   For historical reasons, FreeType was designed under the assumption
+   *   that `FT_Long` is a 32-bit integer; results can thus be undefined if
+   *   the arguments don't fit into 32 bits.
    *
    * @order:
    *   FT_MulDiv
@@ -4689,8 +4554,8 @@
    *   FT_MulDiv
    *
    * @description:
-   *   Compute `(a*b)/c' with maximum accuracy, using a 64-bit
-   *   intermediate integer whenever necessary.
+   *   Compute `(a*b)/c` with maximum accuracy, using a 64-bit intermediate
+   *   integer whenever necessary.
    *
    *   This function isn't necessarily as fast as some processor-specific
    *   operations, but is at least completely portable.
@@ -4706,9 +4571,9 @@
    *     The divisor.
    *
    * @return:
-   *   The result of `(a*b)/c'.  This function never traps when trying to
-   *   divide by zero; it simply returns `MaxInt' or `MinInt' depending
-   *   on the signs of `a' and `b'.
+   *   The result of `(a*b)/c`.  This function never traps when trying to
+   *   divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on
+   *   the signs of `a` and `b`.
    */
   FT_EXPORT( FT_Long )
   FT_MulDiv( FT_Long  a,
@@ -4722,7 +4587,7 @@
    *   FT_MulFix
    *
    * @description:
-   *   Compute `(a*b)/0x10000' with maximum accuracy.  Its main use is to
+   *   Compute `(a*b)/0x10000` with maximum accuracy.  Its main use is to
    *   multiply a given value by a 16.16 fixed-point factor.
    *
    * @input:
@@ -4730,22 +4595,21 @@
    *     The first multiplier.
    *
    *   b ::
-   *     The second multiplier.  Use a 16.16 factor here whenever
-   *     possible (see note below).
+   *     The second multiplier.  Use a 16.16 factor here whenever possible
+   *     (see note below).
    *
    * @return:
-   *   The result of `(a*b)/0x10000'.
+   *   The result of `(a*b)/0x10000`.
    *
    * @note:
-   *   This function has been optimized for the case where the absolute
-   *   value of `a' is less than 2048, and `b' is a 16.16 scaling factor.
-   *   As this happens mainly when scaling from notional units to
-   *   fractional pixels in FreeType, it resulted in noticeable speed
-   *   improvements between versions 2.x and 1.x.
+   *   This function has been optimized for the case where the absolute value
+   *   of `a` is less than 2048, and `b` is a 16.16 scaling factor.  As this
+   *   happens mainly when scaling from notional units to fractional pixels
+   *   in FreeType, it resulted in noticeable speed improvements between
+   *   versions 2.x and 1.x.
    *
-   *   As a conclusion, always try to place a 16.16 factor as the
-   *   _second_ argument of this function; this can make a great
-   *   difference.
+   *   As a conclusion, always try to place a 16.16 factor as the _second_
+   *   argument of this function; this can make a great difference.
    */
   FT_EXPORT( FT_Long )
   FT_MulFix( FT_Long  a,
@@ -4758,7 +4622,7 @@
    *   FT_DivFix
    *
    * @description:
-   *   Compute `(a*0x10000)/b' with maximum accuracy.  Its main use is to
+   *   Compute `(a*0x10000)/b` with maximum accuracy.  Its main use is to
    *   divide a given value by a 16.16 fixed-point factor.
    *
    * @input:
@@ -4769,7 +4633,7 @@
    *     The denominator.  Use a 16.16 factor here.
    *
    * @return:
-   *   The result of `(a*0x10000)/b'.
+   *   The result of `(a*0x10000)/b`.
    */
   FT_EXPORT( FT_Long )
   FT_DivFix( FT_Long  a,
@@ -4789,7 +4653,7 @@
    *     The number to be rounded.
    *
    * @return:
-   *   `a' rounded to the nearest 16.16 fixed integer, halfway cases away
+   *   `a` rounded to the nearest 16.16 fixed integer, halfway cases away
    *   from zero.
    *
    * @note:
@@ -4812,7 +4676,7 @@
    *     The number for which the ceiling function is to be computed.
    *
    * @return:
-   *   `a' rounded towards plus infinity.
+   *   `a` rounded towards plus infinity.
    *
    * @note:
    *   The function uses wrap-around arithmetic.
@@ -4834,7 +4698,7 @@
    *     The number for which the floor function is to be computed.
    *
    * @return:
-   *   `a' rounded towards minus infinity.
+   *   `a` rounded towards minus infinity.
    */
   FT_EXPORT( FT_Fixed )
   FT_FloorFix( FT_Fixed  a );
@@ -4857,10 +4721,10 @@
    *     A pointer to the source 2x2 matrix.
    *
    * @note:
-   *   The result is undefined if either `vector' or `matrix' is invalid.
+   *   The result is undefined if either `vector` or `matrix` is invalid.
    */
   FT_EXPORT( void )
-  FT_Vector_Transform( FT_Vector*        vec,
+  FT_Vector_Transform( FT_Vector*        vector,
                        const FT_Matrix*  matrix );
 
 
@@ -4876,9 +4740,9 @@
    *   Functions and macros related to FreeType versions.
    *
    * @description:
-   *   Note that those functions and macros are of limited use because
-   *   even a new release of FreeType with only documentation changes
-   *   increases the version number.
+   *   Note that those functions and macros are of limited use because even a
+   *   new release of FreeType with only documentation changes increases the
+   *   version number.
    *
    * @order:
    *   FT_Library_Version
@@ -4893,14 +4757,14 @@
    */
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FREETYPE_XXX
    *
    * @description:
-   *   These three macros identify the FreeType source code version.
-   *   Use @FT_Library_Version to access them at runtime.
+   *   These three macros identify the FreeType source code version.  Use
+   *   @FT_Library_Version to access them at runtime.
    *
    * @values:
    *   FREETYPE_MAJOR ::
@@ -4911,13 +4775,12 @@
    *     The patch level.
    *
    * @note:
-   *   The version number of FreeType if built as a dynamic link library
-   *   with the `libtool' package is _not_ controlled by these three
-   *   macros.
+   *   The version number of FreeType if built as a dynamic link library with
+   *   the 'libtool' package is _not_ controlled by these three macros.
    *
    */
 #define FREETYPE_MAJOR  2
-#define FREETYPE_MINOR  9
+#define FREETYPE_MINOR  10
 #define FREETYPE_PATCH  1
 
 
@@ -4927,10 +4790,9 @@
    *   FT_Library_Version
    *
    * @description:
-   *   Return the version of the FreeType library being used.  This is
-   *   useful when dynamically linking to the library, since one cannot
-   *   use the macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and
-   *   @FREETYPE_PATCH.
+   *   Return the version of the FreeType library being used.  This is useful
+   *   when dynamically linking to the library, since one cannot use the
+   *   macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and @FREETYPE_PATCH.
    *
    * @input:
    *   library ::
@@ -4947,12 +4809,12 @@
    *     The patch version number.
    *
    * @note:
-   *   The reason why this function takes a `library' argument is because
-   *   certain programs implement library initialization in a custom way
-   *   that doesn't use @FT_Init_FreeType.
+   *   The reason why this function takes a `library` argument is because
+   *   certain programs implement library initialization in a custom way that
+   *   doesn't use @FT_Init_FreeType.
    *
-   *   In such cases, the library version might not be available before
-   *   the library object has been created.
+   *   In such cases, the library version might not be available before the
+   *   library object has been created.
    */
   FT_EXPORT( void )
   FT_Library_Version( FT_Library   library,
diff --git a/include/freetype/ftadvanc.h b/include/freetype/ftadvanc.h
index 9c3f545..95c38f9 100644
--- a/include/freetype/ftadvanc.h
+++ b/include/freetype/ftadvanc.h
@@ -4,7 +4,7 @@
  *
  *   Quick computation of advance widths (specification only).
  *
- * Copyright 2008-2018 by
+ * Copyright (C) 2008-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -62,20 +62,18 @@
    *   FT_ADVANCE_FLAG_FAST_ONLY
    *
    * @description:
-   *   A bit-flag to be OR-ed with the `flags' parameter of the
+   *   A bit-flag to be OR-ed with the `flags` parameter of the
    *   @FT_Get_Advance and @FT_Get_Advances functions.
    *
    *   If set, it indicates that you want these functions to fail if the
-   *   corresponding hinting mode or font driver doesn't allow for very
-   *   quick advance computation.
+   *   corresponding hinting mode or font driver doesn't allow for very quick
+   *   advance computation.
    *
-   *   Typically, glyphs that are either unscaled, unhinted, bitmapped,
-   *   or light-hinted can have their advance width computed very
-   *   quickly.
+   *   Typically, glyphs that are either unscaled, unhinted, bitmapped, or
+   *   light-hinted can have their advance width computed very quickly.
    *
-   *   Normal and bytecode hinted modes that require loading, scaling,
-   *   and hinting of the glyph outline, are extremely slow by
-   *   comparison.
+   *   Normal and bytecode hinted modes that require loading, scaling, and
+   *   hinting of the glyph outline, are extremely slow by comparison.
    */
 #define FT_ADVANCE_FLAG_FAST_ONLY  0x20000000L
 
@@ -86,8 +84,7 @@
    *   FT_Get_Advance
    *
    * @description:
-   *   Retrieve the advance value of a given glyph outline in an
-   *   @FT_Face.
+   *   Retrieve the advance value of a given glyph outline in an @FT_Face.
    *
    * @input:
    *   face ::
@@ -97,30 +94,28 @@
    *     The glyph index.
    *
    *   load_flags ::
-   *     A set of bit flags similar to those used when
-   *     calling @FT_Load_Glyph, used to determine what kind
-   *     of advances you need.
+   *     A set of bit flags similar to those used when calling
+   *     @FT_Load_Glyph, used to determine what kind of advances you need.
    * @output:
    *   padvance ::
-   *     The advance value.  If scaling is performed (based on
-   *     the value of `load_flags'), the advance value is in
-   *     16.16 format.  Otherwise, it is in font units.
+   *     The advance value.  If scaling is performed (based on the value of
+   *     `load_flags`), the advance value is in 16.16 format.  Otherwise, it
+   *     is in font units.
    *
-   *     If @FT_LOAD_VERTICAL_LAYOUT is set, this is the
-   *     vertical advance corresponding to a vertical layout.
-   *     Otherwise, it is the horizontal advance in a
-   *     horizontal layout.
+   *     If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance
+   *     corresponding to a vertical layout.  Otherwise, it is the horizontal
+   *     advance in a horizontal layout.
    *
    * @return:
    *   FreeType error code.  0 means success.
    *
    * @note:
-   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and
-   *   if the corresponding font backend doesn't have a quick way to
-   *   retrieve the advances.
+   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
+   *   the corresponding font backend doesn't have a quick way to retrieve
+   *   the advances.
    *
-   *   A scaled advance is returned in 16.16 format but isn't transformed
-   *   by the affine transformation specified by @FT_Set_Transform.
+   *   A scaled advance is returned in 16.16 format but isn't transformed by
+   *   the affine transformation specified by @FT_Set_Transform.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Advance( FT_Face    face,
@@ -135,8 +130,7 @@
    *   FT_Get_Advances
    *
    * @description:
-   *   Retrieve the advance values of several glyph outlines in an
-   *   @FT_Face.
+   *   Retrieve the advance values of several glyph outlines in an @FT_Face.
    *
    * @input:
    *   face ::
@@ -149,34 +143,32 @@
    *     The number of advance values you want to retrieve.
    *
    *   load_flags ::
-   *     A set of bit flags similar to those used when
-   *     calling @FT_Load_Glyph.
+   *     A set of bit flags similar to those used when calling
+   *     @FT_Load_Glyph.
    *
    * @output:
    *   padvance ::
-   *     The advance values.  This array, to be provided by the
-   *     caller, must contain at least `count' elements.
+   *     The advance values.  This array, to be provided by the caller, must
+   *     contain at least `count` elements.
    *
-   *     If scaling is performed (based on the value of
-   *     `load_flags'), the advance values are in 16.16 format.
-   *     Otherwise, they are in font units.
+   *     If scaling is performed (based on the value of `load_flags`), the
+   *     advance values are in 16.16 format.  Otherwise, they are in font
+   *     units.
    *
-   *     If @FT_LOAD_VERTICAL_LAYOUT is set, these are the
-   *     vertical advances corresponding to a vertical layout.
-   *     Otherwise, they are the horizontal advances in a
-   *     horizontal layout.
+   *     If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances
+   *     corresponding to a vertical layout.  Otherwise, they are the
+   *     horizontal advances in a horizontal layout.
    *
    * @return:
    *   FreeType error code.  0 means success.
    *
    * @note:
-   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and
-   *   if the corresponding font backend doesn't have a quick way to
-   *   retrieve the advances.
+   *   This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if
+   *   the corresponding font backend doesn't have a quick way to retrieve
+   *   the advances.
    *
-   *   Scaled advances are returned in 16.16 format but aren't
-   *   transformed by the affine transformation specified by
-   *   @FT_Set_Transform.
+   *   Scaled advances are returned in 16.16 format but aren't transformed by
+   *   the affine transformation specified by @FT_Set_Transform.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Advances( FT_Face    face,
diff --git a/include/freetype/ftbbox.h b/include/freetype/ftbbox.h
index 9a0dcfc..22da70c 100644
--- a/include/freetype/ftbbox.h
+++ b/include/freetype/ftbbox.h
@@ -4,7 +4,7 @@
  *
  *   FreeType exact bbox computation (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -22,7 +22,7 @@
    * boxes.
    *
    * It is separated from the rest of the engine for various technical
-   * reasons.  It may well be integrated in `ftoutln' later.
+   * reasons.  It may well be integrated in 'ftoutln' later.
    *
    */
 
@@ -58,11 +58,10 @@
    *   FT_Outline_Get_BBox
    *
    * @description:
-   *   Compute the exact bounding box of an outline.  This is slower
-   *   than computing the control box.  However, it uses an advanced
-   *   algorithm that returns _very_ quickly when the two boxes
-   *   coincide.  Otherwise, the outline Bezier arcs are traversed to
-   *   extract their extrema.
+   *   Compute the exact bounding box of an outline.  This is slower than
+   *   computing the control box.  However, it uses an advanced algorithm
+   *   that returns _very_ quickly when the two boxes coincide.  Otherwise,
+   *   the outline Bezier arcs are traversed to extract their extrema.
    *
    * @input:
    *   outline ::
@@ -78,10 +77,10 @@
    * @note:
    *   If the font is tricky and the glyph has been loaded with
    *   @FT_LOAD_NO_SCALE, the resulting BBox is meaningless.  To get
-   *   reasonable values for the BBox it is necessary to load the glyph
-   *   at a large ppem value (so that the hinting instructions can
-   *   properly shift and scale the subglyphs), then extracting the BBox,
-   *   which can be eventually converted back to font units.
+   *   reasonable values for the BBox it is necessary to load the glyph at a
+   *   large ppem value (so that the hinting instructions can properly shift
+   *   and scale the subglyphs), then extracting the BBox, which can be
+   *   eventually converted back to font units.
    */
   FT_EXPORT( FT_Error )
   FT_Outline_Get_BBox( FT_Outline*  outline,
diff --git a/include/freetype/ftbdf.h b/include/freetype/ftbdf.h
index 69dbb4d..1c46da5 100644
--- a/include/freetype/ftbdf.h
+++ b/include/freetype/ftbdf.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing BDF-specific strings (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -44,13 +44,13 @@
    *   BDF and PCF specific API.
    *
    * @description:
-   *   This section contains the declaration of functions specific to BDF
-   *   and PCF fonts.
+   *   This section contains the declaration of functions specific to BDF and
+   *   PCF fonts.
    *
    */
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *    BDF_PropertyType
@@ -81,19 +81,19 @@
   } BDF_PropertyType;
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @type:
    *    BDF_Property
    *
    * @description:
-   *    A handle to a @BDF_PropertyRec structure to model a given
-   *    BDF/PCF property.
+   *    A handle to a @BDF_PropertyRec structure to model a given BDF/PCF
+   *    property.
    */
   typedef struct BDF_PropertyRec_*  BDF_Property;
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @struct:
    *    BDF_PropertyRec
@@ -107,7 +107,7 @@
    *
    *    u.atom ::
    *      The atom string, if type is @BDF_PROPERTY_TYPE_ATOM.  May be
-   *      NULL, indicating an empty string.
+   *      `NULL`, indicating an empty string.
    *
    *    u.integer ::
    *      A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER.
@@ -128,14 +128,14 @@
   } BDF_PropertyRec;
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_BDF_Charset_ID
    *
    * @description:
-   *    Retrieve a BDF font character set identity, according to
-   *    the BDF specification.
+   *    Retrieve a BDF font character set identity, according to the BDF
+   *    specification.
    *
    * @input:
    *    face ::
@@ -160,7 +160,7 @@
                          const char*  *acharset_registry );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_BDF_Property
@@ -187,15 +187,15 @@
    *   otherwise.  It also returns an error if the property is not in the
    *   font.
    *
-   *   A `property' is a either key-value pair within the STARTPROPERTIES
+   *   A 'property' is a either key-value pair within the STARTPROPERTIES
    *   ... ENDPROPERTIES block of a BDF font or a key-value pair from the
-   *   `info->props' array within a `FontRec' structure of a PCF font.
+   *   `info->props` array within a `FontRec` structure of a PCF font.
    *
-   *   Integer properties are always stored as `signed' within PCF fonts;
+   *   Integer properties are always stored as 'signed' within PCF fonts;
    *   consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value
    *   for BDF fonts only.
    *
-   *   In case of error, `aproperty->type' is always set to
+   *   In case of error, `aproperty->type` is always set to
    *   @BDF_PROPERTY_TYPE_NONE.
    */
   FT_EXPORT( FT_Error )
diff --git a/include/freetype/ftbitmap.h b/include/freetype/ftbitmap.h
index c9370af..a6acdb9 100644
--- a/include/freetype/ftbitmap.h
+++ b/include/freetype/ftbitmap.h
@@ -4,7 +4,7 @@
  *
  *   FreeType utility functions for bitmaps (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -46,10 +46,16 @@
    *   Handling FT_Bitmap objects.
    *
    * @description:
-   *   This section contains functions for handling @FT_Bitmap objects.
-   *   Note that none of the functions changes the bitmap's `flow' (as
-   *   indicated by the sign of the `pitch' field in `FT_Bitmap').
+   *   This section contains functions for handling @FT_Bitmap objects,
+   *   automatically adjusting the target's bitmap buffer size as needed.
    *
+   *   Note that none of the functions changes the bitmap's 'flow' (as
+   *   indicated by the sign of the `pitch` field in @FT_Bitmap).
+   *
+   *   To set the flow, assign an appropriate positive or negative value to
+   *   the `pitch` field of the target @FT_Bitmap object after calling
+   *   @FT_Bitmap_Init but before calling any of the other functions
+   *   described here.
    */
 
 
@@ -66,7 +72,7 @@
    *     A pointer to the bitmap structure.
    *
    * @note:
-   *   A deprecated name for the same function is `FT_Bitmap_New'.
+   *   A deprecated name for the same function is `FT_Bitmap_New`.
    */
   FT_EXPORT( void )
   FT_Bitmap_Init( FT_Bitmap  *abitmap );
@@ -98,6 +104,10 @@
    *
    * @return:
    *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   `source->buffer` and `target->buffer` must neither be equal nor
+   *   overlap.
    */
   FT_EXPORT( FT_Error )
   FT_Bitmap_Copy( FT_Library        library,
@@ -111,21 +121,21 @@
    *   FT_Bitmap_Embolden
    *
    * @description:
-   *   Embolden a bitmap.  The new bitmap will be about `xStrength'
-   *   pixels wider and `yStrength' pixels higher.  The left and bottom
-   *   borders are kept unchanged.
+   *   Embolden a bitmap.  The new bitmap will be about `xStrength` pixels
+   *   wider and `yStrength` pixels higher.  The left and bottom borders are
+   *   kept unchanged.
    *
    * @input:
    *   library ::
    *     A handle to a library object.
    *
    *   xStrength ::
-   *     How strong the glyph is emboldened horizontally.
-   *     Expressed in 26.6 pixel format.
+   *     How strong the glyph is emboldened horizontally.  Expressed in 26.6
+   *     pixel format.
    *
    *   yStrength ::
-   *     How strong the glyph is emboldened vertically.
-   *     Expressed in 26.6 pixel format.
+   *     How strong the glyph is emboldened vertically.  Expressed in 26.6
+   *     pixel format.
    *
    * @inout:
    *   bitmap ::
@@ -135,14 +145,14 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The current implementation restricts `xStrength' to be less than
-   *   or equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.
+   *   The current implementation restricts `xStrength` to be less than or
+   *   equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO.
    *
-   *   If you want to embolden the bitmap owned by a @FT_GlyphSlotRec,
-   *   you should call @FT_GlyphSlot_Own_Bitmap on the slot first.
+   *   If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you
+   *   should call @FT_GlyphSlot_Own_Bitmap on the slot first.
    *
-   *   Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format
-   *   are converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).
+   *   Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are
+   *   converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp).
    */
   FT_EXPORT( FT_Error )
   FT_Bitmap_Embolden( FT_Library  library,
@@ -157,9 +167,9 @@
    *   FT_Bitmap_Convert
    *
    * @description:
-   *   Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp
-   *   to a bitmap object with depth 8bpp, making the number of used
-   *   bytes per line (a.k.a. the `pitch') a multiple of `alignment'.
+   *   Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to
+   *   a bitmap object with depth 8bpp, making the number of used bytes per
+   *   line (a.k.a. the 'pitch') a multiple of `alignment`.
    *
    * @input:
    *   library ::
@@ -169,8 +179,8 @@
    *     The source bitmap.
    *
    *   alignment ::
-   *     The pitch of the bitmap is a multiple of this
-   *     argument.  Common values are 1, 2, or 4.
+   *     The pitch of the bitmap is a multiple of this argument.  Common
+   *     values are 1, 2, or 4.
    *
    * @output:
    *   target ::
@@ -185,8 +195,11 @@
    *
    *   Use @FT_Bitmap_Done to finally remove the bitmap object.
    *
-   *   The `library' argument is taken to have access to FreeType's
-   *   memory handling functions.
+   *   The `library` argument is taken to have access to FreeType's memory
+   *   handling functions.
+   *
+   *   `source->buffer` and `target->buffer` must neither be equal nor
+   *   overlap.
    */
   FT_EXPORT( FT_Error )
   FT_Bitmap_Convert( FT_Library        library,
@@ -212,14 +225,15 @@
    *
    *   source_offset ::
    *     The offset vector to the upper left corner of the source bitmap in
-   *     26.6 pixel format.  This can be a fractional pixel value.
+   *     26.6 pixel format.  It should represent an integer offset; the
+   *     function will set the lowest six bits to zero to enforce that.
    *
    *   color ::
-   *     The color used to draw `source' onto `target'.
+   *     The color used to draw `source` onto `target`.
    *
    * @inout:
    *   target ::
-   *     A handle to an `FT_Bitmap' object.  It should be either initialized
+   *     A handle to an `FT_Bitmap` object.  It should be either initialized
    *     as empty with a call to @FT_Bitmap_Init, or it should be of type
    *     @FT_PIXEL_MODE_BGRA.
    *
@@ -234,12 +248,15 @@
    * @note:
    *   This function doesn't perform clipping.
    *
-   *   The bitmap in `target' gets allocated or reallocated as needed; the
-   *   vector `atarget_offset' is updated accordingly.
+   *   The bitmap in `target` gets allocated or reallocated as needed; the
+   *   vector `atarget_offset` is updated accordingly.
    *
    *   In case of allocation or reallocation, the bitmap's pitch is set to
-   *   `4~*~width'.  Both `source' and `target' must have the same bitmap
-   *   flow (as indicated by the sign of the `pitch' field).
+   *   `4 * width`.  Both `source` and `target` must have the same bitmap
+   *   flow (as indicated by the sign of the `pitch` field).
+   *
+   *   `source->buffer` and `target->buffer` must neither be equal nor
+   *   overlap.
    *
    * @since:
    *   2.10
@@ -259,7 +276,7 @@
    *   FT_GlyphSlot_Own_Bitmap
    *
    * @description:
-   *   Make sure that a glyph slot owns `slot->bitmap'.
+   *   Make sure that a glyph slot owns `slot->bitmap`.
    *
    * @input:
    *   slot ::
@@ -269,8 +286,7 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function is to be used in combination with
-   *   @FT_Bitmap_Embolden.
+   *   This function is to be used in combination with @FT_Bitmap_Embolden.
    */
   FT_EXPORT( FT_Error )
   FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot  slot );
@@ -295,8 +311,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The `library' argument is taken to have access to FreeType's
-   *   memory handling functions.
+   *   The `library` argument is taken to have access to FreeType's memory
+   *   handling functions.
    */
   FT_EXPORT( FT_Error )
   FT_Bitmap_Done( FT_Library  library,
diff --git a/include/freetype/ftbzip2.h b/include/freetype/ftbzip2.h
index 07a7367..ae88cfd 100644
--- a/include/freetype/ftbzip2.h
+++ b/include/freetype/ftbzip2.h
@@ -4,7 +4,7 @@
  *
  *   Bzip2-compressed stream support.
  *
- * Copyright 2010-2018 by
+ * Copyright (C) 2010-2019 by
  * Joel Klinghed.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -48,15 +48,15 @@
    */
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stream_OpenBzip2
    *
    * @description:
    *   Open a new stream to parse bzip2-compressed font files.  This is
-   *   mainly used to support the compressed `*.pcf.bz2' fonts that come
-   *   with XFree86.
+   *   mainly used to support the compressed `*.pcf.bz2` fonts that come with
+   *   XFree86.
    *
    * @input:
    *   stream ::
@@ -71,9 +71,9 @@
    * @note:
    *   The source stream must be opened _before_ calling this function.
    *
-   *   Calling the internal function `FT_Stream_Close' on the new stream will
-   *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
-   *   objects will be released to the heap.
+   *   Calling the internal function `FT_Stream_Close` on the new stream will
+   *   **not** call `FT_Stream_Close` on the source stream.  None of the
+   *   stream objects will be released to the heap.
    *
    *   The stream implementation is very basic and resets the decompression
    *   process each time seeking backwards is needed within the stream.
@@ -81,10 +81,10 @@
    *   In certain builds of the library, bzip2 compression recognition is
    *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
    *   This means that if no font driver is capable of handling the raw
-   *   compressed file, the library will try to open a bzip2 compressed stream
-   *   from it and re-open the face with it.
+   *   compressed file, the library will try to open a bzip2 compressed
+   *   stream from it and re-open the face with it.
    *
-   *   This function may return `FT_Err_Unimplemented_Feature' if your build
+   *   This function may return `FT_Err_Unimplemented_Feature` if your build
    *   of FreeType was not compiled with bzip2 support.
    */
   FT_EXPORT( FT_Error )
diff --git a/include/freetype/ftcache.h b/include/freetype/ftcache.h
index 5dedb52..0d589d0 100644
--- a/include/freetype/ftcache.h
+++ b/include/freetype/ftcache.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache subsystem (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
 FT_BEGIN_HEADER
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @section:
    *   cache_subsystem
@@ -44,7 +44,7 @@
    *   objects, as well as caching information like character maps and glyph
    *   images while limiting their maximum memory usage.
    *
-   *   Note that all types and functions begin with the `FTC_' prefix.
+   *   Note that all types and functions begin with the `FTC_` prefix.
    *
    *   The cache is highly portable and thus doesn't know anything about the
    *   fonts installed on your system, or how to access them.  This implies
@@ -59,7 +59,7 @@
    *   to convert an @FTC_FaceID into a new @FT_Face object.  The latter is
    *   then completely managed by the cache, including its termination
    *   through @FT_Done_Face.  To monitor termination of face objects, the
-   *   finalizer callback in the `generic' field of the @FT_Face object can
+   *   finalizer callback in the `generic` field of the @FT_Face object can
    *   be used, which might also be used to store the @FTC_FaceID of the
    *   face.
    *
@@ -69,14 +69,14 @@
    *   possible.
    *
    *   Note that for the cache to work correctly, the face ID values must be
-   *   *persistent*, which means that the contents they point to should not
+   *   **persistent**, which means that the contents they point to should not
    *   change at runtime, or that their value should not become invalid.
    *
    *   If this is unavoidable (e.g., when a font is uninstalled at runtime),
    *   you should call @FTC_Manager_RemoveFaceID as soon as possible, to let
-   *   the cache get rid of any references to the old @FTC_FaceID it may
-   *   keep internally.  Failure to do so will lead to incorrect behaviour
-   *   or even crashes.
+   *   the cache get rid of any references to the old @FTC_FaceID it may keep
+   *   internally.  Failure to do so will lead to incorrect behaviour or even
+   *   crashes.
    *
    *   To use the cache, start with calling @FTC_Manager_New to create a new
    *   @FTC_Manager object, which models a single cache instance.  You can
@@ -91,11 +91,11 @@
    *   later use @FTC_ImageCache_Lookup to retrieve the corresponding
    *   @FT_Glyph objects from the cache.
    *
-   *   If you need lots of small bitmaps, it is much more memory efficient
-   *   to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup.  This
-   *   returns @FTC_SBitRec structures, which are used to store small
-   *   bitmaps directly.  (A small bitmap is one whose metrics and
-   *   dimensions all fit into 8-bit integers).
+   *   If you need lots of small bitmaps, it is much more memory efficient to
+   *   call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup.  This
+   *   returns @FTC_SBitRec structures, which are used to store small bitmaps
+   *   directly.  (A small bitmap is one whose metrics and dimensions all fit
+   *   into 8-bit integers).
    *
    *   We hope to also provide a kerning cache in the near future.
    *
@@ -142,7 +142,7 @@
   /*************************************************************************/
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FTC_FaceID
@@ -151,11 +151,11 @@
    *   An opaque pointer type that is used to identity face objects.  The
    *   contents of such objects is application-dependent.
    *
-   *   These pointers are typically used to point to a user-defined
-   *   structure containing a font file path, and face index.
+   *   These pointers are typically used to point to a user-defined structure
+   *   containing a font file path, and face index.
    *
    * @note:
-   *   Never use NULL as a valid @FTC_FaceID.
+   *   Never use `NULL` as a valid @FTC_FaceID.
    *
    *   Face IDs are passed by the client to the cache manager that calls,
    *   when needed, the @FTC_Face_Requester to translate them into new
@@ -166,13 +166,13 @@
    *   immediately call @FTC_Manager_RemoveFaceID before any other cache
    *   function.
    *
-   *   Failure to do so will result in incorrect behaviour or even
-   *   memory leaks and crashes.
+   *   Failure to do so will result in incorrect behaviour or even memory
+   *   leaks and crashes.
    */
   typedef FT_Pointer  FTC_FaceID;
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FTC_Face_Requester
@@ -200,7 +200,7 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The third parameter `req_data' is the same as the one passed by the
+   *   The third parameter `req_data` is the same as the one passed by the
    *   client when @FTC_Manager_New is called.
    *
    *   The face requester should not perform funny things on the returned
@@ -233,20 +233,20 @@
    *   FTC_Manager
    *
    * @description:
-   *   This object corresponds to one instance of the cache-subsystem.
-   *   It is used to cache one or more @FT_Face objects, along with
-   *   corresponding @FT_Size objects.
+   *   This object corresponds to one instance of the cache-subsystem.  It is
+   *   used to cache one or more @FT_Face objects, along with corresponding
+   *   @FT_Size objects.
    *
-   *   The manager intentionally limits the total number of opened
-   *   @FT_Face and @FT_Size objects to control memory usage.  See the
-   *   `max_faces' and `max_sizes' parameters of @FTC_Manager_New.
+   *   The manager intentionally limits the total number of opened @FT_Face
+   *   and @FT_Size objects to control memory usage.  See the `max_faces` and
+   *   `max_sizes` parameters of @FTC_Manager_New.
    *
-   *   The manager is also used to cache `nodes' of various types while
+   *   The manager is also used to cache 'nodes' of various types while
    *   limiting their total memory usage.
    *
-   *   All limitations are enforced by keeping lists of managed objects
-   *   in most-recently-used order, and flushing old nodes to make room
-   *   for new ones.
+   *   All limitations are enforced by keeping lists of managed objects in
+   *   most-recently-used order, and flushing old nodes to make room for new
+   *   ones.
    */
   typedef struct FTC_ManagerRec_*  FTC_Manager;
 
@@ -258,13 +258,13 @@
    *
    * @description:
    *   An opaque handle to a cache node object.  Each cache node is
-   *   reference-counted.  A node with a count of~0 might be flushed
-   *   out of a full cache whenever a lookup request is performed.
+   *   reference-counted.  A node with a count of~0 might be flushed out of a
+   *   full cache whenever a lookup request is performed.
    *
-   *   If you look up nodes, you have the ability to `acquire' them,
-   *   i.e., to increment their reference count.  This will prevent the
-   *   node from being flushed out of the cache until you explicitly
-   *   `release' it (see @FTC_Node_Unref).
+   *   If you look up nodes, you have the ability to 'acquire' them, i.e., to
+   *   increment their reference count.  This will prevent the node from
+   *   being flushed out of the cache until you explicitly 'release' it (see
+   *   @FTC_Node_Unref).
    *
    *   See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup.
    */
@@ -284,30 +284,29 @@
    *     The parent FreeType library handle to use.
    *
    *   max_faces ::
-   *     Maximum number of opened @FT_Face objects managed by
-   *     this cache instance.  Use~0 for defaults.
+   *     Maximum number of opened @FT_Face objects managed by this cache
+   *     instance.  Use~0 for defaults.
    *
    *   max_sizes ::
-   *     Maximum number of opened @FT_Size objects managed by
-   *     this cache instance.  Use~0 for defaults.
+   *     Maximum number of opened @FT_Size objects managed by this cache
+   *     instance.  Use~0 for defaults.
    *
    *   max_bytes ::
-   *     Maximum number of bytes to use for cached data nodes.
-   *     Use~0 for defaults.  Note that this value does not
-   *     account for managed @FT_Face and @FT_Size objects.
+   *     Maximum number of bytes to use for cached data nodes.  Use~0 for
+   *     defaults.  Note that this value does not account for managed
+   *     @FT_Face and @FT_Size objects.
    *
    *   requester ::
-   *     An application-provided callback used to translate
-   *     face IDs into real @FT_Face objects.
+   *     An application-provided callback used to translate face IDs into
+   *     real @FT_Face objects.
    *
    *   req_data ::
-   *     A generic pointer that is passed to the requester
-   *     each time it is called (see @FTC_Face_Requester).
+   *     A generic pointer that is passed to the requester each time it is
+   *     called (see @FTC_Face_Requester).
    *
    * @output:
    *   amanager ::
-   *     A handle to a new manager object.  0~in case of
-   *     failure.
+   *     A handle to a new manager object.  0~in case of failure.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -383,20 +382,20 @@
    *   should never try to discard it yourself.
    *
    *   The @FT_Face object doesn't necessarily have a current size object
-   *   (i.e., face->size can be~0).  If you need a specific `font size',
-   *   use @FTC_Manager_LookupSize instead.
+   *   (i.e., face->size can be~0).  If you need a specific 'font size', use
+   *   @FTC_Manager_LookupSize instead.
    *
-   *   Never change the face's transformation matrix (i.e., never call
-   *   the @FT_Set_Transform function) on a returned face!  If you need
-   *   to transform glyphs, do it yourself after glyph loading.
+   *   Never change the face's transformation matrix (i.e., never call the
+   *   @FT_Set_Transform function) on a returned face!  If you need to
+   *   transform glyphs, do it yourself after glyph loading.
    *
-   *   When you perform a lookup, out-of-memory errors are detected
-   *   _within_ the lookup and force incremental flushes of the cache
-   *   until enough memory is released for the lookup to succeed.
+   *   When you perform a lookup, out-of-memory errors are detected _within_
+   *   the lookup and force incremental flushes of the cache until enough
+   *   memory is released for the lookup to succeed.
    *
-   *   If a lookup fails with `FT_Err_Out_Of_Memory' the cache has
-   *   already been completely flushed, and still no memory was available
-   *   for the operation.
+   *   If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already
+   *   been completely flushed, and still no memory was available for the
+   *   operation.
    */
   FT_EXPORT( FT_Error )
   FTC_Manager_LookupFace( FTC_Manager  manager,
@@ -410,9 +409,8 @@
    *   FTC_ScalerRec
    *
    * @description:
-   *   A structure used to describe a given character size in either
-   *   pixels or points to the cache manager.  See
-   *   @FTC_Manager_LookupSize.
+   *   A structure used to describe a given character size in either pixels
+   *   or points to the cache manager.  See @FTC_Manager_LookupSize.
    *
    * @fields:
    *   face_id ::
@@ -425,17 +423,17 @@
    *     The character height.
    *
    *   pixel ::
-   *     A Boolean.  If 1, the `width' and `height' fields are
-   *     interpreted as integer pixel character sizes.
-   *     Otherwise, they are expressed as 1/64th of points.
+   *     A Boolean.  If 1, the `width` and `height` fields are interpreted as
+   *     integer pixel character sizes.  Otherwise, they are expressed as
+   *     1/64th of points.
    *
    *   x_res ::
-   *     Only used when `pixel' is value~0 to indicate the
-   *     horizontal resolution in dpi.
+   *     Only used when `pixel` is value~0 to indicate the horizontal
+   *     resolution in dpi.
    *
    *   y_res ::
-   *     Only used when `pixel' is value~0 to indicate the
-   *     vertical resolution in dpi.
+   *     Only used when `pixel` is value~0 to indicate the vertical
+   *     resolution in dpi.
    *
    * @note:
    *   This type is mainly used to retrieve @FT_Size objects through the
@@ -491,18 +489,17 @@
    *   The returned @FT_Size object is always owned by the manager.  You
    *   should never try to discard it by yourself.
    *
-   *   You can access the parent @FT_Face object simply as `size->face'
-   *   if you need it.  Note that this object is also owned by the
-   *   manager.
+   *   You can access the parent @FT_Face object simply as `size->face` if
+   *   you need it.  Note that this object is also owned by the manager.
    *
    * @note:
-   *   When you perform a lookup, out-of-memory errors are detected
-   *   _within_ the lookup and force incremental flushes of the cache
-   *   until enough memory is released for the lookup to succeed.
+   *   When you perform a lookup, out-of-memory errors are detected _within_
+   *   the lookup and force incremental flushes of the cache until enough
+   *   memory is released for the lookup to succeed.
    *
-   *   If a lookup fails with `FT_Err_Out_Of_Memory' the cache has
-   *   already been completely flushed, and still no memory is available
-   *   for the operation.
+   *   If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already
+   *   been completely flushed, and still no memory is available for the
+   *   operation.
    */
   FT_EXPORT( FT_Error )
   FTC_Manager_LookupSize( FTC_Manager  manager,
@@ -532,15 +529,15 @@
                   FTC_Manager  manager );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FTC_Manager_RemoveFaceID
    *
    * @description:
-   *   A special function used to indicate to the cache manager that
-   *   a given @FTC_FaceID is no longer valid, either because its
-   *   content changed, or because it was deallocated or uninstalled.
+   *   A special function used to indicate to the cache manager that a given
+   *   @FTC_FaceID is no longer valid, either because its content changed, or
+   *   because it was deallocated or uninstalled.
    *
    * @input:
    *   manager ::
@@ -551,11 +548,11 @@
    *
    * @note:
    *   This function flushes all nodes from the cache corresponding to this
-   *   `face_id', with the exception of nodes with a non-null reference
+   *   `face_id`, with the exception of nodes with a non-null reference
    *   count.
    *
-   *   Such nodes are however modified internally so as to never appear
-   *   in later lookups with the same `face_id' value, and to be immediately
+   *   Such nodes are however modified internally so as to never appear in
+   *   later lookups with the same `face_id` value, and to be immediately
    *   destroyed when released by all their users.
    *
    */
@@ -564,20 +561,20 @@
                             FTC_FaceID   face_id );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FTC_CMapCache
    *
    * @description:
-   *   An opaque handle used to model a charmap cache.  This cache is to
-   *   hold character codes -> glyph indices mappings.
+   *   An opaque handle used to model a charmap cache.  This cache is to hold
+   *   character codes -> glyph indices mappings.
    *
    */
   typedef struct FTC_CMapCacheRec_*  FTC_CMapCache;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FTC_CMapCache_New
@@ -591,7 +588,7 @@
    *
    * @output:
    *   acache ::
-   *     A new cache handle.  NULL in case of error.
+   *     A new cache handle.  `NULL` in case of error.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -606,7 +603,7 @@
                      FTC_CMapCache  *acache );
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FTC_CMapCache_Lookup
@@ -630,7 +627,7 @@
    *     The character code (in the corresponding charmap).
    *
    * @return:
-   *    Glyph index.  0~means `no glyph'.
+   *    Glyph index.  0~means 'no glyph'.
    *
    */
   FT_EXPORT( FT_UInt )
@@ -651,7 +648,7 @@
   /*************************************************************************/
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FTC_ImageTypeRec
@@ -683,7 +680,7 @@
   } FTC_ImageTypeRec;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FTC_ImageType
@@ -710,9 +707,9 @@
    *   FTC_ImageCache
    *
    * @description:
-   *   A handle to a glyph image cache object.  They are designed to
-   *   hold many distinct glyph images while not exceeding a certain
-   *   memory threshold.
+   *   A handle to a glyph image cache object.  They are designed to hold
+   *   many distinct glyph images while not exceeding a certain memory
+   *   threshold.
    */
   typedef struct FTC_ImageCacheRec_*  FTC_ImageCache;
 
@@ -761,32 +758,29 @@
    *
    * @output:
    *   aglyph ::
-   *     The corresponding @FT_Glyph object.  0~in case of
-   *     failure.
+   *     The corresponding @FT_Glyph object.  0~in case of failure.
    *
    *   anode ::
-   *     Used to return the address of the corresponding cache
-   *     node after incrementing its reference count (see note
-   *     below).
+   *     Used to return the address of the corresponding cache node after
+   *     incrementing its reference count (see note below).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
    *   The returned glyph is owned and managed by the glyph image cache.
-   *   Never try to transform or discard it manually!  You can however
-   *   create a copy with @FT_Glyph_Copy and modify the new one.
+   *   Never try to transform or discard it manually!  You can however create
+   *   a copy with @FT_Glyph_Copy and modify the new one.
    *
-   *   If `anode' is _not_ NULL, it receives the address of the cache
-   *   node containing the glyph image, after increasing its reference
-   *   count.  This ensures that the node (as well as the @FT_Glyph) will
-   *   always be kept in the cache until you call @FTC_Node_Unref to
-   *   `release' it.
+   *   If `anode` is _not_ `NULL`, it receives the address of the cache node
+   *   containing the glyph image, after increasing its reference count.
+   *   This ensures that the node (as well as the @FT_Glyph) will always be
+   *   kept in the cache until you call @FTC_Node_Unref to 'release' it.
    *
-   *   If `anode' is NULL, the cache node is left unchanged, which means
-   *   that the @FT_Glyph could be flushed out of the cache on the next
-   *   call to one of the caching sub-system APIs.  Don't assume that it
-   *   is persistent!
+   *   If `anode` is `NULL`, the cache node is left unchanged, which means
+   *   that the @FT_Glyph could be flushed out of the cache on the next call
+   *   to one of the caching sub-system APIs.  Don't assume that it is
+   *   persistent!
    */
   FT_EXPORT( FT_Error )
   FTC_ImageCache_Lookup( FTC_ImageCache  cache,
@@ -802,8 +796,8 @@
    *   FTC_ImageCache_LookupScaler
    *
    * @description:
-   *   A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec
-   *   to specify the face ID and its size.
+   *   A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec to
+   *   specify the face ID and its size.
    *
    * @input:
    *   cache ::
@@ -820,32 +814,29 @@
    *
    * @output:
    *   aglyph ::
-   *     The corresponding @FT_Glyph object.  0~in case of
-   *     failure.
+   *     The corresponding @FT_Glyph object.  0~in case of failure.
    *
    *   anode ::
-   *     Used to return the address of the corresponding
-   *     cache node after incrementing its reference count
-   *     (see note below).
+   *     Used to return the address of the corresponding cache node after
+   *     incrementing its reference count (see note below).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
    *   The returned glyph is owned and managed by the glyph image cache.
-   *   Never try to transform or discard it manually!  You can however
-   *   create a copy with @FT_Glyph_Copy and modify the new one.
+   *   Never try to transform or discard it manually!  You can however create
+   *   a copy with @FT_Glyph_Copy and modify the new one.
    *
-   *   If `anode' is _not_ NULL, it receives the address of the cache
-   *   node containing the glyph image, after increasing its reference
-   *   count.  This ensures that the node (as well as the @FT_Glyph) will
-   *   always be kept in the cache until you call @FTC_Node_Unref to
-   *   `release' it.
+   *   If `anode` is _not_ `NULL`, it receives the address of the cache node
+   *   containing the glyph image, after increasing its reference count.
+   *   This ensures that the node (as well as the @FT_Glyph) will always be
+   *   kept in the cache until you call @FTC_Node_Unref to 'release' it.
    *
-   *   If `anode' is NULL, the cache node is left unchanged, which means
-   *   that the @FT_Glyph could be flushed out of the cache on the next
-   *   call to one of the caching sub-system APIs.  Don't assume that it
-   *   is persistent!
+   *   If `anode` is `NULL`, the cache node is left unchanged, which means
+   *   that the @FT_Glyph could be flushed out of the cache on the next call
+   *   to one of the caching sub-system APIs.  Don't assume that it is
+   *   persistent!
    *
    *   Calls to @FT_Set_Char_Size and friends have no effect on cached
    *   glyphs; you should always use the FreeType cache API instead.
@@ -865,8 +856,8 @@
    *   FTC_SBit
    *
    * @description:
-   *   A handle to a small bitmap descriptor.  See the @FTC_SBitRec
-   *   structure for details.
+   *   A handle to a small bitmap descriptor.  See the @FTC_SBitRec structure
+   *   for details.
    */
   typedef struct FTC_SBitRec_*  FTC_SBit;
 
@@ -887,15 +878,13 @@
    *     The bitmap height in pixels.
    *
    *   left ::
-   *     The horizontal distance from the pen position to the
-   *     left bitmap border (a.k.a. `left side bearing', or
-   *     `lsb').
+   *     The horizontal distance from the pen position to the left bitmap
+   *     border (a.k.a. 'left side bearing', or 'lsb').
    *
    *   top ::
-   *     The vertical distance from the pen position (on the
-   *     baseline) to the upper bitmap border (a.k.a. `top
-   *     side bearing').  The distance is positive for upwards
-   *     y~coordinates.
+   *     The vertical distance from the pen position (on the baseline) to the
+   *     upper bitmap border (a.k.a. 'top side bearing').  The distance is
+   *     positive for upwards y~coordinates.
    *
    *   format ::
    *     The format of the glyph bitmap (monochrome or gray).
@@ -904,8 +893,7 @@
    *     Maximum gray level value (in the range 1 to~255).
    *
    *   pitch ::
-   *     The number of bytes per bitmap line.  May be positive
-   *     or negative.
+   *     The number of bytes per bitmap line.  May be positive or negative.
    *
    *   xadvance ::
    *     The horizontal advance width in pixels.
@@ -941,9 +929,9 @@
    *
    * @description:
    *   A handle to a small bitmap cache.  These are special cache objects
-   *   used to store small glyph bitmaps (and anti-aliased pixmaps) in a
-   *   much more efficient way than the traditional glyph image cache
-   *   implemented by @FTC_ImageCache.
+   *   used to store small glyph bitmaps (and anti-aliased pixmaps) in a much
+   *   more efficient way than the traditional glyph image cache implemented
+   *   by @FTC_ImageCache.
    */
   typedef struct FTC_SBitCacheRec_*  FTC_SBitCache;
 
@@ -962,7 +950,7 @@
    *
    * @output:
    *   acache ::
-   *     A handle to the new sbit cache.  NULL in case of error.
+   *     A handle to the new sbit cache.  `NULL` in case of error.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -978,8 +966,8 @@
    *   FTC_SBitCache_Lookup
    *
    * @description:
-   *   Look up a given small glyph bitmap in a given sbit cache and
-   *   `lock' it to prevent its flushing from the cache until needed.
+   *   Look up a given small glyph bitmap in a given sbit cache and 'lock' it
+   *   to prevent its flushing from the cache until needed.
    *
    * @input:
    *   cache ::
@@ -996,31 +984,30 @@
    *     A handle to a small bitmap descriptor.
    *
    *   anode ::
-   *     Used to return the address of the corresponding cache
-   *     node after incrementing its reference count (see note
-   *     below).
+   *     Used to return the address of the corresponding cache node after
+   *     incrementing its reference count (see note below).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The small bitmap descriptor and its bit buffer are owned by the
-   *   cache and should never be freed by the application.  They might
-   *   as well disappear from memory on the next cache lookup, so don't
-   *   treat them as persistent data.
+   *   The small bitmap descriptor and its bit buffer are owned by the cache
+   *   and should never be freed by the application.  They might as well
+   *   disappear from memory on the next cache lookup, so don't treat them as
+   *   persistent data.
    *
-   *   The descriptor's `buffer' field is set to~0 to indicate a missing
+   *   The descriptor's `buffer` field is set to~0 to indicate a missing
    *   glyph bitmap.
    *
-   *   If `anode' is _not_ NULL, it receives the address of the cache
-   *   node containing the bitmap, after increasing its reference count.
-   *   This ensures that the node (as well as the image) will always be
-   *   kept in the cache until you call @FTC_Node_Unref to `release' it.
+   *   If `anode` is _not_ `NULL`, it receives the address of the cache node
+   *   containing the bitmap, after increasing its reference count.  This
+   *   ensures that the node (as well as the image) will always be kept in
+   *   the cache until you call @FTC_Node_Unref to 'release' it.
    *
-   *   If `anode' is NULL, the cache node is left unchanged, which means
-   *   that the bitmap could be flushed out of the cache on the next
-   *   call to one of the caching sub-system APIs.  Don't assume that it
-   *   is persistent!
+   *   If `anode` is `NULL`, the cache node is left unchanged, which means
+   *   that the bitmap could be flushed out of the cache on the next call to
+   *   one of the caching sub-system APIs.  Don't assume that it is
+   *   persistent!
    */
   FT_EXPORT( FT_Error )
   FTC_SBitCache_Lookup( FTC_SBitCache    cache,
@@ -1036,8 +1023,8 @@
    *   FTC_SBitCache_LookupScaler
    *
    * @description:
-   *   A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec
-   *   to specify the face ID and its size.
+   *   A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec to
+   *   specify the face ID and its size.
    *
    * @input:
    *   cache ::
@@ -1057,31 +1044,30 @@
    *     A handle to a small bitmap descriptor.
    *
    *   anode ::
-   *     Used to return the address of the corresponding
-   *     cache node after incrementing its reference count
-   *     (see note below).
+   *     Used to return the address of the corresponding cache node after
+   *     incrementing its reference count (see note below).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The small bitmap descriptor and its bit buffer are owned by the
-   *   cache and should never be freed by the application.  They might
-   *   as well disappear from memory on the next cache lookup, so don't
-   *   treat them as persistent data.
+   *   The small bitmap descriptor and its bit buffer are owned by the cache
+   *   and should never be freed by the application.  They might as well
+   *   disappear from memory on the next cache lookup, so don't treat them as
+   *   persistent data.
    *
-   *   The descriptor's `buffer' field is set to~0 to indicate a missing
+   *   The descriptor's `buffer` field is set to~0 to indicate a missing
    *   glyph bitmap.
    *
-   *   If `anode' is _not_ NULL, it receives the address of the cache
-   *   node containing the bitmap, after increasing its reference count.
-   *   This ensures that the node (as well as the image) will always be
-   *   kept in the cache until you call @FTC_Node_Unref to `release' it.
+   *   If `anode` is _not_ `NULL`, it receives the address of the cache node
+   *   containing the bitmap, after increasing its reference count.  This
+   *   ensures that the node (as well as the image) will always be kept in
+   *   the cache until you call @FTC_Node_Unref to 'release' it.
    *
-   *   If `anode' is NULL, the cache node is left unchanged, which means
-   *   that the bitmap could be flushed out of the cache on the next
-   *   call to one of the caching sub-system APIs.  Don't assume that it
-   *   is persistent!
+   *   If `anode` is `NULL`, the cache node is left unchanged, which means
+   *   that the bitmap could be flushed out of the cache on the next call to
+   *   one of the caching sub-system APIs.  Don't assume that it is
+   *   persistent!
    */
   FT_EXPORT( FT_Error )
   FTC_SBitCache_LookupScaler( FTC_SBitCache  cache,
diff --git a/include/freetype/ftchapters.h b/include/freetype/ftchapters.h
index f4297d3..2ee2697 100644
--- a/include/freetype/ftchapters.h
+++ b/include/freetype/ftchapters.h
@@ -6,7 +6,7 @@
  */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   general_remarks
@@ -21,7 +21,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   core_api
@@ -44,7 +44,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   format_specific
@@ -67,7 +67,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   module_specific
@@ -88,7 +88,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   cache_subsystem
@@ -102,7 +102,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   support_api
@@ -127,7 +127,7 @@
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @chapter:
    *   error_codes
diff --git a/include/freetype/ftcid.h b/include/freetype/ftcid.h
index b427cbd..8eafc1c 100644
--- a/include/freetype/ftcid.h
+++ b/include/freetype/ftcid.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing CID font information (specification).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * Dereg Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,7 +50,7 @@
    */
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_CID_Registry_Ordering_Supplement
@@ -90,15 +90,15 @@
                                            FT_Int       *supplement );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_CID_Is_Internally_CID_Keyed
    *
    * @description:
-   *    Retrieve the type of the input face, CID keyed or not.  In
-   *    contrast to the @FT_IS_CID_KEYED macro this function returns
-   *    successfully also for CID-keyed fonts in an SFNT wrapper.
+   *    Retrieve the type of the input face, CID keyed or not.  In contrast
+   *    to the @FT_IS_CID_KEYED macro this function returns successfully also
+   *    for CID-keyed fonts in an SFNT wrapper.
    *
    * @input:
    *    face ::
@@ -112,8 +112,8 @@
    *    FreeType error code.  0~means success.
    *
    * @note:
-   *    This function only works with CID faces and OpenType fonts,
-   *    returning an error otherwise.
+   *    This function only works with CID faces and OpenType fonts, returning
+   *    an error otherwise.
    *
    * @since:
    *    2.3.9
@@ -123,7 +123,7 @@
                                       FT_Bool  *is_cid );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_CID_From_Glyph_Index
@@ -146,8 +146,8 @@
    *    FreeType error code.  0~means success.
    *
    * @note:
-   *    This function only works with CID faces and OpenType fonts,
-   *    returning an error otherwise.
+   *    This function only works with CID faces and OpenType fonts, returning
+   *    an error otherwise.
    *
    * @since:
    *    2.3.9
diff --git a/include/freetype/ftcolor.h b/include/freetype/ftcolor.h
index e4fa4af..cf18021 100644
--- a/include/freetype/ftcolor.h
+++ b/include/freetype/ftcolor.h
@@ -4,7 +4,7 @@
  *
  *   FreeType's glyph color management (specification).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -41,11 +41,11 @@
    *   Glyph Color Management
    *
    * @abstract:
-   *   Retrieving and manipulating OpenType's `CPAL' table data.
+   *   Retrieving and manipulating OpenType's 'CPAL' table data.
    *
    * @description:
    *   The functions described here allow access and manipulation of color
-   *   palette entries in OpenType's `CPAL' tables.
+   *   palette entries in OpenType's 'CPAL' tables.
    */
 
 
@@ -55,7 +55,7 @@
    *   FT_Color
    *
    * @description:
-   *   This structure models a BGRA color value of a `CPAL' palette entry.
+   *   This structure models a BGRA color value of a 'CPAL' palette entry.
    *
    *   The used color space is sRGB; the colors are not pre-multiplied, and
    *   alpha values must be explicitly set.
@@ -92,9 +92,9 @@
    *   FT_PALETTE_XXX
    *
    * @description:
-   *   A list of bit field constants used in the `palette_flags' array of
-   *   the @FT_Palette_Data structure to indicate for which background a
-   *   palette with a given index is usable.
+   *   A list of bit field constants used in the `palette_flags` array of the
+   *   @FT_Palette_Data structure to indicate for which background a palette
+   *   with a given index is usable.
    *
    * @values:
    *   FT_PALETTE_FOR_LIGHT_BACKGROUND ::
@@ -102,8 +102,8 @@
    *     light background such as white.
    *
    *   FT_PALETTE_FOR_DARK_BACKGROUND ::
-   *     The palette is appropriate to use when displaying the font on a
-   *     dark background such as black.
+   *     The palette is appropriate to use when displaying the font on a dark
+   *     background such as black.
    *
    * @since:
    *   2.10
@@ -118,29 +118,29 @@
    *   FT_Palette_Data
    *
    * @description:
-   *   This structure holds the data of the `CPAL' table.
+   *   This structure holds the data of the 'CPAL' table.
    *
    * @fields:
    *   num_palettes ::
    *     The number of palettes.
    *
    *   palette_name_ids ::
-   *     A read-only array of palette name IDs with `num_palettes' elements,
-   *     corresponding to entries like `dark' or `light' in the font's
-   *     `name' table.
+   *     A read-only array of palette name IDs with `num_palettes` elements,
+   *     corresponding to entries like 'dark' or 'light' in the font's 'name'
+   *     table.
    *
-   *     An empty name ID in the `CPAL' table gets represented as value
+   *     An empty name ID in the 'CPAL' table gets represented as value
    *     0xFFFF.
    *
-   *     NULL if the font's `CPAL' table doesn't contain appropriate data.
+   *     `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
    *
    *   palette_flags ::
-   *     A read-only array of palette flags with `num_palettes' elements.
+   *     A read-only array of palette flags with `num_palettes` elements.
    *     Possible values are an ORed combination of
    *     @FT_PALETTE_FOR_LIGHT_BACKGROUND and
    *     @FT_PALETTE_FOR_DARK_BACKGROUND.
    *
-   *     NULL if the font's `CPAL' table doesn't contain appropriate data.
+   *     `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
    *
    *   num_palette_entries ::
    *     The number of entries in a single palette.  All palettes have the
@@ -148,17 +148,16 @@
    *
    *   palette_entry_name_ids ::
    *     A read-only array of palette entry name IDs with
-   *     `num_palette_entries'.  In each palette, entries with the same
-   *     index have the same function.  For example, index~0 might
-   *     correspond to string `outline' in the font's `name' table to
-   *     indicate that this palette entry is used for outlines, index~1
-   *     might correspond to `fill' to indicate the filling color palette
-   *     entry, etc.
+   *     `num_palette_entries`.  In each palette, entries with the same index
+   *     have the same function.  For example, index~0 might correspond to
+   *     string 'outline' in the font's 'name' table to indicate that this
+   *     palette entry is used for outlines, index~1 might correspond to
+   *     'fill' to indicate the filling color palette entry, etc.
    *
-   *     An empty entry name ID in the `CPAL' table gets represented as
-   *     value 0xFFFF.
+   *     An empty entry name ID in the 'CPAL' table gets represented as value
+   *     0xFFFF.
    *
-   *     NULL if the font's `CPAL' table doesn't contain appropriate data.
+   *     `NULL` if the font's 'CPAL' table doesn't contain appropriate data.
    *
    * @note:
    *   Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to
@@ -201,7 +200,7 @@
    *   All arrays in the returned @FT_Palette_Data structure are read-only.
    *
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_COLOR_LAYERS' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
    *
    * @since:
    *   2.10
@@ -227,7 +226,7 @@
    *
    * A corollary of (2) is that calling the function, then modifying some
    * values, then calling the function again with the same arguments resets
-   * all color entries to the original `CPAL' values; all user modifications
+   * all color entries to the original 'CPAL' values; all user modifications
    * are lost.
    *
    * @input:
@@ -239,24 +238,22 @@
    *
    * @output:
    *   apalette ::
-   *     An array of color entries for a palette with index `palette_index'.
-   *     If `apalette' is set to NULL, no array gets returned (and no color
-   *     entries can be modified).
+   *     An array of color entries for a palette with index `palette_index`,
+   *     having `num_palette_entries` elements (as found in the
+   *     `FT_Palette_Data` structure).  If `apalette` is set to `NULL`, no
+   *     array gets returned (and no color entries can be modified).
    *
-   *     In case the font doesn't support color palettes, NULL is returned.
+   *     In case the font doesn't support color palettes, `NULL` is returned.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The number of color entries is given by the `num_palette_entries'
-   *   field in the @FT_Palette_Data structure.
-   *
-   *   The array pointed to by `apalette_entries' is owned and managed by
+   *   The array pointed to by `apalette_entries` is owned and managed by
    *   FreeType.
    *
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_COLOR_LAYERS' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
    *
    * @since:
    *   2.10
@@ -273,7 +270,7 @@
    *   FT_Palette_Set_Foreground_Color
    *
    * @description:
-   *   `COLR' uses palette index 0xFFFF to indicate a `text foreground
+   *   'COLR' uses palette index 0xFFFF to indicate a 'text foreground
    *   color'.  This function sets this value.
    *
    * @input:
@@ -281,7 +278,7 @@
    *     The source face handle.
    *
    *   foreground_color ::
-   *     An `FT_Color' structure to define the text foreground color.
+   *     An `FT_Color` structure to define the text foreground color.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -289,13 +286,12 @@
    * @note:
    *   If this function isn't called, the text foreground color is set to
    *   white opaque (BGRA value 0xFFFFFFFF) if
-   *   @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current
-   *   palette, and black opaque (BGRA value 0x000000FF) otherwise,
-   *   including the case that no palette types are available in the `CPAL'
-   *   table.
+   *   @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette,
+   *   and black opaque (BGRA value 0x000000FF) otherwise, including the case
+   *   that no palette types are available in the 'CPAL' table.
    *
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_COLOR_LAYERS' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`.
    *
    * @since:
    *   2.10
diff --git a/include/freetype/ftdriver.h b/include/freetype/ftdriver.h
index b0a53d6..497bde9 100644
--- a/include/freetype/ftdriver.h
+++ b/include/freetype/ftdriver.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for controlling driver modules (specification only).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,8 +50,8 @@
    *   @FT_Property_Get.  The following lists the available properties
    *   together with the necessary macros and structures.
    *
-   *   Note that the auto-hinter's module name is `autofitter' for
-   *   historical reasons.
+   *   Note that the auto-hinter's module name is 'autofitter' for historical
+   *   reasons.
    *
    *   Available properties are @increase-x-height, @no-stem-darkening
    *   (experimental), @darkening-parameters (experimental), @warping
@@ -74,18 +74,18 @@
    *   Controlling the CFF driver module.
    *
    * @description:
-   *   While FreeType's CFF driver doesn't expose API functions by itself,
-   *   it is possible to control its behaviour with @FT_Property_Set and
+   *   While FreeType's CFF driver doesn't expose API functions by itself, it
+   *   is possible to control its behaviour with @FT_Property_Set and
    *   @FT_Property_Get.
    *
-   *   The CFF driver's module name is `cff'.
+   *   The CFF driver's module name is 'cff'.
    *
    *   Available properties are @hinting-engine, @no-stem-darkening,
    *   @darkening-parameters, and @random-seed, as documented in the
    *   @properties section.
    *
    *
-   *   *Hinting* *and* *antialiasing* *principles* *of* *the* *new* *engine*
+   *   **Hinting and antialiasing principles of the new engine**
    *
    *   The rasterizer is positioning horizontal features (e.g., ascender
    *   height & x-height, or crossbars) on the pixel grid and minimizing the
@@ -93,35 +93,34 @@
    *   features (vertical stems) on the pixel grid without hinting, thus
    *   representing the stem position and weight accurately.  Sometimes the
    *   vertical stems may be only partially black.  In this context,
-   *   `antialiasing' means that stems are not positioned exactly on pixel
+   *   'antialiasing' means that stems are not positioned exactly on pixel
    *   borders, causing a fuzzy appearance.
    *
    *   There are two principles behind this approach.
    *
-   *   1) No hinting in the horizontal direction: Unlike `superhinted'
+   *   1) No hinting in the horizontal direction: Unlike 'superhinted'
    *   TrueType, which changes glyph widths to accommodate regular
-   *   inter-glyph spacing, Adobe's approach is `faithful to the design' in
-   *   representing both the glyph width and the inter-glyph spacing
-   *   designed for the font.  This makes the screen display as close as it
-   *   can be to the result one would get with infinite resolution, while
-   *   preserving what is considered the key characteristics of each glyph.
-   *   Note that the distances between unhinted and grid-fitted positions at
-   *   small sizes are comparable to kerning values and thus would be
-   *   noticeable (and distracting) while reading if hinting were applied.
+   *   inter-glyph spacing, Adobe's approach is 'faithful to the design' in
+   *   representing both the glyph width and the inter-glyph spacing designed
+   *   for the font.  This makes the screen display as close as it can be to
+   *   the result one would get with infinite resolution, while preserving
+   *   what is considered the key characteristics of each glyph.  Note that
+   *   the distances between unhinted and grid-fitted positions at small
+   *   sizes are comparable to kerning values and thus would be noticeable
+   *   (and distracting) while reading if hinting were applied.
    *
    *   One of the reasons to not hint horizontally is antialiasing for LCD
-   *   screens: The pixel geometry of modern displays supplies three
-   *   vertical subpixels as the eye moves horizontally across each visible
-   *   pixel.  On devices where we can be certain this characteristic is
-   *   present a rasterizer can take advantage of the subpixels to add
-   *   increments of weight.  In Western writing systems this turns out to
-   *   be the more critical direction anyway; the weights and spacing of
-   *   vertical stems (see above) are central to Armenian, Cyrillic, Greek,
-   *   and Latin type designs.  Even when the rasterizer uses greyscale
-   *   antialiasing instead of color (a necessary compromise when one
-   *   doesn't know the screen characteristics), the unhinted vertical
-   *   features preserve the design's weight and spacing much better than
-   *   aliased type would.
+   *   screens: The pixel geometry of modern displays supplies three vertical
+   *   subpixels as the eye moves horizontally across each visible pixel.  On
+   *   devices where we can be certain this characteristic is present a
+   *   rasterizer can take advantage of the subpixels to add increments of
+   *   weight.  In Western writing systems this turns out to be the more
+   *   critical direction anyway; the weights and spacing of vertical stems
+   *   (see above) are central to Armenian, Cyrillic, Greek, and Latin type
+   *   designs.  Even when the rasterizer uses greyscale antialiasing instead
+   *   of color (a necessary compromise when one doesn't know the screen
+   *   characteristics), the unhinted vertical features preserve the design's
+   *   weight and spacing much better than aliased type would.
    *
    *   2) Alignment in the vertical direction: Weights and spacing along the
    *   y~axis are less critical; what is much more important is the visual
@@ -132,16 +131,16 @@
    *
    *   On the technical side, horizontal alignment zones for ascender,
    *   x-height, and other important height values (traditionally called
-   *   `blue zones') as defined in the font are positioned independently,
-   *   each being rounded to the nearest pixel edge, taking care of
-   *   overshoot suppression at small sizes, stem darkening, and scaling.
+   *   'blue zones') as defined in the font are positioned independently,
+   *   each being rounded to the nearest pixel edge, taking care of overshoot
+   *   suppression at small sizes, stem darkening, and scaling.
    *
    *   Hstems (this is, hint values defined in the font to help align
    *   horizontal features) that fall within a blue zone are said to be
-   *   `captured' and are aligned to that zone.  Uncaptured stems are moved
+   *   'captured' and are aligned to that zone.  Uncaptured stems are moved
    *   in one of four ways, top edge up or down, bottom edge up or down.
-   *   Unless there are conflicting hstems, the smallest movement is taken
-   *   to minimize distortion.
+   *   Unless there are conflicting hstems, the smallest movement is taken to
+   *   minimize distortion.
    *
    */
 
@@ -158,13 +157,13 @@
    *   Controlling the PCF driver module.
    *
    * @description:
-   *   While FreeType's PCF driver doesn't expose API functions by itself,
-   *   it is possible to control its behaviour with @FT_Property_Set and
+   *   While FreeType's PCF driver doesn't expose API functions by itself, it
+   *   is possible to control its behaviour with @FT_Property_Set and
    *   @FT_Property_Get.  Right now, there is a single property
    *   @no-long-family-names available if FreeType is compiled with
    *   PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
    *
-   *   The PCF driver's module name is `pcf'.
+   *   The PCF driver's module name is 'pcf'.
    *
    */
 
@@ -187,15 +186,15 @@
    *   Behind the scenes, both drivers use the Adobe CFF engine for hinting;
    *   however, the used properties must be specified separately.
    *
-   *   The Type~1 driver's module name is `type1'; the CID driver's module
-   *   name is `t1cid'.
+   *   The Type~1 driver's module name is 'type1'; the CID driver's module
+   *   name is 't1cid'.
    *
    *   Available properties are @hinting-engine, @no-stem-darkening,
    *   @darkening-parameters, and @random-seed, as documented in the
    *   @properties section.
    *
-   *   Please see the @cff_driver section for more details on the new
-   *   hinting engine.
+   *   Please see the @cff_driver section for more details on the new hinting
+   *   engine.
    *
    */
 
@@ -217,7 +216,7 @@
    *   and @FT_Property_Get.  The following lists the available properties
    *   together with the necessary macros and structures.
    *
-   *   The TrueType driver's module name is `truetype'.
+   *   The TrueType driver's module name is 'truetype'.
    *
    *   A single property @interpreter-version is available, as documented in
    *   the @properties section.
@@ -225,36 +224,36 @@
    *   We start with a list of definitions, kindly provided by Greg
    *   Hitchcock.
    *
-   *   _Bi-Level_ _Rendering_
+   *   _Bi-Level Rendering_
    *
    *   Monochromatic rendering, exclusively used in the early days of
    *   TrueType by both Apple and Microsoft.  Microsoft's GDI interface
    *   supported hinting of the right-side bearing point, such that the
    *   advance width could be non-linear.  Most often this was done to
    *   achieve some level of glyph symmetry.  To enable reasonable
-   *   performance (e.g., not having to run hinting on all glyphs just to
-   *   get the widths) there was a bit in the head table indicating if the
-   *   side bearing was hinted, and additional tables, `hdmx' and `LTSH', to
-   *   cache hinting widths across multiple sizes and device aspect ratios.
+   *   performance (e.g., not having to run hinting on all glyphs just to get
+   *   the widths) there was a bit in the head table indicating if the side
+   *   bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache
+   *   hinting widths across multiple sizes and device aspect ratios.
    *
-   *   _Font_ _Smoothing_
+   *   _Font Smoothing_
    *
    *   Microsoft's GDI implementation of anti-aliasing.  Not traditional
    *   anti-aliasing as the outlines were hinted before the sampling.  The
    *   widths matched the bi-level rendering.
    *
-   *   _ClearType_ _Rendering_
+   *   _ClearType Rendering_
    *
    *   Technique that uses physical subpixels to improve rendering on LCD
    *   (and other) displays.  Because of the higher resolution, many methods
-   *   of improving symmetry in glyphs through hinting the right-side
-   *   bearing were no longer necessary.  This lead to what GDI calls
-   *   `natural widths' ClearType, see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec21.  Since hinting
+   *   of improving symmetry in glyphs through hinting the right-side bearing
+   *   were no longer necessary.  This lead to what GDI calls 'natural
+   *   widths' ClearType, see
+   *   http://rastertragedy.com/RTRCh4.htm#Sec21.  Since hinting
    *   has extra resolution, most non-linearity went away, but it is still
    *   possible for hints to change the advance widths in this mode.
    *
-   *   _ClearType_ _Compatible_ _Widths_
+   *   _ClearType Compatible Widths_
    *
    *   One of the earliest challenges with ClearType was allowing the
    *   implementation in GDI to be selected without requiring all UI and
@@ -263,41 +262,41 @@
    *   to determine the width in bi-level rendering, and then re-run in
    *   ClearType, with the difference in widths being absorbed in the font
    *   hints for ClearType (mostly in the white space of hints); see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec20.  Somewhat by
+   *   http://rastertragedy.com/RTRCh4.htm#Sec20.  Somewhat by
    *   definition, compatible width ClearType allows for non-linear widths,
    *   but only when the bi-level version has non-linear widths.
    *
-   *   _ClearType_ _Subpixel_ _Positioning_
+   *   _ClearType Subpixel Positioning_
    *
    *   One of the nice benefits of ClearType is the ability to more crisply
    *   display fractional widths; unfortunately, the GDI model of integer
    *   bitmaps did not support this.  However, the WPF and Direct Write
-   *   frameworks do support fractional widths.  DWrite calls this `natural
-   *   mode', not to be confused with GDI's `natural widths'.  Subpixel
+   *   frameworks do support fractional widths.  DWrite calls this 'natural
+   *   mode', not to be confused with GDI's 'natural widths'.  Subpixel
    *   positioning, in the current implementation of Direct Write,
    *   unfortunately does not support hinted advance widths, see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec22.  Note that the
+   *   http://rastertragedy.com/RTRCh4.htm#Sec22.  Note that the
    *   TrueType interpreter fully allows the advance width to be adjusted in
    *   this mode, just the DWrite client will ignore those changes.
    *
-   *   _ClearType_ _Backward_ _Compatibility_
+   *   _ClearType Backward Compatibility_
    *
    *   This is a set of exceptions made in the TrueType interpreter to
    *   minimize hinting techniques that were problematic with the extra
    *   resolution of ClearType; see
-   *   http://www.beatstamm.com/typography/RTRCh4.htm#Sec1 and
+   *   http://rastertragedy.com/RTRCh4.htm#Sec1 and
    *   https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
-   *   This technique is not to be confused with ClearType compatible
-   *   widths.  ClearType backward compatibility has no direct impact on
-   *   changing advance widths, but there might be an indirect impact on
-   *   disabling some deltas.  This could be worked around in backward
-   *   compatibility mode.
+   *   This technique is not to be confused with ClearType compatible widths.
+   *   ClearType backward compatibility has no direct impact on changing
+   *   advance widths, but there might be an indirect impact on disabling
+   *   some deltas.  This could be worked around in backward compatibility
+   *   mode.
    *
-   *   _Native_ _ClearType_ _Mode_
+   *   _Native ClearType Mode_
    *
-   *   (Not to be confused with `natural widths'.)  This mode removes all
-   *   the exceptions in the TrueType interpreter when running with
-   *   ClearType.  Any issues on widths would still apply, though.
+   *   (Not to be confused with 'natural widths'.)  This mode removes all the
+   *   exceptions in the TrueType interpreter when running with ClearType.
+   *   Any issues on widths would still apply, though.
    *
    */
 
@@ -328,8 +327,8 @@
    *   FT_HINTING_XXX
    *
    * @description:
-   *   A list of constants used for the @hinting-engine property to
-   *   select the hinting engine for CFF, Type~1, and CID fonts.
+   *   A list of constants used for the @hinting-engine property to select
+   *   the hinting engine for CFF, Type~1, and CID fonts.
    *
    * @values:
    *   FT_HINTING_FREETYPE ::
@@ -356,46 +355,46 @@
    *   hinting-engine
    *
    * @description:
-   *   Thanks to Adobe, which contributed a new hinting (and parsing)
-   *   engine, an application can select between `freetype' and `adobe' if
-   *   compiled with CFF_CONFIG_OPTION_OLD_ENGINE.  If this configuration
-   *   macro isn't defined, `hinting-engine' does nothing.
+   *   Thanks to Adobe, which contributed a new hinting (and parsing) engine,
+   *   an application can select between 'freetype' and 'adobe' if compiled
+   *   with `CFF_CONFIG_OPTION_OLD_ENGINE`.  If this configuration macro
+   *   isn't defined, 'hinting-engine' does nothing.
    *
    *   The same holds for the Type~1 and CID modules if compiled with
-   *   T1_CONFIG_OPTION_OLD_ENGINE.
+   *   `T1_CONFIG_OPTION_OLD_ENGINE`.
    *
-   *   For the `cff' module, the default engine is `freetype' if
-   *   CFF_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe' otherwise.
+   *   For the 'cff' module, the default engine is 'freetype' if
+   *   `CFF_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe' otherwise.
    *
-   *   For both the `type1' and `t1cid' modules, the default engine is
-   *   `freetype' if T1_CONFIG_OPTION_OLD_ENGINE is defined, and `adobe'
+   *   For both the 'type1' and 't1cid' modules, the default engine is
+   *   'freetype' if `T1_CONFIG_OPTION_OLD_ENGINE` is defined, and 'adobe'
    *   otherwise.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values `adobe' or `freetype').
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
+   *   variable (using values 'adobe' or 'freetype').
    *
    * @example:
    *   The following example code demonstrates how to select Adobe's hinting
-   *   engine for the `cff' module (omitting the error handling).
+   *   engine for the 'cff' module (omitting the error handling).
    *
-   *   {
+   *   ```
    *     FT_Library  library;
-   *     FT_UInt     hinting_engine = FT_CFF_HINTING_ADOBE;
+   *     FT_UInt     hinting_engine = FT_HINTING_ADOBE;
    *
    *
    *     FT_Init_FreeType( &library );
    *
    *     FT_Property_Set( library, "cff",
    *                               "hinting-engine", &hinting_engine );
-   *   }
+   *   ```
    *
    * @since:
-   *   2.4.12 (for `cff' module)
+   *   2.4.12 (for 'cff' module)
    *
-   *   2.9 (for `type1' and `t1cid' modules)
+   *   2.9 (for 'type1' and 't1cid' modules)
    *
    */
 
@@ -406,10 +405,10 @@
    *   no-stem-darkening
    *
    * @description:
-   *   All glyphs that pass through the auto-hinter will be emboldened
-   *   unless this property is set to TRUE.  The same is true for the CFF,
-   *   Type~1, and CID font modules if the `Adobe' engine is selected (which
-   *   is the default).
+   *   All glyphs that pass through the auto-hinter will be emboldened unless
+   *   this property is set to TRUE.  The same is true for the CFF, Type~1,
+   *   and CID font modules if the 'Adobe' engine is selected (which is the
+   *   default).
    *
    *   Stem darkening emboldens glyphs at smaller sizes to make them more
    *   readable on common low-DPI screens when using linear alpha blending
@@ -420,39 +419,38 @@
    *   Gamma correction essentially lightens fonts since shades of grey are
    *   shifted to higher pixel values (=~higher brightness) to match the
    *   original intention to the reality of our screens.  The side-effect is
-   *   that glyphs `thin out'.  Mac OS~X and Adobe's proprietary font
+   *   that glyphs 'thin out'.  Mac OS~X and Adobe's proprietary font
    *   rendering library implement a counter-measure: stem darkening at
    *   smaller sizes where shades of gray dominate.  By emboldening a glyph
    *   slightly in relation to its pixel size, individual pixels get higher
-   *   coverage of filled-in outlines and are therefore `blacker'.  This
-   *   counteracts the `thinning out' of glyphs, making text remain readable
+   *   coverage of filled-in outlines and are therefore 'blacker'.  This
+   *   counteracts the 'thinning out' of glyphs, making text remain readable
    *   at smaller sizes.
    *
    *   By default, the Adobe engines for CFF, Type~1, and CID fonts darken
    *   stems at smaller sizes, regardless of hinting, to enhance contrast.
    *   Setting this property, stem darkening gets switched off.
    *
-   *   For the auto-hinter, stem-darkening is experimental currently and
-   *   thus switched off by default (this is, `no-stem-darkening' is set to
-   *   TRUE by default).  Total consistency with the CFF driver is not
-   *   achieved right now because the emboldening method differs and glyphs
-   *   must be scaled down on the Y-axis to keep outline points inside their
+   *   For the auto-hinter, stem-darkening is experimental currently and thus
+   *   switched off by default (this is, `no-stem-darkening` is set to TRUE
+   *   by default).  Total consistency with the CFF driver is not achieved
+   *   right now because the emboldening method differs and glyphs must be
+   *   scaled down on the Y-axis to keep outline points inside their
    *   precomputed blue zones.  The smaller the size (especially 9ppem and
    *   down), the higher the loss of emboldening versus the CFF driver.
    *
-   *   Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is
-   *   set.
+   *   Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
-   *   It can also be set per face using @FT_Face_Properties with
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
+   *   variable (using values 1 and 0 for 'on' and 'off', respectively).  It
+   *   can also be set per face using @FT_Face_Properties with
    *   @FT_PARAM_TAG_STEM_DARKENING.
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_Bool     no_stem_darkening = TRUE;
    *
@@ -461,14 +459,14 @@
    *
    *     FT_Property_Set( library, "cff",
    *                               "no-stem-darkening", &no_stem_darkening );
-   *   }
+   *   ```
    *
    * @since:
-   *   2.4.12 (for `cff' module)
+   *   2.4.12 (for 'cff' module)
    *
-   *   2.6.2 (for `autofitter' module)
+   *   2.6.2 (for 'autofitter' module)
    *
-   *   2.9 (for `type1' and `t1cid' modules)
+   *   2.9 (for 'type1' and 't1cid' modules)
    *
    */
 
@@ -480,29 +478,29 @@
    *
    * @description:
    *   By default, the Adobe hinting engine, as used by the CFF, Type~1, and
-   *   CID font drivers, darkens stems as follows (if the
-   *   `no-stem-darkening' property isn't set):
+   *   CID font drivers, darkens stems as follows (if the `no-stem-darkening`
+   *   property isn't set):
    *
-   *   {
+   *   ```
    *     stem width <= 0.5px:   darkening amount = 0.4px
    *     stem width  = 1px:     darkening amount = 0.275px
    *     stem width  = 1.667px: darkening amount = 0.275px
    *     stem width >= 2.333px: darkening amount = 0px
-   *   }
+   *   ```
    *
    *   and piecewise linear in-between.  At configuration time, these four
    *   control points can be set with the macro
-   *   `CFF_CONFIG_OPTION_DARKENING_PARAMETERS'; the CFF, Type~1, and CID
+   *   `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID
    *   drivers share these values.  At runtime, the control points can be
-   *   changed using the `darkening-parameters' property (see the example
+   *   changed using the `darkening-parameters` property (see the example
    *   below that demonstrates this for the Type~1 driver).
    *
    *   The x~values give the stem width, and the y~values the darkening
    *   amount.  The unit is 1000th of pixels.  All coordinate values must be
-   *   positive; the x~values must be monotonically increasing; the
-   *   y~values must be monotonically decreasing and smaller than or
-   *   equal to 500 (corresponding to half a pixel); the slope of each
-   *   linear piece must be shallower than -1 (e.g., -.4).
+   *   positive; the x~values must be monotonically increasing; the y~values
+   *   must be monotonically decreasing and smaller than or equal to 500
+   *   (corresponding to half a pixel); the slope of each linear piece must
+   *   be shallower than -1 (e.g., -.4).
    *
    *   The auto-hinter provides this property, too, as an experimental
    *   feature.  See @no-stem-darkening for more.
@@ -510,17 +508,17 @@
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
    *   variable, using eight comma-separated integers without spaces.  Here
-   *   the above example, using `\' to break the line for readability.
+   *   the above example, using `\` to break the line for readability.
    *
-   *   {
+   *   ```
    *     FREETYPE_PROPERTIES=\
    *     type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
-   *   }
+   *   ```
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_Int      darken_params[8] = {  500, 300,   // x1, y1
    *                                      1000, 200,   // x2, y2
@@ -532,14 +530,14 @@
    *
    *     FT_Property_Set( library, "type1",
    *                               "darkening-parameters", darken_params );
-   *   }
+   *   ```
    *
    * @since:
-   *   2.5.1 (for `cff' module)
+   *   2.5.1 (for 'cff' module)
    *
-   *   2.6.2 (for `autofitter' module)
+   *   2.6.2 (for 'autofitter' module)
    *
-   *   2.9 (for `type1' and `t1cid' modules)
+   *   2.9 (for 'type1' and 't1cid' modules)
    *
    */
 
@@ -550,29 +548,29 @@
    *   random-seed
    *
    * @description:
-   *   By default, the seed value for the CFF `random' operator and the
-   *   similar `0 28 callothersubr pop' command for the Type~1 and CID
+   *   By default, the seed value for the CFF 'random' operator and the
+   *   similar '0 28 callothersubr pop' command for the Type~1 and CID
    *   drivers is set to a random value.  However, mainly for debugging
-   *   purposes, it is often necessary to use a known value as a seed so
-   *   that the pseudo-random number sequences generated by `random' are
+   *   purposes, it is often necessary to use a known value as a seed so that
+   *   the pseudo-random number sequences generated by 'random' are
    *   repeatable.
    *
-   *   The `random-seed' property does that.  Its argument is a signed 32bit
+   *   The `random-seed` property does that.  Its argument is a signed 32bit
    *   integer; if the value is zero or negative, the seed given by the
-   *   `intitialRandomSeed' private DICT operator in a CFF file gets used
-   *   (or a default value if there is no such operator).  If the value is
-   *   positive, use it instead of `initialRandomSeed', which is
-   *   consequently ignored.
+   *   `intitialRandomSeed` private DICT operator in a CFF file gets used (or
+   *   a default value if there is no such operator).  If the value is
+   *   positive, use it instead of `initialRandomSeed`, which is consequently
+   *   ignored.
    *
    * @note:
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
    *   variable.  It can also be set per face using @FT_Face_Properties with
    *   @FT_PARAM_TAG_RANDOM_SEED.
    *
    * @since:
-   *   2.8 (for `cff' module)
+   *   2.8 (for 'cff' module)
    *
-   *   2.9 (for `type1' and `t1cid' modules)
+   *   2.9 (for 'type1' and 't1cid' modules)
    *
    */
 
@@ -583,28 +581,28 @@
    *   no-long-family-names
    *
    * @description:
-   *   If PCF_CONFIG_OPTION_LONG_FAMILY_NAMES is active while compiling
+   *   If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling
    *   FreeType, the PCF driver constructs long family names.
    *
-   *   There are many PCF fonts just called `Fixed' which look completely
+   *   There are many PCF fonts just called 'Fixed' which look completely
    *   different, and which have nothing to do with each other.  When
-   *   selecting `Fixed' in KDE or Gnome one gets results that appear rather
-   *   random, the style changes often if one changes the size and one
-   *   cannot select some fonts at all.  The improve this situation, the PCF
-   *   module prepends the foundry name (plus a space) to the family name.
-   *   It also checks whether there are `wide' characters; all put together,
-   *   family names like `Sony Fixed' or `Misc Fixed Wide' are constructed.
+   *   selecting 'Fixed' in KDE or Gnome one gets results that appear rather
+   *   random, the style changes often if one changes the size and one cannot
+   *   select some fonts at all.  The improve this situation, the PCF module
+   *   prepends the foundry name (plus a space) to the family name.  It also
+   *   checks whether there are 'wide' characters; all put together, family
+   *   names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed.
    *
-   *   If `no-long-family-names' is set, this feature gets switched off.
+   *   If `no-long-family-names` is set, this feature gets switched off.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
+   *   variable (using values 1 and 0 for 'on' and 'off', respectively).
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_Bool     no_long_family_names = TRUE;
    *
@@ -614,7 +612,7 @@
    *     FT_Property_Set( library, "pcf",
    *                               "no-long-family-names",
    *                               &no_long_family_names );
-   *   }
+   *   ```
    *
    * @since:
    *   2.8
@@ -630,8 +628,8 @@
    *   A list of constants used for the @interpreter-version property to
    *   select the hinting engine for Truetype fonts.
    *
-   *   The numeric value in the constant names represents the version
-   *   number as returned by the `GETINFO' bytecode instruction.
+   *   The numeric value in the constant names represents the version number
+   *   as returned by the 'GETINFO' bytecode instruction.
    *
    * @values:
    *   TT_INTERPRETER_VERSION_35 ::
@@ -642,38 +640,37 @@
    *     Version~38 corresponds to MS rasterizer v.1.9; it is roughly
    *     equivalent to the hinting provided by DirectWrite ClearType (as can
    *     be found, for example, in the Internet Explorer~9 running on
-   *     Windows~7).  It is used in FreeType to select the `Infinality'
-   *     subpixel hinting code.  The code may be removed in a future
-   *     version.
+   *     Windows~7).  It is used in FreeType to select the 'Infinality'
+   *     subpixel hinting code.  The code may be removed in a future version.
    *
    *   TT_INTERPRETER_VERSION_40 ::
    *     Version~40 corresponds to MS rasterizer v.2.1; it is roughly
    *     equivalent to the hinting provided by DirectWrite ClearType (as can
    *     be found, for example, in Microsoft's Edge Browser on Windows~10).
-   *     It is used in FreeType to select the `minimal' subpixel hinting
+   *     It is used in FreeType to select the 'minimal' subpixel hinting
    *     code, a stripped-down and higher performance version of the
-   *     `Infinality' code.
+   *     'Infinality' code.
    *
    * @note:
-   *   This property controls the behaviour of the bytecode interpreter
-   *   and thus how outlines get hinted.  It does *not* control how glyph
-   *   get rasterized!  In particular, it does not control subpixel color
+   *   This property controls the behaviour of the bytecode interpreter and
+   *   thus how outlines get hinted.  It does **not** control how glyph get
+   *   rasterized!  In particular, it does not control subpixel color
    *   filtering.
    *
    *   If FreeType has not been compiled with the configuration option
-   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING, selecting version~38 or~40 causes
-   *   an `FT_Err_Unimplemented_Feature' error.
+   *   `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes
+   *   an `FT_Err_Unimplemented_Feature` error.
    *
-   *   Depending on the graphics framework, Microsoft uses different
-   *   bytecode and rendering engines.  As a consequence, the version
-   *   numbers returned by a call to the `GETINFO' bytecode instruction are
-   *   more convoluted than desired.
+   *   Depending on the graphics framework, Microsoft uses different bytecode
+   *   and rendering engines.  As a consequence, the version numbers returned
+   *   by a call to the 'GETINFO' bytecode instruction are more convoluted
+   *   than desired.
    *
-   *   Here are two tables that try to shed some light on the possible
-   *   values for the MS rasterizer engine, together with the additional
-   *   features introduced by it.
+   *   Here are two tables that try to shed some light on the possible values
+   *   for the MS rasterizer engine, together with the additional features
+   *   introduced by it.
    *
-   *   {
+   *   ```
    *     GETINFO framework               version feature
    *     -------------------------------------------------------------------
    *         3   GDI (Win 3.1),            v1.0  16-bit, first version
@@ -696,15 +693,15 @@
    *        40   GDI+ (after Win 7),       v2.1  Y-direction ClearType flag
    *             DWrite (Win 8)                    in GETINFO opcode,
    *                                             Gray ClearType
-   *   }
+   *   ```
    *
-   *   The `version' field gives a rough orientation only, since some
+   *   The 'version' field gives a rough orientation only, since some
    *   applications provided certain features much earlier (as an example,
    *   Microsoft Reader used subpixel and Y-direction ClearType already in
    *   Windows 2000).  Similarly, updates to a given framework might include
    *   improved hinting support.
    *
-   *   {
+   *   ```
    *      version   sampling          rendering        comment
    *               x        y       x           y
    *     --------------------------------------------------------------
@@ -714,38 +711,38 @@
    *       v1.9   high    high    color-filter  gray   Color ClearType
    *       v2.1   high    normal  gray          B/W    Gray ClearType
    *       v2.1   high    high    gray          gray   Gray ClearType
-   *   }
+   *   ```
    *
    *   Color and Gray ClearType are the two available variants of
-   *   `Y-direction ClearType', meaning grayscale rasterization along the
+   *   'Y-direction ClearType', meaning grayscale rasterization along the
    *   Y-direction; the name used in the TrueType specification for this
-   *   feature is `symmetric smoothing'.  `Classic ClearType' is the
-   *   original algorithm used before introducing a modified version in
-   *   Win~XP.  Another name for v1.6's grayscale rendering is `font
-   *   smoothing', and `Color ClearType' is sometimes also called `DWrite
-   *   ClearType'.  To differentiate between today's Color ClearType and the
-   *   earlier ClearType variant with B/W rendering along the vertical axis,
-   *   the latter is sometimes called `GDI ClearType'.
+   *   feature is 'symmetric smoothing'.  'Classic ClearType' is the original
+   *   algorithm used before introducing a modified version in Win~XP.
+   *   Another name for v1.6's grayscale rendering is 'font smoothing', and
+   *   'Color ClearType' is sometimes also called 'DWrite ClearType'.  To
+   *   differentiate between today's Color ClearType and the earlier
+   *   ClearType variant with B/W rendering along the vertical axis, the
+   *   latter is sometimes called 'GDI ClearType'.
    *
-   *   `Normal' and `high' sampling describe the (virtual) resolution to
-   *   access the rasterized outline after the hinting process.  `Normal'
+   *   'Normal' and 'high' sampling describe the (virtual) resolution to
+   *   access the rasterized outline after the hinting process.  'Normal'
    *   means 1 sample per grid line (i.e., B/W).  In the current Microsoft
-   *   implementation, `high' means an extra virtual resolution of 16x16 (or
-   *   16x1) grid lines per pixel for bytecode instructions like `MIRP'.
+   *   implementation, 'high' means an extra virtual resolution of 16x16 (or
+   *   16x1) grid lines per pixel for bytecode instructions like 'MIRP'.
    *   After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
    *   lines for color filtering if Color ClearType is activated.
    *
-   *   Note that `Gray ClearType' is essentially the same as v1.6's
-   *   grayscale rendering.  However, the GETINFO instruction handles it
-   *   differently: v1.6 returns bit~12 (hinting for grayscale), while v2.1
-   *   returns bits~13 (hinting for ClearType), 18 (symmetrical smoothing),
-   *   and~19 (Gray ClearType).  Also, this mode respects bits 2 and~3 for
-   *   the version~1 gasp table exclusively (like Color ClearType), while
-   *   v1.6 only respects the values of version~0 (bits 0 and~1).
+   *   Note that 'Gray ClearType' is essentially the same as v1.6's grayscale
+   *   rendering.  However, the GETINFO instruction handles it differently:
+   *   v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns
+   *   bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19
+   *   (Gray ClearType).  Also, this mode respects bits 2 and~3 for the
+   *   version~1 gasp table exclusively (like Color ClearType), while v1.6
+   *   only respects the values of version~0 (bits 0 and~1).
    *
-   *   Keep in mind that the features of the above interpreter versions
-   *   might not map exactly to FreeType features or behavior because it is
-   *   a fundamentally different library with different internals.
+   *   Keep in mind that the features of the above interpreter versions might
+   *   not map exactly to FreeType features or behavior because it is a
+   *   fundamentally different library with different internals.
    *
    */
 #define TT_INTERPRETER_VERSION_35  35
@@ -759,25 +756,25 @@
    *   interpreter-version
    *
    * @description:
-   *   Currently, three versions are available, two representing the
-   *   bytecode interpreter with subpixel hinting support (old `Infinality'
-   *   code and new stripped-down and higher performance `minimal' code) and
-   *   one without, respectively.  The default is subpixel support if
-   *   TT_CONFIG_OPTION_SUBPIXEL_HINTING is defined, and no subpixel support
-   *   otherwise (since it isn't available then).
+   *   Currently, three versions are available, two representing the bytecode
+   *   interpreter with subpixel hinting support (old 'Infinality' code and
+   *   new stripped-down and higher performance 'minimal' code) and one
+   *   without, respectively.  The default is subpixel support if
+   *   `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel
+   *   support otherwise (since it isn't available then).
    *
    *   If subpixel hinting is on, many TrueType bytecode instructions behave
-   *   differently compared to B/W or grayscale rendering (except if `native
+   *   differently compared to B/W or grayscale rendering (except if 'native
    *   ClearType' is selected by the font).  Microsoft's main idea is to
    *   render at a much increased horizontal resolution, then sampling down
    *   the created output to subpixel precision.  However, many older fonts
-   *   are not suited to this and must be specially taken care of by
-   *   applying (hardcoded) tweaks in Microsoft's interpreter.
+   *   are not suited to this and must be specially taken care of by applying
+   *   (hardcoded) tweaks in Microsoft's interpreter.
    *
    *   Details on subpixel hinting and some of the necessary tweaks can be
    *   found in Greg Hitchcock's whitepaper at
-   *   `https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
-   *   Note that FreeType currently doesn't really `subpixel hint' (6x1, 6x2,
+   *   'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
+   *   Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2,
    *   or 6x5 supersampling) like discussed in the paper.  Depending on the
    *   chosen interpreter, it simply ignores instructions on vertical stems
    *   to arrive at very similar results.
@@ -785,14 +782,14 @@
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values `35', `38', or `40').
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
+   *   variable (using values '35', '38', or '40').
    *
    * @example:
    *   The following example code demonstrates how to deactivate subpixel
    *   hinting (omitting the error handling).
    *
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_Face     face;
    *     FT_UInt     interpreter_version = TT_INTERPRETER_VERSION_35;
@@ -803,7 +800,7 @@
    *     FT_Property_Set( library, "truetype",
    *                               "interpreter-version",
    *                               &interpreter_version );
-   *   }
+   *   ```
    *
    * @since:
    *   2.5
@@ -816,7 +813,7 @@
    *   glyph-to-script-map
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
    *   The auto-hinter provides various script modules to hint glyphs.
    *   Examples of supported scripts are Latin or CJK.  Before a glyph is
@@ -824,26 +821,26 @@
    *   the script is then determined based on Unicode character ranges, see
    *   below.
    *
-   *   OpenType fonts, however, often provide much more glyphs than
-   *   character codes (small caps, superscripts, ligatures, swashes, etc.),
-   *   to be controlled by so-called `features'.  Handling OpenType features
-   *   can be quite complicated and thus needs a separate library on top of
+   *   OpenType fonts, however, often provide much more glyphs than character
+   *   codes (small caps, superscripts, ligatures, swashes, etc.), to be
+   *   controlled by so-called 'features'.  Handling OpenType features can be
+   *   quite complicated and thus needs a separate library on top of
    *   FreeType.
    *
    *   The mapping between glyph indices and scripts (in the auto-hinter
-   *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
-   *   array with `num_glyphs' elements, as found in the font's @FT_Face
-   *   structure.  The `glyph-to-script-map' property returns a pointer to
-   *   this array, which can be modified as needed.  Note that the
-   *   modification should happen before the first glyph gets processed by
-   *   the auto-hinter so that the global analysis of the font shapes
-   *   actually uses the modified mapping.
+   *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array
+   *   with `num_glyphs` elements, as found in the font's @FT_Face structure.
+   *   The `glyph-to-script-map` property returns a pointer to this array,
+   *   which can be modified as needed.  Note that the modification should
+   *   happen before the first glyph gets processed by the auto-hinter so
+   *   that the global analysis of the font shapes actually uses the modified
+   *   mapping.
    *
    * @example:
-   *   The following example code demonstrates how to access it (omitting
-   *   the error handling).
+   *   The following example code demonstrates how to access it (omitting the
+   *   error handling).
    *
-   *   {
+   *   ```
    *     FT_Library                library;
    *     FT_Face                   face;
    *     FT_Prop_GlyphToScriptMap  prop;
@@ -860,7 +857,7 @@
    *     // adjust `prop.map' as needed right here
    *
    *     FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
-   *   }
+   *   ```
    *
    * @since:
    *   2.4.11
@@ -874,7 +871,7 @@
    *   FT_AUTOHINTER_SCRIPT_XXX
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
    *   A list of constants used for the @glyph-to-script-map property to
    *   specify the script submodule the auto-hinter should use for hinting a
@@ -885,14 +882,14 @@
    *     Don't auto-hint this glyph.
    *
    *   FT_AUTOHINTER_SCRIPT_LATIN ::
-   *     Apply the latin auto-hinter.  For the auto-hinter, `latin' is a
-   *     very broad term, including Cyrillic and Greek also since characters
-   *     from those scripts share the same design constraints.
+   *     Apply the latin auto-hinter.  For the auto-hinter, 'latin' is a very
+   *     broad term, including Cyrillic and Greek also since characters from
+   *     those scripts share the same design constraints.
    *
    *     By default, characters from the following Unicode ranges are
    *     assigned to this submodule.
    *
-   *     {
+   *     ```
    *       U+0020 - U+007F  // Basic Latin (no control characters)
    *       U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)
    *       U+0100 - U+017F  // Latin Extended-A
@@ -921,7 +918,7 @@
    *       U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)
    *      U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
    *      U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
-   *     }
+   *     ```
    *
    *   FT_AUTOHINTER_SCRIPT_CJK ::
    *     Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
@@ -930,7 +927,7 @@
    *     By default, characters from the following Unicode ranges are
    *     assigned to this submodule.
    *
-   *     {
+   *     ```
    *       U+1100 - U+11FF  // Hangul Jamo
    *       U+2E80 - U+2EFF  // CJK Radicals Supplement
    *       U+2F00 - U+2FDF  // Kangxi Radicals
@@ -963,7 +960,7 @@
    *      U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
    *      U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
    *      U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
-   *     }
+   *     ```
    *
    *   FT_AUTOHINTER_SCRIPT_INDIC ::
    *     Apply the indic auto-hinter, covering all major scripts from the
@@ -973,7 +970,7 @@
    *     By default, characters from the following Unicode ranges are
    *     assigned to this submodule.
    *
-   *     {
+   *     ```
    *       U+0900 - U+0DFF  // Indic Range
    *       U+0F00 - U+0FFF  // Tibetan
    *       U+1900 - U+194F  // Limbu
@@ -981,7 +978,7 @@
    *       U+A800 - U+A82F  // Syloti Nagri
    *       U+ABC0 - U+ABFF  // Meetei Mayek
    *      U+11800 - U+118DF // Sharada
-   *     }
+   *     ```
    *
    *     Note that currently Indic support is rudimentary only, missing blue
    *     zone support.
@@ -1002,7 +999,7 @@
    *   FT_Prop_GlyphToScriptMap
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
    *   The data exchange structure for the @glyph-to-script-map property.
    *
@@ -1024,27 +1021,26 @@
    *   fallback-script
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
-   *   If no auto-hinter script module can be assigned to a glyph, a
-   *   fallback script gets assigned to it (see also the
-   *   @glyph-to-script-map property).  By default, this is
-   *   @FT_AUTOHINTER_SCRIPT_CJK.  Using the `fallback-script' property,
-   *   this fallback value can be changed.
+   *   If no auto-hinter script module can be assigned to a glyph, a fallback
+   *   script gets assigned to it (see also the @glyph-to-script-map
+   *   property).  By default, this is @FT_AUTOHINTER_SCRIPT_CJK.  Using the
+   *   `fallback-script` property, this fallback value can be changed.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
    *   It's important to use the right timing for changing this value: The
-   *   creation of the glyph-to-script map that eventually uses the
-   *   fallback script value gets triggered either by setting or reading a
+   *   creation of the glyph-to-script map that eventually uses the fallback
+   *   script value gets triggered either by setting or reading a
    *   face-specific property like @glyph-to-script-map, or by auto-hinting
    *   any glyph from that face.  In particular, if you have already created
    *   an @FT_Face structure but not loaded any glyph (using the
    *   auto-hinter), a change of the fallback script will affect this face.
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_UInt     fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
    *
@@ -1053,7 +1049,7 @@
    *
    *     FT_Property_Set( library, "autofitter",
    *                               "fallback-script", &fallback_script );
-   *   }
+   *   ```
    *
    * @since:
    *   2.4.11
@@ -1067,33 +1063,33 @@
    *   default-script
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
-   *   If FreeType gets compiled with FT_CONFIG_OPTION_USE_HARFBUZZ to make
-   *   the HarfBuzz library access OpenType features for getting better
-   *   glyph coverages, this property sets the (auto-fitter) script to be
-   *   used for the default (OpenType) script data of a font's GSUB table.
-   *   Features for the default script are intended for all scripts not
-   *   explicitly handled in GSUB; an example is a `dlig' feature,
-   *   containing the combination of the characters `T', `E', and `L' to
-   *   form a `TEL' ligature.
+   *   If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make
+   *   the HarfBuzz library access OpenType features for getting better glyph
+   *   coverages, this property sets the (auto-fitter) script to be used for
+   *   the default (OpenType) script data of a font's GSUB table.  Features
+   *   for the default script are intended for all scripts not explicitly
+   *   handled in GSUB; an example is a 'dlig' feature, containing the
+   *   combination of the characters 'T', 'E', and 'L' to form a 'TEL'
+   *   ligature.
    *
    *   By default, this is @FT_AUTOHINTER_SCRIPT_LATIN.  Using the
-   *   `default-script' property, this default value can be changed.
+   *   `default-script` property, this default value can be changed.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
    *   It's important to use the right timing for changing this value: The
-   *   creation of the glyph-to-script map that eventually uses the
-   *   default script value gets triggered either by setting or reading a
+   *   creation of the glyph-to-script map that eventually uses the default
+   *   script value gets triggered either by setting or reading a
    *   face-specific property like @glyph-to-script-map, or by auto-hinting
    *   any glyph from that face.  In particular, if you have already created
    *   an @FT_Face structure but not loaded any glyph (using the
    *   auto-hinter), a change of the default script will affect this face.
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_UInt     default_script = FT_AUTOHINTER_SCRIPT_NONE;
    *
@@ -1102,7 +1098,7 @@
    *
    *     FT_Property_Set( library, "autofitter",
    *                               "default-script", &default_script );
-   *   }
+   *   ```
    *
    * @since:
    *   2.5.3
@@ -1116,9 +1112,9 @@
    *   increase-x-height
    *
    * @description:
-   *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
-   *   up the font's x~height much more often than normally.  If the value
-   *   is set to~0, which is the default, this feature is switched off.  Use
+   *   For ppem values in the range 6~<= ppem <= `increase-x-height`, round
+   *   up the font's x~height much more often than normally.  If the value is
+   *   set to~0, which is the default, this feature is switched off.  Use
    *   this property to improve the legibility of small font sizes if
    *   necessary.
    *
@@ -1129,7 +1125,7 @@
    *   loading any glyph (using the auto-hinter).
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Library               library;
    *     FT_Face                  face;
    *     FT_Prop_IncreaseXHeight  prop;
@@ -1144,7 +1140,7 @@
    *
    *     FT_Property_Set( library, "autofitter",
    *                               "increase-x-height", &prop );
-   *   }
+   *   ```
    *
    * @since:
    *   2.4.11
@@ -1175,40 +1171,40 @@
    *   warping
    *
    * @description:
-   *   *Experimental* *only*
+   *   **Experimental only**
    *
-   *   If FreeType gets compiled with option AF_CONFIG_OPTION_USE_WARPER to
+   *   If FreeType gets compiled with option `AF_CONFIG_OPTION_USE_WARPER` to
    *   activate the warp hinting code in the auto-hinter, this property
    *   switches warping on and off.
    *
-   *   Warping only works in `normal' auto-hinting mode replacing it.
-   *   The idea of the code is to slightly scale and shift a glyph along
-   *   the non-hinted dimension (which is usually the horizontal axis) so
-   *   that as much of its segments are aligned (more or less) to the grid.
-   *   To find out a glyph's optimal scaling and shifting value, various
-   *   parameter combinations are tried and scored.
+   *   Warping only works in 'normal' auto-hinting mode replacing it.  The
+   *   idea of the code is to slightly scale and shift a glyph along the
+   *   non-hinted dimension (which is usually the horizontal axis) so that as
+   *   much of its segments are aligned (more or less) to the grid.  To find
+   *   out a glyph's optimal scaling and shifting value, various parameter
+   *   combinations are tried and scored.
    *
    *   By default, warping is off.
    *
    * @note:
    *   This property can be used with @FT_Property_Get also.
    *
-   *   This property can be set via the `FREETYPE_PROPERTIES' environment
-   *   variable (using values 1 and 0 for `on' and `off', respectively).
+   *   This property can be set via the `FREETYPE_PROPERTIES` environment
+   *   variable (using values 1 and 0 for 'on' and 'off', respectively).
    *
    *   The warping code can also change advance widths.  Have a look at the
-   *   `lsb_delta' and `rsb_delta' fields in the @FT_GlyphSlotRec structure
+   *   `lsb_delta` and `rsb_delta` fields in the @FT_GlyphSlotRec structure
    *   for details on improving inter-glyph distances while rendering.
    *
    *   Since warping is a global property of the auto-hinter it is best to
    *   change its value before rendering any face.  Otherwise, you should
-   *   reload all faces that get auto-hinted in `normal' hinting mode.
+   *   reload all faces that get auto-hinted in 'normal' hinting mode.
    *
    * @example:
    *   This example shows how to switch on warping (omitting the error
    *   handling).
    *
-   *   {
+   *   ```
    *     FT_Library  library;
    *     FT_Bool     warping = 1;
    *
@@ -1216,7 +1212,7 @@
    *     FT_Init_FreeType( &library );
    *
    *     FT_Property_Set( library, "autofitter", "warping", &warping );
-   *   }
+   *   ```
    *
    * @since:
    *   2.6
diff --git a/include/freetype/fterrdef.h b/include/freetype/fterrdef.h
index 3d91ed0..9bc7dc6 100644
--- a/include/freetype/fterrdef.h
+++ b/include/freetype/fterrdef.h
@@ -4,7 +4,7 @@
  *
  *   FreeType error codes (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,21 +28,20 @@
    *  All possible error codes returned by FreeType functions.
    *
    * @description:
-   *  The list below is taken verbatim from the file `fterrdef.h'
-   *  (loaded automatically by including `FT_FREETYPE_H').  The first
-   *  argument of the `FT_ERROR_DEF_' macro is the error label; by
-   *  default, the prefix `FT_Err_' gets added so that you get error
-   *  names like `FT_Err_Cannot_Open_Resource'.  The second argument is
-   *  the error code, and the last argument an error string, which is not
-   *  used by FreeType.
+   *  The list below is taken verbatim from the file `fterrdef.h` (loaded
+   *  automatically by including `FT_FREETYPE_H`).  The first argument of the
+   *  `FT_ERROR_DEF_` macro is the error label; by default, the prefix
+   *  `FT_Err_` gets added so that you get error names like
+   *  `FT_Err_Cannot_Open_Resource`.  The second argument is the error code,
+   *  and the last argument an error string, which is not used by FreeType.
    *
-   *  Within your application you should *only* use error names and
-   *  *never* its numeric values!  The latter might (and actually do)
+   *  Within your application you should **only** use error names and
+   *  **never** its numeric values!  The latter might (and actually do)
    *  change in forthcoming FreeType versions.
    *
-   *  Macro `FT_NOERRORDEF_' defines `FT_Err_Ok', which is always zero.
-   *  See the `Error Enumerations' subsection how to automatically
-   *  generate a list of error strings.
+   *  Macro `FT_NOERRORDEF_` defines `FT_Err_Ok`, which is always zero.  See
+   *  the 'Error Enumerations' subsection how to automatically generate a
+   *  list of error strings.
    *
    */
 
diff --git a/include/freetype/fterrors.h b/include/freetype/fterrors.h
index d602bd5..2b47eb2 100644
--- a/include/freetype/fterrors.h
+++ b/include/freetype/fterrors.h
@@ -4,7 +4,7 @@
  *
  *   FreeType error code handling (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -19,92 +19,102 @@
   /**************************************************************************
    *
    * @section:
-   *  error_enumerations
+   *   error_enumerations
    *
    * @title:
-   *  Error Enumerations
+   *   Error Enumerations
    *
    * @abstract:
-   *  How to handle errors and error strings.
+   *   How to handle errors and error strings.
    *
    * @description:
-   *  The header file `fterrors.h' (which is automatically included by
-   *  `freetype.h' defines the handling of FreeType's enumeration
-   *  constants.  It can also be used to generate error message strings
-   *  with a small macro trick explained below.
+   *   The header file `fterrors.h` (which is automatically included by
+   *   `freetype.h` defines the handling of FreeType's enumeration
+   *   constants.  It can also be used to generate error message strings
+   *   with a small macro trick explained below.
    *
-   *  *Error* *Formats*
+   *   **Error Formats**
    *
-   *  The configuration macro FT_CONFIG_OPTION_USE_MODULE_ERRORS can be
-   *  defined in `ftoption.h' in order to make the higher byte indicate
-   *  the module where the error has happened (this is not compatible
-   *  with standard builds of FreeType~2, however).  See the file
-   *  `ftmoderr.h' for more details.
+   *   The configuration macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` can be
+   *   defined in `ftoption.h` in order to make the higher byte indicate the
+   *   module where the error has happened (this is not compatible with
+   *   standard builds of FreeType~2, however).  See the file `ftmoderr.h`
+   *   for more details.
    *
-   *  *Error* *Message* *Strings*
+   *   **Error Message Strings**
    *
-   *  Error definitions are set up with special macros that allow client
-   *  applications to build a table of error message strings.  The
-   *  strings are not included in a normal build of FreeType~2 to save
-   *  space (most client applications do not use them).
+   *   Error definitions are set up with special macros that allow client
+   *   applications to build a table of error message strings.  The strings
+   *   are not included in a normal build of FreeType~2 to save space (most
+   *   client applications do not use them).
    *
-   *  To do so, you have to define the following macros before including
-   *  this file.
+   *   To do so, you have to define the following macros before including
+   *   this file.
    *
-   *  {
-   *    FT_ERROR_START_LIST
-   *  }
+   *   ```
+   *     FT_ERROR_START_LIST
+   *   ```
    *
-   *  This macro is called before anything else to define the start of
-   *  the error list.  It is followed by several FT_ERROR_DEF calls.
+   *   This macro is called before anything else to define the start of the
+   *   error list.  It is followed by several `FT_ERROR_DEF` calls.
    *
-   *  {
-   *    FT_ERROR_DEF( e, v, s )
-   *  }
+   *   ```
+   *     FT_ERROR_DEF( e, v, s )
+   *   ```
    *
-   *  This macro is called to define one single error.  `e' is the error
-   *  code identifier (e.g., `Invalid_Argument'), `v' is the error's
-   *  numerical value, and `s' is the corresponding error string.
+   *   This macro is called to define one single error.  'e' is the error
+   *   code identifier (e.g., `Invalid_Argument`), 'v' is the error's
+   *   numerical value, and 's' is the corresponding error string.
    *
-   *  {
-   *    FT_ERROR_END_LIST
-   *  }
+   *   ```
+   *     FT_ERROR_END_LIST
+   *   ```
    *
-   *  This macro ends the list.
+   *   This macro ends the list.
    *
-   *  Additionally, you have to undefine `FTERRORS_H_' before #including
-   *  this file.
+   *   Additionally, you have to undefine `FTERRORS_H_` before #including
+   *   this file.
    *
-   *  Here is a simple example.
+   *   Here is a simple example.
    *
-   *  {
-   *    #undef FTERRORS_H_
-   *    #define FT_ERRORDEF( e, v, s )  { e, s },
-   *    #define FT_ERROR_START_LIST     {
-   *    #define FT_ERROR_END_LIST       { 0, NULL } };
+   *   ```
+   *     #undef FTERRORS_H_
+   *     #define FT_ERRORDEF( e, v, s )  { e, s },
+   *     #define FT_ERROR_START_LIST     {
+   *     #define FT_ERROR_END_LIST       { 0, NULL } };
    *
-   *    const struct
-   *    {
-   *      int          err_code;
-   *      const char*  err_msg;
-   *    } ft_errors[] =
+   *     const struct
+   *     {
+   *       int          err_code;
+   *       const char*  err_msg;
+   *     } ft_errors[] =
    *
-   *    #include FT_ERRORS_H
-   *  }
+   *     #include FT_ERRORS_H
+   *   ```
    *
-   *  Note that `FT_Err_Ok' is _not_ defined with `FT_ERRORDEF' but with
-   *  `FT_NOERRORDEF'; it is always zero.
+   *   An alternative to using an array is a switch statement.
    *
+   *   ```
+   *     #undef FTERRORS_H_
+   *     #define FT_ERROR_START_LIST     switch ( error_code ) {
+   *     #define FT_ERRORDEF( e, v, s )    case v: return s;
+   *     #define FT_ERROR_END_LIST       }
+   *   ```
+   *
+   *   If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should
+   *   be replaced with `FT_ERROR_BASE(error_code)` in the last example.
    */
 
   /* */
 
-  /* In previous FreeType versions we used `__FTERRORS_H__'.  However, */
+  /* In previous FreeType versions we used `__FTERRORS_H__`.  However, */
   /* using two successive underscores in a non-system symbol name      */
   /* violates the C (and C++) standard, so it was changed to the       */
   /* current form.  In spite of this, we have to make                  */
   /*                                                                   */
+  /* ```                                                               */
   /*   #undefine __FTERRORS_H__                                        */
+  /* ```                                                               */
   /*                                                                   */
   /* work for backward compatibility.                                  */
   /*                                                                   */
@@ -130,7 +140,7 @@
 
 
   /* FT_ERR_PREFIX is used as a prefix for error identifiers. */
-  /* By default, we use `FT_Err_'.                            */
+  /* By default, we use `FT_Err_`.                            */
   /*                                                          */
 #ifndef FT_ERR_PREFIX
 #define FT_ERR_PREFIX  FT_Err_
@@ -158,6 +168,8 @@
   /*                                                           */
 #ifndef FT_ERRORDEF
 
+#define FT_INCLUDE_ERR_PROTOS
+
 #define FT_ERRORDEF( e, v, s )  e = v,
 #define FT_ERROR_START_LIST     enum {
 #define FT_ERROR_END_LIST       FT_ERR_CAT( FT_ERR_PREFIX, Max ) };
@@ -220,6 +232,57 @@
 #undef FT_ERR_PREFIX
 #endif
 
+  /* FT_INCLUDE_ERR_PROTOS:  Control if function prototypes should be       */
+  /*                         included with `#include FT_ERRORS_H'.  This is */
+  /*                         only true where `FT_ERRORDEF` is undefined.    */
+  /* FT_ERR_PROTOS_DEFINED:  Actual multiple-inclusion protection of        */
+  /*                         `fterrors.h`.                                  */
+#ifdef FT_INCLUDE_ERR_PROTOS
+#undef FT_INCLUDE_ERR_PROTOS
+
+#ifndef FT_ERR_PROTOS_DEFINED
+#define FT_ERR_PROTOS_DEFINED
+
+
+FT_BEGIN_HEADER
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Error_String
+   *
+   * @description:
+   *   Retrieve the description of a valid FreeType error code.
+   *
+   * @input:
+   *   error_code ::
+   *     A valid FreeType error code.
+   *
+   * @return:
+   *   A C~string or `NULL`, if any error occurred.
+   *
+   * @note:
+   *   FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or
+   *   `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions.
+   *   'error_string' will be `NULL` otherwise.
+   *
+   *   Module identification will be ignored:
+   *
+   *   ```c
+   *     strcmp( FT_Error_String(  FT_Err_Unknown_File_Format ),
+   *             FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0;
+   *   ```
+   */
+  FT_EXPORT( const char* )
+  FT_Error_String( FT_Error  error_code );
+
+FT_END_HEADER
+
+
+#endif /* FT_ERR_PROTOS_DEFINED */
+
+#endif /* FT_INCLUDE_ERR_PROTOS */
+
 #endif /* !(FTERRORS_H_ && __FTERRORS_H__) */
 
 
diff --git a/include/freetype/ftfntfmt.h b/include/freetype/ftfntfmt.h
index 3f3d410..aae0b13 100644
--- a/include/freetype/ftfntfmt.h
+++ b/include/freetype/ftfntfmt.h
@@ -4,7 +4,7 @@
  *
  *   Support functions for font formats.
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -44,10 +44,10 @@
    *  Getting the font format.
    *
    * @description:
-   *  The single function in this section can be used to get the font
-   *  format.  Note that this information is not needed normally;
-   *  however, there are special cases (like in PDF devices) where it is
-   *  important to differentiate, in spite of FreeType's uniform API.
+   *  The single function in this section can be used to get the font format.
+   *  Note that this information is not needed normally; however, there are
+   *  special cases (like in PDF devices) where it is important to
+   *  differentiate, in spite of FreeType's uniform API.
    *
    */
 
@@ -58,9 +58,9 @@
    *  FT_Get_Font_Format
    *
    * @description:
-   *  Return a string describing the format of a given face.  Possible
-   *  values are `TrueType', `Type~1', `BDF', `PCF', `Type~42',
-   *  `CID~Type~1', `CFF', `PFR', and `Windows~FNT'.
+   *  Return a string describing the format of a given face.  Possible values
+   *  are 'TrueType', 'Type~1', 'BDF', 'PCF', 'Type~42', 'CID~Type~1', 'CFF',
+   *  'PFR', and 'Windows~FNT'.
    *
    *  The return value is suitable to be used as an X11 FONT_PROPERTY.
    *
@@ -69,11 +69,10 @@
    *    Input face handle.
    *
    * @return:
-   *  Font format string.  NULL in case of error.
+   *  Font format string.  `NULL` in case of error.
    *
    * @note:
-   *  A deprecated name for the same function is
-   *  `FT_Get_X11_Font_Format'.
+   *  A deprecated name for the same function is `FT_Get_X11_Font_Format`.
    */
   FT_EXPORT( const char* )
   FT_Get_Font_Format( FT_Face  face );
diff --git a/include/freetype/ftgasp.h b/include/freetype/ftgasp.h
index 605ff28..24673d8 100644
--- a/include/freetype/ftgasp.h
+++ b/include/freetype/ftgasp.h
@@ -2,9 +2,9 @@
  *
  * ftgasp.h
  *
- *   Access of TrueType's `gasp' table (specification).
+ *   Access of TrueType's 'gasp' table (specification).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,7 +32,7 @@
 FT_BEGIN_HEADER
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @section:
    *   gasp_table
@@ -41,16 +41,16 @@
    *   Gasp Table
    *
    * @abstract:
-   *   Retrieving TrueType `gasp' table entries.
+   *   Retrieving TrueType 'gasp' table entries.
    *
    * @description:
    *   The function @FT_Get_Gasp can be used to query a TrueType or OpenType
-   *   font for specific entries in its `gasp' table, if any.  This is
-   *   mainly useful when implementing native TrueType hinting with the
-   *   bytecode interpreter to duplicate the Windows text rendering results.
+   *   font for specific entries in its 'gasp' table, if any.  This is mainly
+   *   useful when implementing native TrueType hinting with the bytecode
+   *   interpreter to duplicate the Windows text rendering results.
    */
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_GASP_XXX
@@ -66,7 +66,7 @@
    *
    *   FT_GASP_DO_GRIDFIT ::
    *     Grid-fitting and hinting should be performed at the specified ppem.
-   *     This *really* means TrueType bytecode interpretation.  If this bit
+   *     This **really** means TrueType bytecode interpretation.  If this bit
    *     is not set, no hinting gets applied.
    *
    *   FT_GASP_DO_GRAY ::
@@ -80,13 +80,13 @@
    *     Grid-fitting must be used with ClearType's symmetric smoothing.
    *
    * @note:
-   *   The bit-flags `FT_GASP_DO_GRIDFIT' and `FT_GASP_DO_GRAY' are to be
+   *   The bit-flags `FT_GASP_DO_GRIDFIT` and `FT_GASP_DO_GRAY` are to be
    *   used for standard font rasterization only.  Independently of that,
-   *   `FT_GASP_SYMMETRIC_SMOOTHING' and `FT_GASP_SYMMETRIC_GRIDFIT' are to
-   *   be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT' and
-   *   `FT_GASP_DO_GRAY' are consequently ignored).
+   *   `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` are to
+   *   be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT` and
+   *   `FT_GASP_DO_GRAY` are consequently ignored).
    *
-   *   `ClearType' is Microsoft's implementation of LCD rendering, partly
+   *   'ClearType' is Microsoft's implementation of LCD rendering, partly
    *   protected by patents.
    *
    * @since:
@@ -99,15 +99,15 @@
 #define FT_GASP_SYMMETRIC_SMOOTHING  0x08
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Get_Gasp
    *
    * @description:
    *   For a TrueType or OpenType font file, return the rasterizer behaviour
-   *   flags from the font's `gasp' table corresponding to a given
-   *   character pixel size.
+   *   flags from the font's 'gasp' table corresponding to a given character
+   *   pixel size.
    *
    * @input:
    *   face ::
@@ -118,12 +118,12 @@
    *
    * @return:
    *   Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no
-   *   `gasp' table in the face.
+   *   'gasp' table in the face.
    *
    * @note:
    *   If you want to use the MM functionality of OpenType variation fonts
    *   (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this
-   *   function *after* setting an instance since the return values can
+   *   function **after** setting an instance since the return values can
    *   change.
    *
    * @since:
diff --git a/include/freetype/ftglyph.h b/include/freetype/ftglyph.h
index be17a77..fedab84 100644
--- a/include/freetype/ftglyph.h
+++ b/include/freetype/ftglyph.h
@@ -4,7 +4,7 @@
  *
  *   FreeType convenience functions to handle glyphs (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,13 +18,13 @@
 
   /**************************************************************************
    *
-   * This file contains the definition of several convenience functions
-   * that can be used by client applications to easily retrieve glyph
-   * bitmaps and outlines from a given face.
+   * This file contains the definition of several convenience functions that
+   * can be used by client applications to easily retrieve glyph bitmaps and
+   * outlines from a given face.
    *
-   * These functions should be optional if you are writing a font server
-   * or text layout engine on top of FreeType.  However, they are pretty
-   * handy for many other simple uses of the library.
+   * These functions should be optional if you are writing a font server or
+   * text layout engine on top of FreeType.  However, they are pretty handy
+   * for many other simple uses of the library.
    *
    */
 
@@ -58,9 +58,10 @@
    *   Generic interface to manage individual glyph data.
    *
    * @description:
-   *   This section contains definitions used to manage glyph data
-   *   through generic FT_Glyph objects.  Each of them can contain a
-   *   bitmap, a vector outline, or even images in other formats.
+   *   This section contains definitions used to manage glyph data through
+   *   generic @FT_Glyph objects.  Each of them can contain a bitmap,
+   *   a vector outline, or even images in other formats.  These objects are
+   *   detached from @FT_Face, contrary to @FT_GlyphSlot.
    *
    */
 
@@ -76,8 +77,8 @@
    *
    * @description:
    *   Handle to an object used to model generic glyph images.  It is a
-   *   pointer to the @FT_GlyphRec structure and can contain a glyph
-   *   bitmap or pointer.
+   *   pointer to the @FT_GlyphRec structure and can contain a glyph bitmap
+   *   or pointer.
    *
    * @note:
    *   Glyph objects are not owned by the library.  You must thus release
@@ -93,8 +94,8 @@
    *   FT_GlyphRec
    *
    * @description:
-   *   The root glyph structure contains a given glyph image plus its
-   *   advance width in 16.16 fixed-point format.
+   *   The root glyph structure contains a given glyph image plus its advance
+   *   width in 16.16 fixed-point format.
    *
    * @fields:
    *   library ::
@@ -125,8 +126,8 @@
    *   FT_BitmapGlyph
    *
    * @description:
-   *   A handle to an object used to model a bitmap glyph image.  This is
-   *   a sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
+   *   A handle to an object used to model a bitmap glyph image.  This is a
+   *   sub-class of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec.
    */
   typedef struct FT_BitmapGlyphRec_*  FT_BitmapGlyph;
 
@@ -138,32 +139,31 @@
    *
    * @description:
    *   A structure used for bitmap glyph images.  This really is a
-   *   `sub-class' of @FT_GlyphRec.
+   *   'sub-class' of @FT_GlyphRec.
    *
    * @fields:
    *   root ::
    *     The root @FT_Glyph fields.
    *
    *   left ::
-   *     The left-side bearing, i.e., the horizontal distance
-   *     from the current pen position to the left border of the
-   *     glyph bitmap.
+   *     The left-side bearing, i.e., the horizontal distance from the
+   *     current pen position to the left border of the glyph bitmap.
    *
    *   top ::
-   *     The top-side bearing, i.e., the vertical distance from
-   *     the current pen position to the top border of the glyph
-   *     bitmap.  This distance is positive for upwards~y!
+   *     The top-side bearing, i.e., the vertical distance from the current
+   *     pen position to the top border of the glyph bitmap.  This distance
+   *     is positive for upwards~y!
    *
    *   bitmap ::
    *     A descriptor for the bitmap.
    *
    * @note:
    *   You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have
-   *   `glyph->format == FT_GLYPH_FORMAT_BITMAP'.  This lets you access
-   *   the bitmap's contents easily.
+   *   `glyph->format == FT_GLYPH_FORMAT_BITMAP`.  This lets you access the
+   *   bitmap's contents easily.
    *
-   *   The corresponding pixel buffer is always owned by @FT_BitmapGlyph
-   *   and is thus created and destroyed with it.
+   *   The corresponding pixel buffer is always owned by @FT_BitmapGlyph and
+   *   is thus created and destroyed with it.
    */
   typedef struct  FT_BitmapGlyphRec_
   {
@@ -181,8 +181,8 @@
    *   FT_OutlineGlyph
    *
    * @description:
-   *   A handle to an object used to model an outline glyph image.  This
-   *   is a sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
+   *   A handle to an object used to model an outline glyph image.  This is a
+   *   sub-class of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec.
    */
   typedef struct FT_OutlineGlyphRec_*  FT_OutlineGlyph;
 
@@ -193,8 +193,8 @@
    *   FT_OutlineGlyphRec
    *
    * @description:
-   *   A structure used for outline (vectorial) glyph images.  This
-   *   really is a `sub-class' of @FT_GlyphRec.
+   *   A structure used for outline (vectorial) glyph images.  This really is
+   *   a 'sub-class' of @FT_GlyphRec.
    *
    * @fields:
    *   root ::
@@ -205,15 +205,15 @@
    *
    * @note:
    *   You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have
-   *   `glyph->format == FT_GLYPH_FORMAT_OUTLINE'.  This lets you access
-   *   the outline's content easily.
+   *   `glyph->format == FT_GLYPH_FORMAT_OUTLINE`.  This lets you access the
+   *   outline's content easily.
    *
    *   As the outline is extracted from a glyph slot, its coordinates are
-   *   expressed normally in 26.6 pixels, unless the flag
-   *   @FT_LOAD_NO_SCALE was used in @FT_Load_Glyph() or @FT_Load_Char().
+   *   expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE
+   *   was used in @FT_Load_Glyph or @FT_Load_Char.
    *
-   *   The outline's tables are always owned by the object and are
-   *   destroyed with it.
+   *   The outline's tables are always owned by the object and are destroyed
+   *   with it.
    */
   typedef struct  FT_OutlineGlyphRec_
   {
@@ -261,8 +261,8 @@
    *   FT_Get_Glyph
    *
    * @description:
-   *   A function used to extract a glyph image from a slot.  Note that
-   *   the created @FT_Glyph object must be released with @FT_Done_Glyph.
+   *   A function used to extract a glyph image from a slot.  Note that the
+   *   created @FT_Glyph object must be released with @FT_Done_Glyph.
    *
    * @input:
    *   slot ::
@@ -276,10 +276,9 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Because `*aglyph->advance.x' and `*aglyph->advance.y' are 16.16
-   *   fixed-point numbers, `slot->advance.x' and `slot->advance.y'
-   *   (which are in 26.6 fixed-point format) must be in the range
-   *   ]-32768;32768[.
+   *   Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16
+   *   fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which
+   *   are in 26.6 fixed-point format) must be in the range ]-32768;32768[.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Glyph( FT_GlyphSlot  slot,
@@ -301,8 +300,7 @@
    *
    * @output:
    *   target ::
-   *     A handle to the target glyph object.  0~in case of
-   *     error.
+   *     A handle to the target glyph object.  0~in case of error.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -329,15 +327,15 @@
    *     A pointer to a 2x2 matrix to apply.
    *
    *   delta ::
-   *     A pointer to a 2d vector to apply.  Coordinates are
-   *     expressed in 1/64th of a pixel.
+   *     A pointer to a 2d vector to apply.  Coordinates are expressed in
+   *     1/64th of a pixel.
    *
    * @return:
    *   FreeType error code (if not 0, the glyph format is not scalable).
    *
    * @note:
-   *   The 2x2 transformation matrix is also applied to the glyph's
-   *   advance vector.
+   *   The 2x2 transformation matrix is also applied to the glyph's advance
+   *   vector.
    */
   FT_EXPORT( FT_Error )
   FT_Glyph_Transform( FT_Glyph    glyph,
@@ -381,7 +379,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_Glyph_BBox_Mode' values instead                   */
+  /* `FT_Glyph_BBox_Mode` values instead                   */
 #define ft_glyph_bbox_unscaled   FT_GLYPH_BBOX_UNSCALED
 #define ft_glyph_bbox_subpixels  FT_GLYPH_BBOX_SUBPIXELS
 #define ft_glyph_bbox_gridfit    FT_GLYPH_BBOX_GRIDFIT
@@ -395,71 +393,71 @@
    *   FT_Glyph_Get_CBox
    *
    * @description:
-   *   Return a glyph's `control box'.  The control box encloses all the
+   *   Return a glyph's 'control box'.  The control box encloses all the
    *   outline's points, including Bezier control points.  Though it
    *   coincides with the exact bounding box for most glyphs, it can be
-   *   slightly larger in some situations (like when rotating an outline
-   *   that contains Bezier outside arcs).
+   *   slightly larger in some situations (like when rotating an outline that
+   *   contains Bezier outside arcs).
    *
-   *   Computing the control box is very fast, while getting the bounding
-   *   box can take much more time as it needs to walk over all segments
-   *   and arcs in the outline.  To get the latter, you can use the
-   *   `ftbbox' component, which is dedicated to this single task.
+   *   Computing the control box is very fast, while getting the bounding box
+   *   can take much more time as it needs to walk over all segments and arcs
+   *   in the outline.  To get the latter, you can use the 'ftbbox'
+   *   component, which is dedicated to this single task.
    *
    * @input:
    *   glyph ::
    *     A handle to the source glyph object.
    *
    *   mode ::
-   *     The mode that indicates how to interpret the returned
-   *     bounding box values.
+   *     The mode that indicates how to interpret the returned bounding box
+   *     values.
    *
    * @output:
    *   acbox ::
-   *     The glyph coordinate bounding box.  Coordinates are
-   *     expressed in 1/64th of pixels if it is grid-fitted.
+   *     The glyph coordinate bounding box.  Coordinates are expressed in
+   *     1/64th of pixels if it is grid-fitted.
    *
    * @note:
    *   Coordinates are relative to the glyph origin, using the y~upwards
    *   convention.
    *
-   *   If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode'
-   *   must be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font
-   *   units in 26.6 pixel format.  The value @FT_GLYPH_BBOX_SUBPIXELS
-   *   is another name for this constant.
+   *   If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must
+   *   be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6
+   *   pixel format.  The value @FT_GLYPH_BBOX_SUBPIXELS is another name for
+   *   this constant.
    *
    *   If the font is tricky and the glyph has been loaded with
    *   @FT_LOAD_NO_SCALE, the resulting CBox is meaningless.  To get
-   *   reasonable values for the CBox it is necessary to load the glyph
-   *   at a large ppem value (so that the hinting instructions can
-   *   properly shift and scale the subglyphs), then extracting the CBox,
-   *   which can be eventually converted back to font units.
+   *   reasonable values for the CBox it is necessary to load the glyph at a
+   *   large ppem value (so that the hinting instructions can properly shift
+   *   and scale the subglyphs), then extracting the CBox, which can be
+   *   eventually converted back to font units.
    *
-   *   Note that the maximum coordinates are exclusive, which means that
-   *   one can compute the width and height of the glyph image (be it in
-   *   integer or 26.6 pixels) as:
+   *   Note that the maximum coordinates are exclusive, which means that one
+   *   can compute the width and height of the glyph image (be it in integer
+   *   or 26.6 pixels) as:
    *
-   *   {
+   *   ```
    *     width  = bbox.xMax - bbox.xMin;
    *     height = bbox.yMax - bbox.yMin;
-   *   }
+   *   ```
    *
-   *   Note also that for 26.6 coordinates, if `bbox_mode' is set to
+   *   Note also that for 26.6 coordinates, if `bbox_mode` is set to
    *   @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted,
    *   which corresponds to:
    *
-   *   {
+   *   ```
    *     bbox.xMin = FLOOR(bbox.xMin);
    *     bbox.yMin = FLOOR(bbox.yMin);
    *     bbox.xMax = CEILING(bbox.xMax);
    *     bbox.yMax = CEILING(bbox.yMax);
-   *   }
+   *   ```
    *
-   *   To get the bbox in pixel coordinates, set `bbox_mode' to
+   *   To get the bbox in pixel coordinates, set `bbox_mode` to
    *   @FT_GLYPH_BBOX_TRUNCATE.
    *
-   *   To get the bbox in grid-fitted pixel coordinates, set `bbox_mode'
-   *   to @FT_GLYPH_BBOX_PIXELS.
+   *   To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to
+   *   @FT_GLYPH_BBOX_PIXELS.
    */
   FT_EXPORT( void )
   FT_Glyph_Get_CBox( FT_Glyph  glyph,
@@ -481,19 +479,16 @@
    *
    * @input:
    *   render_mode ::
-   *     An enumeration that describes how the data is
-   *     rendered.
+   *     An enumeration that describes how the data is rendered.
    *
    *   origin ::
-   *     A pointer to a vector used to translate the glyph
-   *     image before rendering.  Can be~0 (if no
-   *     translation).  The origin is expressed in
-   *     26.6 pixels.
+   *     A pointer to a vector used to translate the glyph image before
+   *     rendering.  Can be~0 (if no translation).  The origin is expressed
+   *     in 26.6 pixels.
    *
    *   destroy ::
-   *     A boolean that indicates that the original glyph
-   *     image should be destroyed by this function.  It is
-   *     never destroyed in case of error.
+   *     A boolean that indicates that the original glyph image should be
+   *     destroyed by this function.  It is never destroyed in case of error.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -501,14 +496,14 @@
    * @note:
    *   This function does nothing if the glyph format isn't scalable.
    *
-   *   The glyph image is translated with the `origin' vector before
+   *   The glyph image is translated with the `origin` vector before
    *   rendering.
    *
-   *   The first parameter is a pointer to an @FT_Glyph handle, that will
-   *   be _replaced_ by this function (with newly allocated data).
-   *   Typically, you would use (omitting error handling):
+   *   The first parameter is a pointer to an @FT_Glyph handle, that will be
+   *   _replaced_ by this function (with newly allocated data).  Typically,
+   *   you would use (omitting error handling):
    *
-   *   {
+   *   ```
    *     FT_Glyph        glyph;
    *     FT_BitmapGlyph  glyph_bitmap;
    *
@@ -536,11 +531,11 @@
    *
    *     // discard glyph image (bitmap or not)
    *     FT_Done_Glyph( glyph );
-   *   }
+   *   ```
    *
-   *   Here another example, again without error handling:
+   *   Here is another example, again without error handling:
    *
-   *   {
+   *   ```
    *     FT_Glyph  glyphs[MAX_GLYPHS]
    *
    *
@@ -572,7 +567,7 @@
    *
    *     for ( idx = 0; i < MAX_GLYPHS; i++ )
    *       FT_Done_Glyph( glyphs[idx] );
-   *   }
+   *   ```
    */
   FT_EXPORT( FT_Error )
   FT_Glyph_To_Bitmap( FT_Glyph*       the_glyph,
@@ -615,18 +610,18 @@
    *   FT_Matrix_Multiply
    *
    * @description:
-   *   Perform the matrix operation `b = a*b'.
+   *   Perform the matrix operation `b = a*b`.
    *
    * @input:
    *   a ::
-   *     A pointer to matrix `a'.
+   *     A pointer to matrix `a`.
    *
    * @inout:
    *   b ::
-   *     A pointer to matrix `b'.
+   *     A pointer to matrix `b`.
    *
    * @note:
-   *   The result is undefined if either `a' or `b' is zero.
+   *   The result is undefined if either `a` or `b` is zero.
    *
    *   Since the function uses wrap-around arithmetic, results become
    *   meaningless if the arguments are very large.
@@ -646,8 +641,7 @@
    *
    * @inout:
    *   matrix ::
-   *     A pointer to the target matrix.  Remains untouched in
-   *     case of error.
+   *     A pointer to the target matrix.  Remains untouched in case of error.
    *
    * @return:
    *   FreeType error code.  0~means success.
diff --git a/include/freetype/ftgxval.h b/include/freetype/ftgxval.h
index 532b484..b14f637 100644
--- a/include/freetype/ftgxval.h
+++ b/include/freetype/ftgxval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO, Redhat K.K,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -53,9 +53,9 @@
    *   An API to validate TrueTypeGX/AAT tables.
    *
    * @description:
-   *   This section contains the declaration of functions to validate
-   *   some TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd,
-   *   trak, prop, lcar).
+   *   This section contains the declaration of functions to validate some
+   *   TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak,
+   *   prop, lcar).
    *
    * @order:
    *   FT_TrueTypeGX_Validate
@@ -73,8 +73,8 @@
   /**************************************************************************
    *
    *
-   * Warning: Use FT_VALIDATE_XXX to validate a table.
-   *         Following definitions are for gxvalid developers.
+   * Warning: Use `FT_VALIDATE_XXX` to validate a table.
+   *          Following definitions are for gxvalid developers.
    *
    *
    */
@@ -92,14 +92,14 @@
 #define FT_VALIDATE_GX_LAST_INDEX  FT_VALIDATE_lcar_INDEX
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_VALIDATE_GX_LENGTH
    *
    * @description:
    *   The number of tables checked in this module.  Use it as a parameter
-   *   for the `table-length' argument of function @FT_TrueTypeGX_Validate.
+   *   for the `table-length` argument of function @FT_TrueTypeGX_Validate.
    */
 #define FT_VALIDATE_GX_LENGTH  ( FT_VALIDATE_GX_LAST_INDEX + 1 )
 
@@ -112,7 +112,7 @@
           ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX )
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *    FT_VALIDATE_GXXXX
@@ -123,34 +123,34 @@
    *
    * @values:
    *    FT_VALIDATE_feat ::
-   *      Validate `feat' table.
+   *      Validate 'feat' table.
    *
    *    FT_VALIDATE_mort ::
-   *      Validate `mort' table.
+   *      Validate 'mort' table.
    *
    *    FT_VALIDATE_morx ::
-   *      Validate `morx' table.
+   *      Validate 'morx' table.
    *
    *    FT_VALIDATE_bsln ::
-   *      Validate `bsln' table.
+   *      Validate 'bsln' table.
    *
    *    FT_VALIDATE_just ::
-   *      Validate `just' table.
+   *      Validate 'just' table.
    *
    *    FT_VALIDATE_kern ::
-   *      Validate `kern' table.
+   *      Validate 'kern' table.
    *
    *    FT_VALIDATE_opbd ::
-   *      Validate `opbd' table.
+   *      Validate 'opbd' table.
    *
    *    FT_VALIDATE_trak ::
-   *      Validate `trak' table.
+   *      Validate 'trak' table.
    *
    *    FT_VALIDATE_prop ::
-   *      Validate `prop' table.
+   *      Validate 'prop' table.
    *
    *    FT_VALIDATE_lcar ::
-   *      Validate `lcar' table.
+   *      Validate 'lcar' table.
    *
    *    FT_VALIDATE_GX ::
    *      Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern,
@@ -181,7 +181,7 @@
                           FT_VALIDATE_lcar )
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_TrueTypeGX_Validate
@@ -189,8 +189,8 @@
    * @description:
    *    Validate various TrueTypeGX tables to assure that all offsets and
    *    indices are valid.  The idea is that a higher-level library that
-   *    actually does the text layout can access those tables without
-   *    error checking (which can be quite time consuming).
+   *    actually does the text layout can access those tables without error
+   *    checking (which can be quite time consuming).
    *
    * @input:
    *    face ::
@@ -201,13 +201,13 @@
    *      @FT_VALIDATE_GXXXX for possible values.
    *
    *    table_length ::
-   *      The size of the `tables' array.  Normally, @FT_VALIDATE_GX_LENGTH
+   *      The size of the `tables` array.  Normally, @FT_VALIDATE_GX_LENGTH
    *      should be passed.
    *
    * @output:
    *    tables ::
-   *      The array where all validated sfnt tables are stored.
-   *      The array itself must be allocated by a client.
+   *      The array where all validated sfnt tables are stored.  The array
+   *      itself must be allocated by a client.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -217,7 +217,7 @@
    *   otherwise.
    *
    *   After use, the application should deallocate the buffers pointed to by
-   *   each `tables' element, by calling @FT_TrueTypeGX_Free.  A NULL value
+   *   each `tables` element, by calling @FT_TrueTypeGX_Free.  A `NULL` value
    *   indicates that the table either doesn't exist in the font, the
    *   application hasn't asked for validation, or the validator doesn't have
    *   the ability to validate the sfnt table.
@@ -229,7 +229,7 @@
                           FT_UInt   table_length );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_TrueTypeGX_Free
@@ -242,8 +242,7 @@
    *      A handle to the input face.
    *
    *    table ::
-   *      The pointer to the buffer allocated by
-   *      @FT_TrueTypeGX_Validate.
+   *      The pointer to the buffer allocated by @FT_TrueTypeGX_Validate.
    *
    * @note:
    *   This function must be used to free the buffer allocated by
@@ -254,26 +253,25 @@
                       FT_Bytes  table );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *    FT_VALIDATE_CKERNXXX
    *
    * @description:
-   *    A list of bit-field constants used with @FT_ClassicKern_Validate
-   *    to indicate the classic kern dialect or dialects.  If the selected
-   *    type doesn't fit, @FT_ClassicKern_Validate regards the table as
-   *    invalid.
+   *    A list of bit-field constants used with @FT_ClassicKern_Validate to
+   *    indicate the classic kern dialect or dialects.  If the selected type
+   *    doesn't fit, @FT_ClassicKern_Validate regards the table as invalid.
    *
    * @values:
    *    FT_VALIDATE_MS ::
-   *      Handle the `kern' table as a classic Microsoft kern table.
+   *      Handle the 'kern' table as a classic Microsoft kern table.
    *
    *    FT_VALIDATE_APPLE ::
-   *      Handle the `kern' table as a classic Apple kern table.
+   *      Handle the 'kern' table as a classic Apple kern table.
    *
    *    FT_VALIDATE_CKERN ::
-   *      Handle the `kern' as either classic Apple or Microsoft kern table.
+   *      Handle the 'kern' as either classic Apple or Microsoft kern table.
    */
 #define FT_VALIDATE_MS     ( FT_VALIDATE_GX_START << 0 )
 #define FT_VALIDATE_APPLE  ( FT_VALIDATE_GX_START << 1 )
@@ -281,18 +279,18 @@
 #define FT_VALIDATE_CKERN  ( FT_VALIDATE_MS | FT_VALIDATE_APPLE )
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_ClassicKern_Validate
    *
    * @description:
-   *    Validate classic (16-bit format) kern table to assure that the offsets
-   *    and indices are valid.  The idea is that a higher-level library that
-   *    actually does the text layout can access those tables without error
-   *    checking (which can be quite time consuming).
+   *    Validate classic (16-bit format) kern table to assure that the
+   *    offsets and indices are valid.  The idea is that a higher-level
+   *    library that actually does the text layout can access those tables
+   *    without error checking (which can be quite time consuming).
    *
-   *    The `kern' table validator in @FT_TrueTypeGX_Validate deals with both
+   *    The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both
    *    the new 32-bit format and the classic 16-bit format, while
    *    FT_ClassicKern_Validate only supports the classic 16-bit format.
    *
@@ -313,7 +311,7 @@
    *
    * @note:
    *   After use, the application should deallocate the buffers pointed to by
-   *   `ckern_table', by calling @FT_ClassicKern_Free.  A NULL value
+   *   `ckern_table`, by calling @FT_ClassicKern_Free.  A `NULL` value
    *   indicates that the table doesn't exist in the font.
    */
   FT_EXPORT( FT_Error )
@@ -322,7 +320,7 @@
                            FT_Bytes  *ckern_table );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_ClassicKern_Free
diff --git a/include/freetype/ftgzip.h b/include/freetype/ftgzip.h
index 378a365..418c612 100644
--- a/include/freetype/ftgzip.h
+++ b/include/freetype/ftgzip.h
@@ -4,7 +4,7 @@
  *
  *   Gzip-compressed stream support.
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -48,15 +48,15 @@
    */
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stream_OpenGzip
    *
    * @description:
-   *   Open a new stream to parse gzip-compressed font files.  This is
-   *   mainly used to support the compressed `*.pcf.gz' fonts that come
-   *   with XFree86.
+   *   Open a new stream to parse gzip-compressed font files.  This is mainly
+   *   used to support the compressed `*.pcf.gz` fonts that come with
+   *   XFree86.
    *
    * @input:
    *   stream ::
@@ -71,9 +71,9 @@
    * @note:
    *   The source stream must be opened _before_ calling this function.
    *
-   *   Calling the internal function `FT_Stream_Close' on the new stream will
-   *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
-   *   objects will be released to the heap.
+   *   Calling the internal function `FT_Stream_Close` on the new stream will
+   *   **not** call `FT_Stream_Close` on the source stream.  None of the
+   *   stream objects will be released to the heap.
    *
    *   The stream implementation is very basic and resets the decompression
    *   process each time seeking backwards is needed within the stream.
@@ -81,10 +81,10 @@
    *   In certain builds of the library, gzip compression recognition is
    *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
    *   This means that if no font driver is capable of handling the raw
-   *   compressed file, the library will try to open a gzipped stream from
-   *   it and re-open the face with it.
+   *   compressed file, the library will try to open a gzipped stream from it
+   *   and re-open the face with it.
    *
-   *   This function may return `FT_Err_Unimplemented_Feature' if your build
+   *   This function may return `FT_Err_Unimplemented_Feature` if your build
    *   of FreeType was not compiled with zlib support.
    */
   FT_EXPORT( FT_Error )
@@ -92,14 +92,14 @@
                       FT_Stream  source );
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Gzip_Uncompress
    *
    * @description:
    *   Decompress a zipped input buffer into an output buffer.  This function
-   *   is modeled after zlib's `uncompress' function.
+   *   is modeled after zlib's `uncompress` function.
    *
    * @input:
    *   memory ::
@@ -120,14 +120,14 @@
    *     Before calling the function, this is the total size of the output
    *     buffer, which must be large enough to hold the entire uncompressed
    *     data (so the size of the uncompressed data must be known in
-   *     advance).  After calling the function, `output_len' is the size of
-   *     the used data in `output'.
+   *     advance).  After calling the function, `output_len` is the size of
+   *     the used data in `output`.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function may return `FT_Err_Unimplemented_Feature' if your build
+   *   This function may return `FT_Err_Unimplemented_Feature` if your build
    *   of FreeType was not compiled with zlib support.
    *
    * @since:
diff --git a/include/freetype/ftimage.h b/include/freetype/ftimage.h
index a3fa0b6..face34f 100644
--- a/include/freetype/ftimage.h
+++ b/include/freetype/ftimage.h
@@ -5,7 +5,7 @@
  *   FreeType glyph image formats and default raster interface
  *   (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,7 +18,7 @@
 
   /**************************************************************************
    *
-   * Note: A `raster' is simply a scan-line converter, used to render
+   * Note: A 'raster' is simply a scan-line converter, used to render
    *       FT_Outlines into FT_Bitmaps.
    *
    */
@@ -51,9 +51,9 @@
    *   FT_Pos
    *
    * @description:
-   *   The type FT_Pos is used to store vectorial coordinates.  Depending
-   *   on the context, these can represent distances in integer font
-   *   units, or 16.16, or 26.6 fixed-point pixel coordinates.
+   *   The type FT_Pos is used to store vectorial coordinates.  Depending on
+   *   the context, these can represent distances in integer font units, or
+   *   16.16, or 26.6 fixed-point pixel coordinates.
    */
   typedef signed long  FT_Pos;
 
@@ -64,8 +64,8 @@
    *   FT_Vector
    *
    * @description:
-   *   A simple structure used to store a 2D vector; coordinates are of
-   *   the FT_Pos type.
+   *   A simple structure used to store a 2D vector; coordinates are of the
+   *   FT_Pos type.
    *
    * @fields:
    *   x ::
@@ -88,8 +88,7 @@
    *
    * @description:
    *   A structure used to hold an outline's bounding box, i.e., the
-   *   coordinates of its extrema in the horizontal and vertical
-   *   directions.
+   *   coordinates of its extrema in the horizontal and vertical directions.
    *
    * @fields:
    *   xMin ::
@@ -105,18 +104,17 @@
    *     The vertical maximum (top-most).
    *
    * @note:
-   *   The bounding box is specified with the coordinates of the lower
-   *   left and the upper right corner.  In PostScript, those values are
-   *   often called (llx,lly) and (urx,ury), respectively.
+   *   The bounding box is specified with the coordinates of the lower left
+   *   and the upper right corner.  In PostScript, those values are often
+   *   called (llx,lly) and (urx,ury), respectively.
    *
-   *   If `yMin' is negative, this value gives the glyph's descender.
-   *   Otherwise, the glyph doesn't descend below the baseline.
-   *   Similarly, if `ymax' is positive, this value gives the glyph's
-   *   ascender.
+   *   If `yMin` is negative, this value gives the glyph's descender.
+   *   Otherwise, the glyph doesn't descend below the baseline.  Similarly,
+   *   if `ymax` is positive, this value gives the glyph's ascender.
    *
-   *   `xMin' gives the horizontal distance from the glyph's origin to
-   *   the left edge of the glyph's bounding box.  If `xMin' is negative,
-   *   the glyph extends to the left of the origin.
+   *   `xMin` gives the horizontal distance from the glyph's origin to the
+   *   left edge of the glyph's bounding box.  If `xMin` is negative, the
+   *   glyph extends to the left of the origin.
    */
   typedef struct  FT_BBox_
   {
@@ -132,56 +130,53 @@
    *   FT_Pixel_Mode
    *
    * @description:
-   *   An enumeration type used to describe the format of pixels in a
-   *   given bitmap.  Note that additional formats may be added in the
-   *   future.
+   *   An enumeration type used to describe the format of pixels in a given
+   *   bitmap.  Note that additional formats may be added in the future.
    *
    * @values:
    *   FT_PIXEL_MODE_NONE ::
    *     Value~0 is reserved.
    *
    *   FT_PIXEL_MODE_MONO ::
-   *     A monochrome bitmap, using 1~bit per pixel.  Note that pixels
-   *     are stored in most-significant order (MSB), which means that
-   *     the left-most pixel in a byte has value 128.
+   *     A monochrome bitmap, using 1~bit per pixel.  Note that pixels are
+   *     stored in most-significant order (MSB), which means that the
+   *     left-most pixel in a byte has value 128.
    *
    *   FT_PIXEL_MODE_GRAY ::
    *     An 8-bit bitmap, generally used to represent anti-aliased glyph
-   *     images.  Each pixel is stored in one byte.  Note that the number
-   *     of `gray' levels is stored in the `num_grays' field of the
-   *     @FT_Bitmap structure (it generally is 256).
+   *     images.  Each pixel is stored in one byte.  Note that the number of
+   *     'gray' levels is stored in the `num_grays` field of the @FT_Bitmap
+   *     structure (it generally is 256).
    *
    *   FT_PIXEL_MODE_GRAY2 ::
-   *     A 2-bit per pixel bitmap, used to represent embedded
-   *     anti-aliased bitmaps in font files according to the OpenType
-   *     specification.  We haven't found a single font using this
-   *     format, however.
+   *     A 2-bit per pixel bitmap, used to represent embedded anti-aliased
+   *     bitmaps in font files according to the OpenType specification.  We
+   *     haven't found a single font using this format, however.
    *
    *   FT_PIXEL_MODE_GRAY4 ::
-   *     A 4-bit per pixel bitmap, representing embedded anti-aliased
-   *     bitmaps in font files according to the OpenType specification.
-   *     We haven't found a single font using this format, however.
+   *     A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps
+   *     in font files according to the OpenType specification.  We haven't
+   *     found a single font using this format, however.
    *
    *   FT_PIXEL_MODE_LCD ::
-   *     An 8-bit bitmap, representing RGB or BGR decimated glyph images
-   *     used for display on LCD displays; the bitmap is three times
-   *     wider than the original glyph image.  See also
-   *     @FT_RENDER_MODE_LCD.
+   *     An 8-bit bitmap, representing RGB or BGR decimated glyph images used
+   *     for display on LCD displays; the bitmap is three times wider than
+   *     the original glyph image.  See also @FT_RENDER_MODE_LCD.
    *
    *   FT_PIXEL_MODE_LCD_V ::
-   *     An 8-bit bitmap, representing RGB or BGR decimated glyph images
-   *     used for display on rotated LCD displays; the bitmap is three
-   *     times taller than the original glyph image.  See also
+   *     An 8-bit bitmap, representing RGB or BGR decimated glyph images used
+   *     for display on rotated LCD displays; the bitmap is three times
+   *     taller than the original glyph image.  See also
    *     @FT_RENDER_MODE_LCD_V.
    *
    *   FT_PIXEL_MODE_BGRA ::
    *     [Since 2.5] An image with four 8-bit channels per pixel,
-   *     representing a color image (such as emoticons) with alpha
-   *     channel.  For each pixel, the format is BGRA, which means, the
-   *     blue channel comes first in memory.  The color channels are
-   *     pre-multiplied and in the sRGB colorspace.  For example, full
-   *     red at half-translucent opacity will be represented as
-   *     `00,00,80,80', not `00,00,FF,80'.  See also @FT_LOAD_COLOR.
+   *     representing a color image (such as emoticons) with alpha channel.
+   *     For each pixel, the format is BGRA, which means, the blue channel
+   *     comes first in memory.  The color channels are pre-multiplied and in
+   *     the sRGB colorspace.  For example, full red at half-translucent
+   *     opacity will be represented as '00,00,80,80', not '00,00,FF,80'.
+   *     See also @FT_LOAD_COLOR.
    */
   typedef enum  FT_Pixel_Mode_
   {
@@ -199,7 +194,7 @@
   } FT_Pixel_Mode;
 
 
-  /* these constants are deprecated; use the corresponding `FT_Pixel_Mode' */
+  /* these constants are deprecated; use the corresponding `FT_Pixel_Mode` */
   /* values instead.                                                       */
 #define ft_pixel_mode_none   FT_PIXEL_MODE_NONE
 #define ft_pixel_mode_mono   FT_PIXEL_MODE_MONO
@@ -214,9 +209,9 @@
    *   FT_Bitmap
    *
    * @description:
-   *   A structure used to describe a bitmap or pixmap to the raster.
-   *   Note that we now manage pixmaps of various depths through the
-   *   `pixel_mode' field.
+   *   A structure used to describe a bitmap or pixmap to the raster.  Note
+   *   that we now manage pixmaps of various depths through the `pixel_mode`
+   *   field.
    *
    * @fields:
    *   rows ::
@@ -226,51 +221,42 @@
    *     The number of pixels in bitmap row.
    *
    *   pitch ::
-   *     The pitch's absolute value is the number of bytes
-   *     taken by one bitmap row, including padding.
-   *     However, the pitch is positive when the bitmap has
-   *     a `down' flow, and negative when it has an `up'
-   *     flow.  In all cases, the pitch is an offset to add
-   *     to a bitmap pointer in order to go down one row.
+   *     The pitch's absolute value is the number of bytes taken by one
+   *     bitmap row, including padding.  However, the pitch is positive when
+   *     the bitmap has a 'down' flow, and negative when it has an 'up' flow.
+   *     In all cases, the pitch is an offset to add to a bitmap pointer in
+   *     order to go down one row.
    *
-   *     Note that `padding' means the alignment of a
-   *     bitmap to a byte border, and FreeType functions
-   *     normally align to the smallest possible integer
-   *     value.
+   *     Note that 'padding' means the alignment of a bitmap to a byte
+   *     border, and FreeType functions normally align to the smallest
+   *     possible integer value.
    *
-   *     For the B/W rasterizer, `pitch' is always an even
-   *     number.
+   *     For the B/W rasterizer, `pitch` is always an even number.
    *
-   *     To change the pitch of a bitmap (say, to make it a
-   *     multiple of 4), use @FT_Bitmap_Convert.
-   *     Alternatively, you might use callback functions to
-   *     directly render to the application's surface; see
-   *     the file `example2.cpp' in the tutorial for a
-   *     demonstration.
+   *     To change the pitch of a bitmap (say, to make it a multiple of 4),
+   *     use @FT_Bitmap_Convert.  Alternatively, you might use callback
+   *     functions to directly render to the application's surface; see the
+   *     file `example2.cpp` in the tutorial for a demonstration.
    *
    *   buffer ::
-   *     A typeless pointer to the bitmap buffer.  This
-   *     value should be aligned on 32-bit boundaries in
-   *     most cases.
+   *     A typeless pointer to the bitmap buffer.  This value should be
+   *     aligned on 32-bit boundaries in most cases.
    *
    *   num_grays ::
-   *     This field is only used with
-   *     @FT_PIXEL_MODE_GRAY; it gives the number of gray
-   *     levels used in the bitmap.
+   *     This field is only used with @FT_PIXEL_MODE_GRAY; it gives the
+   *     number of gray levels used in the bitmap.
    *
    *   pixel_mode ::
-   *     The pixel mode, i.e., how pixel bits are stored.
-   *     See @FT_Pixel_Mode for possible values.
+   *     The pixel mode, i.e., how pixel bits are stored.  See @FT_Pixel_Mode
+   *     for possible values.
    *
    *   palette_mode ::
-   *     This field is intended for paletted pixel modes;
-   *     it indicates how the palette is stored.  Not
-   *     used currently.
+   *     This field is intended for paletted pixel modes; it indicates how
+   *     the palette is stored.  Not used currently.
    *
    *   palette ::
-   *     A typeless pointer to the bitmap palette; this
-   *     field is intended for paletted pixel modes.  Not
-   *     used currently.
+   *     A typeless pointer to the bitmap palette; this field is intended for
+   *     paletted pixel modes.  Not used currently.
    */
   typedef struct  FT_Bitmap_
   {
@@ -311,45 +297,42 @@
    *     The number of points in the outline.
    *
    *   points ::
-   *     A pointer to an array of `n_points' @FT_Vector
-   *     elements, giving the outline's point coordinates.
+   *     A pointer to an array of `n_points` @FT_Vector elements, giving the
+   *     outline's point coordinates.
    *
    *   tags ::
-   *     A pointer to an array of `n_points' chars, giving
-   *     each outline point's type.
+   *     A pointer to an array of `n_points` chars, giving each outline
+   *     point's type.
    *
-   *     If bit~0 is unset, the point is `off' the curve,
-   *     i.e., a Bezier control point, while it is `on' if
-   *     set.
+   *     If bit~0 is unset, the point is 'off' the curve, i.e., a Bezier
+   *     control point, while it is 'on' if set.
    *
-   *     Bit~1 is meaningful for `off' points only.  If set,
-   *     it indicates a third-order Bezier arc control point;
-   *     and a second-order control point if unset.
+   *     Bit~1 is meaningful for 'off' points only.  If set, it indicates a
+   *     third-order Bezier arc control point; and a second-order control
+   *     point if unset.
    *
-   *     If bit~2 is set, bits 5-7 contain the drop-out mode
-   *     (as defined in the OpenType specification; the value
-   *     is the same as the argument to the SCANMODE
-   *     instruction).
+   *     If bit~2 is set, bits 5-7 contain the drop-out mode (as defined in
+   *     the OpenType specification; the value is the same as the argument to
+   *     the 'SCANMODE' instruction).
    *
    *     Bits 3 and~4 are reserved for internal purposes.
    *
    *   contours ::
-   *     An array of `n_contours' shorts, giving the end
-   *     point of each contour within the outline.  For
-   *     example, the first contour is defined by the points
-   *     `0' to `contours[0]', the second one is defined by
-   *     the points `contours[0]+1' to `contours[1]', etc.
+   *     An array of `n_contours` shorts, giving the end point of each
+   *     contour within the outline.  For example, the first contour is
+   *     defined by the points '0' to `contours[0]`, the second one is
+   *     defined by the points `contours[0]+1` to `contours[1]`, etc.
    *
    *   flags ::
-   *     A set of bit flags used to characterize the outline
-   *     and give hints to the scan-converter and hinter on
-   *     how to convert/grid-fit it.  See @FT_OUTLINE_XXX.
+   *     A set of bit flags used to characterize the outline and give hints
+   *     to the scan-converter and hinter on how to convert/grid-fit it.  See
+   *     @FT_OUTLINE_XXX.
    *
    * @note:
-   *   The B/W rasterizer only checks bit~2 in the `tags' array for the
-   *   first point of each contour.  The drop-out mode as given with
+   *   The B/W rasterizer only checks bit~2 in the `tags` array for the first
+   *   point of each contour.  The drop-out mode as given with
    *   @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and
-   *   @FT_OUTLINE_INCLUDE_STUBS in `flags' is then overridden.
+   *   @FT_OUTLINE_INCLUDE_STUBS in `flags` is then overridden.
    */
   typedef struct  FT_Outline_
   {
@@ -378,22 +361,22 @@
    *   FT_OUTLINE_XXX
    *
    * @description:
-   *   A list of bit-field constants use for the flags in an outline's
-   *   `flags' field.
+   *   A list of bit-field constants used for the flags in an outline's
+   *   `flags` field.
    *
    * @values:
    *   FT_OUTLINE_NONE ::
    *     Value~0 is reserved.
    *
    *   FT_OUTLINE_OWNER ::
-   *     If set, this flag indicates that the outline's field arrays
-   *     (i.e., `points', `flags', and `contours') are `owned' by the
-   *     outline object, and should thus be freed when it is destroyed.
+   *     If set, this flag indicates that the outline's field arrays (i.e.,
+   *     `points`, `flags`, and `contours`) are 'owned' by the outline
+   *     object, and should thus be freed when it is destroyed.
    *
    *   FT_OUTLINE_EVEN_ODD_FILL ::
-   *     By default, outlines are filled using the non-zero winding rule.
-   *     If set to 1, the outline will be filled using the even-odd fill
-   *     rule (only works with the smooth rasterizer).
+   *     By default, outlines are filled using the non-zero winding rule.  If
+   *     set to 1, the outline will be filled using the even-odd fill rule
+   *     (only works with the smooth rasterizer).
    *
    *   FT_OUTLINE_REVERSE_FILL ::
    *     By default, outside contours of an outline are oriented in
@@ -403,46 +386,44 @@
    *     converter.
    *
    *   FT_OUTLINE_IGNORE_DROPOUTS ::
-   *     By default, the scan converter will try to detect drop-outs in
-   *     an outline and correct the glyph bitmap to ensure consistent
-   *     shape continuity.  If set, this flag hints the scan-line
-   *     converter to ignore such cases.  See below for more information.
+   *     By default, the scan converter will try to detect drop-outs in an
+   *     outline and correct the glyph bitmap to ensure consistent shape
+   *     continuity.  If set, this flag hints the scan-line converter to
+   *     ignore such cases.  See below for more information.
    *
    *   FT_OUTLINE_SMART_DROPOUTS ::
-   *     Select smart dropout control.  If unset, use simple dropout
-   *     control.  Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See
-   *     below for more information.
+   *     Select smart dropout control.  If unset, use simple dropout control.
+   *     Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for more
+   *     information.
    *
    *   FT_OUTLINE_INCLUDE_STUBS ::
-   *     If set, turn pixels on for `stubs', otherwise exclude them.
-   *     Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for
-   *     more information.
+   *     If set, turn pixels on for 'stubs', otherwise exclude them.  Ignored
+   *     if @FT_OUTLINE_IGNORE_DROPOUTS is set.  See below for more
+   *     information.
    *
    *   FT_OUTLINE_HIGH_PRECISION ::
    *     This flag indicates that the scan-line converter should try to
-   *     convert this outline to bitmaps with the highest possible
-   *     quality.  It is typically set for small character sizes.  Note
-   *     that this is only a hint that might be completely ignored by a
-   *     given scan-converter.
+   *     convert this outline to bitmaps with the highest possible quality.
+   *     It is typically set for small character sizes.  Note that this is
+   *     only a hint that might be completely ignored by a given
+   *     scan-converter.
    *
    *   FT_OUTLINE_SINGLE_PASS ::
    *     This flag is set to force a given scan-converter to only use a
    *     single pass over the outline to render a bitmap glyph image.
-   *     Normally, it is set for very large character sizes.  It is only
-   *     a hint that might be completely ignored by a given
-   *     scan-converter.
+   *     Normally, it is set for very large character sizes.  It is only a
+   *     hint that might be completely ignored by a given scan-converter.
    *
    * @note:
-   *   The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS,
-   *   and @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth
-   *   rasterizer.
+   *   The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and
+   *   @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer.
    *
-   *   There exists a second mechanism to pass the drop-out mode to the
-   *   B/W rasterizer; see the `tags' field in @FT_Outline.
+   *   There exists a second mechanism to pass the drop-out mode to the B/W
+   *   rasterizer; see the `tags` field in @FT_Outline.
    *
-   *   Please refer to the description of the `SCANTYPE' instruction in
-   *   the OpenType specification (in file `ttinst1.doc') how simple
-   *   drop-outs, smart drop-outs, and stubs are defined.
+   *   Please refer to the description of the 'SCANTYPE' instruction in the
+   *   OpenType specification (in file `ttinst1.doc`) how simple drop-outs,
+   *   smart drop-outs, and stubs are defined.
    */
 #define FT_OUTLINE_NONE             0x0
 #define FT_OUTLINE_OWNER            0x1
@@ -457,7 +438,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_OUTLINE_XXX' values instead                       */
+  /* `FT_OUTLINE_XXX` values instead                       */
 #define ft_outline_none             FT_OUTLINE_NONE
 #define ft_outline_owner            FT_OUTLINE_OWNER
 #define ft_outline_even_odd_fill    FT_OUTLINE_EVEN_ODD_FILL
@@ -468,20 +449,25 @@
 
   /* */
 
-#define FT_CURVE_TAG( flag )  ( flag & 3 )
+#define FT_CURVE_TAG( flag )  ( flag & 0x03 )
 
-#define FT_CURVE_TAG_ON            1
-#define FT_CURVE_TAG_CONIC         0
-#define FT_CURVE_TAG_CUBIC         2
+  /* see the `tags` field in `FT_Outline` for a description of the values */
+#define FT_CURVE_TAG_ON            0x01
+#define FT_CURVE_TAG_CONIC         0x00
+#define FT_CURVE_TAG_CUBIC         0x02
 
-#define FT_CURVE_TAG_HAS_SCANMODE  4
+#define FT_CURVE_TAG_HAS_SCANMODE  0x04
 
-#define FT_CURVE_TAG_TOUCH_X       8  /* reserved for the TrueType hinter */
-#define FT_CURVE_TAG_TOUCH_Y      16  /* reserved for the TrueType hinter */
+#define FT_CURVE_TAG_TOUCH_X       0x08  /* reserved for TrueType hinter */
+#define FT_CURVE_TAG_TOUCH_Y       0x10  /* reserved for TrueType hinter */
 
 #define FT_CURVE_TAG_TOUCH_BOTH    ( FT_CURVE_TAG_TOUCH_X | \
                                      FT_CURVE_TAG_TOUCH_Y )
+  /* values 0x20, 0x40, and 0x80 are reserved */
 
+
+  /* these constants are deprecated; use the corresponding */
+  /* `FT_CURVE_TAG_XXX` values instead                     */
 #define FT_Curve_Tag_On       FT_CURVE_TAG_ON
 #define FT_Curve_Tag_Conic    FT_CURVE_TAG_CONIC
 #define FT_Curve_Tag_Cubic    FT_CURVE_TAG_CUBIC
@@ -495,14 +481,14 @@
    *   FT_Outline_MoveToFunc
    *
    * @description:
-   *   A function pointer type used to describe the signature of a `move
-   *   to' function during outline walking/decomposition.
+   *   A function pointer type used to describe the signature of a 'move to'
+   *   function during outline walking/decomposition.
    *
-   *   A `move to' is emitted to start a new contour in an outline.
+   *   A 'move to' is emitted to start a new contour in an outline.
    *
    * @input:
    *   to ::
-   *     A pointer to the target point of the `move to'.
+   *     A pointer to the target point of the 'move to'.
    *
    *   user ::
    *     A typeless pointer, which is passed from the caller of the
@@ -524,14 +510,14 @@
    *   FT_Outline_LineToFunc
    *
    * @description:
-   *   A function pointer type used to describe the signature of a `line
-   *   to' function during outline walking/decomposition.
+   *   A function pointer type used to describe the signature of a 'line to'
+   *   function during outline walking/decomposition.
    *
-   *   A `line to' is emitted to indicate a segment in the outline.
+   *   A 'line to' is emitted to indicate a segment in the outline.
    *
    * @input:
    *   to ::
-   *     A pointer to the target point of the `line to'.
+   *     A pointer to the target point of the 'line to'.
    *
    *   user ::
    *     A typeless pointer, which is passed from the caller of the
@@ -553,23 +539,23 @@
    *   FT_Outline_ConicToFunc
    *
    * @description:
-   *   A function pointer type used to describe the signature of a `conic
-   *   to' function during outline walking or decomposition.
+   *   A function pointer type used to describe the signature of a 'conic to'
+   *   function during outline walking or decomposition.
    *
-   *   A `conic to' is emitted to indicate a second-order Bezier arc in
-   *   the outline.
+   *   A 'conic to' is emitted to indicate a second-order Bezier arc in the
+   *   outline.
    *
    * @input:
    *   control ::
-   *     An intermediate control point between the last position
-   *     and the new target in `to'.
+   *     An intermediate control point between the last position and the new
+   *     target in `to`.
    *
    *   to ::
    *     A pointer to the target end point of the conic arc.
    *
    *   user ::
-   *     A typeless pointer, which is passed from the caller of
-   *     the decomposition function.
+   *     A typeless pointer, which is passed from the caller of the
+   *     decomposition function.
    *
    * @return:
    *   Error code.  0~means success.
@@ -588,10 +574,10 @@
    *   FT_Outline_CubicToFunc
    *
    * @description:
-   *   A function pointer type used to describe the signature of a `cubic
-   *   to' function during outline walking or decomposition.
+   *   A function pointer type used to describe the signature of a 'cubic to'
+   *   function during outline walking or decomposition.
    *
-   *   A `cubic to' is emitted to indicate a third-order Bezier arc.
+   *   A 'cubic to' is emitted to indicate a third-order Bezier arc.
    *
    * @input:
    *   control1 ::
@@ -604,8 +590,8 @@
    *     A pointer to the target end point.
    *
    *   user ::
-   *     A typeless pointer, which is passed from the caller of
-   *     the decomposition function.
+   *     A typeless pointer, which is passed from the caller of the
+   *     decomposition function.
    *
    * @return:
    *   Error code.  0~means success.
@@ -630,7 +616,7 @@
    *
    * @fields:
    *   move_to ::
-   *     The `move to' emitter.
+   *     The 'move to' emitter.
    *
    *   line_to ::
    *     The segment emitter.
@@ -642,25 +628,25 @@
    *     The third-order Bezier arc emitter.
    *
    *   shift ::
-   *     The shift that is applied to coordinates before they
-   *     are sent to the emitter.
+   *     The shift that is applied to coordinates before they are sent to the
+   *     emitter.
    *
    *   delta ::
-   *     The delta that is applied to coordinates before they
-   *     are sent to the emitter, but after the shift.
+   *     The delta that is applied to coordinates before they are sent to the
+   *     emitter, but after the shift.
    *
    * @note:
-   *   The point coordinates sent to the emitters are the transformed
-   *   version of the original coordinates (this is important for high
-   *   accuracy during scan-conversion).  The transformation is simple:
+   *   The point coordinates sent to the emitters are the transformed version
+   *   of the original coordinates (this is important for high accuracy
+   *   during scan-conversion).  The transformation is simple:
    *
-   *   {
+   *   ```
    *     x' = (x << shift) - delta
    *     y' = (y << shift) - delta
-   *   }
+   *   ```
    *
-   *   Set the values of `shift' and `delta' to~0 to get the original
-   *   point coordinates.
+   *   Set the values of `shift` and `delta` to~0 to get the original point
+   *   coordinates.
    */
   typedef struct  FT_Outline_Funcs_
   {
@@ -692,13 +678,12 @@
    *   This macro converts four-letter tags to an unsigned long type.
    *
    * @note:
-   *   Since many 16-bit compilers don't like 32-bit enumerations, you
-   *   should redefine this macro in case of problems to something like
-   *   this:
+   *   Since many 16-bit compilers don't like 32-bit enumerations, you should
+   *   redefine this macro in case of problems to something like this:
    *
-   *   {
+   *   ```
    *     #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 )  value
-   *   }
+   *   ```
    *
    *   to get a simple enumeration without assigning special numbers.
    */
@@ -727,27 +712,26 @@
    *     The value~0 is reserved.
    *
    *   FT_GLYPH_FORMAT_COMPOSITE ::
-   *     The glyph image is a composite of several other images.  This
-   *     format is _only_ used with @FT_LOAD_NO_RECURSE, and is used to
-   *     report compound glyphs (like accented characters).
+   *     The glyph image is a composite of several other images.  This format
+   *     is _only_ used with @FT_LOAD_NO_RECURSE, and is used to report
+   *     compound glyphs (like accented characters).
    *
    *   FT_GLYPH_FORMAT_BITMAP ::
-   *     The glyph image is a bitmap, and can be described as an
-   *     @FT_Bitmap.  You generally need to access the `bitmap' field of
-   *     the @FT_GlyphSlotRec structure to read it.
+   *     The glyph image is a bitmap, and can be described as an @FT_Bitmap.
+   *     You generally need to access the `bitmap` field of the
+   *     @FT_GlyphSlotRec structure to read it.
    *
    *   FT_GLYPH_FORMAT_OUTLINE ::
-   *     The glyph image is a vectorial outline made of line segments
-   *     and Bezier arcs; it can be described as an @FT_Outline; you
-   *     generally want to access the `outline' field of the
-   *     @FT_GlyphSlotRec structure to read it.
+   *     The glyph image is a vectorial outline made of line segments and
+   *     Bezier arcs; it can be described as an @FT_Outline; you generally
+   *     want to access the `outline` field of the @FT_GlyphSlotRec structure
+   *     to read it.
    *
    *   FT_GLYPH_FORMAT_PLOTTER ::
    *     The glyph image is a vectorial path with no inside and outside
    *     contours.  Some Type~1 fonts, like those in the Hershey family,
-   *     contain glyphs in this format.  These are described as
-   *     @FT_Outline, but FreeType isn't currently capable of rendering
-   *     them correctly.
+   *     contain glyphs in this format.  These are described as @FT_Outline,
+   *     but FreeType isn't currently capable of rendering them correctly.
    */
   typedef enum  FT_Glyph_Format_
   {
@@ -762,7 +746,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_Glyph_Format' values instead.                     */
+  /* `FT_Glyph_Format` values instead.                     */
 #define ft_glyph_format_none       FT_GLYPH_FORMAT_NONE
 #define ft_glyph_format_composite  FT_GLYPH_FORMAT_COMPOSITE
 #define ft_glyph_format_bitmap     FT_GLYPH_FORMAT_BITMAP
@@ -783,12 +767,12 @@
 
   /**************************************************************************
    *
-   * A raster is a scan converter, in charge of rendering an outline into
-   * a bitmap.  This section contains the public API for rasters.
+   * A raster is a scan converter, in charge of rendering an outline into a
+   * bitmap.  This section contains the public API for rasters.
    *
    * Note that in FreeType 2, all rasters are now encapsulated within
-   * specific modules called `renderers'.  See `ftrender.h' for more
-   * details on renderers.
+   * specific modules called 'renderers'.  See `ftrender.h` for more details
+   * on renderers.
    *
    */
 
@@ -843,8 +827,8 @@
    *   FT_Span
    *
    * @description:
-   *   A structure used to model a single span of gray pixels when
-   *   rendering an anti-aliased bitmap.
+   *   A structure used to model a single span of gray pixels when rendering
+   *   an anti-aliased bitmap.
    *
    * @fields:
    *   x ::
@@ -854,16 +838,15 @@
    *     The span's length in pixels.
    *
    *   coverage ::
-   *     The span color/coverage, ranging from 0 (background)
-   *     to 255 (foreground).
+   *     The span color/coverage, ranging from 0 (background) to 255
+   *     (foreground).
    *
    * @note:
    *   This structure is used by the span drawing callback type named
-   *   @FT_SpanFunc that takes the y~coordinate of the span as a
-   *   parameter.
+   *   @FT_SpanFunc that takes the y~coordinate of the span as a parameter.
    *
-   *   The coverage value is always between 0 and 255.  If you want less
-   *   gray values, the callback function has to reduce them.
+   *   The coverage value is always between 0 and 255.  If you want less gray
+   *   values, the callback function has to reduce them.
    */
   typedef struct  FT_Span_
   {
@@ -880,29 +863,29 @@
    *   FT_SpanFunc
    *
    * @description:
-   *   A function used as a call-back by the anti-aliased renderer in
-   *   order to let client applications draw themselves the gray pixel
-   *   spans on each scan line.
+   *   A function used as a call-back by the anti-aliased renderer in order
+   *   to let client applications draw themselves the gray pixel spans on
+   *   each scan line.
    *
    * @input:
    *   y ::
-   *     The scanline's y~coordinate.
+   *     The scanline's upward y~coordinate.
    *
    *   count ::
    *     The number of spans to draw on this scanline.
    *
    *   spans ::
-   *     A table of `count' spans to draw on the scanline.
+   *     A table of `count` spans to draw on the scanline.
    *
    *   user ::
    *     User-supplied data that is passed to the callback.
    *
    * @note:
-   *   This callback allows client applications to directly render the
-   *   gray spans of the anti-aliased bitmap to any kind of surfaces.
+   *   This callback allows client applications to directly render the gray
+   *   spans of the anti-aliased bitmap to any kind of surfaces.
    *
-   *   This can be used to write anti-aliased outlines directly to a
-   *   given background bitmap, and even perform translucency.
+   *   This can be used to write anti-aliased outlines directly to a given
+   *   background bitmap, and even perform translucency.
    */
   typedef void
   (*FT_SpanFunc)( int             y,
@@ -947,7 +930,7 @@
    *   FT_RASTER_FLAG_XXX
    *
    * @description:
-   *   A list of bit flag constants as used in the `flags' field of a
+   *   A list of bit flag constants as used in the `flags` field of a
    *   @FT_Raster_Params structure.
    *
    * @values:
@@ -955,35 +938,23 @@
    *     This value is 0.
    *
    *   FT_RASTER_FLAG_AA ::
-   *     This flag is set to indicate that an
-   *     anti-aliased glyph image should be
-   *     generated.  Otherwise, it will be
-   *     monochrome (1-bit).
+   *     This flag is set to indicate that an anti-aliased glyph image should
+   *     be generated.  Otherwise, it will be monochrome (1-bit).
    *
    *   FT_RASTER_FLAG_DIRECT ::
-   *     This flag is set to indicate direct
-   *     rendering.  In this mode, client
-   *     applications must provide their own span
-   *     callback.  This lets them directly
-   *     draw or compose over an existing bitmap.
-   *     If this bit is not set, the target
-   *     pixmap's buffer _must_ be zeroed before
-   *     rendering.
+   *     This flag is set to indicate direct rendering.  In this mode, client
+   *     applications must provide their own span callback.  This lets them
+   *     directly draw or compose over an existing bitmap.  If this bit is
+   *     _not_ set, the target pixmap's buffer _must_ be zeroed before
+   *     rendering and the output will be clipped to its size.
    *
-   *     Direct rendering is only possible with
-   *     anti-aliased glyphs.
+   *     Direct rendering is only possible with anti-aliased glyphs.
    *
    *   FT_RASTER_FLAG_CLIP ::
-   *     This flag is only used in direct
-   *     rendering mode.  If set, the output will
-   *     be clipped to a box specified in the
-   *     `clip_box' field of the
-   *     @FT_Raster_Params structure.
-   *
-   *     Note that by default, the glyph bitmap
-   *     is clipped to the target pixmap, except
-   *     in direct rendering mode where all spans
-   *     are generated if no clipping box is set.
+   *     This flag is only used in direct rendering mode.  If set, the output
+   *     will be clipped to a box specified in the `clip_box` field of the
+   *     @FT_Raster_Params structure.  Otherwise, the `clip_box` is
+   *     effectively set to the bounding box and all spans are generated.
    */
 #define FT_RASTER_FLAG_DEFAULT  0x0
 #define FT_RASTER_FLAG_AA       0x1
@@ -991,7 +962,7 @@
 #define FT_RASTER_FLAG_CLIP     0x4
 
   /* these constants are deprecated; use the corresponding */
-  /* `FT_RASTER_FLAG_XXX' values instead                   */
+  /* `FT_RASTER_FLAG_XXX` values instead                   */
 #define ft_raster_flag_default  FT_RASTER_FLAG_DEFAULT
 #define ft_raster_flag_aa       FT_RASTER_FLAG_AA
 #define ft_raster_flag_direct   FT_RASTER_FLAG_DIRECT
@@ -1004,16 +975,15 @@
    *   FT_Raster_Params
    *
    * @description:
-   *   A structure to hold the arguments used by a raster's render
-   *   function.
+   *   A structure to hold the parameters used by a raster's render function,
+   *   passed as an argument to @FT_Outline_Render.
    *
    * @fields:
    *   target ::
    *     The target bitmap.
    *
    *   source ::
-   *     A pointer to the source glyph image (e.g., an
-   *     @FT_Outline).
+   *     A pointer to the source glyph image (e.g., an @FT_Outline).
    *
    *   flags ::
    *     The rendering flags.
@@ -1031,25 +1001,23 @@
    *     Unused.
    *
    *   user ::
-   *     User-supplied data that is passed to each drawing
-   *     callback.
+   *     User-supplied data that is passed to each drawing callback.
    *
    *   clip_box ::
-   *     An optional clipping box.  It is only used in
-   *     direct rendering mode.  Note that coordinates here
-   *     should be expressed in _integer_ pixels (and not in
-   *     26.6 fixed-point units).
+   *     An optional clipping box.  It is only used in direct rendering mode.
+   *     Note that coordinates here should be expressed in _integer_ pixels
+   *     (and not in 26.6 fixed-point units).
    *
    * @note:
-   *   An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA
-   *   bit flag is set in the `flags' field, otherwise a monochrome
-   *   bitmap is generated.
+   *   An anti-aliased glyph bitmap is drawn if the @FT_RASTER_FLAG_AA bit
+   *   flag is set in the `flags` field, otherwise a monochrome bitmap is
+   *   generated.
    *
-   *   If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags', the
-   *   raster will call the `gray_spans' callback to draw gray pixel
-   *   spans.  This allows direct composition over a pre-existing bitmap
-   *   through user-provided callbacks to perform the span drawing and
-   *   composition.    Not supported by the monochrome rasterizer.
+   *   If the @FT_RASTER_FLAG_DIRECT bit flag is set in `flags`, the raster
+   *   will call the `gray_spans` callback to draw gray pixel spans.  This
+   *   allows direct composition over a pre-existing bitmap through
+   *   user-provided callbacks to perform the span drawing and composition.
+   *   Not supported by the monochrome rasterizer.
    */
   typedef struct  FT_Raster_Params_
   {
@@ -1086,11 +1054,11 @@
    *   Error code.  0~means success.
    *
    * @note:
-   *   The `memory' parameter is a typeless pointer in order to avoid
-   *   un-wanted dependencies on the rest of the FreeType code.  In
-   *   practice, it is an @FT_Memory object, i.e., a handle to the
-   *   standard FreeType memory allocator.  However, this field can be
-   *   completely ignored by a given raster implementation.
+   *   The `memory` parameter is a typeless pointer in order to avoid
+   *   un-wanted dependencies on the rest of the FreeType code.  In practice,
+   *   it is an @FT_Memory object, i.e., a handle to the standard FreeType
+   *   memory allocator.  However, this field can be completely ignored by a
+   *   given raster implementation.
    */
   typedef int
   (*FT_Raster_NewFunc)( void*       memory,
@@ -1123,9 +1091,9 @@
    *   FT_Raster_ResetFunc
    *
    * @description:
-   *   FreeType used to provide an area of memory called the `render
-   *   pool' available to all registered rasterizers.  This was not
-   *   thread safe, however, and now FreeType never allocates this pool.
+   *   FreeType used to provide an area of memory called the 'render pool'
+   *   available to all registered rasterizers.  This was not thread safe,
+   *   however, and now FreeType never allocates this pool.
    *
    *   This function is called after a new raster object is created.
    *
@@ -1134,17 +1102,16 @@
    *     A handle to the new raster object.
    *
    *   pool_base ::
-   *     Previously, the address in memory of the render pool.
-   *     Set this to NULL.
+   *     Previously, the address in memory of the render pool.  Set this to
+   *     `NULL`.
    *
    *   pool_size ::
-   *     Previously, the size in bytes of the render pool.
-   *     Set this to 0.
+   *     Previously, the size in bytes of the render pool.  Set this to 0.
    *
    * @note:
-   *   Rasterizers should rely on dynamic or stack allocation if they
-   *   want to (a handle to the memory allocator is passed to the
-   *   rasterizer constructor).
+   *   Rasterizers should rely on dynamic or stack allocation if they want to
+   *   (a handle to the memory allocator is passed to the rasterizer
+   *   constructor).
    */
   typedef void
   (*FT_Raster_ResetFunc)( FT_Raster       raster,
@@ -1160,10 +1127,9 @@
    *   FT_Raster_SetModeFunc
    *
    * @description:
-   *   This function is a generic facility to change modes or attributes
-   *   in a given raster.  This can be used for debugging purposes, or
-   *   simply to allow implementation-specific `features' in a given
-   *   raster module.
+   *   This function is a generic facility to change modes or attributes in a
+   *   given raster.  This can be used for debugging purposes, or simply to
+   *   allow implementation-specific 'features' in a given raster module.
    *
    * @input:
    *   raster ::
@@ -1197,8 +1163,8 @@
    *     A handle to the raster object.
    *
    *   params ::
-   *     A pointer to an @FT_Raster_Params structure used to
-   *     store the rendering parameters.
+   *     A pointer to an @FT_Raster_Params structure used to store the
+   *     rendering parameters.
    *
    * @return:
    *   Error code.  0~means success.
@@ -1210,14 +1176,8 @@
    *   glyph formats.
    *
    *   Note also that the render function can fail and return a
-   *   `FT_Err_Unimplemented_Feature' error code if the raster used does
-   *   not support direct composition.
-   *
-   *   XXX: For now, the standard raster doesn't support direct
-   *        composition but this should change for the final release (see
-   *        the files `demos/src/ftgrays.c' and `demos/src/ftgrays2.c'
-   *        for examples of distinct implementations that support direct
-   *        composition).
+   *   `FT_Err_Unimplemented_Feature` error code if the raster used does not
+   *   support direct composition.
    */
   typedef int
   (*FT_Raster_RenderFunc)( FT_Raster                raster,
diff --git a/include/freetype/ftincrem.h b/include/freetype/ftincrem.h
index b3a17c3..a4db02b 100644
--- a/include/freetype/ftincrem.h
+++ b/include/freetype/ftincrem.h
@@ -4,7 +4,7 @@
  *
  *   FreeType incremental loading (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,7 +32,7 @@
 
 FT_BEGIN_HEADER
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @section:
    *    incremental
@@ -45,7 +45,7 @@
    *
    * @description:
    *   This section contains various functions used to perform so-called
-   *   `incremental' glyph loading.  This is a mode where all glyphs loaded
+   *   'incremental' glyph loading.  This is a mode where all glyphs loaded
    *   from a given @FT_Face are provided by the client application.
    *
    *   Apart from that, all other tables are loaded normally from the font
@@ -60,23 +60,24 @@
    */
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Incremental
    *
    * @description:
    *   An opaque type describing a user-provided object used to implement
-   *   `incremental' glyph loading within FreeType.  This is used to support
-   *   embedded fonts in certain environments (e.g., PostScript interpreters),
-   *   where the glyph data isn't in the font file, or must be overridden by
-   *   different values.
+   *   'incremental' glyph loading within FreeType.  This is used to support
+   *   embedded fonts in certain environments (e.g., PostScript
+   *   interpreters), where the glyph data isn't in the font file, or must be
+   *   overridden by different values.
    *
    * @note:
-   *   It is up to client applications to create and implement @FT_Incremental
-   *   objects, as long as they provide implementations for the methods
-   *   @FT_Incremental_GetGlyphDataFunc, @FT_Incremental_FreeGlyphDataFunc
-   *   and @FT_Incremental_GetGlyphMetricsFunc.
+   *   It is up to client applications to create and implement
+   *   @FT_Incremental objects, as long as they provide implementations for
+   *   the methods @FT_Incremental_GetGlyphDataFunc,
+   *   @FT_Incremental_FreeGlyphDataFunc and
+   *   @FT_Incremental_GetGlyphMetricsFunc.
    *
    *   See the description of @FT_Incremental_InterfaceRec to understand how
    *   to use incremental objects with FreeType.
@@ -85,14 +86,14 @@
   typedef struct FT_IncrementalRec_*  FT_Incremental;
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_Incremental_MetricsRec
    *
    * @description:
-   *   A small structure used to contain the basic glyph metrics returned
-   *   by the @FT_Incremental_GetGlyphMetricsFunc method.
+   *   A small structure used to contain the basic glyph metrics returned by
+   *   the @FT_Incremental_GetGlyphMetricsFunc method.
    *
    * @fields:
    *   bearing_x ::
@@ -109,7 +110,7 @@
    *
    * @note:
    *   These correspond to horizontal or vertical metrics depending on the
-   *   value of the `vertical' argument to the function
+   *   value of the `vertical` argument to the function
    *   @FT_Incremental_GetGlyphMetricsFunc.
    *
    */
@@ -123,7 +124,7 @@
   } FT_Incremental_MetricsRec;
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_Incremental_Metrics
@@ -135,7 +136,7 @@
    typedef struct FT_Incremental_MetricsRec_*  FT_Incremental_Metrics;
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Incremental_GetGlyphDataFunc
@@ -147,8 +148,8 @@
    *
    *   Note that the format of the glyph's data bytes depends on the font
    *   file format.  For TrueType, it must correspond to the raw bytes within
-   *   the `glyf' table.  For PostScript formats, it must correspond to the
-   *   *unencrypted* charstring bytes, without any `lenIV' header.  It is
+   *   the 'glyf' table.  For PostScript formats, it must correspond to the
+   *   **unencrypted** charstring bytes, without any `lenIV` header.  It is
    *   undefined for any other format.
    *
    * @input:
@@ -169,8 +170,8 @@
    *
    * @note:
    *   If this function returns successfully the method
-   *   @FT_Incremental_FreeGlyphDataFunc will be called later to release
-   *   the data bytes.
+   *   @FT_Incremental_FreeGlyphDataFunc will be called later to release the
+   *   data bytes.
    *
    *   Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for
    *   compound glyphs.
@@ -182,7 +183,7 @@
                                       FT_Data*        adata );
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Incremental_FreeGlyphDataFunc
@@ -206,7 +207,7 @@
                                        FT_Data*        data );
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Incremental_GetGlyphMetricsFunc
@@ -214,8 +215,8 @@
    * @description:
    *   A function used to retrieve the basic metrics of a given glyph index
    *   before accessing its data.  This is necessary because, in certain
-   *   formats like TrueType, the metrics are stored in a different place from
-   *   the glyph images proper.
+   *   formats like TrueType, the metrics are stored in a different place
+   *   from the glyph images proper.
    *
    * @input:
    *   incremental ::
@@ -229,9 +230,9 @@
    *     If true, return vertical metrics.
    *
    *   ametrics ::
-   *     This parameter is used for both input and output.
-   *     The original glyph metrics, if any, in font units.  If metrics are
-   *     not available all the values must be set to zero.
+   *     This parameter is used for both input and output.  The original
+   *     glyph metrics, if any, in font units.  If metrics are not available
+   *     all the values must be set to zero.
    *
    * @output:
    *   ametrics ::
@@ -252,8 +253,8 @@
    *   FT_Incremental_FuncsRec
    *
    * @description:
-   *   A table of functions for accessing fonts that load data
-   *   incrementally.  Used in @FT_Incremental_InterfaceRec.
+   *   A table of functions for accessing fonts that load data incrementally.
+   *   Used in @FT_Incremental_InterfaceRec.
    *
    * @fields:
    *   get_glyph_data ::
@@ -263,8 +264,8 @@
    *     The function to release glyph data.  Must not be null.
    *
    *   get_glyph_metrics ::
-   *     The function to get glyph metrics.  May be null if the font does
-   *     not provide overriding glyph metrics.
+   *     The function to get glyph metrics.  May be null if the font does not
+   *     provide overriding glyph metrics.
    *
    */
   typedef struct  FT_Incremental_FuncsRec_
@@ -276,7 +277,7 @@
   } FT_Incremental_FuncsRec;
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_Incremental_InterfaceRec
@@ -286,7 +287,7 @@
    *   wants to support incremental glyph loading.  You should use it with
    *   @FT_PARAM_TAG_INCREMENTAL as in the following example:
    *
-   *   {
+   *   ```
    *     FT_Incremental_InterfaceRec  inc_int;
    *     FT_Parameter                 parameter;
    *     FT_Open_Args                 open_args;
@@ -309,7 +310,7 @@
    *     // open the font
    *     error = FT_Open_Face( library, &open_args, index, &face );
    *     ...
-   *   }
+   *   ```
    *
    */
   typedef struct  FT_Incremental_InterfaceRec_
@@ -320,7 +321,7 @@
   } FT_Incremental_InterfaceRec;
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Incremental_Interface
diff --git a/include/freetype/ftlcdfil.h b/include/freetype/ftlcdfil.h
index 8d27135..3a19d04 100644
--- a/include/freetype/ftlcdfil.h
+++ b/include/freetype/ftlcdfil.h
@@ -5,7 +5,7 @@
  *   FreeType API for color filtering of subpixel bitmap glyphs
  *   (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
 
 FT_BEGIN_HEADER
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @section:
    *   lcd_rendering
@@ -45,9 +45,9 @@
    *   API to control subpixel rendering.
    *
    * @description:
-   *   FreeType provides two alternative subpixel rendering technologies.
-   *   Should you #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING in your
-   *   `ftoption.h', this enables patented ClearType-style rendering.
+   *   FreeType provides two alternative subpixel rendering technologies. 
+   *   Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your
+   *   `ftoption.h` file, this enables patented ClearType-style rendering. 
    *   Otherwise, Harmony LCD rendering is enabled.  These technologies are
    *   controlled differently and API described below, although always
    *   available, performs its function when appropriate method is enabled
@@ -58,19 +58,20 @@
    *   the stripe (usually horizontal RGB) by a factor of~3.  Using the
    *   subpixels coverages unfiltered can create severe color fringes
    *   especially when rendering thin features.  Indeed, to produce
-   *   black-on-white text, the nearby color subpixels must be dimmed equally.
+   *   black-on-white text, the nearby color subpixels must be dimmed
+   *   equally.
    *
    *   A good 5-tap FIR filter should be applied to subpixel coverages
    *   regardless of pixel boundaries and should have these properties:
    *
-   *   1) It should be symmetrical, like {~a, b, c, b, a~}, to avoid
+   *   1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid
    *      any shifts in appearance.
    *
-   *   2) It should be color-balanced, meaning a~+ b~=~c, to reduce color
+   *   2. It should be color-balanced, meaning a~+ b~=~c, to reduce color
    *      fringes by distributing the computed coverage for one subpixel to
    *      all subpixels equally.
    *
-   *   3) It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain
+   *   3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain
    *      overall brightness.
    *
    *   Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less
@@ -82,32 +83,32 @@
    *   subpixel-rendered bitmaps generated through @FT_Render_Glyph.
    *
    *   Harmony LCD rendering is suitable to panels with any regular subpixel
-   *   structure, not just monitors with 3 color striped subpixels, as long as
-   *   the color subpixels have fixed positions relative to the pixel center.
-   *   In this case, each color channel is then rendered separately after
-   *   shifting the outline opposite to the subpixel shift so that the
+   *   structure, not just monitors with 3 color striped subpixels, as long
+   *   as the color subpixels have fixed positions relative to the pixel
+   *   center.  In this case, each color channel is then rendered separately
+   *   after shifting the outline opposite to the subpixel shift so that the
    *   coverage maps are aligned.  This method is immune to color fringes
    *   because the shifts do not change integral coverage.
    *
    *   The subpixel geometry must be specified by xy-coordinates for each
-   *   subpixel. By convention they may come in the RGB order:
-   *   {{-1/3, 0}, {0, 0}, {1/3, 0}} for standard RGB striped panel or
-   *   {{-1/6, 1/4}, {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel.
+   *   subpixel. By convention they may come in the RGB order: {{-1/3, 0},
+   *   {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4},
+   *   {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel.
    *
    *   Use the @FT_Library_SetLcdGeometry API to specify subpixel positions.
-   *   If one follows the RGB order convention, the same order applies
-   *   to the resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps.
-   *   Note, however, that the coordinate frame for the latter must be rotated
+   *   If one follows the RGB order convention, the same order applies to the
+   *   resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps.  Note,
+   *   however, that the coordinate frame for the latter must be rotated
    *   clockwise.  Harmony with default LCD geometry is equivalent to
    *   ClearType with light filter.
    *
-   *   As a result of ClearType filtering or Harmony rendering, the dimensions
-   *   of LCD bitmaps can be either wider or taller than the dimensions of
-   *   the corresponding outline with regard to the pixel grid.  For example,
-   *   for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to the left, and
-   *   2~subpixels to the right.  The bitmap offset values are adjusted
-   *   accordingly, so clients shouldn't need to modify their layout and
-   *   glyph positioning code when enabling the filter.
+   *   As a result of ClearType filtering or Harmony rendering, the
+   *   dimensions of LCD bitmaps can be either wider or taller than the
+   *   dimensions of the corresponding outline with regard to the pixel grid.
+   *   For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to
+   *   the left, and 2~subpixels to the right.  The bitmap offset values are
+   *   adjusted accordingly, so clients shouldn't need to modify their layout
+   *   and glyph positioning code when enabling the filter.
    *
    *   The ClearType and Harmony rendering is applicable to glyph bitmaps
    *   rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and
@@ -116,14 +117,14 @@
    *   @FT_Outline_Get_Bitmap.
    *
    *   The described algorithms can completely remove color artefacts when
-   *   combined with gamma-corrected alpha blending in linear space.
-   *   Each of the 3~alpha values (subpixels) must by independently used to
-   *   blend one color channel.  That is, red alpha blends the red channel of
-   *   the text color with the red channel of the background pixel.
+   *   combined with gamma-corrected alpha blending in linear space.  Each of
+   *   the 3~alpha values (subpixels) must by independently used to blend one
+   *   color channel.  That is, red alpha blends the red channel of the text
+   *   color with the red channel of the background pixel.
    */
 
 
-  /****************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_LcdFilter
@@ -141,8 +142,8 @@
    *     with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256th units.
    *
    *   FT_LCD_FILTER_LIGHT ::
-   *     this is a boxy, normalized, and color-balanced three-tap filter
-   *     with weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units.
+   *     this is a boxy, normalized, and color-balanced three-tap filter with
+   *     weights of [0x00 0x55 0x56 0x55 0x00] in 1/256th units.
    *
    *   FT_LCD_FILTER_LEGACY ::
    *   FT_LCD_FILTER_LEGACY1 ::
@@ -151,12 +152,11 @@
    *     fringes if glyphs are not extremely well hinted to the pixel grid.
    *     This filter is only provided for comparison purposes, and might be
    *     disabled or stay unsupported in the future. The second value is
-   *     provided for compatibility with FontConfig, which historically
-   *     used different enumeration, sometimes incorrectly forwarded to
-   *     FreeType.
+   *     provided for compatibility with FontConfig, which historically used
+   *     different enumeration, sometimes incorrectly forwarded to FreeType.
    *
    * @since:
-   *   2.3.0 (`FT_LCD_FILTER_LEGACY1' since 2.6.2)
+   *   2.3.0 (`FT_LCD_FILTER_LEGACY1` since 2.6.2)
    */
   typedef enum  FT_LcdFilter_
   {
@@ -189,20 +189,20 @@
    *     The filter type.
    *
    *     You can use @FT_LCD_FILTER_NONE here to disable this feature, or
-   *     @FT_LCD_FILTER_DEFAULT to use a default filter that should work
-   *     well on most LCD screens.
+   *     @FT_LCD_FILTER_DEFAULT to use a default filter that should work well
+   *     on most LCD screens.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
    *   This feature is always disabled by default.  Clients must make an
-   *   explicit call to this function with a `filter' value other than
+   *   explicit call to this function with a `filter` value other than
    *   @FT_LCD_FILTER_NONE in order to enable it.
    *
-   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
-   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
-   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+   *   Due to **PATENTS** covering subpixel rendering, this function doesn't
+   *   do anything except returning `FT_Err_Unimplemented_Feature` if the
+   *   configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not
    *   defined in your build of the library, which should correspond to all
    *   default builds of FreeType.
    *
@@ -235,9 +235,9 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   Due to *PATENTS* covering subpixel rendering, this function doesn't
-   *   do anything except returning `FT_Err_Unimplemented_Feature' if the
-   *   configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
+   *   Due to **PATENTS** covering subpixel rendering, this function doesn't
+   *   do anything except returning `FT_Err_Unimplemented_Feature` if the
+   *   configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is not
    *   defined in your build of the library, which should correspond to all
    *   default builds of FreeType.
    *
@@ -296,8 +296,8 @@
    *   - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color
    *   stripes shifted by a third of a pixel. This could be an RGB panel.
    *
-   *   - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but
-   *   can specify a BGR panel instead, while keeping the bitmap in the same
+   *   - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can
+   *   specify a BGR panel instead, while keeping the bitmap in the same
    *   RGB888 format.
    *
    *   - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap
@@ -305,9 +305,9 @@
    *
    *   - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement.
    *
-   *   This function does nothing and returns `FT_Err_Unimplemented_Feature'
+   *   This function does nothing and returns `FT_Err_Unimplemented_Feature`
    *   in the context of ClearType-style subpixel rendering when
-   *   FT_CONFIG_OPTION_SUBPIXEL_RENDERING is defined in your build of the
+   *   `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the
    *   library.
    *
    * @since:
diff --git a/include/freetype/ftlist.h b/include/freetype/ftlist.h
index cdea897..4782892 100644
--- a/include/freetype/ftlist.h
+++ b/include/freetype/ftlist.h
@@ -4,7 +4,7 @@
  *
  *   Generic list support for FreeType (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,8 +18,8 @@
 
   /**************************************************************************
    *
-   * This file implements functions relative to list processing.  Its
-   * data structures are defined in `freetype.h'.
+   * This file implements functions relative to list processing.  Its data
+   * structures are defined in `freetype.h`.
    *
    */
 
@@ -53,8 +53,8 @@
    *   Simple management of lists.
    *
    * @description:
-   *   This section contains various definitions related to list
-   *   processing using doubly-linked nodes.
+   *   This section contains various definitions related to list processing
+   *   using doubly-linked nodes.
    *
    * @order:
    *   FT_List
@@ -90,7 +90,7 @@
    *     The address of the listed object.
    *
    * @return:
-   *   List node.  NULL if it wasn't found.
+   *   List node.  `NULL` if it wasn't found.
    */
   FT_EXPORT( FT_ListNode )
   FT_List_Find( FT_List  list,
@@ -141,8 +141,8 @@
    *   FT_List_Remove
    *
    * @description:
-   *   Remove a node from a list.  This function doesn't check whether
-   *   the node is in the list!
+   *   Remove a node from a list.  This function doesn't check whether the
+   *   node is in the list!
    *
    * @input:
    *   node ::
@@ -163,8 +163,7 @@
    *   FT_List_Up
    *
    * @description:
-   *   Move a node to the head/top of a list.  Used to maintain LRU
-   *   lists.
+   *   Move a node to the head/top of a list.  Used to maintain LRU lists.
    *
    * @inout:
    *   list ::
@@ -183,16 +182,16 @@
    *   FT_List_Iterator
    *
    * @description:
-   *   An FT_List iterator function that is called during a list parse
-   *   by @FT_List_Iterate.
+   *   An FT_List iterator function that is called during a list parse by
+   *   @FT_List_Iterate.
    *
    * @input:
    *   node ::
    *     The current iteration list node.
    *
    *   user ::
-   *     A typeless pointer passed to @FT_List_Iterate.
-   *     Can be used to point to the iteration's state.
+   *     A typeless pointer passed to @FT_List_Iterate.  Can be used to point
+   *     to the iteration's state.
    */
   typedef FT_Error
   (*FT_List_Iterator)( FT_ListNode  node,
@@ -215,8 +214,8 @@
    *   iterator ::
    *     An iterator function, called on each node of the list.
    *   user ::
-   *     A user-supplied field that is passed as the second
-   *     argument to the iterator.
+   *     A user-supplied field that is passed as the second argument to the
+   *     iterator.
    *
    * @return:
    *   The result (a FreeType error code) of the last iterator call.
@@ -234,8 +233,8 @@
    *
    * @description:
    *   An @FT_List iterator function that is called during a list
-   *   finalization by @FT_List_Finalize to destroy all elements in a
-   *   given list.
+   *   finalization by @FT_List_Finalize to destroy all elements in a given
+   *   list.
    *
    * @input:
    *   system ::
@@ -245,8 +244,8 @@
    *     The current object to destroy.
    *
    *   user ::
-   *     A typeless pointer passed to @FT_List_Iterate.  It can
-   *     be used to point to the iteration's state.
+   *     A typeless pointer passed to @FT_List_Iterate.  It can be used to
+   *     point to the iteration's state.
    */
   typedef void
   (*FT_List_Destructor)( FT_Memory  memory,
@@ -267,15 +266,15 @@
    *     A handle to the list.
    *
    *   destroy ::
-   *     A list destructor that will be applied to each element
-   *     of the list.  Set this to NULL if not needed.
+   *     A list destructor that will be applied to each element of the list.
+   *     Set this to `NULL` if not needed.
    *
    *   memory ::
    *     The current memory object that handles deallocation.
    *
    *   user ::
-   *     A user-supplied field that is passed as the last
-   *     argument to the destructor.
+   *     A user-supplied field that is passed as the last argument to the
+   *     destructor.
    *
    * @note:
    *   This function expects that all nodes added by @FT_List_Add or
diff --git a/include/freetype/ftlzw.h b/include/freetype/ftlzw.h
index 01433ca..fd22968 100644
--- a/include/freetype/ftlzw.h
+++ b/include/freetype/ftlzw.h
@@ -4,7 +4,7 @@
  *
  *   LZW-compressed stream support.
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -47,15 +47,14 @@
    *
    */
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stream_OpenLZW
    *
    * @description:
-   *   Open a new stream to parse LZW-compressed font files.  This is
-   *   mainly used to support the compressed `*.pcf.Z' fonts that come
-   *   with XFree86.
+   *   Open a new stream to parse LZW-compressed font files.  This is mainly
+   *   used to support the compressed `*.pcf.Z` fonts that come with XFree86.
    *
    * @input:
    *   stream ::
@@ -70,9 +69,9 @@
    * @note:
    *   The source stream must be opened _before_ calling this function.
    *
-   *   Calling the internal function `FT_Stream_Close' on the new stream will
-   *   *not* call `FT_Stream_Close' on the source stream.  None of the stream
-   *   objects will be released to the heap.
+   *   Calling the internal function `FT_Stream_Close` on the new stream will
+   *   **not** call `FT_Stream_Close` on the source stream.  None of the
+   *   stream objects will be released to the heap.
    *
    *   The stream implementation is very basic and resets the decompression
    *   process each time seeking backwards is needed within the stream
@@ -80,10 +79,10 @@
    *   In certain builds of the library, LZW compression recognition is
    *   automatically handled when calling @FT_New_Face or @FT_Open_Face.
    *   This means that if no font driver is capable of handling the raw
-   *   compressed file, the library will try to open a LZW stream from it
-   *   and re-open the face with it.
+   *   compressed file, the library will try to open a LZW stream from it and
+   *   re-open the face with it.
    *
-   *   This function may return `FT_Err_Unimplemented_Feature' if your build
+   *   This function may return `FT_Err_Unimplemented_Feature` if your build
    *   of FreeType was not compiled with LZW support.
    */
   FT_EXPORT( FT_Error )
diff --git a/include/freetype/ftmac.h b/include/freetype/ftmac.h
index 4249ff5..92b9f3d 100644
--- a/include/freetype/ftmac.h
+++ b/include/freetype/ftmac.h
@@ -4,7 +4,7 @@
  *
  *   Additional Mac-specific API.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,9 +18,9 @@
 
 /****************************************************************************
  *
- * NOTE: Include this file after FT_FREETYPE_H and after any
+ * NOTE: Include this file after `FT_FREETYPE_H` and after any
  *       Mac-specific headers (because this header uses Mac types such as
- *       Handle, FSSpec, FSRef, etc.)
+ *       'Handle', 'FSSpec', 'FSRef', etc.)
  *
  */
 
@@ -59,8 +59,8 @@
    *   Only available on the Macintosh.
    *
    * @description:
-   *   The following definitions are only available if FreeType is
-   *   compiled on a Macintosh.
+   *   The following definitions are only available if FreeType is compiled
+   *   on a Macintosh.
    *
    */
 
@@ -82,8 +82,7 @@
    *     A FOND resource.
    *
    *   face_index ::
-   *     Only supported for the -1 `sanity check' special
-   *     case.
+   *     Only supported for the -1 'sanity check' special case.
    *
    * @output:
    *   aface ::
@@ -93,13 +92,13 @@
    *   FreeType error code.  0~means success.
    *
    * @example:
-   *   This function can be used to create @FT_Face objects from fonts
-   *   that are installed in the system as follows.
+   *   This function can be used to create @FT_Face objects from fonts that
+   *   are installed in the system as follows.
    *
-   *   {
+   *   ```
    *     fond  = GetResource( 'FOND', fontName );
    *     error = FT_New_Face_From_FOND( library, fond, 0, &face );
-   *   }
+   *   ```
    */
   FT_EXPORT( FT_Error )
   FT_New_Face_From_FOND( FT_Library  library,
@@ -119,17 +118,14 @@
    *
    * @input:
    *   fontName ::
-   *     Mac OS name of the font (e.g., Times New Roman
-   *     Bold).
+   *     Mac OS name of the font (e.g., Times New Roman Bold).
    *
    * @output:
    *   pathSpec ::
-   *     FSSpec to the file.  For passing to
-   *     @FT_New_Face_From_FSSpec.
+   *     FSSpec to the file.  For passing to @FT_New_Face_From_FSSpec.
    *
    *   face_index ::
-   *     Index of the face.  For passing to
-   *     @FT_New_Face_From_FSSpec.
+   *     Index of the face.  For passing to @FT_New_Face_From_FSSpec.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -155,12 +151,10 @@
    *
    * @output:
    *   pathSpec ::
-   *     FSSpec to the file. For passing to
-   *     @FT_New_Face_From_FSSpec.
+   *     FSSpec to the file. For passing to @FT_New_Face_From_FSSpec.
    *
    *   face_index ::
-   *     Index of the face. For passing to
-   *     @FT_New_Face_From_FSSpec.
+   *     Index of the face. For passing to @FT_New_Face_From_FSSpec.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -178,8 +172,8 @@
    *   FT_GetFilePath_From_Mac_ATS_Name
    *
    * @description:
-   *   Return a pathname of the disk file and face index for given font
-   *   name that is handled by ATS framework.
+   *   Return a pathname of the disk file and face index for given font name
+   *   that is handled by ATS framework.
    *
    * @input:
    *   fontName ::
@@ -187,12 +181,11 @@
    *
    * @output:
    *   path ::
-   *     Buffer to store pathname of the file.  For passing
-   *     to @FT_New_Face.  The client must allocate this
-   *     buffer before calling this function.
+   *     Buffer to store pathname of the file.  For passing to @FT_New_Face.
+   *     The client must allocate this buffer before calling this function.
    *
    *   maxPathSize ::
-   *     Lengths of the buffer `path' that client allocated.
+   *     Lengths of the buffer `path` that client allocated.
    *
    *   face_index ::
    *     Index of the face.  For passing to @FT_New_Face.
@@ -226,8 +219,8 @@
    *     FSSpec to the font file.
    *
    *   face_index ::
-   *     The index of the face within the resource.  The
-   *     first face has index~0.
+   *     The index of the face within the resource.  The first face has
+   *     index~0.
    * @output:
    *   aface ::
    *     A handle to a new face object.
@@ -236,8 +229,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   @FT_New_Face_From_FSSpec is identical to @FT_New_Face except
-   *   it accepts an FSSpec instead of a path.
+   *   @FT_New_Face_From_FSSpec is identical to @FT_New_Face except it
+   *   accepts an FSSpec instead of a path.
    */
   FT_EXPORT( FT_Error )
   FT_New_Face_From_FSSpec( FT_Library     library,
@@ -265,8 +258,8 @@
    *     FSRef to the font file.
    *
    *   face_index ::
-   *     The index of the face within the resource.  The
-   *     first face has index~0.
+   *     The index of the face within the resource.  The first face has
+   *     index~0.
    * @output:
    *   aface ::
    *     A handle to a new face object.
@@ -275,8 +268,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   @FT_New_Face_From_FSRef is identical to @FT_New_Face except
-   *   it accepts an FSRef instead of a path.
+   *   @FT_New_Face_From_FSRef is identical to @FT_New_Face except it accepts
+   *   an FSRef instead of a path.
    */
   FT_EXPORT( FT_Error )
   FT_New_Face_From_FSRef( FT_Library    library,
diff --git a/include/freetype/ftmm.h b/include/freetype/ftmm.h
index a903241..f2e16b6 100644
--- a/include/freetype/ftmm.h
+++ b/include/freetype/ftmm.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Multiple Master font interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -39,14 +39,14 @@
    *   How to manage Multiple Masters fonts.
    *
    * @description:
-   *   The following types and functions are used to manage Multiple
-   *   Master fonts, i.e., the selection of specific design instances by
-   *   setting design axis coordinates.
+   *   The following types and functions are used to manage Multiple Master
+   *   fonts, i.e., the selection of specific design instances by setting
+   *   design axis coordinates.
    *
-   *   Besides Adobe MM fonts, the interface supports Apple's TrueType GX
-   *   and OpenType variation fonts.  Some of the routines only work with
-   *   Adobe MM fonts, others will work with all three types.  They are
-   *   similar enough that a consistent interface makes sense.
+   *   Besides Adobe MM fonts, the interface supports Apple's TrueType GX and
+   *   OpenType variation fonts.  Some of the routines only work with Adobe
+   *   MM fonts, others will work with all three types.  They are similar
+   *   enough that a consistent interface makes sense.
    *
    */
 
@@ -57,8 +57,8 @@
    *   FT_MM_Axis
    *
    * @description:
-   *   A structure to model a given axis in design space for Multiple
-   *   Masters fonts.
+   *   A structure to model a given axis in design space for Multiple Masters
+   *   fonts.
    *
    *   This structure can't be used for TrueType GX or OpenType variation
    *   fonts.
@@ -88,8 +88,7 @@
    *   FT_Multi_Master
    *
    * @description:
-   *   A structure to model the axes and space of a Multiple Masters
-   *   font.
+   *   A structure to model the axes and space of a Multiple Masters font.
    *
    *   This structure can't be used for TrueType GX or OpenType variation
    *   fonts.
@@ -99,10 +98,9 @@
    *     Number of axes.  Cannot exceed~4.
    *
    *   num_designs ::
-   *     Number of designs; should be normally 2^num_axis
-   *     even though the Type~1 specification strangely
-   *     allows for intermediate designs to be present.
-   *     This number cannot exceed~16.
+   *     Number of designs; should be normally 2^num_axis even though the
+   *     Type~1 specification strangely allows for intermediate designs to be
+   *     present.  This number cannot exceed~16.
    *
    *   axis ::
    *     A table of axis descriptors.
@@ -127,36 +125,33 @@
    *
    * @fields:
    *   name ::
-   *     The axis's name.
-   *     Not always meaningful for TrueType GX or OpenType
+   *     The axis's name.  Not always meaningful for TrueType GX or OpenType
    *     variation fonts.
    *
    *   minimum ::
    *     The axis's minimum design coordinate.
    *
    *   def ::
-   *     The axis's default design coordinate.
-   *     FreeType computes meaningful default values for Adobe
-   *     MM fonts.
+   *     The axis's default design coordinate.  FreeType computes meaningful
+   *     default values for Adobe MM fonts.
    *
    *   maximum ::
    *     The axis's maximum design coordinate.
    *
    *   tag ::
-   *     The axis's tag (the equivalent to `name' for TrueType
-   *     GX and OpenType variation fonts).  FreeType provides
-   *     default values for Adobe MM fonts if possible.
+   *     The axis's tag (the equivalent to 'name' for TrueType GX and
+   *     OpenType variation fonts).  FreeType provides default values for
+   *     Adobe MM fonts if possible.
    *
    *   strid ::
-   *     The axis name entry in the font's `name' table.  This
-   *     is another (and often better) version of the `name'
-   *     field for TrueType GX or OpenType variation fonts.  Not
-   *     meaningful for Adobe MM fonts.
+   *     The axis name entry in the font's 'name' table.  This is another
+   *     (and often better) version of the 'name' field for TrueType GX or
+   *     OpenType variation fonts.  Not meaningful for Adobe MM fonts.
    *
    * @note:
-   *   The fields `minimum', `def', and `maximum' are 16.16 fractional
-   *   values for TrueType GX and OpenType variation fonts.  For Adobe MM
-   *   fonts, the values are integers.
+   *   The fields `minimum`, `def`, and `maximum` are 16.16 fractional values
+   *   for TrueType GX and OpenType variation fonts.  For Adobe MM fonts, the
+   *   values are integers.
    */
   typedef struct  FT_Var_Axis_
   {
@@ -185,16 +180,15 @@
    *
    * @fields:
    *   coords ::
-   *     The design coordinates for this instance.
-   *     This is an array with one entry for each axis.
+   *     The design coordinates for this instance.  This is an array with one
+   *     entry for each axis.
    *
    *   strid ::
-   *     The entry in `name' table identifying this instance.
+   *     The entry in 'name' table identifying this instance.
    *
    *   psid ::
-   *     The entry in `name' table identifying a PostScript name
-   *     for this instance.  Value 0xFFFF indicates a missing
-   *     entry.
+   *     The entry in 'name' table identifying a PostScript name for this
+   *     instance.  Value 0xFFFF indicates a missing entry.
    */
   typedef struct  FT_Var_Named_Style_
   {
@@ -211,48 +205,40 @@
    *   FT_MM_Var
    *
    * @description:
-   *   A structure to model the axes and space of an Adobe MM, TrueType
-   *   GX, or OpenType variation font.
+   *   A structure to model the axes and space of an Adobe MM, TrueType GX,
+   *   or OpenType variation font.
    *
    *   Some fields are specific to one format and not to the others.
    *
    * @fields:
    *   num_axis ::
-   *     The number of axes.  The maximum value is~4 for
-   *     Adobe MM fonts; no limit in TrueType GX or
-   *     OpenType variation fonts.
+   *     The number of axes.  The maximum value is~4 for Adobe MM fonts; no
+   *     limit in TrueType GX or OpenType variation fonts.
    *
    *   num_designs ::
-   *     The number of designs; should be normally
-   *     2^num_axis for Adobe MM fonts.  Not meaningful
-   *     for TrueType GX or OpenType variation fonts
-   *     (where every glyph could have a different
-   *     number of designs).
+   *     The number of designs; should be normally 2^num_axis for Adobe MM
+   *     fonts.  Not meaningful for TrueType GX or OpenType variation fonts
+   *     (where every glyph could have a different number of designs).
    *
    *   num_namedstyles ::
-   *     The number of named styles; a `named style' is
-   *     a tuple of design coordinates that has a string
-   *     ID (in the `name' table) associated with it.
-   *     The font can tell the user that, for example,
-   *     [Weight=1.5,Width=1.1] is `Bold'.  Another name
-   *     for `named style' is `named instance'.
+   *     The number of named styles; a 'named style' is a tuple of design
+   *     coordinates that has a string ID (in the 'name' table) associated
+   *     with it.  The font can tell the user that, for example,
+   *     [Weight=1.5,Width=1.1] is 'Bold'.  Another name for 'named style' is
+   *     'named instance'.
    *
-   *     For Adobe Multiple Masters fonts, this value is
-   *     always zero because the format does not support
-   *     named styles.
+   *     For Adobe Multiple Masters fonts, this value is always zero because
+   *     the format does not support named styles.
    *
    *   axis ::
-   *     An axis descriptor table.
-   *     TrueType GX and OpenType variation fonts
-   *     contain slightly more data than Adobe MM fonts.
-   *     Memory management of this pointer is done
-   *     internally by FreeType.
+   *     An axis descriptor table.  TrueType GX and OpenType variation fonts
+   *     contain slightly more data than Adobe MM fonts.  Memory management
+   *     of this pointer is done internally by FreeType.
    *
    *   namedstyle ::
-   *     A named style (instance) table.
-   *     Only meaningful for TrueType GX and OpenType
-   *     variation fonts.  Memory management of this
-   *     pointer is done internally by FreeType.
+   *     A named style (instance) table.  Only meaningful for TrueType GX and
+   *     OpenType variation fonts.  Memory management of this pointer is done
+   *     internally by FreeType.
    */
   typedef struct  FT_MM_Var_
   {
@@ -308,9 +294,8 @@
    *
    * @output:
    *   amaster ::
-   *     The variation descriptor.
-   *     Allocates a data structure, which the user must
-   *     deallocate with a call to @FT_Done_MM_Var after use.
+   *     The variation descriptor.  Allocates a data structure, which the
+   *     user must deallocate with a call to @FT_Done_MM_Var after use.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -330,8 +315,8 @@
    *
    * @input:
    *   library ::
-   *     A handle of the face's parent library object that was
-   *     used in the call to @FT_Get_MM_Var to create `amaster'.
+   *     A handle of the face's parent library object that was used in the
+   *     call to @FT_Get_MM_Var to create `amaster`.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -347,8 +332,8 @@
    *   FT_Set_MM_Design_Coordinates
    *
    * @description:
-   *   For Adobe MM fonts, choose an interpolated font design through
-   *   design coordinates.
+   *   For Adobe MM fonts, choose an interpolated font design through design
+   *   coordinates.
    *
    *   This function can't be used with TrueType GX or OpenType variation
    *   fonts.
@@ -359,10 +344,9 @@
    *
    * @input:
    *   num_coords ::
-   *     The number of available design coordinates.  If it
-   *     is larger than the number of axes, ignore the excess
-   *     values.  If it is smaller than the number of axes,
-   *     use default values for the remaining axes.
+   *     The number of available design coordinates.  If it is larger than
+   *     the number of axes, ignore the excess values.  If it is smaller than
+   *     the number of axes, use default values for the remaining axes.
    *
    *   coords ::
    *     An array of design coordinates.
@@ -372,12 +356,12 @@
    *
    * @note:
    *   [Since 2.8.1] To reset all axes to the default values, call the
-   *   function with `num_coords' set to zero and `coords' set to NULL.
+   *   function with `num_coords` set to zero and `coords` set to `NULL`.
    *
-   *   [Since 2.9] If `num_coords' is larger than zero, this function
-   *   sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'
-   *   field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'
-   *   is zero, this bit flag gets unset.
+   *   [Since 2.9] If `num_coords` is larger than zero, this function sets
+   *   the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+   *   (i.e., @FT_IS_VARIATION will return true).  If `num_coords` is zero,
+   *   this bit flag gets unset.
    */
   FT_EXPORT( FT_Error )
   FT_Set_MM_Design_Coordinates( FT_Face   face,
@@ -401,10 +385,9 @@
    *
    * @input:
    *   num_coords ::
-   *     The number of available design coordinates.  If it
-   *     is larger than the number of axes, ignore the excess
-   *     values.  If it is smaller than the number of axes,
-   *     use default values for the remaining axes.
+   *     The number of available design coordinates.  If it is larger than
+   *     the number of axes, ignore the excess values.  If it is smaller than
+   *     the number of axes, use default values for the remaining axes.
    *
    *   coords ::
    *     An array of design coordinates.
@@ -414,14 +397,14 @@
    *
    * @note:
    *   [Since 2.8.1] To reset all axes to the default values, call the
-   *   function with `num_coords' set to zero and `coords' set to NULL.
-   *   [Since 2.9] `Default values' means the currently selected named
+   *   function with `num_coords` set to zero and `coords` set to `NULL`.
+   *   [Since 2.9] 'Default values' means the currently selected named
    *   instance (or the base font if no named instance is selected).
    *
-   *   [Since 2.9] If `num_coords' is larger than zero, this function
-   *   sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'
-   *   field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'
-   *   is zero, this bit flag gets unset.
+   *   [Since 2.9] If `num_coords` is larger than zero, this function sets
+   *   the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+   *   (i.e., @FT_IS_VARIATION will return true).  If `num_coords` is zero,
+   *   this bit flag gets unset.
    */
   FT_EXPORT( FT_Error )
   FT_Set_Var_Design_Coordinates( FT_Face    face,
@@ -445,9 +428,8 @@
    *     A handle to the source face.
    *
    *   num_coords ::
-   *     The number of design coordinates to retrieve.  If it
-   *     is larger than the number of axes, set the excess
-   *     values to~0.
+   *     The number of design coordinates to retrieve.  If it is larger than
+   *     the number of axes, set the excess values to~0.
    *
    * @output:
    *   coords ::
@@ -482,30 +464,28 @@
    *
    * @input:
    *   num_coords ::
-   *     The number of available design coordinates.  If it
-   *     is larger than the number of axes, ignore the excess
-   *     values.  If it is smaller than the number of axes,
-   *     use default values for the remaining axes.
+   *     The number of available design coordinates.  If it is larger than
+   *     the number of axes, ignore the excess values.  If it is smaller than
+   *     the number of axes, use default values for the remaining axes.
    *
    *   coords ::
-   *     The design coordinates array (each element must be
-   *     between 0 and 1.0 for Adobe MM fonts, and between
-   *     -1.0 and 1.0 for TrueType GX and OpenType variation
-   *     fonts).
+   *     The design coordinates array (each element must be between 0 and 1.0
+   *     for Adobe MM fonts, and between -1.0 and 1.0 for TrueType GX and
+   *     OpenType variation fonts).
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
    *   [Since 2.8.1] To reset all axes to the default values, call the
-   *   function with `num_coords' set to zero and `coords' set to NULL.
-   *   [Since 2.9] `Default values' means the currently selected named
+   *   function with `num_coords` set to zero and `coords` set to `NULL`.
+   *   [Since 2.9] 'Default values' means the currently selected named
    *   instance (or the base font if no named instance is selected).
    *
-   *   [Since 2.9] If `num_coords' is larger than zero, this function
-   *   sets the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags'
-   *   field (i.e., @FT_IS_VARIATION will return true).  If `num_coords'
-   *   is zero, this bit flag gets unset.
+   *   [Since 2.9] If `num_coords` is larger than zero, this function sets
+   *   the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field
+   *   (i.e., @FT_IS_VARIATION will return true).  If `num_coords` is zero,
+   *   this bit flag gets unset.
    */
   FT_EXPORT( FT_Error )
   FT_Set_MM_Blend_Coordinates( FT_Face    face,
@@ -529,10 +509,10 @@
    *     A handle to the source face.
    *
    *   num_coords ::
-   *     The number of normalized blend coordinates to
-   *     retrieve.  If it is larger than the number of axes,
-   *     set the excess values to~0.5 for Adobe MM fonts, and
-   *     to~0 for TrueType GX and OpenType variation fonts.
+   *     The number of normalized blend coordinates to retrieve.  If it is
+   *     larger than the number of axes, set the excess values to~0.5 for
+   *     Adobe MM fonts, and to~0 for TrueType GX and OpenType variation
+   *     fonts.
    *
    * @output:
    *   coords ::
@@ -583,6 +563,98 @@
 
   /**************************************************************************
    *
+   * @function:
+   *   FT_Set_MM_WeightVector
+   *
+   * @description:
+   *   For Adobe MM fonts, choose an interpolated font design by directly
+   *   setting the weight vector.
+   *
+   *   This function can't be used with TrueType GX or OpenType variation
+   *   fonts.
+   *
+   * @inout:
+   *   face ::
+   *     A handle to the source face.
+   *
+   * @input:
+   *   len ::
+   *     The length of the weight vector array.  If it is larger than the
+   *     number of designs, the extra values are ignored.  If it is less than
+   *     the number of designs, the remaining values are set to zero.
+   *
+   *   weightvector ::
+   *     An array representing the weight vector.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   Adobe Multiple Master fonts limit the number of designs, and thus the
+   *   length of the weight vector to~16.
+   *
+   *   If `len` is zero and `weightvector` is `NULL`, the weight vector array
+   *   is reset to the default values.
+   *
+   *   The Adobe documentation also states that the values in the
+   *   WeightVector array must total 1.0 +/-~0.001.  In practice this does
+   *   not seem to be enforced, so is not enforced here, either.
+   *
+   * @since:
+   *   2.10
+   */
+  FT_EXPORT( FT_Error )
+  FT_Set_MM_WeightVector( FT_Face    face,
+                          FT_UInt    len,
+                          FT_Fixed*  weightvector );
+
+
+  /**************************************************************************
+   *
+   * @function:
+   *   FT_Get_MM_WeightVector
+   *
+   * @description:
+   *   For Adobe MM fonts, retrieve the current weight vector of the font.
+   *
+   *   This function can't be used with TrueType GX or OpenType variation
+   *   fonts.
+   *
+   * @inout:
+   *   face ::
+   *     A handle to the source face.
+   *
+   *   len ::
+   *     A pointer to the size of the array to be filled.  If the size of the
+   *     array is less than the number of designs, `FT_Err_Invalid_Argument`
+   *     is returned, and `len` is set to the required size (the number of
+   *     designs).  If the size of the array is greater than the number of
+   *     designs, the remaining entries are set to~0.  On successful
+   *     completion, `len` is set to the number of designs (i.e., the number
+   *     of values written to the array).
+   *
+   * @output:
+   *   weightvector ::
+   *     An array to be filled.
+   *
+   * @return:
+   *   FreeType error code.  0~means success.
+   *
+   * @note:
+   *   Adobe Multiple Master fonts limit the number of designs, and thus the
+   *   length of the WeightVector to~16.
+   *
+   * @since:
+   *   2.10
+   */
+  FT_EXPORT( FT_Error )
+  FT_Get_MM_WeightVector( FT_Face    face,
+                          FT_UInt*   len,
+                          FT_Fixed*  weightvector );
+
+
+  /**************************************************************************
+   *
    * @enum:
    *   FT_VAR_AXIS_FLAG_XXX
    *
@@ -606,9 +678,9 @@
    *   FT_Get_Var_Axis_Flags
    *
    * @description:
-   *   Get the `flags' field of an OpenType Variation Axis Record.
+   *   Get the 'flags' field of an OpenType Variation Axis Record.
    *
-   *   Not meaningful for Adobe MM fonts (`*flags' is always zero).
+   *   Not meaningful for Adobe MM fonts (`*flags` is always zero).
    *
    * @input:
    *   master ::
@@ -619,8 +691,7 @@
    *
    * @output:
    *   flags ::
-   *     The `flags' field.  See @FT_VAR_AXIS_FLAG_XXX for
-   *     possible values.
+   *     The 'flags' field.  See @FT_VAR_AXIS_FLAG_XXX for possible values.
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -647,23 +718,22 @@
    *     A handle to the source face.
    *
    *   instance_index ::
-   *     The index of the requested instance, starting
-   *     with value 1.  If set to value 0, FreeType
-   *     switches to font access without a named
+   *     The index of the requested instance, starting with value 1.  If set
+   *     to value 0, FreeType switches to font access without a named
    *     instance.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The function uses the value of `instance_index' to set bits 16-30
-   *   of the face's `face_index' field.  It also resets any variation
-   *   applied to the font, and the @FT_FACE_FLAG_VARIATION bit of the
-   *   face's `face_flags' field gets reset to zero (i.e.,
-   *   @FT_IS_VARIATION will return false).
+   *   The function uses the value of `instance_index` to set bits 16-30 of
+   *   the face's `face_index` field.  It also resets any variation applied
+   *   to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's
+   *   `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION will
+   *   return false).
    *
-   *   For Adobe MM fonts (which don't have named instances) this
-   *   function simply resets the current face to the default instance.
+   *   For Adobe MM fonts (which don't have named instances) this function
+   *   simply resets the current face to the default instance.
    *
    * @since:
    *   2.9
diff --git a/include/freetype/ftmodapi.h b/include/freetype/ftmodapi.h
index c50c9ce..8d039c4 100644
--- a/include/freetype/ftmodapi.h
+++ b/include/freetype/ftmodapi.h
@@ -4,7 +4,7 @@
  *
  *   FreeType modules public interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -46,13 +46,13 @@
    *
    * @description:
    *   The definitions below are used to manage modules within FreeType.
-   *   Modules can be added, upgraded, and removed at runtime.
-   *   Additionally, some module properties can be controlled also.
+   *   Modules can be added, upgraded, and removed at runtime.  Additionally,
+   *   some module properties can be controlled also.
    *
-   *   Here is a list of possible values of the `module_name' field in
-   *   the @FT_Module_Class structure.
+   *   Here is a list of possible values of the `module_name` field in the
+   *   @FT_Module_Class structure.
    *
-   *   {
+   *   ```
    *     autofitter
    *     bdf
    *     cff
@@ -71,7 +71,7 @@
    *     type42
    *     t1cid
    *     winfonts
-   *   }
+   *   ```
    *
    *   Note that the FreeType Cache sub-system is not a FreeType module.
    *
@@ -195,9 +195,9 @@
    *   FT_Module_Class
    *
    * @description:
-   *   The module class descriptor.  While being a public structure
-   *   necessary for FreeType's module bookkeeping, most of the fields are
-   *   essentially internal, not to be used directly by an application.
+   *   The module class descriptor.  While being a public structure necessary
+   *   for FreeType's module bookkeeping, most of the fields are essentially
+   *   internal, not to be used directly by an application.
    *
    * @fields:
    *   module_flags ::
@@ -219,7 +219,7 @@
    *   module_interface ::
    *     A typeless pointer to a structure (which varies between different
    *     modules) that holds the module's interface functions.  This is
-   *     essentially what `get_interface' returns.
+   *     essentially what `get_interface` returns.
    *
    *   module_init ::
    *     The initializing function.
@@ -267,8 +267,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   An error will be returned if a module already exists by that name,
-   *   or if the module requires a version of FreeType that is too great.
+   *   An error will be returned if a module already exists by that name, or
+   *   if the module requires a version of FreeType that is too great.
    */
   FT_EXPORT( FT_Error )
   FT_Add_Module( FT_Library              library,
@@ -329,7 +329,7 @@
                     FT_Module   module );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Property_Set
@@ -352,37 +352,35 @@
    *
    *    value ::
    *      A generic pointer to a variable or structure that gives the new
-   *      value of the property.  The exact definition of `value' is
+   *      value of the property.  The exact definition of `value` is
    *      dependent on the property; see section @properties.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *    If `module_name' isn't a valid module name, or `property_name'
-   *    doesn't specify a valid property, or if `value' doesn't represent a
+   *    If `module_name` isn't a valid module name, or `property_name`
+   *    doesn't specify a valid property, or if `value` doesn't represent a
    *    valid value for the given property, an error is returned.
    *
-   *    The following example sets property `bar' (a simple integer) in
-   *    module `foo' to value~1.
+   *    The following example sets property 'bar' (a simple integer) in
+   *    module 'foo' to value~1.
    *
-   *    {
+   *    ```
    *      FT_UInt  bar;
    *
    *
    *      bar = 1;
    *      FT_Property_Set( library, "foo", "bar", &bar );
-   *    }
+   *    ```
    *
    *    Note that the FreeType Cache sub-system doesn't recognize module
    *    property changes.  To avoid glyph lookup confusion within the cache
-   *    you should call @FTC_Manager_Reset to completely flush the cache if
-   *    a module property gets changed after @FTC_Manager_New has been
-   *    called.
+   *    you should call @FTC_Manager_Reset to completely flush the cache if a
+   *    module property gets changed after @FTC_Manager_New has been called.
    *
-   *    It is not possible to set properties of the FreeType Cache
-   *    sub-system itself with FT_Property_Set; use @FTC_Property_Set
-   *    instead.
+   *    It is not possible to set properties of the FreeType Cache sub-system
+   *    itself with FT_Property_Set; use @FTC_Property_Set instead.
    *
    * @since:
    *   2.4.11
@@ -395,7 +393,7 @@
                    const void*       value );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Property_Get
@@ -416,21 +414,21 @@
    *
    * @inout:
    *    value ::
-   *      A generic pointer to a variable or structure that gives the
-   *      value of the property.  The exact definition of `value' is
-   *      dependent on the property; see section @properties.
+   *      A generic pointer to a variable or structure that gives the value
+   *      of the property.  The exact definition of `value` is dependent on
+   *      the property; see section @properties.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *    If `module_name' isn't a valid module name, or `property_name'
-   *    doesn't specify a valid property, or if `value' doesn't represent a
+   *    If `module_name` isn't a valid module name, or `property_name`
+   *    doesn't specify a valid property, or if `value` doesn't represent a
    *    valid value for the given property, an error is returned.
    *
-   *    The following example gets property `baz' (a range) in module `foo'.
+   *    The following example gets property 'baz' (a range) in module 'foo'.
    *
-   *    {
+   *    ```
    *      typedef  range_
    *      {
    *        FT_Int32  min;
@@ -442,7 +440,7 @@
    *
    *
    *      FT_Property_Get( library, "foo", "baz", &baz );
-   *    }
+   *    ```
    *
    *    It is not possible to retrieve properties of the FreeType Cache
    *    sub-system with FT_Property_Get; use @FTC_Property_Get instead.
@@ -464,17 +462,17 @@
    *   FT_Set_Default_Properties
    *
    * @description:
-   *   If compilation option FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES is
-   *   set, this function reads the `FREETYPE_PROPERTIES' environment
-   *   variable to control driver properties.  See section @properties
-   *   for more.
+   *   If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is
+   *   set, this function reads the `FREETYPE_PROPERTIES` environment
+   *   variable to control driver properties.  See section @properties for
+   *   more.
    *
    *   If the compilation option is not set, this function does nothing.
    *
-   *   `FREETYPE_PROPERTIES' has the following syntax form (broken here
-   *   into multiple lines for better readability).
+   *   `FREETYPE_PROPERTIES` has the following syntax form (broken here into
+   *   multiple lines for better readability).
    *
-   *   {
+   *   ```
    *     <optional whitespace>
    *     <module-name1> ':'
    *     <property-name1> '=' <property-value1>
@@ -482,15 +480,15 @@
    *     <module-name2> ':'
    *     <property-name2> '=' <property-value2>
    *     ...
-   *   }
+   *   ```
    *
    *   Example:
    *
-   *   {
+   *   ```
    *     FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
    *                         cff:no-stem-darkening=1 \
    *                         autofitter:warping=1
-   *   }
+   *   ```
    *
    * @inout:
    *   library ::
@@ -509,10 +507,10 @@
    *   FT_Reference_Library
    *
    * @description:
-   *   A counter gets initialized to~1 at the time an @FT_Library
-   *   structure is created.  This function increments the counter.
-   *   @FT_Done_Library then only destroys a library if the counter is~1,
-   *   otherwise it simply decrements the counter.
+   *   A counter gets initialized to~1 at the time an @FT_Library structure
+   *   is created.  This function increments the counter.  @FT_Done_Library
+   *   then only destroys a library if the counter is~1, otherwise it simply
+   *   decrements the counter.
    *
    *   This function helps in managing life-cycles of structures that
    *   reference @FT_Library objects.
@@ -537,19 +535,19 @@
    *   FT_New_Library
    *
    * @description:
-   *   This function is used to create a new FreeType library instance
-   *   from a given memory object.  It is thus possible to use libraries
-   *   with distinct memory allocators within the same program.  Note,
-   *   however, that the used @FT_Memory structure is expected to remain
-   *   valid for the life of the @FT_Library object.
+   *   This function is used to create a new FreeType library instance from a
+   *   given memory object.  It is thus possible to use libraries with
+   *   distinct memory allocators within the same program.  Note, however,
+   *   that the used @FT_Memory structure is expected to remain valid for the
+   *   life of the @FT_Library object.
    *
    *   Normally, you would call this function (followed by a call to
-   *   @FT_Add_Default_Modules or a series of calls to @FT_Add_Module,
-   *   and a call to @FT_Set_Default_Properties) instead of
-   *   @FT_Init_FreeType to initialize the FreeType library.
+   *   @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, and a
+   *   call to @FT_Set_Default_Properties) instead of @FT_Init_FreeType to
+   *   initialize the FreeType library.
    *
-   *   Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a
-   *   library instance.
+   *   Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a library
+   *   instance.
    *
    * @input:
    *   memory ::
@@ -577,8 +575,8 @@
    *   FT_Done_Library
    *
    * @description:
-   *   Discard a given library object.  This closes all drivers and
-   *   discards all resource objects.
+   *   Discard a given library object.  This closes all drivers and discards
+   *   all resource objects.
    *
    * @input:
    *   library ::
@@ -594,14 +592,58 @@
   FT_EXPORT( FT_Error )
   FT_Done_Library( FT_Library  library );
 
-  /* */
 
-  typedef void
+  /**************************************************************************
+   *
+   * @functype:
+   *   FT_DebugHook_Func
+   *
+   * @description:
+   *   A drop-in replacement (or rather a wrapper) for the bytecode or
+   *   charstring interpreter's main loop function.
+   *
+   *   Its job is essentially
+   *
+   *   - to activate debug mode to enforce single-stepping,
+   *
+   *   - to call the main loop function to interpret the next opcode, and
+   *
+   *   - to show the changed context to the user.
+   *
+   *   An example for such a main loop function is `TT_RunIns` (declared in
+   *   FreeType's internal header file `src/truetype/ttinterp.h`).
+   *
+   *   Have a look at the source code of the `ttdebug` FreeType demo program
+   *   for an example of a drop-in replacement.
+   *
+   * @inout:
+   *   arg ::
+   *     A typeless pointer, to be cast to the main loop function's data
+   *     structure (which depends on the font module).  For TrueType fonts
+   *     it is bytecode interpreter's execution context, `TT_ExecContext`,
+   *     which is declared in FreeType's internal header file `tttypes.h`.
+   */
+  typedef FT_Error
   (*FT_DebugHook_Func)( void*  arg );
 
 
   /**************************************************************************
    *
+   * @enum:
+   *   FT_DEBUG_HOOK_XXX
+   *
+   * @description:
+   *   A list of named debug hook indices.
+   *
+   * @values:
+   *   FT_DEBUG_HOOK_TRUETYPE::
+   *     This hook index identifies the TrueType bytecode debugger.
+   */
+#define FT_DEBUG_HOOK_TRUETYPE  0
+
+
+  /**************************************************************************
+   *
    * @function:
    *   FT_Set_Debug_Hook
    *
@@ -609,26 +651,27 @@
    *   Set a debug hook function for debugging the interpreter of a font
    *   format.
    *
+   *   While this is a public API function, an application needs access to
+   *   FreeType's internal header files to do something useful.
+   *
+   *   Have a look at the source code of the `ttdebug` FreeType demo program
+   *   for an example of its usage.
+   *
    * @inout:
    *   library ::
    *     A handle to the library object.
    *
    * @input:
    *   hook_index ::
-   *     The index of the debug hook.  You should use the
-   *     values defined in `ftobjs.h', e.g.,
-   *     `FT_DEBUG_HOOK_TRUETYPE'.
+   *     The index of the debug hook.  You should use defined enumeration
+   *     macros like @FT_DEBUG_HOOK_TRUETYPE.
    *
    *   debug_hook ::
    *     The function used to debug the interpreter.
    *
    * @note:
-   *   Currently, four debug hook slots are available, but only two (for
-   *   the TrueType and the Type~1 interpreter) are defined.
-   *
-   *   Since the internal headers of FreeType are no longer installed,
-   *   the symbol `FT_DEBUG_HOOK_TRUETYPE' isn't available publicly.
-   *   This is a bug and will be fixed in a forthcoming release.
+   *   Currently, four debug hook slots are available, but only one (for the
+   *   TrueType interpreter) is defined.
    */
   FT_EXPORT( void )
   FT_Set_Debug_Hook( FT_Library         library,
@@ -642,9 +685,9 @@
    *   FT_Add_Default_Modules
    *
    * @description:
-   *   Add the set of default drivers to a given library object.
-   *   This is only useful when you create a library object with
-   *   @FT_New_Library (usually to plug a custom memory manager).
+   *   Add the set of default drivers to a given library object.  This is
+   *   only useful when you create a library object with @FT_New_Library
+   *   (usually to plug a custom memory manager).
    *
    * @inout:
    *   library ::
@@ -679,9 +722,9 @@
    *    FT_TrueTypeEngineType
    *
    * @description:
-   *    A list of values describing which kind of TrueType bytecode
-   *    engine is implemented in a given FT_Library instance.  It is used
-   *    by the @FT_Get_TrueType_Engine_Type function.
+   *    A list of values describing which kind of TrueType bytecode engine is
+   *    implemented in a given FT_Library instance.  It is used by the
+   *    @FT_Get_TrueType_Engine_Type function.
    *
    * @values:
    *    FT_TRUETYPE_ENGINE_TYPE_NONE ::
@@ -691,9 +734,9 @@
    *      Deprecated and removed.
    *
    *    FT_TRUETYPE_ENGINE_TYPE_PATENTED ::
-   *      The library implements a bytecode interpreter that covers
-   *      the full instruction set of the TrueType virtual machine (this
-   *      was governed by patents until May 2010, hence the name).
+   *      The library implements a bytecode interpreter that covers the full
+   *      instruction set of the TrueType virtual machine (this was governed
+   *      by patents until May 2010, hence the name).
    *
    * @since:
    *    2.2
@@ -714,8 +757,8 @@
    *    FT_Get_TrueType_Engine_Type
    *
    * @description:
-   *    Return an @FT_TrueTypeEngineType value to indicate which level of
-   *    the TrueType virtual machine a given library instance supports.
+   *    Return an @FT_TrueTypeEngineType value to indicate which level of the
+   *    TrueType virtual machine a given library instance supports.
    *
    * @input:
    *    library ::
diff --git a/include/freetype/ftmoderr.h b/include/freetype/ftmoderr.h
index 661b0da..e169935 100644
--- a/include/freetype/ftmoderr.h
+++ b/include/freetype/ftmoderr.h
@@ -4,7 +4,7 @@
  *
  *   FreeType module error offsets (specification).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -20,60 +20,69 @@
    *
    * This file is used to define the FreeType module error codes.
    *
-   * If the macro FT_CONFIG_OPTION_USE_MODULE_ERRORS in `ftoption.h' is
+   * If the macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` in `ftoption.h` is
    * set, the lower byte of an error value identifies the error code as
    * usual.  In addition, the higher byte identifies the module.  For
-   * example, the error `FT_Err_Invalid_File_Format' has value 0x0003, the
-   * error `TT_Err_Invalid_File_Format' has value 0x1303, the error
-   * `T1_Err_Invalid_File_Format' has value 0x1403, etc.
+   * example, the error `FT_Err_Invalid_File_Format` has value 0x0003, the
+   * error `TT_Err_Invalid_File_Format` has value 0x1303, the error
+   * `T1_Err_Invalid_File_Format` has value 0x1403, etc.
    *
-   * Note that `FT_Err_Ok', `TT_Err_Ok', etc. are always equal to zero,
+   * Note that `FT_Err_Ok`, `TT_Err_Ok`, etc. are always equal to zero,
    * including the high byte.
    *
-   * If FT_CONFIG_OPTION_USE_MODULE_ERRORS isn't set, the higher byte of
-   * an error value is set to zero.
+   * If `FT_CONFIG_OPTION_USE_MODULE_ERRORS` isn't set, the higher byte of an
+   * error value is set to zero.
    *
-   * To hide the various `XXX_Err_' prefixes in the source code, FreeType
-   * provides some macros in `fttypes.h'.
+   * To hide the various `XXX_Err_` prefixes in the source code, FreeType
+   * provides some macros in `fttypes.h`.
    *
    *   FT_ERR( err )
-   *     Add current error module prefix (as defined with the
-   *     `FT_ERR_PREFIX' macro) to `err'.  For example, in the BDF module
-   *     the line
    *
+   *     Add current error module prefix (as defined with the `FT_ERR_PREFIX`
+   *     macro) to `err`.  For example, in the BDF module the line
+   *
+   *     ```
    *       error = FT_ERR( Invalid_Outline );
+   *     ```
    *
    *     expands to
    *
+   *     ```
    *       error = BDF_Err_Invalid_Outline;
+   *     ```
    *
-   *     For simplicity, you can always use `FT_Err_Ok' directly instead
-   *     of `FT_ERR( Ok )'.
+   *     For simplicity, you can always use `FT_Err_Ok` directly instead of
+   *     `FT_ERR( Ok )`.
    *
    *   FT_ERR_EQ( errcode, err )
    *   FT_ERR_NEQ( errcode, err )
-   *     Compare error code `errcode' with the error `err' for equality
-   *     and inequality, respectively.  Example:
    *
+   *     Compare error code `errcode` with the error `err` for equality and
+   *     inequality, respectively.  Example:
+   *
+   *     ```
    *       if ( FT_ERR_EQ( error, Invalid_Outline ) )
    *         ...
+   *     ```
    *
-   *     Using this macro you don't have to think about error prefixes.
-   *     Of course, if module errors are not active, the above example is
-   *     the same as
+   *     Using this macro you don't have to think about error prefixes.  Of
+   *     course, if module errors are not active, the above example is the
+   *     same as
    *
+   *     ```
    *       if ( error == FT_Err_Invalid_Outline )
    *         ...
+   *     ```
    *
    *   FT_ERROR_BASE( errcode )
    *   FT_ERROR_MODULE( errcode )
+   *
    *     Get base error and module error code, respectively.
    *
+   * It can also be used to create a module error message table easily with
+   * something like
    *
-   * It can also be used to create a module error message table easily
-   * with something like
-   *
-   * {
+   * ```
    *   #undef FTMODERR_H_
    *   #define FT_MODERRDEF( e, v, s )  { FT_Mod_Err_ ## e, s },
    *   #define FT_MODERR_START_LIST     {
@@ -86,7 +95,7 @@
    *   } ft_mod_errors[] =
    *
    *   #include FT_MODULE_ERRORS_H
-   * }
+   * ```
    *
    */
 
diff --git a/include/freetype/ftotval.h b/include/freetype/ftotval.h
index 698b429..c034f48 100644
--- a/include/freetype/ftotval.h
+++ b/include/freetype/ftotval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating OpenType tables (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -55,8 +55,8 @@
    *   An API to validate OpenType tables.
    *
    * @description:
-   *   This section contains the declaration of functions to validate
-   *   some OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
+   *   This section contains the declaration of functions to validate some
+   *   OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH).
    *
    * @order:
    *   FT_OpenType_Validate
@@ -67,7 +67,7 @@
    */
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *    FT_VALIDATE_OTXXX
@@ -114,7 +114,7 @@
                           FT_VALIDATE_MATH )
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_OpenType_Validate
@@ -122,8 +122,8 @@
    * @description:
    *    Validate various OpenType tables to assure that all offsets and
    *    indices are valid.  The idea is that a higher-level library that
-   *    actually does the text layout can access those tables without
-   *    error checking (which can be quite time consuming).
+   *    actually does the text layout can access those tables without error
+   *    checking (which can be quite time consuming).
    *
    * @input:
    *    face ::
@@ -157,7 +157,7 @@
    *   otherwise.
    *
    *   After use, the application should deallocate the five tables with
-   *   @FT_OpenType_Free.  A NULL value indicates that the table either
+   *   @FT_OpenType_Free.  A `NULL` value indicates that the table either
    *   doesn't exist in the font, or the application hasn't asked for
    *   validation.
    */
@@ -171,7 +171,7 @@
                         FT_Bytes  *JSTF_table );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_OpenType_Free
diff --git a/include/freetype/ftoutln.h b/include/freetype/ftoutln.h
index 9dae104..b72327b 100644
--- a/include/freetype/ftoutln.h
+++ b/include/freetype/ftoutln.h
@@ -5,7 +5,7 @@
  *   Support for the FT_Outline type used to store glyph shapes of
  *   most scalable font formats (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -47,7 +47,7 @@
    *
    * @description:
    *   This section contains routines used to create and destroy scalable
-   *   glyph images known as `outlines'.  These can also be measured,
+   *   glyph images known as 'outlines'.  These can also be measured,
    *   transformed, and converted into bitmaps and pixmaps.
    *
    * @order:
@@ -89,7 +89,7 @@
    *
    * @description:
    *   Walk over an outline's structure to decompose it into individual
-   *   segments and Bezier arcs.  This function also emits `move to'
+   *   segments and Bezier arcs.  This function also emits 'move to'
    *   operations to indicate the start of new contours in the outline.
    *
    * @input:
@@ -97,30 +97,28 @@
    *     A pointer to the source target.
    *
    *   func_interface ::
-   *     A table of `emitters', i.e., function pointers
-   *     called during decomposition to indicate path
-   *     operations.
+   *     A table of 'emitters', i.e., function pointers called during
+   *     decomposition to indicate path operations.
    *
    * @inout:
    *   user ::
-   *     A typeless pointer that is passed to each
-   *     emitter during the decomposition.  It can be
-   *     used to store the state during the
+   *     A typeless pointer that is passed to each emitter during the
+   *     decomposition.  It can be used to store the state during the
    *     decomposition.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   A contour that contains a single point only is represented by a
-   *   `move to' operation followed by `line to' to the same point.  In
-   *   most cases, it is best to filter this out before using the
-   *   outline for stroking purposes (otherwise it would result in a
-   *   visible dot when round caps are used).
+   *   A contour that contains a single point only is represented by a 'move
+   *   to' operation followed by 'line to' to the same point.  In most cases,
+   *   it is best to filter this out before using the outline for stroking
+   *   purposes (otherwise it would result in a visible dot when round caps
+   *   are used).
    *
    *   Similarly, the function returns success for an empty outline also
-   *   (doing nothing, this is, not calling any emitter); if necessary,
-   *   you should filter this out, too.
+   *   (doing nothing, this is, not calling any emitter); if necessary, you
+   *   should filter this out, too.
    */
   FT_EXPORT( FT_Error )
   FT_Outline_Decompose( FT_Outline*              outline,
@@ -138,18 +136,17 @@
    *
    * @input:
    *   library ::
-   *     A handle to the library object from where the
-   *     outline is allocated.  Note however that the new
-   *     outline will *not* necessarily be *freed*, when
-   *     destroying the library, by @FT_Done_FreeType.
+   *     A handle to the library object from where the outline is allocated.
+   *     Note however that the new outline will **not** necessarily be
+   *     **freed**, when destroying the library, by @FT_Done_FreeType.
    *
    *   numPoints ::
-   *     The maximum number of points within the outline.
-   *     Must be smaller than or equal to 0xFFFF (65535).
+   *     The maximum number of points within the outline.  Must be smaller
+   *     than or equal to 0xFFFF (65535).
    *
    *   numContours ::
-   *     The maximum number of contours within the outline.
-   *     This value must be in the range 0 to `numPoints'.
+   *     The maximum number of contours within the outline.  This value must
+   *     be in the range 0 to `numPoints`.
    *
    * @output:
    *   anoutline ::
@@ -159,8 +156,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The reason why this function takes a `library' parameter is simply
-   *   to use the library's memory allocator.
+   *   The reason why this function takes a `library` parameter is simply to
+   *   use the library's memory allocator.
    */
   FT_EXPORT( FT_Error )
   FT_Outline_New( FT_Library   library,
@@ -169,13 +166,6 @@
                   FT_Outline  *anoutline );
 
 
-  FT_EXPORT( FT_Error )
-  FT_Outline_New_Internal( FT_Memory    memory,
-                           FT_UInt      numPoints,
-                           FT_Int       numContours,
-                           FT_Outline  *anoutline );
-
-
   /**************************************************************************
    *
    * @function:
@@ -186,8 +176,7 @@
    *
    * @input:
    *   library ::
-   *     A handle of the library object used to allocate the
-   *     outline.
+   *     A handle of the library object used to allocate the outline.
    *
    *   outline ::
    *     A pointer to the outline object to be discarded.
@@ -196,19 +185,14 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   If the outline's `owner' field is not set, only the outline
-   *   descriptor will be released.
+   *   If the outline's 'owner' field is not set, only the outline descriptor
+   *   will be released.
    */
   FT_EXPORT( FT_Error )
   FT_Outline_Done( FT_Library   library,
                    FT_Outline*  outline );
 
 
-  FT_EXPORT( FT_Error )
-  FT_Outline_Done_Internal( FT_Memory    memory,
-                            FT_Outline*  outline );
-
-
   /**************************************************************************
    *
    * @function:
@@ -238,16 +222,16 @@
    *   FT_Outline_Get_CBox
    *
    * @description:
-   *   Return an outline's `control box'.  The control box encloses all
-   *   the outline's points, including Bezier control points.  Though it
+   *   Return an outline's 'control box'.  The control box encloses all the
+   *   outline's points, including Bezier control points.  Though it
    *   coincides with the exact bounding box for most glyphs, it can be
-   *   slightly larger in some situations (like when rotating an outline
-   *   that contains Bezier outside arcs).
+   *   slightly larger in some situations (like when rotating an outline that
+   *   contains Bezier outside arcs).
    *
-   *   Computing the control box is very fast, while getting the bounding
-   *   box can take much more time as it needs to walk over all segments
-   *   and arcs in the outline.  To get the latter, you can use the
-   *   `ftbbox' component, which is dedicated to this single task.
+   *   Computing the control box is very fast, while getting the bounding box
+   *   can take much more time as it needs to walk over all segments and arcs
+   *   in the outline.  To get the latter, you can use the 'ftbbox'
+   *   component, which is dedicated to this single task.
    *
    * @input:
    *   outline ::
@@ -296,9 +280,9 @@
    *   FT_Outline_Copy
    *
    * @description:
-   *   Copy an outline into another one.  Both objects must have the
-   *   same sizes (number of points & number of contours) when this
-   *   function is called.
+   *   Copy an outline into another one.  Both objects must have the same
+   *   sizes (number of points & number of contours) when this function is
+   *   called.
    *
    * @input:
    *   source ::
@@ -322,8 +306,8 @@
    *   FT_Outline_Transform
    *
    * @description:
-   *   Apply a simple 2x2 matrix to all of an outline's points.  Useful
-   *   for applying rotations, slanting, flipping, etc.
+   *   Apply a simple 2x2 matrix to all of an outline's points.  Useful for
+   *   applying rotations, slanting, flipping, etc.
    *
    * @inout:
    *   outline ::
@@ -349,10 +333,10 @@
    *
    * @description:
    *   Embolden an outline.  The new outline will be at most 4~times
-   *   `strength' pixels wider and higher.  You may think of the left and
+   *   `strength` pixels wider and higher.  You may think of the left and
    *   bottom borders as unchanged.
    *
-   *   Negative `strength' values to reduce the outline thickness are
+   *   Negative `strength` values to reduce the outline thickness are
    *   possible also.
    *
    * @inout:
@@ -361,31 +345,30 @@
    *
    * @input:
    *   strength ::
-   *     How strong the glyph is emboldened.  Expressed in
-   *     26.6 pixel format.
+   *     How strong the glyph is emboldened.  Expressed in 26.6 pixel format.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The used algorithm to increase or decrease the thickness of the
-   *   glyph doesn't change the number of points; this means that certain
-   *   situations like acute angles or intersections are sometimes
-   *   handled incorrectly.
+   *   The used algorithm to increase or decrease the thickness of the glyph
+   *   doesn't change the number of points; this means that certain
+   *   situations like acute angles or intersections are sometimes handled
+   *   incorrectly.
    *
-   *   If you need `better' metrics values you should call
+   *   If you need 'better' metrics values you should call
    *   @FT_Outline_Get_CBox or @FT_Outline_Get_BBox.
    *
    *   To get meaningful results, font scaling values must be set with
    *   functions like @FT_Set_Char_Size before calling FT_Render_Glyph.
    *
    * @example:
-   *   {
+   *   ```
    *     FT_Load_Glyph( face, index, FT_LOAD_DEFAULT );
    *
    *     if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE )
    *       FT_Outline_Embolden( &face->glyph->outline, strength );
-   *   }
+   *   ```
    *
    */
   FT_EXPORT( FT_Error )
@@ -399,10 +382,9 @@
    *   FT_Outline_EmboldenXY
    *
    * @description:
-   *   Embolden an outline.  The new outline will be `xstrength' pixels
-   *   wider and `ystrength' pixels higher.  Otherwise, it is similar to
-   *   @FT_Outline_Embolden, which uses the same strength in both
-   *   directions.
+   *   Embolden an outline.  The new outline will be `xstrength` pixels wider
+   *   and `ystrength` pixels higher.  Otherwise, it is similar to
+   *   @FT_Outline_Embolden, which uses the same strength in both directions.
    *
    * @since:
    *   2.4.10
@@ -419,19 +401,19 @@
    *   FT_Outline_Reverse
    *
    * @description:
-   *   Reverse the drawing direction of an outline.  This is used to
-   *   ensure consistent fill conventions for mirrored glyphs.
+   *   Reverse the drawing direction of an outline.  This is used to ensure
+   *   consistent fill conventions for mirrored glyphs.
    *
    * @inout:
    *   outline ::
    *     A pointer to the target outline descriptor.
    *
    * @note:
-   *   This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in
-   *   the outline's `flags' field.
+   *   This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the
+   *   outline's `flags` field.
    *
-   *   It shouldn't be used by a normal client application, unless it
-   *   knows what it is doing.
+   *   It shouldn't be used by a normal client application, unless it knows
+   *   what it is doing.
    */
   FT_EXPORT( void )
   FT_Outline_Reverse( FT_Outline*  outline );
@@ -461,15 +443,15 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function does NOT CREATE the bitmap, it only renders an
+   *   This function does **not create** the bitmap, it only renders an
    *   outline image within the one you pass to it!  Consequently, the
-   *   various fields in `abitmap' should be set accordingly.
+   *   various fields in `abitmap` should be set accordingly.
    *
    *   It will use the raster corresponding to the default glyph format.
    *
-   *   The value of the `num_grays' field in `abitmap' is ignored.  If
-   *   you select the gray-level rasterizer, and you want less than 256
-   *   gray levels, you have to use @FT_Outline_Render directly.
+   *   The value of the `num_grays` field in `abitmap` is ignored.  If you
+   *   select the gray-level rasterizer, and you want less than 256 gray
+   *   levels, you have to use @FT_Outline_Render directly.
    */
   FT_EXPORT( FT_Error )
   FT_Outline_Get_Bitmap( FT_Library        library,
@@ -484,9 +466,6 @@
    *
    * @description:
    *   Render an outline within a bitmap using the current scan-convert.
-   *   This function uses an @FT_Raster_Params structure as an argument,
-   *   allowing advanced features like direct composition, translucency,
-   *   etc.
    *
    * @input:
    *   library ::
@@ -497,23 +476,25 @@
    *
    * @inout:
    *   params ::
-   *     A pointer to an @FT_Raster_Params structure used to
-   *     describe the rendering operation.
+   *     A pointer to an @FT_Raster_Params structure used to describe the
+   *     rendering operation.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   You should know what you are doing and how @FT_Raster_Params works
-   *   to use this function.
+   *   This advanced function uses @FT_Raster_Params as an argument,
+   *   allowing FreeType rasterizer to be used for direct composition,
+   *   translucency, etc.  You should know how to set up @FT_Raster_Params
+   *   for this function to work.
    *
-   *   The field `params.source' will be set to `outline' before the scan
+   *   The field `params.source` will be set to `outline` before the scan
    *   converter is called, which means that the value you give to it is
    *   actually ignored.
    *
-   *   The gray-level rasterizer always uses 256 gray levels.  If you
-   *   want less gray levels, you have to provide your own span callback.
-   *   See the @FT_RASTER_FLAG_DIRECT value of the `flags' field in the
+   *   The gray-level rasterizer always uses 256 gray levels.  If you want
+   *   less gray levels, you have to provide your own span callback.  See the
+   *   @FT_RASTER_FLAG_DIRECT value of the `flags` field in the
    *   @FT_Raster_Params structure for more details.
    */
   FT_EXPORT( FT_Error )
@@ -535,22 +516,22 @@
    *
    * @values:
    *   FT_ORIENTATION_TRUETYPE ::
-   *     According to the TrueType specification, clockwise contours must
-   *     be filled, and counter-clockwise ones must be unfilled.
+   *     According to the TrueType specification, clockwise contours must be
+   *     filled, and counter-clockwise ones must be unfilled.
    *
    *   FT_ORIENTATION_POSTSCRIPT ::
-   *     According to the PostScript specification, counter-clockwise contours
-   *     must be filled, and clockwise ones must be unfilled.
+   *     According to the PostScript specification, counter-clockwise
+   *     contours must be filled, and clockwise ones must be unfilled.
    *
    *   FT_ORIENTATION_FILL_RIGHT ::
    *     This is identical to @FT_ORIENTATION_TRUETYPE, but is used to
-   *     remember that in TrueType, everything that is to the right of
-   *     the drawing direction of a contour must be filled.
+   *     remember that in TrueType, everything that is to the right of the
+   *     drawing direction of a contour must be filled.
    *
    *   FT_ORIENTATION_FILL_LEFT ::
    *     This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to
-   *     remember that in PostScript, everything that is to the left of
-   *     the drawing direction of a contour must be filled.
+   *     remember that in PostScript, everything that is to the left of the
+   *     drawing direction of a contour must be filled.
    *
    *   FT_ORIENTATION_NONE ::
    *     The orientation cannot be determined.  That is, different parts of
@@ -574,11 +555,11 @@
    *   FT_Outline_Get_Orientation
    *
    * @description:
-   *   This function analyzes a glyph outline and tries to compute its
-   *   fill orientation (see @FT_Orientation).  This is done by integrating
-   *   the total area covered by the outline. The positive integral
-   *   corresponds to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT
-   *   is returned. The negative integral corresponds to the counter-clockwise
+   *   This function analyzes a glyph outline and tries to compute its fill
+   *   orientation (see @FT_Orientation).  This is done by integrating the
+   *   total area covered by the outline. The positive integral corresponds
+   *   to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is
+   *   returned. The negative integral corresponds to the counter-clockwise
    *   orientation and @FT_ORIENTATION_TRUETYPE is returned.
    *
    *   Note that this will return @FT_ORIENTATION_TRUETYPE for empty
diff --git a/include/freetype/ftparams.h b/include/freetype/ftparams.h
index 004eaf5..c374ee2 100644
--- a/include/freetype/ftparams.h
+++ b/include/freetype/ftparams.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for possible FT_Parameter tags (specification only).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,16 +51,16 @@
    */
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
    *
    * @description:
    *   A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
-   *   family names in the `name' table (introduced in OpenType version
-   *   1.4).  Use this for backward compatibility with legacy systems that
-   *   have a four-faces-per-family restriction.
+   *   family names in the 'name' table (introduced in OpenType version 1.4).
+   *   Use this for backward compatibility with legacy systems that have a
+   *   four-faces-per-family restriction.
    *
    * @since:
    *   2.8
@@ -75,14 +75,14 @@
           FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
    *
    * @description:
    *   A tag for @FT_Parameter to make @FT_Open_Face ignore typographic
-   *   subfamily names in the `name' table (introduced in OpenType version
+   *   subfamily names in the 'name' table (introduced in OpenType version
    *   1.4).  Use this for backward compatibility with legacy systems that
    *   have a four-faces-per-family restriction.
    *
@@ -99,7 +99,7 @@
           FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_PARAM_TAG_INCREMENTAL
@@ -121,8 +121,8 @@
    * @description:
    *   An @FT_Parameter tag to be used with @FT_Face_Properties.  The
    *   corresponding argument specifies the five LCD filter weights for a
-   *   given face (if using @FT_LOAD_TARGET_LCD, for example), overriding
-   *   the global default values or the values set up with
+   *   given face (if using @FT_LOAD_TARGET_LCD, for example), overriding the
+   *   global default values or the values set up with
    *   @FT_Library_SetLcdFilterWeights.
    *
    * @since:
@@ -141,8 +141,7 @@
    * @description:
    *   An @FT_Parameter tag to be used with @FT_Face_Properties.  The
    *   corresponding 32bit signed integer argument overrides the font
-   *   driver's random seed value with a face-specific one; see
-   *   @random-seed.
+   *   driver's random seed value with a face-specific one; see @random-seed.
    *
    * @since:
    *   2.8
@@ -163,10 +162,10 @@
    *   darkening, overriding the global default values or the values set up
    *   with @FT_Property_Set (see @no-stem-darkening).
    *
-   *   This is a passive setting that only takes effect if the font driver
-   *   or autohinter honors it, which the CFF, Type~1, and CID drivers
-   *   always do, but the autohinter only in `light' hinting mode (as of
-   *   version 2.9).
+   *   This is a passive setting that only takes effect if the font driver or
+   *   autohinter honors it, which the CFF, Type~1, and CID drivers always
+   *   do, but the autohinter only in 'light' hinting mode (as of version
+   *   2.9).
    *
    * @since:
    *   2.8
@@ -176,7 +175,7 @@
           FT_MAKE_TAG( 'd', 'a', 'r', 'k' )
 
 
-  /***************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_PARAM_TAG_UNPATENTED_HINTING
@@ -184,9 +183,9 @@
    * @description:
    *   Deprecated, no effect.
    *
-   *   Previously: A constant used as the tag of an @FT_Parameter structure to
-   *   indicate that unpatented methods only should be used by the TrueType
-   *   bytecode interpreter for a typeface opened by @FT_Open_Face.
+   *   Previously: A constant used as the tag of an @FT_Parameter structure
+   *   to indicate that unpatented methods only should be used by the
+   *   TrueType bytecode interpreter for a typeface opened by @FT_Open_Face.
    *
    */
 #define FT_PARAM_TAG_UNPATENTED_HINTING \
diff --git a/include/freetype/ftpfr.h b/include/freetype/ftpfr.h
index deaae61..b4eca76 100644
--- a/include/freetype/ftpfr.h
+++ b/include/freetype/ftpfr.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing PFR-specific data (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -49,7 +49,7 @@
    */
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PFR_Metrics
@@ -63,22 +63,22 @@
    *
    * @output:
    *    aoutline_resolution ::
-   *      Outline resolution.  This is equivalent to `face->units_per_EM'
-   *      for non-PFR fonts.  Optional (parameter can be NULL).
+   *      Outline resolution.  This is equivalent to `face->units_per_EM` for
+   *      non-PFR fonts.  Optional (parameter can be `NULL`).
    *
    *    ametrics_resolution ::
-   *      Metrics resolution.  This is equivalent to `outline_resolution'
-   *      for non-PFR fonts.  Optional (parameter can be NULL).
+   *      Metrics resolution.  This is equivalent to `outline_resolution` for
+   *      non-PFR fonts.  Optional (parameter can be `NULL`).
    *
    *    ametrics_x_scale ::
-   *      A 16.16 fixed-point number used to scale distance expressed
-   *      in metrics units to device subpixels.  This is equivalent to
-   *      `face->size->x_scale', but for metrics only.  Optional (parameter
-   *      can be NULL).
+   *      A 16.16 fixed-point number used to scale distance expressed in
+   *      metrics units to device subpixels.  This is equivalent to
+   *      `face->size->x_scale`, but for metrics only.  Optional (parameter
+   *      can be `NULL`).
    *
    *    ametrics_y_scale ::
-   *      Same as `ametrics_x_scale' but for the vertical direction.
-   *      optional (parameter can be NULL).
+   *      Same as `ametrics_x_scale` but for the vertical direction.
+   *      optional (parameter can be `NULL`).
    *
    * @return:
    *    FreeType error code.  0~means success.
@@ -95,7 +95,7 @@
                       FT_Fixed  *ametrics_y_scale );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PFR_Kerning
@@ -123,11 +123,11 @@
    *    FreeType error code.  0~means success.
    *
    * @note:
-   *    This function always return distances in original PFR metrics
-   *    units.  This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED
-   *    mode, which always returns distances converted to outline units.
+   *    This function always return distances in original PFR metrics units.
+   *    This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED mode,
+   *    which always returns distances converted to outline units.
    *
-   *    You can use the value of the `x_scale' and `y_scale' parameters
+   *    You can use the value of the `x_scale` and `y_scale` parameters
    *    returned by @FT_Get_PFR_Metrics to scale these to device subpixels.
    */
   FT_EXPORT( FT_Error )
@@ -137,7 +137,7 @@
                       FT_Vector  *avector );
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PFR_Advance
@@ -161,7 +161,7 @@
    *    FreeType error code.  0~means success.
    *
    * @note:
-   *    You can use the `x_scale' or `y_scale' results of @FT_Get_PFR_Metrics
+   *    You can use the `x_scale` or `y_scale` results of @FT_Get_PFR_Metrics
    *    to convert the advance to device subpixels (i.e., 1/64th of pixels).
    */
   FT_EXPORT( FT_Error )
diff --git a/include/freetype/ftrender.h b/include/freetype/ftrender.h
index 2b7e5c8..a01c774 100644
--- a/include/freetype/ftrender.h
+++ b/include/freetype/ftrender.h
@@ -4,7 +4,7 @@
  *
  *   FreeType renderer modules public interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -132,12 +132,11 @@
    *     The glyph image format this renderer handles.
    *
    *   render_glyph ::
-   *     A method used to render the image that is in a
-   *     given glyph slot into a bitmap.
+   *     A method used to render the image that is in a given glyph slot into
+   *     a bitmap.
    *
    *   transform_glyph ::
-   *     A method used to transform the image that is in
-   *     a given glyph slot.
+   *     A method used to transform the image that is in a given glyph slot.
    *
    *   get_glyph_cbox ::
    *     A method used to access the glyph's cbox.
@@ -146,8 +145,8 @@
    *     A method used to pass additional parameters.
    *
    *   raster_class ::
-   *     For @FT_GLYPH_FORMAT_OUTLINE renderers only.
-   *     This is a pointer to its raster's class.
+   *     For @FT_GLYPH_FORMAT_OUTLINE renderers only.  This is a pointer to
+   *     its raster's class.
    */
   typedef struct  FT_Renderer_Class_
   {
@@ -184,8 +183,8 @@
    *   A renderer handle.  0~if none found.
    *
    * @note:
-   *   An error will be returned if a module already exists by that name,
-   *   or if the module requires a version of FreeType that is too great.
+   *   An error will be returned if a module already exists by that name, or
+   *   if the module requires a version of FreeType that is too great.
    *
    *   To add a new renderer, simply use @FT_Add_Module.  To retrieve a
    *   renderer by its name, use @FT_Get_Module.
@@ -221,13 +220,13 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   In case of success, the renderer will be used to convert glyph
-   *   images in the renderer's known format into bitmaps.
+   *   In case of success, the renderer will be used to convert glyph images
+   *   in the renderer's known format into bitmaps.
    *
    *   This doesn't change the current renderer for other formats.
    *
-   *   Currently, no FreeType renderer module uses `parameters'; you
-   *   should thus always pass NULL as the value.
+   *   Currently, no FreeType renderer module uses `parameters`; you should
+   *   thus always pass `NULL` as the value.
    */
   FT_EXPORT( FT_Error )
   FT_Set_Renderer( FT_Library     library,
diff --git a/include/freetype/ftsizes.h b/include/freetype/ftsizes.h
index 481a053..6c63cef 100644
--- a/include/freetype/ftsizes.h
+++ b/include/freetype/ftsizes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType size objects management (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -19,8 +19,8 @@
   /**************************************************************************
    *
    * Typical application would normally not need to use these functions.
-   * However, they have been placed in a public API for the rare cases
-   * where they are needed.
+   * However, they have been placed in a public API for the rare cases where
+   * they are needed.
    *
    */
 
@@ -54,22 +54,20 @@
    *   Managing multiple sizes per face.
    *
    * @description:
-   *   When creating a new face object (e.g., with @FT_New_Face), an
-   *   @FT_Size object is automatically created and used to store all
-   *   pixel-size dependent information, available in the `face->size'
-   *   field.
+   *   When creating a new face object (e.g., with @FT_New_Face), an @FT_Size
+   *   object is automatically created and used to store all pixel-size
+   *   dependent information, available in the `face->size` field.
    *
-   *   It is however possible to create more sizes for a given face,
-   *   mostly in order to manage several character pixel sizes of the
-   *   same font family and style.  See @FT_New_Size and @FT_Done_Size.
+   *   It is however possible to create more sizes for a given face, mostly
+   *   in order to manage several character pixel sizes of the same font
+   *   family and style.  See @FT_New_Size and @FT_Done_Size.
    *
-   *   Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only
-   *   modify the contents of the current `active' size; you thus need
-   *   to use @FT_Activate_Size to change it.
+   *   Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only modify the
+   *   contents of the current 'active' size; you thus need to use
+   *   @FT_Activate_Size to change it.
    *
-   *   99% of applications won't need the functions provided here,
-   *   especially if they use the caching sub-system, so be cautious
-   *   when using these.
+   *   99% of applications won't need the functions provided here, especially
+   *   if they use the caching sub-system, so be cautious when using these.
    *
    */
 
@@ -94,8 +92,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   You need to call @FT_Activate_Size in order to select the new size
-   *   for upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size,
+   *   You need to call @FT_Activate_Size in order to select the new size for
+   *   upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size,
    *   @FT_Load_Glyph, @FT_Load_Char, etc.
    */
   FT_EXPORT( FT_Error )
@@ -109,9 +107,8 @@
    *   FT_Done_Size
    *
    * @description:
-   *   Discard a given size object.  Note that @FT_Done_Face
-   *   automatically discards all size objects allocated with
-   *   @FT_New_Size.
+   *   Discard a given size object.  Note that @FT_Done_Face automatically
+   *   discards all size objects allocated with @FT_New_Size.
    *
    * @input:
    *   size ::
@@ -130,12 +127,12 @@
    *   FT_Activate_Size
    *
    * @description:
-   *   Even though it is possible to create several size objects for a
-   *   given face (see @FT_New_Size for details), functions like
-   *   @FT_Load_Glyph or @FT_Load_Char only use the one that has been
-   *   activated last to determine the `current character pixel size'.
+   *   Even though it is possible to create several size objects for a given
+   *   face (see @FT_New_Size for details), functions like @FT_Load_Glyph or
+   *   @FT_Load_Char only use the one that has been activated last to
+   *   determine the 'current character pixel size'.
    *
-   *   This function can be used to `activate' a previously created size
+   *   This function can be used to 'activate' a previously created size
    *   object.
    *
    * @input:
@@ -146,8 +143,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   If `face' is the size's parent face object, this function changes
-   *   the value of `face->size' to the input size handle.
+   *   If `face` is the size's parent face object, this function changes the
+   *   value of `face->size` to the input size handle.
    */
   FT_EXPORT( FT_Error )
   FT_Activate_Size( FT_Size  size );
diff --git a/include/freetype/ftsnames.h b/include/freetype/ftsnames.h
index 0a0ac31..4d43602 100644
--- a/include/freetype/ftsnames.h
+++ b/include/freetype/ftsnames.h
@@ -2,12 +2,12 @@
  *
  * ftsnames.h
  *
- *   Simple interface to access SFNT `name' tables (which are used
+ *   Simple interface to access SFNT 'name' tables (which are used
  *   to hold font names, copyright info, notices, etc.) (specification).
  *
  *   This is _not_ used to retrieve glyph names!
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -49,10 +49,10 @@
    *   Access the names embedded in TrueType and OpenType files.
    *
    * @description:
-   *   The TrueType and OpenType specifications allow the inclusion of
-   *   a special names table (`name') in font files.  This table contains
-   *   textual (and internationalized) information regarding the font,
-   *   like family name, copyright, version, etc.
+   *   The TrueType and OpenType specifications allow the inclusion of a
+   *   special names table ('name') in font files.  This table contains
+   *   textual (and internationalized) information regarding the font, like
+   *   family name, copyright, version, etc.
    *
    *   The definitions below are used to access them if available.
    *
@@ -67,43 +67,39 @@
    *   FT_SfntName
    *
    * @description:
-   *   A structure used to model an SFNT `name' table entry.
+   *   A structure used to model an SFNT 'name' table entry.
    *
    * @fields:
    *   platform_id ::
-   *     The platform ID for `string'.
-   *     See @TT_PLATFORM_XXX for possible values.
+   *     The platform ID for `string`.  See @TT_PLATFORM_XXX for possible
+   *     values.
    *
    *   encoding_id ::
-   *     The encoding ID for `string'.
-   *     See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,
-   *     @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX
-   *     for possible values.
+   *     The encoding ID for `string`.  See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX,
+   *     @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible
+   *     values.
    *
    *   language_id ::
-   *     The language ID for `string'.
-   *     See @TT_MAC_LANGID_XXX and @TT_MS_LANGID_XXX for
-   *     possible values.
+   *     The language ID for `string`.  See @TT_MAC_LANGID_XXX and
+   *     @TT_MS_LANGID_XXX for possible values.
    *
-   *     Registered OpenType values for `language_id' are
-   *     always smaller than 0x8000; values equal or larger
-   *     than 0x8000 usually indicate a language tag string
-   *     (introduced in OpenType version 1.6).  Use function
-   *     @FT_Get_Sfnt_LangTag with `language_id' as its
-   *     argument to retrieve the associated language tag.
+   *     Registered OpenType values for `language_id` are always smaller than
+   *     0x8000; values equal or larger than 0x8000 usually indicate a
+   *     language tag string (introduced in OpenType version 1.6).  Use
+   *     function @FT_Get_Sfnt_LangTag with `language_id` as its argument to
+   *     retrieve the associated language tag.
    *
    *   name_id ::
-   *     An identifier for `string'.
-   *     See @TT_NAME_ID_XXX for possible values.
+   *     An identifier for `string`.  See @TT_NAME_ID_XXX for possible
+   *     values.
    *
    *   string ::
-   *     The `name' string.  Note that its format differs
-   *     depending on the (platform,encoding) pair, being
-   *     either a string of bytes (without a terminating
-   *     NULL byte) or containing UTF-16BE entities.
+   *     The 'name' string.  Note that its format differs depending on the
+   *     (platform,encoding) pair, being either a string of bytes (without a
+   *     terminating `NULL` byte) or containing UTF-16BE entities.
    *
    *   string_len ::
-   *     The length of `string' in bytes.
+   *     The length of `string` in bytes.
    *
    * @note:
    *   Please refer to the TrueType or OpenType specification for more
@@ -128,18 +124,18 @@
    *   FT_Get_Sfnt_Name_Count
    *
    * @description:
-   *   Retrieve the number of name strings in the SFNT `name' table.
+   *   Retrieve the number of name strings in the SFNT 'name' table.
    *
    * @input:
    *   face ::
    *     A handle to the source face.
    *
    * @return:
-   *   The number of strings in the `name' table.
+   *   The number of strings in the 'name' table.
    *
    * @note:
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_SFNT_NAMES' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
    */
   FT_EXPORT( FT_UInt )
   FT_Get_Sfnt_Name_Count( FT_Face  face );
@@ -151,14 +147,14 @@
    *   FT_Get_Sfnt_Name
    *
    * @description:
-   *   Retrieve a string of the SFNT `name' table for a given index.
+   *   Retrieve a string of the SFNT 'name' table for a given index.
    *
    * @input:
    *   face ::
    *     A handle to the source face.
    *
    *   idx ::
-   *     The index of the `name' string.
+   *     The index of the 'name' string.
    *
    * @output:
    *   aname ::
@@ -168,19 +164,19 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The `string' array returned in the `aname' structure is not
-   *   null-terminated.  Note that you don't have to deallocate `string'
-   *   by yourself; FreeType takes care of it if you call @FT_Done_Face.
+   *   The `string` array returned in the `aname` structure is not
+   *   null-terminated.  Note that you don't have to deallocate `string` by
+   *   yourself; FreeType takes care of it if you call @FT_Done_Face.
    *
    *   Use @FT_Get_Sfnt_Name_Count to get the total number of available
-   *   `name' table entries, then do a loop until you get the right
-   *   platform, encoding, and name ID.
+   *   'name' table entries, then do a loop until you get the right platform,
+   *   encoding, and name ID.
    *
-   *   `name' table format~1 entries can use language tags also, see
+   *   'name' table format~1 entries can use language tags also, see
    *   @FT_Get_Sfnt_LangTag.
    *
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_SFNT_NAMES' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
    */
   FT_EXPORT( FT_Error )
   FT_Get_Sfnt_Name( FT_Face       face,
@@ -194,16 +190,15 @@
    *   FT_SfntLangTag
    *
    * @description:
-   *   A structure to model a language tag entry from an SFNT `name'
-   *   table.
+   *   A structure to model a language tag entry from an SFNT 'name' table.
    *
    * @fields:
    *   string ::
-   *     The language tag string, encoded in UTF-16BE
-   *     (without trailing NULL bytes).
+   *     The language tag string, encoded in UTF-16BE (without trailing
+   *     `NULL` bytes).
    *
    *   string_len ::
-   *     The length of `string' in *bytes*.
+   *     The length of `string` in **bytes**.
    *
    * @note:
    *   Please refer to the TrueType or OpenType specification for more
@@ -227,36 +222,36 @@
    *
    * @description:
    *   Retrieve the language tag associated with a language ID of an SFNT
-   *   `name' table entry.
+   *   'name' table entry.
    *
    * @input:
    *   face ::
    *     A handle to the source face.
    *
    *   langID ::
-   *     The language ID, as returned by @FT_Get_Sfnt_Name.
-   *     This is always a value larger than 0x8000.
+   *     The language ID, as returned by @FT_Get_Sfnt_Name.  This is always a
+   *     value larger than 0x8000.
    *
    * @output:
    *   alangTag ::
-   *     The language tag associated with the `name' table
-   *     entry's language ID.
+   *     The language tag associated with the 'name' table entry's language
+   *     ID.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   The `string' array returned in the `alangTag' structure is not
-   *   null-terminated.  Note that you don't have to deallocate `string'
-   *   by yourself; FreeType takes care of it if you call @FT_Done_Face.
+   *   The `string` array returned in the `alangTag` structure is not
+   *   null-terminated.  Note that you don't have to deallocate `string` by
+   *   yourself; FreeType takes care of it if you call @FT_Done_Face.
    *
-   *   Only `name' table format~1 supports language tags.  For format~0
+   *   Only 'name' table format~1 supports language tags.  For format~0
    *   tables, this function always returns FT_Err_Invalid_Table.  For
    *   invalid format~1 language ID values, FT_Err_Invalid_Argument is
    *   returned.
    *
    *   This function always returns an error if the config macro
-   *   `TT_CONFIG_OPTION_SFNT_NAMES' is not defined in `ftoption.h'.
+   *   `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`.
    *
    * @since:
    *   2.8
diff --git a/include/freetype/ftstroke.h b/include/freetype/ftstroke.h
index 91d2776..01a9c18 100644
--- a/include/freetype/ftstroke.h
+++ b/include/freetype/ftstroke.h
@@ -4,7 +4,7 @@
  *
  *   FreeType path stroker (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
 FT_BEGIN_HEADER
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @section:
    *    glyph_stroker
@@ -39,11 +39,11 @@
    *    Generating bordered and stroked glyphs.
    *
    * @description:
-   *    This component generates stroked outlines of a given vectorial
-   *    glyph.  It also allows you to retrieve the `outside' and/or the
-   *    `inside' borders of the stroke.
+   *    This component generates stroked outlines of a given vectorial glyph.
+   *    It also allows you to retrieve the 'outside' and/or the 'inside'
+   *    borders of the stroke.
    *
-   *    This can be useful to generate `bordered' glyph, i.e., glyphs
+   *    This can be useful to generate 'bordered' glyph, i.e., glyphs
    *    displayed with a coloured (and anti-aliased) border around their
    *    shape.
    *
@@ -81,7 +81,7 @@
    */
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Stroker
@@ -92,51 +92,48 @@
   typedef struct FT_StrokerRec_*  FT_Stroker;
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_Stroker_LineJoin
    *
    * @description:
-   *   These values determine how two joining lines are rendered
-   *   in a stroker.
+   *   These values determine how two joining lines are rendered in a
+   *   stroker.
    *
    * @values:
    *   FT_STROKER_LINEJOIN_ROUND ::
-   *     Used to render rounded line joins.  Circular arcs are used
-   *     to join two lines smoothly.
+   *     Used to render rounded line joins.  Circular arcs are used to join
+   *     two lines smoothly.
    *
    *   FT_STROKER_LINEJOIN_BEVEL ::
-   *     Used to render beveled line joins.  The outer corner of
-   *     the joined lines is filled by enclosing the triangular
-   *     region of the corner with a straight line between the
-   *     outer corners of each stroke.
+   *     Used to render beveled line joins.  The outer corner of the joined
+   *     lines is filled by enclosing the triangular region of the corner
+   *     with a straight line between the outer corners of each stroke.
    *
    *   FT_STROKER_LINEJOIN_MITER_FIXED ::
-   *     Used to render mitered line joins, with fixed bevels if the
-   *     miter limit is exceeded.  The outer edges of the strokes
-   *     for the two segments are extended until they meet at an
-   *     angle.  If the segments meet at too sharp an angle (such
-   *     that the miter would extend from the intersection of the
-   *     segments a distance greater than the product of the miter
-   *     limit value and the border radius), then a bevel join (see
-   *     above) is used instead.  This prevents long spikes being
-   *     created.  FT_STROKER_LINEJOIN_MITER_FIXED generates a miter
-   *     line join as used in PostScript and PDF.
+   *     Used to render mitered line joins, with fixed bevels if the miter
+   *     limit is exceeded.  The outer edges of the strokes for the two
+   *     segments are extended until they meet at an angle.  If the segments
+   *     meet at too sharp an angle (such that the miter would extend from
+   *     the intersection of the segments a distance greater than the product
+   *     of the miter limit value and the border radius), then a bevel join
+   *     (see above) is used instead.  This prevents long spikes being
+   *     created.  `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line
+   *     join as used in PostScript and PDF.
    *
    *   FT_STROKER_LINEJOIN_MITER_VARIABLE ::
    *   FT_STROKER_LINEJOIN_MITER ::
-   *     Used to render mitered line joins, with variable bevels if
-   *     the miter limit is exceeded.  The intersection of the
-   *     strokes is clipped at a line perpendicular to the bisector
-   *     of the angle between the strokes, at the distance from the
-   *     intersection of the segments equal to the product of the
-   *     miter limit value and the border radius.  This prevents
-   *     long spikes being created.
-   *     FT_STROKER_LINEJOIN_MITER_VARIABLE generates a mitered line
-   *     join as used in XPS.  FT_STROKER_LINEJOIN_MITER is an alias
-   *     for FT_STROKER_LINEJOIN_MITER_VARIABLE, retained for
-   *     backward compatibility.
+   *     Used to render mitered line joins, with variable bevels if the miter
+   *     limit is exceeded.  The intersection of the strokes is clipped at a
+   *     line perpendicular to the bisector of the angle between the strokes,
+   *     at the distance from the intersection of the segments equal to the
+   *     product of the miter limit value and the border radius.  This
+   *     prevents long spikes being created. 
+   *     `FT_STROKER_LINEJOIN_MITER_VARIABLE` generates a mitered line join
+   *     as used in XPS.  `FT_STROKER_LINEJOIN_MITER` is an alias for
+   *     `FT_STROKER_LINEJOIN_MITER_VARIABLE`, retained for backward
+   *     compatibility.
    */
   typedef enum  FT_Stroker_LineJoin_
   {
@@ -149,27 +146,25 @@
   } FT_Stroker_LineJoin;
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_Stroker_LineCap
    *
    * @description:
-   *   These values determine how the end of opened sub-paths are
-   *   rendered in a stroke.
+   *   These values determine how the end of opened sub-paths are rendered in
+   *   a stroke.
    *
    * @values:
    *   FT_STROKER_LINECAP_BUTT ::
-   *     The end of lines is rendered as a full stop on the last
-   *     point itself.
+   *     The end of lines is rendered as a full stop on the last point
+   *     itself.
    *
    *   FT_STROKER_LINECAP_ROUND ::
-   *     The end of lines is rendered as a half-circle around the
-   *     last point.
+   *     The end of lines is rendered as a half-circle around the last point.
    *
    *   FT_STROKER_LINECAP_SQUARE ::
-   *     The end of lines is rendered as a square around the
-   *     last point.
+   *     The end of lines is rendered as a square around the last point.
    */
   typedef enum  FT_Stroker_LineCap_
   {
@@ -180,14 +175,14 @@
   } FT_Stroker_LineCap;
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_StrokerBorder
    *
    * @description:
-   *   These values are used to select a given stroke border
-   *   in @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
+   *   These values are used to select a given stroke border in
+   *   @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder.
    *
    * @values:
    *   FT_STROKER_BORDER_LEFT ::
@@ -197,9 +192,9 @@
    *     Select the right border, relative to the drawing direction.
    *
    * @note:
-   *   Applications are generally interested in the `inside' and `outside'
+   *   Applications are generally interested in the 'inside' and 'outside'
    *   borders.  However, there is no direct mapping between these and the
-   *   `left' and `right' ones, since this really depends on the glyph's
+   *   'left' and 'right' ones, since this really depends on the glyph's
    *   drawing orientation, which varies between font formats.
    *
    *   You can however use @FT_Outline_GetInsideBorder and
@@ -213,14 +208,14 @@
   } FT_StrokerBorder;
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Outline_GetInsideBorder
    *
    * @description:
-   *   Retrieve the @FT_StrokerBorder value corresponding to the
-   *   `inside' borders of a given outline.
+   *   Retrieve the @FT_StrokerBorder value corresponding to the 'inside'
+   *   borders of a given outline.
    *
    * @input:
    *   outline ::
@@ -234,14 +229,14 @@
   FT_Outline_GetInsideBorder( FT_Outline*  outline );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Outline_GetOutsideBorder
    *
    * @description:
-   *   Retrieve the @FT_StrokerBorder value corresponding to the
-   *   `outside' borders of a given outline.
+   *   Retrieve the @FT_StrokerBorder value corresponding to the 'outside'
+   *   borders of a given outline.
    *
    * @input:
    *   outline ::
@@ -255,7 +250,7 @@
   FT_Outline_GetOutsideBorder( FT_Outline*  outline );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_New
@@ -269,7 +264,7 @@
    *
    * @output:
    *   astroker ::
-   *     A new stroker object handle.  NULL in case of error.
+   *     A new stroker object handle.  `NULL` in case of error.
    *
    * @return:
    *    FreeType error code.  0~means success.
@@ -279,7 +274,7 @@
                   FT_Stroker  *astroker );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_Set
@@ -301,13 +296,12 @@
    *     The line join style.
    *
    *   miter_limit ::
-   *     The miter limit for the FT_STROKER_LINEJOIN_MITER_FIXED and
-   *     FT_STROKER_LINEJOIN_MITER_VARIABLE line join styles,
-   *     expressed as 16.16 fixed-point value.
+   *     The miter limit for the `FT_STROKER_LINEJOIN_MITER_FIXED` and
+   *     `FT_STROKER_LINEJOIN_MITER_VARIABLE` line join styles, expressed as
+   *     16.16 fixed-point value.
    *
    * @note:
-   *   The radius is expressed in the same units as the outline
-   *   coordinates.
+   *   The radius is expressed in the same units as the outline coordinates.
    *
    *   This function calls @FT_Stroker_Rewind automatically.
    */
@@ -319,16 +313,15 @@
                   FT_Fixed             miter_limit );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_Rewind
    *
    * @description:
-   *   Reset a stroker object without changing its attributes.
-   *   You should call this function before beginning a new
-   *   series of calls to @FT_Stroker_BeginSubPath or
-   *   @FT_Stroker_EndSubPath.
+   *   Reset a stroker object without changing its attributes.  You should
+   *   call this function before beginning a new series of calls to
+   *   @FT_Stroker_BeginSubPath or @FT_Stroker_EndSubPath.
    *
    * @input:
    *   stroker ::
@@ -338,15 +331,15 @@
   FT_Stroker_Rewind( FT_Stroker  stroker );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_ParseOutline
    *
    * @description:
-   *   A convenience function used to parse a whole outline with
-   *   the stroker.  The resulting outline(s) can be retrieved
-   *   later by functions like @FT_Stroker_GetCounts and @FT_Stroker_Export.
+   *   A convenience function used to parse a whole outline with the stroker.
+   *   The resulting outline(s) can be retrieved later by functions like
+   *   @FT_Stroker_GetCounts and @FT_Stroker_Export.
    *
    * @input:
    *   stroker ::
@@ -356,18 +349,18 @@
    *     The source outline.
    *
    *   opened ::
-   *     A boolean.  If~1, the outline is treated as an open path instead
-   *     of a closed one.
+   *     A boolean.  If~1, the outline is treated as an open path instead of
+   *     a closed one.
    *
    * @return:
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   If `opened' is~0 (the default), the outline is treated as a closed
-   *   path, and the stroker generates two distinct `border' outlines.
+   *   If `opened` is~0 (the default), the outline is treated as a closed
+   *   path, and the stroker generates two distinct 'border' outlines.
    *
-   *   If `opened' is~1, the outline is processed as an open path, and the
-   *   stroker generates a single `stroke' outline.
+   *   If `opened` is~1, the outline is processed as an open path, and the
+   *   stroker generates a single 'stroke' outline.
    *
    *   This function calls @FT_Stroker_Rewind automatically.
    */
@@ -377,7 +370,7 @@
                            FT_Bool      opened );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_BeginSubPath
@@ -399,8 +392,8 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   This function is useful when you need to stroke a path that is
-   *   not stored as an @FT_Outline object.
+   *   This function is useful when you need to stroke a path that is not
+   *   stored as an @FT_Outline object.
    */
   FT_EXPORT( FT_Error )
   FT_Stroker_BeginSubPath( FT_Stroker  stroker,
@@ -408,7 +401,7 @@
                            FT_Bool     open );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_EndSubPath
@@ -424,22 +417,22 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   You should call this function after @FT_Stroker_BeginSubPath.
-   *   If the subpath was not `opened', this function `draws' a
-   *   single line segment to the start position when needed.
+   *   You should call this function after @FT_Stroker_BeginSubPath.  If the
+   *   subpath was not 'opened', this function 'draws' a single line segment
+   *   to the start position when needed.
    */
   FT_EXPORT( FT_Error )
   FT_Stroker_EndSubPath( FT_Stroker  stroker );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_LineTo
    *
    * @description:
-   *   `Draw' a single line segment in the stroker's current sub-path,
-   *   from the last position.
+   *   'Draw' a single line segment in the stroker's current sub-path, from
+   *   the last position.
    *
    * @input:
    *   stroker ::
@@ -460,13 +453,13 @@
                      FT_Vector*  to );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_ConicTo
    *
    * @description:
-   *   `Draw' a single quadratic Bezier in the stroker's current sub-path,
+   *   'Draw' a single quadratic Bezier in the stroker's current sub-path,
    *   from the last position.
    *
    * @input:
@@ -492,14 +485,14 @@
                       FT_Vector*  to );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_CubicTo
    *
    * @description:
-   *   `Draw' a single cubic Bezier in the stroker's current sub-path,
-   *   from the last position.
+   *   'Draw' a single cubic Bezier in the stroker's current sub-path, from
+   *   the last position.
    *
    * @input:
    *   stroker ::
@@ -528,16 +521,16 @@
                       FT_Vector*  to );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_GetBorderCounts
    *
    * @description:
-   *   Call this function once you have finished parsing your paths
-   *   with the stroker.  It returns the number of points and
-   *   contours necessary to export one of the `border' or `stroke'
-   *   outlines generated by the stroker.
+   *   Call this function once you have finished parsing your paths with the
+   *   stroker.  It returns the number of points and contours necessary to
+   *   export one of the 'border' or 'stroke' outlines generated by the
+   *   stroker.
    *
    * @input:
    *   stroker ::
@@ -557,15 +550,15 @@
    *   FreeType error code.  0~means success.
    *
    * @note:
-   *   When an outline, or a sub-path, is `closed', the stroker generates
-   *   two independent `border' outlines, named `left' and `right'.
+   *   When an outline, or a sub-path, is 'closed', the stroker generates two
+   *   independent 'border' outlines, named 'left' and 'right'.
    *
-   *   When the outline, or a sub-path, is `opened', the stroker merges
-   *   the `border' outlines with caps.  The `left' border receives all
-   *   points, while the `right' border becomes empty.
+   *   When the outline, or a sub-path, is 'opened', the stroker merges the
+   *   'border' outlines with caps.  The 'left' border receives all points,
+   *   while the 'right' border becomes empty.
    *
-   *   Use the function @FT_Stroker_GetCounts instead if you want to
-   *   retrieve the counts associated to both borders.
+   *   Use the function @FT_Stroker_GetCounts instead if you want to retrieve
+   *   the counts associated to both borders.
    */
   FT_EXPORT( FT_Error )
   FT_Stroker_GetBorderCounts( FT_Stroker        stroker,
@@ -574,19 +567,17 @@
                               FT_UInt          *anum_contours );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_ExportBorder
    *
    * @description:
-   *   Call this function after @FT_Stroker_GetBorderCounts to
-   *   export the corresponding border to your own @FT_Outline
-   *   structure.
+   *   Call this function after @FT_Stroker_GetBorderCounts to export the
+   *   corresponding border to your own @FT_Outline structure.
    *
-   *   Note that this function appends the border points and
-   *   contours to your outline, but does not try to resize its
-   *   arrays.
+   *   Note that this function appends the border points and contours to your
+   *   outline, but does not try to resize its arrays.
    *
    * @input:
    *   stroker ::
@@ -599,19 +590,19 @@
    *     The target outline handle.
    *
    * @note:
-   *   Always call this function after @FT_Stroker_GetBorderCounts to
-   *   get sure that there is enough room in your @FT_Outline object to
-   *   receive all new data.
+   *   Always call this function after @FT_Stroker_GetBorderCounts to get
+   *   sure that there is enough room in your @FT_Outline object to receive
+   *   all new data.
    *
-   *   When an outline, or a sub-path, is `closed', the stroker generates
-   *   two independent `border' outlines, named `left' and `right'.
+   *   When an outline, or a sub-path, is 'closed', the stroker generates two
+   *   independent 'border' outlines, named 'left' and 'right'.
    *
-   *   When the outline, or a sub-path, is `opened', the stroker merges
-   *   the `border' outlines with caps.  The `left' border receives all
-   *   points, while the `right' border becomes empty.
+   *   When the outline, or a sub-path, is 'opened', the stroker merges the
+   *   'border' outlines with caps.  The 'left' border receives all points,
+   *   while the 'right' border becomes empty.
    *
-   *   Use the function @FT_Stroker_Export instead if you want to
-   *   retrieve all borders at once.
+   *   Use the function @FT_Stroker_Export instead if you want to retrieve
+   *   all borders at once.
    */
   FT_EXPORT( void )
   FT_Stroker_ExportBorder( FT_Stroker        stroker,
@@ -619,16 +610,15 @@
                            FT_Outline*       outline );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_GetCounts
    *
    * @description:
-   *   Call this function once you have finished parsing your paths
-   *   with the stroker.  It returns the number of points and
-   *   contours necessary to export all points/borders from the stroked
-   *   outline/path.
+   *   Call this function once you have finished parsing your paths with the
+   *   stroker.  It returns the number of points and contours necessary to
+   *   export all points/borders from the stroked outline/path.
    *
    * @input:
    *   stroker ::
@@ -650,18 +640,17 @@
                         FT_UInt    *anum_contours );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_Export
    *
    * @description:
-   *   Call this function after @FT_Stroker_GetBorderCounts to
-   *   export all borders to your own @FT_Outline structure.
+   *   Call this function after @FT_Stroker_GetBorderCounts to export all
+   *   borders to your own @FT_Outline structure.
    *
-   *   Note that this function appends the border points and
-   *   contours to your outline, but does not try to resize its
-   *   arrays.
+   *   Note that this function appends the border points and contours to your
+   *   outline, but does not try to resize its arrays.
    *
    * @input:
    *   stroker ::
@@ -675,7 +664,7 @@
                      FT_Outline*  outline );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Stroker_Done
@@ -685,13 +674,13 @@
    *
    * @input:
    *   stroker ::
-   *     A stroker handle.  Can be NULL.
+   *     A stroker handle.  Can be `NULL`.
    */
   FT_EXPORT( void )
   FT_Stroker_Done( FT_Stroker  stroker );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Glyph_Stroke
@@ -708,8 +697,7 @@
    *     A stroker handle.
    *
    *   destroy ::
-   *     A Boolean.  If~1, the source glyph object is destroyed
-   *     on success.
+   *     A Boolean.  If~1, the source glyph object is destroyed on success.
    *
    * @return:
    *    FreeType error code.  0~means success.
@@ -719,8 +707,8 @@
    *
    *   Adding stroke may yield a significantly wider and taller glyph
    *   depending on how large of a radius was used to stroke the glyph.  You
-   *   may need to manually adjust horizontal and vertical advance amounts
-   *   to account for this added size.
+   *   may need to manually adjust horizontal and vertical advance amounts to
+   *   account for this added size.
    */
   FT_EXPORT( FT_Error )
   FT_Glyph_Stroke( FT_Glyph    *pglyph,
@@ -728,14 +716,14 @@
                    FT_Bool      destroy );
 
 
-  /**************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Glyph_StrokeBorder
    *
    * @description:
-   *   Stroke a given outline glyph object with a given stroker, but
-   *   only return either its inside or outside border.
+   *   Stroke a given outline glyph object with a given stroker, but only
+   *   return either its inside or outside border.
    *
    * @inout:
    *   pglyph ::
@@ -746,12 +734,11 @@
    *     A stroker handle.
    *
    *   inside ::
-   *     A Boolean.  If~1, return the inside border, otherwise
-   *     the outside border.
+   *     A Boolean.  If~1, return the inside border, otherwise the outside
+   *     border.
    *
    *   destroy ::
-   *     A Boolean.  If~1, the source glyph object is destroyed
-   *     on success.
+   *     A Boolean.  If~1, the source glyph object is destroyed on success.
    *
    * @return:
    *    FreeType error code.  0~means success.
@@ -761,8 +748,8 @@
    *
    *   Adding stroke may yield a significantly wider and taller glyph
    *   depending on how large of a radius was used to stroke the glyph.  You
-   *   may need to manually adjust horizontal and vertical advance amounts
-   *   to account for this added size.
+   *   may need to manually adjust horizontal and vertical advance amounts to
+   *   account for this added size.
    */
   FT_EXPORT( FT_Error )
   FT_Glyph_StrokeBorder( FT_Glyph    *pglyph,
diff --git a/include/freetype/ftsynth.h b/include/freetype/ftsynth.h
index f2e7856..8754f97 100644
--- a/include/freetype/ftsynth.h
+++ b/include/freetype/ftsynth.h
@@ -5,7 +5,7 @@
  *   FreeType synthesizing code for emboldening and slanting
  *   (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,7 +35,7 @@
 
 
   /* Main reason for not lifting the functions in this module to a  */
-  /* `standard' API is that the used parameters for emboldening and */
+  /* 'standard' API is that the used parameters for emboldening and */
   /* slanting are not configurable.  Consider the functions as a    */
   /* code resource that should be copied into the application and   */
   /* adapted to the particular needs.                               */
@@ -57,7 +57,7 @@
 
 FT_BEGIN_HEADER
 
-  /* Embolden a glyph by a `reasonable' value (which is highly a matter of */
+  /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */
   /* taste).  This function is actually a convenience function, providing  */
   /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden.           */
   /*                                                                       */
diff --git a/include/freetype/ftsystem.h b/include/freetype/ftsystem.h
index 0b415b6..889a6ba 100644
--- a/include/freetype/ftsystem.h
+++ b/include/freetype/ftsystem.h
@@ -4,7 +4,7 @@
  *
  *   FreeType low-level system interface definition (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,10 +38,9 @@
    *  How FreeType manages memory and i/o.
    *
    * @description:
-   *  This section contains various definitions related to memory
-   *  management and i/o access.  You need to understand this
-   *  information if you want to use a custom memory manager or you own
-   *  i/o streams.
+   *  This section contains various definitions related to memory management
+   *  and i/o access.  You need to understand this information if you want to
+   *  use a custom memory manager or you own i/o streams.
    *
    */
 
@@ -53,7 +52,7 @@
    */
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Memory
@@ -66,13 +65,13 @@
   typedef struct FT_MemoryRec_*  FT_Memory;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FT_Alloc_Func
    *
    * @description:
-   *   A function used to allocate `size' bytes from `memory'.
+   *   A function used to allocate `size` bytes from `memory`.
    *
    * @input:
    *   memory ::
@@ -90,7 +89,7 @@
                     long       size );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FT_Free_Func
@@ -111,7 +110,7 @@
                    void*      block );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FT_Realloc_Func
@@ -146,7 +145,7 @@
                       void*      block );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_MemoryRec
@@ -184,7 +183,7 @@
    */
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Stream
@@ -193,21 +192,21 @@
    *   A handle to an input stream.
    *
    * @also:
-   *   See @FT_StreamRec for the publicly accessible fields of a given
-   *   stream object.
+   *   See @FT_StreamRec for the publicly accessible fields of a given stream
+   *   object.
    *
    */
   typedef struct FT_StreamRec_*  FT_Stream;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_StreamDesc
    *
    * @description:
    *   A union type used to store either a long or a pointer.  This is used
-   *   to store a file descriptor or a `FILE*' in an input stream.
+   *   to store a file descriptor or a `FILE*` in an input stream.
    *
    */
   typedef union  FT_StreamDesc_
@@ -218,7 +217,7 @@
   } FT_StreamDesc;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FT_Stream_IoFunc
@@ -243,9 +242,8 @@
    *   The number of bytes effectively read by the stream.
    *
    * @note:
-   *   This function might be called to perform a seek or skip operation
-   *   with a `count' of~0.  A non-zero return value then indicates an
-   *   error.
+   *   This function might be called to perform a seek or skip operation with
+   *   a `count` of~0.  A non-zero return value then indicates an error.
    *
    */
   typedef unsigned long
@@ -255,7 +253,7 @@
                        unsigned long   count );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   FT_Stream_CloseFunc
@@ -272,7 +270,7 @@
   (*FT_Stream_CloseFunc)( FT_Stream  stream );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   FT_StreamRec
@@ -283,7 +281,7 @@
    * @input:
    *   base ::
    *     For memory-based streams, this is the address of the first stream
-   *     byte in memory.  This field should always be set to NULL for
+   *     byte in memory.  This field should always be set to `NULL` for
    *     disk-based streams.
    *
    *   size ::
@@ -299,7 +297,7 @@
    *
    *   descriptor ::
    *     This field is a union that can hold an integer or a pointer.  It is
-   *     used by stream implementations to store file descriptors or `FILE*'
+   *     used by stream implementations to store file descriptors or `FILE*`
    *     pointers.
    *
    *   pathname ::
@@ -314,14 +312,13 @@
    *     The stream's close function.
    *
    *   memory ::
-   *     The memory manager to use to preload frames.  This is set
-   *     internally by FreeType and shouldn't be touched by stream
-   *     implementations.
+   *     The memory manager to use to preload frames.  This is set internally
+   *     by FreeType and shouldn't be touched by stream implementations.
    *
    *   cursor ::
    *     This field is set and used internally by FreeType when parsing
-   *     frames.  In particular, the `FT_GET_XXX' macros use this instead
-   *     of the `pos' field.
+   *     frames.  In particular, the `FT_GET_XXX` macros use this instead of
+   *     the `pos` field.
    *
    *   limit ::
    *     This field is set and used internally by FreeType when parsing
diff --git a/include/freetype/fttrigon.h b/include/freetype/fttrigon.h
index 7a27bb2..37e1412 100644
--- a/include/freetype/fttrigon.h
+++ b/include/freetype/fttrigon.h
@@ -4,7 +4,7 @@
  *
  *   FreeType trigonometric functions (specification).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -39,7 +39,7 @@
    */
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   FT_Angle
@@ -52,7 +52,7 @@
   typedef FT_Fixed  FT_Angle;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ANGLE_PI
@@ -64,7 +64,7 @@
 #define FT_ANGLE_PI  ( 180L << 16 )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ANGLE_2PI
@@ -76,7 +76,7 @@
 #define FT_ANGLE_2PI  ( FT_ANGLE_PI * 2 )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ANGLE_PI2
@@ -88,7 +88,7 @@
 #define FT_ANGLE_PI2  ( FT_ANGLE_PI / 2 )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @macro:
    *   FT_ANGLE_PI4
@@ -100,7 +100,7 @@
 #define FT_ANGLE_PI4  ( FT_ANGLE_PI / 4 )
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Sin
@@ -124,7 +124,7 @@
   FT_Sin( FT_Angle  angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Cos
@@ -148,7 +148,7 @@
   FT_Cos( FT_Angle  angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Tan
@@ -168,14 +168,14 @@
   FT_Tan( FT_Angle  angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Atan2
    *
    * @description:
-   *   Return the arc-tangent corresponding to a given vector (x,y) in
-   *   the 2d plane.
+   *   Return the arc-tangent corresponding to a given vector (x,y) in the 2d
+   *   plane.
    *
    * @input:
    *   x ::
@@ -193,7 +193,7 @@
             FT_Fixed  y );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Angle_Diff
@@ -210,7 +210,7 @@
    *     Second angle.
    *
    * @return:
-   *   Constrained value of `value2-value1'.
+   *   Constrained value of `angle2-angle1`.
    *
    */
   FT_EXPORT( FT_Angle )
@@ -218,15 +218,15 @@
                  FT_Angle  angle2 );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Vector_Unit
    *
    * @description:
    *   Return the unit vector corresponding to a given angle.  After the
-   *   call, the value of `vec.x' will be `cos(angle)', and the value of
-   *   `vec.y' will be `sin(angle)'.
+   *   call, the value of `vec.x` will be `cos(angle)`, and the value of
+   *   `vec.y` will be `sin(angle)`.
    *
    *   This function is useful to retrieve both the sinus and cosinus of a
    *   given angle quickly.
@@ -245,7 +245,7 @@
                   FT_Angle    angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Vector_Rotate
@@ -267,7 +267,7 @@
                     FT_Angle    angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Vector_Length
@@ -288,7 +288,7 @@
   FT_Vector_Length( FT_Vector*  vec );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Vector_Polarize
@@ -314,7 +314,7 @@
                       FT_Angle   *angle );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @function:
    *   FT_Vector_From_Polar
diff --git a/include/freetype/fttypes.h b/include/freetype/fttypes.h
index 9da08a0..1057150 100644
--- a/include/freetype/fttypes.h
+++ b/include/freetype/fttypes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType simple types definitions (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -126,8 +126,8 @@
    *   FT_UFWord
    *
    * @description:
-   *   An unsigned 16-bit integer used to store a distance in original
-   *   font units.
+   *   An unsigned 16-bit integer used to store a distance in original font
+   *   units.
    */
   typedef unsigned short  FT_UFWord;  /* unsigned distance */
 
@@ -270,8 +270,7 @@
    *   FT_F26Dot6
    *
    * @description:
-   *   A signed 26.6 fixed-point type used for vectorial pixel
-   *   coordinates.
+   *   A signed 26.6 fixed-point type used for vectorial pixel coordinates.
    */
   typedef signed long  FT_F26Dot6;
 
@@ -294,8 +293,8 @@
    *   FT_Error
    *
    * @description:
-   *   The FreeType error code type.  A value of~0 is always interpreted
-   *   as a successful operation.
+   *   The FreeType error code type.  A value of~0 is always interpreted as a
+   *   successful operation.
    */
   typedef int  FT_Error;
 
@@ -317,9 +316,9 @@
    *   FT_Offset
    *
    * @description:
-   *   This is equivalent to the ANSI~C `size_t' type, i.e., the largest
-   *   _unsigned_ integer type used to express a file size or position,
-   *   or a memory block size.
+   *   This is equivalent to the ANSI~C `size_t` type, i.e., the largest
+   *   _unsigned_ integer type used to express a file size or position, or a
+   *   memory block size.
    */
   typedef size_t  FT_Offset;
 
@@ -330,9 +329,9 @@
    *   FT_PtrDist
    *
    * @description:
-   *   This is equivalent to the ANSI~C `ptrdiff_t' type, i.e., the
-   *   largest _signed_ integer type used to express the distance
-   *   between two pointers.
+   *   This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest
+   *   _signed_ integer type used to express the distance between two
+   *   pointers.
    */
   typedef ft_ptrdiff_t  FT_PtrDist;
 
@@ -367,13 +366,13 @@
    *   FT_Matrix
    *
    * @description:
-   *   A simple structure used to store a 2x2 matrix.  Coefficients are
-   *   in 16.16 fixed-point format.  The computation performed is:
+   *   A simple structure used to store a 2x2 matrix.  Coefficients are in
+   *   16.16 fixed-point format.  The computation performed is:
    *
-   *   {
+   *   ```
    *     x' = x*xx + y*xy
    *     y' = x*yx + y*yy
-   *   }
+   *   ```
    *
    * @fields:
    *   xx ::
@@ -425,13 +424,13 @@
    *   FT_Generic_Finalizer
    *
    * @description:
-   *   Describe a function used to destroy the `client' data of any
-   *   FreeType object.  See the description of the @FT_Generic type for
-   *   details of usage.
+   *   Describe a function used to destroy the 'client' data of any FreeType
+   *   object.  See the description of the @FT_Generic type for details of
+   *   usage.
    *
    * @input:
-   *   The address of the FreeType object that is under finalization.
-   *   Its client data is accessed through its `generic' field.
+   *   The address of the FreeType object that is under finalization.  Its
+   *   client data is accessed through its `generic` field.
    */
   typedef void  (*FT_Generic_Finalizer)( void*  object );
 
@@ -446,25 +445,24 @@
    *   variety of FreeType core objects.  For example, a text layout API
    *   might want to associate a glyph cache to a given size object.
    *
-   *   Some FreeType object contains a `generic' field, of type
-   *   FT_Generic, which usage is left to client applications and font
-   *   servers.
+   *   Some FreeType object contains a `generic` field, of type `FT_Generic`,
+   *   which usage is left to client applications and font servers.
    *
-   *   It can be used to store a pointer to client-specific data, as well
-   *   as the address of a `finalizer' function, which will be called by
+   *   It can be used to store a pointer to client-specific data, as well as
+   *   the address of a 'finalizer' function, which will be called by
    *   FreeType when the object is destroyed (for example, the previous
-   *   client example would put the address of the glyph cache destructor
-   *   in the `finalizer' field).
+   *   client example would put the address of the glyph cache destructor in
+   *   the `finalizer` field).
    *
    * @fields:
    *   data ::
-   *     A typeless pointer to any client-specified data. This
-   *     field is completely ignored by the FreeType library.
+   *     A typeless pointer to any client-specified data. This field is
+   *     completely ignored by the FreeType library.
    *
    *   finalizer ::
-   *     A pointer to a `generic finalizer' function, which
-   *     will be called when the object is destroyed.  If this
-   *     field is set to NULL, no code will be called.
+   *     A pointer to a 'generic finalizer' function, which will be called
+   *     when the object is destroyed.  If this field is set to `NULL`, no
+   *     code will be called.
    */
   typedef struct  FT_Generic_
   {
@@ -480,12 +478,12 @@
    *   FT_MAKE_TAG
    *
    * @description:
-   *   This macro converts four-letter tags that are used to label
-   *   TrueType tables into an unsigned long, to be used within FreeType.
+   *   This macro converts four-letter tags that are used to label TrueType
+   *   tables into an unsigned long, to be used within FreeType.
    *
    * @note:
-   *   The produced values *must* be 32-bit integers.  Don't redefine
-   *   this macro.
+   *   The produced values **must** be 32-bit integers.  Don't redefine this
+   *   macro.
    */
 #define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \
           (FT_Tag)                        \
@@ -518,9 +516,9 @@
    *   FT_ListNode
    *
    * @description:
-   *    Many elements and objects in FreeType are listed through an
-   *    @FT_List record (see @FT_ListRec).  As its name suggests, an
-   *    FT_ListNode is a handle to a single list element.
+   *    Many elements and objects in FreeType are listed through an @FT_List
+   *    record (see @FT_ListRec).  As its name suggests, an FT_ListNode is a
+   *    handle to a single list element.
    */
   typedef struct FT_ListNodeRec_*  FT_ListNode;
 
@@ -546,10 +544,10 @@
    *
    * @fields:
    *   prev ::
-   *     The previous element in the list.  NULL if first.
+   *     The previous element in the list.  `NULL` if first.
    *
    *   next ::
-   *     The next element in the list.  NULL if last.
+   *     The next element in the list.  `NULL` if last.
    *
    *   data ::
    *     A typeless pointer to the listed object.
@@ -569,8 +567,8 @@
    *   FT_ListRec
    *
    * @description:
-   *   A structure used to hold a simple doubly-linked list.  These are
-   *   used in many parts of FreeType.
+   *   A structure used to hold a simple doubly-linked list.  These are used
+   *   in many parts of FreeType.
    *
    * @fields:
    *   head ::
@@ -590,13 +588,13 @@
 
 
 #define FT_IS_EMPTY( list )  ( (list).head == 0 )
-#define FT_BOOL( x )  ( (FT_Bool)( x ) )
+#define FT_BOOL( x )  ( (FT_Bool)( (x) != 0 ) )
 
   /* concatenate C tokens */
 #define FT_ERR_XCAT( x, y )  x ## y
 #define FT_ERR_CAT( x, y )   FT_ERR_XCAT( x, y )
 
-  /* see `ftmoderr.h' for descriptions of the following macros */
+  /* see `ftmoderr.h` for descriptions of the following macros */
 
 #define FT_ERR( e )  FT_ERR_CAT( FT_ERR_PREFIX, e )
 
diff --git a/include/freetype/ftwinfnt.h b/include/freetype/ftwinfnt.h
index 5d0eb0f..a2fba90 100644
--- a/include/freetype/ftwinfnt.h
+++ b/include/freetype/ftwinfnt.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing Windows fnt-specific data.
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,26 +50,25 @@
    */
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   FT_WinFNT_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `charset' byte in
-   *   @FT_WinFNT_HeaderRec.  Exact mapping tables for the various cpXXXX
-   *   encodings (except for cp1361) can be found at
-   *   ftp://ftp.unicode.org/Public in the MAPPINGS/VENDORS/MICSFT/WINDOWS
-   *   subdirectory.  cp1361 is roughly a superset of
-   *   MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT.
+   *   A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. 
+   *   Exact mapping tables for the various 'cpXXXX' encodings (except for
+   *   'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the
+   *   `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory.  'cp1361' is roughly a
+   *   superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`.
    *
    * @values:
    *   FT_WinFNT_ID_DEFAULT ::
-   *     This is used for font enumeration and font creation as a
-   *     `don't care' value.  Valid font files don't contain this value.
-   *     When querying for information about the character set of the font
-   *     that is currently selected into a specified device context, this
-   *     return value (of the related Windows API) simply denotes failure.
+   *     This is used for font enumeration and font creation as a 'don't
+   *     care' value.  Valid font files don't contain this value.  When
+   *     querying for information about the character set of the font that is
+   *     currently selected into a specified device context, this return
+   *     value (of the related Windows API) simply denotes failure.
    *
    *   FT_WinFNT_ID_SYMBOL ::
    *     There is no known mapping table available.
@@ -80,26 +79,27 @@
    *   FT_WinFNT_ID_OEM ::
    *     From Michael Poettgen <michael@poettgen.de>:
    *
-   *     The `Windows Font Mapping' article says that FT_WinFNT_ID_OEM
-   *     is used for the charset of vector fonts, like `modern.fon',
-   *     `roman.fon', and `script.fon' on Windows.
+   *     The 'Windows Font Mapping' article says that `FT_WinFNT_ID_OEM` is
+   *     used for the charset of vector fonts, like `modern.fon`,
+   *     `roman.fon`, and `script.fon` on Windows.
    *
-   *     The `CreateFont' documentation says: The FT_WinFNT_ID_OEM value
+   *     The 'CreateFont' documentation says: The `FT_WinFNT_ID_OEM` value
    *     specifies a character set that is operating-system dependent.
    *
-   *     The `IFIMETRICS' documentation from the `Windows Driver
-   *     Development Kit' says: This font supports an OEM-specific
-   *     character set.  The OEM character set is system dependent.
+   *     The 'IFIMETRICS' documentation from the 'Windows Driver Development
+   *     Kit' says: This font supports an OEM-specific character set.  The
+   *     OEM character set is system dependent.
    *
-   *     In general OEM, as opposed to ANSI (i.e., cp1252), denotes the
-   *     second default codepage that most international versions of
-   *     Windows have.  It is one of the OEM codepages from
+   *     In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the
+   *     second default codepage that most international versions of Windows
+   *     have.  It is one of the OEM codepages from
    *
-   *     https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers ,
+   *     https://docs.microsoft.com/en-us/windows/desktop/intl/code-page-identifiers
+   *     ,
    *
-   *     and is used for the `DOS boxes', to support legacy applications.
-   *     A German Windows version for example usually uses ANSI codepage
-   *     1252 and OEM codepage 850.
+   *     and is used for the 'DOS boxes', to support legacy applications.  A
+   *     German Windows version for example usually uses ANSI codepage 1252
+   *     and OEM codepage 850.
    *
    *   FT_WinFNT_ID_CP874 ::
    *     A superset of Thai TIS 620 and ISO 8859-11.
@@ -112,8 +112,8 @@
    *     ordering and minor deviations).
    *
    *   FT_WinFNT_ID_CP949 ::
-   *     A superset of Korean Hangul KS~C 5601-1987 (with different
-   *     ordering and minor deviations).
+   *     A superset of Korean Hangul KS~C 5601-1987 (with different ordering
+   *     and minor deviations).
    *
    *   FT_WinFNT_ID_CP950 ::
    *     A superset of traditional Chinese Big~5 ETen (with different
@@ -234,7 +234,7 @@
   typedef struct FT_WinFNT_HeaderRec_*  FT_WinFNT_Header;
 
 
-  /**********************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_WinFNT_Header
diff --git a/include/freetype/internal/autohint.h b/include/freetype/internal/autohint.h
index c20a18e..f64c28b 100644
--- a/include/freetype/internal/autohint.h
+++ b/include/freetype/internal/autohint.h
@@ -2,9 +2,9 @@
  *
  * autohint.h
  *
- *   High-level `autohint' module-specific interface (specification).
+ *   High-level 'autohint' module-specific interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -30,31 +30,31 @@
 
   /**************************************************************************
    *
-   * A small technical note regarding automatic hinting in order to
-   * clarify this module interface.
+   * A small technical note regarding automatic hinting in order to clarify
+   * this module interface.
    *
    * An automatic hinter might compute two kinds of data for a given face:
    *
    * - global hints: Usually some metrics that describe global properties
    *                 of the face.  It is computed by scanning more or less
    *                 aggressively the glyphs in the face, and thus can be
-   *                 very slow to compute (even if the size of global
-   *                 hints is really small).
+   *                 very slow to compute (even if the size of global hints
+   *                 is really small).
    *
-   * - glyph hints:  These describe some important features of the glyph
+   * - glyph hints: These describe some important features of the glyph
    *                 outline, as well as how to align them.  They are
    *                 generally much faster to compute than global hints.
    *
-   * The current FreeType auto-hinter does a pretty good job while
-   * performing fast computations for both global and glyph hints.
-   * However, we might be interested in introducing more complex and
-   * powerful algorithms in the future, like the one described in the John
-   * D. Hobby paper, which unfortunately requires a lot more horsepower.
+   * The current FreeType auto-hinter does a pretty good job while performing
+   * fast computations for both global and glyph hints.  However, we might be
+   * interested in introducing more complex and powerful algorithms in the
+   * future, like the one described in the John D. Hobby paper, which
+   * unfortunately requires a lot more horsepower.
    *
    * Because a sufficiently sophisticated font management system would
-   * typically implement an LRU cache of opened face objects to reduce
-   * memory usage, it is a good idea to be able to avoid recomputing
-   * global hints every time the same face is re-opened.
+   * typically implement an LRU cache of opened face objects to reduce memory
+   * usage, it is a good idea to be able to avoid recomputing global hints
+   * every time the same face is re-opened.
    *
    * We thus provide the ability to cache global hints outside of the face
    * object, in order to speed up font re-opening time.  Of course, this
@@ -62,10 +62,10 @@
    * it.
    *
    * I initially thought that it would be a good idea to cache the glyph
-   * hints too.  However, my general idea now is that if you really need
-   * to cache these too, you are simply in need of a new font format,
-   * where all this information could be stored within the font file and
-   * decoded on the fly.
+   * hints too.  However, my general idea now is that if you really need to
+   * cache these too, you are simply in need of a new font format, where all
+   * this information could be stored within the font file and decoded on the
+   * fly.
    *
    */
 
@@ -87,8 +87,8 @@
    *
    * @description:
    *   Retrieve the global hints computed for a given face object.  The
-   *   resulting data is dissociated from the face and will survive a
-   *   call to FT_Done_Face().  It must be discarded through the API
+   *   resulting data is dissociated from the face and will survive a call to
+   *   FT_Done_Face().  It must be discarded through the API
    *   FT_AutoHinter_GlobalDoneFunc().
    *
    * @input:
@@ -119,8 +119,8 @@
    *
    * @description:
    *   Discard the global hints retrieved through
-   *   FT_AutoHinter_GlobalGetFunc().  This is the only way these hints
-   *   are freed from memory.
+   *   FT_AutoHinter_GlobalGetFunc().  This is the only way these hints are
+   *   freed from memory.
    *
    * @input:
    *   hinter ::
@@ -140,9 +140,9 @@
    *   FT_AutoHinter_GlobalResetFunc
    *
    * @description:
-   *   This function is used to recompute the global metrics in a given
-   *   font.  This is useful when global font data changes (e.g. Multiple
-   *   Masters fonts where blend coordinates change).
+   *   This function is used to recompute the global metrics in a given font.
+   *   This is useful when global font data changes (e.g. Multiple Masters
+   *   fonts where blend coordinates change).
    *
    * @input:
    *   hinter ::
@@ -162,8 +162,8 @@
    *   FT_AutoHinter_GlyphLoadFunc
    *
    * @description:
-   *   This function is used to load, scale, and automatically hint a
-   *   glyph from a given face.
+   *   This function is used to load, scale, and automatically hint a glyph
+   *   from a given face.
    *
    * @input:
    *   face ::
@@ -176,8 +176,8 @@
    *     The load flags.
    *
    * @note:
-   *   This function is capable of loading composite glyphs by hinting
-   *   each sub-glyph independently (which improves quality).
+   *   This function is capable of loading composite glyphs by hinting each
+   *   sub-glyph independently (which improves quality).
    *
    *   It will call the font driver with @FT_Load_Glyph, with
    *   @FT_LOAD_NO_SCALE set.
diff --git a/include/freetype/internal/cffotypes.h b/include/freetype/internal/cffotypes.h
index c01dba4..b26893e 100644
--- a/include/freetype/internal/cffotypes.h
+++ b/include/freetype/internal/cffotypes.h
@@ -4,7 +4,7 @@
  *
  *   Basic OpenType/CFF object type definitions (specification).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -76,7 +76,7 @@
    *   CFF_Internal
    *
    * @description:
-   *   The interface to the `internal' field of `FT_Size'.
+   *   The interface to the 'internal' field of `FT_Size`.
    */
   typedef struct  CFF_InternalRec_
   {
diff --git a/include/freetype/internal/cfftypes.h b/include/freetype/internal/cfftypes.h
index 534ee16..2fc905e 100644
--- a/include/freetype/internal/cfftypes.h
+++ b/include/freetype/internal/cfftypes.h
@@ -5,7 +5,7 @@
  *   Basic OpenType/CFF type definitions and interface (specification
  *   only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -46,8 +46,7 @@
    *     The source input stream.
    *
    *   start ::
-   *     The position of the first index byte in the
-   *     input stream.
+   *     The position of the first index byte in the input stream.
    *
    *   count ::
    *     The number of elements in the index.
@@ -56,15 +55,13 @@
    *     The size in bytes of object offsets in index.
    *
    *   data_offset ::
-   *     The position of first data byte in the index's
-   *     bytes.
+   *     The position of first data byte in the index's bytes.
    *
    *   data_size ::
    *     The size of the data table in this index.
    *
    *   offsets ::
-   *     A table of element offsets in the index.  Must be
-   *     loaded explicitly.
+   *     A table of element offsets in the index.  Must be loaded explicitly.
    *
    *   bytes ::
    *     If the index is loaded in memory, its bytes.
diff --git a/include/freetype/internal/ftcalc.h b/include/freetype/internal/ftcalc.h
index 733b674..1811fcd 100644
--- a/include/freetype/internal/ftcalc.h
+++ b/include/freetype/internal/ftcalc.h
@@ -4,7 +4,7 @@
  *
  *   Arithmetic computations (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -252,7 +252,7 @@
    *   FT_MulDiv_No_Round
    *
    * @description:
-   *   A very simple function used to perform the computation `(a*b)/c'
+   *   A very simple function used to perform the computation '(a*b)/c'
    *   (without rounding) with maximum accuracy (it uses a 64-bit
    *   intermediate integer whenever necessary).
    *
@@ -268,9 +268,9 @@
    *     The divisor.
    *
    * @return:
-   *   The result of `(a*b)/c'.  This function never traps when trying to
-   *   divide by zero; it simply returns `MaxInt' or `MinInt' depending
-   *   on the signs of `a' and `b'.
+   *   The result of '(a*b)/c'.  This function never traps when trying to
+   *   divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on
+   *   the signs of 'a' and 'b'.
    */
   FT_BASE( FT_Long )
   FT_MulDiv_No_Round( FT_Long  a,
@@ -279,12 +279,11 @@
 
 
   /*
-   * A variant of FT_Matrix_Multiply which scales its result afterwards.
-   * The idea is that both `a' and `b' are scaled by factors of 10 so that
-   * the values are as precise as possible to get a correct result during
-   * the 64bit multiplication.  Let `sa' and `sb' be the scaling factors of
-   * `a' and `b', respectively, then the scaling factor of the result is
-   * `sa*sb'.
+   * A variant of FT_Matrix_Multiply which scales its result afterwards.  The
+   * idea is that both `a' and `b' are scaled by factors of 10 so that the
+   * values are as precise as possible to get a correct result during the
+   * 64bit multiplication.  Let `sa' and `sb' be the scaling factors of `a'
+   * and `b', respectively, then the scaling factor of the result is `sa*sb'.
    */
   FT_BASE( void )
   FT_Matrix_Multiply_Scaled( const FT_Matrix*  a,
@@ -318,22 +317,22 @@
 
 
   /*
-   * This function normalizes a vector and returns its original length.
-   * The normalized vector is a 16.16 fixed-point unit vector with length
-   * close to 0x10000.  The accuracy of the returned length is limited to
-   * 16 bits also.  The function utilizes quick inverse square root
-   * approximation without divisions and square roots relying on Newton's
-   * iterations instead.
+   * This function normalizes a vector and returns its original length.  The
+   * normalized vector is a 16.16 fixed-point unit vector with length close
+   * to 0x10000.  The accuracy of the returned length is limited to 16 bits
+   * also.  The function utilizes quick inverse square root approximation
+   * without divisions and square roots relying on Newton's iterations
+   * instead.
    */
   FT_BASE( FT_UInt32 )
   FT_Vector_NormLen( FT_Vector*  vector );
 
 
   /*
-   * Return -1, 0, or +1, depending on the orientation of a given corner.
-   * We use the Cartesian coordinate system, with positive vertical values
-   * going upwards.  The function returns +1 if the corner turns to the
-   * left, -1 to the right, and 0 for undecidable cases.
+   * Return -1, 0, or +1, depending on the orientation of a given corner.  We
+   * use the Cartesian coordinate system, with positive vertical values going
+   * upwards.  The function returns +1 if the corner turns to the left, -1 to
+   * the right, and 0 for undecidable cases.
    */
   FT_BASE( FT_Int )
   ft_corner_orientation( FT_Pos  in_x,
@@ -379,6 +378,7 @@
 #if FT_SIZEOF_INT == 4
 
 #include <intrin.h>
+#pragma intrinsic( _BitScanReverse )
 
   static __inline FT_Int32
   FT_MSB_i386( FT_UInt32  x )
@@ -386,7 +386,6 @@
     unsigned long  where;
 
 
-    /* not available in older VC versions */
     _BitScanReverse( &where, x );
 
     return (FT_Int32)where;
@@ -433,7 +432,7 @@
    *     The value to compute the root for.
    *
    * @return:
-   *   The result of `sqrt(x)'.
+   *   The result of 'sqrt(x)'.
    *
    * @note:
    *   This function is not very fast.
@@ -489,6 +488,19 @@
 #define NEG_INT32( a )                                  \
           (FT_Int32)( (FT_UInt32)0 - (FT_UInt32)(a) )
 
+#ifdef FT_LONG64
+
+#define ADD_INT64( a, b )                               \
+          (FT_Int64)( (FT_UInt64)(a) + (FT_UInt64)(b) )
+#define SUB_INT64( a, b )                               \
+          (FT_Int64)( (FT_UInt64)(a) - (FT_UInt64)(b) )
+#define MUL_INT64( a, b )                               \
+          (FT_Int64)( (FT_UInt64)(a) * (FT_UInt64)(b) )
+#define NEG_INT64( a )                                  \
+          (FT_Int64)( (FT_UInt64)0 - (FT_UInt64)(a) )
+
+#endif /* FT_LONG64 */
+
 
 FT_END_HEADER
 
diff --git a/include/freetype/internal/ftdebug.h b/include/freetype/internal/ftdebug.h
index d6e8a3a..54a9673 100644
--- a/include/freetype/internal/ftdebug.h
+++ b/include/freetype/internal/ftdebug.h
@@ -4,7 +4,7 @@
  *
  *   Debugging and logging component (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -15,7 +15,7 @@
  *
  *
  * IMPORTANT: A description of FreeType's debugging support can be
- *             found in `docs/DEBUG.TXT'.  Read it if you need to use or
+ *             found in 'docs/DEBUG.TXT'.  Read it if you need to use or
  *             understand this code.
  *
  */
@@ -44,8 +44,8 @@
 
   /**************************************************************************
    *
-   * Define the trace enums as well as the trace levels array when they
-   * are needed.
+   * Define the trace enums as well as the trace levels array when they are
+   * needed.
    *
    */
 
@@ -84,11 +84,15 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
 
-#define FT_TRACE( level, varformat )                      \
-          do                                              \
-          {                                               \
-            if ( ft_trace_levels[FT_COMPONENT] >= level ) \
-              FT_Message varformat;                       \
+  /* we need two macros here to make cpp expand `FT_COMPONENT' */
+#define FT_TRACE_COMP( x )   FT_TRACE_COMP_( x )
+#define FT_TRACE_COMP_( x )  trace_ ## x
+
+#define FT_TRACE( level, varformat )                                       \
+          do                                                               \
+          {                                                                \
+            if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] >= level ) \
+              FT_Message varformat;                                        \
           } while ( 0 )
 
 #else /* !FT_DEBUG_LEVEL_TRACE */
@@ -111,8 +115,8 @@
    *   FT_DEBUG_LEVEL_TRACE definition.
    *
    * @note:
-   *   This function may be useful if you want to access elements of
-   *   the internal trace levels array by an index.
+   *   This function may be useful if you want to access elements of the
+   *   internal trace levels array by an index.
    */
   FT_BASE( FT_Int )
   FT_Trace_Get_Count( void );
@@ -131,8 +135,8 @@
    *
    * @return:
    *   The name of the trace component.  This is a statically allocated
-   *   C~string, so do not free it after use.  NULL if FreeType is not built
-   *   with FT_DEBUG_LEVEL_TRACE definition.
+   *   C~string, so do not free it after use.  `NULL` if FreeType is not
+   *   built with FT_DEBUG_LEVEL_TRACE definition.
    *
    * @note:
    *   Use @FT_Trace_Get_Count to get the number of available trace
@@ -209,8 +213,8 @@
 
   /**************************************************************************
    *
-   * Define the FT_ASSERT and FT_THROW macros.  The call to `FT_Throw'
-   * makes it possible to easily set a breakpoint at this function.
+   * Define the FT_ASSERT and FT_THROW macros.  The call to `FT_Throw` makes
+   * it possible to easily set a breakpoint at this function.
    *
    */
 
@@ -241,7 +245,7 @@
 
   /**************************************************************************
    *
-   * Define `FT_Message' and `FT_Panic' when needed.
+   * Define `FT_Message` and `FT_Panic` when needed.
    *
    */
 
diff --git a/include/freetype/internal/ftdrv.h b/include/freetype/internal/ftdrv.h
index 745b78a..09e846e 100644
--- a/include/freetype/internal/ftdrv.h
+++ b/include/freetype/internal/ftdrv.h
@@ -4,7 +4,7 @@
  *
  *   FreeType internal font driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -129,46 +129,37 @@
    *
    *
    *   load_glyph ::
-   *     A function handle to load a glyph to a slot.
-   *     This field is mandatory!
+   *     A function handle to load a glyph to a slot.  This field is
+   *     mandatory!
    *
    *   get_kerning ::
-   *     A function handle to return the unscaled
-   *     kerning for a given pair of glyphs.  Can be
-   *     set to 0 if the format doesn't support
-   *     kerning.
+   *     A function handle to return the unscaled kerning for a given pair of
+   *     glyphs.  Can be set to 0 if the format doesn't support kerning.
    *
    *   attach_file ::
-   *     This function handle is used to read
-   *     additional data for a face from another
-   *     file/stream.  For example, this can be used to
-   *     add data from AFM or PFM files on a Type 1
-   *     face, or a CIDMap on a CID-keyed face.
+   *     This function handle is used to read additional data for a face from
+   *     another file/stream.  For example, this can be used to add data from
+   *     AFM or PFM files on a Type 1 face, or a CIDMap on a CID-keyed face.
    *
    *   get_advances ::
-   *     A function handle used to return advance
-   *     widths of `count' glyphs (in font units),
-   *     starting at `first'.  The `vertical' flag must
-   *     be set to get vertical advance heights.  The
-   *     `advances' buffer is caller-allocated.
-   *     The idea of this function is to be able to
-   *     perform device-independent text layout without
-   *     loading a single glyph image.
+   *     A function handle used to return advance widths of 'count' glyphs
+   *     (in font units), starting at 'first'.  The 'vertical' flag must be
+   *     set to get vertical advance heights.  The 'advances' buffer is
+   *     caller-allocated.  The idea of this function is to be able to
+   *     perform device-independent text layout without loading a single
+   *     glyph image.
    *
    *   request_size ::
-   *     A handle to a function used to request the new
-   *     character size.  Can be set to 0 if the
-   *     scaling done in the base layer suffices.
+   *     A handle to a function used to request the new character size.  Can
+   *     be set to 0 if the scaling done in the base layer suffices.
    *
    *   select_size ::
-   *     A handle to a function used to select a new
-   *     fixed size.  It is used only if
-   *     @FT_FACE_FLAG_FIXED_SIZES is set.  Can be set
-   *     to 0 if the scaling done in the base layer
-   *     suffices.
+   *     A handle to a function used to select a new fixed size.  It is used
+   *     only if @FT_FACE_FLAG_FIXED_SIZES is set.  Can be set to 0 if the
+   *     scaling done in the base layer suffices.
    * @note:
-   *   Most function pointers, with the exception of `load_glyph', can be
-   *   set to 0 to indicate a default behaviour.
+   *   Most function pointers, with the exception of `load_glyph`, can be set
+   *   to 0 to indicate a default behaviour.
    */
   typedef struct  FT_Driver_ClassRec_
   {
@@ -206,8 +197,8 @@
    *   FT_DECLARE_DRIVER
    *
    * @description:
-   *   Used to create a forward declaration of an FT_Driver_ClassRec
-   *   struct instance.
+   *   Used to create a forward declaration of an FT_Driver_ClassRec struct
+   *   instance.
    *
    * @macro:
    *   FT_DEFINE_DRIVER
@@ -215,12 +206,12 @@
    * @description:
    *   Used to initialize an instance of FT_Driver_ClassRec struct.
    *
-   *   `ftinit.c' (ft_create_default_module_classes) already contains a
-   *   mechanism to call these functions for the default modules
-   *   described in `ftmodule.h'.
+   *   `ftinit.c` (ft_create_default_module_classes) already contains a
+   *   mechanism to call these functions for the default modules described in
+   *   `ftmodule.h`.
    *
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   The struct will be allocated in the global scope (or the scope where
+   *   the macro is used).
    */
 #define FT_DECLARE_DRIVER( class_ )  \
   FT_CALLBACK_TABLE                  \
diff --git a/include/freetype/internal/ftgloadr.h b/include/freetype/internal/ftgloadr.h
index c731b2d..770871d 100644
--- a/include/freetype/internal/ftgloadr.h
+++ b/include/freetype/internal/ftgloadr.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph loader (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
@@ -138,11 +138,6 @@
   FT_BASE( void )
   FT_GlyphLoader_Add( FT_GlyphLoader  loader );
 
-  /* copy points from one glyph loader to another */
-  FT_BASE( FT_Error )
-  FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
-                             FT_GlyphLoader  source );
-
  /* */
 
 
diff --git a/include/freetype/internal/ftmemory.h b/include/freetype/internal/ftmemory.h
index f15c77d..78bd3bc 100644
--- a/include/freetype/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType memory management macros (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
@@ -34,7 +34,7 @@
    *   FT_SET_ERROR
    *
    * @description:
-   *   This macro is used to set an implicit `error' variable to a given
+   *   This macro is used to set an implicit 'error' variable to a given
    *   expression's value (usually a function call), and convert it to a
    *   boolean which is set whenever the value is != 0.
    */
@@ -59,8 +59,8 @@
 
   /*
    * C++ refuses to handle statements like p = (void*)anything, with `p' a
-   * typed pointer.  Since we don't have a `typeof' operator in standard
-   * C++, we have to use a template to emulate it.
+   * typed pointer.  Since we don't have a `typeof' operator in standard C++,
+   * we have to use a template to emulate it.
    */
 
 #ifdef __cplusplus
@@ -107,8 +107,8 @@
 
 
   /*
-   * The allocation functions return a pointer, and the error code
-   * is written to through the `p_error' parameter.
+   * The allocation functions return a pointer, and the error code is written
+   * to through the `p_error' parameter.
    */
 
   /* The `q' variants of the functions below (`q' for `quick') don't fill */
@@ -253,9 +253,8 @@
 
 
   /*
-   * Return the maximum number of addressable elements in an array.
-   * We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
-   * any problems.
+   * Return the maximum number of addressable elements in an array.  We limit
+   * ourselves to INT_MAX, rather than UINT_MAX, to avoid any problems.
    */
 #define FT_ARRAY_MAX( ptr )           ( FT_INT_MAX / sizeof ( *(ptr) ) )
 
diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h
index 88ced18..0c1d3e5 100644
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType private base classes (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -73,9 +73,9 @@
 #define FT_ABS( a )     ( (a) < 0 ? -(a) : (a) )
 
   /*
-   * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min'
-   * algorithm.  We use alpha = 1, beta = 3/8, giving us results with a
-   * largest error less than 7% compared to the exact value.
+   * Approximate sqrt(x*x+y*y) using the `alpha max plus beta min' algorithm.
+   * We use alpha = 1, beta = 3/8, giving us results with a largest error
+   * less than 7% compared to the exact value.
    */
 #define FT_HYPOT( x, y )                 \
           ( x = FT_ABS( x ),             \
@@ -110,9 +110,8 @@
 
 
   /*
-   * character classification functions -- since these are used to parse
-   * font files, we must not use those in <ctypes.h> which are
-   * locale-dependent
+   * character classification functions -- since these are used to parse font
+   * files, we must not use those in <ctypes.h> which are locale-dependent
    */
 #define  ft_isdigit( x )   ( ( (unsigned)(x) - '0' ) < 10U )
 
@@ -186,7 +185,7 @@
                                FT_UInt32  char_code,
                                FT_UInt32  variant_selector );
 
-  typedef FT_Bool
+  typedef FT_Int
   (*FT_CMap_CharVarIsDefaultFunc)( FT_CMap    cmap,
                                    FT_UInt32  char_code,
                                    FT_UInt32  variant_selector );
@@ -279,14 +278,12 @@
 #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
 
   typedef void  (*FT_Bitmap_LcdFilterFunc)( FT_Bitmap*      bitmap,
-                                            FT_Render_Mode  render_mode,
                                             FT_Byte*        weights );
 
 
   /* This is the default LCD filter, an in-place, 5-tap FIR filter. */
   FT_BASE( void )
   ft_lcd_filter_fir( FT_Bitmap*           bitmap,
-                     FT_Render_Mode       mode,
                      FT_LcdFiveTapFilter  weights );
 
 #endif /* FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -297,67 +294,65 @@
    *   FT_Face_InternalRec
    *
    * @description:
-   *   This structure contains the internal fields of each FT_Face
-   *   object.  These fields may change between different releases of
-   *   FreeType.
+   *   This structure contains the internal fields of each FT_Face object.
+   *   These fields may change between different releases of FreeType.
    *
    * @fields:
    *   max_points ::
-   *     The maximum number of points used to store the vectorial outline
+   *     The maximum number of points used to store the vectorial outline of
+   *     any glyph in this face.  If this value cannot be known in advance,
+   *     or if the face isn't scalable, this should be set to 0.  Only
+   *     relevant for scalable formats.
+   *
+   *   max_contours ::
+   *     The maximum number of contours used to store the vectorial outline
    *     of any glyph in this face.  If this value cannot be known in
    *     advance, or if the face isn't scalable, this should be set to 0.
    *     Only relevant for scalable formats.
    *
-   *   max_contours ::
-   *     The maximum number of contours used to store the vectorial
-   *     outline of any glyph in this face.  If this value cannot be
-   *     known in advance, or if the face isn't scalable, this should be
-   *     set to 0.  Only relevant for scalable formats.
-   *
    *   transform_matrix ::
-   *     A 2x2 matrix of 16.16 coefficients used to transform glyph
-   *     outlines after they are loaded from the font.  Only used by the
-   *     convenience functions.
+   *     A 2x2 matrix of 16.16 coefficients used to transform glyph outlines
+   *     after they are loaded from the font.  Only used by the convenience
+   *     functions.
    *
    *   transform_delta ::
-   *     A translation vector used to transform glyph outlines after they
-   *     are loaded from the font.  Only used by the convenience
-   *     functions.
+   *     A translation vector used to transform glyph outlines after they are
+   *     loaded from the font.  Only used by the convenience functions.
    *
    *   transform_flags ::
    *     Some flags used to classify the transform.  Only used by the
    *     convenience functions.
    *
    *   services ::
-   *     A cache for frequently used services.  It should be only
-   *     accessed with the macro `FT_FACE_LOOKUP_SERVICE'.
+   *     A cache for frequently used services.  It should be only accessed
+   *     with the macro `FT_FACE_LOOKUP_SERVICE`.
    *
    *   incremental_interface ::
-   *     If non-null, the interface through which glyph data and metrics
-   *     are loaded incrementally for faces that do not provide all of
-   *     this data when first opened.  This field exists only if
+   *     If non-null, the interface through which glyph data and metrics are
+   *     loaded incrementally for faces that do not provide all of this data
+   *     when first opened.  This field exists only if
    *     @FT_CONFIG_OPTION_INCREMENTAL is defined.
    *
    *   no_stem_darkening ::
-   *     Overrides the module-level default, see @stem-darkening[cff],
-   *     for example.  FALSE and TRUE toggle stem darkening on and off,
+   *     Overrides the module-level default, see @stem-darkening[cff], for
+   *     example.  FALSE and TRUE toggle stem darkening on and off,
    *     respectively, value~-1 means to use the module/driver default.
    *
    *   random_seed ::
-   *     If positive, override the seed value for the CFF `random'
-   *     operator.  Value~0 means to use the font's value.  Value~-1
-   *     means to use the CFF driver's default.
+   *     If positive, override the seed value for the CFF 'random' operator.
+   *     Value~0 means to use the font's value.  Value~-1 means to use the
+   *     CFF driver's default.
    *
    *   lcd_weights ::
    *   lcd_filter_func ::
-   *     These fields specify the LCD filtering weights and callback
-   *     function for ClearType-style subpixel rendering.
+   *     These fields specify the LCD filtering weights and callback function
+   *     for ClearType-style subpixel rendering.
    *
    *   refcount ::
    *     A counter initialized to~1 at the time an @FT_Face structure is
    *     created.  @FT_Reference_Face increments this counter, and
-   *     @FT_Done_Face only destroys a face if the counter is~1,
-   *     otherwise it simply decrements it.
+   *     @FT_Done_Face only destroys a face if the counter is~1, otherwise it
+   *     simply decrements it.
    */
   typedef struct  FT_Face_InternalRec_
   {
@@ -396,29 +391,24 @@
    *
    * @fields:
    *   loader ::
-   *     The glyph loader object used to load outlines
-   *     into the glyph slot.
+   *     The glyph loader object used to load outlines into the glyph slot.
    *
    *   flags ::
-   *     Possible values are zero or
-   *     FT_GLYPH_OWN_BITMAP.  The latter indicates
-   *     that the FT_GlyphSlot structure owns the
-   *     bitmap buffer.
+   *     Possible values are zero or FT_GLYPH_OWN_BITMAP.  The latter
+   *     indicates that the FT_GlyphSlot structure owns the bitmap buffer.
    *
    *   glyph_transformed ::
-   *     Boolean.  Set to TRUE when the loaded glyph
-   *     must be transformed through a specific
-   *     font transformation.  This is _not_ the same
-   *     as the face transform set through
-   *     FT_Set_Transform().
+   *     Boolean.  Set to TRUE when the loaded glyph must be transformed
+   *     through a specific font transformation.  This is _not_ the same as
+   *     the face transform set through FT_Set_Transform().
    *
    *   glyph_matrix ::
-   *     The 2x2 matrix corresponding to the glyph
-   *     transformation, if necessary.
+   *     The 2x2 matrix corresponding to the glyph transformation, if
+   *     necessary.
    *
    *   glyph_delta ::
-   *     The 2d translation vector corresponding to
-   *     the glyph transformation, if necessary.
+   *     The 2d translation vector corresponding to the glyph transformation,
+   *     if necessary.
    *
    *   glyph_hints ::
    *     Format-specific glyph hints management.
@@ -450,8 +440,7 @@
    *   FT_Size_InternalRec
    *
    * @description:
-   *   This structure contains the internal fields of each FT_Size
-   *   object.
+   *   This structure contains the internal fields of each FT_Size object.
    *
    * @fields:
    *   module_data ::
@@ -568,8 +557,8 @@
    *   A module-specific interface if available, 0 otherwise.
    *
    * @note:
-   *   You should better be familiar with FreeType internals to know
-   *   which module to look for, and what its interface is :-)
+   *   You should better be familiar with FreeType internals to know which
+   *   module to look for, and what its interface is :-)
    */
   FT_BASE( const void* )
   FT_Get_Module_Interface( FT_Library   library,
@@ -627,10 +616,9 @@
    *   FT_New_GlyphSlot
    *
    * @description:
-   *   It is sometimes useful to have more than one glyph slot for a
-   *   given face object.  This function is used to create additional
-   *   slots.  All of them are automatically discarded when the face is
-   *   destroyed.
+   *   It is sometimes useful to have more than one glyph slot for a given
+   *   face object.  This function is used to create additional slots.  All
+   *   of them are automatically discarded when the face is destroyed.
    *
    * @input:
    *   face ::
@@ -655,8 +643,8 @@
    *
    * @description:
    *   Destroys a given glyph slot.  Remember however that all slots are
-   *   automatically destroyed with its parent.  Using this function is
-   *   not always mandatory.
+   *   automatically destroyed with its parent.  Using this function is not
+   *   always mandatory.
    *
    * @input:
    *   slot ::
@@ -711,8 +699,9 @@
   ft_glyphslot_free_bitmap( FT_GlyphSlot  slot );
 
 
-  /* Preset bitmap metrics of an outline glyphslot prior to rendering. */
-  FT_BASE( void )
+  /* Preset bitmap metrics of an outline glyphslot prior to rendering */
+  /* and check whether the truncated bbox is too large for rendering. */
+  FT_BASE( FT_Bool )
   ft_glyphslot_preset_bitmap( FT_GlyphSlot      slot,
                               FT_Render_Mode    mode,
                               const FT_Vector*  origin );
@@ -789,25 +778,23 @@
    *   FT_DriverRec
    *
    * @description:
-   *   The root font driver class.  A font driver is responsible for
-   *   managing and loading font files of a given format.
+   *   The root font driver class.  A font driver is responsible for managing
+   *   and loading font files of a given format.
    *
    * @fields:
    *   root ::
    *     Contains the fields of the root module class.
    *
    *   clazz ::
-   *     A pointer to the font driver's class.  Note that
-   *     this is NOT root.clazz.  `class' wasn't used
-   *     as it is a reserved word in C++.
+   *     A pointer to the font driver's class.  Note that this is NOT
+   *     root.clazz.  'class' wasn't used as it is a reserved word in C++.
    *
    *   faces_list ::
-   *     The list of faces currently opened by this
-   *     driver.
+   *     The list of faces currently opened by this driver.
    *
    *   glyph_loader ::
-   *     Unused.  Used to be glyph loader for all faces
-   *     managed by this driver.
+   *     Unused.  Used to be glyph loader for all faces managed by this
+   *     driver.
    */
   typedef struct  FT_DriverRec_
   {
@@ -832,25 +819,19 @@
   /*************************************************************************/
 
 
-  /* This hook is used by the TrueType debugger.  It must be set to an */
-  /* alternate truetype bytecode interpreter function.                 */
-#define FT_DEBUG_HOOK_TRUETYPE  0
-
-
   /**************************************************************************
    *
    * @struct:
    *   FT_LibraryRec
    *
    * @description:
-   *   The FreeType library class.  This is the root of all FreeType
-   *   data.  Use FT_New_Library() to create a library object, and
-   *   FT_Done_Library() to discard it and all child objects.
+   *   The FreeType library class.  This is the root of all FreeType data.
+   *   Use FT_New_Library() to create a library object, and FT_Done_Library()
+   *   to discard it and all child objects.
    *
    * @fields:
    *   memory ::
-   *     The library's memory object.  Manages memory
-   *     allocation.
+   *     The library's memory object.  Manages memory allocation.
    *
    *   version_major ::
    *     The major version number of the library.
@@ -862,60 +843,52 @@
    *     The current patch level of the library.
    *
    *   num_modules ::
-   *     The number of modules currently registered
-   *     within this library.  This is set to 0 for new
-   *     libraries.  New modules are added through the
-   *     FT_Add_Module() API function.
+   *     The number of modules currently registered within this library.
+   *     This is set to 0 for new libraries.  New modules are added through
+   *     the FT_Add_Module() API function.
    *
    *   modules ::
-   *     A table used to store handles to the currently
-   *     registered modules. Note that each font driver
-   *     contains a list of its opened faces.
+   *     A table used to store handles to the currently registered
+   *     modules. Note that each font driver contains a list of its opened
+   *     faces.
    *
    *   renderers ::
-   *     The list of renderers currently registered
-   *     within the library.
+   *     The list of renderers currently registered within the library.
    *
    *   cur_renderer ::
-   *     The current outline renderer.  This is a
-   *     shortcut used to avoid parsing the list on
-   *     each call to FT_Outline_Render().  It is a
-   *     handle to the current renderer for the
-   *     FT_GLYPH_FORMAT_OUTLINE format.
+   *     The current outline renderer.  This is a shortcut used to avoid
+   *     parsing the list on each call to FT_Outline_Render().  It is a
+   *     handle to the current renderer for the FT_GLYPH_FORMAT_OUTLINE
+   *     format.
    *
    *   auto_hinter ::
    *     The auto-hinter module interface.
    *
    *   debug_hooks ::
-   *     An array of four function pointers that allow
-   *     debuggers to hook into a font format's
-   *     interpreter.  Currently, only the TrueType
-   *     bytecode debugger uses this.
+   *     An array of four function pointers that allow debuggers to hook into
+   *     a font format's interpreter.  Currently, only the TrueType bytecode
+   *     debugger uses this.
    *
    *   lcd_weights ::
-   *     The LCD filter weights for ClearType-style
-   *     subpixel rendering.
+   *     The LCD filter weights for ClearType-style subpixel rendering.
    *
    *   lcd_filter_func ::
-   *     The LCD filtering callback function for
-   *     for ClearType-style subpixel rendering.
+   *     The LCD filtering callback function for for ClearType-style subpixel
+   *     rendering.
    *
    *   lcd_geometry ::
-   *     This array specifies LCD subpixel geometry
-   *     and controls Harmony LCD rendering technique,
-   *     alternative to ClearType.
+   *     This array specifies LCD subpixel geometry and controls Harmony LCD
+   *     rendering technique, alternative to ClearType.
    *
    *   pic_container ::
-   *     Contains global structs and tables, instead
-   *     of defining them globally.
+   *     Contains global structs and tables, instead of defining them
+   *     globally.
    *
    *   refcount ::
-   *     A counter initialized to~1 at the time an
-   *     @FT_Library structure is created.
-   *     @FT_Reference_Library increments this counter,
-   *     and @FT_Done_Library only destroys a library
-   *     if the counter is~1, otherwise it simply
-   *     decrements it.
+   *     A counter initialized to~1 at the time an @FT_Library structure is
+   *     created.  @FT_Reference_Library increments this counter, and
+   *     @FT_Done_Library only destroys a library if the counter is~1,
+   *     otherwise it simply decrements it.
    */
   typedef struct  FT_LibraryRec_
   {
@@ -966,8 +939,8 @@
                                FT_UInt     buffer_max );
 
   typedef FT_UInt
-  (*FT_Face_GetGlyphNameIndexFunc)( FT_Face     face,
-                                    FT_String*  glyph_name );
+  (*FT_Face_GetGlyphNameIndexFunc)( FT_Face           face,
+                                    const FT_String*  glyph_name );
 
 
 #ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM
@@ -1022,9 +995,9 @@
    *   FT_DEFINE_OUTLINE_FUNCS
    *
    * @description:
-   *   Used to initialize an instance of FT_Outline_Funcs struct.
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   Used to initialize an instance of FT_Outline_Funcs struct.  The struct
+   *   will be allocated in the global scope (or the scope where the macro is
+   *   used).
    */
 #define FT_DEFINE_OUTLINE_FUNCS(           \
           class_,                          \
@@ -1051,9 +1024,9 @@
    *   FT_DEFINE_RASTER_FUNCS
    *
    * @description:
-   *   Used to initialize an instance of FT_Raster_Funcs struct.
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   Used to initialize an instance of FT_Raster_Funcs struct.  The struct
+   *   will be allocated in the global scope (or the scope where the macro is
+   *   used).
    */
 #define FT_DEFINE_RASTER_FUNCS(    \
           class_,                  \
@@ -1081,8 +1054,8 @@
    *   FT_DEFINE_GLYPH
    *
    * @description:
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   The struct will be allocated in the global scope (or the scope where
+   *   the macro is used).
    */
 #define FT_DEFINE_GLYPH(          \
           class_,                 \
@@ -1114,8 +1087,8 @@
    *   FT_DECLARE_RENDERER
    *
    * @description:
-   *   Used to create a forward declaration of a
-   *   FT_Renderer_Class struct instance.
+   *   Used to create a forward declaration of a FT_Renderer_Class struct
+   *   instance.
    *
    * @macro:
    *   FT_DEFINE_RENDERER
@@ -1123,8 +1096,8 @@
    * @description:
    *   Used to initialize an instance of FT_Renderer_Class struct.
    *
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   The struct will be allocated in the global scope (or the scope where
+   *   the macro is used).
    */
 #define FT_DECLARE_RENDERER( class_ )               \
   FT_EXPORT_VAR( const FT_Renderer_Class ) class_;
@@ -1175,8 +1148,8 @@
    *   FT_DECLARE_MODULE
    *
    * @description:
-   *   Used to create a forward declaration of a
-   *   FT_Module_Class struct instance.
+   *   Used to create a forward declaration of a FT_Module_Class struct
+   *   instance.
    *
    * @macro:
    *   FT_DEFINE_MODULE
@@ -1184,16 +1157,16 @@
    * @description:
    *   Used to initialize an instance of an FT_Module_Class struct.
    *
-   *   The struct will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   The struct will be allocated in the global scope (or the scope where
+   *   the macro is used).
    *
    * @macro:
    *   FT_DEFINE_ROOT_MODULE
    *
    * @description:
    *   Used to initialize an instance of an FT_Module_Class struct inside
-   *   another struct that contains it or in a function that initializes
-   *   that containing struct.
+   *   another struct that contains it or in a function that initializes that
+   *   containing struct.
    */
 #define FT_DECLARE_MODULE( class_ )  \
   FT_CALLBACK_TABLE                  \
diff --git a/include/freetype/internal/ftpsprop.h b/include/freetype/internal/ftpsprop.h
index dd0588f..574837f 100644
--- a/include/freetype/internal/ftpsprop.h
+++ b/include/freetype/internal/ftpsprop.h
@@ -4,7 +4,7 @@
  *
  *   Get and set properties of PostScript drivers (specification).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/ftrfork.h b/include/freetype/internal/ftrfork.h
index a056171..75b3e53 100644
--- a/include/freetype/internal/ftrfork.h
+++ b/include/freetype/internal/ftrfork.h
@@ -4,7 +4,7 @@
  *
  *   Embedded resource forks accessor (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO and Redhat K.K.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -72,8 +72,8 @@
   } FT_RFork_Rule;
 
   /* For fast translation between rule index and rule type,
-   * the macros FT_RFORK_xxx should be kept consistent with
-   * the raccess_guess_funcs table
+   * the macros FT_RFORK_xxx should be kept consistent with the
+   * raccess_guess_funcs table
    */
   typedef struct ft_raccess_guess_rec_ {
     ft_raccess_guess_func  func;
@@ -98,11 +98,11 @@
    *   FT_Raccess_Guess
    *
    * @description:
-   *   Guess a file name and offset where the actual resource fork is
-   *   stored.  The macro FT_RACCESS_N_RULES holds the number of
-   *   guessing rules;  the guessed result for the Nth rule is
-   *   represented as a triplet: a new file name (new_names[N]), a file
-   *   offset (offsets[N]), and an error code (errors[N]).
+   *   Guess a file name and offset where the actual resource fork is stored.
+   *   The macro FT_RACCESS_N_RULES holds the number of guessing rules; the
+   *   guessed result for the Nth rule is represented as a triplet: a new
+   *   file name (new_names[N]), a file offset (offsets[N]), and an error
+   *   code (errors[N]).
    *
    * @input:
    *   library ::
@@ -112,24 +112,24 @@
    *     A file stream containing the resource fork.
    *
    *   base_name ::
-   *     The (base) file name of the resource fork used for some
-   *     guessing rules.
+   *     The (base) file name of the resource fork used for some guessing
+   *     rules.
    *
    * @output:
    *   new_names ::
    *     An array of guessed file names in which the resource forks may
-   *     exist.  If `new_names[N]' is NULL, the guessed file name is
-   *     equal to `base_name'.
+   *     exist.  If 'new_names[N]' is `NULL`, the guessed file name is equal
+   *     to `base_name`.
    *
    *   offsets ::
-   *     An array of guessed file offsets.  `offsets[N]' holds the file
+   *     An array of guessed file offsets.  'offsets[N]' holds the file
    *     offset of the possible start of the resource fork in file
-   *     `new_names[N]'.
+   *     'new_names[N]'.
    *
    *   errors ::
-   *     An array of FreeType error codes.  `errors[N]' is the error
-   *     code of Nth guessing rule function.  If `errors[N]' is not
-   *     FT_Err_Ok, `new_names[N]' and `offsets[N]' are meaningless.
+   *     An array of FreeType error codes.  'errors[N]' is the error code of
+   *     Nth guessing rule function.  If 'errors[N]' is not FT_Err_Ok,
+   *     'new_names[N]' and 'offsets[N]' are meaningless.
    */
   FT_BASE( void )
   FT_Raccess_Guess( FT_Library  library,
@@ -146,10 +146,10 @@
    *   FT_Raccess_Get_HeaderInfo
    *
    * @description:
-   *   Get the information from the header of resource fork.  The
-   *   information includes the file offset where the resource map
-   *   starts, and the file offset where the resource data starts.
-   *   `FT_Raccess_Get_DataOffsets' requires these two data.
+   *   Get the information from the header of resource fork.  The information
+   *   includes the file offset where the resource map starts, and the file
+   *   offset where the resource data starts.  `FT_Raccess_Get_DataOffsets`
+   *   requires these two data.
    *
    * @input:
    *   library ::
@@ -185,9 +185,9 @@
    *   FT_Raccess_Get_DataOffsets
    *
    * @description:
-   *   Get the data offsets for a tag in a resource fork.  Offsets are
-   *   stored in an array because, in some cases, resources in a resource
-   *   fork have the same tag.
+   *   Get the data offsets for a tag in a resource fork.  Offsets are stored
+   *   in an array because, in some cases, resources in a resource fork have
+   *   the same tag.
    *
    * @input:
    *   library ::
@@ -206,17 +206,16 @@
    *     The resource tag.
    *
    *   sort_by_res_id ::
-   *     A Boolean to sort the fragmented resource by their ids.
-   *     The fragmented resources for `POST' resource should be sorted
-   *     to restore Type1 font properly.  For `sfnt' resources, sorting
-   *     may induce a different order of the faces in comparison to that
-   *     by QuickDraw API.
+   *     A Boolean to sort the fragmented resource by their ids.  The
+   *     fragmented resources for 'POST' resource should be sorted to restore
+   *     Type1 font properly.  For 'sfnt' resources, sorting may induce a
+   *     different order of the faces in comparison to that by QuickDraw API.
    *
    * @output:
    *   offsets ::
-   *     The stream offsets for the resource data specified by `tag'.
-   *     This array is allocated by the function, so you have to call
-   *     @ft_mem_free after use.
+   *     The stream offsets for the resource data specified by 'tag'.  This
+   *     array is allocated by the function, so you have to call @ft_mem_free
+   *     after use.
    *
    *   count ::
    *     The length of offsets array.
@@ -225,8 +224,8 @@
    *   FreeType error code.  FT_Err_Ok means success.
    *
    * @note:
-   *   Normally you should use `FT_Raccess_Get_HeaderInfo' to get the
-   *   value for `map_offset' and `rdata_pos'.
+   *   Normally you should use `FT_Raccess_Get_HeaderInfo` to get the value
+   *   for `map_offset` and `rdata_pos`.
    */
   FT_BASE( FT_Error )
   FT_Raccess_Get_DataOffsets( FT_Library  library,
diff --git a/include/freetype/internal/ftserv.h b/include/freetype/internal/ftserv.h
index 3f493b5..8836cf3 100644
--- a/include/freetype/internal/ftserv.h
+++ b/include/freetype/internal/ftserv.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType services (specification only).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -17,13 +17,13 @@
 
   /**************************************************************************
    *
-   * Each module can export one or more `services'.  Each service is
+   * Each module can export one or more 'services'.  Each service is
    * identified by a constant string and modeled by a pointer; the latter
    * generally corresponds to a structure containing function pointers.
    *
-   * Note that a service's data cannot be a mere function pointer because
-   * in C it is possible that function pointers might be implemented
-   * differently than data pointers (e.g. 48 bits instead of 32).
+   * Note that a service's data cannot be a mere function pointer because in
+   * C it is possible that function pointers might be implemented differently
+   * than data pointers (e.g. 48 bits instead of 32).
    *
    */
 
@@ -47,15 +47,15 @@
    *     The source face handle.
    *
    *   id ::
-   *     A string describing the service as defined in the service's
-   *     header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
-   *     `multi-masters').  It is automatically prefixed with
-   *     `FT_SERVICE_ID_'.
+   *     A string describing the service as defined in the service's header
+   *     files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
+   *     'multi-masters').  It is automatically prefixed with
+   *     `FT_SERVICE_ID_`.
    *
    * @output:
    *   ptr ::
-   *     A variable that receives the service pointer.  Will be NULL
-   *     if not found.
+   *     A variable that receives the service pointer.  Will be `NULL` if not
+   *     found.
    */
 #ifdef __cplusplus
 
@@ -99,15 +99,15 @@
    *     The source face handle.
    *
    *   id ::
-   *     A string describing the service as defined in the service's
-   *     header files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
-   *     `multi-masters').  It is automatically prefixed with
-   *     `FT_SERVICE_ID_'.
+   *     A string describing the service as defined in the service's header
+   *     files (e.g. FT_SERVICE_ID_MULTI_MASTERS which expands to
+   *     'multi-masters').  It is automatically prefixed with
+   *     `FT_SERVICE_ID_`.
    *
    * @output:
    *   ptr ::
-   *     A variable that receives the service pointer.  Will be NULL
-   *     if not found.
+   *     A variable that receives the service pointer.  Will be `NULL` if not
+   *     found.
    */
 #ifdef __cplusplus
 
@@ -146,8 +146,8 @@
   /*************************************************************************/
 
   /*
-   * The following structure is used to _describe_ a given service
-   * to the library.  This is useful to build simple static service lists.
+   * The following structure is used to _describe_ a given service to the
+   * library.  This is useful to build simple static service lists.
    */
   typedef struct  FT_ServiceDescRec_
   {
@@ -176,8 +176,8 @@
    * @description:
    *   Used to initialize an array of FT_ServiceDescRec structures.
    *
-   *   The array will be allocated in the global scope (or the scope
-   *   where the macro is used).
+   *   The array will be allocated in the global scope (or the scope where
+   *   the macro is used).
    */
 #define FT_DEFINE_SERVICEDESCREC1( class_,                                  \
                                    serv_id_1, serv_data_1 )                 \
@@ -351,13 +351,13 @@
 
 
   /*
-   * Parse a list of FT_ServiceDescRec descriptors and look for
-   * a specific service by ID.  Note that the last element in the
-   * array must be { NULL, NULL }, and that the function should
-   * return NULL if the service isn't available.
+   * Parse a list of FT_ServiceDescRec descriptors and look for a specific
+   * service by ID.  Note that the last element in the array must be { NULL,
+   * NULL }, and that the function should return NULL if the service isn't
+   * available.
    *
-   * This function can be used by modules to implement their
-   * `get_service' method.
+   * This function can be used by modules to implement their `get_service'
+   * method.
    */
   FT_BASE( FT_Pointer )
   ft_service_list_lookup( FT_ServiceDesc  service_descriptors,
@@ -374,14 +374,14 @@
 
   /*
    * This structure is used to store a cache for several frequently used
-   * services.  It is the type of `face->internal->services'.  You
-   * should only use FT_FACE_LOOKUP_SERVICE to access it.
+   * services.  It is the type of `face->internal->services'.  You should
+   * only use FT_FACE_LOOKUP_SERVICE to access it.
    *
    * All fields should have the type FT_Pointer to relax compilation
    * dependencies.  We assume the developer isn't completely stupid.
    *
-   * Each field must be named `service_XXXX' where `XXX' corresponds to
-   * the correct FT_SERVICE_ID_XXXX macro.  See the definition of
+   * Each field must be named `service_XXXX' where `XXX' corresponds to the
+   * correct FT_SERVICE_ID_XXXX macro.  See the definition of
    * FT_FACE_LOOKUP_SERVICE below how this is implemented.
    *
    */
@@ -426,7 +426,7 @@
    *
    * @output:
    *   ptr ::
-   *     A variable receiving the service data.  NULL if not available.
+   *     A variable receiving the service data.  `NULL` if not available.
    */
 #ifdef __cplusplus
 
diff --git a/include/freetype/internal/ftstream.h b/include/freetype/internal/ftstream.h
index aaf8e0b..a579a03 100644
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -4,7 +4,7 @@
  *
  *   Stream handling (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -96,13 +96,13 @@
   /* The structure type must be set in the FT_STRUCTURE macro before       */
   /* calling the FT_FRAME_START() macro.                                   */
   /*                                                                       */
-#define FT_FIELD_SIZE( f ) \
+#define FT_FIELD_SIZE( f )                          \
           (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f )
 
-#define FT_FIELD_SIZE_DELTA( f ) \
+#define FT_FIELD_SIZE_DELTA( f )                       \
           (FT_Byte)sizeof ( ((FT_STRUCTURE*)0)->f[0] )
 
-#define FT_FIELD_OFFSET( f ) \
+#define FT_FIELD_OFFSET( f )                         \
           (FT_UShort)( offsetof( FT_STRUCTURE, f ) )
 
 #define FT_FRAME_FIELD( frame_op, field ) \
@@ -149,8 +149,8 @@
 
   /**************************************************************************
    *
-   * Integer extraction macros -- the `buffer' parameter must ALWAYS be of
-   * type `char*' or equivalent (1-byte elements).
+   * Integer extraction macros -- the 'buffer' parameter must ALWAYS be of
+   * type 'char*' or equivalent (1-byte elements).
    */
 
 #define FT_BYTE_( p, i )  ( ((const FT_Byte*)(p))[(i)] )
@@ -166,8 +166,19 @@
 
 
   /*
-   * `FT_PEEK_XXX' are generic macros to get data from a buffer position.
-   * No safety checks are performed.
+   *    function      acts on      increases  does range   for    emits
+   *                                pointer    checking   frames  error
+   *  -------------------------------------------------------------------
+   *   FT_PEEK_XXX  buffer pointer      no         no        no     no
+   *   FT_NEXT_XXX  buffer pointer     yes         no        no     no
+   *   FT_GET_XXX   stream->cursor     yes        yes       yes     no
+   *   FT_READ_XXX  stream->pos        yes        yes        no    yes
+   */
+
+
+  /*
+   * `FT_PEEK_XXX' are generic macros to get data from a buffer position.  No
+   * safety checks are performed.
    */
 #define FT_PEEK_SHORT( p )  FT_INT16( FT_BYTE_U16( p, 0, 8 ) | \
                                       FT_BYTE_U16( p, 1, 0 ) )
@@ -267,11 +278,11 @@
 
   /**************************************************************************
    *
-   * The `FT_GET_XXX' macros use an implicit `stream' variable.
+   * The `FT_GET_XXX` macros use an implicit 'stream' variable.
    *
-   * Note that a call to `FT_STREAM_SEEK' or `FT_STREAM_POS' has *no* effect
-   * on `FT_GET_XXX'!  They operate on `stream->pos', while `FT_GET_XXX' use
-   * `stream->cursor'.
+   * Note that a call to `FT_STREAM_SEEK` or `FT_STREAM_POS` has **no**
+   * effect on `FT_GET_XXX`!  They operate on `stream->pos`, while
+   * `FT_GET_XXX` use `stream->cursor`.
    */
 #if 0
 #define FT_GET_MACRO( type )    FT_NEXT_ ## type ( stream->cursor )
@@ -319,8 +330,8 @@
    * The `FT_READ_XXX' macros use implicit `stream' and `error' variables.
    *
    * `FT_READ_XXX' can be controlled with `FT_STREAM_SEEK' and
-   * `FT_STREAM_POS'.  They use the full machinery to check whether a read
-   * is valid.
+   * `FT_STREAM_POS'.  They use the full machinery to check whether a read is
+   * valid.
    */
 #define FT_READ_BYTE( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Byte, var )
 #define FT_READ_CHAR( var )       FT_READ_MACRO( FT_Stream_ReadChar, FT_Char, var )
@@ -406,12 +417,14 @@
 
   /* Enter a frame of `count' consecutive bytes in a stream.  Returns an */
   /* error if the frame could not be read/accessed.  The caller can use  */
-  /* the `FT_Stream_Get_XXX' functions to retrieve frame data without    */
+  /* the `FT_Stream_GetXXX' functions to retrieve frame data without     */
   /* error checks.                                                       */
   /*                                                                     */
   /* You must _always_ call `FT_Stream_ExitFrame' once you have entered  */
   /* a stream frame!                                                     */
   /*                                                                     */
+  /* Nested frames are not permitted.                                    */
+  /*                                                                     */
   FT_BASE( FT_Error )
   FT_Stream_EnterFrame( FT_Stream  stream,
                         FT_ULong   count );
@@ -420,14 +433,17 @@
   FT_BASE( void )
   FT_Stream_ExitFrame( FT_Stream  stream );
 
+
   /* Extract a stream frame.  If the stream is disk-based, a heap block */
   /* is allocated and the frame bytes are read into it.  If the stream  */
-  /* is memory-based, this function simply set a pointer to the data.   */
+  /* is memory-based, this function simply sets a pointer to the data.  */
   /*                                                                    */
   /* Useful to optimize access to memory-based streams transparently.   */
   /*                                                                    */
-  /* All extracted frames must be `freed' with a call to the function   */
-  /* FT_Stream_ReleaseFrame().                                          */
+  /* `FT_Stream_GetXXX' functions can't be used.                        */
+  /*                                                                    */
+  /* An extracted frame must be `freed' with a call to the function     */
+  /* `FT_Stream_ReleaseFrame'.                                          */
   /*                                                                    */
   FT_BASE( FT_Error )
   FT_Stream_ExtractFrame( FT_Stream  stream,
@@ -439,6 +455,7 @@
   FT_Stream_ReleaseFrame( FT_Stream  stream,
                           FT_Byte**  pbytes );
 
+
   /* read a byte from an entered frame */
   FT_BASE( FT_Char )
   FT_Stream_GetChar( FT_Stream  stream );
diff --git a/include/freetype/internal/fttrace.h b/include/freetype/internal/fttrace.h
index 78b731c..f5f9598 100644
--- a/include/freetype/internal/fttrace.h
+++ b/include/freetype/internal/fttrace.h
@@ -4,7 +4,7 @@
  *
  *   Tracing handling (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -48,6 +48,7 @@
   /* SFNT driver components */
 FT_TRACE_DEF( sfdriver )  /* SFNT font driver        (sfdriver.c) */
 FT_TRACE_DEF( sfobjs )    /* SFNT object handler     (sfobjs.c)   */
+FT_TRACE_DEF( sfwoff )    /* WOFF format handler     (sfwoff.c)   */
 FT_TRACE_DEF( ttbdf )     /* TrueType embedded BDF   (ttbdf.c)    */
 FT_TRACE_DEF( ttcmap )    /* charmap handler         (ttcmap.c)   */
 FT_TRACE_DEF( ttcolr )    /* glyph layer table       (ttcolr.c)   */
diff --git a/include/freetype/internal/ftvalid.h b/include/freetype/internal/ftvalid.h
index 265d79b..38aa06c 100644
--- a/include/freetype/internal/ftvalid.h
+++ b/include/freetype/internal/ftvalid.h
@@ -4,7 +4,7 @@
  *
  *   FreeType validation support (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -54,17 +54,17 @@
    * FT_VALIDATE_TIGHT ::
    *   A table that passes this validation level can be used reliably and
    *   doesn't contain invalid data.  For example, a charmap table that
-   *   returns invalid glyph indices will not pass, even though it can
-   *   be used with FreeType in default mode (the library will simply
-   *   return an error later when trying to load the glyph).
+   *   returns invalid glyph indices will not pass, even though it can be
+   *   used with FreeType in default mode (the library will simply return an
+   *   error later when trying to load the glyph).
    *
    *   It also checks that fields which must be a multiple of 2, 4, or 8,
    *   don't have incorrect values, etc.
    *
    * FT_VALIDATE_PARANOID ::
    *   Only for font debugging.  Checks that a table follows the
-   *   specification by 100%.  Very few fonts will be able to pass this
-   *   level anyway but it can be useful for certain tools like font
+   *   specification by 100%.  Very few fonts will be able to pass this level
+   *   anyway but it can be useful for certain tools like font
    *   editors/converters.
    */
   typedef enum  FT_ValidationLevel_
diff --git a/include/freetype/internal/internal.h b/include/freetype/internal/internal.h
index 8261043..3c8830f 100644
--- a/include/freetype/internal/internal.h
+++ b/include/freetype/internal/internal.h
@@ -4,7 +4,7 @@
  *
  *   Internal header files (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,8 +18,8 @@
 
   /**************************************************************************
    *
-   * This file is automatically included by `ft2build.h'.
-   * Do not include it manually!
+   * This file is automatically included by `ft2build.h`.  Do not include it
+   * manually!
    *
    */
 
@@ -40,6 +40,7 @@
 
 #define FT_INTERNAL_TRUETYPE_TYPES_H      <freetype/internal/tttypes.h>
 #define FT_INTERNAL_TYPE1_TYPES_H         <freetype/internal/t1types.h>
+#define FT_INTERNAL_WOFF_TYPES_H          <freetype/internal/wofftypes.h>
 
 #define FT_INTERNAL_POSTSCRIPT_AUX_H      <freetype/internal/psaux.h>
 #define FT_INTERNAL_POSTSCRIPT_HINTS_H    <freetype/internal/pshints.h>
diff --git a/include/freetype/internal/psaux.h b/include/freetype/internal/psaux.h
index 2c5a6d2..f962a97 100644
--- a/include/freetype/internal/psaux.h
+++ b/include/freetype/internal/psaux.h
@@ -5,7 +5,7 @@
  *   Auxiliary functions and data structures related to PostScript fonts
  *   (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,7 +35,7 @@
 FT_BEGIN_HEADER
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * PostScript modules driver class.
    */
@@ -96,10 +96,10 @@
     (*done)( PS_Table  table );
 
     FT_Error
-    (*add)( PS_Table  table,
-            FT_Int    idx,
-            void*     object,
-            FT_UInt   length );
+    (*add)( PS_Table     table,
+            FT_Int       idx,
+            const void*  object,
+            FT_UInt      length );
 
     void
     (*release)( PS_Table  table );
@@ -113,25 +113,22 @@
    *   PS_TableRec
    *
    * @description:
-   *   A PS_Table is a simple object used to store an array of objects in
-   *   a single memory block.
+   *   A PS_Table is a simple object used to store an array of objects in a
+   *   single memory block.
    *
    * @fields:
    *   block ::
-   *     The address in memory of the growheap's block.  This
-   *     can change between two object adds, due to
-   *     reallocation.
+   *     The address in memory of the growheap's block.  This can change
+   *     between two object adds, due to reallocation.
    *
    *   cursor ::
    *     The current top of the grow heap within its block.
    *
    *   capacity ::
-   *     The current size of the heap block.  Increments by
-   *     1kByte chunks.
+   *     The current size of the heap block.  Increments by 1kByte chunks.
    *
    *   init ::
-   *     Set to 0xDEADBEEF if `elements' and `lengths' have
-   *     been allocated.
+   *     Set to 0xDEADBEEF if 'elements' and 'lengths' have been allocated.
    *
    *   max_elems ::
    *     The maximum number of elements in table.
@@ -146,8 +143,7 @@
    *     A table of element sizes within the block.
    *
    *   memory ::
-   *     The object used for memory operations
-   *     (alloc/realloc).
+   *     The object used for memory operations (alloc/realloc).
    *
    *   funcs ::
    *     A table of method pointers for this object.
@@ -556,9 +552,8 @@
    *     Set but not used.
    *
    *   metrics_only ::
-   *     A boolean indicating that we only want to compute
-   *     the metrics of a given glyph, not load all of its
-   *     points.
+   *     A boolean indicating that we only want to compute the metrics of a
+   *     given glyph, not load all of its points.
    *
    *   is_t1 ::
    *     Set if current font type is Type 1.
@@ -815,8 +810,7 @@
    *     Unused.
    *
    *   parse_state ::
-   *     An enumeration which controls the charstring
-   *     parsing state.
+   *     An enumeration which controls the charstring parsing state.
    *
    *   load_points ::
    *     If this flag is not set, no points are loaded.
@@ -825,9 +819,8 @@
    *     Set but not used.
    *
    *   metrics_only ::
-   *     A boolean indicating that we only want to compute
-   *     the metrics of a given glyph, not load all of its
-   *     points.
+   *     A boolean indicating that we only want to compute the metrics of a
+   *     given glyph, not load all of its points.
    *
    *   funcs ::
    *     An array of function pointers for the builder.
@@ -1100,9 +1093,8 @@
    *     Set but not used.
    *
    *   metrics_only ::
-   *     A boolean indicating that we only want to compute
-   *     the metrics of a given glyph, not load all of its
-   *     points.
+   *     A boolean indicating that we only want to compute the metrics of a
+   *     given glyph, not load all of its points.
    *
    *   hints_funcs ::
    *     Auxiliary pointer for hinting.
@@ -1294,8 +1286,7 @@
    *
    * @fields:
    *   memory ::
-   *     The object used for memory operations (alloc and
-   *     realloc).
+   *     The object used for memory operations (alloc and realloc).
    *
    *   stream ::
    *     This is an opaque object.
@@ -1304,8 +1295,7 @@
    *     The result will be stored here.
    *
    *   get_index ::
-   *     A user provided function to get a glyph index by its
-   *     name.
+   *     A user provided function to get a glyph index by its name.
    */
   typedef struct  AFM_ParserRec_
   {
diff --git a/include/freetype/internal/pshints.h b/include/freetype/internal/pshints.h
index 90a28ac..699acea 100644
--- a/include/freetype/internal/pshints.h
+++ b/include/freetype/internal/pshints.h
@@ -4,9 +4,9 @@
  *
  *   Interface to Postscript-specific (Type 1 and Type 2) hints
  *   recorders (specification only).  These are used to support native
- *   T1/T2 hints in the `type1', `cid', and `cff' font drivers.
+ *   T1/T2 hints in the 'type1', 'cid', and 'cff' font drivers.
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -73,7 +73,7 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   T1_Hints
@@ -86,16 +86,16 @@
    *   @T1_Hints_FuncsRec structure.  Recording glyph hints is normally
    *   achieved through the following scheme:
    *
-   *   - Open a new hint recording session by calling the `open' method.
+   *   - Open a new hint recording session by calling the 'open' method.
    *     This rewinds the recorder and prepare it for new input.
    *
    *   - For each hint found in the glyph charstring, call the corresponding
-   *     method (`stem', `stem3', or `reset').  Note that these functions do
+   *     method ('stem', 'stem3', or 'reset').  Note that these functions do
    *     not return an error code.
    *
-   *   - Close the recording session by calling the `close' method.  It
-   *     returns an error code if the hints were invalid or something
-   *     strange happened (e.g., memory shortage).
+   *   - Close the recording session by calling the 'close' method.  It
+   *     returns an error code if the hints were invalid or something strange
+   *     happened (e.g., memory shortage).
    *
    *   The hints accumulated in the object can later be used by the
    *   PostScript hinter.
@@ -104,7 +104,7 @@
   typedef struct T1_HintsRec_*  T1_Hints;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   T1_Hints_Funcs
@@ -117,7 +117,7 @@
   typedef const struct T1_Hints_FuncsRec_*  T1_Hints_Funcs;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_OpenFunc
@@ -139,14 +139,14 @@
   (*T1_Hints_OpenFunc)( T1_Hints  hints );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_SetStemFunc
    *
    * @description:
    *   A method of the @T1_Hints class used to record a new horizontal or
-   *   vertical stem.  This corresponds to the Type 1 `hstem' and `vstem'
+   *   vertical stem.  This corresponds to the Type 1 'hstem' and 'vstem'
    *   operators.
    *
    * @input:
@@ -164,15 +164,15 @@
    *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
    *   horizontal coordinates (x) for vertical stems (dim=1).
    *
-   *   `coords[0]' is the absolute stem position (lowest coordinate);
-   *   `coords[1]' is the length.
+   *   'coords[0]' is the absolute stem position (lowest coordinate);
+   *   'coords[1]' is the length.
    *
    *   The length can be negative, in which case it must be either -20 or
-   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
+   *   -21.  It is interpreted as a 'ghost' stem, according to the Type 1
    *   specification.
    *
-   *   If the length is -21 (corresponding to a bottom ghost stem), then
-   *   the real stem position is `coords[0]+coords[1]'.
+   *   If the length is -21 (corresponding to a bottom ghost stem), then the
+   *   real stem position is 'coords[0]+coords[1]'.
    *
    */
   typedef void
@@ -181,7 +181,7 @@
                            FT_Fixed*  coords );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_SetStem3Func
@@ -215,7 +215,7 @@
                             FT_Fixed*  coords );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_ResetFunc
@@ -238,7 +238,7 @@
                          FT_UInt   end_point );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_CloseFunc
@@ -267,7 +267,7 @@
                          FT_UInt   end_point );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T1_Hints_ApplyFunc
@@ -297,7 +297,7 @@
    *   On input, all points within the outline are in font coordinates. On
    *   output, they are in 1/64th of pixels.
    *
-   *   The scaling transformation is taken from the `globals' object which
+   *   The scaling transformation is taken from the 'globals' object which
    *   must correspond to the same font as the glyph.
    *
    */
@@ -308,7 +308,7 @@
                          FT_Render_Mode  hint_mode );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   T1_Hints_FuncsRec
@@ -360,7 +360,7 @@
   /*************************************************************************/
   /*************************************************************************/
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   T2_Hints
@@ -373,16 +373,16 @@
    *   @T2_Hints_FuncsRec structure.  Recording glyph hints is normally
    *   achieved through the following scheme:
    *
-   *   - Open a new hint recording session by calling the `open' method.
+   *   - Open a new hint recording session by calling the 'open' method.
    *     This rewinds the recorder and prepare it for new input.
    *
    *   - For each hint found in the glyph charstring, call the corresponding
-   *     method (`stems', `hintmask', `counters').  Note that these
-   *     functions do not return an error code.
+   *     method ('stems', 'hintmask', 'counters').  Note that these functions
+   *     do not return an error code.
    *
-   *   - Close the recording session by calling the `close' method.  It
-   *     returns an error code if the hints were invalid or something
-   *     strange happened (e.g., memory shortage).
+   *   - Close the recording session by calling the 'close' method.  It
+   *     returns an error code if the hints were invalid or something strange
+   *     happened (e.g., memory shortage).
    *
    *   The hints accumulated in the object can later be used by the
    *   Postscript hinter.
@@ -391,7 +391,7 @@
   typedef struct T2_HintsRec_*  T2_Hints;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @type:
    *   T2_Hints_Funcs
@@ -404,7 +404,7 @@
   typedef const struct T2_Hints_FuncsRec_*  T2_Hints_Funcs;
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_OpenFunc
@@ -426,7 +426,7 @@
   (*T2_Hints_OpenFunc)( T2_Hints  hints );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_StemsFunc
@@ -434,7 +434,7 @@
    * @description:
    *   A method of the @T2_Hints class used to set the table of stems in
    *   either the vertical or horizontal dimension.  Equivalent to the
-   *   `hstem', `vstem', `hstemhm', and `vstemhm' Type 2 operators.
+   *   'hstem', 'vstem', 'hstemhm', and 'vstemhm' Type 2 operators.
    *
    * @input:
    *   hints ::
@@ -447,18 +447,18 @@
    *     The number of stems.
    *
    *   coords ::
-   *     An array of `count' (position,length) pairs in 16.16 format.
+   *     An array of 'count' (position,length) pairs in 16.16 format.
    *
    * @note:
    *   Use vertical coordinates (y) for horizontal stems (dim=0).  Use
    *   horizontal coordinates (x) for vertical stems (dim=1).
    *
-   *   There are `2*count' elements in the `coords' array.  Each even
-   *   element is an absolute position in font units, each odd element is a
-   *   length in font units.
+   *   There are '2*count' elements in the 'coords' array.  Each even element
+   *   is an absolute position in font units, each odd element is a length in
+   *   font units.
    *
-   *   A length can be negative, in which case it must be either -20 or
-   *   -21.  It is interpreted as a `ghost' stem, according to the Type 1
+   *   A length can be negative, in which case it must be either -20 or -21.
+   *   It is interpreted as a 'ghost' stem, according to the Type 1
    *   specification.
    *
    */
@@ -469,22 +469,22 @@
                          FT_Fixed*  coordinates );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_MaskFunc
    *
    * @description:
    *   A method of the @T2_Hints class used to set a given hintmask (this
-   *   corresponds to the `hintmask' Type 2 operator).
+   *   corresponds to the 'hintmask' Type 2 operator).
    *
    * @input:
    *   hints ::
    *     A handle to the Type 2 hints recorder.
    *
    *   end_point ::
-   *     The glyph index of the last point to which the previously defined
-   *     or activated hints apply.
+   *     The glyph index of the last point to which the previously defined or
+   *     activated hints apply.
    *
    *   bit_count ::
    *     The number of bits in the hint mask.
@@ -494,13 +494,13 @@
    *
    * @note:
    *   If the hintmask starts the charstring (before any glyph point
-   *   definition), the value of `end_point' should be 0.
+   *   definition), the value of `end_point` should be 0.
    *
-   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
+   *   `bit_count` is the number of meaningful bits in the 'bytes' array; it
    *   must be equal to the total number of hints defined so far (i.e.,
    *   horizontal+verticals).
    *
-   *   The `bytes' array can come directly from the Type 2 charstring and
+   *   The 'bytes' array can come directly from the Type 2 charstring and
    *   respects the same format.
    *
    */
@@ -511,14 +511,14 @@
                         const FT_Byte*  bytes );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_CounterFunc
    *
    * @description:
-   *   A method of the @T2_Hints class used to set a given counter mask
-   *   (this corresponds to the `hintmask' Type 2 operator).
+   *   A method of the @T2_Hints class used to set a given counter mask (this
+   *   corresponds to the 'hintmask' Type 2 operator).
    *
    * @input:
    *   hints ::
@@ -536,13 +536,13 @@
    *
    * @note:
    *   If the hintmask starts the charstring (before any glyph point
-   *   definition), the value of `end_point' should be 0.
+   *   definition), the value of `end_point` should be 0.
    *
-   *   `bit_count' is the number of meaningful bits in the `bytes' array; it
+   *   `bit_count` is the number of meaningful bits in the 'bytes' array; it
    *   must be equal to the total number of hints defined so far (i.e.,
    *   horizontal+verticals).
    *
-   *    The `bytes' array can come directly from the Type 2 charstring and
+   *    The 'bytes' array can come directly from the Type 2 charstring and
    *    respects the same format.
    *
    */
@@ -552,7 +552,7 @@
                            const FT_Byte*  bytes );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_CloseFunc
@@ -581,15 +581,14 @@
                          FT_UInt   end_point );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @functype:
    *   T2_Hints_ApplyFunc
    *
    * @description:
    *   A method of the @T2_Hints class used to apply hints to the
-   *   corresponding glyph outline.  Must be called after the `close'
-   *   method.
+   *   corresponding glyph outline.  Must be called after the 'close' method.
    *
    * @input:
    *   hints ::
@@ -611,7 +610,7 @@
    *   On input, all points within the outline are in font coordinates. On
    *   output, they are in 1/64th of pixels.
    *
-   *   The scaling transformation is taken from the `globals' object which
+   *   The scaling transformation is taken from the 'globals' object which
    *   must correspond to the same font than the glyph.
    *
    */
@@ -622,7 +621,7 @@
                          FT_Render_Mode  hint_mode );
 
 
-  /*************************************************************************
+  /**************************************************************************
    *
    * @struct:
    *   T2_Hints_FuncsRec
diff --git a/include/freetype/internal/services/svbdf.h b/include/freetype/internal/services/svbdf.h
index b29f537..e4786ed 100644
--- a/include/freetype/internal/services/svbdf.h
+++ b/include/freetype/internal/services/svbdf.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType BDF services (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svcfftl.h b/include/freetype/internal/services/svcfftl.h
index 9e4486e..6c62173 100644
--- a/include/freetype/internal/services/svcfftl.h
+++ b/include/freetype/internal/services/svcfftl.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType CFF tables loader service (specification).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svcid.h b/include/freetype/internal/services/svcid.h
index 9ef0a0c..555a5af 100644
--- a/include/freetype/internal/services/svcid.h
+++ b/include/freetype/internal/services/svcid.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType CID font services (specification).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * Derek Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svfntfmt.h b/include/freetype/internal/services/svfntfmt.h
index 6182362..6f4285e 100644
--- a/include/freetype/internal/services/svfntfmt.h
+++ b/include/freetype/internal/services/svfntfmt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType font format service (specification only).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,8 +27,8 @@
 
   /*
    * A trivial service used to return the name of a face's font driver,
-   * according to the XFree86 nomenclature.  Note that the service data
-   * is a simple constant string pointer.
+   * according to the XFree86 nomenclature.  Note that the service data is a
+   * simple constant string pointer.
    */
 
 #define FT_SERVICE_ID_FONT_FORMAT  "font-format"
diff --git a/include/freetype/internal/services/svgldict.h b/include/freetype/internal/services/svgldict.h
index 0840b58..0949621 100644
--- a/include/freetype/internal/services/svgldict.h
+++ b/include/freetype/internal/services/svgldict.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph dictionary services (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,8 +26,8 @@
 
 
   /*
-   * A service used to retrieve glyph names, as well as to find the
-   * index of a given glyph name in a font.
+   * A service used to retrieve glyph names, as well as to find the index of
+   * a given glyph name in a font.
    *
    */
 
@@ -41,8 +41,8 @@
                                FT_UInt     buffer_max );
 
   typedef FT_UInt
-  (*FT_GlyphDict_NameIndexFunc)( FT_Face     face,
-                                 FT_String*  glyph_name );
+  (*FT_GlyphDict_NameIndexFunc)( FT_Face           face,
+                                 const FT_String*  glyph_name );
 
 
   FT_DEFINE_SERVICE( GlyphDict )
diff --git a/include/freetype/internal/services/svgxval.h b/include/freetype/internal/services/svgxval.h
index 7fa27ff..0bb76f3 100644
--- a/include/freetype/internal/services/svgxval.h
+++ b/include/freetype/internal/services/svgxval.h
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/include/freetype/internal/services/svkern.h b/include/freetype/internal/services/svkern.h
index ef95b32..f992a32 100644
--- a/include/freetype/internal/services/svkern.h
+++ b/include/freetype/internal/services/svkern.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Kerning service (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svmetric.h b/include/freetype/internal/services/svmetric.h
index 91de020..d688bc7 100644
--- a/include/freetype/internal/services/svmetric.h
+++ b/include/freetype/internal/services/svmetric.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType services for metrics variations (specification).
  *
- * Copyright 2016-2018 by
+ * Copyright (C) 2016-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svmm.h b/include/freetype/internal/services/svmm.h
index 6aeaa45..3652f20 100644
--- a/include/freetype/internal/services/svmm.h
+++ b/include/freetype/internal/services/svmm.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Multiple Masters and GX var services (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -86,47 +86,63 @@
   typedef void
   (*FT_Done_Blend_Func)( FT_Face );
 
+  typedef FT_Error
+  (*FT_Set_MM_WeightVector_Func)( FT_Face    face,
+                                  FT_UInt    len,
+                                  FT_Fixed*  weight_vector );
+
+  typedef FT_Error
+  (*FT_Get_MM_WeightVector_Func)( FT_Face    face,
+                                  FT_UInt*   len,
+                                  FT_Fixed*  weight_vector );
+
 
   FT_DEFINE_SERVICE( MultiMasters )
   {
-    FT_Get_MM_Func          get_mm;
-    FT_Set_MM_Design_Func   set_mm_design;
-    FT_Set_MM_Blend_Func    set_mm_blend;
-    FT_Get_MM_Blend_Func    get_mm_blend;
-    FT_Get_MM_Var_Func      get_mm_var;
-    FT_Set_Var_Design_Func  set_var_design;
-    FT_Get_Var_Design_Func  get_var_design;
-    FT_Set_Instance_Func    set_instance;
+    FT_Get_MM_Func               get_mm;
+    FT_Set_MM_Design_Func        set_mm_design;
+    FT_Set_MM_Blend_Func         set_mm_blend;
+    FT_Get_MM_Blend_Func         get_mm_blend;
+    FT_Get_MM_Var_Func           get_mm_var;
+    FT_Set_Var_Design_Func       set_var_design;
+    FT_Get_Var_Design_Func       get_var_design;
+    FT_Set_Instance_Func         set_instance;
+    FT_Set_MM_WeightVector_Func  set_mm_weightvector;
+    FT_Get_MM_WeightVector_Func  get_mm_weightvector;
 
     /* for internal use; only needed for code sharing between modules */
-    FT_Get_Var_Blend_Func   get_var_blend;
-    FT_Done_Blend_Func      done_blend;
+    FT_Get_Var_Blend_Func  get_var_blend;
+    FT_Done_Blend_Func     done_blend;
   };
 
 
-#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,          \
-                                           get_mm_,         \
-                                           set_mm_design_,  \
-                                           set_mm_blend_,   \
-                                           get_mm_blend_,   \
-                                           get_mm_var_,     \
-                                           set_var_design_, \
-                                           get_var_design_, \
-                                           set_instance_,   \
-                                           get_var_blend_,  \
-                                           done_blend_ )    \
-  static const FT_Service_MultiMastersRec  class_ =         \
-  {                                                         \
-    get_mm_,                                                \
-    set_mm_design_,                                         \
-    set_mm_blend_,                                          \
-    get_mm_blend_,                                          \
-    get_mm_var_,                                            \
-    set_var_design_,                                        \
-    get_var_design_,                                        \
-    set_instance_,                                          \
-    get_var_blend_,                                         \
-    done_blend_                                             \
+#define FT_DEFINE_SERVICE_MULTIMASTERSREC( class_,            \
+                                           get_mm_,           \
+                                           set_mm_design_,    \
+                                           set_mm_blend_,     \
+                                           get_mm_blend_,     \
+                                           get_mm_var_,       \
+                                           set_var_design_,   \
+                                           get_var_design_,   \
+                                           set_instance_,     \
+                                           set_weightvector_, \
+                                           get_weightvector_, \
+                                           get_var_blend_,    \
+                                           done_blend_ )      \
+  static const FT_Service_MultiMastersRec  class_ =           \
+  {                                                           \
+    get_mm_,                                                  \
+    set_mm_design_,                                           \
+    set_mm_blend_,                                            \
+    get_mm_blend_,                                            \
+    get_mm_var_,                                              \
+    set_var_design_,                                          \
+    get_var_design_,                                          \
+    set_instance_,                                            \
+    set_weightvector_,                                        \
+    get_weightvector_,                                        \
+    get_var_blend_,                                           \
+    done_blend_                                               \
   };
 
   /* */
diff --git a/include/freetype/internal/services/svotval.h b/include/freetype/internal/services/svotval.h
index 9a3ff47..cab4c6e 100644
--- a/include/freetype/internal/services/svotval.h
+++ b/include/freetype/internal/services/svotval.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType OpenType validation service (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svpfr.h b/include/freetype/internal/services/svpfr.h
index 21deb31..fd01d61 100644
--- a/include/freetype/internal/services/svpfr.h
+++ b/include/freetype/internal/services/svpfr.h
@@ -4,7 +4,7 @@
  *
  *   Internal PFR service functions (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svpostnm.h b/include/freetype/internal/services/svpostnm.h
index 1e39dce..18e3843 100644
--- a/include/freetype/internal/services/svpostnm.h
+++ b/include/freetype/internal/services/svpostnm.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript name services (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -25,10 +25,10 @@
 FT_BEGIN_HEADER
 
   /*
-   * A trivial service used to retrieve the PostScript name of a given
-   * font when available.  The `get_name' field should never be NULL.
+   * A trivial service used to retrieve the PostScript name of a given font
+   * when available.  The `get_name' field should never be `NULL`.
    *
-   * The corresponding function can return NULL to indicate that the
+   * The corresponding function can return `NULL` to indicate that the
    * PostScript name is not available.
    *
    * The name is owned by the face and will be destroyed with it.
diff --git a/include/freetype/internal/services/svprop.h b/include/freetype/internal/services/svprop.h
index 7e84cc8..e48d015 100644
--- a/include/freetype/internal/services/svprop.h
+++ b/include/freetype/internal/services/svprop.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType property service (specification).
  *
- * Copyright 2012-2018 by
+ * Copyright (C) 2012-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svpscmap.h b/include/freetype/internal/services/svpscmap.h
index 136879d..dfac3ba 100644
--- a/include/freetype/internal/services/svpscmap.h
+++ b/include/freetype/internal/services/svpscmap.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript charmap service (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,21 +35,20 @@
   (*PS_Unicode_ValueFunc)( const char*  glyph_name );
 
   /*
-   * Macintosh name id to glyph name.  NULL if invalid index.
+   * Macintosh name id to glyph name.  `NULL` if invalid index.
    */
   typedef const char*
   (*PS_Macintosh_NameFunc)( FT_UInt  name_index );
 
   /*
-   * Adobe standard string ID to glyph name.  NULL if invalid index.
+   * Adobe standard string ID to glyph name.  `NULL` if invalid index.
    */
   typedef const char*
   (*PS_Adobe_Std_StringsFunc)( FT_UInt  string_index );
 
 
   /*
-   * Simple unicode -> glyph index charmap built from font glyph names
-   * table.
+   * Simple unicode -> glyph index charmap built from font glyph names table.
    */
   typedef struct  PS_UniMap_
   {
@@ -72,7 +71,7 @@
 
   /*
    * A function which returns a glyph name for a given index.  Returns
-   * NULL if invalid index.
+   * `NULL` if invalid index.
    */
   typedef const char*
   (*PS_GetGlyphNameFunc)( FT_Pointer  data,
diff --git a/include/freetype/internal/services/svpsinfo.h b/include/freetype/internal/services/svpsinfo.h
index 214fd1e..fb4e0e3 100644
--- a/include/freetype/internal/services/svpsinfo.h
+++ b/include/freetype/internal/services/svpsinfo.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType PostScript info service (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svsfnt.h b/include/freetype/internal/services/svsfnt.h
index 035e119..464aa20 100644
--- a/include/freetype/internal/services/svsfnt.h
+++ b/include/freetype/internal/services/svsfnt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType SFNT table loading service (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svttcmap.h b/include/freetype/internal/services/svttcmap.h
index cc4328f..0fcb813 100644
--- a/include/freetype/internal/services/svttcmap.h
+++ b/include/freetype/internal/services/svttcmap.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType/sfnt cmap extra information service.
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * Masatake YAMATO, Redhat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -45,15 +45,14 @@
    * @fields:
    *   language ::
    *     The language ID used in Mac fonts.  Definitions of values are in
-   *     `ttnameid.h'.
+   *     `ttnameid.h`.
    *
    *   format ::
-   *     The cmap format.  OpenType 1.6 defines the formats 0 (byte
-   *     encoding table), 2~(high-byte mapping through table), 4~(segment
-   *     mapping to delta values), 6~(trimmed table mapping), 8~(mixed
-   *     16-bit and 32-bit coverage), 10~(trimmed array), 12~(segmented
-   *     coverage), 13~(last resort font), and 14 (Unicode Variation
-   *     Sequences).
+   *     The cmap format.  OpenType 1.6 defines the formats 0 (byte encoding
+   *     table), 2~(high-byte mapping through table), 4~(segment mapping to
+   *     delta values), 6~(trimmed table mapping), 8~(mixed 16-bit and 32-bit
+   *     coverage), 10~(trimmed array), 12~(segmented coverage), 13~(last
+   *     resort font), and 14 (Unicode Variation Sequences).
    */
   typedef struct  TT_CMapInfo_
   {
diff --git a/include/freetype/internal/services/svtteng.h b/include/freetype/internal/services/svtteng.h
index 2564a41..a852f5c 100644
--- a/include/freetype/internal/services/svtteng.h
+++ b/include/freetype/internal/services/svtteng.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType engine query service (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svttglyf.h b/include/freetype/internal/services/svttglyf.h
index 38444e9..c879877 100644
--- a/include/freetype/internal/services/svttglyf.h
+++ b/include/freetype/internal/services/svttglyf.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType TrueType glyph service.
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/services/svwinfnt.h b/include/freetype/internal/services/svwinfnt.h
index 3aaa8a8..38ee020 100644
--- a/include/freetype/internal/services/svwinfnt.h
+++ b/include/freetype/internal/services/svwinfnt.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType Windows FNT/FONT service (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/freetype/internal/sfnt.h b/include/freetype/internal/sfnt.h
index 178d892..b19241c 100644
--- a/include/freetype/internal/sfnt.h
+++ b/include/freetype/internal/sfnt.h
@@ -2,9 +2,9 @@
  *
  * sfnt.h
  *
- *   High-level `sfnt' driver interface (specification).
+ *   High-level 'sfnt' driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -23,6 +23,7 @@
 #include <ft2build.h>
 #include FT_INTERNAL_DRIVER_H
 #include FT_INTERNAL_TRUETYPE_TYPES_H
+#include FT_INTERNAL_WOFF_TYPES_H
 
 
 FT_BEGIN_HEADER
@@ -34,8 +35,8 @@
    *   TT_Init_Face_Func
    *
    * @description:
-   *   First part of the SFNT face object initialization.  This finds
-   *   the face in a SFNT file or collection, and load its format tag in
+   *   First part of the SFNT face object initialization.  This finds the
+   *   face in a SFNT file or collection, and load its format tag in
    *   face->format_tag.
    *
    * @input:
@@ -46,10 +47,9 @@
    *     A handle to the target face object.
    *
    *   face_index ::
-   *     The index of the TrueType font, if we are opening a
-   *     collection, in bits 0-15.  The numbered instance
-   *     index~+~1 of a GX (sub)font, if applicable, in bits
-   *     16-30.
+   *     The index of the TrueType font, if we are opening a collection, in
+   *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
+   *     applicable, in bits 16-30.
    *
    *   num_params ::
    *     The number of additional parameters.
@@ -63,12 +63,11 @@
    * @note:
    *   The stream cursor must be at the font file's origin.
    *
-   *   This function recognizes fonts embedded in a `TrueType
-   *   collection'.
+   *   This function recognizes fonts embedded in a 'TrueType collection'.
    *
-   *   Once the format tag has been validated by the font driver, it
-   *   should then call the TT_Load_Face_Func() callback to read the rest
-   *   of the SFNT tables in the object.
+   *   Once the format tag has been validated by the font driver, it should
+   *   then call the TT_Load_Face_Func() callback to read the rest of the
+   *   SFNT tables in the object.
    */
   typedef FT_Error
   (*TT_Init_Face_Func)( FT_Stream      stream,
@@ -84,9 +83,9 @@
    *   TT_Load_Face_Func
    *
    * @description:
-   *   Second part of the SFNT face object initialization.  This loads
-   *   the common SFNT tables (head, OS/2, maxp, metrics, etc.) in the
-   *   face object.
+   *   Second part of the SFNT face object initialization.  This loads the
+   *   common SFNT tables (head, OS/2, maxp, metrics, etc.) in the face
+   *   object.
    *
    * @input:
    *   stream ::
@@ -96,10 +95,9 @@
    *     A handle to the target face object.
    *
    *   face_index ::
-   *     The index of the TrueType font, if we are opening a
-   *     collection, in bits 0-15.  The numbered instance
-   *     index~+~1 of a GX (sub)font, if applicable, in bits
-   *     16-30.
+   *     The index of the TrueType font, if we are opening a collection, in
+   *     bits 0-15.  The numbered instance index~+~1 of a GX (sub)font, if
+   *     applicable, in bits 16-30.
    *
    *   num_params ::
    *     The number of additional parameters.
@@ -153,30 +151,24 @@
    *     The face object to look for.
    *
    *   tag ::
-   *     The tag of table to load.  Use the value 0 if you want
-   *     to access the whole font file, else set this parameter
-   *     to a valid TrueType table tag that you can forge with
-   *     the MAKE_TT_TAG macro.
+   *     The tag of table to load.  Use the value 0 if you want to access the
+   *     whole font file, else set this parameter to a valid TrueType table
+   *     tag that you can forge with the MAKE_TT_TAG macro.
    *
    *   offset ::
-   *     The starting offset in the table (or the file if
-   *     tag == 0).
+   *     The starting offset in the table (or the file if tag == 0).
    *
    *   length ::
    *     The address of the decision variable:
    *
-   *     If length == NULL:
-   *     Loads the whole table.  Returns an error if
-   *     `offset' == 0!
+   *     If `length == NULL`: Loads the whole table.  Returns an error if
+   *     'offset' == 0!
    *
-   *     If *length == 0:
-   *     Exits immediately; returning the length of the given
-   *     table or of the font file, depending on the value of
-   *     `tag'.
+   *     If `*length == 0`: Exits immediately; returning the length of the
+   *     given table or of the font file, depending on the value of 'tag'.
    *
-   *     If *length != 0:
-   *     Loads the next `length' bytes of table or font,
-   *     starting at offset `offset' (in table or font too).
+   *     If `*length != 0`: Loads the next 'length' bytes of table or font,
+   *     starting at offset 'offset' (in table or font too).
    *
    * @output:
    *   buffer ::
@@ -199,8 +191,8 @@
    *   TT_Find_SBit_Image_Func
    *
    * @description:
-   *   Check whether an embedded bitmap (an `sbit') exists for a given
-   *   glyph, at a given strike.
+   *   Check whether an embedded bitmap (an 'sbit') exists for a given glyph,
+   *   at a given strike.
    *
    * @input:
    *   face ::
@@ -220,12 +212,11 @@
    *     The SBit strike containing the glyph index.
    *
    *   aglyph_offset ::
-   *     The offset of the glyph data in `EBDT' table.
+   *     The offset of the glyph data in 'EBDT' table.
    *
    * @return:
    *   FreeType error code.  0 means success.  Returns
-   *   SFNT_Err_Invalid_Argument if no sbit exists for the requested
-   *   glyph.
+   *   SFNT_Err_Invalid_Argument if no sbit exists for the requested glyph.
    */
   typedef FT_Error
   (*TT_Find_SBit_Image_Func)( TT_Face          face,
@@ -259,11 +250,11 @@
    *   FreeType error code.  0 means success.
    *
    * @note:
-   *   The stream cursor must be positioned at the glyph's offset within
-   *   the `EBDT' table before the call.
+   *   The stream cursor must be positioned at the glyph's offset within the
+   *   'EBDT' table before the call.
    *
    *   If the image format uses variable metrics, the stream cursor is
-   *   positioned just after the metrics header in the `EBDT' table on
+   *   positioned just after the metrics header in the 'EBDT' table on
    *   function exit.
    */
   typedef FT_Error
@@ -305,11 +296,11 @@
    *     A big sbit metrics structure for the glyph image.
    *
    * @return:
-   *   FreeType error code.  0 means success.  Returns an error if no
-   *   glyph sbit exists for the index.
+   *   FreeType error code.  0 means success.  Returns an error if no glyph
+   *   sbit exists for the index.
    *
    * @note:
-   *   The `map.buffer' field is always freed before the glyph is loaded.
+   *   The `map.buffer` field is always freed before the glyph is loaded.
    */
   typedef FT_Error
   (*TT_Load_SBit_Image_Func)( TT_Face              face,
@@ -341,8 +332,8 @@
    *     The index of the sbit strike.
    *
    * @return:
-   *   FreeType error code.  0 means success.  Returns an error if no
-   *   sbit strike exists for the selected ppem values.
+   *   FreeType error code.  0 means success.  Returns an error if no sbit
+   *   strike exists for the selected ppem values.
    */
   typedef FT_Error
   (*TT_Set_SBit_Strike_Func)( TT_Face          face,
@@ -370,8 +361,8 @@
    *     the metrics of the strike.
    *
    * @return:
-   *   FreeType error code.  0 means success.  Returns an error if no
-   *   such sbit strike exists.
+   *   FreeType error code.  0 means success.  Returns an error if no such
+   *   sbit strike exists.
    */
   typedef FT_Error
   (*TT_Load_Strike_Metrics_Func)( TT_Face           face,
@@ -392,8 +383,8 @@
    *     The glyph index.
    *
    *   PSname ::
-   *     The address of a string pointer.  Will be NULL in case
-   *     of error, otherwise it is a pointer to the glyph name.
+   *     The address of a string pointer.  Will be `NULL` in case of error,
+   *     otherwise it is a pointer to the glyph name.
    *
    *     You must not modify the returned string!
    *
@@ -454,12 +445,10 @@
    *
    * @output:
    *   abearing ::
-   *     The horizontal (or vertical) bearing.  Set to zero in
-   *     case of error.
+   *     The horizontal (or vertical) bearing.  Set to zero in case of error.
    *
    *   aadvance ::
-   *     The horizontal (or vertical) advance.  Set to zero in
-   *     case of error.
+   *     The horizontal (or vertical) advance.  Set to zero in case of error.
    */
   typedef void
   (*TT_Get_Metrics_Func)( TT_Face     face,
@@ -475,7 +464,7 @@
    *   TT_Set_Palette_Func
    *
    * @description:
-   *   Load the colors into `face->palette' for a given palette index.
+   *   Load the colors into `face->palette` for a given palette index.
    *
    * @input:
    *   face ::
@@ -510,7 +499,7 @@
    * @inout:
    *   iterator ::
    *     An @FT_LayerIterator object.  For the first call you should set
-   *     `iterator->p' to NULL.  For all following calls, simply use the
+   *     `iterator->p` to `NULL`.  For all following calls, simply use the
    *     same object again.
    *
    * @output:
@@ -524,9 +513,9 @@
    *     instead (to be set up by the application outside of FreeType).
    *
    * @return:
-   *   Value~1 if everything is OK.  If there are no more layers (or if
-   *   there are no layers at all), value~0 gets returned.  In case of an
-   *   error, value~0 is returned also.
+   *   Value~1 if everything is OK.  If there are no more layers (or if there
+   *   are no layers at all), value~0 gets returned.  In case of an error,
+   *   value~0 is returned also.
    */
   typedef FT_Bool
   (*TT_Get_Colr_Layer_Func)( TT_Face            face,
@@ -542,10 +531,10 @@
    *   TT_Blend_Colr_Func
    *
    * @description:
-   *   Blend the bitmap in `new_glyph' into `base_glyph' using the color
-   *   specified by `color_index'.  If `color_index' is 0xFFFF, use
-   *   `face->foreground_color' if `face->have_foreground_color' is set.
-   *   Otherwise check `face->palette_data.palette_flags': If present and
+   *   Blend the bitmap in `new_glyph` into `base_glyph` using the color
+   *   specified by `color_index`.  If `color_index` is 0xFFFF, use
+   *   `face->foreground_color` if `face->have_foreground_color` is set.
+   *   Otherwise check `face->palette_data.palette_flags`: If present and
    *   @FT_PALETTE_FOR_DARK_BACKGROUND is set, use BGRA value 0xFFFFFFFF
    *   (white opaque).  Otherwise use BGRA value 0x000000FF (black opaque).
    *
@@ -557,11 +546,11 @@
    *     Color index from the COLR table.
    *
    *   base_glyph ::
-   *     Slot for bitmap to be merged into.  The underlying
-   *     bitmap may get reallocated.
+   *     Slot for bitmap to be merged into.  The underlying bitmap may get
+   *     reallocated.
    *
    *   new_glyph ::
-   *     Slot to be incooperated into `base_glyph'.
+   *     Slot to be incooperated into `base_glyph`.
    *
    * @return:
    *   FreeType error code.  0 means success.  Returns an error if
@@ -580,8 +569,7 @@
    *   TT_Get_Name_Func
    *
    * @description:
-   *   From the `name' table, return a given ENGLISH name record in
-   *   ASCII.
+   *   From the 'name' table, return a given ENGLISH name record in ASCII.
    *
    * @input:
    *   face ::
@@ -592,8 +580,8 @@
    *
    * @inout:
    *   name ::
-   *     The address of an allocated string pointer.  NULL if
-   *     no name is present.
+   *     The address of an allocated string pointer.  `NULL` if no name is
+   *     present.
    *
    * @return:
    *   FreeType error code.  0 means success.
@@ -610,8 +598,8 @@
    *   TT_Get_Name_ID_Func
    *
    * @description:
-   *   Search whether an ENGLISH version for a given name ID is in the
-   *   `name' table.
+   *   Search whether an ENGLISH version for a given name ID is in the 'name'
+   *   table.
    *
    * @input:
    *   face ::
@@ -622,12 +610,12 @@
    *
    * @output:
    *   win ::
-   *     If non-negative, an index into the `name' table with
-   *     the corresponding (3,1) or (3,0) Windows entry.
+   *     If non-negative, an index into the 'name' table with the
+   *     corresponding (3,1) or (3,0) Windows entry.
    *
    *   apple ::
-   *     If non-negative, an index into the `name' table with
-   *     the corresponding (1,0) Apple entry.
+   *     If non-negative, an index into the 'name' table with the
+   *     corresponding (1,0) Apple entry.
    *
    * @return:
    *   1 if there is either a win or apple entry (or both), 0 otheriwse.
@@ -658,8 +646,8 @@
    *   FreeType error code.  0 means success.
    *
    * @note:
-   *   The function uses `face->goto_table' to seek the stream to the
-   *   start of the table, except while loading the font directory.
+   *   The function uses `face->goto_table` to seek the stream to the start
+   *   of the table, except while loading the font directory.
    */
   typedef FT_Error
   (*TT_Load_Table_Func)( TT_Face    face,
@@ -690,9 +678,14 @@
    *    Return the horizontal kerning value between two glyphs.
    *
    * @input:
-   *    face        :: A handle to the source face object.
-   *    left_glyph  :: The left glyph index.
-   *    right_glyph :: The right glyph index.
+   *    face ::
+   *      A handle to the source face object.
+   *
+   *    left_glyph ::
+   *      The left glyph index.
+   *
+   *    right_glyph ::
+   *      The right glyph index.
    *
    * @return:
    *    The kerning value in font units.
@@ -709,8 +702,8 @@
    *   SFNT_Interface
    *
    * @description:
-   *   This structure holds pointers to the functions used to load and
-   *   free the basic tables that are required in a `sfnt' font file.
+   *   This structure holds pointers to the functions used to load and free
+   *   the basic tables that are required in a 'sfnt' font file.
    *
    * @fields:
    *   Check the various xxx_Func() descriptions for details.
diff --git a/include/freetype/internal/t1types.h b/include/freetype/internal/t1types.h
index 67c3857..d94c8c1 100644
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -5,7 +5,7 @@
  *   Basic Type1/Type2 type definitions and interface (specification
  *   only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -55,16 +55,14 @@
    *
    * @fields:
    *   num_chars ::
-   *     The number of character codes in the encoding.
-   *     Usually 256.
+   *     The number of character codes in the encoding.  Usually 256.
    *
    *   code_first ::
    *     The lowest valid character code in the encoding.
    *
    *   code_last ::
-   *     The highest valid character code in the encoding
-   *     + 1. When equal to code_first there are no valid
-   *     character codes.
+   *     The highest valid character code in the encoding + 1. When equal to
+   *     code_first there are no valid character codes.
    *
    *   char_index ::
    *     An array of corresponding glyph indices.
@@ -78,8 +76,8 @@
     FT_Int       code_first;
     FT_Int       code_last;
 
-    FT_UShort*   char_index;
-    FT_String**  char_name;
+    FT_UShort*         char_index;
+    const FT_String**  char_name;
 
   } T1_EncodingRec, *T1_Encoding;
 
diff --git a/include/freetype/internal/tttypes.h b/include/freetype/internal/tttypes.h
index 4df6b29..23db240 100644
--- a/include/freetype/internal/tttypes.h
+++ b/include/freetype/internal/tttypes.h
@@ -5,7 +5,7 @@
  *   Basic SFNT/TrueType type definitions and interface (specification
  *   only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,21 +53,20 @@
    *   TTC_HeaderRec
    *
    * @description:
-   *   TrueType collection header.  This table contains the offsets of
-   *   the font headers of each distinct TrueType face in the file.
+   *   TrueType collection header.  This table contains the offsets of the
+   *   font headers of each distinct TrueType face in the file.
    *
    * @fields:
    *   tag ::
-   *     Must be `ttc ' to indicate a TrueType collection.
+   *     Must be 'ttc~' to indicate a TrueType collection.
    *
    *   version ::
    *     The version number.
    *
    *   count ::
-   *     The number of faces in the collection.  The
-   *     specification says this should be an unsigned long, but
-   *     we use a signed long since we need the value -1 for
-   *     specific purposes.
+   *     The number of faces in the collection.  The specification says this
+   *     should be an unsigned long, but we use a signed long since we need
+   *     the value -1 for specific purposes.
    *
    *   offsets ::
    *     The offsets of the font headers, one per face.
@@ -98,13 +97,13 @@
    *     The number of tables in file.
    *
    *   search_range ::
-   *     Must be `16 * (max power of 2 <= num_tables)'.
+   *     Must be '16 * (max power of 2 <= num_tables)'.
    *
    *   entry_selector ::
-   *     Must be log2 of `search_range / 16'.
+   *     Must be log2 of 'search_range / 16'.
    *
    *   range_shift ::
-   *     Must be `num_tables * 16 - search_range'.
+   *     Must be 'num_tables * 16 - search_range'.
    */
   typedef struct  SFNT_HeaderRec_
   {
@@ -135,8 +134,8 @@
    *     The table checksum.  This value can be ignored.
    *
    *   Offset ::
-   *     The offset of the table from the start of the TrueType
-   *     font in its resource.
+   *     The offset of the table from the start of the TrueType font in its
+   *     resource.
    *
    *   Length ::
    *     The table length (in bytes).
@@ -154,85 +153,10 @@
   /**************************************************************************
    *
    * @struct:
-   *   WOFF_HeaderRec
-   *
-   * @description:
-   *   WOFF file format header.
-   *
-   * @fields:
-   *   See
-   *
-   *     https://www.w3.org/TR/WOFF/#WOFFHeader
-   */
-  typedef struct  WOFF_HeaderRec_
-  {
-    FT_ULong   signature;
-    FT_ULong   flavor;
-    FT_ULong   length;
-    FT_UShort  num_tables;
-    FT_UShort  reserved;
-    FT_ULong   totalSfntSize;
-    FT_UShort  majorVersion;
-    FT_UShort  minorVersion;
-    FT_ULong   metaOffset;
-    FT_ULong   metaLength;
-    FT_ULong   metaOrigLength;
-    FT_ULong   privOffset;
-    FT_ULong   privLength;
-
-  } WOFF_HeaderRec, *WOFF_Header;
-
-
-  /**************************************************************************
-   *
-   * @struct:
-   *   WOFF_TableRec
-   *
-   * @description:
-   *   This structure describes a given table of a WOFF font.
-   *
-   * @fields:
-   *   Tag ::
-   *     A four-bytes tag describing the table.
-   *
-   *   Offset ::
-   *     The offset of the table from the start of the WOFF
-   *     font in its resource.
-   *
-   *   CompLength ::
-   *     Compressed table length (in bytes).
-   *
-   *   OrigLength ::
-   *     Uncompressed table length (in bytes).
-   *
-   *   CheckSum ::
-   *     The table checksum.  This value can be ignored.
-   *
-   *   OrigOffset ::
-   *     The uncompressed table file offset.  This value gets
-   *     computed while constructing the (uncompressed) SFNT
-   *     header.  It is not contained in the WOFF file.
-   */
-  typedef struct  WOFF_TableRec_
-  {
-    FT_ULong  Tag;           /* table ID                  */
-    FT_ULong  Offset;        /* table file offset         */
-    FT_ULong  CompLength;    /* compressed table length   */
-    FT_ULong  OrigLength;    /* uncompressed table length */
-    FT_ULong  CheckSum;      /* uncompressed checksum     */
-
-    FT_ULong  OrigOffset;    /* uncompressed table file offset */
-                             /* (not in the WOFF file)         */
-  } WOFF_TableRec, *WOFF_Table;
-
-
-  /**************************************************************************
-   *
-   * @struct:
    *   TT_LongMetricsRec
    *
    * @description:
-   *   A structure modeling the long metrics of the `hmtx' and `vmtx'
+   *   A structure modeling the long metrics of the 'hmtx' and 'vmtx'
    *   TrueType tables.  The values are expressed in font units.
    *
    * @fields:
@@ -256,7 +180,7 @@
    *   TT_ShortMetrics
    *
    * @description:
-   *   A simple type to model the short metrics of the `hmtx' and `vmtx'
+   *   A simple type to model the short metrics of the 'hmtx' and 'vmtx'
    *   tables.
    */
   typedef FT_Short  TT_ShortMetrics;
@@ -268,10 +192,9 @@
    *   TT_NameRec
    *
    * @description:
-   *   A structure modeling TrueType name records.  Name records are used
-   *   to store important strings like family name, style name,
-   *   copyright, etc. in _localized_ versions (i.e., language, encoding,
-   *   etc).
+   *   A structure modeling TrueType name records.  Name records are used to
+   *   store important strings like family name, style name, copyright,
+   *   etc. in _localized_ versions (i.e., language, encoding, etc).
    *
    * @fields:
    *   platformID ::
@@ -290,11 +213,11 @@
    *     The length of the string in bytes.
    *
    *   stringOffset ::
-   *     The offset to the string in the `name' table.
+   *     The offset to the string in the 'name' table.
    *
    *   string ::
-   *     A pointer to the string's bytes.  Note that these
-   *     are usually UTF-16 encoded characters.
+   *     A pointer to the string's bytes.  Note that these are usually UTF-16
+   *     encoded characters.
    */
   typedef struct  TT_NameRec_
   {
@@ -319,7 +242,7 @@
    *   TT_LangTagRec
    *
    * @description:
-   *   A structure modeling language tag records in SFNT `name' tables,
+   *   A structure modeling language tag records in SFNT 'name' tables,
    *   introduced in OpenType version 1.6.
    *
    * @fields:
@@ -327,11 +250,11 @@
    *     The length of the string in bytes.
    *
    *   stringOffset ::
-   *     The offset to the string in the `name' table.
+   *     The offset to the string in the 'name' table.
    *
    *   string ::
-   *     A pointer to the string's bytes.  Note that these
-   *     are UTF-16BE encoded characters.
+   *     A pointer to the string's bytes.  Note that these are UTF-16BE
+   *     encoded characters.
    */
   typedef struct TT_LangTagRec_
   {
@@ -362,8 +285,7 @@
    *     The number of names in table.
    *
    *   storageOffset ::
-   *     The offset of the name table in the `name'
-   *     TrueType table.
+   *     The offset of the name table in the 'name' TrueType table.
    *
    *   names ::
    *     An array of name records.
@@ -409,16 +331,16 @@
    *   TT_GaspRangeRec
    *
    * @description:
-   *   A tiny structure used to model a gasp range according to the
-   *   TrueType specification.
+   *   A tiny structure used to model a gasp range according to the TrueType
+   *   specification.
    *
    * @fields:
    *   maxPPEM ::
-   *     The maximum ppem value to which `gaspFlag' applies.
+   *     The maximum ppem value to which `gaspFlag` applies.
    *
    *   gaspFlag ::
-   *     A flag describing the grid-fitting and anti-aliasing
-   *     modes to be used.
+   *     A flag describing the grid-fitting and anti-aliasing modes to be
+   *     used.
    */
   typedef struct  TT_GaspRangeRec_
   {
@@ -438,7 +360,7 @@
    *   TT_GaspRec
    *
    * @description:
-   *   A structure modeling the TrueType `gasp' table used to specify
+   *   A structure modeling the TrueType 'gasp' table used to specify
    *   grid-fitting and anti-aliasing behaviour.
    *
    * @fields:
@@ -479,9 +401,9 @@
    *   TT_SBit_MetricsRec
    *
    * @description:
-   *   A structure used to hold the big metrics of a given glyph bitmap
-   *   in a TrueType or OpenType font.  These are usually found in the
-   *   `EBDT' (Microsoft) or `bloc' (Apple) table.
+   *   A structure used to hold the big metrics of a given glyph bitmap in a
+   *   TrueType or OpenType font.  These are usually found in the 'EBDT'
+   *   (Microsoft) or 'bloc' (Apple) table.
    *
    * @fields:
    *   height ::
@@ -530,9 +452,9 @@
    *   TT_SBit_SmallMetricsRec
    *
    * @description:
-   *   A structure used to hold the small metrics of a given glyph bitmap
-   *   in a TrueType or OpenType font.  These are usually found in the
-   *   `EBDT' (Microsoft) or the `bdat' (Apple) table.
+   *   A structure used to hold the small metrics of a given glyph bitmap in
+   *   a TrueType or OpenType font.  These are usually found in the 'EBDT'
+   *   (Microsoft) or the 'bdat' (Apple) table.
    *
    * @fields:
    *   height ::
@@ -568,8 +490,8 @@
    *   TT_SBit_LineMetricsRec
    *
    * @description:
-   *   A structure used to describe the text line metrics of a given
-   *   bitmap strike, for either a horizontal or vertical layout.
+   *   A structure used to describe the text line metrics of a given bitmap
+   *   strike, for either a horizontal or vertical layout.
    *
    * @fields:
    *   ascender ::
@@ -582,34 +504,27 @@
    *     The maximum glyph width in pixels.
    *
    *   caret_slope_enumerator ::
-   *     Rise of the caret slope, typically set
-   *     to 1 for non-italic fonts.
+   *     Rise of the caret slope, typically set to 1 for non-italic fonts.
    *
    *   caret_slope_denominator ::
-   *     Rise of the caret slope, typically set
-   *     to 0 for non-italic fonts.
+   *     Rise of the caret slope, typically set to 0 for non-italic fonts.
    *
    *   caret_offset ::
-   *     Offset in pixels to move the caret for
-   *     proper positioning.
+   *     Offset in pixels to move the caret for proper positioning.
    *
    *   min_origin_SB ::
-   *     Minimum of horiBearingX (resp.
-   *     vertBearingY).
+   *     Minimum of horiBearingX (resp.  vertBearingY).
    *   min_advance_SB ::
    *     Minimum of
    *
-   *     horizontal advance -
-   *     ( horiBearingX + width )
+   *     horizontal advance - ( horiBearingX + width )
    *
    *     resp.
    *
-   *     vertical advance -
-   *     ( vertBearingY + height )
+   *     vertical advance - ( vertBearingY + height )
    *
    *   max_before_BL ::
-   *     Maximum of horiBearingY (resp.
-   *     vertBearingY).
+   *     Maximum of horiBearingY (resp.  vertBearingY).
    *
    *   min_after_BL ::
    *     Minimum of
@@ -621,8 +536,7 @@
    *     vertBearingX - width
    *
    *   pads ::
-   *     Unused (to make the size of the record
-   *     a multiple of 32 bits.
+   *     Unused (to make the size of the record a multiple of 32 bits.
    */
   typedef struct  TT_SBit_LineMetricsRec_
   {
@@ -647,8 +561,8 @@
    *   TT_SBit_RangeRec
    *
    * @description:
-   *   A TrueType/OpenType subIndexTable as defined in the `EBLC'
-   *   (Microsoft) or `bloc' (Apple) tables.
+   *   A TrueType/OpenType subIndexTable as defined in the 'EBLC' (Microsoft)
+   *   or 'bloc' (Apple) tables.
    *
    * @fields:
    *   first_glyph ::
@@ -658,26 +572,25 @@
    *     The last glyph index in the range.
    *
    *   index_format ::
-   *     The format of index table.  Valid values are 1
-   *     to 5.
+   *     The format of index table.  Valid values are 1 to 5.
    *
    *   image_format ::
-   *     The format of `EBDT' image data.
+   *     The format of 'EBDT' image data.
    *
    *   image_offset ::
-   *     The offset to image data in `EBDT'.
+   *     The offset to image data in 'EBDT'.
    *
    *   image_size ::
-   *     For index formats 2 and 5.  This is the size in
-   *     bytes of each glyph bitmap.
+   *     For index formats 2 and 5.  This is the size in bytes of each glyph
+   *     bitmap.
    *
    *   big_metrics ::
-   *     For index formats 2 and 5.  This is the big
-   *     metrics for each glyph bitmap.
+   *     For index formats 2 and 5.  This is the big metrics for each glyph
+   *     bitmap.
    *
    *   num_glyphs ::
-   *     For index formats 4 and 5.  This is the number of
-   *     glyphs in the code array.
+   *     For index formats 4 and 5.  This is the number of glyphs in the code
+   *     array.
    *
    *   glyph_offsets ::
    *     For index formats 1 and 3.
@@ -686,8 +599,8 @@
    *     For index formats 4 and 5.
    *
    *   table_offset ::
-   *     The offset of the index table in the `EBLC'
-   *     table.  Only used during strike loading.
+   *     The offset of the index table in the 'EBLC' table.  Only used during
+   *     strike loading.
    */
   typedef struct  TT_SBit_RangeRec_
   {
@@ -716,8 +629,8 @@
    *   TT_SBit_StrikeRec
    *
    * @description:
-   *   A structure used describe a given bitmap strike in the `EBLC'
-   *   (Microsoft) or `bloc' (Apple) tables.
+   *   A structure used describe a given bitmap strike in the 'EBLC'
+   *   (Microsoft) or 'bloc' (Apple) tables.
    *
    * @fields:
    *  num_index_ranges ::
@@ -727,10 +640,9 @@
    *    An array of glyph index ranges.
    *
    *  color_ref ::
-   *    Unused.  `color_ref' is put in for future
-   *    enhancements, but these fields are already
-   *    in use by other platforms (e.g. Newton).
-   *    For details, please see
+   *    Unused.  `color_ref` is put in for future enhancements, but these
+   *    fields are already in use by other platforms (e.g. Newton).  For
+   *    details, please see
    *
    *    https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
    *
@@ -753,12 +665,10 @@
    *    The number of vertical pixels per EM.
    *
    *  bit_depth ::
-   *    The bit depth.  Valid values are 1, 2, 4,
-   *    and 8.
+   *    The bit depth.  Valid values are 1, 2, 4, and 8.
    *
    *  flags ::
-   *    Is this a vertical or horizontal strike?  For
-   *    details, please see
+   *    Is this a vertical or horizontal strike?  For details, please see
    *
    *    https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bloc.html
    */
@@ -818,8 +728,8 @@
    *   TT_SBit_ScaleRec
    *
    * @description:
-   *   A structure used describe a given bitmap scaling table, as defined
-   *   in the `EBSC' table.
+   *   A structure used describe a given bitmap scaling table, as defined in
+   *   the 'EBSC' table.
    *
    * @fields:
    *   hori ::
@@ -873,8 +783,8 @@
    *   TT_Post_20Rec
    *
    * @description:
-   *   Postscript names sub-table, format 2.0.  Stores the PS name of
-   *   each glyph in the font face.
+   *   Postscript names sub-table, format 2.0.  Stores the PS name of each
+   *   glyph in the font face.
    *
    * @fields:
    *   num_glyphs ::
@@ -905,16 +815,15 @@
    *   TT_Post_25Rec
    *
    * @description:
-   *   Postscript names sub-table, format 2.5.  Stores the PS name of
-   *   each glyph in the font face.
+   *   Postscript names sub-table, format 2.5.  Stores the PS name of each
+   *   glyph in the font face.
    *
    * @fields:
    *   num_glyphs ::
    *     The number of glyphs in the table.
    *
    *   offsets ::
-   *     An array of signed offsets in a normal Mac
-   *     Postscript name encoding.
+   *     An array of signed offsets in a normal Mac Postscript name encoding.
    */
   typedef struct  TT_Post_25_
   {
@@ -987,25 +896,25 @@
 
   /*
    * These types are used to support a `BDF ' table that isn't part of the
-   * official TrueType specification.  It is mainly used in SFNT-based
-   * bitmap fonts that were generated from a set of BDF fonts.
+   * official TrueType specification.  It is mainly used in SFNT-based bitmap
+   * fonts that were generated from a set of BDF fonts.
    *
    * The format of the table is as follows.
    *
-   *   USHORT   version      `BDF ' table version number, should be 0x0001.
-   *   USHORT   strikeCount  Number of strikes (bitmap sizes) in this table.
-   *   ULONG    stringTable  Offset (from start of BDF table) to string
+   *   USHORT version `BDF ' table version number, should be 0x0001.  USHORT
+   *   strikeCount Number of strikes (bitmap sizes) in this table.  ULONG
+   *   stringTable Offset (from start of BDF table) to string
    *                         table.
    *
    * This is followed by an array of `strikeCount' descriptors, having the
    * following format.
    *
-   *   USHORT   ppem         Vertical pixels per EM for this strike.
-   *   USHORT   numItems     Number of items for this strike (properties and
+   *   USHORT ppem Vertical pixels per EM for this strike.  USHORT numItems
+   *   Number of items for this strike (properties and
    *                         atoms).  Maximum is 255.
    *
-   * This array in turn is followed by `strikeCount' value sets.  Each
-   * `value set' is an array of `numItems' items with the following format.
+   * This array in turn is followed by `strikeCount' value sets.  Each `value
+   * set' is an array of `numItems' items with the following format.
    *
    *   ULONG    item_name    Offset in string table to item name.
    *   USHORT   item_type    The item type.  Possible values are
@@ -1058,8 +967,8 @@
    * This structure/class is defined here because it is common to the
    * following formats: TTF, OpenType-TT, and OpenType-CFF.
    *
-   * Note, however, that the classes TT_Size and TT_GlyphSlot are not
-   * shared between font drivers, and are thus defined in `ttobjs.h'.
+   * Note, however, that the classes TT_Size and TT_GlyphSlot are not shared
+   * between font drivers, and are thus defined in `ttobjs.h`.
    *
    */
 
@@ -1070,12 +979,11 @@
    *   TT_Face
    *
    * @description:
-   *   A handle to a TrueType face/font object.  A TT_Face encapsulates
-   *   the resolution and scaling independent parts of a TrueType font
-   *   resource.
+   *   A handle to a TrueType face/font object.  A TT_Face encapsulates the
+   *   resolution and scaling independent parts of a TrueType font resource.
    *
    * @note:
-   *   The TT_Face structure is also used as a `parent class' for the
+   *   The TT_Face structure is also used as a 'parent class' for the
    *   OpenType-CFF class (T2_Face).
    */
   typedef struct TT_FaceRec_*  TT_Face;
@@ -1109,8 +1017,7 @@
    *
    * @output:
    *   length ::
-   *     The length of the table in bytes.  Set to 0 if not
-   *     needed.
+   *     The length of the table in bytes.  Set to 0 if not needed.
    *
    * @return:
    *   FreeType error code.  0 means success.
@@ -1141,8 +1048,7 @@
    *     glyph index :: The index of the glyph to access.
    *
    *   offset ::
-   *     The offset of the glyph according to the
-   *     `locations' table.
+   *     The offset of the glyph according to the 'locations' table.
    *
    *   byte_count ::
    *     The size of the frame in bytes.
@@ -1152,8 +1058,8 @@
    *
    * @note:
    *   This function is normally equivalent to FT_STREAM_SEEK(offset)
-   *   followed by FT_FRAME_ENTER(byte_count) with the loader's stream,
-   *   but alternative formats (e.g. compressed ones) might use something
+   *   followed by FT_FRAME_ENTER(byte_count) with the loader's stream, but
+   *   alternative formats (e.g. compressed ones) might use something
    *   different.
    */
   typedef FT_Error
@@ -1169,8 +1075,8 @@
    *   TT_Loader_ReadGlyphFunc
    *
    * @description:
-   *   Reads one glyph element (its header, a simple glyph, or a
-   *   composite) from the loader's current stream frame.
+   *   Reads one glyph element (its header, a simple glyph, or a composite)
+   *   from the loader's current stream frame.
    *
    * @input:
    *   loader ::
@@ -1254,111 +1160,90 @@
    *
    * @fields:
    *   root ::
-   *     The base FT_Face structure, managed by the
-   *     base layer.
+   *     The base FT_Face structure, managed by the base layer.
    *
    *   ttc_header ::
-   *     The TrueType collection header, used when
-   *     the file is a `ttc' rather than a `ttf'.
-   *     For ordinary font files, the field
-   *     `ttc_header.count' is set to 0.
+   *     The TrueType collection header, used when the file is a 'ttc' rather
+   *     than a 'ttf'.  For ordinary font files, the field `ttc_header.count`
+   *     is set to 0.
    *
    *   format_tag ::
    *     The font format tag.
    *
    *   num_tables ::
-   *     The number of TrueType tables in this font
-   *     file.
+   *     The number of TrueType tables in this font file.
    *
    *   dir_tables ::
-   *     The directory of TrueType tables for this
-   *     font file.
+   *     The directory of TrueType tables for this font file.
    *
    *   header ::
-   *     The font's font header (`head' table).
-   *     Read on font opening.
+   *     The font's font header ('head' table).  Read on font opening.
    *
    *   horizontal ::
-   *     The font's horizontal header (`hhea'
-   *     table).  This field also contains the
-   *     associated horizontal metrics table
-   *     (`hmtx').
+   *     The font's horizontal header ('hhea' table).  This field also
+   *     contains the associated horizontal metrics table ('hmtx').
    *
    *   max_profile ::
-   *     The font's maximum profile table.  Read on
-   *     font opening.  Note that some maximum
-   *     values cannot be taken directly from this
-   *     table.  We thus define additional fields
-   *     below to hold the computed maxima.
+   *     The font's maximum profile table.  Read on font opening.  Note that
+   *     some maximum values cannot be taken directly from this table.  We
+   *     thus define additional fields below to hold the computed maxima.
    *
    *   vertical_info ::
-   *     A boolean which is set when the font file
-   *     contains vertical metrics.  If not, the
-   *     value of the `vertical' field is
-   *     undefined.
+   *     A boolean which is set when the font file contains vertical metrics.
+   *     If not, the value of the 'vertical' field is undefined.
    *
    *   vertical ::
-   *     The font's vertical header (`vhea' table).
-   *     This field also contains the associated
-   *     vertical metrics table (`vmtx'), if found.
-   *     IMPORTANT: The contents of this field is
-   *     undefined if the `vertical_info' field is
-   *     unset.
+   *     The font's vertical header ('vhea' table).  This field also contains
+   *     the associated vertical metrics table ('vmtx'), if found.
+   *     IMPORTANT: The contents of this field is undefined if the
+   *     `vertical_info` field is unset.
    *
    *   num_names ::
-   *     The number of name records within this
-   *     TrueType font.
+   *     The number of name records within this TrueType font.
    *
    *   name_table ::
-   *     The table of name records (`name').
+   *     The table of name records ('name').
    *
    *   os2 ::
-   *     The font's OS/2 table (`OS/2').
+   *     The font's OS/2 table ('OS/2').
    *
    *   postscript ::
-   *     The font's PostScript table (`post'
-   *     table).  The PostScript glyph names are
-   *     not loaded by the driver on face opening.
-   *     See the `ttpost' module for more details.
+   *     The font's PostScript table ('post' table).  The PostScript glyph
+   *     names are not loaded by the driver on face opening.  See the
+   *     'ttpost' module for more details.
    *
    *   cmap_table ::
-   *     Address of the face's `cmap' SFNT table
-   *     in memory (it's an extracted frame).
+   *     Address of the face's 'cmap' SFNT table in memory (it's an extracted
+   *     frame).
    *
    *   cmap_size ::
-   *     The size in bytes of the `cmap_table'
-   *     described above.
+   *     The size in bytes of the `cmap_table` described above.
    *
    *   goto_table ::
-   *     A function called by each TrueType table
-   *     loader to position a stream's cursor to
-   *     the start of a given table according to
-   *     its tag.  It defaults to TT_Goto_Face but
-   *     can be different for strange formats (e.g.
-   *     Type 42).
+   *     A function called by each TrueType table loader to position a
+   *     stream's cursor to the start of a given table according to its tag.
+   *     It defaults to TT_Goto_Face but can be different for strange formats
+   *     (e.g.  Type 42).
    *
    *   access_glyph_frame ::
-   *     A function used to access the frame of a
-   *     given glyph within the face's font file.
+   *     A function used to access the frame of a given glyph within the
+   *     face's font file.
    *
    *   forget_glyph_frame ::
-   *     A function used to forget the frame of a
-   *     given glyph when all data has been loaded.
+   *     A function used to forget the frame of a given glyph when all data
+   *     has been loaded.
    *
    *   read_glyph_header ::
-   *     A function used to read a glyph header.
-   *     It must be called between an `access' and
-   *     `forget'.
+   *     A function used to read a glyph header.  It must be called between
+   *     an 'access' and 'forget'.
    *
    *   read_simple_glyph ::
-   *     A function used to read a simple glyph.
-   *     It must be called after the header was
-   *     read, and before the `forget'.
+   *     A function used to read a simple glyph.  It must be called after the
+   *     header was read, and before the 'forget'.
    *
    *   read_composite_glyph ::
-   *     A function used to read a composite glyph.
-   *     It must be called after the header was
-   *     read, and before the `forget'.
+   *     A function used to read a composite glyph.  It must be called after
+   *     the header was read, and before the 'forget'.
    *
    *   sfnt ::
    *     A pointer to the SFNT service.
@@ -1370,38 +1255,33 @@
    *     A pointer to the Multiple Masters service.
    *
    *   var ::
-   *     A pointer to the Metrics Variations
-   *     service.
+   *     A pointer to the Metrics Variations service.
    *
    *   hdmx ::
-   *     The face's horizontal device metrics
-   *     (`hdmx' table).  This table is optional in
-   *     TrueType/OpenType fonts.
+   *     The face's horizontal device metrics ('hdmx' table).  This table is
+   *     optional in TrueType/OpenType fonts.
    *
    *   gasp ::
-   *     The grid-fitting and scaling properties
-   *     table (`gasp').  This table is optional in
-   *     TrueType/OpenType fonts.
+   *     The grid-fitting and scaling properties table ('gasp').  This table
+   *     is optional in TrueType/OpenType fonts.
    *
    *   pclt ::
-   *     The `pclt' SFNT table.
+   *     The 'pclt' SFNT table.
    *
    *   num_sbit_scales ::
    *     The number of sbit scales for this font.
    *
    *   sbit_scales ::
-   *     Array of sbit scales embedded in this
-   *     font.  This table is optional in a
-   *     TrueType/OpenType font.
+   *     Array of sbit scales embedded in this font.  This table is optional
+   *     in a TrueType/OpenType font.
    *
    *   postscript_names ::
-   *     A table used to store the Postscript names
-   *     of  the glyphs for this font.  See the
-   *     file  `ttconfig.h' for comments on the
+   *     A table used to store the Postscript names of the glyphs for this
+   *     font.  See the file `ttconfig.h` for comments on the
    *     TT_CONFIG_OPTION_POSTSCRIPT_NAMES option.
    *
    *   palette_data ::
-   *     Some fields from the `CPAL' table that are directly indexed.
+   *     Some fields from the 'CPAL' table that are directly indexed.
    *
    *   palette_index ::
    *     The current palette index, as set by @FT_Palette_Select.
@@ -1413,109 +1293,97 @@
    *     There was a call to @FT_Palette_Set_Foreground_Color.
    *
    *   foreground_color ::
-   *     The current foreground color corresponding to `CPAL' color index
-   *     0xFFFF.  Only valid if `have_foreground_color' is set.
+   *     The current foreground color corresponding to 'CPAL' color index
+   *     0xFFFF.  Only valid if `have_foreground_color` is set.
    *
    *   font_program_size ::
-   *     Size in bytecodes of the face's font
-   *     program.  0 if none defined.  Ignored for
-   *     Type 2 fonts.
-   *
-   *   font_program ::
-   *     The face's font program (bytecode stream)
-   *     executed at load time, also used during
-   *     glyph rendering.  Comes from the `fpgm'
-   *     table.  Ignored for Type 2 font fonts.
-   *
-   *   cvt_program_size ::
-   *     The size in bytecodes of the face's cvt
-   *     program.  Ignored for Type 2 fonts.
-   *
-   *   cvt_program ::
-   *     The face's cvt program (bytecode stream)
-   *     executed each time an instance/size is
-   *     changed/reset.  Comes from the `prep'
-   *     table.  Ignored for Type 2 fonts.
-   *
-   *   cvt_size ::
-   *     Size of the control value table (in
-   *     entries).   Ignored for Type 2 fonts.
-   *
-   *   cvt ::
-   *     The face's original control value table.
-   *     Coordinates are expressed in unscaled font
-   *     units.  Comes from the `cvt ' table.
+   *     Size in bytecodes of the face's font program.  0 if none defined.
    *     Ignored for Type 2 fonts.
    *
+   *   font_program ::
+   *     The face's font program (bytecode stream) executed at load time,
+   *     also used during glyph rendering.  Comes from the 'fpgm' table.
+   *     Ignored for Type 2 font fonts.
+   *
+   *   cvt_program_size ::
+   *     The size in bytecodes of the face's cvt program.  Ignored for Type 2
+   *     fonts.
+   *
+   *   cvt_program ::
+   *     The face's cvt program (bytecode stream) executed each time an
+   *     instance/size is changed/reset.  Comes from the 'prep' table.
+   *     Ignored for Type 2 fonts.
+   *
+   *   cvt_size ::
+   *     Size of the control value table (in entries).  Ignored for Type 2
+   *     fonts.
+   *
+   *   cvt ::
+   *     The face's original control value table.  Coordinates are expressed
+   *     in unscaled font units (in 26.6 format).  Comes from the 'cvt~'
+   *     table.  Ignored for Type 2 fonts.
+   *
+   *     If varied by the `CVAR' table, non-integer values are possible.
+   *
    *   interpreter ::
-   *     A pointer to the TrueType bytecode
-   *     interpreters field is also used to hook
-   *     the debugger in `ttdebug'.
+   *     A pointer to the TrueType bytecode interpreters field is also used
+   *     to hook the debugger in 'ttdebug'.
    *
    *   extra ::
    *     Reserved for third-party font drivers.
    *
    *   postscript_name ::
-   *     The PS name of the font.  Used by the
-   *     postscript name service.
+   *     The PS name of the font.  Used by the postscript name service.
    *
    *   glyf_len ::
-   *     The length of the `glyf' table.  Needed
-   *     for malformed `loca' tables.
+   *     The length of the 'glyf' table.  Needed for malformed 'loca' tables.
    *
    *   glyf_offset ::
-   *     The file offset of the `glyf' table.
+   *     The file offset of the 'glyf' table.
    *
    *   is_cff2 ::
    *     Set if the font format is CFF2.
    *
    *   doblend ::
-   *     A boolean which is set if the font should
-   *     be blended (this is for GX var).
+   *     A boolean which is set if the font should be blended (this is for GX
+   *     var).
    *
    *   blend ::
-   *     Contains the data needed to control GX
-   *     variation tables (rather like Multiple
-   *     Master data).
+   *     Contains the data needed to control GX variation tables (rather like
+   *     Multiple Master data).
    *
    *   variation_support ::
-   *     Flags that indicate which OpenType
-   *     functionality related to font variation
-   *     support is present, valid, and usable.
-   *     For example, TT_FACE_FLAG_VAR_FVAR is only
-   *     set if we have at least one design axis.
+   *     Flags that indicate which OpenType functionality related to font
+   *     variation support is present, valid, and usable.  For example,
+   *     TT_FACE_FLAG_VAR_FVAR is only set if we have at least one design
+   *     axis.
    *
    *   var_postscript_prefix ::
-   *     The PostScript name prefix needed for
-   *     constructing a variation font instance's
-   *     PS name .
+   *     The PostScript name prefix needed for constructing a variation font
+   *     instance's PS name .
    *
    *   var_postscript_prefix_len ::
-   *     The length of the `var_postscript_prefix'
-   *     string.
+   *     The length of the `var_postscript_prefix` string.
    *
    *   horz_metrics_size ::
-   *     The size of the `hmtx' table.
+   *     The size of the 'hmtx' table.
    *
    *   vert_metrics_size ::
-   *     The size of the `vmtx' table.
+   *     The size of the 'vmtx' table.
    *
    *   num_locations ::
-   *     The number of glyph locations in this
-   *     TrueType file.  This should be
-   *     identical to the number of glyphs.
-   *     Ignored for Type 2 fonts.
+   *     The number of glyph locations in this TrueType file.  This should be
+   *     identical to the number of glyphs.  Ignored for Type 2 fonts.
    *
    *   glyph_locations ::
-   *     An array of longs.  These are offsets to
-   *     glyph data within the `glyf' table.
-   *     Ignored for Type 2 font faces.
+   *     An array of longs.  These are offsets to glyph data within the
+   *     'glyf' table.  Ignored for Type 2 font faces.
    *
    *   hdmx_table ::
-   *     A pointer to the `hdmx' table.
+   *     A pointer to the 'hdmx' table.
    *
    *   hdmx_table_size ::
-   *     The size of the `hdmx' table.
+   *     The size of the 'hdmx' table.
    *
    *   hdmx_record_count ::
    *     The number of hdmx records.
@@ -1524,79 +1392,70 @@
    *     The size of a single hdmx record.
    *
    *   hdmx_record_sizes ::
-   *     An array holding the ppem sizes available
-   *     in the `hdmx' table.
+   *     An array holding the ppem sizes available in the 'hdmx' table.
    *
    *   sbit_table ::
-   *     A pointer to the font's embedded bitmap
-   *     location table.
+   *     A pointer to the font's embedded bitmap location table.
    *
    *   sbit_table_size ::
-   *     The size of `sbit_table'.
+   *     The size of `sbit_table`.
    *
    *   sbit_table_type ::
    *     The sbit table type (CBLC, sbix, etc.).
    *
    *   sbit_num_strikes ::
-   *     The number of sbit strikes exposed by
-   *     FreeType's API, omitting invalid strikes.
+   *     The number of sbit strikes exposed by FreeType's API, omitting
+   *     invalid strikes.
    *
    *   sbit_strike_map ::
-   *     A mapping between the strike indices
-   *     exposed by the API and the indices used in
-   *     the font's sbit table.
+   *     A mapping between the strike indices exposed by the API and the
+   *     indices used in the font's sbit table.
    *
    *   cpal ::
-   *     A pointer to data related to the `CPAL' table.  NULL if the table
+   *     A pointer to data related to the 'CPAL' table.  `NULL` if the table
    *     is not available.
    *
    *   colr ::
-   *     A pointer to data related to the `COLR' table.  NULL if the table
+   *     A pointer to data related to the 'COLR' table.  `NULL` if the table
    *     is not available.
    *
    *   kern_table ::
-   *     A pointer to the `kern' table.
+   *     A pointer to the 'kern' table.
    *
    *   kern_table_size ::
-   *     The size of the `kern' table.
+   *     The size of the 'kern' table.
    *
    *   num_kern_tables ::
-   *     The number of supported kern subtables
-   *     (up to 32; FreeType recognizes only
-   *     horizontal ones with format 0).
+   *     The number of supported kern subtables (up to 32; FreeType
+   *     recognizes only horizontal ones with format 0).
    *
    *   kern_avail_bits ::
-   *     The availability status of kern subtables;
-   *     if bit n is set, table n is available.
+   *     The availability status of kern subtables; if bit n is set, table n
+   *     is available.
    *
    *   kern_order_bits ::
-   *     The sortedness status of kern subtables;
-   *     if bit n is set, table n is sorted.
+   *     The sortedness status of kern subtables; if bit n is set, table n is
+   *     sorted.
    *
    *   bdf ::
-   *     Data related to an SFNT font's `bdf'
-   *     table; see `tttypes.h'.
+   *     Data related to an SFNT font's 'bdf' table; see `tttypes.h`.
    *
    *   horz_metrics_offset ::
-   *     The file offset of the `hmtx' table.
+   *     The file offset of the 'hmtx' table.
    *
    *   vert_metrics_offset ::
-   *     The file offset of the `vmtx' table.
+   *     The file offset of the 'vmtx' table.
    *
    *   sph_found_func_flags ::
-   *     Flags identifying special bytecode
-   *     functions (used by the v38 implementation
-   *     of the bytecode interpreter).
+   *     Flags identifying special bytecode functions (used by the v38
+   *     implementation of the bytecode interpreter).
    *
    *   sph_compatibility_mode ::
-   *     This flag is set if we are in ClearType
-   *     backward compatibility mode (used by the
-   *     v38 implementation of the bytecode
-   *     interpreter).
+   *     This flag is set if we are in ClearType backward compatibility mode
+   *     (used by the v38 implementation of the bytecode interpreter).
    *
    *   ebdt_start ::
-   *     The file offset of the sbit data table
-   *     (CBDT, bdat, etc.).
+   *     The file offset of the sbit data table (CBDT, bdat, etc.).
    *
    *   ebdt_size ::
    *     The size of the sbit data table.
@@ -1701,7 +1560,7 @@
 
     /* the original, unscaled, control value table */
     FT_ULong              cvt_size;
-    FT_Short*             cvt;
+    FT_Int32*             cvt;
 
     /* A pointer to the bytecode interpreter to use.  This is also */
     /* used to hook the debugger for the `ttdebug' utility.        */
@@ -1815,8 +1674,7 @@
    *     The current number of contours in the zone.
    *
    *   org ::
-   *     The original glyph coordinates (font
-   *     units/scaled).
+   *     The original glyph coordinates (font units/scaled).
    *
    *   cur ::
    *     The current glyph coordinates (scaled/hinted).
diff --git a/include/freetype/internal/wofftypes.h b/include/freetype/internal/wofftypes.h
new file mode 100644
index 0000000..ba55bf8
--- /dev/null
+++ b/include/freetype/internal/wofftypes.h
@@ -0,0 +1,112 @@
+/****************************************************************************
+ *
+ * wofftypes.h
+ *
+ *   Basic WOFF/WOFF2 type definitions and interface (specification
+ *   only).
+ *
+ * Copyright (C) 1996-2019 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 WOFFTYPES_H_
+#define WOFFTYPES_H_
+
+
+#include <ft2build.h>
+#include FT_TRUETYPE_TABLES_H
+#include FT_INTERNAL_OBJECTS_H
+
+
+FT_BEGIN_HEADER
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   WOFF_HeaderRec
+   *
+   * @description:
+   *   WOFF file format header.
+   *
+   * @fields:
+   *   See
+   *
+   *     https://www.w3.org/TR/WOFF/#WOFFHeader
+   */
+  typedef struct  WOFF_HeaderRec_
+  {
+    FT_ULong   signature;
+    FT_ULong   flavor;
+    FT_ULong   length;
+    FT_UShort  num_tables;
+    FT_UShort  reserved;
+    FT_ULong   totalSfntSize;
+    FT_UShort  majorVersion;
+    FT_UShort  minorVersion;
+    FT_ULong   metaOffset;
+    FT_ULong   metaLength;
+    FT_ULong   metaOrigLength;
+    FT_ULong   privOffset;
+    FT_ULong   privLength;
+
+  } WOFF_HeaderRec, *WOFF_Header;
+
+
+  /**************************************************************************
+   *
+   * @struct:
+   *   WOFF_TableRec
+   *
+   * @description:
+   *   This structure describes a given table of a WOFF font.
+   *
+   * @fields:
+   *   Tag ::
+   *     A four-bytes tag describing the table.
+   *
+   *   Offset ::
+   *     The offset of the table from the start of the WOFF font in its
+   *     resource.
+   *
+   *   CompLength ::
+   *     Compressed table length (in bytes).
+   *
+   *   OrigLength ::
+   *     Uncompressed table length (in bytes).
+   *
+   *   CheckSum ::
+   *     The table checksum.  This value can be ignored.
+   *
+   *   OrigOffset ::
+   *     The uncompressed table file offset.  This value gets computed while
+   *     constructing the (uncompressed) SFNT header.  It is not contained in
+   *     the WOFF file.
+   */
+  typedef struct  WOFF_TableRec_
+  {
+    FT_ULong  Tag;           /* table ID                  */
+    FT_ULong  Offset;        /* table file offset         */
+    FT_ULong  CompLength;    /* compressed table length   */
+    FT_ULong  OrigLength;    /* uncompressed table length */
+    FT_ULong  CheckSum;      /* uncompressed checksum     */
+
+    FT_ULong  OrigOffset;    /* uncompressed table file offset */
+                             /* (not in the WOFF file)         */
+  } WOFF_TableRec, *WOFF_Table;
+
+
+FT_END_HEADER
+
+#endif /* WOFFTYPES_H_ */
+
+
+/* END */
diff --git a/include/freetype/t1tables.h b/include/freetype/t1tables.h
index 784f1b9..645e645 100644
--- a/include/freetype/t1tables.h
+++ b/include/freetype/t1tables.h
@@ -5,7 +5,7 @@
  *   Basic Type 1/Type 2 tables definitions and interface (specification
  *   only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -118,9 +118,8 @@
    *   T1_FontInfo
    *
    * @description:
-   *   This type is equivalent to @PS_FontInfoRec.  It is deprecated but
-   *   kept to maintain source compatibility between various versions of
-   *   FreeType.
+   *   This type is equivalent to @PS_FontInfoRec.  It is deprecated but kept
+   *   to maintain source compatibility between various versions of FreeType.
    */
   typedef PS_FontInfoRec  T1_FontInfo;
 
@@ -131,9 +130,9 @@
    *   PS_PrivateRec
    *
    * @description:
-   *   A structure used to model a Type~1 or Type~2 private dictionary.
-   *   Note that for Multiple Master fonts, each instance has its own
-   *   Private dictionary.
+   *   A structure used to model a Type~1 or Type~2 private dictionary.  Note
+   *   that for Multiple Master fonts, each instance has its own Private
+   *   dictionary.
    */
   typedef struct  PS_PrivateRec_
   {
@@ -193,9 +192,8 @@
    *   T1_Private
    *
    * @description:
-   *  This type is equivalent to @PS_PrivateRec.  It is deprecated but
-   *  kept to maintain source compatibility between various versions of
-   *  FreeType.
+   *  This type is equivalent to @PS_PrivateRec.  It is deprecated but kept
+   *  to maintain source compatibility between various versions of FreeType.
    */
   typedef PS_PrivateRec  T1_Private;
 
@@ -206,9 +204,9 @@
    *   T1_Blend_Flags
    *
    * @description:
-   *   A set of flags used to indicate which fields are present in a
-   *   given blend dictionary (font info or private).  Used to support
-   *   Multiple Masters fonts.
+   *   A set of flags used to indicate which fields are present in a given
+   *   blend dictionary (font info or private).  Used to support Multiple
+   *   Masters fonts.
    *
    * @values:
    *   T1_BLEND_UNDERLINE_POSITION ::
@@ -252,7 +250,7 @@
 
 
   /* these constants are deprecated; use the corresponding */
-  /* `T1_Blend_Flags' values instead                       */
+  /* `T1_Blend_Flags` values instead                       */
 #define t1_blend_underline_position   T1_BLEND_UNDERLINE_POSITION
 #define t1_blend_underline_thickness  T1_BLEND_UNDERLINE_THICKNESS
 #define t1_blend_italic_angle         T1_BLEND_ITALIC_ANGLE
@@ -337,14 +335,14 @@
    *
    * @description:
    *   A structure used to represent data in a CID top-level dictionary.  In
-   *   most cases, they are part of the font's `/FDArray' array.  Within a
+   *   most cases, they are part of the font's '/FDArray' array.  Within a
    *   CID font file, such (internal) subfont dictionaries are enclosed by
-   *   `%ADOBeginFontDict' and `%ADOEndFontDict' comments.
+   *   '%ADOBeginFontDict' and '%ADOEndFontDict' comments.
    *
-   *   Note that `CID_FaceDictRec' misses a field for the `/FontName'
+   *   Note that `CID_FaceDictRec` misses a field for the '/FontName'
    *   keyword, specifying the subfont's name (the top-level font name is
-   *   given by the `/CIDFontName' keyword).  This is an oversight, but it
-   *   doesn't limit the `cid' font module's functionality because FreeType
+   *   given by the '/CIDFontName' keyword).  This is an oversight, but it
+   *   doesn't limit the 'cid' font module's functionality because FreeType
    *   neither needs this entry nor gives access to CID subfonts.
    */
   typedef struct  CID_FaceDictRec_
@@ -447,23 +445,21 @@
    *   CID_Info
    *
    * @description:
-   *  This type is equivalent to @CID_FaceInfoRec.  It is deprecated but
-   *  kept to maintain source compatibility between various versions of
-   *  FreeType.
+   *  This type is equivalent to @CID_FaceInfoRec.  It is deprecated but kept
+   *  to maintain source compatibility between various versions of FreeType.
    */
   typedef CID_FaceInfoRec  CID_Info;
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Has_PS_Glyph_Names
    *
    * @description:
-   *    Return true if a given face provides reliable PostScript glyph
-   *    names.  This is similar to using the @FT_HAS_GLYPH_NAMES macro,
-   *    except that certain fonts (mostly TrueType) contain incorrect
-   *    glyph name tables.
+   *    Return true if a given face provides reliable PostScript glyph names.
+   *    This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that
+   *    certain fonts (mostly TrueType) contain incorrect glyph name tables.
    *
    *    When this function returns true, the caller is sure that the glyph
    *    names returned by @FT_Get_Glyph_Name are reliable.
@@ -480,7 +476,7 @@
   FT_Has_PS_Glyph_Names( FT_Face  face );
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PS_Font_Info
@@ -501,12 +497,12 @@
    *    FreeType error code.  0~means success.
    *
    * @note:
-   *    String pointers within the @PS_FontInfoRec structure are owned by
-   *    the face and don't need to be freed by the caller.  Missing entries
-   *    in the font's FontInfo dictionary are represented by NULL pointers.
+   *    String pointers within the @PS_FontInfoRec structure are owned by the
+   *    face and don't need to be freed by the caller.  Missing entries in
+   *    the font's FontInfo dictionary are represented by `NULL` pointers.
    *
    *    If the font's format is not PostScript-based, this function will
-   *    return the `FT_Err_Invalid_Argument' error code.
+   *    return the `FT_Err_Invalid_Argument` error code.
    *
    */
   FT_EXPORT( FT_Error )
@@ -514,7 +510,7 @@
                        PS_FontInfo  afont_info );
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PS_Font_Private
@@ -539,7 +535,7 @@
    *    the face and don't need to be freed by the caller.
    *
    *    If the font's format is not PostScript-based, this function returns
-   *    the `FT_Err_Invalid_Argument' error code.
+   *    the `FT_Err_Invalid_Argument` error code.
    *
    */
   FT_EXPORT( FT_Error )
@@ -553,8 +549,7 @@
    *   T1_EncodingType
    *
    * @description:
-   *   An enumeration describing the `Encoding' entry in a Type 1
-   *   dictionary.
+   *   An enumeration describing the 'Encoding' entry in a Type 1 dictionary.
    *
    * @values:
    *   T1_ENCODING_TYPE_NONE ::
@@ -583,8 +578,8 @@
    *   PS_Dict_Keys
    *
    * @description:
-   *   An enumeration used in calls to @FT_Get_PS_Font_Value to identify
-   *   the Type~1 dictionary entry to retrieve.
+   *   An enumeration used in calls to @FT_Get_PS_Font_Value to identify the
+   *   Type~1 dictionary entry to retrieve.
    *
    * @values:
    *   PS_DICT_FONT_TYPE ::
@@ -696,7 +691,7 @@
   } PS_Dict_Keys;
 
 
-  /************************************************************************
+  /**************************************************************************
    *
    * @function:
    *    FT_Get_PS_Font_Value
@@ -725,38 +720,38 @@
    *      The value matching the above key, if it exists.
    *
    * @return:
-   *    The amount of memory (in bytes) required to hold the requested
-   *    value (if it exists, -1 otherwise).
+   *    The amount of memory (in bytes) required to hold the requested value
+   *    (if it exists, -1 otherwise).
    *
    * @note:
    *    The values returned are not pointers into the internal structures of
-   *    the face, but are `fresh' copies, so that the memory containing them
+   *    the face, but are 'fresh' copies, so that the memory containing them
    *    belongs to the calling application.  This also enforces the
-   *    `read-only' nature of these values, i.e., this function cannot be
+   *    'read-only' nature of these values, i.e., this function cannot be
    *    used to manipulate the face.
    *
-   *    `value' is a void pointer because the values returned can be of
+   *    `value` is a void pointer because the values returned can be of
    *    various types.
    *
-   *    If either `value' is NULL or `value_len' is too small, just the
+   *    If either `value` is `NULL` or `value_len` is too small, just the
    *    required memory size for the requested entry is returned.
    *
-   *    The `idx' parameter is used, not only to retrieve elements of, for
+   *    The `idx` parameter is used, not only to retrieve elements of, for
    *    example, the FontMatrix or FontBBox, but also to retrieve name keys
    *    from the CharStrings dictionary, and the charstrings themselves.  It
    *    is ignored for atomic values.
    *
-   *    PS_DICT_BLUE_SCALE returns a value that is scaled up by 1000.  To
-   *    get the value as in the font stream, you need to divide by
-   *    65536000.0 (to remove the FT_Fixed scale, and the x1000 scale).
+   *    `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000.  To
+   *    get the value as in the font stream, you need to divide by 65536000.0
+   *    (to remove the FT_Fixed scale, and the x1000 scale).
    *
    *    IMPORTANT: Only key/value pairs read by the FreeType interpreter can
-   *    be retrieved.  So, for example, PostScript procedures such as NP,
-   *    ND, and RD are not available.  Arbitrary keys are, obviously, not be
+   *    be retrieved.  So, for example, PostScript procedures such as NP, ND,
+   *    and RD are not available.  Arbitrary keys are, obviously, not be
    *    available either.
    *
    *    If the font's format is not PostScript-based, this function returns
-   *    the `FT_Err_Invalid_Argument' error code.
+   *    the `FT_Err_Invalid_Argument` error code.
    *
    * @since:
    *    2.4.8
diff --git a/include/freetype/ttnameid.h b/include/freetype/ttnameid.h
index f71516c..cc677de 100644
--- a/include/freetype/ttnameid.h
+++ b/include/freetype/ttnameid.h
@@ -4,7 +4,7 @@
  *
  *   TrueType name ID definitions (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,44 +35,45 @@
 
   /**************************************************************************
    *
-   * Possible values for the `platform' identifier code in the name
-   * records of an SFNT `name' table.
+   * Possible values for the 'platform' identifier code in the name records
+   * of an SFNT 'name' table.
    *
    */
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_PLATFORM_XXX
    *
    * @description:
-   *   A list of valid values for the `platform_id' identifier code in
+   *   A list of valid values for the `platform_id` identifier code in
    *   @FT_CharMapRec and @FT_SfntName structures.
    *
    * @values:
    *   TT_PLATFORM_APPLE_UNICODE ::
    *     Used by Apple to indicate a Unicode character map and/or name entry.
-   *     See @TT_APPLE_ID_XXX for corresponding `encoding_id' values.  Note
+   *     See @TT_APPLE_ID_XXX for corresponding `encoding_id` values.  Note
    *     that name entries in this format are coded as big-endian UCS-2
    *     character codes _only_.
    *
    *   TT_PLATFORM_MACINTOSH ::
-   *     Used by Apple to indicate a MacOS-specific charmap and/or name entry.
-   *     See @TT_MAC_ID_XXX for corresponding `encoding_id' values.  Note that
-   *     most TrueType fonts contain an Apple roman charmap to be usable on
-   *     MacOS systems (even if they contain a Microsoft charmap as well).
+   *     Used by Apple to indicate a MacOS-specific charmap and/or name
+   *     entry.  See @TT_MAC_ID_XXX for corresponding `encoding_id` values.
+   *     Note that most TrueType fonts contain an Apple roman charmap to be
+   *     usable on MacOS systems (even if they contain a Microsoft charmap as
+   *     well).
    *
    *   TT_PLATFORM_ISO ::
-   *     This value was used to specify ISO/IEC 10646 charmaps.  It is however
-   *     now deprecated.  See @TT_ISO_ID_XXX for a list of corresponding
-   *     `encoding_id' values.
+   *     This value was used to specify ISO/IEC 10646 charmaps.  It is
+   *     however now deprecated.  See @TT_ISO_ID_XXX for a list of
+   *     corresponding `encoding_id` values.
    *
    *   TT_PLATFORM_MICROSOFT ::
    *     Used by Microsoft to indicate Windows-specific charmaps.  See
-   *     @TT_MS_ID_XXX for a list of corresponding `encoding_id' values.
+   *     @TT_MS_ID_XXX for a list of corresponding `encoding_id` values.
    *     Note that most fonts contain a Unicode charmap using
-   *     (TT_PLATFORM_MICROSOFT, @TT_MS_ID_UNICODE_CS).
+   *     (`TT_PLATFORM_MICROSOFT`, @TT_MS_ID_UNICODE_CS).
    *
    *   TT_PLATFORM_CUSTOM ::
    *     Used to indicate application-specific charmaps.
@@ -91,13 +92,13 @@
 #define TT_PLATFORM_ADOBE          7 /* artificial */
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_APPLE_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `encoding_id' for
+   *   A list of valid values for the `encoding_id` for
    *   @TT_PLATFORM_APPLE_UNICODE charmaps and name entries.
    *
    * @values:
@@ -117,8 +118,8 @@
    *     Unicode 3.1 and beyond, using UTF-32.
    *
    *   TT_APPLE_ID_VARIANT_SELECTOR ::
-   *     From Adobe, not Apple.  Not a normal cmap.  Specifies variations
-   *     on a real cmap.
+   *     From Adobe, not Apple.  Not a normal cmap.  Specifies variations on
+   *     a real cmap.
    *
    *   TT_APPLE_ID_FULL_UNICODE ::
    *     Used for fallback fonts that provide complete Unicode coverage with
@@ -134,13 +135,13 @@
 #define TT_APPLE_ID_FULL_UNICODE      6 /* used with type 13 cmaps       */
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_MAC_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `encoding_id' for
+   *   A list of valid values for the `encoding_id` for
    *   @TT_PLATFORM_MACINTOSH charmaps and name entries.
    */
 
@@ -180,14 +181,14 @@
 #define TT_MAC_ID_UNINTERP             32
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_ISO_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_ISO charmaps and name entries.
+   *   A list of valid values for the `encoding_id` for @TT_PLATFORM_ISO
+   *   charmaps and name entries.
    *
    *   Their use is now deprecated.
    *
@@ -205,13 +206,13 @@
 #define TT_ISO_ID_8859_1      2
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_MS_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `encoding_id' for
+   *   A list of valid values for the `encoding_id` for
    *   @TT_PLATFORM_MICROSOFT charmaps and name entries.
    *
    * @values:
@@ -219,16 +220,15 @@
    *     Microsoft symbol encoding.  See @FT_ENCODING_MS_SYMBOL.
    *
    *   TT_MS_ID_UNICODE_CS ::
-   *     Microsoft WGL4 charmap, matching Unicode.  See
-   *     @FT_ENCODING_UNICODE.
+   *     Microsoft WGL4 charmap, matching Unicode.  See @FT_ENCODING_UNICODE.
    *
    *   TT_MS_ID_SJIS ::
    *     Shift JIS Japanese encoding.  See @FT_ENCODING_SJIS.
    *
    *   TT_MS_ID_PRC ::
    *     Chinese encodings as used in the People's Republic of China (PRC).
-   *     This means the encodings GB~2312 and its supersets GBK and
-   *     GB~18030.  See @FT_ENCODING_PRC.
+   *     This means the encodings GB~2312 and its supersets GBK and GB~18030.
+   *     See @FT_ENCODING_PRC.
    *
    *   TT_MS_ID_BIG_5 ::
    *     Traditional Chinese as used in Taiwan and Hong Kong.  See
@@ -258,14 +258,14 @@
 #define TT_MS_ID_GB2312  TT_MS_ID_PRC
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_ADOBE_ID_XXX
    *
    * @description:
-   *   A list of valid values for the `encoding_id' for
-   *   @TT_PLATFORM_ADOBE charmaps.  This is a FreeType-specific extension!
+   *   A list of valid values for the `encoding_id` for @TT_PLATFORM_ADOBE
+   *   charmaps.  This is a FreeType-specific extension!
    *
    * @values:
    *   TT_ADOBE_ID_STANDARD ::
@@ -284,14 +284,14 @@
 #define TT_ADOBE_ID_LATIN_1   3
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_MAC_LANGID_XXX
    *
    * @description:
    *   Possible values of the language identifier field in the name records
-   *   of the SFNT `name' table if the `platform' identifier code is
+   *   of the SFNT 'name' table if the 'platform' identifier code is
    *   @TT_PLATFORM_MACINTOSH.  These values are also used as return values
    *   for function @FT_Get_CMap_Language_ID.
    *
@@ -424,14 +424,14 @@
 #define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT    150
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_MS_LANGID_XXX
    *
    * @description:
    *   Possible values of the language identifier field in the name records
-   *   of the SFNT `name' table if the `platform' identifier code is
+   *   of the SFNT 'name' table if the 'platform' identifier code is
    *   @TT_PLATFORM_MICROSOFT.  These values are also used as return values
    *   for function @FT_Get_CMap_Language_ID.
    *
@@ -441,7 +441,7 @@
    *
    *   however, we only provide macros for language identifiers present in
    *   the OpenType specification: Microsoft has abandoned the concept of
-   *   LCIDs (language code identifiers), and format~1 of the `name' table
+   *   LCIDs (language code identifiers), and format~1 of the 'name' table
    *   provides a better mechanism for languages not covered here.
    *
    *   More legacy values not listed in the reference can be found in the
@@ -780,14 +780,14 @@
           TT_MS_LANGID_UIGHUR_PRC
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_NAME_ID_XXX
    *
    * @description:
-   *   Possible values of the `name' identifier field in the name records of
-   *   an SFNT `name' table.  These values are platform independent.
+   *   Possible values of the 'name' identifier field in the name records of
+   *   an SFNT 'name' table.  These values are platform independent.
    */
 
 #define TT_NAME_ID_COPYRIGHT              0
@@ -834,14 +834,14 @@
 #define TT_NAME_ID_PREFERRED_SUBFAMILY  TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
 
 
-  /***********************************************************************
+  /**************************************************************************
    *
    * @enum:
    *   TT_UCR_XXX
    *
    * @description:
-   *   Possible bit mask values for the `ulUnicodeRangeX' fields in an SFNT
-   *   `OS/2' table.
+   *   Possible bit mask values for the `ulUnicodeRangeX` fields in an SFNT
+   *   'OS/2' table.
    */
 
   /* ulUnicodeRange1 */
diff --git a/include/freetype/tttables.h b/include/freetype/tttables.h
index 8ecc8e2..d04f810 100644
--- a/include/freetype/tttables.h
+++ b/include/freetype/tttables.h
@@ -5,7 +5,7 @@
  *   Basic SFNT/TrueType tables definitions and interface
  *   (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -77,8 +77,10 @@
    *   TT_Header
    *
    * @description:
-   *   A structure to model a TrueType font header table.  All fields
-   *   follow the OpenType specification.
+   *   A structure to model a TrueType font header table.  All fields follow
+   *   the OpenType specification.  The 64-bit timestamps are stored in
+   *   two-element arrays `Created` and `Modified`, first the upper then
+   *   the lower 32~bits.
    */
   typedef struct  TT_Header_
   {
@@ -91,8 +93,8 @@
     FT_UShort  Flags;
     FT_UShort  Units_Per_EM;
 
-    FT_Long    Created [2];
-    FT_Long    Modified[2];
+    FT_ULong   Created [2];
+    FT_ULong   Modified[2];
 
     FT_Short   xMin;
     FT_Short   yMin;
@@ -115,76 +117,61 @@
    *   TT_HoriHeader
    *
    * @description:
-   *   A structure to model a TrueType horizontal header, the `hhea'
-   *   table, as well as the corresponding horizontal metrics table,
-   *   `hmtx'.
+   *   A structure to model a TrueType horizontal header, the 'hhea' table,
+   *   as well as the corresponding horizontal metrics table, 'hmtx'.
    *
    * @fields:
    *   Version ::
    *     The table version.
    *
    *   Ascender ::
-   *     The font's ascender, i.e., the distance
-   *     from the baseline to the top-most of all
-   *     glyph points found in the font.
+   *     The font's ascender, i.e., the distance from the baseline to the
+   *     top-most of all glyph points found in the font.
    *
-   *     This value is invalid in many fonts, as
-   *     it is usually set by the font designer,
-   *     and often reflects only a portion of the
-   *     glyphs found in the font (maybe ASCII).
+   *     This value is invalid in many fonts, as it is usually set by the
+   *     font designer, and often reflects only a portion of the glyphs found
+   *     in the font (maybe ASCII).
    *
-   *     You should use the `sTypoAscender' field
-   *     of the `OS/2' table instead if you want
-   *     the correct one.
+   *     You should use the `sTypoAscender` field of the 'OS/2' table instead
+   *     if you want the correct one.
    *
    *   Descender ::
-   *     The font's descender, i.e., the distance
-   *     from the baseline to the bottom-most of
-   *     all glyph points found in the font.  It
-   *     is negative.
+   *     The font's descender, i.e., the distance from the baseline to the
+   *     bottom-most of all glyph points found in the font.  It is negative.
    *
-   *     This value is invalid in many fonts, as
-   *     it is usually set by the font designer,
-   *     and often reflects only a portion of the
-   *     glyphs found in the font (maybe ASCII).
+   *     This value is invalid in many fonts, as it is usually set by the
+   *     font designer, and often reflects only a portion of the glyphs found
+   *     in the font (maybe ASCII).
    *
-   *     You should use the `sTypoDescender'
-   *     field of the `OS/2' table instead if you
-   *     want the correct one.
+   *     You should use the `sTypoDescender` field of the 'OS/2' table
+   *     instead if you want the correct one.
    *
    *   Line_Gap ::
-   *     The font's line gap, i.e., the distance
-   *     to add to the ascender and descender to
-   *     get the BTB, i.e., the
-   *     baseline-to-baseline distance for the
-   *     font.
+   *     The font's line gap, i.e., the distance to add to the ascender and
+   *     descender to get the BTB, i.e., the baseline-to-baseline distance
+   *     for the font.
    *
    *   advance_Width_Max ::
-   *     This field is the maximum of all advance
-   *     widths found in the font.  It can be
-   *     used to compute the maximum width of an
-   *     arbitrary string of text.
+   *     This field is the maximum of all advance widths found in the font.
+   *     It can be used to compute the maximum width of an arbitrary string
+   *     of text.
    *
    *   min_Left_Side_Bearing ::
-   *     The minimum left side bearing of all
-   *     glyphs within the font.
+   *     The minimum left side bearing of all glyphs within the font.
    *
    *   min_Right_Side_Bearing ::
-   *     The minimum right side bearing of all
-   *     glyphs within the font.
+   *     The minimum right side bearing of all glyphs within the font.
    *
    *   xMax_Extent ::
-   *     The maximum horizontal extent (i.e., the
-   *     `width' of a glyph's bounding box) for
-   *     all glyphs in the font.
+   *     The maximum horizontal extent (i.e., the 'width' of a glyph's
+   *     bounding box) for all glyphs in the font.
    *
    *   caret_Slope_Rise ::
-   *     The rise coefficient of the cursor's
-   *     slope of the cursor (slope=rise/run).
+   *     The rise coefficient of the cursor's slope of the cursor
+   *     (slope=rise/run).
    *
    *   caret_Slope_Run ::
-   *     The run coefficient of the cursor's
-   *     slope.
+   *     The run coefficient of the cursor's slope.
    *
    *   caret_Offset ::
    *     The cursor's offset for slanted fonts.
@@ -196,21 +183,20 @@
    *     Always~0.
    *
    *   number_Of_HMetrics ::
-   *     Number of HMetrics entries in the `hmtx'
-   *     table -- this value can be smaller than
-   *     the total number of glyphs in the font.
+   *     Number of HMetrics entries in the 'hmtx' table -- this value can be
+   *     smaller than the total number of glyphs in the font.
    *
    *   long_metrics ::
-   *     A pointer into the `hmtx' table.
+   *     A pointer into the 'hmtx' table.
    *
    *   short_metrics ::
-   *     A pointer into the `hmtx' table.
+   *     A pointer into the 'hmtx' table.
    *
    * @note:
-   *   For an OpenType variation font, the values of the following fields
-   *   can change after a call to @FT_Set_Var_Design_Coordinates (and
-   *   friends) if the font contains an `MVAR' table: `caret_Slope_Rise',
-   *   `caret_Slope_Run', and `caret_Offset'.
+   *   For an OpenType variation font, the values of the following fields can
+   *   change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+   *   the font contains an 'MVAR' table: `caret_Slope_Rise`,
+   *   `caret_Slope_Run`, and `caret_Offset`.
    */
   typedef struct  TT_HoriHeader_
   {
@@ -235,7 +221,7 @@
 
     /* The following fields are not defined by the OpenType specification */
     /* but they are used to connect the metrics header to the relevant    */
-    /* `hmtx' table.                                                      */
+    /* 'hmtx' table.                                                      */
 
     void*      long_metrics;
     void*      short_metrics;
@@ -249,78 +235,61 @@
    *   TT_VertHeader
    *
    * @description:
-   *   A structure used to model a TrueType vertical header, the `vhea'
-   *   table, as well as the corresponding vertical metrics table,
-   *   `vmtx'.
+   *   A structure used to model a TrueType vertical header, the 'vhea'
+   *   table, as well as the corresponding vertical metrics table, 'vmtx'.
    *
    * @fields:
    *   Version ::
    *     The table version.
    *
    *   Ascender ::
-   *     The font's ascender, i.e., the distance
-   *     from the baseline to the top-most of
-   *     all glyph points found in the font.
+   *     The font's ascender, i.e., the distance from the baseline to the
+   *     top-most of all glyph points found in the font.
    *
-   *     This value is invalid in many fonts, as
-   *     it is usually set by the font designer,
-   *     and often reflects only a portion of
-   *     the glyphs found in the font (maybe
-   *     ASCII).
+   *     This value is invalid in many fonts, as it is usually set by the
+   *     font designer, and often reflects only a portion of the glyphs found
+   *     in the font (maybe ASCII).
    *
-   *     You should use the `sTypoAscender'
-   *     field of the `OS/2' table instead if
-   *     you want the correct one.
+   *     You should use the `sTypoAscender` field of the 'OS/2' table instead
+   *     if you want the correct one.
    *
    *   Descender ::
-   *     The font's descender, i.e., the
-   *     distance from the baseline to the
-   *     bottom-most of all glyph points found
-   *     in the font.  It is negative.
+   *     The font's descender, i.e., the distance from the baseline to the
+   *     bottom-most of all glyph points found in the font.  It is negative.
    *
-   *     This value is invalid in many fonts, as
-   *     it is usually set by the font designer,
-   *     and often reflects only a portion of
-   *     the glyphs found in the font (maybe
-   *     ASCII).
+   *     This value is invalid in many fonts, as it is usually set by the
+   *     font designer, and often reflects only a portion of the glyphs found
+   *     in the font (maybe ASCII).
    *
-   *     You should use the `sTypoDescender'
-   *     field of the `OS/2' table instead if
-   *     you want the correct one.
+   *     You should use the `sTypoDescender` field of the 'OS/2' table
+   *     instead if you want the correct one.
    *
    *   Line_Gap ::
-   *     The font's line gap, i.e., the distance
-   *     to add to the ascender and descender to
-   *     get the BTB, i.e., the
-   *     baseline-to-baseline distance for the
-   *     font.
+   *     The font's line gap, i.e., the distance to add to the ascender and
+   *     descender to get the BTB, i.e., the baseline-to-baseline distance
+   *     for the font.
    *
    *   advance_Height_Max ::
-   *     This field is the maximum of all
-   *     advance heights found in the font.  It
-   *     can be used to compute the maximum
-   *     height of an arbitrary string of text.
+   *     This field is the maximum of all advance heights found in the font.
+   *     It can be used to compute the maximum height of an arbitrary string
+   *     of text.
    *
    *   min_Top_Side_Bearing ::
-   *     The minimum top side bearing of all
-   *     glyphs within the font.
+   *     The minimum top side bearing of all glyphs within the font.
    *
    *   min_Bottom_Side_Bearing ::
-   *     The minimum bottom side bearing of all
-   *     glyphs within the font.
+   *     The minimum bottom side bearing of all glyphs within the font.
    *
    *   yMax_Extent ::
-   *     The maximum vertical extent (i.e., the
-   *     `height' of a glyph's bounding box) for
-   *     all glyphs in the font.
+   *     The maximum vertical extent (i.e., the 'height' of a glyph's
+   *     bounding box) for all glyphs in the font.
    *
    *   caret_Slope_Rise ::
-   *     The rise coefficient of the cursor's
-   *     slope of the cursor (slope=rise/run).
+   *     The rise coefficient of the cursor's slope of the cursor
+   *     (slope=rise/run).
    *
    *   caret_Slope_Run ::
-   *     The run coefficient of the cursor's
-   *     slope.
+   *     The run coefficient of the cursor's slope.
    *
    *   caret_Offset ::
    *     The cursor's offset for slanted fonts.
@@ -332,23 +301,20 @@
    *     Always~0.
    *
    *   number_Of_VMetrics ::
-   *     Number of VMetrics entries in the
-   *     `vmtx' table -- this value can be
-   *     smaller than the total number of glyphs
-   *     in the font.
+   *     Number of VMetrics entries in the 'vmtx' table -- this value can be
+   *     smaller than the total number of glyphs in the font.
    *
    *   long_metrics ::
-   *     A pointer into the `vmtx' table.
+   *     A pointer into the 'vmtx' table.
    *
    *   short_metrics ::
-   *     A pointer into the `vmtx' table.
+   *     A pointer into the 'vmtx' table.
    *
    * @note:
-   *   For an OpenType variation font, the values of the following fields
-   *   can change after a call to @FT_Set_Var_Design_Coordinates (and
-   *   friends) if the font contains an `MVAR' table: `Ascender',
-   *   `Descender', `Line_Gap', `caret_Slope_Rise', `caret_Slope_Run',
-   *   and `caret_Offset'.
+   *   For an OpenType variation font, the values of the following fields can
+   *   change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+   *   the font contains an 'MVAR' table: `Ascender`, `Descender`,
+   *   `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`.
    */
   typedef struct  TT_VertHeader_
   {
@@ -373,7 +339,7 @@
 
     /* The following fields are not defined by the OpenType specification */
     /* but they are used to connect the metrics header to the relevant    */
-    /* `vmtx' table.                                                      */
+    /* 'vmtx' table.                                                      */
 
     void*      long_metrics;
     void*      short_metrics;
@@ -387,26 +353,24 @@
    *   TT_OS2
    *
    * @description:
-   *   A structure to model a TrueType `OS/2' table.  All fields comply
-   *   to the OpenType specification.
+   *   A structure to model a TrueType 'OS/2' table.  All fields comply to
+   *   the OpenType specification.
    *
-   *   Note that we now support old Mac fonts that do not include an
-   *   `OS/2' table.  In this case, the `version' field is always set to
-   *   0xFFFF.
+   *   Note that we now support old Mac fonts that do not include an 'OS/2'
+   *   table.  In this case, the `version` field is always set to 0xFFFF.
    *
    * @note:
-   *   For an OpenType variation font, the values of the following fields
-   *   can change after a call to @FT_Set_Var_Design_Coordinates (and
-   *   friends) if the font contains an `MVAR' table: `sCapHeight',
-   *   `sTypoAscender', `sTypoDescender', `sTypoLineGap', `sxHeight',
-   *   `usWinAscent', `usWinDescent', `yStrikeoutPosition',
-   *   `yStrikeoutSize', `ySubscriptXOffset', `ySubScriptXSize',
-   *   `ySubscriptYOffset', `ySubscriptYSize', `ySuperscriptXOffset',
-   *   `ySuperscriptXSize', `ySuperscriptYOffset', and
-   *   `ySuperscriptYSize'.
+   *   For an OpenType variation font, the values of the following fields can
+   *   change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+   *   the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`,
+   *   `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`,
+   *   `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`,
+   *   `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`,
+   *   `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`,
+   *   `ySuperscriptYOffset`, and `ySuperscriptYSize`.
    *
-   *   Possible values for bits in the `ulUnicodeRangeX' fields are given
-   *   by the @TT_UCR_XXX macros.
+   *   Possible values for bits in the `ulUnicodeRangeX` fields are given by
+   *   the @TT_UCR_XXX macros.
    */
 
   typedef struct  TT_OS2_
@@ -473,16 +437,16 @@
    *   TT_Postscript
    *
    * @description:
-   *   A structure to model a TrueType `post' table.  All fields comply
-   *   to the OpenType specification.  This structure does not reference
-   *   a font's PostScript glyph names; use @FT_Get_Glyph_Name to
-   *   retrieve them.
+   *   A structure to model a TrueType 'post' table.  All fields comply to
+   *   the OpenType specification.  This structure does not reference a
+   *   font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve
+   *   them.
    *
    * @note:
-   *   For an OpenType variation font, the values of the following fields
-   *   can change after a call to @FT_Set_Var_Design_Coordinates (and
-   *   friends) if the font contains an `MVAR' table: `underlinePosition'
-   *   and `underlineThickness'.
+   *   For an OpenType variation font, the values of the following fields can
+   *   change after a call to @FT_Set_Var_Design_Coordinates (and friends) if
+   *   the font contains an 'MVAR' table: `underlinePosition` and
+   *   `underlineThickness`.
    */
   typedef struct  TT_Postscript_
   {
@@ -496,7 +460,7 @@
     FT_ULong  minMemType1;
     FT_ULong  maxMemType1;
 
-    /* Glyph names follow in the `post' table, but we don't */
+    /* Glyph names follow in the 'post' table, but we don't */
     /* load them by default.                                */
 
   } TT_Postscript;
@@ -508,8 +472,8 @@
    *   TT_PCLT
    *
    * @description:
-   *   A structure to model a TrueType `PCLT' table.  All fields comply
-   *   to the OpenType specification.
+   *   A structure to model a TrueType 'PCLT' table.  All fields comply to
+   *   the OpenType specification.
    */
   typedef struct  TT_PCLT_
   {
@@ -538,75 +502,65 @@
    *   TT_MaxProfile
    *
    * @description:
-   *   The maximum profile (`maxp') table contains many max values, which
-   *   can be used to pre-allocate arrays for speeding up glyph loading
-   *   and hinting.
+   *   The maximum profile ('maxp') table contains many max values, which can
+   *   be used to pre-allocate arrays for speeding up glyph loading and
+   *   hinting.
    *
    * @fields:
    *   version ::
    *     The version number.
    *
    *   numGlyphs ::
-   *     The number of glyphs in this TrueType
-   *     font.
+   *     The number of glyphs in this TrueType font.
    *
    *   maxPoints ::
-   *     The maximum number of points in a
-   *     non-composite TrueType glyph.  See also
-   *     `maxCompositePoints'.
+   *     The maximum number of points in a non-composite TrueType glyph.  See
+   *     also `maxCompositePoints`.
    *
    *   maxContours ::
-   *     The maximum number of contours in a
-   *     non-composite TrueType glyph.  See also
-   *     `maxCompositeContours'.
+   *     The maximum number of contours in a non-composite TrueType glyph.
+   *     See also `maxCompositeContours`.
    *
    *   maxCompositePoints ::
-   *     The maximum number of points in a
-   *     composite TrueType glyph.  See also
-   *     `maxPoints'.
+   *     The maximum number of points in a composite TrueType glyph.  See
+   *     also `maxPoints`.
    *
    *   maxCompositeContours ::
-   *     The maximum number of contours in a
-   *     composite TrueType glyph.  See also
-   *     `maxContours'.
+   *     The maximum number of contours in a composite TrueType glyph.  See
+   *     also `maxContours`.
    *
    *   maxZones ::
-   *     The maximum number of zones used for
-   *     glyph hinting.
+   *     The maximum number of zones used for glyph hinting.
    *
    *   maxTwilightPoints ::
-   *     The maximum number of points in the
-   *     twilight zone used for glyph hinting.
+   *     The maximum number of points in the twilight zone used for glyph
+   *     hinting.
    *
    *   maxStorage ::
-   *     The maximum number of elements in the
-   *     storage area used for glyph hinting.
+   *     The maximum number of elements in the storage area used for glyph
+   *     hinting.
    *
    *   maxFunctionDefs ::
-   *     The maximum number of function
-   *     definitions in the TrueType bytecode for
-   *     this font.
+   *     The maximum number of function definitions in the TrueType bytecode
+   *     for this font.
    *
    *   maxInstructionDefs ::
-   *     The maximum number of instruction
-   *     definitions in the TrueType bytecode for
-   *     this font.
+   *     The maximum number of instruction definitions in the TrueType
+   *     bytecode for this font.
    *
    *   maxStackElements ::
-   *     The maximum number of stack elements used
-   *     during bytecode interpretation.
+   *     The maximum number of stack elements used during bytecode
+   *     interpretation.
    *
    *   maxSizeOfInstructions ::
-   *     The maximum number of TrueType opcodes
-   *     used for glyph hinting.
+   *     The maximum number of TrueType opcodes used for glyph hinting.
    *
    *   maxComponentElements ::
-   *     The maximum number of simple (i.e.,
-   *     non-composite) glyphs in a composite glyph.
+   *     The maximum number of simple (i.e., non-composite) glyphs in a
+   *     composite glyph.
    *
    *   maxComponentDepth ::
-   *     The maximum nesting depth of composite
-   *     glyphs.
+   *     The maximum nesting depth of composite glyphs.
    *
    * @note:
    *   This structure is only used during font loading.
@@ -638,8 +592,8 @@
    *   FT_Sfnt_Tag
    *
    * @description:
-   *   An enumeration to specify indices of SFNT tables loaded and parsed
-   *   by FreeType during initialization of an SFNT font.  Used in the
+   *   An enumeration to specify indices of SFNT tables loaded and parsed by
+   *   FreeType during initialization of an SFNT font.  Used in the
    *   @FT_Get_Sfnt_Table API function.
    *
    * @values:
@@ -678,7 +632,7 @@
 
   } FT_Sfnt_Tag;
 
-  /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag' */
+  /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */
   /* values instead                                                      */
 #define ft_sfnt_head  FT_SFNT_HEAD
 #define ft_sfnt_maxp  FT_SFNT_MAXP
@@ -705,30 +659,29 @@
    *     The index of the SFNT table.
    *
    * @return:
-   *   A type-less pointer to the table.  This will be NULL in case of
-   *   error, or if the corresponding table was not found *OR* loaded
-   *   from the file.
+   *   A type-less pointer to the table.  This will be `NULL` in case of
+   *   error, or if the corresponding table was not found **OR** loaded from
+   *   the file.
    *
-   *   Use a typecast according to `tag' to access the structure
-   *   elements.
+   *   Use a typecast according to `tag` to access the structure elements.
    *
    * @note:
    *   The table is owned by the face object and disappears with it.
    *
-   *   This function is only useful to access SFNT tables that are loaded
-   *   by the sfnt, truetype, and opentype drivers.  See @FT_Sfnt_Tag for
-   *   a list.
+   *   This function is only useful to access SFNT tables that are loaded by
+   *   the sfnt, truetype, and opentype drivers.  See @FT_Sfnt_Tag for a
+   *   list.
    *
    * @example:
-   *   Here an example how to access the `vhea' table.
+   *   Here is an example demonstrating access to the 'vhea' table.
    *
-   *   {
+   *   ```
    *     TT_VertHeader*  vert_header;
    *
    *
    *     vert_header =
    *       (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA );
-   *   }
+   *   ```
    */
   FT_EXPORT( void* )
   FT_Get_Sfnt_Table( FT_Face      face,
@@ -748,8 +701,8 @@
    *     A handle to the source face.
    *
    *   tag ::
-   *     The four-byte tag of the table to load.  Use value~0 if you want
-   *     to access the whole font file.  Otherwise, you can use one of the
+   *     The four-byte tag of the table to load.  Use value~0 if you want to
+   *     access the whole font file.  Otherwise, you can use one of the
    *     definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new
    *     one with @FT_MAKE_TAG.
    *
@@ -763,10 +716,10 @@
    *
    * @inout:
    *   length ::
-   *     If the `length' parameter is NULL, try to load the whole table.
+   *     If the `length` parameter is `NULL`, try to load the whole table.
    *     Return an error code if it fails.
    *
-   *     Else, if `*length' is~0, exit immediately while returning the
+   *     Else, if `*length` is~0, exit immediately while returning the
    *     table's (or file) full size in it.
    *
    *     Else the number of bytes to read from the table or file, from the
@@ -777,9 +730,9 @@
    *
    * @note:
    *   If you need to determine the table's length you should first call this
-   *   function with `*length' set to~0, as in the following example:
+   *   function with `*length` set to~0, as in the following example:
    *
-   *   {
+   *   ```
    *     FT_ULong  length = 0;
    *
    *
@@ -791,7 +744,7 @@
    *
    *     error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length );
    *     if ( error ) { ... could not load table ... }
-   *   }
+   *   ```
    *
    *   Note that structures like @TT_Header or @TT_OS2 can't be used with
    *   this function; they are limited to @FT_Get_Sfnt_Table.  Reason is that
@@ -825,14 +778,14 @@
    *
    * @inout:
    *   tag ::
-   *     The name tag of the SFNT table.  If the value is NULL, `table_index'
-   *     is ignored, and `length' returns the number of SFNT tables in the
-   *     font.
+   *     The name tag of the SFNT table.  If the value is `NULL`,
+   *     `table_index` is ignored, and `length` returns the number of SFNT
+   *     tables in the font.
    *
    * @output:
    *   length ::
-   *     The length of the SFNT table (or the number of SFNT tables, depending
-   *     on `tag').
+   *     The length of the SFNT table (or the number of SFNT tables,
+   *     depending on `tag`).
    *
    * @return:
    *   FreeType error code.  0~means success.
@@ -863,8 +816,8 @@
    *     The target charmap.
    *
    * @return:
-   *   The language ID of `charmap'.  If `charmap' doesn't belong to an
-   *   SFNT face, just return~0 as the default value.
+   *   The language ID of `charmap`.  If `charmap` doesn't belong to an SFNT
+   *   face, just return~0 as the default value.
    *
    *   For a format~14 cmap (to access Unicode IVS), the return value is
    *   0xFFFFFFFF.
@@ -879,15 +832,15 @@
    *   FT_Get_CMap_Format
    *
    * @description:
-   *   Return the format of an SFNT `cmap' table.
+   *   Return the format of an SFNT 'cmap' table.
    *
    * @input:
    *   charmap ::
    *     The target charmap.
    *
    * @return:
-   *   The format of `charmap'.  If `charmap' doesn't belong to an SFNT
-   *   face, return -1.
+   *   The format of `charmap`.  If `charmap` doesn't belong to an SFNT face,
+   *   return -1.
    */
   FT_EXPORT( FT_Long )
   FT_Get_CMap_Format( FT_CharMap  charmap );
diff --git a/include/freetype/tttags.h b/include/freetype/tttags.h
index 5e5d783..bd0986e 100644
--- a/include/freetype/tttags.h
+++ b/include/freetype/tttags.h
@@ -4,7 +4,7 @@
  *
  *   Tags for TrueType and OpenType tables (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/include/ft2build.h b/include/ft2build.h
index 97dbd3c..e3f4887 100644
--- a/include/ft2build.h
+++ b/include/ft2build.h
@@ -4,7 +4,7 @@
  *
  *   FreeType 2 build and setup macros.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -18,17 +18,17 @@
 
   /**************************************************************************
    *
-   * This is the `entry point' for FreeType header file inclusions.  It is
+   * This is the 'entry point' for FreeType header file inclusions.  It is
    * the only header file which should be included directly; all other
    * FreeType header files should be accessed with macro names (after
-   * including `ft2build.h').
+   * including `ft2build.h`).
    *
    * A typical example is
    *
-   * {
+   * ```
    *   #include <ft2build.h>
    *   #include FT_FREETYPE_H
-   * }
+   * ```
    *
    */
 
diff --git a/modules.cfg b/modules.cfg
index c46e619..dc6c8d4 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -1,6 +1,6 @@
 # modules.cfg
 #
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/Jamfile b/src/Jamfile
index 562480c..3ad2d5c 100644
--- a/src/Jamfile
+++ b/src/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/autofit/Jamfile b/src/autofit/Jamfile
index 01b866e..ea69dee 100644
--- a/src/autofit/Jamfile
+++ b/src/autofit/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/autofit Jamfile
 #
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/autofit/afangles.c b/src/autofit/afangles.c
index f7b1c2c..9e1f7a2 100644
--- a/src/autofit/afangles.c
+++ b/src/autofit/afangles.c
@@ -5,7 +5,7 @@
  *   Routines used to compute vector angles with limited accuracy
  *   and very high speed.  It also contains sorting routines (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afblue.c b/src/autofit/afblue.c
index 9b0ac13..b99dbeb 100644
--- a/src/autofit/afblue.c
+++ b/src/autofit/afblue.c
@@ -7,7 +7,7 @@
  *
  *   Auto-fitter data for blue strings (body).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -296,6 +296,10 @@
     '\0',
     '\xE0', '\xB4', '\x9F', ' ', '\xE0', '\xB4', '\xA0', ' ', '\xE0', '\xB4', '\xA7', ' ', '\xE0', '\xB4', '\xB6', ' ', '\xE0', '\xB4', '\x98', ' ', '\xE0', '\xB4', '\x9A', ' ', '\xE0', '\xB4', '\xA5', ' ', '\xE0', '\xB4', '\xB2',  /* ട ഠ ധ ശ ഘ ച ഥ ല */
     '\0',
+    '\xE1', '\xA0', '\xB3', ' ', '\xE1', '\xA0', '\xB4', ' ', '\xE1', '\xA0', '\xB6', ' ', '\xE1', '\xA0', '\xBD', ' ', '\xE1', '\xA1', '\x82', ' ', '\xE1', '\xA1', '\x8A', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xA1', '\xE2', '\x80', '\x8D', ' ', '\xE2', '\x80', '\x8D', '\xE1', '\xA1', '\xB3', '\xE2', '\x80', '\x8D',  /* ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍ */
+    '\0',
+    '\xE1', '\xA1', '\x83',  /* ᡃ */
+    '\0',
     '\xE1', '\x80', '\x81', ' ', '\xE1', '\x80', '\x82', ' ', '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\xA5', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B',  /* ခ ဂ င ဒ ဝ ၥ ၊ ။ */
     '\0',
     '\xE1', '\x80', '\x84', ' ', '\xE1', '\x80', '\x8E', ' ', '\xE1', '\x80', '\x92', ' ', '\xE1', '\x80', '\x95', ' ', '\xE1', '\x80', '\x97', ' ', '\xE1', '\x80', '\x9D', ' ', '\xE1', '\x81', '\x8A', ' ', '\xE1', '\x81', '\x8B',  /* င ဎ ဒ ပ ဗ ဝ ၊ ။ */
@@ -649,6 +653,9 @@
     { AF_BLUE_STRING_MALAYALAM_TOP,    AF_BLUE_PROPERTY_LATIN_TOP },
     { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          },
     { AF_BLUE_STRING_MAX,              0                          },
+    { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP },
+    { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          },
+    { AF_BLUE_STRING_MAX,                   0                          },
     { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   },
     { AF_BLUE_STRING_MYANMAR_BOTTOM,    0                                 },
diff --git a/src/autofit/afblue.cin b/src/autofit/afblue.cin
index b7437e3..6545d1f 100644
--- a/src/autofit/afblue.cin
+++ b/src/autofit/afblue.cin
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter data for blue strings (body).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afblue.dat b/src/autofit/afblue.dat
index 1b8d5d7..46db43f 100644
--- a/src/autofit/afblue.dat
+++ b/src/autofit/afblue.dat
@@ -2,7 +2,7 @@
 //
 //   Auto-fitter data for blue strings.
 //
-// Copyright 2013-2018 by
+// Copyright (C) 2013-2019 by
 // David Turner, Robert Wilhelm, and Werner Lemberg.
 //
 // This file is part of the FreeType project, and may only be used,
@@ -392,6 +392,11 @@
   AF_BLUE_STRING_MALAYALAM_BOTTOM
     "ട ഠ ധ ശ ഘ ച ഥ ല"
 
+  AF_BLUE_STRING_MONGOLIAN_TOP_BASE
+    "ᠳ ᠴ ᠶ ᠽ ᡂ ᡊ ‍ᡡ‍ ‍ᡳ‍"
+  AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE
+    "ᡃ"
+
   AF_BLUE_STRING_MYANMAR_TOP
     "ခ ဂ င ဒ ဝ ၥ ၊ ။"
   AF_BLUE_STRING_MYANMAR_BOTTOM
@@ -947,6 +952,11 @@
     { AF_BLUE_STRING_MALAYALAM_BOTTOM, 0                          }
     { AF_BLUE_STRING_MAX,              0                          }
 
+  AF_BLUE_STRINGSET_MONG
+    { AF_BLUE_STRING_MONGOLIAN_TOP_BASE,    AF_BLUE_PROPERTY_LATIN_TOP }
+    { AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE, 0                          }
+    { AF_BLUE_STRING_MAX,                   0                          }
+
   AF_BLUE_STRINGSET_MYMR
     { AF_BLUE_STRING_MYANMAR_TOP,       AF_BLUE_PROPERTY_LATIN_TOP      |
                                         AF_BLUE_PROPERTY_LATIN_X_HEIGHT   }
diff --git a/src/autofit/afblue.h b/src/autofit/afblue.h
index 1fbadbe..b69b1df 100644
--- a/src/autofit/afblue.h
+++ b/src/autofit/afblue.h
@@ -7,7 +7,7 @@
  *
  *   Auto-fitter data for blue strings (specification).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -212,56 +212,58 @@
     AF_BLUE_STRING_LISU_BOTTOM = 3506,
     AF_BLUE_STRING_MALAYALAM_TOP = 3538,
     AF_BLUE_STRING_MALAYALAM_BOTTOM = 3582,
-    AF_BLUE_STRING_MYANMAR_TOP = 3614,
-    AF_BLUE_STRING_MYANMAR_BOTTOM = 3646,
-    AF_BLUE_STRING_MYANMAR_ASCENDER = 3678,
-    AF_BLUE_STRING_MYANMAR_DESCENDER = 3706,
-    AF_BLUE_STRING_NKO_TOP = 3738,
-    AF_BLUE_STRING_NKO_BOTTOM = 3762,
-    AF_BLUE_STRING_NKO_SMALL_TOP = 3777,
-    AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3786,
-    AF_BLUE_STRING_OL_CHIKI = 3798,
-    AF_BLUE_STRING_OLD_TURKIC_TOP = 3822,
-    AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3837,
-    AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3857,
-    AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3897,
-    AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3927,
-    AF_BLUE_STRING_OSAGE_SMALL_TOP = 3942,
-    AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 3982,
-    AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4022,
-    AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4047,
-    AF_BLUE_STRING_OSMANYA_TOP = 4062,
-    AF_BLUE_STRING_OSMANYA_BOTTOM = 4102,
-    AF_BLUE_STRING_SAURASHTRA_TOP = 4142,
-    AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4174,
-    AF_BLUE_STRING_SHAVIAN_TOP = 4194,
-    AF_BLUE_STRING_SHAVIAN_BOTTOM = 4204,
-    AF_BLUE_STRING_SHAVIAN_DESCENDER = 4229,
-    AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4239,
-    AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4274,
-    AF_BLUE_STRING_SINHALA_TOP = 4289,
-    AF_BLUE_STRING_SINHALA_BOTTOM = 4321,
-    AF_BLUE_STRING_SINHALA_DESCENDER = 4353,
-    AF_BLUE_STRING_SUNDANESE_TOP = 4397,
-    AF_BLUE_STRING_SUNDANESE_BOTTOM = 4421,
-    AF_BLUE_STRING_SUNDANESE_DESCENDER = 4453,
-    AF_BLUE_STRING_TAI_VIET_TOP = 4461,
-    AF_BLUE_STRING_TAI_VIET_BOTTOM = 4481,
-    AF_BLUE_STRING_TAMIL_TOP = 4493,
-    AF_BLUE_STRING_TAMIL_BOTTOM = 4525,
-    AF_BLUE_STRING_TELUGU_TOP = 4557,
-    AF_BLUE_STRING_TELUGU_BOTTOM = 4585,
-    AF_BLUE_STRING_THAI_TOP = 4613,
-    AF_BLUE_STRING_THAI_BOTTOM = 4637,
-    AF_BLUE_STRING_THAI_ASCENDER = 4665,
-    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4677,
-    AF_BLUE_STRING_THAI_DESCENDER = 4689,
-    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4705,
-    AF_BLUE_STRING_THAI_DIGIT_TOP = 4713,
-    AF_BLUE_STRING_TIFINAGH = 4725,
-    AF_BLUE_STRING_VAI_TOP = 4757,
-    AF_BLUE_STRING_VAI_BOTTOM = 4789,
-    af_blue_1_1 = 4820,
+    AF_BLUE_STRING_MONGOLIAN_TOP_BASE = 3614,
+    AF_BLUE_STRING_MONGOLIAN_BOTTOM_BASE = 3658,
+    AF_BLUE_STRING_MYANMAR_TOP = 3662,
+    AF_BLUE_STRING_MYANMAR_BOTTOM = 3694,
+    AF_BLUE_STRING_MYANMAR_ASCENDER = 3726,
+    AF_BLUE_STRING_MYANMAR_DESCENDER = 3754,
+    AF_BLUE_STRING_NKO_TOP = 3786,
+    AF_BLUE_STRING_NKO_BOTTOM = 3810,
+    AF_BLUE_STRING_NKO_SMALL_TOP = 3825,
+    AF_BLUE_STRING_NKO_SMALL_BOTTOM = 3834,
+    AF_BLUE_STRING_OL_CHIKI = 3846,
+    AF_BLUE_STRING_OLD_TURKIC_TOP = 3870,
+    AF_BLUE_STRING_OLD_TURKIC_BOTTOM = 3885,
+    AF_BLUE_STRING_OSAGE_CAPITAL_TOP = 3905,
+    AF_BLUE_STRING_OSAGE_CAPITAL_BOTTOM = 3945,
+    AF_BLUE_STRING_OSAGE_CAPITAL_DESCENDER = 3975,
+    AF_BLUE_STRING_OSAGE_SMALL_TOP = 3990,
+    AF_BLUE_STRING_OSAGE_SMALL_BOTTOM = 4030,
+    AF_BLUE_STRING_OSAGE_SMALL_ASCENDER = 4070,
+    AF_BLUE_STRING_OSAGE_SMALL_DESCENDER = 4095,
+    AF_BLUE_STRING_OSMANYA_TOP = 4110,
+    AF_BLUE_STRING_OSMANYA_BOTTOM = 4150,
+    AF_BLUE_STRING_SAURASHTRA_TOP = 4190,
+    AF_BLUE_STRING_SAURASHTRA_BOTTOM = 4222,
+    AF_BLUE_STRING_SHAVIAN_TOP = 4242,
+    AF_BLUE_STRING_SHAVIAN_BOTTOM = 4252,
+    AF_BLUE_STRING_SHAVIAN_DESCENDER = 4277,
+    AF_BLUE_STRING_SHAVIAN_SMALL_TOP = 4287,
+    AF_BLUE_STRING_SHAVIAN_SMALL_BOTTOM = 4322,
+    AF_BLUE_STRING_SINHALA_TOP = 4337,
+    AF_BLUE_STRING_SINHALA_BOTTOM = 4369,
+    AF_BLUE_STRING_SINHALA_DESCENDER = 4401,
+    AF_BLUE_STRING_SUNDANESE_TOP = 4445,
+    AF_BLUE_STRING_SUNDANESE_BOTTOM = 4469,
+    AF_BLUE_STRING_SUNDANESE_DESCENDER = 4501,
+    AF_BLUE_STRING_TAI_VIET_TOP = 4509,
+    AF_BLUE_STRING_TAI_VIET_BOTTOM = 4529,
+    AF_BLUE_STRING_TAMIL_TOP = 4541,
+    AF_BLUE_STRING_TAMIL_BOTTOM = 4573,
+    AF_BLUE_STRING_TELUGU_TOP = 4605,
+    AF_BLUE_STRING_TELUGU_BOTTOM = 4633,
+    AF_BLUE_STRING_THAI_TOP = 4661,
+    AF_BLUE_STRING_THAI_BOTTOM = 4685,
+    AF_BLUE_STRING_THAI_ASCENDER = 4713,
+    AF_BLUE_STRING_THAI_LARGE_ASCENDER = 4725,
+    AF_BLUE_STRING_THAI_DESCENDER = 4737,
+    AF_BLUE_STRING_THAI_LARGE_DESCENDER = 4753,
+    AF_BLUE_STRING_THAI_DIGIT_TOP = 4761,
+    AF_BLUE_STRING_TIFINAGH = 4773,
+    AF_BLUE_STRING_VAI_TOP = 4805,
+    AF_BLUE_STRING_VAI_BOTTOM = 4837,
+    af_blue_1_1 = 4868,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRING_CJK_TOP = af_blue_1_1 + 1,
     AF_BLUE_STRING_CJK_BOTTOM = af_blue_1_1 + 203,
@@ -355,24 +357,25 @@
     AF_BLUE_STRINGSET_LATP = 166,
     AF_BLUE_STRINGSET_LISU = 173,
     AF_BLUE_STRINGSET_MLYM = 176,
-    AF_BLUE_STRINGSET_MYMR = 179,
-    AF_BLUE_STRINGSET_NKOO = 184,
-    AF_BLUE_STRINGSET_NONE = 189,
-    AF_BLUE_STRINGSET_OLCK = 190,
-    AF_BLUE_STRINGSET_ORKH = 193,
-    AF_BLUE_STRINGSET_OSGE = 196,
-    AF_BLUE_STRINGSET_OSMA = 204,
-    AF_BLUE_STRINGSET_SAUR = 207,
-    AF_BLUE_STRINGSET_SHAW = 210,
-    AF_BLUE_STRINGSET_SINH = 216,
-    AF_BLUE_STRINGSET_SUND = 220,
-    AF_BLUE_STRINGSET_TAML = 224,
-    AF_BLUE_STRINGSET_TAVT = 227,
-    AF_BLUE_STRINGSET_TELU = 230,
-    AF_BLUE_STRINGSET_TFNG = 233,
-    AF_BLUE_STRINGSET_THAI = 236,
-    AF_BLUE_STRINGSET_VAII = 244,
-    af_blue_2_1 = 247,
+    AF_BLUE_STRINGSET_MONG = 179,
+    AF_BLUE_STRINGSET_MYMR = 182,
+    AF_BLUE_STRINGSET_NKOO = 187,
+    AF_BLUE_STRINGSET_NONE = 192,
+    AF_BLUE_STRINGSET_OLCK = 193,
+    AF_BLUE_STRINGSET_ORKH = 196,
+    AF_BLUE_STRINGSET_OSGE = 199,
+    AF_BLUE_STRINGSET_OSMA = 207,
+    AF_BLUE_STRINGSET_SAUR = 210,
+    AF_BLUE_STRINGSET_SHAW = 213,
+    AF_BLUE_STRINGSET_SINH = 219,
+    AF_BLUE_STRINGSET_SUND = 223,
+    AF_BLUE_STRINGSET_TAML = 227,
+    AF_BLUE_STRINGSET_TAVT = 230,
+    AF_BLUE_STRINGSET_TELU = 233,
+    AF_BLUE_STRINGSET_TFNG = 236,
+    AF_BLUE_STRINGSET_THAI = 239,
+    AF_BLUE_STRINGSET_VAII = 247,
+    af_blue_2_1 = 250,
 #ifdef AF_CONFIG_OPTION_CJK
     AF_BLUE_STRINGSET_HANI = af_blue_2_1 + 0,
     af_blue_2_1_1 = af_blue_2_1 + 2,
diff --git a/src/autofit/afblue.hin b/src/autofit/afblue.hin
index 3f1d311..30a28da 100644
--- a/src/autofit/afblue.hin
+++ b/src/autofit/afblue.hin
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter data for blue strings (specification).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afcjk.c b/src/autofit/afcjk.c
index dc38153..a61689b 100644
--- a/src/autofit/afcjk.c
+++ b/src/autofit/afcjk.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for CJK writing system (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,7 +50,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afcjk
+#define FT_COMPONENT  afcjk
 
 
   /*************************************************************************/
@@ -1184,6 +1184,8 @@
 
 
         seg = edge->first;
+        if ( !seg )
+          goto Skip_Loop;
 
         do
         {
@@ -1198,7 +1200,7 @@
 
           /* check for links -- if seg->serif is set, then seg->link must */
           /* be ignored                                                   */
-          is_serif = (FT_Bool)( seg->serif && seg->serif->edge != edge );
+          is_serif = FT_BOOL( seg->serif && seg->serif->edge != edge );
 
           if ( seg->link || is_serif )
           {
@@ -1239,13 +1241,14 @@
               edge2->flags |= AF_EDGE_SERIF;
             }
             else
-              edge->link  = edge2;
+              edge->link = edge2;
           }
 
           seg = seg->edge_next;
 
         } while ( seg != edge->first );
 
+      Skip_Loop:
         /* set the round/straight flags */
         edge->flags = AF_EDGE_NORMAL;
 
diff --git a/src/autofit/afcjk.h b/src/autofit/afcjk.h
index 707271b..59acae5 100644
--- a/src/autofit/afcjk.h
+++ b/src/autofit/afcjk.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for CJK writing system (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afcover.h b/src/autofit/afcover.h
index 47f3e47..ff207a9 100644
--- a/src/autofit/afcover.h
+++ b/src/autofit/afcover.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter coverages (specification only).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afdummy.c b/src/autofit/afdummy.c
index abd9509..7e07a41 100644
--- a/src/autofit/afdummy.c
+++ b/src/autofit/afdummy.c
@@ -5,7 +5,7 @@
  *   Auto-fitter dummy routines to be used if no hinting should be
  *   performed (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,13 +38,15 @@
 
 
   static FT_Error
-  af_dummy_hints_apply( FT_UInt        glyph_index,
-                        AF_GlyphHints  hints,
-                        FT_Outline*    outline )
+  af_dummy_hints_apply( FT_UInt          glyph_index,
+                        AF_GlyphHints    hints,
+                        FT_Outline*      outline,
+                        AF_StyleMetrics  metrics )
   {
     FT_Error  error;
 
     FT_UNUSED( glyph_index );
+    FT_UNUSED( metrics );
 
 
     error = af_glyph_hints_reload( hints, outline );
diff --git a/src/autofit/afdummy.h b/src/autofit/afdummy.h
index e01c49c..ab9227d 100644
--- a/src/autofit/afdummy.h
+++ b/src/autofit/afdummy.h
@@ -5,7 +5,7 @@
  *   Auto-fitter dummy routines to be used if no hinting should be
  *   performed (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/aferrors.h b/src/autofit/aferrors.h
index 56e00cc..2ec336f 100644
--- a/src/autofit/aferrors.h
+++ b/src/autofit/aferrors.h
@@ -4,7 +4,7 @@
  *
  *   Autofitter error codes (specification only).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
index 9e7764b..6a9a1e5 100644
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter routines to compute global hinting values (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afglobal
+#define FT_COMPONENT  afglobal
 
 
   /* get writing system specific header files */
@@ -443,6 +443,7 @@
       style = (AF_Style)( globals->glyph_styles[gindex] &
                           AF_STYLE_UNASSIGNED           );
 
+  Again:
     style_class          = af_style_classes[style];
     writing_system_class = af_writing_system_classes
                              [style_class->writing_system];
@@ -470,6 +471,16 @@
             writing_system_class->style_metrics_done( metrics );
 
           FT_FREE( metrics );
+
+          /* internal error code -1 indicates   */
+          /* that no blue zones have been found */
+          if ( error == -1 )
+          {
+            style = (AF_Style)( globals->glyph_styles[gindex] &
+                                AF_STYLE_UNASSIGNED           );
+            goto Again;
+          }
+
           goto Exit;
         }
       }
@@ -489,9 +500,9 @@
                             FT_UInt         gindex )
   {
     if ( gindex < (FT_ULong)globals->glyph_count )
-      return (FT_Bool)( globals->glyph_styles[gindex] & AF_DIGIT );
+      return FT_BOOL( globals->glyph_styles[gindex] & AF_DIGIT );
 
-    return (FT_Bool)0;
+    return FT_BOOL( 0 );
   }
 
 
diff --git a/src/autofit/afglobal.h b/src/autofit/afglobal.h
index e26ea2f..52f3835 100644
--- a/src/autofit/afglobal.h
+++ b/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
  *   Auto-fitter routines to compute global hinting values
  *   (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c
index 65f0e85..ed111c4 100644
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afhints
+#define FT_COMPONENT  afhints
 
 
   /* Get new segment for given axis. */
@@ -297,6 +297,19 @@
   }
 
 
+  static int
+  af_get_strong_edge_index( AF_GlyphHints  hints,
+                            AF_Edge*       strong_edges,
+                            int            dimension )
+  {
+    AF_AxisHints  axis  = &hints->axis[dimension];
+    AF_Edge       edges = axis->edges;
+
+
+    return AF_INDEX_NUM( strong_edges[dimension], edges );
+  }
+
+
 #ifdef __cplusplus
   extern "C" {
 #endif
@@ -317,8 +330,10 @@
     {
       AF_DUMP(( "  index  hedge  hseg  vedge  vseg  flags "
              /* "  XXXXX  XXXXX XXXXX  XXXXX XXXXX  XXXXXX" */
-                "  xorg  yorg  xscale  yscale   xfit    yfit" ));
+                "  xorg  yorg  xscale  yscale   xfit    yfit "
              /* " XXXXX XXXXX XXXX.XX XXXX.XX XXXX.XX XXXX.XX" */
+                "  hbef  haft  vbef  vaft" ));
+             /* " XXXXX XXXXX XXXXX XXXXX" */
     }
     else
       AF_DUMP(( "  (none)\n" ));
@@ -330,6 +345,7 @@
       int  segment_idx_1 = af_get_segment_index( hints, point_idx, 1 );
 
       char  buf1[16], buf2[16], buf3[16], buf4[16];
+      char  buf5[16], buf6[16], buf7[16], buf8[16];
 
 
       /* insert extra newline at the beginning of a contour */
@@ -340,7 +356,8 @@
       }
 
       AF_DUMP(( "  %5d  %5s %5s  %5s %5s  %s"
-                " %5d %5d %7.2f %7.2f %7.2f %7.2f\n",
+                " %5d %5d %7.2f %7.2f %7.2f %7.2f"
+                " %5s %5s %5s %5s\n",
                 point_idx,
                 af_print_idx( buf1,
                               af_get_edge_index( hints, segment_idx_1, 1 ) ),
@@ -359,7 +376,20 @@
                 point->ox / 64.0,
                 point->oy / 64.0,
                 point->x / 64.0,
-                point->y / 64.0 ));
+                point->y / 64.0,
+
+                af_print_idx( buf5, af_get_strong_edge_index( hints,
+                                                              point->before,
+                                                              1 ) ),
+                af_print_idx( buf6, af_get_strong_edge_index( hints,
+                                                              point->after,
+                                                              1 ) ),
+                af_print_idx( buf7, af_get_strong_edge_index( hints,
+                                                              point->before,
+                                                              0 ) ),
+                af_print_idx( buf8, af_get_strong_edge_index( hints,
+                                                              point->after,
+                                                              0 ) ) ));
     }
     AF_DUMP(( "\n" ));
   }
@@ -519,7 +549,7 @@
     *offset  = ( dim == AF_DIMENSION_HORZ ) ? seg->first->fx
                                             : seg->first->fy;
     if ( seg->edge )
-      *is_blue = (FT_Bool)( seg->edge->blue_edge != 0 );
+      *is_blue = FT_BOOL( seg->edge->blue_edge );
     else
       *is_blue = FALSE;
 
@@ -898,6 +928,14 @@
               prev     = end;
             }
           }
+
+#ifdef FT_DEBUG_AUTOFIT
+          point->before[0] = NULL;
+          point->before[1] = NULL;
+          point->after[0]  = NULL;
+          point->after[1]  = NULL;
+#endif
+
         }
       }
 
@@ -1309,6 +1347,12 @@
         if ( delta >= 0 )
         {
           u = edge->pos - ( edge->opos - ou );
+
+#ifdef FT_DEBUG_AUTOFIT
+          point->before[dim] = edge;
+          point->after[dim]  = NULL;
+#endif
+
           goto Store_Point;
         }
 
@@ -1318,6 +1362,12 @@
         if ( delta >= 0 )
         {
           u = edge->pos + ( ou - edge->opos );
+
+#ifdef FT_DEBUG_AUTOFIT
+          point->before[dim] = NULL;
+          point->after[dim]  = edge;
+#endif
+
           goto Store_Point;
         }
 
@@ -1364,6 +1414,12 @@
             {
               /* we are on the edge */
               u = edge->pos;
+
+#ifdef FT_DEBUG_AUTOFIT
+              point->before[dim] = NULL;
+              point->after[dim]  = NULL;
+#endif
+
               goto Store_Point;
             }
           }
@@ -1374,6 +1430,11 @@
             AF_Edge  after  = edges + min + 0;
 
 
+#ifdef FT_DEBUG_AUTOFIT
+            point->before[dim] = before;
+            point->after[dim]  = after;
+#endif
+
             /* assert( before && after && before != after ) */
             if ( before->scale == 0 )
               before->scale = FT_DivFix( after->pos - before->pos,
diff --git a/src/autofit/afhints.h b/src/autofit/afhints.h
index aee9d46..e0cf612 100644
--- a/src/autofit/afhints.h
+++ b/src/autofit/afhints.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -252,6 +252,12 @@
     AF_Point   next;     /* next point in contour     */
     AF_Point   prev;     /* previous point in contour */
 
+#ifdef FT_DEBUG_AUTOFIT
+    /* track `before' and `after' edges for strong points */
+    AF_Edge    before[2];
+    AF_Edge    after[2];
+#endif
+
   } AF_PointRec;
 
 
diff --git a/src/autofit/afindic.c b/src/autofit/afindic.c
index 45c1a10..a17117c 100644
--- a/src/autofit/afindic.c
+++ b/src/autofit/afindic.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for Indic writing system (body).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afindic.h b/src/autofit/afindic.h
index 94ff764..bc5bc59 100644
--- a/src/autofit/afindic.h
+++ b/src/autofit/afindic.h
@@ -5,7 +5,7 @@
  *   Auto-fitter hinting routines for Indic writing system
  *   (specification).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * Rahul Bhalerao <rahul.bhalerao@redhat.com>, <b.rahul.pm@gmail.com>.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index a90fc1c..27d4024 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter hinting routines for latin writing system (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -37,7 +37,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_aflatin
+#define FT_COMPONENT  aflatin
 
 
   /* needed for computation of round vs. flat segments */
@@ -149,7 +149,11 @@
       af_shaper_buf_destroy( face, shaper_buf );
 
       if ( !glyph_index )
+      {
+        FT_TRACE5(( "standard character missing;"
+                    " using fallback stem widths\n" ));
         goto Exit;
+      }
 
       FT_TRACE5(( "standard character: U+%04lX (glyph index %d)\n",
                   ch, glyph_index ));
@@ -312,7 +316,7 @@
   /* Find all blue zones.  Flat segments give the reference points, */
   /* round segments the overshoot positions.                        */
 
-  static void
+  static int
   af_latin_metrics_init_blues( AF_LatinMetrics  metrics,
                                FT_Face          face )
   {
@@ -981,10 +985,11 @@
 
     af_shaper_buf_destroy( face, shaper_buf );
 
-    /* we finally check whether blue zones are ordered; */
-    /* `ref' and `shoot' values of two blue zones must not overlap */
     if ( axis->blue_count )
     {
+      /* we finally check whether blue zones are ordered;            */
+      /* `ref' and `shoot' values of two blue zones must not overlap */
+
       FT_UInt       i;
       AF_LatinBlue  blue_sorted[AF_BLUE_STRINGSET_MAX_LEN + 2];
 
@@ -1033,11 +1038,34 @@
                       *a ));
         }
       }
+
+      FT_TRACE5(( "\n" ));
+
+      return 0;
     }
+    else
+    {
+      /* disable hinting for the current style if there are no blue zones */
 
-    FT_TRACE5(( "\n" ));
+      AF_FaceGlobals  globals = metrics->root.globals;
+      FT_UShort*      gstyles = globals->glyph_styles;
 
-    return;
+      FT_Long  i;
+
+
+      FT_TRACE5(( "no blue zones found:"
+                  " hinting disabled for this style\n" ));
+
+      for ( i = 0; i < globals->glyph_count; i++ )
+      {
+        if ( ( gstyles[i] & AF_STYLE_MASK ) == sc->style )
+          gstyles[i] = AF_STYLE_NONE_DFLT;
+      }
+
+      FT_TRACE5(( "\n" ));
+
+      return 1;
+    }
   }
 
 
@@ -1116,6 +1144,8 @@
   af_latin_metrics_init( AF_LatinMetrics  metrics,
                          FT_Face          face )
   {
+    FT_Error  error = FT_Err_Ok;
+
     FT_CharMap  oldmap = face->charmap;
 
 
@@ -1124,12 +1154,18 @@
     if ( !FT_Select_Charmap( face, FT_ENCODING_UNICODE ) )
     {
       af_latin_metrics_init_widths( metrics, face );
-      af_latin_metrics_init_blues( metrics, face );
+      if ( af_latin_metrics_init_blues( metrics, face ) )
+      {
+        /* use internal error code to indicate missing blue zones */
+        error = -1;
+        goto Exit;
+      }
       af_latin_metrics_check_digits( metrics, face );
     }
 
+  Exit:
     FT_Set_Charmap( face, oldmap );
-    return FT_Err_Ok;
+    return error;
   }
 
 
@@ -1307,7 +1343,7 @@
     /* an extra-light axis corresponds to a standard width that is */
     /* smaller than 5/8 pixels                                     */
     axis->extra_light =
-      (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
+      FT_BOOL( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( axis->extra_light )
@@ -1443,13 +1479,13 @@
                     nn,
                     blue->ref.org,
                     blue->ref.fit / 64.0,
-                    blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
-                                                       : " (inactive)",
+                    ( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
+                                                           : " (inactive)",
                     nn,
                     blue->shoot.org,
                     blue->shoot.fit / 64.0,
-                    blue->flags & AF_LATIN_BLUE_ACTIVE ? ""
-                                                       : " (inactive)" ));
+                    ( blue->flags & AF_LATIN_BLUE_ACTIVE ) ? ""
+                                                           : " (inactive)" ));
       }
 #endif
     }
@@ -2328,9 +2364,9 @@
 
           /* check for links -- if seg->serif is set, then seg->link must */
           /* be ignored                                                   */
-          is_serif = (FT_Bool)( seg->serif               &&
-                                seg->serif->edge         &&
-                                seg->serif->edge != edge );
+          is_serif = FT_BOOL( seg->serif               &&
+                              seg->serif->edge         &&
+                              seg->serif->edge != edge );
 
           if ( ( seg->link && seg->link->edge ) || is_serif )
           {
diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
index 6b429bd..4047953 100644
--- a/src/autofit/aflatin.h
+++ b/src/autofit/aflatin.h
@@ -5,7 +5,7 @@
  *   Auto-fitter hinting routines for latin writing system
  *   (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/aflatin2.c b/src/autofit/aflatin2.c
index c5ce043..c601ab8 100644
--- a/src/autofit/aflatin2.c
+++ b/src/autofit/aflatin2.c
@@ -9,7 +9,7 @@
  *
  *   Auto-fitter hinting routines for latin writing system (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 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 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_aflatin2
+#define FT_COMPONENT  aflatin2
 
 
   FT_LOCAL_DEF( FT_Error )
@@ -265,7 +265,7 @@
             /* Avoid single-point contours since they are never rasterized. */
             /* In some fonts, they correspond to mark attachment points     */
             /* which are way outside of the glyph's real outline.           */
-            if ( last == first )
+            if ( last <= first )
                 continue;
 
             if ( AF_LATIN_IS_TOP_BLUE( bb ) )
@@ -299,6 +299,7 @@
         /* now check whether the point belongs to a straight or round   */
         /* segment; we first need to find in which contour the extremum */
         /* lies, then inspect its previous and next points              */
+        if ( best_point >= 0 )
         {
           FT_Pos  best_x = points[best_point].x;
           FT_Int  start, end, prev, next;
@@ -632,7 +633,7 @@
     /* an extra-light axis corresponds to a standard width that is */
     /* smaller than 5/8 pixels                                     */
     axis->extra_light =
-      (FT_Bool)( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
+      FT_BOOL( FT_MulFix( axis->standard_width, scale ) < 32 + 8 );
 
     if ( dim == AF_DIMENSION_VERT )
     {
@@ -1302,9 +1303,9 @@
 
           /* check for links -- if seg->serif is set, then seg->link must */
           /* be ignored                                                   */
-          is_serif = (FT_Bool)( seg->serif               &&
-                                seg->serif->edge         &&
-                                seg->serif->edge != edge );
+          is_serif = FT_BOOL( seg->serif               &&
+                              seg->serif->edge         &&
+                              seg->serif->edge != edge );
 
           if ( ( seg->link && seg->link->edge ) || is_serif )
           {
diff --git a/src/autofit/aflatin2.h b/src/autofit/aflatin2.h
index e8e7382..507cef3 100644
--- a/src/autofit/aflatin2.h
+++ b/src/autofit/aflatin2.h
@@ -10,7 +10,7 @@
  *   Auto-fitter hinting routines for latin writing system
  *   (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afloader.c b/src/autofit/afloader.c
index 301f377..83743b7 100644
--- a/src/autofit/afloader.c
+++ b/src/autofit/afloader.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter glyph loading routines (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -421,10 +421,15 @@
       /* now load the slot image into the auto-outline */
       /* and run the automatic hinting process         */
       if ( writing_system_class->style_hints_apply )
-        writing_system_class->style_hints_apply( glyph_index,
-                                                 hints,
-                                                 &gloader->base.outline,
-                                                 style_metrics );
+      {
+        error = writing_system_class->style_hints_apply(
+                  glyph_index,
+                  hints,
+                  &gloader->base.outline,
+                  style_metrics );
+        if ( error )
+          goto Exit;
+      }
 
       /* we now need to adjust the metrics according to the change in */
       /* width/positioning that occurred during the hinting process   */
diff --git a/src/autofit/afloader.h b/src/autofit/afloader.h
index 773ff60..d1e0f3c 100644
--- a/src/autofit/afloader.h
+++ b/src/autofit/afloader.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter glyph loading routines (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c
index 7f9f043..3e46a36 100644
--- a/src/autofit/afmodule.c
+++ b/src/autofit/afmodule.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module implementation (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -66,7 +66,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afmodule
+#define FT_COMPONENT  afmodule
 
 
   static FT_Error
@@ -507,7 +507,7 @@
                                   glyph_index, load_flags );
 
 #ifdef FT_DEBUG_LEVEL_TRACE
-    if ( ft_trace_levels[FT_COMPONENT] )
+    if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] )
     {
 #endif
       af_glyph_hints_dump_points( hints, 0 );
diff --git a/src/autofit/afmodule.h b/src/autofit/afmodule.h
index 0db6ef0..b410809 100644
--- a/src/autofit/afmodule.h
+++ b/src/autofit/afmodule.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module implementation (specification).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afranges.c b/src/autofit/afranges.c
index b904d51..45c8bbf 100644
--- a/src/autofit/afranges.c
+++ b/src/autofit/afranges.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter Unicode script ranges (body).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -664,6 +664,21 @@
   };
 
 
+  const AF_Script_UniRangeRec  af_mong_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x1800,  0x18AF ),  /* Mongolian            */
+    AF_UNIRANGE_REC( 0x11660, 0x1167F ),  /* Mongolian Supplement */
+    AF_UNIRANGE_REC(       0,       0 )
+  };
+
+  const AF_Script_UniRangeRec  af_mong_nonbase_uniranges[] =
+  {
+    AF_UNIRANGE_REC(  0x1885,  0x1886 ),
+    AF_UNIRANGE_REC(  0x18A9,  0x18A9 ),
+    AF_UNIRANGE_REC(       0,       0 )
+  };
+
+
   const AF_Script_UniRangeRec  af_mymr_uniranges[] =
   {
     AF_UNIRANGE_REC(  0x1000,  0x109F ),    /* Myanmar            */
diff --git a/src/autofit/afranges.h b/src/autofit/afranges.h
index c137ae2..d5917ae 100644
--- a/src/autofit/afranges.h
+++ b/src/autofit/afranges.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter Unicode script ranges (specification).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afscript.h b/src/autofit/afscript.h
index 7dd0983..2da8c70 100644
--- a/src/autofit/afscript.h
+++ b/src/autofit/afscript.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter scripts (specification only).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -243,6 +243,12 @@
           HINTING_BOTTOM_TO_TOP,
           "\xE0\xB4\xA0 \xE0\xB4\xB1" ) /* ഠ റ */
 
+  SCRIPT( mong, MONG,
+          "Mongolian",
+          HB_SCRIPT_MONGOLIAN,
+          HINTING_TOP_TO_BOTTOM,
+          "\xE1\xA1\x82 \xE1\xA0\xAA" ) /* ᡂ ᠪ */
+
   SCRIPT( mymr, MYMR,
           "Myanmar",
           HB_SCRIPT_MYANMAR,
diff --git a/src/autofit/afshaper.c b/src/autofit/afshaper.c
index b2f5d18..a5191c6 100644
--- a/src/autofit/afshaper.c
+++ b/src/autofit/afshaper.c
@@ -4,7 +4,7 @@
  *
  *   HarfBuzz interface for accessing OpenType features (body).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afshaper
+#define FT_COMPONENT  afshaper
 
 
   /*
diff --git a/src/autofit/afshaper.h b/src/autofit/afshaper.h
index 2665fe2..06a1e06 100644
--- a/src/autofit/afshaper.h
+++ b/src/autofit/afshaper.h
@@ -4,7 +4,7 @@
  *
  *   HarfBuzz interface for accessing OpenType features (specification).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afstyles.h b/src/autofit/afstyles.h
index 55d8b23..8d1d708 100644
--- a/src/autofit/afstyles.h
+++ b/src/autofit/afstyles.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter styles (specification only).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -322,6 +322,13 @@
          AF_BLUE_STRINGSET_MLYM,
          AF_COVERAGE_DEFAULT )
 
+  STYLE( mong_dflt, MONG_DFLT,
+         "Mongolian default style",
+         AF_WRITING_SYSTEM_LATIN,
+         AF_SCRIPT_MONG,
+         AF_BLUE_STRINGSET_MONG,
+         AF_COVERAGE_DEFAULT )
+
   STYLE( mymr_dflt, MYMR_DFLT,
          "Myanmar default style",
          AF_WRITING_SYSTEM_LATIN,
diff --git a/src/autofit/aftypes.h b/src/autofit/aftypes.h
index affb81b..579003d 100644
--- a/src/autofit/aftypes.h
+++ b/src/autofit/aftypes.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter types (specification only).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/afwarp.c b/src/autofit/afwarp.c
index 636f01f..84e9753 100644
--- a/src/autofit/afwarp.c
+++ b/src/autofit/afwarp.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter warping algorithm (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -34,7 +34,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_afwarp
+#define FT_COMPONENT  afwarp
 
 
   /* The weights cover the range 0/64 - 63/64 of a pixel.  Obviously, */
diff --git a/src/autofit/afwarp.h b/src/autofit/afwarp.h
index d454dfb..9a2c9a4 100644
--- a/src/autofit/afwarp.h
+++ b/src/autofit/afwarp.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter warping algorithm (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,7 +53,7 @@
                      AF_GlyphHints  hints,
                      AF_Dimension   dim,
                      FT_Fixed      *a_scale,
-                     FT_Fixed      *a_delta );
+                     FT_Pos        *a_delta );
 #endif
 
 
diff --git a/src/autofit/afwrtsys.h b/src/autofit/afwrtsys.h
index 20311da..5611cf4 100644
--- a/src/autofit/afwrtsys.h
+++ b/src/autofit/afwrtsys.h
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter writing systems (specification only).
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/autofit.c b/src/autofit/autofit.c
index 1fba44a..facfec1 100644
--- a/src/autofit/autofit.c
+++ b/src/autofit/autofit.c
@@ -4,7 +4,7 @@
  *
  *   Auto-fitter module (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/autofit/module.mk b/src/autofit/module.mk
index ff05f83..cf77b16 100644
--- a/src/autofit/module.mk
+++ b/src/autofit/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/autofit/rules.mk b/src/autofit/rules.mk
index 7295dc0..c59da33 100644
--- a/src/autofit/rules.mk
+++ b/src/autofit/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2003-2018 by
+# Copyright (C) 2003-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/base/Jamfile b/src/base/Jamfile
index 5bee6e2..8e1ec42 100644
--- a/src/base/Jamfile
+++ b/src/base/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/base Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -22,6 +22,7 @@
                ftcalc
                ftcolor
                ftdbgmem
+               fterrors
                ftfntfmt
                ftgloadr
                fthash
@@ -48,8 +49,7 @@
 # Add the optional/replaceable files.
 #
 {
-  local  _sources = ftapi
-                    ftbbox
+  local  _sources = ftbbox
                     ftbdf
                     ftbitmap
                     ftcid
diff --git a/src/base/ftadvanc.c b/src/base/ftadvanc.c
index 22f4ec9..0dfba57 100644
--- a/src/base/ftadvanc.c
+++ b/src/base/ftadvanc.c
@@ -4,7 +4,7 @@
  *
  *   Quick computation of advance widths (body).
  *
- * Copyright 2008-2018 by
+ * Copyright (C) 2008-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftapi.c b/src/base/ftapi.c
deleted file mode 100644
index 2e6f942..0000000
--- a/src/base/ftapi.c
+++ /dev/null
@@ -1,121 +0,0 @@
-/****************************************************************************
- *
- * ftapi.c
- *
- *   The FreeType compatibility functions (body).
- *
- * Copyright 2002-2018 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 <ft2build.h>
-#include FT_LIST_H
-#include FT_OUTLINE_H
-#include FT_INTERNAL_OBJECTS_H
-#include FT_INTERNAL_DEBUG_H
-#include FT_INTERNAL_STREAM_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_OUTLINE_H
-
-
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-  /****                                                                 ****/
-  /****                                                                 ****/
-  /****                 C O M P A T I B I L I T Y                       ****/
-  /****                                                                 ****/
-  /****                                                                 ****/
-  /*************************************************************************/
-  /*************************************************************************/
-  /*************************************************************************/
-
-  /* backward compatibility API */
-
-  FT_BASE_DEF( void )
-  FT_New_Memory_Stream( FT_Library  library,
-                        FT_Byte*    base,
-                        FT_ULong    size,
-                        FT_Stream   stream )
-  {
-    FT_UNUSED( library );
-
-    FT_Stream_OpenMemory( stream, base, size );
-  }
-
-
-  FT_BASE_DEF( FT_Error )
-  FT_Seek_Stream( FT_Stream  stream,
-                  FT_ULong   pos )
-  {
-    return FT_Stream_Seek( stream, pos );
-  }
-
-
-  FT_BASE_DEF( FT_Error )
-  FT_Skip_Stream( FT_Stream  stream,
-                  FT_Long    distance )
-  {
-    return FT_Stream_Skip( stream, distance );
-  }
-
-
-  FT_BASE_DEF( FT_Error )
-  FT_Read_Stream( FT_Stream  stream,
-                  FT_Byte*   buffer,
-                  FT_ULong   count )
-  {
-    return FT_Stream_Read( stream, buffer, count );
-  }
-
-
-  FT_BASE_DEF( FT_Error )
-  FT_Read_Stream_At( FT_Stream  stream,
-                     FT_ULong   pos,
-                     FT_Byte*   buffer,
-                     FT_ULong   count )
-  {
-    return FT_Stream_ReadAt( stream, pos, buffer, count );
-  }
-
-
-  FT_BASE_DEF( FT_Error )
-  FT_Extract_Frame( FT_Stream  stream,
-                    FT_ULong   count,
-                    FT_Byte**  pbytes )
-  {
-    return FT_Stream_ExtractFrame( stream, count, pbytes );
-  }
-
-
-  FT_BASE_DEF( void )
-  FT_Release_Frame( FT_Stream  stream,
-                    FT_Byte**  pbytes )
-  {
-    FT_Stream_ReleaseFrame( stream, pbytes );
-  }
-
-  FT_BASE_DEF( FT_Error )
-  FT_Access_Frame( FT_Stream  stream,
-                   FT_ULong   count )
-  {
-    return FT_Stream_EnterFrame( stream, count );
-  }
-
-
-  FT_BASE_DEF( void )
-  FT_Forget_Frame( FT_Stream  stream )
-  {
-    FT_Stream_ExitFrame( stream );
-  }
-
-
-/* END */
diff --git a/src/base/ftbase.c b/src/base/ftbase.c
index 5f7d818..fb8cbfc 100644
--- a/src/base/ftbase.c
+++ b/src/base/ftbase.c
@@ -4,7 +4,7 @@
  *
  *   Single object library component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -23,6 +23,7 @@
 #include "ftcalc.c"
 #include "ftcolor.c"
 #include "ftdbgmem.c"
+#include "fterrors.c"
 #include "ftfntfmt.c"
 #include "ftgloadr.c"
 #include "fthash.c"
diff --git a/src/base/ftbase.h b/src/base/ftbase.h
index feb0f4e..35b1c47 100644
--- a/src/base/ftbase.h
+++ b/src/base/ftbase.h
@@ -4,7 +4,7 @@
  *
  *   Private functions used in the `base' module (specification).
  *
- * Copyright 2008-2018 by
+ * Copyright (C) 2008-2019 by
  * David Turner, Robert Wilhelm, Werner Lemberg, and suzuki toshiya.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftbbox.c b/src/base/ftbbox.c
index 86cefe4..a0b2c46 100644
--- a/src/base/ftbbox.c
+++ b/src/base/ftbbox.c
@@ -4,7 +4,7 @@
  *
  *   FreeType bbox computation (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -319,9 +319,9 @@
         q2 = q2 + q1;
         q4 = q4 + q3;
         q3 = q3 + q2;
-        q4 = ( q4 + q3 ) / 8;
-        q3 = q3 / 4;
-        q2 = q2 / 2;
+        q4 = ( q4 + q3 ) >> 3;
+        q3 = q3 >> 2;
+        q2 = q2 >> 1;
       }
       else                     /* second half */
       {
@@ -330,9 +330,9 @@
         q3 = q3 + q4;
         q1 = q1 + q2;
         q2 = q2 + q3;
-        q1 = ( q1 + q2 ) / 8;
-        q2 = q2 / 4;
-        q3 = q3 / 2;
+        q1 = ( q1 + q2 ) >> 3;
+        q2 = q2 >> 2;
+        q3 = q3 >> 1;
       }
 
       /* check whether either end reached the maximum */
diff --git a/src/base/ftbdf.c b/src/base/ftbdf.c
index 8a27c84..c0fccd7 100644
--- a/src/base/ftbdf.c
+++ b/src/base/ftbdf.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing BDF-specific strings (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftbitmap.c b/src/base/ftbitmap.c
index dc28c40..0e0a76f 100644
--- a/src/base/ftbitmap.c
+++ b/src/base/ftbitmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility functions for bitmaps (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -31,7 +31,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_bitmap
+#define FT_COMPONENT  bitmap
 
 
   static
@@ -811,7 +811,6 @@
 
     FT_Vector  source_offset;
     FT_Vector  target_offset;
-    FT_Vector  frac_offset;
 
     FT_Bool  free_source_bitmap          = 0;
     FT_Bool  free_target_bitmap_on_error = 0;
@@ -845,16 +844,9 @@
     if ( !( source_->width && source_->rows ) )
       return FT_Err_Ok;               /* nothing to do */
 
-    /* we isolate a fractional shift of `source',        */
-    /* to be less than one pixel and always positive;    */
-    /* `source_offset' now holds full-pixel shift values */
+    /* assure integer pixel offsets */
     source_offset.x = FT_PIX_FLOOR( source_offset_.x );
-    frac_offset.x   = source_offset_.x - source_offset.x;
-
     source_offset.y = FT_PIX_FLOOR( source_offset_.y );
-    frac_offset.y   = source_offset_.y - source_offset.y;
-
-    /* assure integer pixel offset for target bitmap */
     target_offset.x = FT_PIX_FLOOR( atarget_offset->x );
     target_offset.y = FT_PIX_FLOOR( atarget_offset->y );
 
@@ -906,13 +898,6 @@
       target_ury = FT_LONG_MIN;
     }
 
-    /* move upper right corner up and to the right */
-    /* if we have a fractional offset              */
-    if ( source_urx >= target_urx && frac_offset.x )
-      source_urx += 64;
-    if ( source_ury >= target_ury && frac_offset.y )
-      source_ury += 64;
-
     /* compute final bitmap dimensions */
     final_llx = FT_MIN( source_llx, target_llx );
     final_lly = FT_MIN( source_lly, target_lly );
@@ -929,10 +914,6 @@
       source_urx / 64, source_ury / 64,
       source_->width, source_->rows ));
 
-    if ( frac_offset.x || frac_offset.y )
-      FT_TRACE5(( "    fractional offset: (%d/64, %d/64)\n",
-                  frac_offset.x, frac_offset.y ));
-
     if ( target->width && target->rows )
       FT_TRACE5(( "  target bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
         target_llx / 64, target_lly / 64,
@@ -941,12 +922,18 @@
     else
       FT_TRACE5(( "  target bitmap: empty\n" ));
 
-    FT_TRACE5(( "  final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
-      final_llx / 64, final_lly / 64,
-      final_urx / 64, final_ury / 64,
-      final_width, final_rows ));
+    if ( final_width && final_rows )
+      FT_TRACE5(( "  final bitmap: (%d, %d) -- (%d, %d); %d x %d\n",
+        final_llx / 64, final_lly / 64,
+        final_urx / 64, final_ury / 64,
+        final_width, final_rows ));
+    else
+      FT_TRACE5(( "  final bitmap: empty\n" ));
 #endif /* FT_DEBUG_LEVEL_TRACE */
 
+    if ( !( final_width && final_rows ) )
+      return FT_Err_Ok;               /* nothing to do */
+
     /* for blending, set offset vector of final bitmap */
     /* temporarily to (0,0)                            */
     source_llx -= final_llx;
@@ -990,6 +977,7 @@
 
 
       pitch = target->pitch;
+
       if ( pitch < 0 )
         pitch = -pitch;
 
@@ -1070,8 +1058,6 @@
     x = source_llx >> 6;
     y = source_lly >> 6;
 
-    /* XXX handle `frac_offset' */
-
     /* the bitmap flow is from top to bottom, */
     /* but y is measured from bottom to top   */
     if ( target->pitch < 0 )
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index c96d5d2..315dc44 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -4,7 +4,7 @@
  *
  *   Arithmetic computations (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -65,7 +65,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_calc
+#define FT_COMPONENT  calc
 
 
   /* transfer sign, leaving a positive number;                        */
@@ -701,8 +701,8 @@
     if ( !delta )
       return FT_THROW( Invalid_Argument );  /* matrix can't be inverted */
 
-    matrix->xy = - FT_DivFix( matrix->xy, delta );
-    matrix->yx = - FT_DivFix( matrix->yx, delta );
+    matrix->xy = -FT_DivFix( matrix->xy, delta );
+    matrix->yx = -FT_DivFix( matrix->yx, delta );
 
     xx = matrix->xx;
     yy = matrix->yy;
@@ -784,6 +784,10 @@
         nonzero_minval = val[i];
     }
 
+    /* we only handle 32bit values */
+    if ( maxval > 0x7FFFFFFFL )
+      return 0;
+
     if ( maxval > 23170 )
     {
       FT_Fixed  scale = FT_DivFix( maxval, 23170 );
@@ -979,9 +983,13 @@
                          FT_Pos  out_x,
                          FT_Pos  out_y )
   {
+    /* we silently ignore overflow errors since such large values */
+    /* lead to even more (harmless) rendering errors later on     */
+
 #ifdef FT_LONG64
 
-    FT_Int64  delta = (FT_Int64)in_x * out_y - (FT_Int64)in_y * out_x;
+    FT_Int64  delta = SUB_INT64( MUL_INT64( in_x, out_y ),
+                                 MUL_INT64( in_y, out_x ) );
 
 
     return ( delta > 0 ) - ( delta < 0 );
@@ -991,8 +999,6 @@
     FT_Int  result;
 
 
-    /* we silently ignore overflow errors, since such large values */
-    /* lead to even more (harmless) rendering errors later on      */
     if ( ADD_LONG( FT_ABS( in_x ), FT_ABS( out_y ) ) <= 131071L &&
          ADD_LONG( FT_ABS( in_y ), FT_ABS( out_x ) ) <= 131071L )
     {
diff --git a/src/base/ftcid.c b/src/base/ftcid.c
index 944e3e4..190b23f 100644
--- a/src/base/ftcid.c
+++ b/src/base/ftcid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing CID font information.
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * Derek Clegg and Michael Toftdal.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftcolor.c b/src/base/ftcolor.c
index 101e53e..8cb057a 100644
--- a/src/base/ftcolor.c
+++ b/src/base/ftcolor.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's glyph color management (body).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c
index 6e0a074..55cd269 100644
--- a/src/base/ftdbgmem.c
+++ b/src/base/ftdbgmem.c
@@ -4,7 +4,7 @@
  *
  *   Memory debugger (body).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
index 19b0058..ec72337 100644
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -4,7 +4,7 @@
  *
  *   Debugging and logging component (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -87,9 +87,19 @@
             int          line,
             const char*  file )
   {
+#if 0
+    /* activating the code in this block makes FreeType very chatty */
+    fprintf( stderr,
+             "%s:%d: error 0x%02x: %s\n",
+             file,
+             line,
+             error,
+             FT_Error_String( error ) );
+#else
     FT_UNUSED( error );
     FT_UNUSED( line );
     FT_UNUSED( file );
+#endif
 
     return 0;
   }
diff --git a/src/base/fterrors.c b/src/base/fterrors.c
new file mode 100644
index 0000000..84fe590
--- /dev/null
+++ b/src/base/fterrors.c
@@ -0,0 +1,46 @@
+/****************************************************************************
+ *
+ * fterrors.c
+ *
+ *   FreeType API for error code handling.
+ *
+ * Copyright (C) 2018-2019 by
+ * Armin Hasitzka, 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 <ft2build.h>
+#include FT_INTERNAL_DEBUG_H
+#include FT_ERRORS_H
+
+
+  /* documentation is in fterrors.h */
+
+  FT_EXPORT_DEF( const char* )
+  FT_Error_String( FT_Error  error_code )
+  {
+    if ( error_code <  0                                ||
+         error_code >= FT_ERR_CAT( FT_ERR_PREFIX, Max ) )
+      return NULL;
+
+#if defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || \
+    defined( FT_DEBUG_LEVEL_ERROR )
+
+#undef FTERRORS_H_
+#define FT_ERROR_START_LIST     switch ( FT_ERROR_BASE( error_code ) ) {
+#define FT_ERRORDEF( e, v, s )    case v: return s;
+#define FT_ERROR_END_LIST       }
+
+#include FT_ERRORS_H
+
+#endif /* defined( FT_CONFIG_OPTION_ERROR_STRINGS ) || ... */
+
+    return NULL;
+  }
diff --git a/src/base/ftfntfmt.c b/src/base/ftfntfmt.c
index 610b6cf..54ba537 100644
--- a/src/base/ftfntfmt.c
+++ b/src/base/ftfntfmt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for font formats (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftfstype.c b/src/base/ftfstype.c
index 74e9e56..45e2d80 100644
--- a/src/base/ftfstype.c
+++ b/src/base/ftfstype.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file to access FSType data (body).
  *
- * Copyright 2008-2018 by
+ * Copyright (C) 2008-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftgasp.c b/src/base/ftgasp.c
index 15e0ef0..720fb11 100644
--- a/src/base/ftgasp.c
+++ b/src/base/ftgasp.c
@@ -4,7 +4,7 @@
  *
  *   Access of TrueType's `gasp' table (body).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftgloadr.c b/src/base/ftgloadr.c
index 475d5cc..bfeed46 100644
--- a/src/base/ftgloadr.c
+++ b/src/base/ftgloadr.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph loader (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg
  *
  * This file is part of the FreeType project, and may only be used,
@@ -23,7 +23,7 @@
 #include FT_INTERNAL_OBJECTS_H
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gloader
+#define FT_COMPONENT  gloader
 
 
   /*************************************************************************/
@@ -361,46 +361,4 @@
   }
 
 
-  FT_BASE_DEF( FT_Error )
-  FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
-                             FT_GlyphLoader  source )
-  {
-    FT_Error  error;
-    FT_UInt   num_points   = (FT_UInt)source->base.outline.n_points;
-    FT_UInt   num_contours = (FT_UInt)source->base.outline.n_contours;
-
-
-    error = FT_GlyphLoader_CheckPoints( target, num_points, num_contours );
-    if ( !error )
-    {
-      FT_Outline*  out = &target->base.outline;
-      FT_Outline*  in  = &source->base.outline;
-
-
-      FT_ARRAY_COPY( out->points, in->points,
-                     num_points );
-      FT_ARRAY_COPY( out->tags, in->tags,
-                     num_points );
-      FT_ARRAY_COPY( out->contours, in->contours,
-                     num_contours );
-
-      /* do we need to copy the extra points? */
-      if ( target->use_extra && source->use_extra )
-      {
-        FT_ARRAY_COPY( target->base.extra_points, source->base.extra_points,
-                       num_points );
-        FT_ARRAY_COPY( target->base.extra_points2, source->base.extra_points2,
-                       num_points );
-      }
-
-      out->n_points   = (short)num_points;
-      out->n_contours = (short)num_contours;
-
-      FT_GlyphLoader_Adjust_Points( target );
-    }
-
-    return error;
-  }
-
-
 /* END */
diff --git a/src/base/ftglyph.c b/src/base/ftglyph.c
index 8bc86a5..e6b1327 100644
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -4,7 +4,7 @@
  *
  *   FreeType convenience functions to handle glyphs (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 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 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_glyph
+#define FT_COMPONENT  glyph
 
 
   /*************************************************************************/
@@ -76,7 +76,7 @@
     /* do lazy copying whenever possible */
     if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
     {
-      glyph->bitmap = slot->bitmap;
+      glyph->bitmap          = slot->bitmap;
       slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
     }
     else
@@ -400,8 +400,8 @@
   FT_Get_Glyph( FT_GlyphSlot  slot,
                 FT_Glyph     *aglyph )
   {
-    FT_Error    error;
-    FT_Glyph    glyph;
+    FT_Error  error;
+    FT_Glyph  glyph;
 
 
     if ( !slot )
@@ -513,8 +513,8 @@
     {
       acbox->xMin = FT_PIX_FLOOR( acbox->xMin );
       acbox->yMin = FT_PIX_FLOOR( acbox->yMin );
-      acbox->xMax = FT_PIX_CEIL( acbox->xMax );
-      acbox->yMax = FT_PIX_CEIL( acbox->yMax );
+      acbox->xMax = FT_PIX_CEIL_LONG( acbox->xMax );
+      acbox->yMax = FT_PIX_CEIL_LONG( acbox->yMax );
     }
 
     /* convert to integer pixels if needed */
diff --git a/src/base/ftgxval.c b/src/base/ftgxval.c
index f3961e2..0677d26 100644
--- a/src/base/ftgxval.c
+++ b/src/base/ftgxval.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating TrueTypeGX/AAT tables (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO, Redhat K.K,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index e0f2ccd..c73cd78 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -4,7 +4,7 @@
  *
  *   FreeType initialization layer (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,7 +51,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_init
+#define FT_COMPONENT  init
 
 
 #undef  FT_USE_MODULE
@@ -176,6 +176,9 @@
                               module_name,
                               property_name,
                               property_value );
+
+      if ( !*p )
+        break;
     }
   }
 
diff --git a/src/base/ftlcdfil.c b/src/base/ftlcdfil.c
index 65eff93..d9f4af4 100644
--- a/src/base/ftlcdfil.c
+++ b/src/base/ftlcdfil.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for color filtering of subpixel bitmap glyphs (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -77,13 +77,13 @@
   /* FIR filter used by the default and light filters */
   FT_BASE_DEF( void )
   ft_lcd_filter_fir( FT_Bitmap*           bitmap,
-                     FT_Render_Mode       mode,
                      FT_LcdFiveTapFilter  weights )
   {
     FT_UInt   width  = (FT_UInt)bitmap->width;
     FT_UInt   height = (FT_UInt)bitmap->rows;
     FT_Int    pitch  = bitmap->pitch;
     FT_Byte*  origin = bitmap->buffer;
+    FT_Byte   mode   = bitmap->pixel_mode;
 
 
     /* take care of bitmap flow */
@@ -91,7 +91,7 @@
       origin += pitch * (FT_Int)( height - 1 );
 
     /* horizontal in-place FIR filter */
-    if ( mode == FT_RENDER_MODE_LCD && width >= 2 )
+    if ( mode == FT_PIXEL_MODE_LCD && width >= 2 )
     {
       FT_Byte*  line = origin;
 
@@ -134,7 +134,7 @@
     }
 
     /* vertical in-place FIR filter */
-    else if ( mode == FT_RENDER_MODE_LCD_V && height >= 2 )
+    else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 2 )
     {
       FT_Byte*  column = origin;
 
@@ -183,13 +183,13 @@
   /* intra-pixel filter used by the legacy filter */
   static void
   _ft_lcd_filter_legacy( FT_Bitmap*      bitmap,
-                         FT_Render_Mode  mode,
                          FT_Byte*        weights )
   {
     FT_UInt   width  = (FT_UInt)bitmap->width;
     FT_UInt   height = (FT_UInt)bitmap->rows;
     FT_Int    pitch  = bitmap->pitch;
     FT_Byte*  origin = bitmap->buffer;
+    FT_Byte   mode   = bitmap->pixel_mode;
 
     static const unsigned int  filters[3][3] =
     {
@@ -206,7 +206,7 @@
       origin += pitch * (FT_Int)( height - 1 );
 
     /* horizontal in-place intra-pixel filter */
-    if ( mode == FT_RENDER_MODE_LCD && width >= 3 )
+    if ( mode == FT_PIXEL_MODE_LCD && width >= 3 )
     {
       FT_Byte*  line = origin;
 
@@ -243,7 +243,7 @@
         }
       }
     }
-    else if ( mode == FT_RENDER_MODE_LCD_V && height >= 3 )
+    else if ( mode == FT_PIXEL_MODE_LCD_V && height >= 3 )
     {
       FT_Byte*  column = origin;
 
diff --git a/src/base/ftmac.c b/src/base/ftmac.c
index 79e3fe4..5f23cee 100644
--- a/src/base/ftmac.c
+++ b/src/base/ftmac.c
@@ -8,7 +8,7 @@
  * This file is for Mac OS X only; see builds/mac/ftoldmac.c for
  * classic platforms built by MPW.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftmm.c b/src/base/ftmm.c
index b0d9d4b..ba9e67f 100644
--- a/src/base/ftmm.c
+++ b/src/base/ftmm.c
@@ -4,7 +4,7 @@
  *
  *   Multiple Master font support (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,7 +32,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_mm
+#define FT_COMPONENT  mm
 
 
   static FT_Error
@@ -202,6 +202,67 @@
   /* documentation is in ftmm.h */
 
   FT_EXPORT_DEF( FT_Error )
+  FT_Set_MM_WeightVector( FT_Face    face,
+                          FT_UInt    len,
+                          FT_Fixed*  weightvector )
+  {
+    FT_Error                 error;
+    FT_Service_MultiMasters  service;
+
+
+    /* check of `face' delayed to `ft_face_get_mm_service' */
+
+    if ( len && !weightvector )
+      return FT_THROW( Invalid_Argument );
+
+    error = ft_face_get_mm_service( face, &service );
+    if ( !error )
+    {
+      error = FT_ERR( Invalid_Argument );
+      if ( service->set_mm_weightvector )
+        error = service->set_mm_weightvector( face, len, weightvector );
+    }
+
+    /* enforce recomputation of auto-hinting data */
+    if ( !error && face->autohint.finalizer )
+    {
+      face->autohint.finalizer( face->autohint.data );
+      face->autohint.data = NULL;
+    }
+
+    return error;
+  }
+
+
+  FT_EXPORT_DEF( FT_Error )
+  FT_Get_MM_WeightVector( FT_Face    face,
+                          FT_UInt*   len,
+                          FT_Fixed*  weightvector )
+  {
+    FT_Error                 error;
+    FT_Service_MultiMasters  service;
+
+
+    /* check of `face' delayed to `ft_face_get_mm_service' */
+
+    if ( len && !weightvector )
+      return FT_THROW( Invalid_Argument );
+
+    error = ft_face_get_mm_service( face, &service );
+    if ( !error )
+    {
+      error = FT_ERR( Invalid_Argument );
+      if ( service->get_mm_weightvector )
+        error = service->get_mm_weightvector( face, len, weightvector );
+    }
+
+    return error;
+  }
+
+
+  /* documentation is in ftmm.h */
+
+  FT_EXPORT_DEF( FT_Error )
   FT_Set_Var_Design_Coordinates( FT_Face    face,
                                  FT_UInt    num_coords,
                                  FT_Fixed*  coords )
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index 2b44405..e301f8f 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType private base classes (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -278,7 +278,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_objs
+#define FT_COMPONENT  objs
 
 
   /*************************************************************************/
@@ -342,7 +342,9 @@
   }
 
 
-  FT_BASE_DEF( void )
+  /* overflow-resistant presetting of bitmap position and dimensions; */
+  /* also check whether the size is too large for rendering           */
+  FT_BASE_DEF( FT_Bool )
   ft_glyphslot_preset_bitmap( FT_GlyphSlot      slot,
                               FT_Render_Mode    mode,
                               const FT_Vector*  origin )
@@ -352,15 +354,15 @@
 
     FT_Pixel_Mode  pixel_mode;
 
-    FT_BBox  cbox;
+    FT_BBox  cbox, pbox;
     FT_Pos   x_shift = 0;
     FT_Pos   y_shift = 0;
     FT_Pos   x_left, y_top;
     FT_Pos   width, height, pitch;
 
 
-    if ( slot->internal && ( slot->internal->flags & FT_GLYPH_OWN_BITMAP ) )
-      return;
+    if ( slot->format != FT_GLYPH_FORMAT_OUTLINE )
+      return 1;
 
     if ( origin )
     {
@@ -372,70 +374,89 @@
     /* taking into account the origin shift      */
     FT_Outline_Get_CBox( outline, &cbox );
 
-    cbox.xMin += x_shift;
-    cbox.yMin += y_shift;
-    cbox.xMax += x_shift;
-    cbox.yMax += y_shift;
+    /* rough estimate of pixel box */
+    pbox.xMin = ( cbox.xMin >> 6 ) + ( x_shift >> 6 );
+    pbox.yMin = ( cbox.yMin >> 6 ) + ( y_shift >> 6 );
+    pbox.xMax = ( cbox.xMax >> 6 ) + ( x_shift >> 6 );
+    pbox.yMax = ( cbox.yMax >> 6 ) + ( y_shift >> 6 );
+
+    /* tiny remainder box */
+    cbox.xMin = ( cbox.xMin & 63 ) + ( x_shift & 63 );
+    cbox.yMin = ( cbox.yMin & 63 ) + ( y_shift & 63 );
+    cbox.xMax = ( cbox.xMax & 63 ) + ( x_shift & 63 );
+    cbox.yMax = ( cbox.yMax & 63 ) + ( y_shift & 63 );
 
     switch ( mode )
     {
     case FT_RENDER_MODE_MONO:
       pixel_mode = FT_PIXEL_MODE_MONO;
 #if 1
-      /* undocumented but confirmed: bbox values get rounded    */
-      /* unless the rounded box can collapse for a narrow glyph */
-      if ( cbox.xMax - cbox.xMin < 64 )
+      /* x */
+
+      /* undocumented but confirmed: bbox values get rounded;    */
+      /* we do asymmetric rounding so that the center of a pixel */
+      /* gets always included                                    */
+
+      pbox.xMin += ( cbox.xMin + 31 ) >> 6;
+      pbox.xMax += ( cbox.xMax + 32 ) >> 6;
+
+      /* if the bbox collapsed, we add a pixel based on the total */
+      /* rounding remainder to cover most of the original cbox    */
+
+      if ( pbox.xMin == pbox.xMax )
       {
-        cbox.xMin = ( cbox.xMin + cbox.xMax ) / 2 - 32;
-        cbox.xMax = cbox.xMin + 64;
+        if ( ( ( cbox.xMin + 31 ) & 63 ) - 31 +
+             ( ( cbox.xMax + 32 ) & 63 ) - 32 < 0 )
+          pbox.xMin -= 1;
+        else
+          pbox.xMax += 1;
       }
 
-      cbox.xMin = FT_PIX_ROUND_LONG( cbox.xMin );
-      cbox.xMax = FT_PIX_ROUND_LONG( cbox.xMax );
+      /* y */
 
-      if ( cbox.yMax - cbox.yMin < 64 )
+      pbox.yMin += ( cbox.yMin + 31 ) >> 6;
+      pbox.yMax += ( cbox.yMax + 32 ) >> 6;
+
+      if ( pbox.yMin == pbox.yMax )
       {
-        cbox.yMin = ( cbox.yMin + cbox.yMax ) / 2 - 32;
-        cbox.yMax = cbox.yMin + 64;
+        if ( ( ( cbox.yMin + 31 ) & 63 ) - 31 +
+             ( ( cbox.yMax + 32 ) & 63 ) - 32 < 0 )
+          pbox.yMin -= 1;
+        else
+          pbox.yMax += 1;
       }
 
-      cbox.yMin = FT_PIX_ROUND_LONG( cbox.yMin );
-      cbox.yMax = FT_PIX_ROUND_LONG( cbox.yMax );
-
       break;
 #else
-      goto Round;
+      goto Adjust;
 #endif
 
     case FT_RENDER_MODE_LCD:
       pixel_mode = FT_PIXEL_MODE_LCD;
       ft_lcd_padding( &cbox, slot, mode );
-      goto Round;
+      goto Adjust;
 
     case FT_RENDER_MODE_LCD_V:
       pixel_mode = FT_PIXEL_MODE_LCD_V;
       ft_lcd_padding( &cbox, slot, mode );
-      goto Round;
+      goto Adjust;
 
     case FT_RENDER_MODE_NORMAL:
     case FT_RENDER_MODE_LIGHT:
     default:
       pixel_mode = FT_PIXEL_MODE_GRAY;
-    Round:
-      cbox.xMin = FT_PIX_FLOOR( cbox.xMin );
-      cbox.yMin = FT_PIX_FLOOR( cbox.yMin );
-      cbox.xMax = FT_PIX_CEIL_LONG( cbox.xMax );
-      cbox.yMax = FT_PIX_CEIL_LONG( cbox.yMax );
+    Adjust:
+      pbox.xMin += cbox.xMin >> 6;
+      pbox.yMin += cbox.yMin >> 6;
+      pbox.xMax += ( cbox.xMax + 63 ) >> 6;
+      pbox.yMax += ( cbox.yMax + 63 ) >> 6;
     }
 
-    x_shift = SUB_LONG( x_shift, cbox.xMin );
-    y_shift = SUB_LONG( y_shift, cbox.yMin );
+    x_left = pbox.xMin;
+    y_top  = pbox.yMax;
 
-    x_left = cbox.xMin >> 6;
-    y_top  = cbox.yMax >> 6;
-
-    width  = ( (FT_ULong)cbox.xMax - (FT_ULong)cbox.xMin ) >> 6;
-    height = ( (FT_ULong)cbox.yMax - (FT_ULong)cbox.yMin ) >> 6;
+    width  = pbox.xMax - pbox.xMin;
+    height = pbox.yMax - pbox.yMin;
 
     switch ( pixel_mode )
     {
@@ -465,6 +486,16 @@
     bitmap->width      = (unsigned int)width;
     bitmap->rows       = (unsigned int)height;
     bitmap->pitch      = pitch;
+
+    if ( pbox.xMin < -0x8000 || pbox.xMax > 0x7FFF ||
+         pbox.yMin < -0x8000 || pbox.yMax > 0x7FFF )
+    {
+      FT_TRACE3(( "ft_glyphslot_preset_bitmap: [%ld %ld %ld %ld]\n",
+                  pbox.xMin, pbox.yMin, pbox.xMax, pbox.yMax ));
+      return 1;
+    }
+
+    return 0;
   }
 
 
@@ -813,7 +844,7 @@
      * - Do only auto-hinting if we have
      *
      *   - a hinter module,
-     *   - a scalable font format dealing with outlines,
+     *   - a scalable font,
      *   - not a tricky font, and
      *   - no transforms except simple slants and/or rotations by
      *     integer multiples of 90 degrees.
@@ -831,8 +862,7 @@
     if ( hinter                                           &&
          !( load_flags & FT_LOAD_NO_HINTING )             &&
          !( load_flags & FT_LOAD_NO_AUTOHINT )            &&
-         FT_DRIVER_IS_SCALABLE( driver )                  &&
-         FT_DRIVER_USES_OUTLINES( driver )                &&
+         FT_IS_SCALABLE( face )                           &&
          !FT_IS_TRICKY( face )                            &&
          ( ( load_flags & FT_LOAD_IGNORE_TRANSFORM )    ||
            ( face->internal->transform_matrix.yx == 0 &&
@@ -852,7 +882,7 @@
         /* only the new Adobe engine (for both CFF and Type 1) is `light'; */
         /* we use `strstr' to catch both `Type 1' and `CID Type 1'         */
         is_light_type1 =
-          ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL   &&
+          ft_strstr( FT_Get_Font_Format( face ), "Type 1" ) != NULL &&
           ((PS_Driver)driver)->hinting_engine == FT_HINTING_ADOBE;
 
         /* the check for `num_locations' assures that we actually    */
@@ -932,8 +962,9 @@
 
 #ifdef GRID_FIT_METRICS
         if ( !( load_flags & FT_LOAD_NO_HINTING ) )
-          ft_glyphslot_grid_fit_metrics( slot,
-              FT_BOOL( load_flags & FT_LOAD_VERTICAL_LAYOUT ) );
+          ft_glyphslot_grid_fit_metrics(
+            slot,
+            FT_BOOL( load_flags & FT_LOAD_VERTICAL_LAYOUT ) );
 #endif
       }
     }
@@ -2189,7 +2220,7 @@
   {
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_raccess
+#define FT_COMPONENT  raccess
 
     FT_Memory  memory = library->memory;
     FT_Error   error  = FT_ERR( Unknown_File_Format );
@@ -2267,7 +2298,7 @@
     return error;
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_objs
+#define FT_COMPONENT  objs
 
   }
 
@@ -2295,7 +2326,7 @@
     {
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_raccess
+#define FT_COMPONENT  raccess
 
 #ifdef FT_DEBUG_LEVEL_TRACE
       FT_TRACE3(( "Try as dfont: " ));
@@ -2308,7 +2339,7 @@
       FT_TRACE3(( "%s\n", error ? "failed" : "successful" ));
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_objs
+#define FT_COMPONENT  objs
 
     }
 
@@ -2706,8 +2737,8 @@
 
     /* close the attached stream */
     FT_Stream_Free( stream,
-                    (FT_Bool)( parameters->stream &&
-                               ( parameters->flags & FT_OPEN_STREAM ) ) );
+                    FT_BOOL( parameters->stream                     &&
+                             ( parameters->flags & FT_OPEN_STREAM ) ) );
 
   Exit:
     return error;
@@ -4028,8 +4059,8 @@
   /* documentation is in freetype.h */
 
   FT_EXPORT_DEF( FT_UInt )
-  FT_Get_Name_Index( FT_Face     face,
-                     FT_String*  glyph_name )
+  FT_Get_Name_Index( FT_Face           face,
+                     const FT_String*  glyph_name )
   {
     FT_UInt  result = 0;
 
@@ -4617,7 +4648,7 @@
 #ifdef FT_DEBUG_LEVEL_TRACE
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_checksum
+#define FT_COMPONENT  checksum
 
     /*
      * Computing the MD5 checksum is expensive, unnecessarily distorting a
@@ -4731,7 +4762,7 @@
     }
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_objs
+#define FT_COMPONENT  objs
 
 #endif /* FT_DEBUG_LEVEL_TRACE */
 
@@ -5124,9 +5155,9 @@
     service = (FT_Service_Properties)interface;
 
     if ( set )
-      missing_func = (FT_Bool)( !service->set_property );
+      missing_func = FT_BOOL( !service->set_property );
     else
-      missing_func = (FT_Bool)( !service->get_property );
+      missing_func = FT_BOOL( !service->get_property );
 
     if ( missing_func )
     {
diff --git a/src/base/ftotval.c b/src/base/ftotval.c
index 50825bd..007576c 100644
--- a/src/base/ftotval.c
+++ b/src/base/ftotval.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for validating OpenType tables (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
index 611b4f6..0e2ba34 100644
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -4,7 +4,7 @@
  *
  *   FreeType outline management (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -16,13 +16,6 @@
  */
 
 
-  /**************************************************************************
-   *
-   * All functions are declared in freetype.h.
-   *
-   */
-
-
 #include <ft2build.h>
 #include FT_OUTLINE_H
 #include FT_INTERNAL_OBJECTS_H
@@ -38,7 +31,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_outline
+#define FT_COMPONENT  outline
 
 
   static
@@ -53,8 +46,7 @@
                         void*                    user )
   {
 #undef  SCALED
-#define SCALED( x )  ( ( (x) < 0 ? -( -(x) << shift )             \
-                                 :  (  (x) << shift ) ) - delta )
+#define SCALED( x )  ( (x) * ( 1L << shift ) - delta )
 
     FT_Vector   v_last;
     FT_Vector   v_control;
@@ -296,14 +288,22 @@
   }
 
 
-  FT_EXPORT_DEF( FT_Error )
-  FT_Outline_New_Internal( FT_Memory    memory,
-                           FT_UInt      numPoints,
-                           FT_Int       numContours,
-                           FT_Outline  *anoutline )
-  {
-    FT_Error  error;
+  /* documentation is in ftoutln.h */
 
+  FT_EXPORT_DEF( FT_Error )
+  FT_Outline_New( FT_Library   library,
+                  FT_UInt      numPoints,
+                  FT_Int       numContours,
+                  FT_Outline  *anoutline )
+  {
+    FT_Error   error;
+    FT_Memory  memory;
+
+
+    if ( !library )
+      return FT_THROW( Invalid_Library_Handle );
+
+    memory = library->memory;
 
     if ( !anoutline || !memory )
       return FT_THROW( Invalid_Argument );
@@ -330,7 +330,7 @@
 
   Fail:
     anoutline->flags |= FT_OUTLINE_OWNER;
-    FT_Outline_Done_Internal( memory, anoutline );
+    FT_Outline_Done( library, anoutline );
 
     return error;
   }
@@ -339,22 +339,6 @@
   /* documentation is in ftoutln.h */
 
   FT_EXPORT_DEF( FT_Error )
-  FT_Outline_New( FT_Library   library,
-                  FT_UInt      numPoints,
-                  FT_Int       numContours,
-                  FT_Outline  *anoutline )
-  {
-    if ( !library )
-      return FT_THROW( Invalid_Library_Handle );
-
-    return FT_Outline_New_Internal( library->memory, numPoints,
-                                    numContours, anoutline );
-  }
-
-
-  /* documentation is in ftoutln.h */
-
-  FT_EXPORT_DEF( FT_Error )
   FT_Outline_Check( FT_Outline*  outline )
   {
     if ( outline )
@@ -436,13 +420,23 @@
   }
 
 
+  /* documentation is in ftoutln.h */
+
   FT_EXPORT_DEF( FT_Error )
-  FT_Outline_Done_Internal( FT_Memory    memory,
-                            FT_Outline*  outline )
+  FT_Outline_Done( FT_Library   library,
+                   FT_Outline*  outline )
   {
+    FT_Memory  memory;
+
+
+    if ( !library )
+      return FT_THROW( Invalid_Library_Handle );
+
     if ( !outline )
       return FT_THROW( Invalid_Outline );
 
+    memory = library->memory;
+
     if ( !memory )
       return FT_THROW( Invalid_Argument );
 
@@ -460,21 +454,6 @@
 
   /* documentation is in ftoutln.h */
 
-  FT_EXPORT_DEF( FT_Error )
-  FT_Outline_Done( FT_Library   library,
-                   FT_Outline*  outline )
-  {
-    /* check for valid `outline' in FT_Outline_Done_Internal() */
-
-    if ( !library )
-      return FT_THROW( Invalid_Library_Handle );
-
-    return FT_Outline_Done_Internal( library->memory, outline );
-  }
-
-
-  /* documentation is in ftoutln.h */
-
   FT_EXPORT_DEF( void )
   FT_Outline_Get_CBox( const FT_Outline*  outline,
                        FT_BBox           *acbox )
@@ -641,6 +620,16 @@
 
     params->source = (void*)outline;
 
+    /* preset clip_box for direct mode */
+    if ( params->flags & FT_RASTER_FLAG_DIRECT    &&
+         !( params->flags & FT_RASTER_FLAG_CLIP ) )
+    {
+      params->clip_box.xMin = cbox.xMin >> 6;
+      params->clip_box.yMin = cbox.yMin >> 6;
+      params->clip_box.xMax = ( cbox.xMax + 63 ) >> 6;
+      params->clip_box.yMax = ( cbox.yMax + 63 ) >> 6;
+    }
+
     error = FT_ERR( Cannot_Render_Glyph );
     while ( renderer )
     {
@@ -1096,7 +1085,8 @@
         v_cur.y = points[n].y >> yshift;
 
         area = ADD_LONG( area,
-                         ( v_cur.y - v_prev.y ) * ( v_cur.x + v_prev.x ) );
+                         MUL_LONG( v_cur.y - v_prev.y,
+                                   v_cur.x + v_prev.x ) );
 
         v_prev = v_cur;
       }
diff --git a/src/base/ftpatent.c b/src/base/ftpatent.c
index 24331c1..020f464 100644
--- a/src/base/ftpatent.c
+++ b/src/base/ftpatent.c
@@ -5,7 +5,7 @@
  *   FreeType API for checking patented TrueType bytecode instructions
  *   (body).  Obsolete, retained for backward compatibility.
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftpfr.c b/src/base/ftpfr.c
index 2761ad0..aeff1db 100644
--- a/src/base/ftpfr.c
+++ b/src/base/ftpfr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing PFR-specific data (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftpsprop.c b/src/base/ftpsprop.c
index 9c5344a..52b9d45 100644
--- a/src/base/ftpsprop.c
+++ b/src/base/ftpsprop.c
@@ -5,7 +5,7 @@
  *   Get and set properties of PostScript drivers (body).
  *   See `ftdriver.h' for available properties.
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -32,7 +32,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_psprops
+#define FT_COMPONENT  psprops
 
 
   FT_BASE_CALLBACK_DEF( FT_Error )
diff --git a/src/base/ftrfork.c b/src/base/ftrfork.c
index c61765b..73b7eb0 100644
--- a/src/base/ftrfork.c
+++ b/src/base/ftrfork.c
@@ -4,7 +4,7 @@
  *
  *   Embedded resource forks accessor (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO and Redhat K.K.
  *
  * FT_Raccess_Get_HeaderInfo() and raccess_guess_darwin_hfsplus() are
@@ -32,7 +32,7 @@
 #include "ftbase.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_raccess
+#define FT_COMPONENT  raccess
 
 
   /*************************************************************************/
diff --git a/src/base/ftsnames.c b/src/base/ftsnames.c
index 9135e48..7ab3fe3 100644
--- a/src/base/ftsnames.c
+++ b/src/base/ftsnames.c
@@ -7,7 +7,7 @@
  *
  *   This is _not_ used to retrieve glyph names!
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftstream.c b/src/base/ftstream.c
index 9c8cab3..4b0890d 100644
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -4,7 +4,7 @@
  *
  *   I/O stream support (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_stream
+#define FT_COMPONENT  stream
 
 
   FT_BASE_DEF( void )
@@ -222,11 +222,11 @@
 
 #ifdef FT_DEBUG_MEMORY
       ft_mem_free( memory, *pbytes );
-      *pbytes = NULL;
 #else
       FT_FREE( *pbytes );
 #endif
     }
+
     *pbytes = NULL;
   }
 
@@ -239,6 +239,8 @@
     FT_ULong  read_bytes;
 
 
+    FT_TRACE7(( "FT_Stream_EnterFrame: %ld bytes\n", count ));
+
     /* check for nested frame access */
     FT_ASSERT( stream && stream->cursor == 0 );
 
@@ -282,6 +284,7 @@
         FT_FREE( stream->base );
         error = FT_THROW( Invalid_Stream_Operation );
       }
+
       stream->cursor = stream->base;
       stream->limit  = stream->cursor + count;
       stream->pos   += read_bytes;
@@ -322,13 +325,16 @@
     /*  In this case, the loader code handles the 0-length table          */
     /*  gracefully; however, stream.cursor is really set to 0 by the      */
     /*  FT_Stream_EnterFrame() call, and this is not an error.            */
-    /*                                                                    */
+
+    FT_TRACE7(( "FT_Stream_ExitFrame\n" ));
+
     FT_ASSERT( stream );
 
     if ( stream->read )
     {
       FT_Memory  memory = stream->memory;
 
+
 #ifdef FT_DEBUG_MEMORY
       ft_mem_free( memory, stream->base );
       stream->base = NULL;
@@ -336,6 +342,7 @@
       FT_FREE( stream->base );
 #endif
     }
+
     stream->cursor = NULL;
     stream->limit  = NULL;
   }
diff --git a/src/base/ftstroke.c b/src/base/ftstroke.c
index 4455e7c..1b2c0f6 100644
--- a/src/base/ftstroke.c
+++ b/src/base/ftstroke.c
@@ -4,7 +4,7 @@
  *
  *   FreeType path stroker (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -86,16 +86,18 @@
 
 
     base[4].x = base[2].x;
-    b = base[1].x;
-    a = base[3].x = ( base[2].x + b ) / 2;
-    b = base[1].x = ( base[0].x + b ) / 2;
-    base[2].x = ( a + b ) / 2;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    base[3].x = b >> 1;
+    base[2].x = ( a + b ) >> 2;
+    base[1].x = a >> 1;
 
     base[4].y = base[2].y;
-    b = base[1].y;
-    a = base[3].y = ( base[2].y + b ) / 2;
-    b = base[1].y = ( base[0].y + b ) / 2;
-    base[2].y = ( a + b ) / 2;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    base[3].y = b >> 1;
+    base[2].y = ( a + b ) >> 2;
+    base[1].y = a >> 1;
   }
 
 
@@ -153,28 +155,32 @@
   static void
   ft_cubic_split( FT_Vector*  base )
   {
-    FT_Pos  a, b, c, d;
+    FT_Pos  a, b, c;
 
 
     base[6].x = base[3].x;
-    c = base[1].x;
-    d = base[2].x;
-    base[1].x = a = ( base[0].x + c ) / 2;
-    base[5].x = b = ( base[3].x + d ) / 2;
-    c = ( c + d ) / 2;
-    base[2].x = a = ( a + c ) / 2;
-    base[4].x = b = ( b + c ) / 2;
-    base[3].x = ( a + b ) / 2;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    c = base[2].x + base[3].x;
+    base[5].x = c >> 1;
+    c += b;
+    base[4].x = c >> 2;
+    base[1].x = a >> 1;
+    a += b;
+    base[2].x = a >> 2;
+    base[3].x = ( a + c ) >> 3;
 
     base[6].y = base[3].y;
-    c = base[1].y;
-    d = base[2].y;
-    base[1].y = a = ( base[0].y + c ) / 2;
-    base[5].y = b = ( base[3].y + d ) / 2;
-    c = ( c + d ) / 2;
-    base[2].y = a = ( a + c ) / 2;
-    base[4].y = b = ( b + c ) / 2;
-    base[3].y = ( a + b ) / 2;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    c = base[2].y + base[3].y;
+    base[5].y = c >> 1;
+    c += b;
+    base[4].y = c >> 2;
+    base[1].y = a >> 1;
+    a += b;
+    base[2].y = a >> 2;
+    base[3].y = ( a + c ) >> 3;
   }
 
 
@@ -367,6 +373,7 @@
       /* it contains the `adjusted' starting coordinates          */
       border->num_points    = --count;
       border->points[start] = border->points[count];
+      border->tags[start]   = border->tags[count];
 
       if ( reverse )
       {
@@ -431,8 +438,8 @@
     }
     else
     {
-      /* don't add zero-length lineto */
-      if ( border->num_points > 0                                          &&
+      /* don't add zero-length lineto, but always add moveto */
+      if ( border->num_points > (FT_UInt)border->start                     &&
            FT_IS_SMALL( border->points[border->num_points - 1].x - to->x ) &&
            FT_IS_SMALL( border->points[border->num_points - 1].y - to->y ) )
         return error;
diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
index 5539105..f87ed65 100644
--- a/src/base/ftsynth.c
+++ b/src/base/ftsynth.c
@@ -4,7 +4,7 @@
  *
  *   FreeType synthesizing code for emboldening and slanting (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -31,7 +31,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_synth
+#define FT_COMPONENT  synth
 
 
   /*************************************************************************/
diff --git a/src/base/ftsystem.c b/src/base/ftsystem.c
index d761ad9..f92b3a0 100644
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -4,7 +4,7 @@
  *
  *   ANSI-specific FreeType low-level system interface (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -154,7 +154,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_io
+#define FT_COMPONENT  io
 
   /* We use the macro STREAM_FILE for convenience to extract the       */
   /* system-specific stream handle from a given FreeType stream object */
diff --git a/src/base/fttrigon.c b/src/base/fttrigon.c
index d375bd7..3872197 100644
--- a/src/base/fttrigon.c
+++ b/src/base/fttrigon.c
@@ -4,7 +4,7 @@
  *
  *   FreeType trigonometric functions (body).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/fttype1.c b/src/base/fttype1.c
index 229b0ac..26d4f1c 100644
--- a/src/base/fttype1.c
+++ b/src/base/fttype1.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for PS names support (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/ftutil.c b/src/base/ftutil.c
index eced7bb..92bd857 100644
--- a/src/base/ftutil.c
+++ b/src/base/ftutil.c
@@ -4,7 +4,7 @@
  *
  *   FreeType utility file for memory and list management (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -30,7 +30,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_memory
+#define FT_COMPONENT  memory
 
 
   /*************************************************************************/
@@ -236,7 +236,7 @@
   /*************************************************************************/
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_list
+#define FT_COMPONENT  list
 
   /* documentation is in ftlist.h */
 
diff --git a/src/base/ftver.rc b/src/base/ftver.rc
index b0b6e00..1354497 100644
--- a/src/base/ftver.rc
+++ b/src/base/ftver.rc
@@ -4,7 +4,7 @@
 /*                                                                         */
 /*    FreeType VERSIONINFO resource for Windows DLLs.                      */
 /*                                                                         */
-/*  Copyright 2018 by                                                      */
+/*  Copyright (C) 2018-2019 by                                             */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
@@ -18,8 +18,8 @@
 
 #include<windows.h>
 
-#define FT_VERSION      2,9,1,0
-#define FT_VERSION_STR  "2.9.1"
+#define FT_VERSION      2,10,1,0
+#define FT_VERSION_STR  "2.10.1"
 
 VS_VERSION_INFO      VERSIONINFO
 FILEVERSION          FT_VERSION
@@ -45,7 +45,7 @@
       VALUE "FileVersion",      FT_VERSION_STR
       VALUE "ProductName",      "FreeType"
       VALUE "ProductVersion",   FT_VERSION_STR
-      VALUE "LegalCopyright",   "\251 2018 The FreeType Project www.freetype.org. All rights reserved."
+      VALUE "LegalCopyright",   "\251 2018-2019 The FreeType Project www.freetype.org. All rights reserved."
       VALUE "InternalName",     "freetype"
       VALUE "OriginalFilename", FT_FILENAME
     END
diff --git a/src/base/ftwinfnt.c b/src/base/ftwinfnt.c
index bd6548f..59daa77 100644
--- a/src/base/ftwinfnt.c
+++ b/src/base/ftwinfnt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType API for accessing Windows FNT specific info (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/base/rules.mk b/src/base/rules.mk
index 214fd77..4b24c6d 100644
--- a/src/base/rules.mk
+++ b/src/base/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -40,6 +40,7 @@
             $(BASE_DIR)/ftcalc.c   \
             $(BASE_DIR)/ftcolor.c  \
             $(BASE_DIR)/ftdbgmem.c \
+            $(BASE_DIR)/fterrors.c \
             $(BASE_DIR)/ftfntfmt.c \
             $(BASE_DIR)/ftgloadr.c \
             $(BASE_DIR)/fthash.c   \
diff --git a/src/bdf/Jamfile b/src/bdf/Jamfile
index d9e441c..a49c7f5 100644
--- a/src/bdf/Jamfile
+++ b/src/bdf/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/bdf Jamfile
 #
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/bdf/bdf.h b/src/bdf/bdf.h
index a6ba82e..d9abd23 100644
--- a/src/bdf/bdf.h
+++ b/src/bdf/bdf.h
@@ -109,9 +109,9 @@
   /* There are a set of defaults and each font has their own.   */
   typedef struct  bdf_property_t_
   {
-    char*  name;         /* Name of the property.   */
-    int    format;       /* Format of the property. */
-    int    builtin;      /* A builtin property.     */
+    const char*  name;         /* Name of the property.   */
+    int          format;       /* Format of the property. */
+    int          builtin;      /* A builtin property.     */
     union
     {
       char*          atom;
@@ -147,7 +147,7 @@
   typedef struct  bdf_glyph_t_
   {
     char*           name;        /* Glyph name.                          */
-    long            encoding;    /* Glyph encoding.                      */
+    unsigned long   encoding;    /* Glyph encoding.                      */
     unsigned short  swidth;      /* Scalable width.                      */
     unsigned short  dwidth;      /* Device width.                        */
     bdf_bbx_t       bbx;         /* Glyph bounding box.                  */
@@ -158,20 +158,6 @@
   } bdf_glyph_t;
 
 
-  typedef struct  bdf_glyphlist_t_
-  {
-    unsigned short  pad;          /* Pad to 4-byte boundary.              */
-    unsigned short  bpp;          /* Bits per pixel.                      */
-    long            start;        /* Beginning encoding value of glyphs.  */
-    long            end;          /* Ending encoding value of glyphs.     */
-    bdf_glyph_t*    glyphs;       /* Glyphs themselves.                   */
-    unsigned long   glyphs_size;  /* Glyph structures allocated.          */
-    unsigned long   glyphs_used;  /* Glyph structures used.               */
-    bdf_bbx_t       bbx;          /* Overall bounding box of glyphs.      */
-
-  } bdf_glyphlist_t;
-
-
   typedef struct  bdf_font_t_
   {
     char*            name;           /* Name of the font.                   */
@@ -185,7 +171,7 @@
 
     unsigned short   monowidth;      /* Logical width for monowidth font.   */
 
-    long             default_char;   /* Encoding of the default glyph.      */
+    unsigned long    default_char;   /* Encoding of the default glyph.      */
 
     long             font_ascent;    /* Font ascent.                        */
     long             font_descent;   /* Font descent.                       */
@@ -205,16 +191,8 @@
     char*            comments;       /* Font comments.                      */
     unsigned long    comments_len;   /* Length of comment string.           */
 
-    bdf_glyphlist_t  overflow;       /* Storage used for glyph insertion.   */
-
     void*            internal;       /* Internal data for the font.         */
 
-    /* The size of the next two arrays must be in sync with the */
-    /* size of the `have' array in the `bdf_parse_t' structure. */
-    unsigned long    nmod[34816];    /* Bitmap indicating modified glyphs.  */
-    unsigned long    umod[34816];    /* Bitmap indicating modified          */
-                                     /* unencoded glyphs.                   */
-    unsigned short   modified;       /* Boolean indicating font modified.   */
     unsigned short   bpp;            /* Bits per pixel.                     */
 
     FT_Memory        memory;
diff --git a/src/bdf/bdfdrivr.c b/src/bdf/bdfdrivr.c
index 1e272b0..60eb933 100644
--- a/src/bdf/bdfdrivr.c
+++ b/src/bdf/bdfdrivr.c
@@ -48,7 +48,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_bdfdriver
+#define FT_COMPONENT  bdfdriver
 
 
   typedef struct  BDF_CMapRec_
@@ -99,14 +99,17 @@
 
     min = 0;
     max = cmap->num_encodings;
+    mid = ( min + max ) >> 1;
 
     while ( min < max )
     {
       FT_ULong  code;
 
 
-      mid  = ( min + max ) >> 1;
-      code = (FT_ULong)encodings[mid].enc;
+      if ( mid >= max || mid < min )
+        mid = ( min + max ) >> 1;
+
+      code = encodings[mid].enc;
 
       if ( charcode == code )
       {
@@ -120,6 +123,9 @@
         max = mid;
       else
         min = mid + 1;
+
+      /* prediction in a continuous block */
+      mid += charcode - code;
     }
 
     return result;
@@ -139,14 +145,17 @@
 
     min = 0;
     max = cmap->num_encodings;
+    mid = ( min + max ) >> 1;
 
     while ( min < max )
     {
       FT_ULong  code; /* same as BDF_encoding_el.enc */
 
 
-      mid  = ( min + max ) >> 1;
-      code = (FT_ULong)encodings[mid].enc;
+      if ( mid >= max || mid < min )
+        mid = ( min + max ) >> 1;
+
+      code = encodings[mid].enc;
 
       if ( charcode == code )
       {
@@ -160,12 +169,15 @@
         max = mid;
       else
         min = mid + 1;
+
+      /* prediction in a continuous block */
+      mid += charcode - code;
     }
 
     charcode = 0;
     if ( min < cmap->num_encodings )
     {
-      charcode = (FT_ULong)encodings[min].enc;
+      charcode = encodings[min].enc;
       result   = encodings[min].glyph + 1;
     }
 
@@ -204,13 +216,13 @@
     bdf_font_t*      font   = bdf->bdffont;
     bdf_property_t*  prop;
 
-    char*   strings[4] = { NULL, NULL, NULL, NULL };
-    size_t  nn, len, lengths[4];
+    const char*   strings[4] = { NULL, NULL, NULL, NULL };
+    size_t        lengths[4], nn, len;
 
 
     face->style_flags = 0;
 
-    prop = bdf_get_font_property( font, (char *)"SLANT" );
+    prop = bdf_get_font_property( font, "SLANT" );
     if ( prop && prop->format == BDF_ATOM                             &&
          prop->value.atom                                             &&
          ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' ||
@@ -218,30 +230,30 @@
     {
       face->style_flags |= FT_STYLE_FLAG_ITALIC;
       strings[2] = ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' )
-                   ? (char *)"Oblique"
-                   : (char *)"Italic";
+                   ? "Oblique"
+                   : "Italic";
     }
 
-    prop = bdf_get_font_property( font, (char *)"WEIGHT_NAME" );
+    prop = bdf_get_font_property( font, "WEIGHT_NAME" );
     if ( prop && prop->format == BDF_ATOM                             &&
          prop->value.atom                                             &&
          ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
     {
       face->style_flags |= FT_STYLE_FLAG_BOLD;
-      strings[1] = (char *)"Bold";
+      strings[1] = "Bold";
     }
 
-    prop = bdf_get_font_property( font, (char *)"SETWIDTH_NAME" );
+    prop = bdf_get_font_property( font, "SETWIDTH_NAME" );
     if ( prop && prop->format == BDF_ATOM                              &&
          prop->value.atom && *(prop->value.atom)                       &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[3] = (char *)(prop->value.atom);
+      strings[3] = (const char *)(prop->value.atom);
 
-    prop = bdf_get_font_property( font, (char *)"ADD_STYLE_NAME" );
+    prop = bdf_get_font_property( font, "ADD_STYLE_NAME" );
     if ( prop && prop->format == BDF_ATOM                              &&
          prop->value.atom && *(prop->value.atom)                       &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[0] = (char *)(prop->value.atom);
+      strings[0] = (const char *)(prop->value.atom);
 
     for ( len = 0, nn = 0; nn < 4; nn++ )
     {
@@ -255,7 +267,7 @@
 
     if ( len == 0 )
     {
-      strings[0] = (char *)"Regular";
+      strings[0] = "Regular";
       lengths[0] = ft_strlen( strings[0] );
       len        = lengths[0] + 1;
     }
@@ -271,7 +283,7 @@
 
       for ( nn = 0; nn < 4; nn++ )
       {
-        char*  src = strings[nn];
+        const char*  src = strings[nn];
 
 
         len = lengths[nn];
diff --git a/src/bdf/bdfdrivr.h b/src/bdf/bdfdrivr.h
index 4857316..b37b84e 100644
--- a/src/bdf/bdfdrivr.h
+++ b/src/bdf/bdfdrivr.h
@@ -39,7 +39,7 @@
 
   typedef struct  BDF_encoding_el_
   {
-    FT_Long    enc;
+    FT_ULong   enc;
     FT_UShort  glyph;
 
   } BDF_encoding_el;
@@ -56,9 +56,6 @@
 
     BDF_encoding_el*  en_table;
 
-    FT_CharMap        charmap_handle;
-    FT_CharMapRec     charmap;  /* a single charmap per face */
-
     FT_UInt           default_glyph;
 
   } BDF_FaceRec, *BDF_Face;
diff --git a/src/bdf/bdflib.c b/src/bdf/bdflib.c
index 5c09591..63813f7 100644
--- a/src/bdf/bdflib.c
+++ b/src/bdf/bdflib.c
@@ -49,7 +49,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_bdflib
+#define FT_COMPONENT  bdflib
 
 
   /**************************************************************************
@@ -79,89 +79,89 @@
 
   static const bdf_property_t  _bdf_properties[] =
   {
-    { (char *)"ADD_STYLE_NAME",          BDF_ATOM,     1, { 0 } },
-    { (char *)"AVERAGE_WIDTH",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"AVG_CAPITAL_WIDTH",       BDF_INTEGER,  1, { 0 } },
-    { (char *)"AVG_LOWERCASE_WIDTH",     BDF_INTEGER,  1, { 0 } },
-    { (char *)"CAP_HEIGHT",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"CHARSET_COLLECTIONS",     BDF_ATOM,     1, { 0 } },
-    { (char *)"CHARSET_ENCODING",        BDF_ATOM,     1, { 0 } },
-    { (char *)"CHARSET_REGISTRY",        BDF_ATOM,     1, { 0 } },
-    { (char *)"COMMENT",                 BDF_ATOM,     1, { 0 } },
-    { (char *)"COPYRIGHT",               BDF_ATOM,     1, { 0 } },
-    { (char *)"DEFAULT_CHAR",            BDF_CARDINAL, 1, { 0 } },
-    { (char *)"DESTINATION",             BDF_CARDINAL, 1, { 0 } },
-    { (char *)"DEVICE_FONT_NAME",        BDF_ATOM,     1, { 0 } },
-    { (char *)"END_SPACE",               BDF_INTEGER,  1, { 0 } },
-    { (char *)"FACE_NAME",               BDF_ATOM,     1, { 0 } },
-    { (char *)"FAMILY_NAME",             BDF_ATOM,     1, { 0 } },
-    { (char *)"FIGURE_WIDTH",            BDF_INTEGER,  1, { 0 } },
-    { (char *)"FONT",                    BDF_ATOM,     1, { 0 } },
-    { (char *)"FONTNAME_REGISTRY",       BDF_ATOM,     1, { 0 } },
-    { (char *)"FONT_ASCENT",             BDF_INTEGER,  1, { 0 } },
-    { (char *)"FONT_DESCENT",            BDF_INTEGER,  1, { 0 } },
-    { (char *)"FOUNDRY",                 BDF_ATOM,     1, { 0 } },
-    { (char *)"FULL_NAME",               BDF_ATOM,     1, { 0 } },
-    { (char *)"ITALIC_ANGLE",            BDF_INTEGER,  1, { 0 } },
-    { (char *)"MAX_SPACE",               BDF_INTEGER,  1, { 0 } },
-    { (char *)"MIN_SPACE",               BDF_INTEGER,  1, { 0 } },
-    { (char *)"NORM_SPACE",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"NOTICE",                  BDF_ATOM,     1, { 0 } },
-    { (char *)"PIXEL_SIZE",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"POINT_SIZE",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"QUAD_WIDTH",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_ASCENT",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_AVERAGE_WIDTH",       BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_AVG_CAPITAL_WIDTH",   BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_AVG_LOWERCASE_WIDTH", BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_CAP_HEIGHT",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_DESCENT",             BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_END_SPACE",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_FIGURE_WIDTH",        BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_MAX_SPACE",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_MIN_SPACE",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_NORM_SPACE",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_PIXEL_SIZE",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_POINT_SIZE",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_PIXELSIZE",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_POINTSIZE",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_QUAD_WIDTH",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SMALL_CAP_SIZE",      BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_STRIKEOUT_ASCENT",    BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_STRIKEOUT_DESCENT",   BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUBSCRIPT_SIZE",      BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUBSCRIPT_X",         BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUBSCRIPT_Y",         BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUPERSCRIPT_SIZE",    BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUPERSCRIPT_X",       BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_SUPERSCRIPT_Y",       BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_UNDERLINE_POSITION",  BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_UNDERLINE_THICKNESS", BDF_INTEGER,  1, { 0 } },
-    { (char *)"RAW_X_HEIGHT",            BDF_INTEGER,  1, { 0 } },
-    { (char *)"RELATIVE_SETWIDTH",       BDF_CARDINAL, 1, { 0 } },
-    { (char *)"RELATIVE_WEIGHT",         BDF_CARDINAL, 1, { 0 } },
-    { (char *)"RESOLUTION",              BDF_INTEGER,  1, { 0 } },
-    { (char *)"RESOLUTION_X",            BDF_CARDINAL, 1, { 0 } },
-    { (char *)"RESOLUTION_Y",            BDF_CARDINAL, 1, { 0 } },
-    { (char *)"SETWIDTH_NAME",           BDF_ATOM,     1, { 0 } },
-    { (char *)"SLANT",                   BDF_ATOM,     1, { 0 } },
-    { (char *)"SMALL_CAP_SIZE",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"SPACING",                 BDF_ATOM,     1, { 0 } },
-    { (char *)"STRIKEOUT_ASCENT",        BDF_INTEGER,  1, { 0 } },
-    { (char *)"STRIKEOUT_DESCENT",       BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUBSCRIPT_SIZE",          BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUBSCRIPT_X",             BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUBSCRIPT_Y",             BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUPERSCRIPT_SIZE",        BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUPERSCRIPT_X",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"SUPERSCRIPT_Y",           BDF_INTEGER,  1, { 0 } },
-    { (char *)"UNDERLINE_POSITION",      BDF_INTEGER,  1, { 0 } },
-    { (char *)"UNDERLINE_THICKNESS",     BDF_INTEGER,  1, { 0 } },
-    { (char *)"WEIGHT",                  BDF_CARDINAL, 1, { 0 } },
-    { (char *)"WEIGHT_NAME",             BDF_ATOM,     1, { 0 } },
-    { (char *)"X_HEIGHT",                BDF_INTEGER,  1, { 0 } },
-    { (char *)"_MULE_BASELINE_OFFSET",   BDF_INTEGER,  1, { 0 } },
-    { (char *)"_MULE_RELATIVE_COMPOSE",  BDF_INTEGER,  1, { 0 } },
+    { "ADD_STYLE_NAME",          BDF_ATOM,     1, { 0 } },
+    { "AVERAGE_WIDTH",           BDF_INTEGER,  1, { 0 } },
+    { "AVG_CAPITAL_WIDTH",       BDF_INTEGER,  1, { 0 } },
+    { "AVG_LOWERCASE_WIDTH",     BDF_INTEGER,  1, { 0 } },
+    { "CAP_HEIGHT",              BDF_INTEGER,  1, { 0 } },
+    { "CHARSET_COLLECTIONS",     BDF_ATOM,     1, { 0 } },
+    { "CHARSET_ENCODING",        BDF_ATOM,     1, { 0 } },
+    { "CHARSET_REGISTRY",        BDF_ATOM,     1, { 0 } },
+    { "COMMENT",                 BDF_ATOM,     1, { 0 } },
+    { "COPYRIGHT",               BDF_ATOM,     1, { 0 } },
+    { "DEFAULT_CHAR",            BDF_CARDINAL, 1, { 0 } },
+    { "DESTINATION",             BDF_CARDINAL, 1, { 0 } },
+    { "DEVICE_FONT_NAME",        BDF_ATOM,     1, { 0 } },
+    { "END_SPACE",               BDF_INTEGER,  1, { 0 } },
+    { "FACE_NAME",               BDF_ATOM,     1, { 0 } },
+    { "FAMILY_NAME",             BDF_ATOM,     1, { 0 } },
+    { "FIGURE_WIDTH",            BDF_INTEGER,  1, { 0 } },
+    { "FONT",                    BDF_ATOM,     1, { 0 } },
+    { "FONTNAME_REGISTRY",       BDF_ATOM,     1, { 0 } },
+    { "FONT_ASCENT",             BDF_INTEGER,  1, { 0 } },
+    { "FONT_DESCENT",            BDF_INTEGER,  1, { 0 } },
+    { "FOUNDRY",                 BDF_ATOM,     1, { 0 } },
+    { "FULL_NAME",               BDF_ATOM,     1, { 0 } },
+    { "ITALIC_ANGLE",            BDF_INTEGER,  1, { 0 } },
+    { "MAX_SPACE",               BDF_INTEGER,  1, { 0 } },
+    { "MIN_SPACE",               BDF_INTEGER,  1, { 0 } },
+    { "NORM_SPACE",              BDF_INTEGER,  1, { 0 } },
+    { "NOTICE",                  BDF_ATOM,     1, { 0 } },
+    { "PIXEL_SIZE",              BDF_INTEGER,  1, { 0 } },
+    { "POINT_SIZE",              BDF_INTEGER,  1, { 0 } },
+    { "QUAD_WIDTH",              BDF_INTEGER,  1, { 0 } },
+    { "RAW_ASCENT",              BDF_INTEGER,  1, { 0 } },
+    { "RAW_AVERAGE_WIDTH",       BDF_INTEGER,  1, { 0 } },
+    { "RAW_AVG_CAPITAL_WIDTH",   BDF_INTEGER,  1, { 0 } },
+    { "RAW_AVG_LOWERCASE_WIDTH", BDF_INTEGER,  1, { 0 } },
+    { "RAW_CAP_HEIGHT",          BDF_INTEGER,  1, { 0 } },
+    { "RAW_DESCENT",             BDF_INTEGER,  1, { 0 } },
+    { "RAW_END_SPACE",           BDF_INTEGER,  1, { 0 } },
+    { "RAW_FIGURE_WIDTH",        BDF_INTEGER,  1, { 0 } },
+    { "RAW_MAX_SPACE",           BDF_INTEGER,  1, { 0 } },
+    { "RAW_MIN_SPACE",           BDF_INTEGER,  1, { 0 } },
+    { "RAW_NORM_SPACE",          BDF_INTEGER,  1, { 0 } },
+    { "RAW_PIXEL_SIZE",          BDF_INTEGER,  1, { 0 } },
+    { "RAW_POINT_SIZE",          BDF_INTEGER,  1, { 0 } },
+    { "RAW_PIXELSIZE",           BDF_INTEGER,  1, { 0 } },
+    { "RAW_POINTSIZE",           BDF_INTEGER,  1, { 0 } },
+    { "RAW_QUAD_WIDTH",          BDF_INTEGER,  1, { 0 } },
+    { "RAW_SMALL_CAP_SIZE",      BDF_INTEGER,  1, { 0 } },
+    { "RAW_STRIKEOUT_ASCENT",    BDF_INTEGER,  1, { 0 } },
+    { "RAW_STRIKEOUT_DESCENT",   BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUBSCRIPT_SIZE",      BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUBSCRIPT_X",         BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUBSCRIPT_Y",         BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUPERSCRIPT_SIZE",    BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUPERSCRIPT_X",       BDF_INTEGER,  1, { 0 } },
+    { "RAW_SUPERSCRIPT_Y",       BDF_INTEGER,  1, { 0 } },
+    { "RAW_UNDERLINE_POSITION",  BDF_INTEGER,  1, { 0 } },
+    { "RAW_UNDERLINE_THICKNESS", BDF_INTEGER,  1, { 0 } },
+    { "RAW_X_HEIGHT",            BDF_INTEGER,  1, { 0 } },
+    { "RELATIVE_SETWIDTH",       BDF_CARDINAL, 1, { 0 } },
+    { "RELATIVE_WEIGHT",         BDF_CARDINAL, 1, { 0 } },
+    { "RESOLUTION",              BDF_INTEGER,  1, { 0 } },
+    { "RESOLUTION_X",            BDF_CARDINAL, 1, { 0 } },
+    { "RESOLUTION_Y",            BDF_CARDINAL, 1, { 0 } },
+    { "SETWIDTH_NAME",           BDF_ATOM,     1, { 0 } },
+    { "SLANT",                   BDF_ATOM,     1, { 0 } },
+    { "SMALL_CAP_SIZE",          BDF_INTEGER,  1, { 0 } },
+    { "SPACING",                 BDF_ATOM,     1, { 0 } },
+    { "STRIKEOUT_ASCENT",        BDF_INTEGER,  1, { 0 } },
+    { "STRIKEOUT_DESCENT",       BDF_INTEGER,  1, { 0 } },
+    { "SUBSCRIPT_SIZE",          BDF_INTEGER,  1, { 0 } },
+    { "SUBSCRIPT_X",             BDF_INTEGER,  1, { 0 } },
+    { "SUBSCRIPT_Y",             BDF_INTEGER,  1, { 0 } },
+    { "SUPERSCRIPT_SIZE",        BDF_INTEGER,  1, { 0 } },
+    { "SUPERSCRIPT_X",           BDF_INTEGER,  1, { 0 } },
+    { "SUPERSCRIPT_Y",           BDF_INTEGER,  1, { 0 } },
+    { "UNDERLINE_POSITION",      BDF_INTEGER,  1, { 0 } },
+    { "UNDERLINE_THICKNESS",     BDF_INTEGER,  1, { 0 } },
+    { "WEIGHT",                  BDF_CARDINAL, 1, { 0 } },
+    { "WEIGHT_NAME",             BDF_ATOM,     1, { 0 } },
+    { "X_HEIGHT",                BDF_INTEGER,  1, { 0 } },
+    { "_MULE_BASELINE_OFFSET",   BDF_INTEGER,  1, { 0 } },
+    { "_MULE_RELATIVE_COMPOSE",  BDF_INTEGER,  1, { 0 } },
   };
 
   static const unsigned long
@@ -196,11 +196,10 @@
 #define ACMSG9   "SWIDTH field missing at line %ld.  Set automatically.\n"
 #define ACMSG10  "DWIDTH field missing at line %ld.  Set to glyph width.\n"
 #define ACMSG11  "SIZE bits per pixel field adjusted to %hd.\n"
-#define ACMSG12  "Duplicate encoding %ld (%s) changed to unencoded.\n"
-#define ACMSG13  "Glyph %ld extra rows removed.\n"
-#define ACMSG14  "Glyph %ld extra columns removed.\n"
+#define ACMSG13  "Glyph %lu extra rows removed.\n"
+#define ACMSG14  "Glyph %lu extra columns removed.\n"
 #define ACMSG15  "Incorrect glyph count: %ld indicated but %ld found.\n"
-#define ACMSG16  "Glyph %ld missing columns padded with zero bits.\n"
+#define ACMSG16  "Glyph %lu missing columns padded with zero bits.\n"
 #define ACMSG17  "Adjusting number of glyphs to %ld.\n"
 
   /* Error messages. */
@@ -270,8 +269,6 @@
     bdf_font_t*     font;
     bdf_options_t*  opts;
 
-    unsigned long   have[34816]; /* must be in sync with `nmod' and `umod' */
-                                 /* arrays from `bdf_font_t' structure     */
     _bdf_list_t     list;
 
     FT_Memory       memory;
@@ -367,7 +364,7 @@
 
   /* An empty string for empty fields. */
 
-  static const char  empty[1] = { 0 };      /* XXX eliminate this */
+  static const char  empty[] = "";      /* XXX eliminate this */
 
 
   static char *
@@ -410,13 +407,14 @@
 
   static FT_Error
   _bdf_list_split( _bdf_list_t*   list,
-                   char*          separators,
+                   const char*    separators,
                    char*          line,
                    unsigned long  linelen )
   {
     unsigned long  final_empty;
     int            mult;
-    char           *sp, *ep, *end;
+    const char     *sp, *end;
+    char           *ep;
     char           seps[32];
     FT_Error       error = FT_Err_Ok;
 
@@ -476,7 +474,7 @@
       }
 
       /* Assign the field appropriately. */
-      list->field[list->used++] = ( ep > sp ) ? sp : (char*)empty;
+      list->field[list->used++] = ( ep > sp ) ? (char*)sp : (char*)empty;
 
       sp = ep;
 
@@ -695,7 +693,7 @@
 
   /* Routine to convert a decimal ASCII string to an unsigned long integer. */
   static unsigned long
-  _bdf_atoul( char*  s )
+  _bdf_atoul( const char*  s )
   {
     unsigned long  v;
 
@@ -720,7 +718,7 @@
 
   /* Routine to convert a decimal ASCII string to a signed long integer. */
   static long
-  _bdf_atol( char*  s )
+  _bdf_atol( const char*  s )
   {
     long  v, neg;
 
@@ -753,7 +751,7 @@
 
   /* Routine to convert a decimal ASCII string to an unsigned short integer. */
   static unsigned short
-  _bdf_atous( char*  s )
+  _bdf_atous( const char*  s )
   {
     unsigned short  v;
 
@@ -778,7 +776,7 @@
 
   /* Routine to convert a decimal ASCII string to a signed short integer. */
   static short
-  _bdf_atos( char*  s )
+  _bdf_atos( const char*  s )
   {
     short  v, neg;
 
@@ -831,7 +829,7 @@
 
 
   static FT_Error
-  bdf_create_property( char*        name,
+  bdf_create_property( const char*  name,
                        int          format,
                        bdf_font_t*  font )
   {
@@ -1001,7 +999,7 @@
 
     FT_MEM_COPY( name, font->name, len );
 
-    error = _bdf_list_split( &list, (char *)"-", name, (unsigned long)len );
+    error = _bdf_list_split( &list, "-", name, (unsigned long)len );
     if ( error )
       goto Fail;
 
@@ -1100,7 +1098,7 @@
 
   static FT_Error
   _bdf_add_property( bdf_font_t*    font,
-                     char*          name,
+                     const char*    name,
                      char*          value,
                      unsigned long  lineno )
   {
@@ -1232,7 +1230,7 @@
     /* present, and the SPACING property should override the default       */
     /* spacing.                                                            */
     if ( _bdf_strncmp( name, "DEFAULT_CHAR", 12 ) == 0 )
-      font->default_char = fp->value.l;
+      font->default_char = fp->value.ul;
     else if ( _bdf_strncmp( name, "FONT_ASCENT", 11 ) == 0 )
       font->font_ascent = fp->value.l;
     else if ( _bdf_strncmp( name, "FONT_DESCENT", 12 ) == 0 )
@@ -1265,6 +1263,25 @@
   };
 
 
+  static FT_Error
+  _bdf_parse_end( char*          line,
+                  unsigned long  linelen,
+                  unsigned long  lineno,
+                  void*          call_data,
+                  void*          client_data )
+  {
+    /* a no-op; we ignore everything after `ENDFONT' */
+
+    FT_UNUSED( line );
+    FT_UNUSED( linelen );
+    FT_UNUSED( lineno );
+    FT_UNUSED( call_data );
+    FT_UNUSED( client_data );
+
+    return FT_Err_Ok;
+  }
+
+
   /* Actually parse the glyph info and bitmaps. */
   static FT_Error
   _bdf_parse_glyphs( char*          line,
@@ -1278,6 +1295,7 @@
     unsigned char*     bp;
     unsigned long      i, slen, nibbles;
 
+    _bdf_line_func_t*  next;
     _bdf_parse_t*      p;
     bdf_glyph_t*       glyph;
     bdf_font_t*        font;
@@ -1285,11 +1303,11 @@
     FT_Memory          memory;
     FT_Error           error = FT_Err_Ok;
 
-    FT_UNUSED( call_data );
     FT_UNUSED( lineno );        /* only used in debug mode */
 
 
-    p = (_bdf_parse_t *)client_data;
+    next = (_bdf_line_func_t *)call_data;
+    p    = (_bdf_parse_t *)    client_data;
 
     font   = p->font;
     memory = font->memory;
@@ -1319,7 +1337,7 @@
         goto Exit;
       }
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
       p->cnt = font->glyphs_size = _bdf_atoul( p->list.field[1] );
@@ -1370,6 +1388,7 @@
                 by_encoding );
 
       p->flags &= ~BDF_START_;
+      *next     = _bdf_parse_end;
 
       goto Exit;
     }
@@ -1405,7 +1424,7 @@
       /* encoding can be checked for an unencoded character.      */
       FT_FREE( p->glyph_name );
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -1443,7 +1462,7 @@
         goto Exit;
       }
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -1458,40 +1477,11 @@
       if ( p->glyph_enc == -1 && p->list.used > 2 )
         p->glyph_enc = _bdf_atol( p->list.field[2] );
 
-      if ( p->glyph_enc < -1 )
+      if ( p->glyph_enc < -1 || p->glyph_enc >= 0x110000L )
         p->glyph_enc = -1;
 
       FT_TRACE4(( DBGMSG2, p->glyph_enc ));
 
-      /* Check that the encoding is in the Unicode range because  */
-      /* otherwise p->have (a bitmap with static size) overflows. */
-      if ( p->glyph_enc > 0                                      &&
-           (size_t)p->glyph_enc >= sizeof ( p->have ) /
-                                   sizeof ( unsigned long ) * 32 )
-      {
-        FT_ERROR(( "_bdf_parse_glyphs: " ERRMSG5, lineno, "ENCODING" ));
-        error = FT_THROW( Invalid_File_Format );
-        goto Exit;
-      }
-
-      /* Check whether this encoding has already been encountered. */
-      /* If it has then change it to unencoded so it gets added if */
-      /* indicated.                                                */
-      if ( p->glyph_enc >= 0 )
-      {
-        if ( _bdf_glyph_modified( p->have, p->glyph_enc ) )
-        {
-          /* Emit a message saying a glyph has been moved to the */
-          /* unencoded area.                                     */
-          FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG12,
-                      p->glyph_enc, p->glyph_name ));
-          p->glyph_enc = -1;
-          font->modified = 1;
-        }
-        else
-          _bdf_set_glyph_modified( p->have, p->glyph_enc );
-      }
-
       if ( p->glyph_enc >= 0 )
       {
         /* Make sure there are enough glyphs allocated in case the */
@@ -1508,7 +1498,7 @@
 
         glyph           = font->glyphs + font->glyphs_used++;
         glyph->name     = p->glyph_name;
-        glyph->encoding = p->glyph_enc;
+        glyph->encoding = (unsigned long)p->glyph_enc;
 
         /* Reset the initial glyph info. */
         p->glyph_name = NULL;
@@ -1532,7 +1522,7 @@
 
           glyph           = font->unencoded + font->unencoded_used;
           glyph->name     = p->glyph_name;
-          glyph->encoding = (long)font->unencoded_used++;
+          glyph->encoding = font->unencoded_used++;
 
           /* Reset the initial glyph info. */
           p->glyph_name = NULL;
@@ -1576,7 +1566,6 @@
         {
           FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG13, glyph->encoding ));
           p->flags |= BDF_GLYPH_HEIGHT_CHECK_;
-          font->modified = 1;
         }
 
         goto Exit;
@@ -1604,7 +1593,6 @@
       {
         FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG16, glyph->encoding ));
         p->flags       |= BDF_GLYPH_WIDTH_CHECK_;
-        font->modified  = 1;
       }
 
       /* Remove possible garbage at the right. */
@@ -1619,7 +1607,6 @@
       {
         FT_TRACE2(( "_bdf_parse_glyphs: " ACMSG14, glyph->encoding ));
         p->flags       |= BDF_GLYPH_WIDTH_CHECK_;
-        font->modified  = 1;
       }
 
       p->row++;
@@ -1629,7 +1616,7 @@
     /* Expect the SWIDTH (scalable width) field next. */
     if ( _bdf_strncmp( line, "SWIDTH", 6 ) == 0 )
     {
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -1642,7 +1629,7 @@
     /* Expect the DWIDTH (scalable width) field next. */
     if ( _bdf_strncmp( line, "DWIDTH", 6 ) == 0 )
     {
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -1667,7 +1654,7 @@
     /* Expect the BBX field next. */
     if ( _bdf_strncmp( line, "BBX", 3 ) == 0 )
     {
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -1714,14 +1701,7 @@
         {
           glyph->swidth = sw;
 
-          if ( p->glyph_enc == -1 )
-            _bdf_set_glyph_modified( font->umod,
-                                     font->unencoded_used - 1 );
-          else
-            _bdf_set_glyph_modified( font->nmod, glyph->encoding );
-
           p->flags       |= BDF_SWIDTH_ADJ_;
-          font->modified  = 1;
         }
       }
 
@@ -1817,26 +1797,24 @@
       {
         p->font->font_ascent = p->font->bbx.ascent;
         ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
-        error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
+        error = _bdf_add_property( p->font, "FONT_ASCENT",
                                    nbuf, lineno );
         if ( error )
           goto Exit;
 
         FT_TRACE2(( "_bdf_parse_properties: " ACMSG1, p->font->bbx.ascent ));
-        p->font->modified = 1;
       }
 
       if ( bdf_get_font_property( p->font, "FONT_DESCENT" ) == 0 )
       {
         p->font->font_descent = p->font->bbx.descent;
         ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
-        error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
+        error = _bdf_add_property( p->font, "FONT_DESCENT",
                                    nbuf, lineno );
         if ( error )
           goto Exit;
 
         FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
-        p->font->modified = 1;
       }
 
       p->flags &= ~BDF_PROPS_;
@@ -1869,7 +1847,7 @@
     }
     else
     {
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
       name = p->list.field[0];
@@ -1983,7 +1961,7 @@
       if ( error )
         goto Exit;
       p->font->spacing      = p->opts->font_spacing;
-      p->font->default_char = -1;
+      p->font->default_char = ~0UL;
 
       goto Exit;
     }
@@ -1999,7 +1977,7 @@
         goto Exit;
       }
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -2038,7 +2016,7 @@
         goto Exit;
       }
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -2061,7 +2039,7 @@
     /* The next thing to check for is the FONT field. */
     if ( _bdf_strncmp( line, "FONT", 4 ) == 0 )
     {
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
       _bdf_list_shift( &p->list, 1 );
@@ -2104,7 +2082,7 @@
         goto Exit;
       }
 
-      error = _bdf_list_split( &p->list, (char *)" +", line, linelen );
+      error = _bdf_list_split( &p->list, " +", line, linelen );
       if ( error )
         goto Exit;
 
@@ -2159,7 +2137,7 @@
       /* for compiling fonts.                                   */
       p->font->font_ascent = p->font->bbx.ascent;
       ft_sprintf( nbuf, "%hd", p->font->bbx.ascent );
-      error = _bdf_add_property( p->font, (char *)"FONT_ASCENT",
+      error = _bdf_add_property( p->font, "FONT_ASCENT",
                                  nbuf, lineno );
       if ( error )
         goto Exit;
@@ -2167,14 +2145,12 @@
 
       p->font->font_descent = p->font->bbx.descent;
       ft_sprintf( nbuf, "%hd", p->font->bbx.descent );
-      error = _bdf_add_property( p->font, (char *)"FONT_DESCENT",
+      error = _bdf_add_property( p->font, "FONT_DESCENT",
                                  nbuf, lineno );
       if ( error )
         goto Exit;
       FT_TRACE2(( "_bdf_parse_properties: " ACMSG2, p->font->bbx.descent ));
 
-      p->font->modified = 1;
-
       *next = _bdf_parse_glyphs;
 
       /* A special return value. */
@@ -2240,7 +2216,6 @@
       {
         FT_TRACE2(( "bdf_load_font: " ACMSG15, p->cnt,
                     p->font->glyphs_used + p->font->unencoded_used ));
-        p->font->modified = 1;
       }
 
       /* Once the font has been loaded, adjust the overall font metrics if */
@@ -2253,7 +2228,6 @@
           FT_TRACE2(( "bdf_load_font: " ACMSG3,
                       p->font->bbx.width, p->maxrb - p->minlb ));
           p->font->bbx.width = (unsigned short)( p->maxrb - p->minlb );
-          p->font->modified  = 1;
         }
 
         if ( p->font->bbx.x_offset != p->minlb )
@@ -2261,7 +2235,6 @@
           FT_TRACE2(( "bdf_load_font: " ACMSG4,
                       p->font->bbx.x_offset, p->minlb ));
           p->font->bbx.x_offset = p->minlb;
-          p->font->modified     = 1;
         }
 
         if ( p->font->bbx.ascent != p->maxas )
@@ -2269,7 +2242,6 @@
           FT_TRACE2(( "bdf_load_font: " ACMSG5,
                       p->font->bbx.ascent, p->maxas ));
           p->font->bbx.ascent = p->maxas;
-          p->font->modified   = 1;
         }
 
         if ( p->font->bbx.descent != p->maxds )
@@ -2278,7 +2250,6 @@
                       p->font->bbx.descent, p->maxds ));
           p->font->bbx.descent  = p->maxds;
           p->font->bbx.y_offset = (short)( -p->maxds );
-          p->font->modified     = 1;
         }
 
         if ( p->maxas + p->maxds != p->font->bbx.height )
@@ -2409,16 +2380,6 @@
     FT_FREE( font->glyphs );
     FT_FREE( font->unencoded );
 
-    /* Free up the overflow storage if it was used. */
-    for ( i = 0, glyphs = font->overflow.glyphs;
-          i < font->overflow.glyphs_used; i++, glyphs++ )
-    {
-      FT_FREE( glyphs->name );
-      FT_FREE( glyphs->bitmap );
-    }
-
-    FT_FREE( font->overflow.glyphs );
-
     /* bdf_cleanup */
     ft_hash_str_free( &(font->proptbl), memory );
 
diff --git a/src/bzip2/Jamfile b/src/bzip2/Jamfile
index 3548eab..4b77916 100644
--- a/src/bzip2/Jamfile
+++ b/src/bzip2/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/bzip2 Jamfile
 #
-# Copyright 2010-2018 by
+# Copyright (C) 2010-2019 by
 # Joel Klinghed
 #
 # based on `src/lzw/Jamfile'
diff --git a/src/bzip2/ftbzip2.c b/src/bzip2/ftbzip2.c
index 0f6ab15..1fda59b 100644
--- a/src/bzip2/ftbzip2.c
+++ b/src/bzip2/ftbzip2.c
@@ -8,7 +8,7 @@
  * parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright 2010-2018 by
+ * Copyright (C) 2010-2019 by
  * Joel Klinghed.
  *
  * based on `src/gzip/ftgzip.c'
diff --git a/src/bzip2/rules.mk b/src/bzip2/rules.mk
index 95954d7..f365c1f 100644
--- a/src/bzip2/rules.mk
+++ b/src/bzip2/rules.mk
@@ -2,7 +2,7 @@
 # FreeType 2 BZIP2 support configuration rules
 #
 
-# Copyright 2010-2018 by
+# Copyright (C) 2010-2019 by
 # Joel Klinghed.
 #
 # based on `src/lzw/rules.mk'
diff --git a/src/cache/Jamfile b/src/cache/Jamfile
index 53f4c7b..51f7196 100644
--- a/src/cache/Jamfile
+++ b/src/cache/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/cache Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cache/ftcache.c b/src/cache/ftcache.c
index fb78b81..a6a3e63 100644
--- a/src/cache/ftcache.c
+++ b/src/cache/ftcache.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType Caching sub-system (body only).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcbasic.c b/src/cache/ftcbasic.c
index f2b75ee..a473585 100644
--- a/src/cache/ftcbasic.c
+++ b/src/cache/ftcbasic.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType basic cache interface (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
 #include "ftccback.h"
 #include "ftcerror.h"
 
-#define FT_COMPONENT  trace_cache
+#define FT_COMPONENT  cache
 
 
   /*
diff --git a/src/cache/ftccache.c b/src/cache/ftccache.c
index a9aa5d4..f38ca44 100644
--- a/src/cache/ftccache.c
+++ b/src/cache/ftccache.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType internal cache interface (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
 #include "ftcerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cache
+#define FT_COMPONENT  cache
 
 
 #define FTC_HASH_MAX_LOAD  2
diff --git a/src/cache/ftccache.h b/src/cache/ftccache.h
index c1f8c29..140cead 100644
--- a/src/cache/ftccache.h
+++ b/src/cache/ftccache.h
@@ -4,7 +4,7 @@
  *
  *   FreeType internal cache interface (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftccback.h b/src/cache/ftccback.h
index 1e414aa..9321bc3 100644
--- a/src/cache/ftccback.h
+++ b/src/cache/ftccback.h
@@ -4,7 +4,7 @@
  *
  *   Callback functions of the caching sub-system (specification only).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftccmap.c b/src/cache/ftccmap.c
index 47b8b76..76ba10e 100644
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType CharMap cache (body)
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
 #include "ftcerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cache
+#define FT_COMPONENT  cache
 
 
   /**************************************************************************
diff --git a/src/cache/ftcerror.h b/src/cache/ftcerror.h
index 6ed9e9e..e2d6417 100644
--- a/src/cache/ftcerror.h
+++ b/src/cache/ftcerror.h
@@ -4,7 +4,7 @@
  *
  *   Caching sub-system error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcglyph.c b/src/cache/ftcglyph.c
index 1b86429..2a0e97d 100644
--- a/src/cache/ftcglyph.c
+++ b/src/cache/ftcglyph.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Glyph Image (FT_Glyph) cache (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcglyph.h b/src/cache/ftcglyph.h
index 234ec89..5a1f0e2 100644
--- a/src/cache/ftcglyph.h
+++ b/src/cache/ftcglyph.h
@@ -4,7 +4,7 @@
  *
  *   FreeType abstract glyph cache (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcimage.c b/src/cache/ftcimage.c
index 597e341..9e64d51 100644
--- a/src/cache/ftcimage.c
+++ b/src/cache/ftcimage.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Image cache (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcimage.h b/src/cache/ftcimage.h
index ad47f8d..dcb101f 100644
--- a/src/cache/ftcimage.h
+++ b/src/cache/ftcimage.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Generic Image cache (specification)
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c
index 9be1773..bd58596 100644
--- a/src/cache/ftcmanag.c
+++ b/src/cache/ftcmanag.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache Manager (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
 
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cache
+#define FT_COMPONENT  cache
 
 
   static FT_Error
diff --git a/src/cache/ftcmanag.h b/src/cache/ftcmanag.h
index 8d0a1e1..60c66c8 100644
--- a/src/cache/ftcmanag.h
+++ b/src/cache/ftcmanag.h
@@ -4,7 +4,7 @@
  *
  *   FreeType Cache Manager (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
index c704f4e..18a7b80 100644
--- a/src/cache/ftcmru.c
+++ b/src/cache/ftcmru.c
@@ -4,7 +4,7 @@
  *
  *   FreeType MRU support (body).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcmru.h b/src/cache/ftcmru.h
index 936c66e..58721ed 100644
--- a/src/cache/ftcmru.h
+++ b/src/cache/ftcmru.h
@@ -4,7 +4,7 @@
  *
  *   Simple MRU list-cache (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/ftcsbits.c b/src/cache/ftcsbits.c
index c802bf0..06b46c8 100644
--- a/src/cache/ftcsbits.c
+++ b/src/cache/ftcsbits.c
@@ -4,7 +4,7 @@
  *
  *   FreeType sbits manager (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
 #include "ftcerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cache
+#define FT_COMPONENT  cache
 
 
   /*************************************************************************/
diff --git a/src/cache/ftcsbits.h b/src/cache/ftcsbits.h
index e698e35..f1b71c2 100644
--- a/src/cache/ftcsbits.h
+++ b/src/cache/ftcsbits.h
@@ -4,7 +4,7 @@
  *
  *   A small-bitmap cache (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cache/rules.mk b/src/cache/rules.mk
index 5589359..1618d98 100644
--- a/src/cache/rules.mk
+++ b/src/cache/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2000-2018 by
+# Copyright (C) 2000-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -15,7 +15,7 @@
 
 # Cache driver directory
 #
-CACHE_DIR   := $(SRC_DIR)/cache
+CACHE_DIR := $(SRC_DIR)/cache
 
 
 # compilation flags for the driver
diff --git a/src/cff/Jamfile b/src/cff/Jamfile
index 53c904f..10f49ce 100644
--- a/src/cff/Jamfile
+++ b/src/cff/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/cff Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cff/cff.c b/src/cff/cff.c
index 6c7e2c9..a34ba9b 100644
--- a/src/cff/cff.c
+++ b/src/cff/cff.c
@@ -4,7 +4,7 @@
  *
  *   FreeType OpenType driver component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffcmap.c b/src/cff/cffcmap.c
index f7316e1..15cc94c 100644
--- a/src/cff/cffcmap.c
+++ b/src/cff/cffcmap.c
@@ -4,7 +4,7 @@
  *
  *   CFF character mapping table (cmap) support (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -161,6 +161,9 @@
     if ( !charset->sids )
       return FT_THROW( No_Unicode_Glyph_Name );
 
+    if ( !psnames->unicodes_init )
+      return FT_THROW( Unimplemented_Feature );
+
     return psnames->unicodes_init( memory,
                                    unicodes,
                                    cff->num_glyphs,
diff --git a/src/cff/cffcmap.h b/src/cff/cffcmap.h
index 5cf86ac..07366bc 100644
--- a/src/cff/cffcmap.h
+++ b/src/cff/cffcmap.h
@@ -4,7 +4,7 @@
  *
  *   CFF character mapping table (cmap) support (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffdrivr.c b/src/cff/cffdrivr.c
index 997a734..2324989 100644
--- a/src/cff/cffdrivr.c
+++ b/src/cff/cffdrivr.c
@@ -4,7 +4,7 @@
  *
  *   OpenType font driver implementation (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -56,7 +56,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffdriver
+#define FT_COMPONENT  cffdriver
 
 
   /*************************************************************************/
@@ -348,7 +348,7 @@
         FT_ERROR(( "cff_get_glyph_name:"
                    " cannot get glyph name from a CFF2 font\n"
                    "                   "
-                   " without the `PSNames' module\n" ));
+                   " without the `psnames' module\n" ));
         error = FT_THROW( Missing_Module );
         goto Exit;
       }
@@ -359,7 +359,7 @@
       FT_ERROR(( "cff_get_glyph_name:"
                  " cannot get glyph name from CFF & CEF fonts\n"
                  "                   "
-                 " without the `PSNames' module\n" ));
+                 " without the `psnames' module\n" ));
       error = FT_THROW( Missing_Module );
       goto Exit;
     }
@@ -381,8 +381,8 @@
 
 
   static FT_UInt
-  cff_get_name_index( CFF_Face    face,
-                      FT_String*  glyph_name )
+  cff_get_name_index( CFF_Face          face,
+                      const FT_String*  glyph_name )
   {
     CFF_Font            cff;
     CFF_Charset         charset;
@@ -415,7 +415,7 @@
         FT_ERROR(( "cff_get_name_index:"
                    " cannot get glyph index from a CFF2 font\n"
                    "                   "
-                   " without the `PSNames' module\n" ));
+                   " without the `psnames' module\n" ));
         return 0;
       }
     }
@@ -868,6 +868,30 @@
 
 
   static FT_Error
+  cff_set_mm_weightvector( CFF_Face   face,
+                           FT_UInt    len,
+                           FT_Fixed*  weightvector )
+  {
+    FT_Service_MultiMasters  mm = (FT_Service_MultiMasters)face->mm;
+
+
+    return mm->set_mm_weightvector( FT_FACE( face ), len, weightvector );
+  }
+
+
+  static FT_Error
+  cff_get_mm_weightvector( CFF_Face   face,
+                           FT_UInt*   len,
+                           FT_Fixed*  weightvector )
+  {
+    FT_Service_MultiMasters  mm = (FT_Service_MultiMasters)face->mm;
+
+
+    return mm->get_mm_weightvector( FT_FACE( face ), len, weightvector );
+  }
+
+
+  static FT_Error
   cff_get_mm_var( CFF_Face     face,
                   FT_MM_Var*  *master )
   {
@@ -916,17 +940,19 @@
   FT_DEFINE_SERVICE_MULTIMASTERSREC(
     cff_service_multi_masters,
 
-    (FT_Get_MM_Func)        NULL,                   /* get_mm         */
-    (FT_Set_MM_Design_Func) NULL,                   /* set_mm_design  */
-    (FT_Set_MM_Blend_Func)  cff_set_mm_blend,       /* set_mm_blend   */
-    (FT_Get_MM_Blend_Func)  cff_get_mm_blend,       /* get_mm_blend   */
-    (FT_Get_MM_Var_Func)    cff_get_mm_var,         /* get_mm_var     */
-    (FT_Set_Var_Design_Func)cff_set_var_design,     /* set_var_design */
-    (FT_Get_Var_Design_Func)cff_get_var_design,     /* get_var_design */
-    (FT_Set_Instance_Func)  cff_set_instance,       /* set_instance   */
+    (FT_Get_MM_Func)             NULL,                    /* get_mm              */
+    (FT_Set_MM_Design_Func)      NULL,                    /* set_mm_design       */
+    (FT_Set_MM_Blend_Func)       cff_set_mm_blend,        /* set_mm_blend        */
+    (FT_Get_MM_Blend_Func)       cff_get_mm_blend,        /* get_mm_blend        */
+    (FT_Get_MM_Var_Func)         cff_get_mm_var,          /* get_mm_var          */
+    (FT_Set_Var_Design_Func)     cff_set_var_design,      /* set_var_design      */
+    (FT_Get_Var_Design_Func)     cff_get_var_design,      /* get_var_design      */
+    (FT_Set_Instance_Func)       cff_set_instance,        /* set_instance        */
+    (FT_Set_MM_WeightVector_Func)cff_set_mm_weightvector, /* set_mm_weightvector */
+    (FT_Get_MM_WeightVector_Func)cff_get_mm_weightvector, /* get_mm_weightvector */
 
-    (FT_Get_Var_Blend_Func) cff_get_var_blend,      /* get_var_blend  */
-    (FT_Done_Blend_Func)    cff_done_blend          /* done_blend     */
+    (FT_Get_Var_Blend_Func)      cff_get_var_blend,       /* get_var_blend       */
+    (FT_Done_Blend_Func)         cff_done_blend           /* done_blend          */
   )
 
 
diff --git a/src/cff/cffdrivr.h b/src/cff/cffdrivr.h
index 30d3e13..f2bbcfe 100644
--- a/src/cff/cffdrivr.h
+++ b/src/cff/cffdrivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level OpenType driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cfferrs.h b/src/cff/cfferrs.h
index b5ccc67..78d47a1 100644
--- a/src/cff/cfferrs.h
+++ b/src/cff/cfferrs.h
@@ -4,7 +4,7 @@
  *
  *   CFF error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffgload.c b/src/cff/cffgload.c
index 88f5689..36aa7d1 100644
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffgload
+#define FT_COMPONENT  cffgload
 
 
   FT_LOCAL_DEF( FT_Error )
@@ -414,7 +414,7 @@
         decoder.width_only = TRUE;
 
       decoder.builder.no_recurse =
-        (FT_Bool)( load_flags & FT_LOAD_NO_RECURSE );
+        FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
 
       /* now load the unscaled outline */
       error = cff_get_glyph_data( face, glyph_index,
diff --git a/src/cff/cffgload.h b/src/cff/cffgload.h
index 5a486cd..754c55a 100644
--- a/src/cff/cffgload.h
+++ b/src/cff/cffgload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffload.c b/src/cff/cffload.c
index 015b2c8..12efd18 100644
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -4,7 +4,7 @@
  *
  *   OpenType and CFF data/program tables loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -203,7 +203,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffload
+#define FT_COMPONENT  cffload
 
 
   /* read an offset from the index's stream current position */
diff --git a/src/cff/cffload.h b/src/cff/cffload.h
index 7ba9e45..42d2696 100644
--- a/src/cff/cffload.h
+++ b/src/cff/cffload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType & CFF data/program tables loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
index b3f0f99..f76245f 100644
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -4,7 +4,7 @@
  *
  *   OpenType objects manager (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,7 +51,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffobjs
+#define FT_COMPONENT  cffobjs
 
 
   /**************************************************************************
@@ -644,14 +644,14 @@
 
       dict = &cff->top_font.font_dict;
 
-      /* we need the `PSNames' module for CFF and CEF formats */
+      /* we need the `psnames' module for CFF and CEF formats */
       /* which aren't CID-keyed                               */
       if ( dict->cid_registry == 0xFFFFU && !psnames )
       {
         FT_ERROR(( "cff_face_init:"
                    " cannot open CFF & CEF fonts\n"
                    "              "
-                   " without the `PSNames' module\n" ));
+                   " without the `psnames' module\n" ));
         error = FT_THROW( Missing_Module );
         goto Exit;
       }
@@ -962,7 +962,7 @@
           cffface->style_name = style_name;
         else
           /* assume "Regular" style if we don't know better */
-          cffface->style_name = cff_strcpy( memory, (char *)"Regular" );
+          cffface->style_name = cff_strcpy( memory, "Regular" );
 
         /********************************************************************
          *
@@ -1072,7 +1072,8 @@
         error = FT_CMap_New( &cff_cmap_unicode_class_rec, NULL,
                              &cmaprec, NULL );
         if ( error                                      &&
-             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+             FT_ERR_NEQ( error, Unimplemented_Feature ) )
           goto Exit;
         error = FT_Err_Ok;
 
diff --git a/src/cff/cffobjs.h b/src/cff/cffobjs.h
index 2beb11b..03bc78a 100644
--- a/src/cff/cffobjs.h
+++ b/src/cff/cffobjs.h
@@ -4,7 +4,7 @@
  *
  *   OpenType objects manager (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/cffparse.c b/src/cff/cffparse.c
index b6f5dae..008752c 100644
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -4,7 +4,7 @@
  *
  *   CFF token stream parser (body)
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -22,6 +22,7 @@
 #include FT_INTERNAL_DEBUG_H
 #include FT_INTERNAL_CALC_H
 #include FT_INTERNAL_POSTSCRIPT_AUX_H
+#include FT_LIST_H
 
 #include "cfferrs.h"
 #include "cffload.h"
@@ -34,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffparse
+#define FT_COMPONENT  cffparse
 
 
   FT_LOCAL_DEF( FT_Error )
@@ -76,6 +77,23 @@
   }
 
 
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+  static void
+  finalize_t2_strings( FT_Memory  memory,
+                       void*      data,
+                       void*      user )
+  {
+    CFF_T2_String  t2 = (CFF_T2_String)data;
+
+
+    FT_UNUSED( user );
+
+    memory->free( memory, t2->start );
+    memory->free( memory, data );
+  }
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+
   FT_LOCAL_DEF( void )
   cff_parser_done( CFF_Parser  parser )
   {
@@ -83,13 +101,65 @@
 
 
     FT_FREE( parser->stack );
+
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+    FT_List_Finalize( &parser->t2_strings,
+                      finalize_t2_strings,
+                      memory,
+                      NULL );
+#endif
+  }
+
+
+  /* Assuming `first >= last'. */
+
+  static FT_Error
+  cff_parser_within_limits( CFF_Parser  parser,
+                            FT_Byte*    first,
+                            FT_Byte*    last )
+  {
+#ifndef CFF_CONFIG_OPTION_OLD_ENGINE
+
+    /* Fast path for regular FreeType builds with the "new" engine; */
+    /*   `first >= parser->start' can be assumed.                   */
+
+    FT_UNUSED( first );
+
+    return last < parser->limit ? FT_Err_Ok : FT_THROW( Invalid_Argument );
+
+#else /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
+    FT_ListNode  node;
+
+
+    if ( first >= parser->start &&
+         last  <  parser->limit )
+      return FT_Err_Ok;
+
+    node = parser->t2_strings.head;
+
+    while ( node )
+    {
+      CFF_T2_String  t2 = (CFF_T2_String)node->data;
+
+
+      if ( first >= t2->start &&
+           last  <  t2->limit )
+        return FT_Err_Ok;
+
+      node = node->next;
+    }
+
+    return FT_THROW( Invalid_Argument );
+
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
   }
 
 
   /* read an integer */
   static FT_Long
-  cff_parse_integer( FT_Byte*  start,
-                     FT_Byte*  limit )
+  cff_parse_integer( CFF_Parser  parser,
+                     FT_Byte*    start )
   {
     FT_Byte*  p   = start;
     FT_Int    v   = *p++;
@@ -98,14 +168,14 @@
 
     if ( v == 28 )
     {
-      if ( p + 2 > limit )
+      if ( cff_parser_within_limits( parser, p, p + 1 ) )
         goto Bad;
 
       val = (FT_Short)( ( (FT_UShort)p[0] << 8 ) | p[1] );
     }
     else if ( v == 29 )
     {
-      if ( p + 4 > limit )
+      if ( cff_parser_within_limits( parser, p, p + 3 ) )
         goto Bad;
 
       val = (FT_Long)( ( (FT_ULong)p[0] << 24 ) |
@@ -119,14 +189,14 @@
     }
     else if ( v < 251 )
     {
-      if ( p + 1 > limit )
+      if ( cff_parser_within_limits( parser, p, p ) )
         goto Bad;
 
       val = ( v - 247 ) * 256 + p[0] + 108;
     }
     else
     {
-      if ( p + 1 > limit )
+      if ( cff_parser_within_limits( parser, p, p ) )
         goto Bad;
 
       val = -( v - 251 ) * 256 - p[0] - 108;
@@ -175,10 +245,10 @@
 
   /* read a real */
   static FT_Fixed
-  cff_parse_real( FT_Byte*  start,
-                  FT_Byte*  limit,
-                  FT_Long   power_ten,
-                  FT_Long*  scaling )
+  cff_parse_real( CFF_Parser  parser,
+                  FT_Byte*    start,
+                  FT_Long     power_ten,
+                  FT_Long*    scaling )
   {
     FT_Byte*  p = start;
     FT_Int    nib;
@@ -213,7 +283,7 @@
         p++;
 
         /* Make sure we don't read past the end. */
-        if ( p >= limit )
+        if ( cff_parser_within_limits( parser, p, p ) )
           goto Bad;
       }
 
@@ -250,7 +320,7 @@
           p++;
 
           /* Make sure we don't read past the end. */
-          if ( p >= limit )
+          if ( cff_parser_within_limits( parser, p, p ) )
             goto Bad;
         }
 
@@ -289,7 +359,7 @@
           p++;
 
           /* Make sure we don't read past the end. */
-          if ( p >= limit )
+          if ( cff_parser_within_limits( parser, p, p ) )
             goto Bad;
         }
 
@@ -456,7 +526,7 @@
     if ( **d == 30 )
     {
       /* binary-coded decimal is truncated to integer */
-      return cff_parse_real( *d, parser->limit, 0, NULL ) >> 16;
+      return cff_parse_real( parser, *d, 0, NULL ) >> 16;
     }
 
     else if ( **d == 255 )
@@ -482,7 +552,7 @@
     }
 
     else
-      return cff_parse_integer( *d, parser->limit );
+      return cff_parse_integer( parser, *d );
   }
 
 
@@ -493,10 +563,10 @@
             FT_Long     scaling )
   {
     if ( **d == 30 )
-      return cff_parse_real( *d, parser->limit, scaling, NULL );
+      return cff_parse_real( parser, *d, scaling, NULL );
     else
     {
-      FT_Long  val = cff_parse_integer( *d, parser->limit );
+      FT_Long  val = cff_parse_integer( parser, *d );
 
 
       if ( scaling )
@@ -561,14 +631,14 @@
     FT_ASSERT( scaling );
 
     if ( **d == 30 )
-      return cff_parse_real( *d, parser->limit, 0, scaling );
+      return cff_parse_real( parser, *d, 0, scaling );
     else
     {
       FT_Long  number;
       FT_Int   integer_length;
 
 
-      number = cff_parse_integer( d[0], d[1] );
+      number = cff_parse_integer( parser, d[0] );
 
       if ( number > 0x7FFFL )
       {
@@ -808,7 +878,7 @@
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     /* beautify tracing message */
-    if ( ft_trace_levels[FT_COMPONENT] < 4 )
+    if ( ft_trace_levels[FT_TRACE_COMP( FT_COMPONENT )] < 4 )
       FT_TRACE1(( "Multiple Master CFFs not supported yet,"
                   " handling first master design only\n" ));
     else
@@ -1126,16 +1196,15 @@
                   FT_Byte*    start,
                   FT_Byte*    limit )
   {
+    FT_Byte*  p     = start;
+    FT_Error  error = FT_Err_Ok;
+
 #ifdef CFF_CONFIG_OPTION_OLD_ENGINE
     PSAux_Service  psaux;
-#endif
 
-    FT_Byte*    p       = start;
-    FT_Error    error   = FT_Err_Ok;
     FT_Library  library = parser->library;
-
-    FT_UNUSED( library );
-
+    FT_Memory   memory  = library->memory;
+#endif
 
     parser->top    = parser->stack;
     parser->start  = start;
@@ -1195,8 +1264,11 @@
         FT_Byte*     charstring_base;
         FT_ULong     charstring_len;
 
-        FT_Fixed*  stack;
-        FT_Byte*   q;
+        FT_Fixed*     stack;
+        FT_ListNode   node;
+        CFF_T2_String t2;
+        size_t        t2_size;
+        FT_Byte*      q;
 
 
         charstring_base = ++p;
@@ -1231,17 +1303,39 @@
 
         error = psaux->cff_decoder_funcs->parse_charstrings_old(
                   &decoder, charstring_base, charstring_len, 1 );
+        if ( error )
+          goto Exit;
 
         /* Now copy the stack data in the temporary decoder object,    */
         /* converting it back to charstring number representations     */
         /* (this is ugly, I know).                                     */
-        /*                                                             */
-        /* We overwrite the original top DICT charstring under the     */
-        /* assumption that the charstring representation of the result */
-        /* of `cff_decoder_parse_charstrings' is shorter, which should */
-        /* be always true.                                             */
 
-        q     = charstring_base - 1;
+        node = (FT_ListNode)memory->alloc( memory,
+                                           sizeof ( FT_ListNodeRec ) );
+        if ( !node )
+          goto Out_Of_Memory_Error;
+
+        FT_List_Add( &parser->t2_strings, node );
+
+        t2 = (CFF_T2_String)memory->alloc( memory,
+                                           sizeof ( CFF_T2_StringRec ) );
+        if ( !t2 )
+          goto Out_Of_Memory_Error;
+
+        node->data = t2;
+
+        /* `5' is the conservative upper bound of required bytes per stack */
+        /* element.                                                        */
+
+        t2_size = 5 * ( decoder.top - decoder.stack );
+
+        q = (FT_Byte*)memory->alloc( memory, t2_size );
+        if ( !q )
+          goto Out_Of_Memory_Error;
+
+        t2->start = q;
+        t2->limit = q + t2_size;
+
         stack = decoder.stack;
 
         while ( stack < decoder.top )
@@ -1257,7 +1351,7 @@
 
           if ( *stack < 0 )
           {
-            num = (FT_ULong)-*stack;
+            num = (FT_ULong)NEG_LONG( *stack );
             neg = 1;
           }
           else
@@ -1498,11 +1592,17 @@
           parser->top = parser->stack;
       }
       p++;
-    }
+    } /* while ( p < limit ) */
 
   Exit:
     return error;
 
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+  Out_Of_Memory_Error:
+    error = FT_THROW( Out_Of_Memory );
+    goto Exit;
+#endif
+
   Stack_Overflow:
     error = FT_THROW( Invalid_Argument );
     goto Exit;
diff --git a/src/cff/cffparse.h b/src/cff/cffparse.h
index 9cefab7..4e74709 100644
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -4,7 +4,7 @@
  *
  *   CFF token stream parser (specification)
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -60,6 +60,10 @@
     FT_Byte**   top;
     FT_UInt     stackSize;  /* allocated size */
 
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+    FT_ListRec  t2_strings;
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
     FT_UInt     object_code;
     void*       object;
 
@@ -130,6 +134,15 @@
 FT_END_HEADER
 
 
+#ifdef CFF_CONFIG_OPTION_OLD_ENGINE
+  typedef struct  CFF_T2_String_
+  {
+    FT_Byte*  start;
+    FT_Byte*  limit;
+
+  } CFF_T2_StringRec, *CFF_T2_String;
+#endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
+
 #endif /* CFFPARSE_H_ */
 
 
diff --git a/src/cff/cfftoken.h b/src/cff/cfftoken.h
index a7ccea8..063a7b3 100644
--- a/src/cff/cfftoken.h
+++ b/src/cff/cfftoken.h
@@ -4,7 +4,7 @@
  *
  *   CFF token definitions (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cff/module.mk b/src/cff/module.mk
index 8013d5d..8c61095 100644
--- a/src/cff/module.mk
+++ b/src/cff/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cff/rules.mk b/src/cff/rules.mk
index 0157a99..6e2dc47 100644
--- a/src/cff/rules.mk
+++ b/src/cff/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/Jamfile b/src/cid/Jamfile
index 1c232fd..1cfb702 100644
--- a/src/cid/Jamfile
+++ b/src/cid/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/cid Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/ciderrs.h b/src/cid/ciderrs.h
index 673b099..be80bed 100644
--- a/src/cid/ciderrs.h
+++ b/src/cid/ciderrs.h
@@ -4,7 +4,7 @@
  *
  *   CID error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c
index e47cd99..f59f288 100644
--- a/src/cid/cidgload.c
+++ b/src/cid/cidgload.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 Glyph Loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cidgload
+#define FT_COMPONENT  cidgload
 
 
   FT_CALLBACK_DEF( FT_Error )
@@ -393,8 +393,7 @@
     must_finish_decoder = TRUE;
 
     /* set up the decoder */
-    decoder.builder.no_recurse = FT_BOOL(
-      ( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 ) );
+    decoder.builder.no_recurse = FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
 
     error = cid_load_glyph( &decoder, glyph_index );
     if ( error )
diff --git a/src/cid/cidgload.h b/src/cid/cidgload.h
index 21c5e16..37eba7c 100644
--- a/src/cid/cidgload.h
+++ b/src/cid/cidgload.h
@@ -4,7 +4,7 @@
  *
  *   OpenType Glyph Loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidload.c b/src/cid/cidload.c
index 1546926..fce3e37 100644
--- a/src/cid/cidload.c
+++ b/src/cid/cidload.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 font loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cidload
+#define FT_COMPONENT  cidload
 
 
   /* read a single offset */
@@ -154,7 +154,7 @@
   }
 
 
-  FT_CALLBACK_DEF( FT_Error )
+  FT_CALLBACK_DEF( void )
   cid_parse_font_matrix( CID_Face     face,
                          CID_Parser*  parser )
   {
@@ -179,7 +179,10 @@
       result = cid_parser_to_fixed_array( parser, 6, temp, 3 );
 
       if ( result < 6 )
-        return FT_THROW( Invalid_File_Format );
+      {
+        FT_ERROR(( "cid_parse_font_matrix: not enough matrix elements\n" ));
+        goto Exit;
+      }
 
       FT_TRACE4(( " [%f %f %f %f %f %f]\n",
                   (double)temp[0] / 65536 / 1000,
@@ -194,7 +197,7 @@
       if ( temp_scale == 0 )
       {
         FT_ERROR(( "cid_parse_font_matrix: invalid font matrix\n" ));
-        return FT_THROW( Invalid_File_Format );
+        goto Exit;
       }
 
       /* atypical case */
@@ -220,7 +223,7 @@
       {
         FT_ERROR(( "t1_parse_font_matrix: invalid font matrix\n" ));
         parser->root.error = FT_THROW( Invalid_File_Format );
-        return FT_THROW( Invalid_File_Format );
+        goto Exit;
       }
 
       /* note that the font offsets are expressed in integer font units */
@@ -228,11 +231,12 @@
       offset->y  = temp[5] >> 16;
     }
 
-    return FT_Err_Ok;
+  Exit:
+    return;
   }
 
 
-  FT_CALLBACK_DEF( FT_Error )
+  FT_CALLBACK_DEF( void )
   parse_fd_array( CID_Face     face,
                   CID_Parser*  parser )
   {
@@ -247,7 +251,6 @@
     if ( num_dicts < 0 )
     {
       FT_ERROR(( "parse_fd_array: invalid number of dictionaries\n" ));
-      error = FT_THROW( Invalid_File_Format );
       goto Exit;
     }
 
@@ -304,7 +307,7 @@
     }
 
   Exit:
-    return error;
+    return;
   }
 
 
@@ -312,7 +315,7 @@
   /* and CID_FaceDictRec (both are public header files and can't  */
   /* changed).  We simply copy the value.                         */
 
-  FT_CALLBACK_DEF( FT_Error )
+  FT_CALLBACK_DEF( void )
   parse_expansion_factor( CID_Face     face,
                           CID_Parser*  parser )
   {
@@ -329,7 +332,7 @@
       FT_TRACE4(( "%d\n", dict->expansion_factor ));
     }
 
-    return FT_Err_Ok;
+    return;
   }
 
 
@@ -337,7 +340,7 @@
   /* `FontName' keyword.  FreeType doesn't need it, but it is nice */
   /* to catch it for producing better trace output.                */
 
-  FT_CALLBACK_DEF( FT_Error )
+  FT_CALLBACK_DEF( void )
   parse_font_name( CID_Face     face,
                    CID_Parser*  parser )
   {
@@ -361,7 +364,7 @@
     FT_UNUSED( parser );
 #endif
 
-    return FT_Err_Ok;
+    return;
   }
 
 
diff --git a/src/cid/cidload.h b/src/cid/cidload.h
index a3e6e28..fb9d462 100644
--- a/src/cid/cidload.h
+++ b/src/cid/cidload.h
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 font loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidobjs.c b/src/cid/cidobjs.c
index 91c4ed9..4e97287 100644
--- a/src/cid/cidobjs.c
+++ b/src/cid/cidobjs.c
@@ -4,7 +4,7 @@
  *
  *   CID objects manager (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cidobjs
+#define FT_COMPONENT  cidobjs
 
 
   /**************************************************************************
diff --git a/src/cid/cidobjs.h b/src/cid/cidobjs.h
index 33a2e7a..89c9aa7 100644
--- a/src/cid/cidobjs.h
+++ b/src/cid/cidobjs.h
@@ -4,7 +4,7 @@
  *
  *   CID objects manager (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidparse.c b/src/cid/cidparse.c
index 861c157..1be46ec 100644
--- a/src/cid/cidparse.c
+++ b/src/cid/cidparse.c
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 parser (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cidparse
+#define FT_COMPONENT  cidparse
 
 
   /*************************************************************************/
diff --git a/src/cid/cidparse.h b/src/cid/cidparse.h
index 029c6ae..ec1f6a3 100644
--- a/src/cid/cidparse.h
+++ b/src/cid/cidparse.h
@@ -4,7 +4,7 @@
  *
  *   CID-keyed Type1 parser (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidriver.c b/src/cid/cidriver.c
index 935c112..4d91e87 100644
--- a/src/cid/cidriver.c
+++ b/src/cid/cidriver.c
@@ -4,7 +4,7 @@
  *
  *   CID driver interface (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -41,7 +41,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ciddriver
+#define FT_COMPONENT  ciddriver
 
 
   /*
diff --git a/src/cid/cidriver.h b/src/cid/cidriver.h
index 2933808..3402fd7 100644
--- a/src/cid/cidriver.h
+++ b/src/cid/cidriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level CID driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/cidtoken.h b/src/cid/cidtoken.h
index d957e5a..f505c9e 100644
--- a/src/cid/cidtoken.h
+++ b/src/cid/cidtoken.h
@@ -4,7 +4,7 @@
  *
  *   CID token definitions (specification only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/cid/module.mk b/src/cid/module.mk
index 9010e33..875c683 100644
--- a/src/cid/module.mk
+++ b/src/cid/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/rules.mk b/src/cid/rules.mk
index 94333bd..2b68dd4 100644
--- a/src/cid/rules.mk
+++ b/src/cid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/cid/type1cid.c b/src/cid/type1cid.c
index 02d9400..d21801c 100644
--- a/src/cid/type1cid.c
+++ b/src/cid/type1cid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType OpenType driver component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/gxvalid/Jamfile b/src/gxvalid/Jamfile
index 74f3c51..a08e7a9 100644
--- a/src/gxvalid/Jamfile
+++ b/src/gxvalid/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/gxvalid Jamfile
 #
-# Copyright 2005-2018 by
+# Copyright (C) 2005-2019 by
 # suzuki toshiya, Masatake YAMATO and Red Hat K.K.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/gxvalid/README b/src/gxvalid/README
index af8128e..d493587 100644
--- a/src/gxvalid/README
+++ b/src/gxvalid/README
@@ -518,7 +518,7 @@
 
 ------------------------------------------------------------------------
 
-Copyright 2004-2018 by
+Copyright (C) 2004-2019 by
 suzuki toshiya, Masatake YAMATO, Red hat K.K.,
 David Turner, Robert Wilhelm, and Werner Lemberg.
 
diff --git a/src/gxvalid/gxvalid.c b/src/gxvalid/gxvalid.c
index f49e8b7..462e461 100644
--- a/src/gxvalid/gxvalid.c
+++ b/src/gxvalid/gxvalid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType validator for TrueTypeGX/AAT tables (body only).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvalid.h b/src/gxvalid/gxvalid.h
index cf02fcb..969cd09 100644
--- a/src/gxvalid/gxvalid.h
+++ b/src/gxvalid/gxvalid.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT table validation (specification only).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvbsln.c b/src/gxvalid/gxvbsln.c
index 8b554fd..f22f254 100644
--- a/src/gxvalid/gxvbsln.c
+++ b/src/gxvalid/gxvbsln.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT bsln table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvbsln
+#define FT_COMPONENT  gxvbsln
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvcommn.c b/src/gxvalid/gxvcommn.c
index 4d8a4a2..c5cb8eb 100644
--- a/src/gxvalid/gxvcommn.c
+++ b/src/gxvalid/gxvcommn.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common tables validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -35,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvcommon
+#define FT_COMPONENT  gxvcommon
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvcommn.h b/src/gxvalid/gxvcommn.h
index 9834c57..334dc9d 100644
--- a/src/gxvalid/gxvcommn.h
+++ b/src/gxvalid/gxvcommn.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common tables validation (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxverror.h b/src/gxvalid/gxverror.h
index e36b076..da0edb3 100644
--- a/src/gxvalid/gxverror.h
+++ b/src/gxvalid/gxverror.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT validation module error codes (specification only).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvfeat.c b/src/gxvalid/gxvfeat.c
index 91500bd..e1a12a1 100644
--- a/src/gxvalid/gxvfeat.c
+++ b/src/gxvalid/gxvfeat.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT feat table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -37,7 +37,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvfeat
+#define FT_COMPONENT  gxvfeat
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvfeat.h b/src/gxvalid/gxvfeat.h
index 715791d..6c98929 100644
--- a/src/gxvalid/gxvfeat.h
+++ b/src/gxvalid/gxvfeat.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT feat table validation (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvfgen.c b/src/gxvalid/gxvfgen.c
index c95aebd..5ecb944 100644
--- a/src/gxvalid/gxvfgen.c
+++ b/src/gxvalid/gxvfgen.c
@@ -5,7 +5,7 @@
  *   Generate feature registry data for gxv `feat' validator.
  *   This program is derived from gxfeatreg.c in gxlayout.
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Masatake YAMATO and Redhat K.K.
  *
  * This file may only be used,
diff --git a/src/gxvalid/gxvjust.c b/src/gxvalid/gxvjust.c
index c8a9ab6..a582377 100644
--- a/src/gxvalid/gxvjust.c
+++ b/src/gxvalid/gxvjust.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT just table validation (body).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvjust
+#define FT_COMPONENT  gxvjust
 
   /*
    * referred `just' table format specification:
@@ -72,6 +72,8 @@
                           const FT_String*  msg_tag,
                           GXV_Validator     gxvalid )
   {
+    FT_UNUSED( msg_tag );
+
     if ( gid < gxvalid->face->num_glyphs )
       return;
 
diff --git a/src/gxvalid/gxvkern.c b/src/gxvalid/gxvkern.c
index df9f10e..a753233 100644
--- a/src/gxvalid/gxvkern.c
+++ b/src/gxvalid/gxvkern.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT kern table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -39,7 +39,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvkern
+#define FT_COMPONENT  gxvkern
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvlcar.c b/src/gxvalid/gxvlcar.c
index fd167f6..13b3de3 100644
--- a/src/gxvalid/gxvlcar.c
+++ b/src/gxvalid/gxvlcar.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT lcar table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvlcar
+#define FT_COMPONENT  gxvlcar
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvmod.c b/src/gxvalid/gxvmod.c
index 847e0f1..eeadeb3 100644
--- a/src/gxvalid/gxvmod.c
+++ b/src/gxvalid/gxvmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's TrueTypeGX/AAT validation module implementation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -44,7 +44,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmodule
+#define FT_COMPONENT  gxvmodule
 
 
   static FT_Error
diff --git a/src/gxvalid/gxvmod.h b/src/gxvalid/gxvmod.h
index f6a2502..6ecd731 100644
--- a/src/gxvalid/gxvmod.h
+++ b/src/gxvalid/gxvmod.h
@@ -5,7 +5,7 @@
  *   FreeType's TrueTypeGX/AAT validation module implementation
  *   (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvmort.c b/src/gxvalid/gxvmort.c
index 1dfa5a3..288ef69 100644
--- a/src/gxvalid/gxvmort.c
+++ b/src/gxvalid/gxvmort.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT mort table validation (body).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   static void
@@ -123,6 +123,7 @@
                               GXV_Validator  gxvalid )
   {
     FT_UNUSED( gxvalid );
+    FT_UNUSED( coverage );
 
 #ifdef FT_DEBUG_LEVEL_TRACE
     if ( coverage & 0x8000U )
diff --git a/src/gxvalid/gxvmort.h b/src/gxvalid/gxvmort.h
index c2dc657..0619e24 100644
--- a/src/gxvalid/gxvmort.h
+++ b/src/gxvalid/gxvmort.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common definition for mort table (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvmort0.c b/src/gxvalid/gxvmort0.c
index c7901cb..2c01bf9 100644
--- a/src/gxvalid/gxvmort0.c
+++ b/src/gxvalid/gxvmort0.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type0 (Indic Script Rearrangement) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   static const char* GXV_Mort_IndicScript_Msg[] =
diff --git a/src/gxvalid/gxvmort1.c b/src/gxvalid/gxvmort1.c
index f2f4f57..c71ba13 100644
--- a/src/gxvalid/gxvmort1.c
+++ b/src/gxvalid/gxvmort1.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type1 (Contextual Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   typedef struct  GXV_mort_subtable_type1_StateOptRec_
diff --git a/src/gxvalid/gxvmort2.c b/src/gxvalid/gxvmort2.c
index 33fea0f..889d3bd 100644
--- a/src/gxvalid/gxvmort2.c
+++ b/src/gxvalid/gxvmort2.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type2 (Ligature Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   typedef struct  GXV_mort_subtable_type2_StateOptRec_
diff --git a/src/gxvalid/gxvmort4.c b/src/gxvalid/gxvmort4.c
index 6cf1e80..f8ce6cf 100644
--- a/src/gxvalid/gxvmort4.c
+++ b/src/gxvalid/gxvmort4.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type4 (Non-Contextual Glyph Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   static void
diff --git a/src/gxvalid/gxvmort5.c b/src/gxvalid/gxvmort5.c
index ae94e22..1ba1e5d 100644
--- a/src/gxvalid/gxvmort5.c
+++ b/src/gxvalid/gxvmort5.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT mort table validation
  *   body for type5 (Contextual Glyph Insertion) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmort
+#define FT_COMPONENT  gxvmort
 
 
   /*
diff --git a/src/gxvalid/gxvmorx.c b/src/gxvalid/gxvmorx.c
index f02ff54..8bd45c2 100644
--- a/src/gxvalid/gxvmorx.c
+++ b/src/gxvalid/gxvmorx.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT morx table validation (body).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -35,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   static void
diff --git a/src/gxvalid/gxvmorx.h b/src/gxvalid/gxvmorx.h
index 1ded623..e257270 100644
--- a/src/gxvalid/gxvmorx.h
+++ b/src/gxvalid/gxvmorx.h
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT common definition for morx table (specification).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
diff --git a/src/gxvalid/gxvmorx0.c b/src/gxvalid/gxvmorx0.c
index d65ced5..d7764a0 100644
--- a/src/gxvalid/gxvmorx0.c
+++ b/src/gxvalid/gxvmorx0.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type0 (Indic Script Rearrangement) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   static void
diff --git a/src/gxvalid/gxvmorx1.c b/src/gxvalid/gxvmorx1.c
index 1c8da1b..5b41b36 100644
--- a/src/gxvalid/gxvmorx1.c
+++ b/src/gxvalid/gxvmorx1.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type1 (Contextual Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   typedef struct  GXV_morx_subtable_type1_StateOptRec_
diff --git a/src/gxvalid/gxvmorx2.c b/src/gxvalid/gxvmorx2.c
index d20fc57..ec4c812 100644
--- a/src/gxvalid/gxvmorx2.c
+++ b/src/gxvalid/gxvmorx2.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type2 (Ligature Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   typedef struct  GXV_morx_subtable_type2_StateOptRec_
diff --git a/src/gxvalid/gxvmorx4.c b/src/gxvalid/gxvmorx4.c
index fce219c..7b04153 100644
--- a/src/gxvalid/gxvmorx4.c
+++ b/src/gxvalid/gxvmorx4.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for "morx" type4 (Non-Contextual Glyph Substitution) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   FT_LOCAL_DEF( void )
diff --git a/src/gxvalid/gxvmorx5.c b/src/gxvalid/gxvmorx5.c
index 8826954..70a4623 100644
--- a/src/gxvalid/gxvmorx5.c
+++ b/src/gxvalid/gxvmorx5.c
@@ -5,7 +5,7 @@
  *   TrueTypeGX/AAT morx table validation
  *   body for type5 (Contextual Glyph Insertion) subtable.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvmorx
+#define FT_COMPONENT  gxvmorx
 
 
   /*
diff --git a/src/gxvalid/gxvopbd.c b/src/gxvalid/gxvopbd.c
index 76b6961..f055a22 100644
--- a/src/gxvalid/gxvopbd.c
+++ b/src/gxvalid/gxvopbd.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT opbd table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvopbd
+#define FT_COMPONENT  gxvopbd
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvprop.c b/src/gxvalid/gxvprop.c
index 856dd10..e1911ed 100644
--- a/src/gxvalid/gxvprop.c
+++ b/src/gxvalid/gxvprop.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT prop table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvprop
+#define FT_COMPONENT  gxvprop
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/gxvtrak.c b/src/gxvalid/gxvtrak.c
index d2ceb66..b7794b7 100644
--- a/src/gxvalid/gxvtrak.c
+++ b/src/gxvalid/gxvtrak.c
@@ -4,7 +4,7 @@
  *
  *   TrueTypeGX/AAT trak table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_gxvtrak
+#define FT_COMPONENT  gxvtrak
 
 
   /*************************************************************************/
diff --git a/src/gxvalid/module.mk b/src/gxvalid/module.mk
index b64879d..04067ce 100644
--- a/src/gxvalid/module.mk
+++ b/src/gxvalid/module.mk
@@ -2,7 +2,7 @@
 # FreeType 2 gxvalid module definition
 #
 
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
diff --git a/src/gxvalid/rules.mk b/src/gxvalid/rules.mk
index 3a17c03..4ef463b 100644
--- a/src/gxvalid/rules.mk
+++ b/src/gxvalid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # suzuki toshiya, Masatake YAMATO, Red Hat K.K.,
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
diff --git a/src/gzip/Jamfile b/src/gzip/Jamfile
index a7b4c8c..2c808b7 100644
--- a/src/gzip/Jamfile
+++ b/src/gzip/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/gzip Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c
index 91b343b..5e78bc6 100644
--- a/src/gzip/ftgzip.c
+++ b/src/gzip/ftgzip.c
@@ -8,7 +8,7 @@
  * parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -731,7 +731,7 @@
 
     /* check for `input' delayed to `inflate' */
 
-    if ( !memory || ! output_len || !output )
+    if ( !memory || !output_len || !output )
       return FT_THROW( Invalid_Argument );
 
     /* this function is modeled after zlib's `uncompress' function */
@@ -746,7 +746,7 @@
     stream.zfree  = (free_func) ft_gzip_free;
     stream.opaque = memory;
 
-    err = inflateInit2( &stream, MAX_WBITS );
+    err = inflateInit2( &stream, MAX_WBITS|32 );
     if ( err != Z_OK )
       return FT_THROW( Invalid_Argument );
 
diff --git a/src/gzip/infblock.c b/src/gzip/infblock.c
index d6e2dc2..2b4f0c2 100644
--- a/src/gzip/infblock.c
+++ b/src/gzip/infblock.c
@@ -235,6 +235,7 @@
       s->sub.trees.index = 0;
       Tracev((stderr, "inflate:       table sizes ok\n"));
       s->mode = BTREE;
+      /* fall through */
     case BTREE:
       while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10))
       {
@@ -260,6 +261,7 @@
       s->sub.trees.index = 0;
       Tracev((stderr, "inflate:       bits tree ok\n"));
       s->mode = DTREE;
+      /* fall through */
     case DTREE:
       while (t = s->sub.trees.table,
              s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))
@@ -335,6 +337,7 @@
       }
       ZFREE(z, s->sub.trees.blens);
       s->mode = CODES;
+      /* fall through */
     case CODES:
       UPDATE
       if ((r = inflate_codes(s, z, r)) != Z_STREAM_END)
@@ -351,11 +354,13 @@
         break;
       }
       s->mode = DRY;
+      /* fall through */
     case DRY:
       FLUSH
       if (s->read != s->write)
         LEAVE
       s->mode = DONE;
+      /* fall through */
     case DONE:
       r = Z_STREAM_END;
       LEAVE
diff --git a/src/gzip/infcodes.c b/src/gzip/infcodes.c
index f7bfd58..ba30654 100644
--- a/src/gzip/infcodes.c
+++ b/src/gzip/infcodes.c
@@ -117,6 +117,7 @@
       c->sub.code.need = c->lbits;
       c->sub.code.tree = c->ltree;
       c->mode = LEN;
+      /* fall through */
     case LEN:           /* i: get length/literal/eob next */
       j = c->sub.code.need;
       NEEDBITS(j)
@@ -164,6 +165,7 @@
       c->sub.code.tree = c->dtree;
       Tracevv((stderr, "inflate:         length %u\n", c->len));
       c->mode = DIST;
+      /* fall through */
     case DIST:          /* i: get distance next */
       j = c->sub.code.need;
       NEEDBITS(j)
@@ -194,6 +196,7 @@
       DUMPBITS(j)
       Tracevv((stderr, "inflate:         distance %u\n", c->sub.copy.dist));
       c->mode = COPY;
+      /* fall through */
     case COPY:          /* o: copying bytes in window, waiting for space */
       f = q - c->sub.copy.dist;
       while (f < s->window)             /* modulo window size-"while" instead */
@@ -225,6 +228,7 @@
       if (s->read != s->write)
         LEAVE
       c->mode = END;
+      /* fall through */
     case END:
       r = Z_STREAM_END;
       LEAVE
diff --git a/src/gzip/inflate.c b/src/gzip/inflate.c
index 8877fa3..95e2653 100644
--- a/src/gzip/inflate.c
+++ b/src/gzip/inflate.c
@@ -174,6 +174,7 @@
         break;
       }
       z->state->mode = FLAG;
+      /* fall through */
     case FLAG:
       NEEDBYTE
       b = NEXTBYTE;
@@ -191,18 +192,22 @@
         break;
       }
       z->state->mode = DICT4;
+      /* fall through */
     case DICT4:
       NEEDBYTE
       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
       z->state->mode = DICT3;
+      /* fall through */
     case DICT3:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
       z->state->mode = DICT2;
+      /* fall through */
     case DICT2:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
       z->state->mode = DICT1;
+      /* fall through */
     case DICT1:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE;
@@ -234,18 +239,22 @@
         break;
       }
       z->state->mode = CHECK4;
+      /* fall through */
     case CHECK4:
       NEEDBYTE
       z->state->sub.check.need = (uLong)NEXTBYTE << 24;
       z->state->mode = CHECK3;
+      /* fall through */
     case CHECK3:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 16;
       z->state->mode = CHECK2;
+      /* fall through */
     case CHECK2:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE << 8;
       z->state->mode = CHECK1;
+      /* fall through */
     case CHECK1:
       NEEDBYTE
       z->state->sub.check.need += (uLong)NEXTBYTE;
@@ -259,6 +268,7 @@
       }
       Tracev((stderr, "inflate: zlib check ok\n"));
       z->state->mode = DONE;
+      /* fall through */
     case DONE:
       return Z_STREAM_END;
     case BAD:
diff --git a/src/gzip/rules.mk b/src/gzip/rules.mk
index 1a2e48b..44206a1 100644
--- a/src/gzip/rules.mk
+++ b/src/gzip/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/lzw/Jamfile b/src/lzw/Jamfile
index cb83aa4..ba2d6eb 100644
--- a/src/lzw/Jamfile
+++ b/src/lzw/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/lzw Jamfile
 #
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/lzw/ftlzw.c b/src/lzw/ftlzw.c
index 4a3d70b..9805a1e 100644
--- a/src/lzw/ftlzw.c
+++ b/src/lzw/ftlzw.c
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * Albert Chin-A-Young.
  *
  * based on code in `src/gzip/ftgzip.c'
diff --git a/src/lzw/ftzopen.c b/src/lzw/ftzopen.c
index b699b2e..67e6760 100644
--- a/src/lzw/ftzopen.c
+++ b/src/lzw/ftzopen.c
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/lzw/ftzopen.h b/src/lzw/ftzopen.h
index 4fbe257..44fe36d 100644
--- a/src/lzw/ftzopen.h
+++ b/src/lzw/ftzopen.h
@@ -8,7 +8,7 @@
  * be used to parse compressed PCF fonts, as found with many X11 server
  * distributions.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/lzw/rules.mk b/src/lzw/rules.mk
index 18933c4..930b32e 100644
--- a/src/lzw/rules.mk
+++ b/src/lzw/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # Albert Chin-A-Young.
 #
 # based on `src/lzw/rules.mk'
diff --git a/src/otvalid/Jamfile b/src/otvalid/Jamfile
index 21b8e0c..36db0e1 100644
--- a/src/otvalid/Jamfile
+++ b/src/otvalid/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/otvalid Jamfile
 #
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/otvalid/module.mk b/src/otvalid/module.mk
index 34f3dab..5ea5b7b 100644
--- a/src/otvalid/module.mk
+++ b/src/otvalid/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/otvalid/otvalid.c b/src/otvalid/otvalid.c
index 144be58..e3964b9 100644
--- a/src/otvalid/otvalid.c
+++ b/src/otvalid/otvalid.c
@@ -4,7 +4,7 @@
  *
  *   FreeType validator for OpenType tables (body only).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/otvalid.h b/src/otvalid/otvalid.h
index 1ccdbbf..5ca819f 100644
--- a/src/otvalid/otvalid.h
+++ b/src/otvalid/otvalid.h
@@ -4,7 +4,7 @@
  *
  *   OpenType table validation (specification only).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/otvbase.c b/src/otvalid/otvbase.c
index 918e383..be69d7c 100644
--- a/src/otvalid/otvbase.c
+++ b/src/otvalid/otvbase.c
@@ -4,7 +4,7 @@
  *
  *   OpenType BASE table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvbase
+#define FT_COMPONENT  otvbase
 
 
   static void
diff --git a/src/otvalid/otvcommn.c b/src/otvalid/otvcommn.c
index 4a2c95e..5ed1723 100644
--- a/src/otvalid/otvcommn.c
+++ b/src/otvalid/otvcommn.c
@@ -4,7 +4,7 @@
  *
  *   OpenType common tables validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -26,7 +26,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvcommon
+#define FT_COMPONENT  otvcommon
 
 
   /*************************************************************************/
diff --git a/src/otvalid/otvcommn.h b/src/otvalid/otvcommn.h
index 3cd6d86..bfcc5b9 100644
--- a/src/otvalid/otvcommn.h
+++ b/src/otvalid/otvcommn.h
@@ -4,7 +4,7 @@
  *
  *   OpenType common tables validation (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/otverror.h b/src/otvalid/otverror.h
index 24e8d1d..a7d35ac 100644
--- a/src/otvalid/otverror.h
+++ b/src/otvalid/otverror.h
@@ -4,7 +4,7 @@
  *
  *   OpenType validation module error codes (specification only).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/otvgdef.c b/src/otvalid/otvgdef.c
index 68c00a5..2529b54 100644
--- a/src/otvalid/otvgdef.c
+++ b/src/otvalid/otvgdef.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GDEF table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvgdef
+#define FT_COMPONENT  otvgdef
 
 
   /*************************************************************************/
diff --git a/src/otvalid/otvgpos.c b/src/otvalid/otvgpos.c
index 17f2437..f3bddea 100644
--- a/src/otvalid/otvgpos.c
+++ b/src/otvalid/otvgpos.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GPOS table validation (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvgpos
+#define FT_COMPONENT  otvgpos
 
 
   static void
diff --git a/src/otvalid/otvgpos.h b/src/otvalid/otvgpos.h
index c216609..b315431 100644
--- a/src/otvalid/otvgpos.h
+++ b/src/otvalid/otvgpos.h
@@ -4,7 +4,7 @@
  *
  *   OpenType GPOS table validator (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/otvgsub.c b/src/otvalid/otvgsub.c
index 0180b1a..97da997 100644
--- a/src/otvalid/otvgsub.c
+++ b/src/otvalid/otvgsub.c
@@ -4,7 +4,7 @@
  *
  *   OpenType GSUB table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -27,7 +27,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvgsub
+#define FT_COMPONENT  otvgsub
 
 
   /*************************************************************************/
diff --git a/src/otvalid/otvjstf.c b/src/otvalid/otvjstf.c
index 7a5769a..d4e6d87 100644
--- a/src/otvalid/otvjstf.c
+++ b/src/otvalid/otvjstf.c
@@ -4,7 +4,7 @@
  *
  *   OpenType JSTF table validation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvjstf
+#define FT_COMPONENT  otvjstf
 
 
 #define JstfPriorityFunc  otv_JstfPriority_validate
diff --git a/src/otvalid/otvmath.c b/src/otvalid/otvmath.c
index 4a9f3b0..3aaf0ec 100644
--- a/src/otvalid/otvmath.c
+++ b/src/otvalid/otvmath.c
@@ -4,7 +4,7 @@
  *
  *   OpenType MATH table validation (body).
  *
- * Copyright 2007-2018 by
+ * Copyright (C) 2007-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Written by George Williams.
@@ -30,7 +30,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvmath
+#define FT_COMPONENT  otvmath
 
 
 
diff --git a/src/otvalid/otvmod.c b/src/otvalid/otvmod.c
index 5dd543b..f417bd2 100644
--- a/src/otvalid/otvmod.c
+++ b/src/otvalid/otvmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType's OpenType validation module implementation (body).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_otvmodule
+#define FT_COMPONENT  otvmodule
 
 
   static FT_Error
diff --git a/src/otvalid/otvmod.h b/src/otvalid/otvmod.h
index a08512f..5539de7 100644
--- a/src/otvalid/otvmod.h
+++ b/src/otvalid/otvmod.h
@@ -5,7 +5,7 @@
  *   FreeType's OpenType validation module implementation
  *   (specification).
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/otvalid/rules.mk b/src/otvalid/rules.mk
index d4fc723..3c6ece1 100644
--- a/src/otvalid/rules.mk
+++ b/src/otvalid/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2004-2018 by
+# Copyright (C) 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pcf/Jamfile b/src/pcf/Jamfile
index 7b92b12..fd17d53 100644
--- a/src/pcf/Jamfile
+++ b/src/pcf/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/pcf Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pcf/pcf.h b/src/pcf/pcf.h
index 3c4eb6a..33be4bc 100644
--- a/src/pcf/pcf.h
+++ b/src/pcf/pcf.h
@@ -99,11 +99,25 @@
     FT_Short  ascent;
     FT_Short  descent;
     FT_Short  attributes;
-    FT_ULong  bits;
+
+    FT_ULong  bits;  /* offset into the PCF_BITMAPS table */
 
   } PCF_MetricRec, *PCF_Metric;
 
 
+  typedef struct  PCF_EncRec_
+  {
+    FT_UShort   firstCol;
+    FT_UShort   lastCol;
+    FT_UShort   firstRow;
+    FT_UShort   lastRow;
+    FT_UShort   defaultChar;
+
+    FT_UShort*  offset;
+
+  } PCF_EncRec, *PCF_Enc;
+
+
   typedef struct  PCF_AccelRec_
   {
     FT_Byte        noOverlap;
@@ -128,41 +142,28 @@
    * This file uses X11 terminology for PCF data; an `encoding' in X11 speak
    * is the same as a `character code' in FreeType speak.
    */
-  typedef struct  PCF_EncodingRec_
-  {
-    FT_ULong   enc;
-    FT_UShort  glyph;  /* an index into PCF_Face's `metrics' array */
-
-  } PCF_EncodingRec, *PCF_Encoding;
-
-
   typedef struct  PCF_FaceRec_
   {
-    FT_FaceRec     root;
+    FT_FaceRec    root;
 
-    FT_StreamRec   comp_stream;
-    FT_Stream      comp_source;
+    FT_StreamRec  comp_stream;
+    FT_Stream     comp_source;
 
-    char*          charset_encoding;
-    char*          charset_registry;
+    char*         charset_encoding;
+    char*         charset_registry;
 
-    PCF_TocRec     toc;
-    PCF_AccelRec   accel;
+    PCF_TocRec    toc;
+    PCF_AccelRec  accel;
 
-    int            nprops;
-    PCF_Property   properties;
+    int           nprops;
+    PCF_Property  properties;
 
-    FT_ULong       nmetrics;
-    PCF_Metric     metrics;
-    FT_ULong       nencodings;
-    PCF_Encoding   encodings;
+    FT_ULong      nmetrics;
+    PCF_Metric    metrics;
 
-    FT_UShort      defaultChar;
+    PCF_EncRec    enc;
 
-    FT_ULong       bitmapsFormat;
-
-    FT_CharMap     charmap_handle;
-    FT_CharMapRec  charmap;  /* a single charmap per face */
+    FT_ULong      bitmapsFormat;
 
   } PCF_FaceRec, *PCF_Face;
 
diff --git a/src/pcf/pcfdrivr.c b/src/pcf/pcfdrivr.c
index e2f7e7c..b39592c 100644
--- a/src/pcf/pcfdrivr.c
+++ b/src/pcf/pcfdrivr.c
@@ -45,7 +45,7 @@
 #include "pcfutil.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pcfread
+#define FT_COMPONENT  pcfread
 
 #include FT_SERVICE_BDF_H
 #include FT_SERVICE_FONT_FORMAT_H
@@ -60,7 +60,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pcfdriver
+#define FT_COMPONENT  pcfdriver
 
 
   /*
@@ -69,9 +69,8 @@
    */
   typedef struct  PCF_CMapRec_
   {
-    FT_CMapRec    root;
-    FT_ULong      num_encodings;
-    PCF_Encoding  encodings;
+    FT_CMapRec  root;
+    PCF_Enc     enc;
 
   } PCF_CMapRec, *PCF_CMap;
 
@@ -86,8 +85,7 @@
     FT_UNUSED( init_data );
 
 
-    cmap->num_encodings = face->nencodings;
-    cmap->encodings     = face->encodings;
+    cmap->enc = &face->enc;
 
     return FT_Err_Ok;
   }
@@ -99,8 +97,7 @@
     PCF_CMap  cmap = (PCF_CMap)pcfcmap;
 
 
-    cmap->encodings     = NULL;
-    cmap->num_encodings = 0;
+    cmap->enc = NULL;
   }
 
 
@@ -108,36 +105,26 @@
   pcf_cmap_char_index( FT_CMap    pcfcmap,  /* PCF_CMap */
                        FT_UInt32  charcode )
   {
-    PCF_CMap      cmap      = (PCF_CMap)pcfcmap;
-    PCF_Encoding  encodings = cmap->encodings;
-    FT_ULong      min, max, mid;
-    FT_UInt       result    = 0;
+    PCF_CMap   cmap = (PCF_CMap)pcfcmap;
+    PCF_Enc    enc  = cmap->enc;
+    FT_UShort  charcodeRow;
+    FT_UShort  charcodeCol;
 
 
-    min = 0;
-    max = cmap->num_encodings;
+    if ( charcode > (FT_UInt32)( enc->lastRow  * 256 + enc->lastCol  ) ||
+         charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
+      return 0;
 
-    while ( min < max )
-    {
-      FT_ULong  code;
+    charcodeRow = (FT_UShort)( charcode >> 8 );
+    charcodeCol = (FT_UShort)( charcode & 0xFF );
 
+    if ( charcodeCol < enc->firstCol ||
+         charcodeCol > enc->lastCol  )
+      return 0;
 
-      mid  = ( min + max ) >> 1;
-      code = encodings[mid].enc;
-
-      if ( charcode == code )
-      {
-        result = encodings[mid].glyph;
-        break;
-      }
-
-      if ( charcode < code )
-        max = mid;
-      else
-        min = mid + 1;
-    }
-
-    return result;
+    return (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
+                                  ( enc->lastCol - enc->firstCol + 1 ) +
+                                charcodeCol - enc->firstCol];
   }
 
 
@@ -145,52 +132,42 @@
   pcf_cmap_char_next( FT_CMap    pcfcmap,   /* PCF_CMap */
                       FT_UInt32  *acharcode )
   {
-    PCF_CMap      cmap      = (PCF_CMap)pcfcmap;
-    PCF_Encoding  encodings = cmap->encodings;
-    FT_ULong      min, max, mid;
-    FT_ULong      charcode  = *acharcode + 1;
-    FT_UInt       result    = 0;
+    PCF_CMap   cmap      = (PCF_CMap)pcfcmap;
+    PCF_Enc    enc       = cmap->enc;
+    FT_UInt32  charcode  = *acharcode;
+    FT_UShort  charcodeRow;
+    FT_UShort  charcodeCol;
+    FT_Int     result = 0;
 
 
-    min = 0;
-    max = cmap->num_encodings;
-
-    while ( min < max )
+    while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) )
     {
-      FT_ULong  code;
+      charcode++;
 
+      if ( charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) )
+        charcode = (FT_UInt32)( enc->firstRow * 256 + enc->firstCol );
 
-      mid  = ( min + max ) >> 1;
-      code = encodings[mid].enc;
+      charcodeRow = (FT_UShort)( charcode >> 8 );
+      charcodeCol = (FT_UShort)( charcode & 0xFF );
 
-      if ( charcode == code )
+      if ( charcodeCol < enc->firstCol )
+        charcodeCol = enc->firstCol;
+      else if ( charcodeCol > enc->lastCol )
       {
-        result = encodings[mid].glyph;
-        goto Exit;
+        charcodeRow++;
+        charcodeCol = enc->firstCol;
       }
 
-      if ( charcode < code )
-        max = mid;
-      else
-        min = mid + 1;
+      charcode = (FT_UInt32)( charcodeRow * 256 + charcodeCol );
+
+      result = (FT_UInt)enc->offset[( charcodeRow - enc->firstRow ) *
+                                      ( enc->lastCol - enc->firstCol + 1 ) +
+                                    charcodeCol - enc->firstCol];
+      if ( result != 0xFFFFU )
+        break;
     }
 
-    charcode = 0;
-    if ( min < cmap->num_encodings )
-    {
-      charcode = encodings[min].enc;
-      result   = encodings[min].glyph;
-    }
-
-  Exit:
-    if ( charcode > 0xFFFFFFFFUL )
-    {
-      FT_TRACE1(( "pcf_cmap_char_next: charcode 0x%x > 32bit API" ));
-      *acharcode = 0;
-      /* XXX: result should be changed to indicate an overflow error */
-    }
-    else
-      *acharcode = (FT_UInt32)charcode;
+    *acharcode = charcode;
 
     return result;
   }
@@ -221,8 +198,8 @@
 
     memory = FT_FACE_MEMORY( face );
 
-    FT_FREE( face->encodings );
     FT_FREE( face->metrics );
+    FT_FREE( face->enc.offset );
 
     /* free properties */
     if ( face->properties )
diff --git a/src/pcf/pcfread.c b/src/pcf/pcfread.c
index 14cce67..2ffe22d 100644
--- a/src/pcf/pcfread.c
+++ b/src/pcf/pcfread.c
@@ -44,7 +44,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pcfread
+#define FT_COMPONENT  pcfread
 
 
 #ifdef FT_DEBUG_LEVEL_TRACE
@@ -743,33 +743,39 @@
     if ( !orig_nmetrics )
       return FT_THROW( Invalid_Table );
 
-    /* PCF is a format from ancient times; Unicode was in its       */
-    /* infancy, and widely used two-byte character sets for CJK     */
-    /* scripts (Big 5, GB 2312, JIS X 0208, etc.) did have at most  */
-    /* 15000 characters.  Even the more exotic CNS 11643 and CCCII  */
-    /* standards, which were essentially three-byte character sets, */
-    /* provided less then 65536 assigned characters.                */
-    /*                                                              */
-    /* While technically possible to have a larger number of glyphs */
-    /* in PCF files, we thus limit the number to 65536.             */
-    if ( orig_nmetrics > 65536 )
+    /*
+     * PCF is a format from ancient times; Unicode was in its infancy, and
+     * widely used two-byte character sets for CJK scripts (Big 5, GB 2312,
+     * JIS X 0208, etc.) did have at most 15000 characters.  Even the more
+     * exotic CNS 11643 and CCCII standards, which were essentially
+     * three-byte character sets, provided less then 65536 assigned
+     * characters.
+     *
+     * While technically possible to have a larger number of glyphs in PCF
+     * files, we thus limit the number to 65535, taking into account that we
+     * synthesize the metrics of glyph 0 to be a copy of the `default
+     * character', and that 0xFFFF in the encodings array indicates a
+     * missing glyph.
+     */
+    if ( orig_nmetrics > 65534 )
     {
       FT_TRACE0(( "pcf_get_metrics:"
-                  " only loading first 65536 metrics\n" ));
-      nmetrics = 65536;
+                  " only loading first 65534 metrics\n" ));
+      nmetrics = 65534;
     }
     else
       nmetrics = orig_nmetrics;
 
-    face->nmetrics = nmetrics;
+    face->nmetrics = nmetrics + 1;
 
-    if ( FT_NEW_ARRAY( face->metrics, nmetrics ) )
+    if ( FT_NEW_ARRAY( face->metrics, face->nmetrics ) )
       return error;
 
-    metrics = face->metrics;
+    /* we handle glyph index 0 later on */
+    metrics = face->metrics + 1;
 
     FT_TRACE4(( "\n" ));
-    for ( i = 0; i < nmetrics; i++, metrics++ )
+    for ( i = 1; i < face->nmetrics; i++, metrics++ )
     {
       FT_TRACE5(( "  idx %ld:", i ));
       error = pcf_get_metric( stream, format, metrics );
@@ -808,12 +814,10 @@
   pcf_get_bitmaps( FT_Stream  stream,
                    PCF_Face   face )
   {
-    FT_Error   error;
-    FT_Memory  memory  = FT_FACE( face )->memory;
-    FT_ULong*  offsets = NULL;
-    FT_ULong   bitmapSizes[GLYPHPADOPTIONS];
-    FT_ULong   format, size;
-    FT_ULong   nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
+    FT_Error  error;
+    FT_ULong  bitmapSizes[GLYPHPADOPTIONS];
+    FT_ULong  format, size, pos;
+    FT_ULong  nbitmaps, orig_nbitmaps, i, sizebitmaps = 0;
 
 
     error = pcf_seek_to_table_type( stream,
@@ -859,31 +863,46 @@
     FT_TRACE4(( "  number of bitmaps: %ld\n", orig_nbitmaps ));
 
     /* see comment in `pcf_get_metrics' */
-    if ( orig_nbitmaps > 65536 )
+    if ( orig_nbitmaps > 65534 )
     {
       FT_TRACE0(( "pcf_get_bitmaps:"
-                  " only loading first 65536 bitmaps\n" ));
-      nbitmaps = 65536;
+                  " only loading first 65534 bitmaps\n" ));
+      nbitmaps = 65534;
     }
     else
       nbitmaps = orig_nbitmaps;
 
-    if ( nbitmaps != face->nmetrics )
+    /* no extra bitmap for glyph 0 */
+    if ( nbitmaps != face->nmetrics - 1 )
       return FT_THROW( Invalid_File_Format );
 
-    if ( FT_NEW_ARRAY( offsets, nbitmaps ) )
-      return error;
+    /* start position of bitmap data */
+    pos = stream->pos + nbitmaps * 4 + 4 * 4;
 
     FT_TRACE5(( "\n" ));
-    for ( i = 0; i < nbitmaps; i++ )
+    for ( i = 1; i <= nbitmaps; i++ )
     {
+      FT_ULong  offset;
+
+
       if ( PCF_BYTE_ORDER( format ) == MSBFirst )
-        (void)FT_READ_ULONG( offsets[i] );
+        (void)FT_READ_ULONG( offset );
       else
-        (void)FT_READ_ULONG_LE( offsets[i] );
+        (void)FT_READ_ULONG_LE( offset );
 
       FT_TRACE5(( "  bitmap %lu: offset %lu (0x%lX)\n",
-                  i, offsets[i], offsets[i] ));
+                  i, offset, offset ));
+
+      /* right now, we only check the offset with a rough estimate; */
+      /* actual bitmaps are only loaded on demand                   */
+      if ( offset > size )
+      {
+        FT_TRACE0(( "pcf_get_bitmaps:"
+                    " invalid offset to bitmap data of glyph %lu\n", i ));
+        face->metrics[i].bits = pos;
+      }
+      else
+        face->metrics[i].bits = pos + offset;
     }
     if ( error )
       goto Bail;
@@ -910,24 +929,9 @@
 
     FT_UNUSED( sizebitmaps );       /* only used for debugging */
 
-    /* right now, we only check the bitmap offsets; */
-    /* actual bitmaps are only loaded on demand     */
-    for ( i = 0; i < nbitmaps; i++ )
-    {
-      /* rough estimate */
-      if ( offsets[i] > size )
-      {
-        FT_TRACE0(( "pcf_get_bitmaps:"
-                    " invalid offset to bitmap data of glyph %lu\n", i ));
-      }
-      else
-        face->metrics[i].bits = stream->pos + offsets[i];
-    }
-
     face->bitmapsFormat = format;
 
   Bail:
-    FT_FREE( offsets );
     return error;
   }
 
@@ -936,22 +940,54 @@
    * This file uses X11 terminology for PCF data; an `encoding' in X11 speak
    * is the same as a character code in FreeType speak.
    */
+#define PCF_ENC_SIZE  10
+
+  static
+  const FT_Frame_Field  pcf_enc_header[] =
+  {
+#undef  FT_STRUCTURE
+#define FT_STRUCTURE  PCF_EncRec
+
+    FT_FRAME_START( PCF_ENC_SIZE ),
+      FT_FRAME_USHORT_LE( firstCol ),
+      FT_FRAME_USHORT_LE( lastCol ),
+      FT_FRAME_USHORT_LE( firstRow ),
+      FT_FRAME_USHORT_LE( lastRow ),
+      FT_FRAME_USHORT_LE( defaultChar ),
+    FT_FRAME_END
+  };
+
+
+  static
+  const FT_Frame_Field  pcf_enc_msb_header[] =
+  {
+#undef  FT_STRUCTURE
+#define FT_STRUCTURE  PCF_EncRec
+
+    FT_FRAME_START( PCF_ENC_SIZE ),
+      FT_FRAME_USHORT( firstCol ),
+      FT_FRAME_USHORT( lastCol ),
+      FT_FRAME_USHORT( firstRow ),
+      FT_FRAME_USHORT( lastRow ),
+      FT_FRAME_USHORT( defaultChar ),
+    FT_FRAME_END
+  };
+
+
   static FT_Error
   pcf_get_encodings( FT_Stream  stream,
                      PCF_Face   face )
   {
-    FT_Error      error;
-    FT_Memory     memory = FT_FACE( face )->memory;
-    FT_ULong      format, size;
-    FT_UShort     firstCol, lastCol;
-    FT_UShort     firstRow, lastRow;
-    FT_ULong      nencoding;
-    FT_UShort     defaultCharRow, defaultCharCol;
-    FT_UShort     encodingOffset, defaultCharEncodingOffset;
-    FT_UShort     i, j;
-    FT_Byte*      pos;
-    FT_ULong      k;
-    PCF_Encoding  encoding = NULL;
+    FT_Error    error;
+    FT_Memory   memory = FT_FACE( face )->memory;
+    FT_ULong    format, size;
+    PCF_Enc     enc = &face->enc;
+    FT_ULong    nencoding;
+    FT_UShort*  offset;
+    FT_UShort   defaultCharRow, defaultCharCol;
+    FT_UShort   encodingOffset, defaultCharEncodingOffset;
+    FT_UShort   i, j;
+    FT_Byte*    pos;
 
 
     error = pcf_seek_to_table_type( stream,
@@ -961,126 +997,125 @@
                                     &format,
                                     &size );
     if ( error )
-      return error;
+      goto Bail;
 
-    error = FT_Stream_EnterFrame( stream, 14 );
-    if ( error )
-      return error;
-
-    format = FT_GET_ULONG_LE();
-
-    /* X11's reference implementation uses the equivalent to  */
-    /* `FT_GET_SHORT' for `defaultChar', however this doesn't */
-    /* make sense for most encodings.                         */
-    if ( PCF_BYTE_ORDER( format ) == MSBFirst )
-    {
-      firstCol          = FT_GET_USHORT();
-      lastCol           = FT_GET_USHORT();
-      firstRow          = FT_GET_USHORT();
-      lastRow           = FT_GET_USHORT();
-      face->defaultChar = FT_GET_USHORT();
-    }
-    else
-    {
-      firstCol          = FT_GET_USHORT_LE();
-      lastCol           = FT_GET_USHORT_LE();
-      firstRow          = FT_GET_USHORT_LE();
-      lastRow           = FT_GET_USHORT_LE();
-      face->defaultChar = FT_GET_USHORT_LE();
-    }
-
-    FT_Stream_ExitFrame( stream );
+    if ( FT_READ_ULONG_LE( format ) )
+      goto Bail;
 
     FT_TRACE4(( "pcf_get_encodings:\n"
                 "  format: 0x%lX (%s)\n",
                 format,
                 PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" ));
 
-    if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) )
+    if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) &&
+         !PCF_FORMAT_MATCH( format, PCF_BDF_ENCODINGS )  )
       return FT_THROW( Invalid_File_Format );
 
+    if ( PCF_BYTE_ORDER( format ) == MSBFirst )
+    {
+      if ( FT_STREAM_READ_FIELDS( pcf_enc_msb_header, enc ) )
+        goto Bail;
+    }
+    else
+    {
+      if ( FT_STREAM_READ_FIELDS( pcf_enc_header, enc ) )
+        goto Bail;
+    }
+
     FT_TRACE4(( "  firstCol 0x%X, lastCol 0x%X\n"
                 "  firstRow 0x%X, lastRow 0x%X\n"
                 "  defaultChar 0x%X\n",
-                firstCol, lastCol,
-                firstRow, lastRow,
-                face->defaultChar ));
+                enc->firstCol, enc->lastCol,
+                enc->firstRow, enc->lastRow,
+                enc->defaultChar ));
 
     /* sanity checks; we limit numbers of rows and columns to 256 */
-    if ( firstCol > lastCol ||
-         lastCol  > 0xFF    ||
-         firstRow > lastRow ||
-         lastRow  > 0xFF    )
+    if ( enc->firstCol > enc->lastCol ||
+         enc->lastCol  > 0xFF         ||
+         enc->firstRow > enc->lastRow ||
+         enc->lastRow  > 0xFF         )
       return FT_THROW( Invalid_Table );
 
-    nencoding = (FT_ULong)( lastCol - firstCol + 1 ) *
-                (FT_ULong)( lastRow - firstRow + 1 );
+    nencoding = (FT_ULong)( enc->lastCol - enc->firstCol + 1 ) *
+                (FT_ULong)( enc->lastRow - enc->firstRow + 1 );
 
-    if ( FT_NEW_ARRAY( encoding, nencoding ) )
-      return error;
+    if ( FT_NEW_ARRAY( enc->offset, nencoding ) )
+      goto Bail;
 
     error = FT_Stream_EnterFrame( stream, 2 * nencoding );
     if ( error )
-      goto Bail;
+      goto Exit;
 
     FT_TRACE5(( "\n" ));
 
-    defaultCharRow = face->defaultChar >> 8;
-    defaultCharCol = face->defaultChar & 0xFF;
+    defaultCharRow = enc->defaultChar >> 8;
+    defaultCharCol = enc->defaultChar & 0xFF;
 
     /* validate default character */
-    if ( defaultCharRow < firstRow ||
-         defaultCharRow > lastRow  ||
-         defaultCharCol < firstCol ||
-         defaultCharCol > lastCol  )
+    if ( defaultCharRow < enc->firstRow ||
+         defaultCharRow > enc->lastRow  ||
+         defaultCharCol < enc->firstCol ||
+         defaultCharCol > enc->lastCol  )
     {
-      face->defaultChar = firstRow * 256U + firstCol;
+      enc->defaultChar = enc->firstRow * 256U + enc->firstCol;
       FT_TRACE0(( "pcf_get_encodings:"
                   " Invalid default character set to %u\n",
-                  face->defaultChar ));
+                  enc->defaultChar ));
 
-      defaultCharRow = face->defaultChar >> 8;
-      defaultCharCol = face->defaultChar & 0xFF;
+      defaultCharRow = enc->firstRow;
+      defaultCharCol = enc->firstCol;
     }
 
-    /* FreeType mandates that glyph index 0 is the `undefined glyph',  */
-    /* which PCF calls the `default character'.  For this reason, we   */
-    /* swap the positions of glyph index 0 and the index corresponding */
-    /* to `defaultChar' in case they are different.                    */
-
-    /* `stream->cursor' still points at the beginning of the frame; */
-    /* we can thus easily get the offset to the default character   */
+    /*
+     * FreeType mandates that glyph index 0 is the `undefined glyph', which
+     * PCF calls the `default character'.  However, FreeType needs glyph
+     * index 0 to be used for the undefined glyph only, which is is not the
+     * case for PCF.  For this reason, we add one slot for glyph index 0 and
+     * simply copy the default character to it.
+     *
+     * `stream->cursor' still points to the beginning of the frame; we can
+     * thus easily get the offset to the default character.
+     */
     pos = stream->cursor +
-            2 * ( ( defaultCharRow - firstRow ) * ( lastCol - firstCol + 1 ) +
-                  defaultCharCol - firstCol );
+            2 * ( ( defaultCharRow - enc->firstRow ) *
+                    ( enc->lastCol - enc->firstCol + 1 ) +
+                  defaultCharCol - enc->firstCol );
 
     if ( PCF_BYTE_ORDER( format ) == MSBFirst )
       defaultCharEncodingOffset = FT_PEEK_USHORT( pos );
     else
       defaultCharEncodingOffset = FT_PEEK_USHORT_LE( pos );
 
-    if ( defaultCharEncodingOffset >= face->nmetrics )
+    if ( defaultCharEncodingOffset == 0xFFFF )
     {
       FT_TRACE0(( "pcf_get_encodings:"
-                  " Invalid glyph index for default character,"
-                  " setting to zero\n" ));
-      defaultCharEncodingOffset = 0;
+                  " No glyph for default character,\n"
+                  "                  "
+                  " setting it to the first glyph of the font\n" ));
+      defaultCharEncodingOffset = 1;
+    }
+    else
+    {
+      defaultCharEncodingOffset++;
+
+      if ( defaultCharEncodingOffset >= face->nmetrics )
+      {
+        FT_TRACE0(( "pcf_get_encodings:"
+                    " Invalid glyph index for default character,\n"
+                    "                  "
+                    " setting it to the first glyph of the font\n" ));
+        defaultCharEncodingOffset = 1;
+      }
     }
 
-    if ( defaultCharEncodingOffset )
+    /* copy metrics of default character to index 0 */
+    face->metrics[0] = face->metrics[defaultCharEncodingOffset];
+
+    /* now loop over all values */
+    offset = enc->offset;
+    for ( i = enc->firstRow; i <= enc->lastRow; i++ )
     {
-      /* do the swapping */
-      PCF_MetricRec  tmp = face->metrics[defaultCharEncodingOffset];
-
-
-      face->metrics[defaultCharEncodingOffset] = face->metrics[0];
-      face->metrics[0]                         = tmp;
-    }
-
-    k = 0;
-    for ( i = firstRow; i <= lastRow; i++ )
-    {
-      for ( j = firstCol; j <= lastCol; j++ )
+      for ( j = enc->firstCol; j <= enc->lastCol; j++ )
       {
         /* X11's reference implementation uses the equivalent to  */
         /* `FT_GET_SHORT', however PCF fonts with more than 32768 */
@@ -1091,35 +1126,19 @@
         else
           encodingOffset = FT_GET_USHORT_LE();
 
-        if ( encodingOffset != 0xFFFFU )
-        {
-          if ( encodingOffset == defaultCharEncodingOffset )
-            encodingOffset = 0;
-          else if ( encodingOffset == 0 )
-            encodingOffset = defaultCharEncodingOffset;
-
-          encoding[k].enc   = i * 256U + j;
-          encoding[k].glyph = encodingOffset;
-
-          FT_TRACE5(( "  code %u (0x%04X): idx %u\n",
-                      encoding[k].enc, encoding[k].enc, encoding[k].glyph ));
-
-          k++;
-        }
+        /* everything is off by 1 due to the artificial glyph 0 */
+        *offset++ = encodingOffset == 0xFFFF ? 0xFFFF
+                                             : encodingOffset + 1;
       }
     }
     FT_Stream_ExitFrame( stream );
 
-    if ( FT_RENEW_ARRAY( encoding, nencoding, k ) )
-      goto Bail;
-
-    face->nencodings = k;
-    face->encodings  = encoding;
-
     return error;
 
+  Exit:
+    FT_FREE( enc->offset );
+
   Bail:
-    FT_FREE( encoding );
     return error;
   }
 
@@ -1293,9 +1312,8 @@
 
     PCF_Property  prop;
 
-    size_t  nn, len;
-    char*   strings[4] = { NULL, NULL, NULL, NULL };
-    size_t  lengths[4];
+    const char*  strings[4] = { NULL, NULL, NULL, NULL };
+    size_t       lengths[4], nn, len;
 
 
     face->style_flags = 0;
@@ -1307,8 +1325,8 @@
     {
       face->style_flags |= FT_STYLE_FLAG_ITALIC;
       strings[2] = ( *(prop->value.atom) == 'O' ||
-                     *(prop->value.atom) == 'o' ) ? (char *)"Oblique"
-                                                  : (char *)"Italic";
+                     *(prop->value.atom) == 'o' ) ? "Oblique"
+                                                  : "Italic";
     }
 
     prop = pcf_find_property( pcf, "WEIGHT_NAME" );
@@ -1316,20 +1334,20 @@
          ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) )
     {
       face->style_flags |= FT_STYLE_FLAG_BOLD;
-      strings[1] = (char*)"Bold";
+      strings[1] = "Bold";
     }
 
     prop = pcf_find_property( pcf, "SETWIDTH_NAME" );
     if ( prop && prop->isString                                        &&
          *(prop->value.atom)                                           &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[3] = (char*)( prop->value.atom );
+      strings[3] = (const char*)( prop->value.atom );
 
     prop = pcf_find_property( pcf, "ADD_STYLE_NAME" );
     if ( prop && prop->isString                                        &&
          *(prop->value.atom)                                           &&
          !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) )
-      strings[0] = (char*)( prop->value.atom );
+      strings[0] = (const char*)( prop->value.atom );
 
     for ( len = 0, nn = 0; nn < 4; nn++ )
     {
@@ -1343,7 +1361,7 @@
 
     if ( len == 0 )
     {
-      strings[0] = (char*)"Regular";
+      strings[0] = "Regular";
       lengths[0] = ft_strlen( strings[0] );
       len        = lengths[0] + 1;
     }
@@ -1359,7 +1377,7 @@
 
       for ( nn = 0; nn < 4; nn++ )
       {
-        char*  src = strings[nn];
+        const char*  src = strings[nn];
 
 
         len = lengths[nn];
diff --git a/src/pfr/Jamfile b/src/pfr/Jamfile
index cb55a7e..fbca806 100644
--- a/src/pfr/Jamfile
+++ b/src/pfr/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/pfr Jamfile
 #
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pfr/module.mk b/src/pfr/module.mk
index 27fec8e..30d876d 100644
--- a/src/pfr/module.mk
+++ b/src/pfr/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pfr/pfr.c b/src/pfr/pfr.c
index 2d34615..6d885ea 100644
--- a/src/pfr/pfr.c
+++ b/src/pfr/pfr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR driver component.
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrcmap.c b/src/pfr/pfrcmap.c
index d83dc58..bfa1b9e 100644
--- a/src/pfr/pfrcmap.c
+++ b/src/pfr/pfrcmap.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR cmap handling (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrcmap.h b/src/pfr/pfrcmap.h
index 6a43bdb..1e203a0 100644
--- a/src/pfr/pfrcmap.h
+++ b/src/pfr/pfrcmap.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR cmap handling (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrdrivr.c b/src/pfr/pfrdrivr.c
index 4b8707f..f67eebf 100644
--- a/src/pfr/pfrdrivr.c
+++ b/src/pfr/pfrdrivr.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR driver interface (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrdrivr.h b/src/pfr/pfrdrivr.h
index 6adb2fd..33b7b94 100644
--- a/src/pfr/pfrdrivr.h
+++ b/src/pfr/pfrdrivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type PFR driver interface (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrerror.h b/src/pfr/pfrerror.h
index f9fde3a..4829cfc 100644
--- a/src/pfr/pfrerror.h
+++ b/src/pfr/pfrerror.h
@@ -4,7 +4,7 @@
  *
  *   PFR error codes (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrgload.c b/src/pfr/pfrgload.c
index 06723ff..6ef5856 100644
--- a/src/pfr/pfrgload.c
+++ b/src/pfr/pfrgload.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR glyph loader (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -24,7 +24,7 @@
 #include "pfrerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pfr
+#define FT_COMPONENT  pfr
 
 
   /*************************************************************************/
diff --git a/src/pfr/pfrgload.h b/src/pfr/pfrgload.h
index 6a5de29..d0e1420 100644
--- a/src/pfr/pfrgload.h
+++ b/src/pfr/pfrgload.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR glyph loader (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrload.c b/src/pfr/pfrload.c
index e9c0099..ccf0b7e 100644
--- a/src/pfr/pfrload.c
+++ b/src/pfr/pfrload.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR loader (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -23,7 +23,7 @@
 #include "pfrerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pfr
+#define FT_COMPONENT  pfr
 
 
   /*
diff --git a/src/pfr/pfrload.h b/src/pfr/pfrload.h
index ef29973..2e7ffd0 100644
--- a/src/pfr/pfrload.h
+++ b/src/pfr/pfrload.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR loader (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrobjs.c b/src/pfr/pfrobjs.c
index e51a842..9765f95 100644
--- a/src/pfr/pfrobjs.c
+++ b/src/pfr/pfrobjs.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR object methods (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -29,7 +29,7 @@
 #include "pfrerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pfr
+#define FT_COMPONENT  pfr
 
 
   /*************************************************************************/
@@ -122,7 +122,7 @@
               stream,
               (FT_UInt)( face_index & 0xFFFF ),
               face->header.log_dir_offset,
-              FT_BOOL( face->header.phy_font_max_size_high != 0 ) );
+              FT_BOOL( face->header.phy_font_max_size_high ) );
     if ( error )
       goto Exit;
 
@@ -370,7 +370,7 @@
       FT_Bool            scaling;
 
 
-      scaling = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE ) == 0 );
+      scaling = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE ) );
 
       /* copy outline data */
       *outline = slot->glyph.loader->base.outline;
@@ -378,7 +378,7 @@
       outline->flags &= ~FT_OUTLINE_OWNER;
       outline->flags |= FT_OUTLINE_REVERSE_FILL;
 
-      if ( size && pfrsize->metrics.y_ppem < 24 )
+      if ( pfrsize->metrics.y_ppem < 24 )
         outline->flags |= FT_OUTLINE_HIGH_PRECISION;
 
       /* compute the advance vector */
diff --git a/src/pfr/pfrobjs.h b/src/pfr/pfrobjs.h
index e03573f..39cffd0 100644
--- a/src/pfr/pfrobjs.h
+++ b/src/pfr/pfrobjs.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR object methods (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrsbit.c b/src/pfr/pfrsbit.c
index f5d3077..00a9616 100644
--- a/src/pfr/pfrsbit.c
+++ b/src/pfr/pfrsbit.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR bitmap loader (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -24,7 +24,7 @@
 #include "pfrerror.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pfr
+#define FT_COMPONENT  pfr
 
 
   /*************************************************************************/
diff --git a/src/pfr/pfrsbit.h b/src/pfr/pfrsbit.h
index 7002df4..6568b90 100644
--- a/src/pfr/pfrsbit.h
+++ b/src/pfr/pfrsbit.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR bitmap loader (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/pfrtypes.h b/src/pfr/pfrtypes.h
index 794706b..6a5f9d5 100644
--- a/src/pfr/pfrtypes.h
+++ b/src/pfr/pfrtypes.h
@@ -4,7 +4,7 @@
  *
  *   FreeType PFR data structures (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pfr/rules.mk b/src/pfr/rules.mk
index 3acb795..f14ca69 100644
--- a/src/pfr/rules.mk
+++ b/src/pfr/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psaux/Jamfile b/src/psaux/Jamfile
index a231d59..30bcc1c 100644
--- a/src/psaux/Jamfile
+++ b/src/psaux/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/psaux Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psaux/afmparse.c b/src/psaux/afmparse.c
index 04c191f..f78adbb 100644
--- a/src/psaux/afmparse.c
+++ b/src/psaux/afmparse.c
@@ -4,7 +4,7 @@
  *
  *   AFM parser (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -953,7 +953,8 @@
         error = afm_parse_kern_data( parser );
         if ( error )
           goto Fail;
-        /* fall through since we only support kern data */
+        /* we only support kern data, so ... */
+        /* fall through                      */
 
       case AFM_TOKEN_ENDFONTMETRICS:
         return FT_Err_Ok;
diff --git a/src/psaux/afmparse.h b/src/psaux/afmparse.h
index 2fcc80e..2ceb775 100644
--- a/src/psaux/afmparse.h
+++ b/src/psaux/afmparse.h
@@ -4,7 +4,7 @@
  *
  *   AFM parser (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/cffdecode.c b/src/psaux/cffdecode.c
index 024eb9c..17cccf8 100644
--- a/src/psaux/cffdecode.c
+++ b/src/psaux/cffdecode.c
@@ -4,7 +4,7 @@
  *
  *   PostScript CFF (Type 2) decoding routines (body).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -35,7 +35,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cffdecode
+#define FT_COMPONENT  cffdecode
 
 
 #ifdef CFF_CONFIG_OPTION_OLD_ENGINE
@@ -235,8 +235,8 @@
       return FT_THROW( Syntax_Error );
     }
 
-    adx += decoder->builder.left_bearing.x;
-    ady += decoder->builder.left_bearing.y;
+    adx = ADD_LONG( adx, decoder->builder.left_bearing.x );
+    ady = ADD_LONG( ady, decoder->builder.left_bearing.y );
 
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
     /* Incremental fonts don't necessarily have valid charsets.        */
@@ -860,6 +860,15 @@
           case cff_op_flex1:
           case cff_op_callsubr:
           case cff_op_callgsubr:
+            /* deprecated opcodes */
+          case cff_op_dotsection:
+            /* invalid Type 1 opcodes */
+          case cff_op_hsbw:
+          case cff_op_closepath:
+          case cff_op_callothersubr:
+          case cff_op_seac:
+          case cff_op_sbw:
+          case cff_op_setcurrentpoint:
             goto MM_Error;
 
           default:
@@ -955,10 +964,10 @@
         case cff_op_hstemhm:
         case cff_op_vstemhm:
           /* the number of arguments is always even here */
-          FT_TRACE4((
-              op == cff_op_hstem   ? " hstem\n"   :
-            ( op == cff_op_vstem   ? " vstem\n"   :
-            ( op == cff_op_hstemhm ? " hstemhm\n" : " vstemhm\n" ) ) ));
+          FT_TRACE4(( "%s\n",
+              op == cff_op_hstem   ? " hstem"   :
+            ( op == cff_op_vstem   ? " vstem"   :
+            ( op == cff_op_hstemhm ? " hstemhm" : " vstemhm" ) ) ));
 
           if ( hinter )
             hinter->stems( hinter->hints,
@@ -972,7 +981,8 @@
 
         case cff_op_hintmask:
         case cff_op_cntrmask:
-          FT_TRACE4(( op == cff_op_hintmask ? " hintmask" : " cntrmask" ));
+          FT_TRACE4(( "%s", op == cff_op_hintmask ? " hintmask"
+                                                  : " cntrmask" ));
 
           /* implement vstem when needed --                        */
           /* the specification doesn't say it, but this also works */
@@ -1085,8 +1095,8 @@
             FT_Int  phase = ( op == cff_op_hlineto );
 
 
-            FT_TRACE4(( op == cff_op_hlineto ? " hlineto\n"
-                                             : " vlineto\n" ));
+            FT_TRACE4(( "%s\n", op == cff_op_hlineto ? " hlineto"
+                                                     : " vlineto" ));
 
             if ( num_args < 0 )
               goto Stack_Underflow;
@@ -1257,8 +1267,8 @@
             FT_Int  nargs;
 
 
-            FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto\n"
-                                               : " hvcurveto\n" ));
+            FT_TRACE4(( "%s\n", op == cff_op_vhcurveto ? " vhcurveto"
+                                                       : " hvcurveto" ));
 
             if ( cff_builder_start_point( builder, x, y ) )
               goto Fail;
@@ -1546,9 +1556,9 @@
             }
 
             if ( dx < 0 )
-              dx = -dx;
+              dx = NEG_LONG( dx );
             if ( dy < 0 )
-              dy = -dy;
+              dy = NEG_LONG( dy );
 
             /* strange test, but here it is... */
             horizontal = ( dx > dy );
@@ -1558,7 +1568,7 @@
               x = ADD_LONG( x, args[0] );
               y = ADD_LONG( y, args[1] );
               cff_builder_add_point( builder, x, y,
-                                     (FT_Bool)( count == 3 ) );
+                                     FT_BOOL( count == 3 ) );
               args += 2;
             }
 
@@ -1596,7 +1606,7 @@
               x = ADD_LONG( x, args[0] );
               y = ADD_LONG( y, args[1] );
               cff_builder_add_point( builder, x, y,
-                                     (FT_Bool)( count == 4 || count == 1 ) );
+                                     FT_BOOL( count == 4 || count == 1 ) );
               args += 2;
             }
 
@@ -1712,16 +1722,20 @@
           break;
 
         case cff_op_random:
-          FT_TRACE4(( " random\n" ));
+          {
+            FT_UInt32*  randval = in_dict ? &decoder->cff->top_font.random
+                                          : &decoder->current_subfont->random;
 
-          /* only use the lower 16 bits of `random'  */
-          /* to generate a number in the range (0;1] */
-          args[0] = (FT_Fixed)
-                      ( ( decoder->current_subfont->random & 0xFFFF ) + 1 );
-          args++;
 
-          decoder->current_subfont->random =
-            cff_random( decoder->current_subfont->random );
+            FT_TRACE4(( " random\n" ));
+
+            /* only use the lower 16 bits of `random'  */
+            /* to generate a number in the range (0;1] */
+            args[0] = (FT_Fixed)( ( *randval & 0xFFFF ) + 1 );
+            args++;
+
+            *randval = cff_random( *randval );
+          }
           break;
 
         case cff_op_mul:
@@ -1734,7 +1748,10 @@
         case cff_op_sqrt:
           FT_TRACE4(( " sqrt\n" ));
 
-          if ( args[0] > 0 )
+          /* without upper limit the loop below might not finish */
+          if ( args[0] > 0x7FFFFFFFL )
+            args[0] = 46341;
+          else if ( args[0] > 0 )
           {
             FT_Fixed  root = args[0];
             FT_Fixed  new_root;
@@ -1807,6 +1824,7 @@
 
             if ( idx >= 0 )
             {
+              idx = idx % count;
               while ( idx > 0 )
               {
                 FT_Fixed  tmp = args[count - 1];
@@ -1821,6 +1839,10 @@
             }
             else
             {
+              /* before C99 it is implementation-defined whether    */
+              /* the result of `%' is negative if the first operand */
+              /* is negative                                        */
+              idx = -( NEG_INT( idx ) % count );
               while ( idx < 0 )
               {
                 FT_Fixed  tmp = args[0];
@@ -1921,6 +1943,7 @@
         case cff_op_blend:
           /* this operator was removed from the Type2 specification */
           /* in version 16-March-2000                               */
+          if ( num_designs )
           {
             FT_Int  num_results = (FT_Int)( args[0] >> 16 );
 
@@ -1930,7 +1953,8 @@
             if ( num_results < 0 )
               goto Syntax_Error;
 
-            if ( num_results * (FT_Int)num_designs > num_args )
+            if ( num_results > num_args                       ||
+                 num_results * (FT_Int)num_designs > num_args )
               goto Stack_Underflow;
 
             /* since we currently don't handle interpolation of multiple */
@@ -1939,6 +1963,8 @@
             args     -= num_results * ( num_designs - 1 );
             num_args -= num_results * ( num_designs - 1 );
           }
+          else
+            goto Syntax_Error;
           break;
 
         case cff_op_dotsection:
@@ -2005,20 +2031,31 @@
           break;
 
         case cff_op_callothersubr:
-          /* this is an invalid Type 2 operator; however, there        */
-          /* exist fonts which are incorrectly converted from probably */
-          /* Type 1 to CFF, and some parsers seem to accept it         */
+          {
+            FT_Fixed  arg;
 
-          FT_TRACE4(( " callothersubr (invalid op)\n" ));
 
-          /* subsequent `pop' operands should add the arguments,       */
-          /* this is the implementation described for `unknown' other  */
-          /* subroutines in the Type1 spec.                            */
-          /*                                                           */
-          /* XXX Fix return arguments (see discussion below).          */
-          args -= 2 + ( args[-2] >> 16 );
-          if ( args < stack )
-            goto Stack_Underflow;
+            /* this is an invalid Type 2 operator; however, there      */
+            /* exist fonts which are incorrectly converted from        */
+            /* probably Type 1 to CFF, and some parsers seem to accept */
+            /* it                                                      */
+
+            FT_TRACE4(( " callothersubr (invalid op)\n" ));
+
+            /* subsequent `pop' operands should add the arguments,     */
+            /* this is the implementation described for `unknown'      */
+            /* other subroutines in the Type1 spec.                    */
+            /*                                                         */
+            /* XXX Fix return arguments (see discussion below).        */
+
+            arg = 2 + ( args[-2] >> 16 );
+            if ( arg >= CFF_MAX_OPERANDS )
+              goto Stack_Underflow;
+
+            args -= arg;
+            if ( args < stack )
+              goto Stack_Underflow;
+          }
           break;
 
         case cff_op_pop:
diff --git a/src/psaux/cffdecode.h b/src/psaux/cffdecode.h
index b4003bc..a669197 100644
--- a/src/psaux/cffdecode.h
+++ b/src/psaux/cffdecode.h
@@ -4,7 +4,7 @@
  *
  *   PostScript CFF (Type 2) decoding routines (specification).
  *
- * Copyright 2017-2018 by
+ * Copyright (C) 2017-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/module.mk b/src/psaux/module.mk
index 6584d07..bb0886a 100644
--- a/src/psaux/module.mk
+++ b/src/psaux/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psaux/psaux.c b/src/psaux/psaux.c
index 3718876..1db0462 100644
--- a/src/psaux/psaux.c
+++ b/src/psaux/psaux.c
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript driver component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/psauxerr.h b/src/psaux/psauxerr.h
index 3062ae5..523e188 100644
--- a/src/psaux/psauxerr.h
+++ b/src/psaux/psauxerr.h
@@ -4,7 +4,7 @@
  *
  *   PS auxiliary module error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/psauxmod.c b/src/psaux/psauxmod.c
index 41ce294..5df8e69 100644
--- a/src/psaux/psauxmod.c
+++ b/src/psaux/psauxmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript module implementation (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/psauxmod.h b/src/psaux/psauxmod.h
index 9d894f7..a0eda0b 100644
--- a/src/psaux/psauxmod.h
+++ b/src/psaux/psauxmod.h
@@ -4,7 +4,7 @@
  *
  *   FreeType auxiliary PostScript module implementation (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/psblues.c b/src/psaux/psblues.c
index e44f3c7..89738ce 100644
--- a/src/psaux/psblues.c
+++ b/src/psaux/psblues.c
@@ -51,7 +51,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cf2blues
+#define FT_COMPONENT  cf2blues
 
 
   /*
diff --git a/src/psaux/psconv.c b/src/psaux/psconv.c
index 74273f7..c887616 100644
--- a/src/psaux/psconv.c
+++ b/src/psaux/psconv.c
@@ -4,7 +4,7 @@
  *
  *   Some convenience conversions (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -31,7 +31,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_psconv
+#define FT_COMPONENT  psconv
 
 
   /* The following array is used by various functions to quickly convert */
diff --git a/src/psaux/psconv.h b/src/psaux/psconv.h
index 2472942..6b24bf6 100644
--- a/src/psaux/psconv.h
+++ b/src/psaux/psconv.h
@@ -4,7 +4,7 @@
  *
  *   Some convenience conversions (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/psfixed.h b/src/psaux/psfixed.h
index fd3460f..7dff9ef 100644
--- a/src/psaux/psfixed.h
+++ b/src/psaux/psfixed.h
@@ -72,8 +72,7 @@
 #define cf2_fixedFraction( x )                                           \
           ( (x) - cf2_fixedFloor( x ) )
 #define cf2_fracToFixed( x )                                             \
-          ( (x) < 0 ? -( ( -(x) + 0x2000 ) >> 14 )                       \
-                    :  ( (  (x) + 0x2000 ) >> 14 ) )
+          ( ( (x) + 0x2000 - ( (x) < 0 ) ) >> 14 )
 
 
   /* signed numeric types */
diff --git a/src/psaux/psfont.c b/src/psaux/psfont.c
index a7e743d..00e4210 100644
--- a/src/psaux/psfont.c
+++ b/src/psaux/psfont.c
@@ -274,9 +274,6 @@
 
     if ( !font->isT1 )
     {
-      FT_Service_CFFLoad  cffload = (FT_Service_CFFLoad)font->cffload;
-
-
       /* check for variation vectors */
       vstore        = cf2_getVStore( decoder );
       hasVariations = ( vstore->dataCount != 0 );
@@ -284,6 +281,9 @@
       if ( hasVariations )
       {
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+        FT_Service_CFFLoad  cffload = (FT_Service_CFFLoad)font->cffload;
+
+
         /* check whether Private DICT in this subfont needs to be reparsed */
         font->error = cf2_getNormalizedVector( decoder,
                                                &lenNormalizedV,
@@ -331,7 +331,7 @@
     }
 
     /* copy hinted flag on each call */
-    font->hinted = (FT_Bool)( font->renderingFlags & CF2_FlagsHinted );
+    font->hinted = FT_BOOL( font->renderingFlags & CF2_FlagsHinted );
 
     /* determine if transform has changed;       */
     /* include Fontmatrix but ignore translation */
@@ -366,7 +366,7 @@
     if ( font->stemDarkened != ( font->renderingFlags & CF2_FlagsDarkened ) )
     {
       font->stemDarkened =
-        (FT_Bool)( font->renderingFlags & CF2_FlagsDarkened );
+        FT_BOOL( font->renderingFlags & CF2_FlagsDarkened );
 
       /* blue zones depend on darkened flag */
       needExtraSetup = TRUE;
diff --git a/src/psaux/pshints.c b/src/psaux/pshints.c
index 4560fb8..1cbecd2 100644
--- a/src/psaux/pshints.c
+++ b/src/psaux/pshints.c
@@ -52,7 +52,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cf2hints
+#define FT_COMPONENT  cf2hints
 
 
   typedef struct  CF2_HintMoveRec_
@@ -217,52 +217,49 @@
   FT_LOCAL_DEF( FT_Bool )
   cf2_hint_isValid( const CF2_Hint  hint )
   {
-    return (FT_Bool)( hint->flags != 0 );
+    return FT_BOOL( hint->flags );
   }
 
 
   static FT_Bool
   cf2_hint_isPair( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags                      &
-                        ( CF2_PairBottom | CF2_PairTop ) ) != 0 );
+    return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_PairTop ) );
   }
 
 
   static FT_Bool
   cf2_hint_isPairTop( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags & CF2_PairTop ) != 0 );
+    return FT_BOOL( hint->flags & CF2_PairTop );
   }
 
 
   FT_LOCAL_DEF( FT_Bool )
   cf2_hint_isTop( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags                    &
-                        ( CF2_PairTop | CF2_GhostTop ) ) != 0 );
+    return FT_BOOL( hint->flags & ( CF2_PairTop | CF2_GhostTop ) );
   }
 
 
   FT_LOCAL_DEF( FT_Bool )
   cf2_hint_isBottom( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags                          &
-                        ( CF2_PairBottom | CF2_GhostBottom ) ) != 0 );
+    return FT_BOOL( hint->flags & ( CF2_PairBottom | CF2_GhostBottom ) );
   }
 
 
   static FT_Bool
   cf2_hint_isLocked( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags & CF2_Locked ) != 0 );
+    return FT_BOOL( hint->flags & CF2_Locked );
   }
 
 
   static FT_Bool
   cf2_hint_isSynthetic( const CF2_Hint  hint )
   {
-    return (FT_Bool)( ( hint->flags & CF2_Synthetic ) != 0 );
+    return FT_BOOL( hint->flags & CF2_Synthetic );
   }
 
 
@@ -334,7 +331,7 @@
   cf2_hintmap_map( CF2_HintMap  hintmap,
                    CF2_Fixed    csCoord )
   {
-    if ( hintmap->count == 0 || ! hintmap->hinted )
+    if ( hintmap->count == 0 || !hintmap->hinted )
     {
       /* there are no hints; use uniform scale and zero offset */
       return FT_MulFix( csCoord, hintmap->scale );
@@ -497,7 +494,7 @@
           {
             move     = moveDown;
             /* true if non-optimum move */
-            saveEdge = (FT_Bool)( moveUp < -moveDown );
+            saveEdge = FT_BOOL( moveUp < -moveDown );
           }
           else
           {
@@ -1025,10 +1022,10 @@
       }
     }
 
-    FT_TRACE6(( initialMap ? "flags: [p]air [g]host [t]op "
-                             "[b]ottom [L]ocked [S]ynthetic\n"
-                             "Initial hintmap\n"
-                           : "Hints:\n" ));
+    FT_TRACE6(( "%s\n", initialMap ? "flags: [p]air [g]host [t]op"
+                                     " [b]ottom [L]ocked [S]ynthetic\n"
+                                     "Initial hintmap"
+                                   : "Hints:" ));
     cf2_hintmap_dump( hintmap );
 
     /*
@@ -1215,7 +1212,7 @@
      * (`u').
      *
      * See notation in
-     * http://softsurfer.com/Archive/algorithm_0104/algorithm_0104B.htm.
+     * http://geomalgorithms.com/a05-_intersect-1.html.
      * Calculations are done in 16.16, but must handle the squaring of
      * line lengths in character space.  We scale all vectors by 1/32 to
      * avoid overflow.  This allows values up to 4095 to be squared.  The
diff --git a/src/psaux/psintrp.c b/src/psaux/psintrp.c
index 145b672..e2f3acc 100644
--- a/src/psaux/psintrp.c
+++ b/src/psaux/psintrp.c
@@ -59,7 +59,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_cf2interp
+#define FT_COMPONENT  cf2interp
 
 
   FT_LOCAL_DEF( void )
@@ -287,7 +287,7 @@
   {
     CF2_UInt  i;
     CF2_UInt  count       = cf2_stack_count( opStack );
-    FT_Bool   hasWidthArg = (FT_Bool)( count & 1 );
+    FT_Bool   hasWidthArg = FT_BOOL( count & 1 );
 
     /* variable accumulates delta values from operand stack */
     CF2_Fixed  position = hintOffset;
@@ -364,7 +364,7 @@
 
     if ( doConditionalLastRead )
     {
-      FT_Bool    lastIsX = (FT_Bool)(
+      FT_Bool    lastIsX = FT_BOOL(
                              cf2_fixedAbs( SUB_INT32( vals[10], *curX ) ) >
                              cf2_fixedAbs( SUB_INT32( vals[11], *curY ) ) );
       CF2_Fixed  lastVal = cf2_stack_getReal( opStack, idx );
@@ -612,14 +612,14 @@
     cf2_arrstack_setCount( &subrStack, CF2_MAX_SUBR + 1 );
 
     charstring  = (CF2_Buffer)cf2_arrstack_getBuffer( &subrStack );
-    *charstring = *buf;    /* structure copy */
-
-    charstringIndex = 0;       /* entry is valid now */
 
     /* catch errors so far */
     if ( *error )
       goto exit;
 
+    *charstring     = *buf;    /* structure copy     */
+    charstringIndex = 0;       /* entry is valid now */
+
     /* main interpreter loop */
     while ( 1 )
     {
@@ -776,7 +776,8 @@
 
       case cf2_cmdHSTEMHM:
       case cf2_cmdHSTEM:
-        FT_TRACE4(( op1 == cf2_cmdHSTEMHM ? " hstemhm\n" : " hstem\n" ));
+        FT_TRACE4(( "%s\n", op1 == cf2_cmdHSTEMHM ? " hstemhm"
+                                                  : " hstem" ));
 
         if ( !font->isT1 )
         {
@@ -806,7 +807,8 @@
 
       case cf2_cmdVSTEMHM:
       case cf2_cmdVSTEM:
-        FT_TRACE4(( op1 == cf2_cmdVSTEMHM ? " vstemhm\n" : " vstem\n" ));
+        FT_TRACE4(( "%s\n", op1 == cf2_cmdVSTEMHM ? " vstemhm"
+                                                  : " vstem" ));
 
         if ( !font->isT1 )
         {
@@ -889,7 +891,7 @@
           FT_Bool  isX = FT_BOOL( op1 == cf2_cmdHLINETO );
 
 
-          FT_TRACE4(( isX ? " hlineto\n" : " vlineto\n" ));
+          FT_TRACE4(( "%s\n", isX ? " hlineto" : " vlineto" ));
 
           for ( idx = 0; idx < count; idx++ )
           {
@@ -917,8 +919,8 @@
           CF2_UInt  idx   = 0;
 
 
-          FT_TRACE4(( op1 == cf2_cmdRCURVELINE ? " rcurveline\n"
-                                               : " rrcurveto\n" ));
+          FT_TRACE4(( "%s\n", op1 == cf2_cmdRCURVELINE ? " rcurveline"
+                                                       : " rrcurveto" ));
 
           while ( idx + 6 <= count )
           {
@@ -958,10 +960,10 @@
           FT_TRACE4(( " unknown op (%d)\n", op1 ));
         else
         {
-          FT_TRACE4(( " closepath" ));
+          FT_TRACE4(( " closepath\n" ));
 
           /* if there is no path, `closepath' is a no-op */
-          ps_builder_close_contour( &decoder->builder );
+          cf2_glyphpath_closeOpenPath( &glyphPath );
 
           haveWidth = TRUE;
         }
@@ -973,8 +975,8 @@
           CF2_Int  subrNum;
 
 
-          FT_TRACE4(( op1 == cf2_cmdCALLGSUBR ? " callgsubr"
-                                              : " callsubr" ));
+          FT_TRACE4(( "%s", op1 == cf2_cmdCALLGSUBR ? " callgsubr"
+                                                    : " callsubr" ));
 
           if ( ( !font->isT1 && charstringIndex > CF2_MAX_SUBR )       ||
                (  font->isT1 && charstringIndex > T1_MAX_SUBRS_CALLS ) )
@@ -1213,8 +1215,8 @@
                       FT_Bool  isV = FT_BOOL( op2 == cf2_escVSTEM3 );
 
 
-                      FT_TRACE4(( isV ? " vstem3\n"
-                                      : " hstem3\n" ));
+                      FT_TRACE4(( "%s\n", isV ? " vstem3"
+                                              : " hstem3" ));
 
                       FT_ASSERT( cf2_stack_count( opStack ) == 6 );
 
@@ -2418,7 +2420,7 @@
           PS_Builder*  builder;
 
 
-          FT_TRACE4(( " hsbw" ));
+          FT_TRACE4(( " hsbw\n" ));
 
           builder = &decoder->builder;
 
@@ -2564,7 +2566,7 @@
       case cf2_cmdHINTMASK:
         /* the final \n in the tracing message gets added in      */
         /* `cf2_hintmask_read' (which also traces the mask bytes) */
-        FT_TRACE4(( op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
+        FT_TRACE4(( "%s", op1 == cf2_cmdCNTRMASK ? " cntrmask" : " hintmask" ));
 
         /* never add hints after the mask is computed */
         if ( cf2_stack_count( opStack ) > 1    &&
@@ -2830,7 +2832,7 @@
           count = count1 & ~2U;
           idx  += count1 - count;
 
-          FT_TRACE4(( alternate ? " hvcurveto\n" : " vhcurveto\n" ));
+          FT_TRACE4(( "%s\n", alternate ? " hvcurveto" : " vhcurveto" ));
 
           while ( idx < count )
           {
diff --git a/src/psaux/psobjs.c b/src/psaux/psobjs.c
index 36ee663..8bfdb92 100644
--- a/src/psaux/psobjs.c
+++ b/src/psaux/psobjs.c
@@ -4,7 +4,7 @@
  *
  *   Auxiliary functions for PostScript fonts (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_psobjs
+#define FT_COMPONENT  psobjs
 
 
   /*************************************************************************/
@@ -174,10 +174,10 @@
    *   reallocation fails.
    */
   FT_LOCAL_DEF( FT_Error )
-  ps_table_add( PS_Table  table,
-                FT_Int    idx,
-                void*     object,
-                FT_UInt   length )
+  ps_table_add( PS_Table     table,
+                FT_Int       idx,
+                const void*  object,
+                FT_UInt      length )
   {
     if ( idx < 0 || idx >= table->max_elems )
     {
@@ -1447,6 +1447,8 @@
                                           bytes,
                                           max_bytes );
 
+    parser->cursor = cur;
+
     if ( delimiters )
     {
       if ( cur < parser->limit && *cur != '>' )
@@ -1456,11 +1458,9 @@
         goto Exit;
       }
 
-      cur++;
+      parser->cursor++;
     }
 
-    parser->cursor = cur;
-
   Exit:
     return error;
   }
@@ -2042,6 +2042,14 @@
     first = outline->n_contours <= 1
             ? 0 : outline->contours[outline->n_contours - 2] + 1;
 
+    /* in malformed fonts it can happen that a contour was started */
+    /* but no points were added                                    */
+    if ( outline->n_contours && first == outline->n_points )
+    {
+      outline->n_contours--;
+      return;
+    }
+
     /* We must not include the last point in the path if it */
     /* is located on the first point.                       */
     if ( outline->n_points > 1 )
diff --git a/src/psaux/psobjs.h b/src/psaux/psobjs.h
index 6184193..c44dc45 100644
--- a/src/psaux/psobjs.h
+++ b/src/psaux/psobjs.h
@@ -4,7 +4,7 @@
  *
  *   Auxiliary functions for PostScript fonts (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,10 +53,10 @@
                 FT_Memory  memory );
 
   FT_LOCAL( FT_Error )
-  ps_table_add( PS_Table  table,
-                FT_Int    idx,
-                void*     object,
-                FT_UInt   length );
+  ps_table_add( PS_Table     table,
+                FT_Int       idx,
+                const void*  object,
+                FT_UInt      length );
 
   FT_LOCAL( void )
   ps_table_done( PS_Table  table );
diff --git a/src/psaux/psread.c b/src/psaux/psread.c
index 6f3a361..86bfc03 100644
--- a/src/psaux/psread.c
+++ b/src/psaux/psread.c
@@ -105,7 +105,7 @@
   FT_LOCAL_DEF( FT_Bool )
   cf2_buf_isEnd( CF2_Buffer  buf )
   {
-    return (FT_Bool)( buf->ptr >= buf->end );
+    return FT_BOOL( buf->ptr >= buf->end );
   }
 
 
diff --git a/src/psaux/psstack.c b/src/psaux/psstack.c
index d49cf25..6659068 100644
--- a/src/psaux/psstack.c
+++ b/src/psaux/psstack.c
@@ -258,6 +258,9 @@
       return;
     }
 
+    /* before C99 it is implementation-defined whether    */
+    /* the result of `%' is negative if the first operand */
+    /* is negative                                        */
     if ( shift < 0 )
       shift = -( ( -shift ) % count );
     else
diff --git a/src/psaux/rules.mk b/src/psaux/rules.mk
index a87bfe9..2de734d 100644
--- a/src/psaux/rules.mk
+++ b/src/psaux/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psaux/t1cmap.c b/src/psaux/t1cmap.c
index 0c9f916..d62d2d5 100644
--- a/src/psaux/t1cmap.c
+++ b/src/psaux/t1cmap.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 character map support (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -305,6 +305,9 @@
     FT_UNUSED( pointer );
 
 
+    if ( !psnames->unicodes_init )
+      return FT_THROW( Unimplemented_Feature );
+
     return psnames->unicodes_init( memory,
                                    unicodes,
                                    (FT_UInt)face->type1.num_glyphs,
diff --git a/src/psaux/t1cmap.h b/src/psaux/t1cmap.h
index 277419f..d325e7b 100644
--- a/src/psaux/t1cmap.h
+++ b/src/psaux/t1cmap.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 character map support (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psaux/t1decode.c b/src/psaux/t1decode.c
index 6745603..c2b3729 100644
--- a/src/psaux/t1decode.c
+++ b/src/psaux/t1decode.c
@@ -4,7 +4,7 @@
  *
  *   PostScript Type 1 decoding routines (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1decode
+#define FT_COMPONENT  t1decode
 
 
   typedef enum  T1_Operator_
@@ -1957,7 +1957,7 @@
   {
     FT_ZERO( decoder );
 
-    /* retrieve PSNames interface from list of current modules */
+    /* retrieve `psnames' interface from list of current modules */
     {
       FT_Service_PsCMaps  psnames;
 
diff --git a/src/psaux/t1decode.h b/src/psaux/t1decode.h
index 62956ac..1b5d626 100644
--- a/src/psaux/t1decode.h
+++ b/src/psaux/t1decode.h
@@ -4,7 +4,7 @@
  *
  *   PostScript Type 1 decoding routines (specification).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/Jamfile b/src/pshinter/Jamfile
index 3f5f0ae..0e44c19 100644
--- a/src/pshinter/Jamfile
+++ b/src/pshinter/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/pshinter Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pshinter/module.mk b/src/pshinter/module.mk
index 06707be..0a12a26 100644
--- a/src/pshinter/module.mk
+++ b/src/pshinter/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/pshinter/pshalgo.c b/src/pshinter/pshalgo.c
index 925b3d6..0c5ae62 100644
--- a/src/pshinter/pshalgo.c
+++ b/src/pshinter/pshalgo.c
@@ -4,7 +4,7 @@
  *
  *   PostScript hinting algorithm (body).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -26,7 +26,7 @@
 
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pshalgo
+#define FT_COMPONENT  pshalgo
 
 
 #ifdef DEBUG_HINTER
@@ -53,8 +53,8 @@
   psh_hint_overlap( PSH_Hint  hint1,
                     PSH_Hint  hint2 )
   {
-    return hint1->org_pos + hint1->org_len >= hint2->org_pos &&
-           hint2->org_pos + hint2->org_len >= hint1->org_pos;
+    return ADD_INT( hint1->org_pos, hint1->org_len ) >= hint2->org_pos &&
+           ADD_INT( hint2->org_pos, hint2->org_len ) >= hint1->org_pos;
   }
 
 
@@ -479,7 +479,7 @@
 
       if ( dimension == 1 )
         psh_blues_snap_stem( &globals->blues,
-                             hint->org_pos + hint->org_len,
+                             ADD_INT( hint->org_pos, hint->org_len ),
                              hint->org_pos,
                              &align );
 
@@ -703,7 +703,7 @@
 
       if ( dimension == 1 )
         psh_blues_snap_stem( &globals->blues,
-                             hint->org_pos + hint->org_len,
+                             ADD_INT( hint->org_pos, hint->org_len ),
                              hint->org_pos,
                              &align );
 
@@ -1538,8 +1538,8 @@
             PSH_Hint  hint = sort[nn];
 
 
-            if ( org_u >= hint->org_pos                 &&
-                org_u <= hint->org_pos + hint->org_len )
+            if ( org_u >=          hint->org_pos                  &&
+                 org_u <= ADD_INT( hint->org_pos, hint->org_len ) )
             {
               point->hint = hint;
               break;
diff --git a/src/pshinter/pshalgo.h b/src/pshinter/pshalgo.h
index f27e668..6859e95 100644
--- a/src/pshinter/pshalgo.h
+++ b/src/pshinter/pshalgo.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinting algorithm (specification).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshglob.c b/src/pshinter/pshglob.c
index f6859cd..b021e6e 100644
--- a/src/pshinter/pshglob.c
+++ b/src/pshinter/pshglob.c
@@ -5,7 +5,7 @@
  *   PostScript hinter global hinting management (body).
  *   Inspired by the new auto-hinter module.
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
@@ -20,6 +20,7 @@
 #include <ft2build.h>
 #include FT_FREETYPE_H
 #include FT_INTERNAL_OBJECTS_H
+#include FT_INTERNAL_CALC_H
 #include "pshglob.h"
 
 #ifdef DEBUG_HINTER
@@ -568,7 +569,7 @@
 
     for ( ; count > 0; count--, zone++ )
     {
-      delta = stem_top - zone->org_bottom;
+      delta = SUB_LONG( stem_top, zone->org_bottom );
       if ( delta < -blues->blue_fuzz )
         break;
 
@@ -590,7 +591,7 @@
 
     for ( ; count > 0; count--, zone-- )
     {
-      delta = zone->org_top - stem_bot;
+      delta = SUB_LONG( zone->org_top, stem_bot );
       if ( delta < -blues->blue_fuzz )
         break;
 
diff --git a/src/pshinter/pshglob.h b/src/pshinter/pshglob.h
index c3aa0ae..0049d4c 100644
--- a/src/pshinter/pshglob.h
+++ b/src/pshinter/pshglob.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinter global hinting management.
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshinter.c b/src/pshinter/pshinter.c
index fd703d6..16c3a0a 100644
--- a/src/pshinter/pshinter.c
+++ b/src/pshinter/pshinter.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript Hinting module
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshmod.c b/src/pshinter/pshmod.c
index e040d60..2d36ea2 100644
--- a/src/pshinter/pshmod.c
+++ b/src/pshinter/pshmod.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript hinter module implementation (body).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshmod.h b/src/pshinter/pshmod.h
index 368740c..ea87713 100644
--- a/src/pshinter/pshmod.h
+++ b/src/pshinter/pshmod.h
@@ -4,7 +4,7 @@
  *
  *   PostScript hinter module interface (specification).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshnterr.h b/src/pshinter/pshnterr.h
index 60814e1..fb9dbca 100644
--- a/src/pshinter/pshnterr.h
+++ b/src/pshinter/pshnterr.h
@@ -4,7 +4,7 @@
  *
  *   PS Hinter error codes (specification only).
  *
- * Copyright 2003-2018 by
+ * Copyright (C) 2003-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/pshrec.c b/src/pshinter/pshrec.c
index 50d66ca..9dd09ef 100644
--- a/src/pshinter/pshrec.c
+++ b/src/pshinter/pshrec.c
@@ -4,7 +4,7 @@
  *
  *   FreeType PostScript hints recorder (body).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -28,7 +28,7 @@
 #include "pshnterr.h"
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_pshrec
+#define FT_COMPONENT  pshrec
 
 #ifdef DEBUG_HINTER
   PS_Hints  ps_debug_hints         = NULL;
@@ -666,7 +666,7 @@
       if ( len == -21 )
       {
         flags |= PS_HINT_FLAG_BOTTOM;
-        pos   += len;
+        pos    = ADD_INT( pos, len );
       }
       len = 0;
     }
@@ -1187,7 +1187,7 @@
       /* compute integer stem positions in font units */
       for ( n = 0; n < count * 2; n++ )
       {
-        y       += coords[n];
+        y        = ADD_LONG( y, coords[n] );
         stems[n] = FIXED_TO_INT( y );
       }
 
diff --git a/src/pshinter/pshrec.h b/src/pshinter/pshrec.h
index 56c0f99..02cc210 100644
--- a/src/pshinter/pshrec.h
+++ b/src/pshinter/pshrec.h
@@ -4,7 +4,7 @@
  *
  *   Postscript (Type1/Type2) hints recorder (specification).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/pshinter/rules.mk b/src/pshinter/rules.mk
index 0e2fb8d..58227d1 100644
--- a/src/pshinter/rules.mk
+++ b/src/pshinter/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psnames/Jamfile b/src/psnames/Jamfile
index a0fd373..75978a8 100644
--- a/src/psnames/Jamfile
+++ b/src/psnames/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/psnames Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psnames/module.mk b/src/psnames/module.mk
index 410f48a..0806a31 100644
--- a/src/psnames/module.mk
+++ b/src/psnames/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/psnames/psmodule.c b/src/psnames/psmodule.c
index 719e94d..0ec440e 100644
--- a/src/psnames/psmodule.c
+++ b/src/psnames/psmodule.c
@@ -2,9 +2,9 @@
  *
  * psmodule.c
  *
- *   PSNames module implementation (body).
+ *   psnames module implementation (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psnames/psmodule.h b/src/psnames/psmodule.h
index 8b026ee..0df9a7d 100644
--- a/src/psnames/psmodule.h
+++ b/src/psnames/psmodule.h
@@ -2,9 +2,9 @@
  *
  * psmodule.h
  *
- *   High-level PSNames module interface (specification).
+ *   High-level psnames module interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psnames/psnamerr.h b/src/psnames/psnamerr.h
index af89157..67ab176 100644
--- a/src/psnames/psnamerr.h
+++ b/src/psnames/psnamerr.h
@@ -4,7 +4,7 @@
  *
  *   PS names module error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psnames/psnames.c b/src/psnames/psnames.c
index bfa5b85..4722f98 100644
--- a/src/psnames/psnames.c
+++ b/src/psnames/psnames.c
@@ -2,9 +2,9 @@
  *
  * psnames.c
  *
- *   FreeType PSNames module component (body only).
+ *   FreeType psnames module component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psnames/pstables.h b/src/psnames/pstables.h
index e574122..c0139bb 100644
--- a/src/psnames/pstables.h
+++ b/src/psnames/pstables.h
@@ -4,7 +4,7 @@
  *
  *   PostScript glyph names.
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk
index 46ec5df..dcc203e 100644
--- a/src/psnames/rules.mk
+++ b/src/psnames/rules.mk
@@ -1,9 +1,9 @@
 #
-# FreeType 2 PSNames driver configuration rules
+# FreeType 2 psnames driver configuration rules
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -13,7 +13,7 @@
 # fully.
 
 
-# PSNames driver directory
+# psnames driver directory
 #
 PSNAMES_DIR := $(SRC_DIR)/psnames
 
@@ -26,19 +26,19 @@
                          $(FT_CFLAGS)
 
 
-# PSNames driver sources (i.e., C files)
+# psnames driver sources (i.e., C files)
 #
 PSNAMES_DRV_SRC := $(PSNAMES_DIR)/psmodule.c
 
 
-# PSNames driver headers
+# psnames driver headers
 #
 PSNAMES_DRV_H := $(PSNAMES_DRV_SRC:%.c=%.h) \
                  $(PSNAMES_DIR)/psnamerr.h  \
                  $(PSNAMES_DIR)/pstables.h
 
 
-# PSNames driver object(s)
+# psnames driver object(s)
 #
 #   PSNAMES_DRV_OBJ_M is used during `multi' builds
 #   PSNAMES_DRV_OBJ_S is used during `single' builds
@@ -46,19 +46,19 @@
 PSNAMES_DRV_OBJ_M := $(PSNAMES_DRV_SRC:$(PSNAMES_DIR)/%.c=$(OBJ_DIR)/%.$O)
 PSNAMES_DRV_OBJ_S := $(OBJ_DIR)/psnames.$O
 
-# PSNames driver source file for single build
+# psnames driver source file for single build
 #
 PSNAMES_DRV_SRC_S := $(PSNAMES_DIR)/psnames.c
 
 
-# PSNames driver - single object
+# psnames driver - single object
 #
 $(PSNAMES_DRV_OBJ_S): $(PSNAMES_DRV_SRC_S) $(PSNAMES_DRV_SRC) \
                       $(FREETYPE_H) $(PSNAMES_DRV_H)
 	$(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PSNAMES_DRV_SRC_S))
 
 
-# PSNames driver - multiple objects
+# psnames driver - multiple objects
 #
 $(OBJ_DIR)/%.$O: $(PSNAMES_DIR)/%.c $(FREETYPE_H) $(PSNAMES_DRV_H)
 	$(PSNAMES_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)
diff --git a/src/raster/Jamfile b/src/raster/Jamfile
index 838e7ef..3990c05 100644
--- a/src/raster/Jamfile
+++ b/src/raster/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/raster Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/raster/ftmisc.h b/src/raster/ftmisc.h
index 97db371..a246569 100644
--- a/src/raster/ftmisc.h
+++ b/src/raster/ftmisc.h
@@ -5,7 +5,7 @@
  *   Miscellaneous macros for stand-alone rasterizer (specification
  *   only).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
diff --git a/src/raster/ftraster.c b/src/raster/ftraster.c
index 8a583ea..023b6c1 100644
--- a/src/raster/ftraster.c
+++ b/src/raster/ftraster.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -99,7 +99,7 @@
    *   built from the bottom of the render pool, used as a stack.  The
    *   following graphics shows the profile list under construction:
    *
-   *     __________________________________________________________ _ _
+   *    __________________________________________________________ _ _
    *   |         |                 |         |                 |
    *   | profile | coordinates for | profile | coordinates for |-->
    *   |    1    |  profile 1      |    2    |  profile 2      |-->
@@ -125,8 +125,8 @@
    *
    *     _ _ _______________________________________
    *                           |                    |
-   *                         <--| sorted list of     |
-   *                         <--|  extrema scanlines |
+   *                        <--| sorted list of     |
+   *                        <--|  extrema scanlines |
    *     _ _ __________________|____________________|
    *
    *                           ^                    ^
@@ -169,7 +169,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_raster
+#define FT_COMPONENT  raster
 
 
 #ifdef STANDALONE_
@@ -399,7 +399,7 @@
 
 
 #define RAS_ARGS       /* void */
-#define RAS_ARG        /* void */
+#define RAS_ARG        void
 
 #define RAS_VARS       /* void */
 #define RAS_VAR        /* void */
@@ -546,8 +546,7 @@
 
 #ifdef FT_STATIC_RASTER
 
-  static black_TWorker  cur_ras;
-#define ras  cur_ras
+  static black_TWorker  ras;
 
 #else /* !FT_STATIC_RASTER */
 
@@ -661,7 +660,6 @@
       return FAILURE;
     }
 
-    ras.cProfile->flags  = 0;
     ras.cProfile->start  = 0;
     ras.cProfile->height = 0;
     ras.cProfile->offset = ras.top;
@@ -914,16 +912,18 @@
 
 
     base[4].x = base[2].x;
-    b = base[1].x;
-    a = base[3].x = ( base[2].x + b ) / 2;
-    b = base[1].x = ( base[0].x + b ) / 2;
-    base[2].x = ( a + b ) / 2;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    base[3].x = b >> 1;
+    base[2].x = ( a + b ) >> 2;
+    base[1].x = a >> 1;
 
     base[4].y = base[2].y;
-    b = base[1].y;
-    a = base[3].y = ( base[2].y + b ) / 2;
-    b = base[1].y = ( base[0].y + b ) / 2;
-    base[2].y = ( a + b ) / 2;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    base[3].y = b >> 1;
+    base[2].y = ( a + b ) >> 2;
+    base[1].y = a >> 1;
 
     /* hand optimized.  gcc doesn't seem to be too good at common      */
     /* expression substitution and instruction scheduling ;-)          */
@@ -947,28 +947,32 @@
   static void
   Split_Cubic( TPoint*  base )
   {
-    Long  a, b, c, d;
+    Long  a, b, c;
 
 
     base[6].x = base[3].x;
-    c = base[1].x;
-    d = base[2].x;
-    base[1].x = a = ( base[0].x + c + 1 ) >> 1;
-    base[5].x = b = ( base[3].x + d + 1 ) >> 1;
-    c = ( c + d + 1 ) >> 1;
-    base[2].x = a = ( a + c + 1 ) >> 1;
-    base[4].x = b = ( b + c + 1 ) >> 1;
-    base[3].x = ( a + b + 1 ) >> 1;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    c = base[2].x + base[3].x;
+    base[5].x = c >> 1;
+    c += b;
+    base[4].x = c >> 2;
+    base[1].x = a >> 1;
+    a += b;
+    base[2].x = a >> 2;
+    base[3].x = ( a + c ) >> 3;
 
     base[6].y = base[3].y;
-    c = base[1].y;
-    d = base[2].y;
-    base[1].y = a = ( base[0].y + c + 1 ) >> 1;
-    base[5].y = b = ( base[3].y + d + 1 ) >> 1;
-    c = ( c + d + 1 ) >> 1;
-    base[2].y = a = ( a + c + 1 ) >> 1;
-    base[4].y = b = ( b + c + 1 ) >> 1;
-    base[3].y = ( a + b + 1 ) >> 1;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    c = base[2].y + base[3].y;
+    base[5].y = c >> 1;
+    c += b;
+    base[4].y = c >> 2;
+    base[1].y = a >> 1;
+    a += b;
+    base[2].y = a >> 2;
+    base[3].y = ( a + c ) >> 3;
   }
 
 
@@ -2246,13 +2250,18 @@
 
     /* Drop-out control */
 
-    e1 = TRUNC( CEILING( x1 ) );
+    e1 = CEILING( x1 );
+    e2 = FLOOR( x2 );
 
+    /* take care of the special case where both the left */
+    /* and right contour lie exactly on pixel centers    */
     if ( dropOutControl != 2                             &&
-         x2 - x1 - ras.precision <= ras.precision_jitter )
+         x2 - x1 - ras.precision <= ras.precision_jitter &&
+         e1 != x1 && e2 != x2                            )
       e2 = e1;
-    else
-      e2 = TRUNC( FLOOR( x2 ) );
+
+    e1 = TRUNC( e1 );
+    e2 = TRUNC( e2 );
 
     if ( e2 >= 0 && e1 < ras.bWidth )
     {
@@ -2779,7 +2788,7 @@
         P_Left  = draw_left;
         P_Right = draw_right;
 
-        while ( P_Left )
+        while ( P_Left && P_Right )
         {
           x1 = P_Left ->X;
           x2 = P_Right->X;
@@ -2880,7 +2889,7 @@
     P_Left  = draw_left;
     P_Right = draw_right;
 
-    while ( P_Left )
+    while ( P_Left && P_Right )
     {
       if ( P_Left->countL )
       {
@@ -3252,7 +3261,9 @@
     const FT_Outline*  outline    = (const FT_Outline*)params->source;
     const FT_Bitmap*   target_map = params->target;
 
+#ifndef FT_STATIC_RASTER
     black_TWorker  worker[1];
+#endif
 
     Long  buffer[FT_MAX_BLACK_POOL];
 
@@ -3294,8 +3305,8 @@
     ras.outline = *outline;
     ras.target  = *target_map;
 
-    worker->buff     = buffer;
-    worker->sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
+    ras.buff     = buffer;
+    ras.sizeBuff = (&buffer)[1]; /* Points to right after buffer. */
 
     return Render_Glyph( RAS_VAR );
   }
diff --git a/src/raster/ftraster.h b/src/raster/ftraster.h
index 3f13793..50d3420 100644
--- a/src/raster/ftraster.h
+++ b/src/raster/ftraster.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used
diff --git a/src/raster/ftrend1.c b/src/raster/ftrend1.c
index e8ea9cb..62c7271 100644
--- a/src/raster/ftrend1.c
+++ b/src/raster/ftrend1.c
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer interface (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -127,12 +127,8 @@
       slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
     }
 
-    ft_glyphslot_preset_bitmap( slot, mode, origin );
-
-    if ( bitmap->width > 0x7FFF || bitmap->rows > 0x7FFF )
+    if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) )
     {
-      FT_ERROR(( "ft_raster1_render: glyph is too large: %u x %u\n",
-                 bitmap->width, bitmap->rows ));
       error = FT_THROW( Raster_Overflow );
       goto Exit;
     }
diff --git a/src/raster/ftrend1.h b/src/raster/ftrend1.h
index 05be54f..82ecac6 100644
--- a/src/raster/ftrend1.h
+++ b/src/raster/ftrend1.h
@@ -4,7 +4,7 @@
  *
  *   The FreeType glyph rasterizer interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/raster/module.mk b/src/raster/module.mk
index b115f41..0a6d4b0 100644
--- a/src/raster/module.mk
+++ b/src/raster/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/raster/raster.c b/src/raster/raster.c
index ffd8994..e3ac9e5 100644
--- a/src/raster/raster.c
+++ b/src/raster/raster.c
@@ -4,7 +4,7 @@
  *
  *   FreeType monochrome rasterer module component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/raster/rasterrs.h b/src/raster/rasterrs.h
index ab242ac..7266407 100644
--- a/src/raster/rasterrs.h
+++ b/src/raster/rasterrs.h
@@ -4,7 +4,7 @@
  *
  *   monochrome renderer error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/raster/rules.mk b/src/raster/rules.mk
index 444d0ad..7664671 100644
--- a/src/raster/rules.mk
+++ b/src/raster/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/Jamfile b/src/sfnt/Jamfile
index 635aa60..f646b35 100644
--- a/src/sfnt/Jamfile
+++ b/src/sfnt/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/sfnt Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/module.mk b/src/sfnt/module.mk
index 51ca67e..8c3b44f 100644
--- a/src/sfnt/module.mk
+++ b/src/sfnt/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c
index 0674bda..ca85d97 100644
--- a/src/sfnt/pngshim.c
+++ b/src/sfnt/pngshim.c
@@ -4,7 +4,7 @@
  *
  *   PNG Bitmap glyph support.
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * Google, Inc.
  * Written by Stuart Gill and Behdad Esfahbod.
  *
diff --git a/src/sfnt/pngshim.h b/src/sfnt/pngshim.h
index 049a1ed..06c6f6b 100644
--- a/src/sfnt/pngshim.h
+++ b/src/sfnt/pngshim.h
@@ -4,7 +4,7 @@
  *
  *   PNG Bitmap glyph support.
  *
- * Copyright 2013-2018 by
+ * Copyright (C) 2013-2019 by
  * Google, Inc.
  * Written by Stuart Gill and Behdad Esfahbod.
  *
diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk
index ff7d7c7..ee3314e 100644
--- a/src/sfnt/rules.mk
+++ b/src/sfnt/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -31,6 +31,7 @@
 SFNT_DRV_SRC := $(SFNT_DIR)/pngshim.c  \
                 $(SFNT_DIR)/sfdriver.c \
                 $(SFNT_DIR)/sfobjs.c   \
+                $(SFNT_DIR)/sfwoff.c   \
                 $(SFNT_DIR)/ttbdf.c    \
                 $(SFNT_DIR)/ttcmap.c   \
                 $(SFNT_DIR)/ttcolr.c   \
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index ae6d6cd..2611685 100644
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -4,7 +4,7 @@
  *
  *   High-level SFNT driver interface (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -68,7 +68,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_sfdriver
+#define FT_COMPONENT  sfdriver
 
 
   /*
@@ -182,8 +182,8 @@
 
 
   static FT_UInt
-  sfnt_get_name_index( FT_Face     face,
-                       FT_String*  glyph_name )
+  sfnt_get_name_index( FT_Face           face,
+                       const FT_String*  glyph_name )
   {
     TT_Face  ttface = (TT_Face)face;
 
@@ -375,47 +375,61 @@
       {
       case 15:
         k4 ^= (FT_UInt32)tail[14] << 16;
+        /* fall through */
       case 14:
         k4 ^= (FT_UInt32)tail[13] << 8;
+        /* fall through */
       case 13:
         k4 ^= (FT_UInt32)tail[12];
         k4 *= c4;
         k4  = ROTL32( k4, 18 );
         k4 *= c1;
         h4 ^= k4;
+        /* fall through */
 
       case 12:
         k3 ^= (FT_UInt32)tail[11] << 24;
+        /* fall through */
       case 11:
         k3 ^= (FT_UInt32)tail[10] << 16;
+        /* fall through */
       case 10:
         k3 ^= (FT_UInt32)tail[9] << 8;
+        /* fall through */
       case 9:
         k3 ^= (FT_UInt32)tail[8];
         k3 *= c3;
         k3  = ROTL32( k3, 17 );
         k3 *= c4;
         h3 ^= k3;
+        /* fall through */
 
       case 8:
         k2 ^= (FT_UInt32)tail[7] << 24;
+        /* fall through */
       case 7:
         k2 ^= (FT_UInt32)tail[6] << 16;
+        /* fall through */
       case 6:
         k2 ^= (FT_UInt32)tail[5] << 8;
+        /* fall through */
       case 5:
         k2 ^= (FT_UInt32)tail[4];
         k2 *= c2;
         k2  = ROTL32( k2, 16 );
         k2 *= c3;
         h2 ^= k2;
+        /* fall through */
 
       case 4:
         k1 ^= (FT_UInt32)tail[3] << 24;
+        /* fall through */
       case 3:
         k1 ^= (FT_UInt32)tail[2] << 16;
+        /* fall through */
       case 2:
         k1 ^= (FT_UInt32)tail[1] << 8;
+        /* fall through */
       case 1:
         k1 ^= (FT_UInt32)tail[0];
         k1 *= c1;
@@ -464,14 +478,12 @@
   typedef int (*char_type_func)( int  c );
 
 
-  /* handling of PID/EID 3/0 and 3/1 is the same */
+  /* Handling of PID/EID 3/0 and 3/1 is the same. */
 #define IS_WIN( n )  ( (n)->platformID == 3                             && \
-                       ( (n)->encodingID == 1 || (n)->encodingID == 0 ) && \
-                       (n)->languageID == 0x409                         )
+                       ( (n)->encodingID == 1 || (n)->encodingID == 0 ) )
 
 #define IS_APPLE( n )  ( (n)->platformID == 1 && \
-                         (n)->encodingID == 0 && \
-                         (n)->languageID == 0 )
+                         (n)->encodingID == 0 )
 
   static char*
   get_win_string( FT_Memory       memory,
@@ -495,42 +507,40 @@
 
     if ( FT_STREAM_SEEK( entry->stringOffset ) ||
          FT_FRAME_ENTER( entry->stringLength ) )
-    {
-      FT_FREE( result );
-      entry->stringLength = 0;
-      entry->stringOffset = 0;
-      FT_FREE( entry->string );
-
-      return NULL;
-    }
+      goto get_win_string_error;
 
     r = (FT_String*)result;
     p = (FT_Char*)stream->cursor;
 
     for ( len = entry->stringLength / 2; len > 0; len--, p += 2 )
     {
-      if ( p[0] == 0 )
+      if ( p[0] == 0 && char_type( p[1] ) )
+        *r++ = p[1];
+      else
       {
-        if ( char_type( p[1] ) )
-          *r++ = p[1];
-        else
-        {
-          if ( report_invalid_characters )
-          {
-            FT_TRACE0(( "get_win_string:"
-                        " Character `%c' (0x%X) invalid in PS name string\n",
-                        p[1], p[1] ));
-            /* it's not the job of FreeType to correct PS names... */
-            *r++ = p[1];
-          }
-        }
+        if ( report_invalid_characters )
+          FT_TRACE0(( "get_win_string:"
+                      " Character 0x%X invalid in PS name string\n",
+                      ((unsigned)p[0])*256 + (unsigned)p[1] ));
+        break;
       }
     }
-    *r = '\0';
+    if ( !len )
+      *r = '\0';
 
     FT_FRAME_EXIT();
 
-    return result;
+    if ( !len )
+      return result;
+
+  get_win_string_error:
+    FT_FREE( result );
+
+    entry->stringLength = 0;
+    entry->stringOffset = 0;
+    FT_FREE( entry->string );
+
+    return NULL;
   }
 
 
@@ -556,14 +566,7 @@
 
     if ( FT_STREAM_SEEK( entry->stringOffset ) ||
          FT_FRAME_ENTER( entry->stringLength ) )
-    {
-      FT_FREE( result );
-      entry->stringOffset = 0;
-      entry->stringLength = 0;
-      FT_FREE( entry->string );
-
-      return NULL;
-    }
+      goto get_apple_string_error;
 
     r = (FT_String*)result;
     p = (FT_Char*)stream->cursor;
@@ -575,20 +578,28 @@
       else
       {
         if ( report_invalid_characters )
-        {
           FT_TRACE0(( "get_apple_string:"
                       " Character `%c' (0x%X) invalid in PS name string\n",
                       *p, *p ));
-          /* it's not the job of FreeType to correct PS names... */
-          *r++ = *p;
-        }
+        break;
       }
     }
-    *r = '\0';
+    if ( !len )
+      *r = '\0';
 
     FT_FRAME_EXIT();
 
-    return result;
+    if ( !len )
+      return result;
+
+  get_apple_string_error:
+    FT_FREE( result );
+
+    entry->stringOffset = 0;
+    entry->stringLength = 0;
+    FT_FREE( entry->string );
+
+    return NULL;
   }
 
 
@@ -611,10 +622,10 @@
 
       if ( name->nameID == id && name->stringLength > 0 )
       {
-        if ( IS_WIN( name ) )
+        if ( IS_WIN( name ) && ( name->languageID == 0x409 || *win == -1 ) )
           *win = n;
 
-        if ( IS_APPLE( name ) )
+        if ( IS_APPLE( name ) && ( name->languageID == 0 || *apple == -1 ) )
           *apple = n;
       }
     }
@@ -832,13 +843,20 @@
                                  face->name_table.names + win,
                                  sfnt_is_alphanumeric,
                                  0 );
-      else
+      if ( !result && apple != -1 )
         result = get_apple_string( face->root.memory,
                                    face->name_table.stream,
                                    face->name_table.names + apple,
                                    sfnt_is_alphanumeric,
                                    0 );
 
+      if ( !result )
+      {
+        FT_TRACE0(( "sfnt_get_var_ps_name:"
+                    " No valid PS name prefix for font instances found\n" ));
+        return NULL;
+      }
+
       len = ft_strlen( result );
 
       /* sanitize if necessary; we reserve space for 36 bytes (a 128bit  */
@@ -1056,7 +1074,7 @@
                                face->name_table.names + win,
                                sfnt_is_postscript,
                                1 );
-    else
+    if ( !result && apple != -1 )
       result = get_apple_string( face->root.memory,
                                  face->name_table.stream,
                                  face->name_table.names + apple,
diff --git a/src/sfnt/sfdriver.h b/src/sfnt/sfdriver.h
index 02d8d3d..8c17463 100644
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level SFNT driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/sferrors.h b/src/sfnt/sferrors.h
index 6f78063..43e148d 100644
--- a/src/sfnt/sferrors.h
+++ b/src/sfnt/sferrors.h
@@ -4,7 +4,7 @@
  *
  *   SFNT error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/sfnt.c b/src/sfnt/sfnt.c
index 9b4e3c0..b4faf34 100644
--- a/src/sfnt/sfnt.c
+++ b/src/sfnt/sfnt.c
@@ -4,7 +4,7 @@
  *
  *   Single object library component.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -22,6 +22,7 @@
 #include "pngshim.c"
 #include "sfdriver.c"
 #include "sfobjs.c"
+#include "sfwoff.c"
 #include "ttbdf.c"
 #include "ttcmap.c"
 #include "ttcolr.c"
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index 9dfc20e..6edf3ae 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -4,7 +4,7 @@
  *
  *   SFNT object management (base).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -21,13 +21,13 @@
 #include "ttload.h"
 #include "ttcmap.h"
 #include "ttkern.h"
+#include "sfwoff.h"
 #include FT_INTERNAL_SFNT_H
 #include FT_INTERNAL_DEBUG_H
 #include FT_TRUETYPE_IDS_H
 #include FT_TRUETYPE_TAGS_H
 #include FT_SERVICE_POSTSCRIPT_CMAPS_H
 #include FT_SFNT_NAMES_H
-#include FT_GZIP_H
 
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
 #include FT_SERVICE_MULTIPLE_MASTERS_H
@@ -48,7 +48,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_sfobjs
+#define FT_COMPONENT  sfobjs
 
 
 
@@ -337,403 +337,6 @@
   }
 
 
-#define WRITE_USHORT( p, v )                \
-          do                                \
-          {                                 \
-            *(p)++ = (FT_Byte)( (v) >> 8 ); \
-            *(p)++ = (FT_Byte)( (v) >> 0 ); \
-                                            \
-          } while ( 0 )
-
-#define WRITE_ULONG( p, v )                  \
-          do                                 \
-          {                                  \
-            *(p)++ = (FT_Byte)( (v) >> 24 ); \
-            *(p)++ = (FT_Byte)( (v) >> 16 ); \
-            *(p)++ = (FT_Byte)( (v) >>  8 ); \
-            *(p)++ = (FT_Byte)( (v) >>  0 ); \
-                                             \
-          } while ( 0 )
-
-
-  static void
-  sfnt_stream_close( FT_Stream  stream )
-  {
-    FT_Memory  memory = stream->memory;
-
-
-    FT_FREE( stream->base );
-
-    stream->size  = 0;
-    stream->base  = NULL;
-    stream->close = NULL;
-  }
-
-
-  FT_CALLBACK_DEF( int )
-  compare_offsets( const void*  a,
-                   const void*  b )
-  {
-    WOFF_Table  table1 = *(WOFF_Table*)a;
-    WOFF_Table  table2 = *(WOFF_Table*)b;
-
-    FT_ULong  offset1 = table1->Offset;
-    FT_ULong  offset2 = table2->Offset;
-
-
-    if ( offset1 > offset2 )
-      return 1;
-    else if ( offset1 < offset2 )
-      return -1;
-    else
-      return 0;
-  }
-
-
-  /* Replace `face->root.stream' with a stream containing the extracted */
-  /* SFNT of a WOFF font.                                               */
-
-  static FT_Error
-  woff_open_font( FT_Stream  stream,
-                  TT_Face    face )
-  {
-    FT_Memory       memory = stream->memory;
-    FT_Error        error  = FT_Err_Ok;
-
-    WOFF_HeaderRec  woff;
-    WOFF_Table      tables  = NULL;
-    WOFF_Table*     indices = NULL;
-
-    FT_ULong        woff_offset;
-
-    FT_Byte*        sfnt        = NULL;
-    FT_Stream       sfnt_stream = NULL;
-
-    FT_Byte*        sfnt_header;
-    FT_ULong        sfnt_offset;
-
-    FT_Int          nn;
-    FT_ULong        old_tag = 0;
-
-    static const FT_Frame_Field  woff_header_fields[] =
-    {
-#undef  FT_STRUCTURE
-#define FT_STRUCTURE  WOFF_HeaderRec
-
-      FT_FRAME_START( 44 ),
-        FT_FRAME_ULONG ( signature ),
-        FT_FRAME_ULONG ( flavor ),
-        FT_FRAME_ULONG ( length ),
-        FT_FRAME_USHORT( num_tables ),
-        FT_FRAME_USHORT( reserved ),
-        FT_FRAME_ULONG ( totalSfntSize ),
-        FT_FRAME_USHORT( majorVersion ),
-        FT_FRAME_USHORT( minorVersion ),
-        FT_FRAME_ULONG ( metaOffset ),
-        FT_FRAME_ULONG ( metaLength ),
-        FT_FRAME_ULONG ( metaOrigLength ),
-        FT_FRAME_ULONG ( privOffset ),
-        FT_FRAME_ULONG ( privLength ),
-      FT_FRAME_END
-    };
-
-
-    FT_ASSERT( stream == face->root.stream );
-    FT_ASSERT( FT_STREAM_POS() == 0 );
-
-    if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )
-      return error;
-
-    /* Make sure we don't recurse back here or hit TTC code. */
-    if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )
-      return FT_THROW( Invalid_Table );
-
-    /* Miscellaneous checks. */
-    if ( woff.length != stream->size                              ||
-         woff.num_tables == 0                                     ||
-         44 + woff.num_tables * 20UL >= woff.length               ||
-         12 + woff.num_tables * 16UL >= woff.totalSfntSize        ||
-         ( woff.totalSfntSize & 3 ) != 0                          ||
-         ( woff.metaOffset == 0 && ( woff.metaLength != 0     ||
-                                     woff.metaOrigLength != 0 ) ) ||
-         ( woff.metaLength != 0 && woff.metaOrigLength == 0 )     ||
-         ( woff.privOffset == 0 && woff.privLength != 0 )         )
-    {
-      FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
-      return FT_THROW( Invalid_Table );
-    }
-
-    /* Don't trust `totalSfntSize' before thorough checks. */
-    if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
-         FT_NEW( sfnt_stream )                         )
-      goto Exit;
-
-    sfnt_header = sfnt;
-
-    /* Write sfnt header. */
-    {
-      FT_UInt  searchRange, entrySelector, rangeShift, x;
-
-
-      x             = woff.num_tables;
-      entrySelector = 0;
-      while ( x )
-      {
-        x            >>= 1;
-        entrySelector += 1;
-      }
-      entrySelector--;
-
-      searchRange = ( 1 << entrySelector ) * 16;
-      rangeShift  = woff.num_tables * 16 - searchRange;
-
-      WRITE_ULONG ( sfnt_header, woff.flavor );
-      WRITE_USHORT( sfnt_header, woff.num_tables );
-      WRITE_USHORT( sfnt_header, searchRange );
-      WRITE_USHORT( sfnt_header, entrySelector );
-      WRITE_USHORT( sfnt_header, rangeShift );
-    }
-
-    /* While the entries in the sfnt header must be sorted by the */
-    /* tag value, the tables themselves are not.  We thus have to */
-    /* sort them by offset and check that they don't overlap.     */
-
-    if ( FT_NEW_ARRAY( tables, woff.num_tables )  ||
-         FT_NEW_ARRAY( indices, woff.num_tables ) )
-      goto Exit;
-
-    FT_TRACE2(( "\n"
-                "  tag    offset    compLen  origLen  checksum\n"
-                "  -------------------------------------------\n" ));
-
-    if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
-      goto Exit;
-
-    for ( nn = 0; nn < woff.num_tables; nn++ )
-    {
-      WOFF_Table  table = tables + nn;
-
-      table->Tag        = FT_GET_TAG4();
-      table->Offset     = FT_GET_ULONG();
-      table->CompLength = FT_GET_ULONG();
-      table->OrigLength = FT_GET_ULONG();
-      table->CheckSum   = FT_GET_ULONG();
-
-      FT_TRACE2(( "  %c%c%c%c  %08lx  %08lx  %08lx  %08lx\n",
-                  (FT_Char)( table->Tag >> 24 ),
-                  (FT_Char)( table->Tag >> 16 ),
-                  (FT_Char)( table->Tag >> 8  ),
-                  (FT_Char)( table->Tag       ),
-                  table->Offset,
-                  table->CompLength,
-                  table->OrigLength,
-                  table->CheckSum ));
-
-      if ( table->Tag <= old_tag )
-      {
-        FT_FRAME_EXIT();
-
-        FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
-        error = FT_THROW( Invalid_Table );
-        goto Exit;
-      }
-
-      old_tag     = table->Tag;
-      indices[nn] = table;
-    }
-
-    FT_FRAME_EXIT();
-
-    /* Sort by offset. */
-
-    ft_qsort( indices,
-              woff.num_tables,
-              sizeof ( WOFF_Table ),
-              compare_offsets );
-
-    /* Check offsets and lengths. */
-
-    woff_offset = 44 + woff.num_tables * 20L;
-    sfnt_offset = 12 + woff.num_tables * 16L;
-
-    for ( nn = 0; nn < woff.num_tables; nn++ )
-    {
-      WOFF_Table  table = indices[nn];
-
-
-      if ( table->Offset != woff_offset                         ||
-           table->CompLength > woff.length                      ||
-           table->Offset > woff.length - table->CompLength      ||
-           table->OrigLength > woff.totalSfntSize               ||
-           sfnt_offset > woff.totalSfntSize - table->OrigLength ||
-           table->CompLength > table->OrigLength                )
-      {
-        FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
-        error = FT_THROW( Invalid_Table );
-        goto Exit;
-      }
-
-      table->OrigOffset = sfnt_offset;
-
-      /* The offsets must be multiples of 4. */
-      woff_offset += ( table->CompLength + 3 ) & ~3U;
-      sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
-    }
-
-    /*
-     * Final checks!
-     *
-     * We don't decode and check the metadata block.
-     * We don't check table checksums either.
-     * But other than those, I think we implement all
-     * `MUST' checks from the spec.
-     */
-
-    if ( woff.metaOffset )
-    {
-      if ( woff.metaOffset != woff_offset                  ||
-           woff.metaOffset + woff.metaLength > woff.length )
-      {
-        FT_ERROR(( "woff_font_open:"
-                   " invalid `metadata' offset or length\n" ));
-        error = FT_THROW( Invalid_Table );
-        goto Exit;
-      }
-
-      /* We have padding only ... */
-      woff_offset += woff.metaLength;
-    }
-
-    if ( woff.privOffset )
-    {
-      /* ... if it isn't the last block. */
-      woff_offset = ( woff_offset + 3 ) & ~3U;
-
-      if ( woff.privOffset != woff_offset                  ||
-           woff.privOffset + woff.privLength > woff.length )
-      {
-        FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
-        error = FT_THROW( Invalid_Table );
-        goto Exit;
-      }
-
-      /* No padding for the last block. */
-      woff_offset += woff.privLength;
-    }
-
-    if ( sfnt_offset != woff.totalSfntSize ||
-         woff_offset != woff.length        )
-    {
-      FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
-      error = FT_THROW( Invalid_Table );
-      goto Exit;
-    }
-
-    /* Now use `totalSfntSize'. */
-    if ( FT_REALLOC( sfnt,
-                     12 + woff.num_tables * 16UL,
-                     woff.totalSfntSize ) )
-      goto Exit;
-
-    sfnt_header = sfnt + 12;
-
-    /* Write the tables. */
-
-    for ( nn = 0; nn < woff.num_tables; nn++ )
-    {
-      WOFF_Table  table = tables + nn;
-
-
-      /* Write SFNT table entry. */
-      WRITE_ULONG( sfnt_header, table->Tag );
-      WRITE_ULONG( sfnt_header, table->CheckSum );
-      WRITE_ULONG( sfnt_header, table->OrigOffset );
-      WRITE_ULONG( sfnt_header, table->OrigLength );
-
-      /* Write table data. */
-      if ( FT_STREAM_SEEK( table->Offset )     ||
-           FT_FRAME_ENTER( table->CompLength ) )
-        goto Exit;
-
-      if ( table->CompLength == table->OrigLength )
-      {
-        /* Uncompressed data; just copy. */
-        ft_memcpy( sfnt + table->OrigOffset,
-                   stream->cursor,
-                   table->OrigLength );
-      }
-      else
-      {
-#ifdef FT_CONFIG_OPTION_USE_ZLIB
-
-        /* Uncompress with zlib. */
-        FT_ULong  output_len = table->OrigLength;
-
-
-        error = FT_Gzip_Uncompress( memory,
-                                    sfnt + table->OrigOffset, &output_len,
-                                    stream->cursor, table->CompLength );
-        if ( error )
-          goto Exit;
-        if ( output_len != table->OrigLength )
-        {
-          FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
-          error = FT_THROW( Invalid_Table );
-          goto Exit;
-        }
-
-#else /* !FT_CONFIG_OPTION_USE_ZLIB */
-
-        error = FT_THROW( Unimplemented_Feature );
-        goto Exit;
-
-#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
-      }
-
-      FT_FRAME_EXIT();
-
-      /* We don't check whether the padding bytes in the WOFF file are     */
-      /* actually '\0'.  For the output, however, we do set them properly. */
-      sfnt_offset = table->OrigOffset + table->OrigLength;
-      while ( sfnt_offset & 3 )
-      {
-        sfnt[sfnt_offset] = '\0';
-        sfnt_offset++;
-      }
-    }
-
-    /* Ok!  Finally ready.  Swap out stream and return. */
-    FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize );
-    sfnt_stream->memory = stream->memory;
-    sfnt_stream->close  = sfnt_stream_close;
-
-    FT_Stream_Free(
-      face->root.stream,
-      ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
-
-    face->root.stream = sfnt_stream;
-
-    face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
-
-  Exit:
-    FT_FREE( tables );
-    FT_FREE( indices );
-
-    if ( error )
-    {
-      FT_FREE( sfnt );
-      FT_Stream_Close( sfnt_stream );
-      FT_FREE( sfnt_stream );
-    }
-
-    return error;
-  }
-
-
-#undef WRITE_USHORT
-#undef WRITE_ULONG
-
-
   /* Fill in face->ttc_header.  If the font is not a TTC, it is */
   /* synthesized into a TTC with one offset table.              */
   static FT_Error
@@ -1531,7 +1134,8 @@
           error = FT_CMap_New( (FT_CMap_Class)&tt_cmap_unicode_class_rec,
                                NULL, &cmaprec, NULL );
           if ( error                                      &&
-               FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+               FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+               FT_ERR_NEQ( error, Unimplemented_Feature ) )
             goto Exit;
           error = FT_Err_Ok;
 
@@ -1640,59 +1244,73 @@
         root->units_per_EM = face->header.Units_Per_EM;
 
 
-        /* XXX: Computing the ascender/descender/height is very different */
-        /*      from what the specification tells you.  Apparently, we    */
-        /*      must be careful because                                   */
-        /*                                                                */
-        /*      - not all fonts have an OS/2 table; in this case, we take */
-        /*        the values in the horizontal header.  However, these    */
-        /*        values very often are not reliable.                     */
-        /*                                                                */
-        /*      - otherwise, the correct typographic values are in the    */
-        /*        sTypoAscender, sTypoDescender & sTypoLineGap fields.    */
-        /*                                                                */
-        /*        However, certain fonts have these fields set to 0.      */
-        /*        Rather, they have usWinAscent & usWinDescent correctly  */
-        /*        set (but with different values).                        */
-        /*                                                                */
-        /*      As an example, Arial Narrow is implemented through four   */
-        /*      files ARIALN.TTF, ARIALNI.TTF, ARIALNB.TTF & ARIALNBI.TTF */
-        /*                                                                */
-        /*      Strangely, all fonts have the same values in their        */
-        /*      sTypoXXX fields, except ARIALNB which sets them to 0.     */
-        /*                                                                */
-        /*      On the other hand, they all have different                */
-        /*      usWinAscent/Descent values -- as a conclusion, the OS/2   */
-        /*      table cannot be used to compute the text height reliably! */
-        /*                                                                */
+        /*
+         * Computing the ascender/descender/height is tricky.
+         *
+         * The OpenType specification v1.8.3 says:
+         *
+         *   [OS/2's] sTypoAscender, sTypoDescender and sTypoLineGap fields
+         *   are intended to allow applications to lay out documents in a
+         *   typographically-correct and portable fashion.
+         *
+         * This is somewhat at odds with the decades of backwards
+         * compatibility, operating systems and applications doing whatever
+         * they want, not to mention broken fonts.
+         *
+         * Not all fonts have an OS/2 table; in this case, we take the values
+         * in the horizontal header, although there is nothing stopping the
+         * values from being unreliable. Even with a OS/2 table, certain fonts
+         * set the sTypoAscender, sTypoDescender and sTypoLineGap fields to 0
+         * and instead correctly set usWinAscent and usWinDescent.
+         *
+         * As an example, Arial Narrow is shipped as four files ARIALN.TTF,
+         * ARIALNI.TTF, ARIALNB.TTF and ARIALNBI.TTF. Strangely, all fonts have
+         * the same values in their sTypo* fields, except ARIALNB.ttf which
+         * sets them to 0. All of them have different usWinAscent/Descent
+         * values. The OS/2 table therefore cannot be trusted for computing the
+         * text height reliably.
+         *
+         * As a compromise, do the following:
+         *
+         * 1. If the OS/2 table exists and the fsSelection bit 7 is set
+         *    (USE_TYPO_METRICS), trust the font and use the sTypo* metrics.
+         * 2. Otherwise, use the `hhea' table's metrics.
+         * 3. If they are zero and the OS/2 table exists,
+         *    1. use the OS/2 table's sTypo* metrics if they are non-zero.
+         *    2. Otherwise, use the OS/2 table's usWin* metrics.
+         */
 
-        /* The ascender and descender are taken from the `hhea' table. */
-        /* If zero, they are taken from the `OS/2' table.              */
-
-        root->ascender  = face->horizontal.Ascender;
-        root->descender = face->horizontal.Descender;
-
-        root->height = root->ascender - root->descender +
-                       face->horizontal.Line_Gap;
-
-        if ( !( root->ascender || root->descender ) )
+        if ( face->os2.version != 0xFFFFU && face->os2.fsSelection & 128 )
         {
-          if ( face->os2.version != 0xFFFFU )
+          root->ascender  = face->os2.sTypoAscender;
+          root->descender = face->os2.sTypoDescender;
+          root->height    = root->ascender - root->descender +
+                            face->os2.sTypoLineGap;
+        }
+        else
+        {
+          root->ascender  = face->horizontal.Ascender;
+          root->descender = face->horizontal.Descender;
+          root->height    = root->ascender - root->descender +
+                            face->horizontal.Line_Gap;
+
+          if ( !( root->ascender || root->descender ) )
           {
-            if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
+            if ( face->os2.version != 0xFFFFU )
             {
-              root->ascender  = face->os2.sTypoAscender;
-              root->descender = face->os2.sTypoDescender;
-
-              root->height = root->ascender - root->descender +
-                             face->os2.sTypoLineGap;
-            }
-            else
-            {
-              root->ascender  =  (FT_Short)face->os2.usWinAscent;
-              root->descender = -(FT_Short)face->os2.usWinDescent;
-
-              root->height = root->ascender - root->descender;
+              if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
+              {
+                root->ascender  = face->os2.sTypoAscender;
+                root->descender = face->os2.sTypoDescender;
+                root->height    = root->ascender - root->descender +
+                                  face->os2.sTypoLineGap;
+              }
+              else
+              {
+                root->ascender  =  (FT_Short)face->os2.usWinAscent;
+                root->descender = -(FT_Short)face->os2.usWinDescent;
+                root->height    =  root->ascender - root->descender;
+              }
             }
           }
         }
diff --git a/src/sfnt/sfobjs.h b/src/sfnt/sfobjs.h
index d3bbaf1..3fbf2dd 100644
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -4,7 +4,7 @@
  *
  *   SFNT object management (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -53,7 +53,7 @@
 
 FT_END_HEADER
 
-#endif /* SFDRIVER_H_ */
+#endif /* SFOBJS_H_ */
 
 
 /* END */
diff --git a/src/sfnt/sfwoff.c b/src/sfnt/sfwoff.c
new file mode 100644
index 0000000..ca4821a
--- /dev/null
+++ b/src/sfnt/sfwoff.c
@@ -0,0 +1,434 @@
+/****************************************************************************
+ *
+ * sfwoff.c
+ *
+ *   WOFF format management (base).
+ *
+ * Copyright (C) 1996-2019 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 <ft2build.h>
+#include "sfwoff.h"
+#include FT_TRUETYPE_TAGS_H
+#include FT_INTERNAL_DEBUG_H
+#include FT_INTERNAL_STREAM_H
+#include FT_GZIP_H
+
+
+  /**************************************************************************
+   *
+   * The macro FT_COMPONENT is used in trace mode.  It is an implicit
+   * parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
+   * messages during execution.
+   */
+#undef  FT_COMPONENT
+#define FT_COMPONENT  sfwoff
+
+
+#define WRITE_USHORT( p, v )                \
+          do                                \
+          {                                 \
+            *(p)++ = (FT_Byte)( (v) >> 8 ); \
+            *(p)++ = (FT_Byte)( (v) >> 0 ); \
+                                            \
+          } while ( 0 )
+
+#define WRITE_ULONG( p, v )                  \
+          do                                 \
+          {                                  \
+            *(p)++ = (FT_Byte)( (v) >> 24 ); \
+            *(p)++ = (FT_Byte)( (v) >> 16 ); \
+            *(p)++ = (FT_Byte)( (v) >>  8 ); \
+            *(p)++ = (FT_Byte)( (v) >>  0 ); \
+                                             \
+          } while ( 0 )
+
+
+  static void
+  sfnt_stream_close( FT_Stream  stream )
+  {
+    FT_Memory  memory = stream->memory;
+
+
+    FT_FREE( stream->base );
+
+    stream->size  = 0;
+    stream->base  = NULL;
+    stream->close = NULL;
+  }
+
+
+  FT_CALLBACK_DEF( int )
+  compare_offsets( const void*  a,
+                   const void*  b )
+  {
+    WOFF_Table  table1 = *(WOFF_Table*)a;
+    WOFF_Table  table2 = *(WOFF_Table*)b;
+
+    FT_ULong  offset1 = table1->Offset;
+    FT_ULong  offset2 = table2->Offset;
+
+
+    if ( offset1 > offset2 )
+      return 1;
+    else if ( offset1 < offset2 )
+      return -1;
+    else
+      return 0;
+  }
+
+
+  /* Replace `face->root.stream' with a stream containing the extracted */
+  /* SFNT of a WOFF font.                                               */
+
+  FT_LOCAL_DEF( FT_Error )
+  woff_open_font( FT_Stream  stream,
+                  TT_Face    face )
+  {
+    FT_Memory       memory = stream->memory;
+    FT_Error        error  = FT_Err_Ok;
+
+    WOFF_HeaderRec  woff;
+    WOFF_Table      tables  = NULL;
+    WOFF_Table*     indices = NULL;
+
+    FT_ULong        woff_offset;
+
+    FT_Byte*        sfnt        = NULL;
+    FT_Stream       sfnt_stream = NULL;
+
+    FT_Byte*        sfnt_header;
+    FT_ULong        sfnt_offset;
+
+    FT_Int          nn;
+    FT_ULong        old_tag = 0;
+
+    static const FT_Frame_Field  woff_header_fields[] =
+    {
+#undef  FT_STRUCTURE
+#define FT_STRUCTURE  WOFF_HeaderRec
+
+      FT_FRAME_START( 44 ),
+        FT_FRAME_ULONG ( signature ),
+        FT_FRAME_ULONG ( flavor ),
+        FT_FRAME_ULONG ( length ),
+        FT_FRAME_USHORT( num_tables ),
+        FT_FRAME_USHORT( reserved ),
+        FT_FRAME_ULONG ( totalSfntSize ),
+        FT_FRAME_USHORT( majorVersion ),
+        FT_FRAME_USHORT( minorVersion ),
+        FT_FRAME_ULONG ( metaOffset ),
+        FT_FRAME_ULONG ( metaLength ),
+        FT_FRAME_ULONG ( metaOrigLength ),
+        FT_FRAME_ULONG ( privOffset ),
+        FT_FRAME_ULONG ( privLength ),
+      FT_FRAME_END
+    };
+
+
+    FT_ASSERT( stream == face->root.stream );
+    FT_ASSERT( FT_STREAM_POS() == 0 );
+
+    if ( FT_STREAM_READ_FIELDS( woff_header_fields, &woff ) )
+      return error;
+
+    /* Make sure we don't recurse back here or hit TTC code. */
+    if ( woff.flavor == TTAG_wOFF || woff.flavor == TTAG_ttcf )
+      return FT_THROW( Invalid_Table );
+
+    /* Miscellaneous checks. */
+    if ( woff.length != stream->size                              ||
+         woff.num_tables == 0                                     ||
+         44 + woff.num_tables * 20UL >= woff.length               ||
+         12 + woff.num_tables * 16UL >= woff.totalSfntSize        ||
+         ( woff.totalSfntSize & 3 ) != 0                          ||
+         ( woff.metaOffset == 0 && ( woff.metaLength != 0     ||
+                                     woff.metaOrigLength != 0 ) ) ||
+         ( woff.metaLength != 0 && woff.metaOrigLength == 0 )     ||
+         ( woff.privOffset == 0 && woff.privLength != 0 )         )
+    {
+      FT_ERROR(( "woff_font_open: invalid WOFF header\n" ));
+      return FT_THROW( Invalid_Table );
+    }
+
+    /* Don't trust `totalSfntSize' before thorough checks. */
+    if ( FT_ALLOC( sfnt, 12 + woff.num_tables * 16UL ) ||
+         FT_NEW( sfnt_stream )                         )
+      goto Exit;
+
+    sfnt_header = sfnt;
+
+    /* Write sfnt header. */
+    {
+      FT_UInt  searchRange, entrySelector, rangeShift, x;
+
+
+      x             = woff.num_tables;
+      entrySelector = 0;
+      while ( x )
+      {
+        x            >>= 1;
+        entrySelector += 1;
+      }
+      entrySelector--;
+
+      searchRange = ( 1 << entrySelector ) * 16;
+      rangeShift  = woff.num_tables * 16 - searchRange;
+
+      WRITE_ULONG ( sfnt_header, woff.flavor );
+      WRITE_USHORT( sfnt_header, woff.num_tables );
+      WRITE_USHORT( sfnt_header, searchRange );
+      WRITE_USHORT( sfnt_header, entrySelector );
+      WRITE_USHORT( sfnt_header, rangeShift );
+    }
+
+    /* While the entries in the sfnt header must be sorted by the */
+    /* tag value, the tables themselves are not.  We thus have to */
+    /* sort them by offset and check that they don't overlap.     */
+
+    if ( FT_NEW_ARRAY( tables, woff.num_tables )  ||
+         FT_NEW_ARRAY( indices, woff.num_tables ) )
+      goto Exit;
+
+    FT_TRACE2(( "\n"
+                "  tag    offset    compLen  origLen  checksum\n"
+                "  -------------------------------------------\n" ));
+
+    if ( FT_FRAME_ENTER( 20L * woff.num_tables ) )
+      goto Exit;
+
+    for ( nn = 0; nn < woff.num_tables; nn++ )
+    {
+      WOFF_Table  table = tables + nn;
+
+      table->Tag        = FT_GET_TAG4();
+      table->Offset     = FT_GET_ULONG();
+      table->CompLength = FT_GET_ULONG();
+      table->OrigLength = FT_GET_ULONG();
+      table->CheckSum   = FT_GET_ULONG();
+
+      FT_TRACE2(( "  %c%c%c%c  %08lx  %08lx  %08lx  %08lx\n",
+                  (FT_Char)( table->Tag >> 24 ),
+                  (FT_Char)( table->Tag >> 16 ),
+                  (FT_Char)( table->Tag >> 8  ),
+                  (FT_Char)( table->Tag       ),
+                  table->Offset,
+                  table->CompLength,
+                  table->OrigLength,
+                  table->CheckSum ));
+
+      if ( table->Tag <= old_tag )
+      {
+        FT_FRAME_EXIT();
+
+        FT_ERROR(( "woff_font_open: table tags are not sorted\n" ));
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+
+      old_tag     = table->Tag;
+      indices[nn] = table;
+    }
+
+    FT_FRAME_EXIT();
+
+    /* Sort by offset. */
+
+    ft_qsort( indices,
+              woff.num_tables,
+              sizeof ( WOFF_Table ),
+              compare_offsets );
+
+    /* Check offsets and lengths. */
+
+    woff_offset = 44 + woff.num_tables * 20L;
+    sfnt_offset = 12 + woff.num_tables * 16L;
+
+    for ( nn = 0; nn < woff.num_tables; nn++ )
+    {
+      WOFF_Table  table = indices[nn];
+
+
+      if ( table->Offset != woff_offset                         ||
+           table->CompLength > woff.length                      ||
+           table->Offset > woff.length - table->CompLength      ||
+           table->OrigLength > woff.totalSfntSize               ||
+           sfnt_offset > woff.totalSfntSize - table->OrigLength ||
+           table->CompLength > table->OrigLength                )
+      {
+        FT_ERROR(( "woff_font_open: invalid table offsets\n" ));
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+
+      table->OrigOffset = sfnt_offset;
+
+      /* The offsets must be multiples of 4. */
+      woff_offset += ( table->CompLength + 3 ) & ~3U;
+      sfnt_offset += ( table->OrigLength + 3 ) & ~3U;
+    }
+
+    /*
+     * Final checks!
+     *
+     * We don't decode and check the metadata block.
+     * We don't check table checksums either.
+     * But other than those, I think we implement all
+     * `MUST' checks from the spec.
+     */
+
+    if ( woff.metaOffset )
+    {
+      if ( woff.metaOffset != woff_offset                  ||
+           woff.metaOffset + woff.metaLength > woff.length )
+      {
+        FT_ERROR(( "woff_font_open:"
+                   " invalid `metadata' offset or length\n" ));
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+
+      /* We have padding only ... */
+      woff_offset += woff.metaLength;
+    }
+
+    if ( woff.privOffset )
+    {
+      /* ... if it isn't the last block. */
+      woff_offset = ( woff_offset + 3 ) & ~3U;
+
+      if ( woff.privOffset != woff_offset                  ||
+           woff.privOffset + woff.privLength > woff.length )
+      {
+        FT_ERROR(( "woff_font_open: invalid `private' offset or length\n" ));
+        error = FT_THROW( Invalid_Table );
+        goto Exit;
+      }
+
+      /* No padding for the last block. */
+      woff_offset += woff.privLength;
+    }
+
+    if ( sfnt_offset != woff.totalSfntSize ||
+         woff_offset != woff.length        )
+    {
+      FT_ERROR(( "woff_font_open: invalid `sfnt' table structure\n" ));
+      error = FT_THROW( Invalid_Table );
+      goto Exit;
+    }
+
+    /* Now use `totalSfntSize'. */
+    if ( FT_REALLOC( sfnt,
+                     12 + woff.num_tables * 16UL,
+                     woff.totalSfntSize ) )
+      goto Exit;
+
+    sfnt_header = sfnt + 12;
+
+    /* Write the tables. */
+
+    for ( nn = 0; nn < woff.num_tables; nn++ )
+    {
+      WOFF_Table  table = tables + nn;
+
+
+      /* Write SFNT table entry. */
+      WRITE_ULONG( sfnt_header, table->Tag );
+      WRITE_ULONG( sfnt_header, table->CheckSum );
+      WRITE_ULONG( sfnt_header, table->OrigOffset );
+      WRITE_ULONG( sfnt_header, table->OrigLength );
+
+      /* Write table data. */
+      if ( FT_STREAM_SEEK( table->Offset )     ||
+           FT_FRAME_ENTER( table->CompLength ) )
+        goto Exit;
+
+      if ( table->CompLength == table->OrigLength )
+      {
+        /* Uncompressed data; just copy. */
+        ft_memcpy( sfnt + table->OrigOffset,
+                   stream->cursor,
+                   table->OrigLength );
+      }
+      else
+      {
+#ifdef FT_CONFIG_OPTION_USE_ZLIB
+
+        /* Uncompress with zlib. */
+        FT_ULong  output_len = table->OrigLength;
+
+
+        error = FT_Gzip_Uncompress( memory,
+                                    sfnt + table->OrigOffset, &output_len,
+                                    stream->cursor, table->CompLength );
+        if ( error )
+          goto Exit;
+        if ( output_len != table->OrigLength )
+        {
+          FT_ERROR(( "woff_font_open: compressed table length mismatch\n" ));
+          error = FT_THROW( Invalid_Table );
+          goto Exit;
+        }
+
+#else /* !FT_CONFIG_OPTION_USE_ZLIB */
+
+        error = FT_THROW( Unimplemented_Feature );
+        goto Exit;
+
+#endif /* !FT_CONFIG_OPTION_USE_ZLIB */
+      }
+
+      FT_FRAME_EXIT();
+
+      /* We don't check whether the padding bytes in the WOFF file are     */
+      /* actually '\0'.  For the output, however, we do set them properly. */
+      sfnt_offset = table->OrigOffset + table->OrigLength;
+      while ( sfnt_offset & 3 )
+      {
+        sfnt[sfnt_offset] = '\0';
+        sfnt_offset++;
+      }
+    }
+
+    /* Ok!  Finally ready.  Swap out stream and return. */
+    FT_Stream_OpenMemory( sfnt_stream, sfnt, woff.totalSfntSize );
+    sfnt_stream->memory = stream->memory;
+    sfnt_stream->close  = sfnt_stream_close;
+
+    FT_Stream_Free(
+      face->root.stream,
+      ( face->root.face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
+
+    face->root.stream = sfnt_stream;
+
+    face->root.face_flags &= ~FT_FACE_FLAG_EXTERNAL_STREAM;
+
+  Exit:
+    FT_FREE( tables );
+    FT_FREE( indices );
+
+    if ( error )
+    {
+      FT_FREE( sfnt );
+      FT_Stream_Close( sfnt_stream );
+      FT_FREE( sfnt_stream );
+    }
+
+    return error;
+  }
+
+
+#undef WRITE_USHORT
+#undef WRITE_ULONG
+
+
+/* END */
diff --git a/src/sfnt/sfwoff.h b/src/sfnt/sfwoff.h
new file mode 100644
index 0000000..15495c3
--- /dev/null
+++ b/src/sfnt/sfwoff.h
@@ -0,0 +1,41 @@
+/****************************************************************************
+ *
+ * sfwoff.h
+ *
+ *   WOFFF format management (specification).
+ *
+ * Copyright (C) 1996-2019 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 SFWOFF_H_
+#define SFWOFF_H_
+
+
+#include <ft2build.h>
+#include FT_INTERNAL_SFNT_H
+#include FT_INTERNAL_OBJECTS_H
+
+
+FT_BEGIN_HEADER
+
+
+  FT_LOCAL( FT_Error )
+  woff_open_font( FT_Stream  stream,
+                  TT_Face    face );
+
+
+FT_END_HEADER
+
+#endif /* SFWOFF_H_ */
+
+
+/* END */
diff --git a/src/sfnt/ttbdf.c b/src/sfnt/ttbdf.c
index a85a687..853599f 100644
--- a/src/sfnt/ttbdf.c
+++ b/src/sfnt/ttbdf.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded BDF properties (body).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -34,7 +34,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttbdf
+#define FT_COMPONENT  ttbdf
 
 
   FT_LOCAL_DEF( void )
diff --git a/src/sfnt/ttbdf.h b/src/sfnt/ttbdf.h
index 5cee599..e4164e6 100644
--- a/src/sfnt/ttbdf.h
+++ b/src/sfnt/ttbdf.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded BDF properties (specification).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index a3a8c52..683f3b1 100644
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -4,7 +4,7 @@
  *
  *   TrueType character mapping table (cmap) support (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttcmap
+#define FT_COMPONENT  ttcmap
 
 
 #define TT_PEEK_SHORT   FT_PEEK_SHORT
@@ -2368,10 +2368,7 @@
         /* if `gindex' is invalid, the remaining values */
         /* in this group are invalid, too               */
         if ( gindex >= (FT_UInt)face->num_glyphs )
-        {
-          gindex = 0;
           continue;
-        }
 
         cmap->cur_charcode = char_code;
         cmap->cur_gindex   = gindex;
@@ -3661,7 +3658,7 @@
   tt_get_glyph_name( TT_Face  face,
                      FT_UInt  idx )
   {
-    FT_String*  PSname;
+    FT_String*  PSname = NULL;
 
 
     tt_face_get_ps_name( face, idx, &PSname );
@@ -3681,6 +3678,9 @@
     FT_UNUSED( pointer );
 
 
+    if ( !psnames->unicodes_init )
+      return FT_THROW( Unimplemented_Feature );
+
     return psnames->unicodes_init( memory,
                                    unicodes,
                                    face->root.num_glyphs,
diff --git a/src/sfnt/ttcmap.h b/src/sfnt/ttcmap.h
index 14a700d..36801c9 100644
--- a/src/sfnt/ttcmap.h
+++ b/src/sfnt/ttcmap.h
@@ -4,7 +4,7 @@
  *
  *   TrueType character mapping table (cmap) support (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttcmapc.h b/src/sfnt/ttcmapc.h
index 11d3e98..ace9e69 100644
--- a/src/sfnt/ttcmapc.h
+++ b/src/sfnt/ttcmapc.h
@@ -4,7 +4,7 @@
  *
  *   TT CMAP classes definitions (specification only).
  *
- * Copyright 2009-2018 by
+ * Copyright (C) 2009-2019 by
  * Oran Agra and Mickey Gabel.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttcolr.c b/src/sfnt/ttcolr.c
index a8ff026..6b537d9 100644
--- a/src/sfnt/ttcolr.c
+++ b/src/sfnt/ttcolr.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType colored glyph layer support (body).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -77,7 +77,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttcolr
+#define FT_COMPONENT  ttcolr
 
 
   FT_LOCAL_DEF( FT_Error )
diff --git a/src/sfnt/ttcolr.h b/src/sfnt/ttcolr.h
index 46cc081..817489a 100644
--- a/src/sfnt/ttcolr.h
+++ b/src/sfnt/ttcolr.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType colored glyph layer support (specification).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/src/sfnt/ttcpal.c b/src/sfnt/ttcpal.c
index b4b60e2..3482169 100644
--- a/src/sfnt/ttcpal.c
+++ b/src/sfnt/ttcpal.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType color palette support (body).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
@@ -68,7 +68,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttcpal
+#define FT_COMPONENT  ttcpal
 
 
   FT_LOCAL_DEF( FT_Error )
@@ -121,6 +121,9 @@
     if ( cpal->num_colors * COLOR_SIZE > table_size - colors_offset )
       goto InvalidTable;
 
+    if ( face->palette_data.num_palette_entries > cpal->num_colors )
+      goto InvalidTable;
+
     cpal->color_indices = p;
     cpal->colors        = (FT_Byte*)( table + colors_offset );
 
@@ -217,7 +220,8 @@
                        face->palette_data.num_palette_entries ) )
       goto NoCpal;
 
-    tt_face_palette_set( face, 0 );
+    if ( tt_face_palette_set( face, 0 ) )
+      goto InvalidTable;
 
     return FT_Err_Ok;
 
@@ -228,6 +232,8 @@
     FT_FRAME_RELEASE( table );
     FT_FREE( cpal );
 
+    face->cpal = NULL;
+
     /* arrays in `face->palette_data' and `face->palette' */
     /* are freed in `sfnt_done_face'                      */
 
@@ -264,20 +270,20 @@
     FT_Color*  q;
     FT_Color*  limit;
 
-    FT_ULong  record_offset;
+    FT_UShort  color_index;
 
 
     if ( !cpal || palette_index >= face->palette_data.num_palettes )
       return FT_THROW( Invalid_Argument );
 
-    offset        = cpal->color_indices + 2 * palette_index;
-    record_offset = COLOR_SIZE * FT_PEEK_USHORT( offset );
+    offset      = cpal->color_indices + 2 * palette_index;
+    color_index = FT_PEEK_USHORT( offset );
 
-    if ( record_offset + COLOR_SIZE * face->palette_data.num_palette_entries >
-           cpal->table_size )
+    if ( color_index + face->palette_data.num_palette_entries >
+           cpal->num_colors )
       return FT_THROW( Invalid_Table );
 
-    p     = cpal->colors + record_offset;
+    p     = cpal->colors + COLOR_SIZE * color_index;
     q     = face->palette;
     limit = q + face->palette_data.num_palette_entries;
 
diff --git a/src/sfnt/ttcpal.h b/src/sfnt/ttcpal.h
index 424ef35..d1b244f 100644
--- a/src/sfnt/ttcpal.h
+++ b/src/sfnt/ttcpal.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType color palette support (specification).
  *
- * Copyright 2018 by
+ * Copyright (C) 2018-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Originally written by Shao Yu Zhang <shaozhang@fb.com>.
diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c
index 48ad417..8d1b781 100644
--- a/src/sfnt/ttkern.c
+++ b/src/sfnt/ttkern.c
@@ -5,7 +5,7 @@
  *   Load the basic TrueType kerning table.  This doesn't handle
  *   kerning data within the GPOS table at the moment.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttkern
+#define FT_COMPONENT  ttkern
 
 
 #undef  TT_KERN_INDEX
diff --git a/src/sfnt/ttkern.h b/src/sfnt/ttkern.h
index c26bb8d..5f283e5 100644
--- a/src/sfnt/ttkern.h
+++ b/src/sfnt/ttkern.h
@@ -5,7 +5,7 @@
  *   Load the basic TrueType kerning table.  This doesn't handle
  *   kerning data within the GPOS table at the moment.
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c
index f3fed8f..5443bf4 100644
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -5,7 +5,7 @@
  *   Load the basic TrueType tables, i.e., tables that can be either in
  *   TTF or OTF fonts (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttload
+#define FT_COMPONENT  ttload
 
 
   /**************************************************************************
@@ -638,10 +638,10 @@
         FT_FRAME_LONG  ( Magic_Number ),
         FT_FRAME_USHORT( Flags ),
         FT_FRAME_USHORT( Units_Per_EM ),
-        FT_FRAME_LONG  ( Created[0] ),
-        FT_FRAME_LONG  ( Created[1] ),
-        FT_FRAME_LONG  ( Modified[0] ),
-        FT_FRAME_LONG  ( Modified[1] ),
+        FT_FRAME_ULONG ( Created[0] ),
+        FT_FRAME_ULONG ( Created[1] ),
+        FT_FRAME_ULONG ( Modified[0] ),
+        FT_FRAME_ULONG ( Modified[1] ),
         FT_FRAME_SHORT ( xMin ),
         FT_FRAME_SHORT ( yMin ),
         FT_FRAME_SHORT ( xMax ),
diff --git a/src/sfnt/ttload.h b/src/sfnt/ttload.h
index 21d9cb6..cc18c18 100644
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -5,7 +5,7 @@
  *   Load the basic TrueType tables, i.e., tables that can be either in
  *   TTF or OTF fonts (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttmtx.c b/src/sfnt/ttmtx.c
index 8edf4e6..b6725c9 100644
--- a/src/sfnt/ttmtx.c
+++ b/src/sfnt/ttmtx.c
@@ -4,7 +4,7 @@
  *
  *   Load the metrics tables common to TTF and OTF fonts (body).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,7 +45,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttmtx
+#define FT_COMPONENT  ttmtx
 
 
   /**************************************************************************
@@ -280,7 +280,7 @@
       else
       {
         table_pos += 4 * ( k - 1 );
-        if ( table_pos + 4 > table_end )
+        if ( table_pos + 2 > table_end )
           goto NoData;
 
         if ( FT_STREAM_SEEK( table_pos ) ||
@@ -292,7 +292,9 @@
           *abearing = 0;
         else
         {
-          if ( !FT_STREAM_SEEK( table_pos ) )
+          if ( FT_STREAM_SEEK( table_pos ) )
+            *abearing = 0;
+          else
             (void)FT_READ_SHORT( *abearing );
         }
       }
diff --git a/src/sfnt/ttmtx.h b/src/sfnt/ttmtx.h
index f360b45..5b0b60b 100644
--- a/src/sfnt/ttmtx.h
+++ b/src/sfnt/ttmtx.h
@@ -4,7 +4,7 @@
  *
  *   Load the metrics tables common to TTF and OTF fonts (specification).
  *
- * Copyright 2006-2018 by
+ * Copyright (C) 2006-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttpost.c b/src/sfnt/ttpost.c
index 7148301..636a0a0 100644
--- a/src/sfnt/ttpost.c
+++ b/src/sfnt/ttpost.c
@@ -5,7 +5,7 @@
  *   PostScript name table processing for TrueType and OpenType fonts
  *   (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,10 +45,10 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttpost
+#define FT_COMPONENT  ttpost
 
 
-  /* If this configuration macro is defined, we rely on the `PSNames' */
+  /* If this configuration macro is defined, we rely on the `psnames' */
   /* module to grab the glyph names.                                  */
 
 #ifdef FT_CONFIG_OPTION_POSTSCRIPT_NAMES
@@ -62,9 +62,9 @@
 #else /* FT_CONFIG_OPTION_POSTSCRIPT_NAMES */
 
 
-   /* Otherwise, we ignore the `PSNames' module, and provide our own  */
+   /* Otherwise, we ignore the `psnames' module, and provide our own  */
    /* table of Mac names.  Thus, it is possible to build a version of */
-   /* FreeType without the Type 1 driver & PSNames module.            */
+   /* FreeType without the Type 1 driver & psnames module.            */
 
 #define MAC_NAME( x )  (FT_String*)tt_post_default_names[x]
 
diff --git a/src/sfnt/ttpost.h b/src/sfnt/ttpost.h
index a6f2cf2..812a0fc 100644
--- a/src/sfnt/ttpost.h
+++ b/src/sfnt/ttpost.h
@@ -5,7 +5,7 @@
  *   PostScript name table processing for TrueType and OpenType fonts
  *   (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/sfnt/ttsbit.c b/src/sfnt/ttsbit.c
index 322c000..23bd9d7 100644
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded bitmap support (body).
  *
- * Copyright 2005-2018 by
+ * Copyright (C) 2005-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * Copyright 2013 by Google, Inc.
@@ -43,7 +43,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttsbit
+#define FT_COMPONENT  ttsbit
 
 
   FT_LOCAL_DEF( FT_Error )
@@ -1014,8 +1014,8 @@
     for ( nn = 0; nn < num_components; nn++ )
     {
       FT_UInt  gindex = FT_NEXT_USHORT( p );
-      FT_Byte  dx     = FT_NEXT_BYTE( p );
-      FT_Byte  dy     = FT_NEXT_BYTE( p );
+      FT_Char  dx     = FT_NEXT_CHAR( p );
+      FT_Char  dy     = FT_NEXT_CHAR( p );
 
 
       /* NB: a recursive call */
diff --git a/src/sfnt/ttsbit.h b/src/sfnt/ttsbit.h
index 99bf560..5ab8ff5 100644
--- a/src/sfnt/ttsbit.h
+++ b/src/sfnt/ttsbit.h
@@ -4,7 +4,7 @@
  *
  *   TrueType and OpenType embedded bitmap support (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/smooth/Jamfile b/src/smooth/Jamfile
index 9957d5e..6ca1ced 100644
--- a/src/smooth/Jamfile
+++ b/src/smooth/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/smooth Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 8f2a600..fd357a5 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -4,7 +4,7 @@
  *
  *   A new `perfect' anti-aliasing renderer (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,10 +45,10 @@
    * This is a new anti-aliasing scan-converter for FreeType 2.  The
    * algorithm used here is _very_ different from the one in the standard
    * `ftraster' module.  Actually, `ftgrays' computes the _exact_
-   * coverage of the outline on each pixel cell.
+   * coverage of the outline on each pixel cell by straight segments.
    *
    * It is based on ideas that I initially found in Raph Levien's
-   * excellent LibArt graphics library (see http://www.levien.com/libart
+   * excellent LibArt graphics library (see https://www.levien.com/libart
    * for more information, though the web pages do not tell anything
    * about the renderer; you'll have to dive into the source code to
    * understand how it works).
@@ -58,6 +58,14 @@
    * different way, and I don't use sorted vector paths.  Also, it doesn't
    * use floating point values.
    *
+   * Bézier segments are flattened by splitting them until their deviation
+   * from straight line becomes much smaller than a pixel.  Therefore, the
+   * pixel coverage by a Bézier curve is calculated approximately.  To
+   * estimate the deviation, we use the distance from the control point
+   * to the conic chord centre or the cubic chord trisection.  These
+   * distances vanish fast after each split.  In the conic case, they vanish
+   * predictably and the number of necessary splits can be calculated.
+   *
    * This renderer has the following advantages:
    *
    * - It doesn't need an intermediate bitmap.  Instead, one can supply a
@@ -67,7 +75,7 @@
    *   callback.
    *
    * - A perfect anti-aliaser, i.e., it computes the _exact_ coverage on
-   *   each pixel cell.
+   *   each pixel cell by straight segments.
    *
    * - It performs a single pass on the outline (the `standard' FT2
    *   renderer makes two passes).
@@ -75,7 +83,7 @@
    * - It can easily be modified to render to _any_ number of gray levels
    *   cheaply.
    *
-   * - For small (< 20) pixel sizes, it is faster than the standard
+   * - For small (< 80) pixel sizes, it is faster than the standard
    *   renderer.
    *
    */
@@ -88,7 +96,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_smooth
+#define FT_COMPONENT  smooth
 
 
 #ifdef STANDALONE_
@@ -222,10 +230,10 @@
 #endif
 
 #define FT_THROW( e )                               \
-          ( FT_Throw( FT_ERR_CAT( ErrRaster, e ),   \
+          ( FT_Throw( FT_ERR_CAT( ErrRaster_, e ),  \
                       __LINE__,                     \
                       __FILE__ )                  | \
-            FT_ERR_CAT( ErrRaster, e )            )
+            FT_ERR_CAT( ErrRaster_, e )           )
 
 #else /* !FT_DEBUG_LEVEL_TRACE */
 
@@ -327,17 +335,9 @@
   /* must be at least 6 bits! */
 #define PIXEL_BITS  8
 
-#undef FLOOR
-#undef CEILING
-#undef TRUNC
-#undef SCALED
-
 #define ONE_PIXEL       ( 1 << PIXEL_BITS )
-#define TRUNC( x )      ( (TCoord)( (x) >> PIXEL_BITS ) )
-#define SUBPIXELS( x )  ( (TPos)(x) * ONE_PIXEL )
-#define FLOOR( x )      ( (x) & -ONE_PIXEL )
-#define CEILING( x )    ( ( (x) + ONE_PIXEL - 1 ) & -ONE_PIXEL )
-#define ROUND( x )      ( ( (x) + ONE_PIXEL / 2 ) & -ONE_PIXEL )
+#define TRUNC( x )      (TCoord)( (x) >> PIXEL_BITS )
+#define FRACT( x )      (TCoord)( (x) & ( ONE_PIXEL - 1 ) )
 
 #if PIXEL_BITS >= 6
 #define UPSCALE( x )    ( (x) * ( ONE_PIXEL >> 6 ) )
@@ -388,9 +388,9 @@
 #define FT_UDIVPREP( c, b )                                        \
   long  b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
                     : 0
-#define FT_UDIV( a, b )                                        \
-  ( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >>   \
-    ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
+#define FT_UDIV( a, b )                                                \
+  (TCoord)( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >>   \
+            ( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
 
 
   /**************************************************************************
@@ -432,6 +432,9 @@
 #define FT_MAX_GRAY_POOL  ( 2048 / sizeof ( TCell ) )
 #endif
 
+  /* FT_Span buffer size for direct rendering only */
+#define FT_MAX_GRAY_SPANS  10
+
 
 #if defined( _MSC_VER )      /* Visual C++ (and Intel C++) */
   /* We disable the warning `structure was padded due to   */
@@ -465,6 +468,8 @@
 
     FT_Raster_Span_Func  render_span;
     void*                render_span_data;
+    FT_Span              spans[FT_MAX_GRAY_SPANS];
+    int                  num_spans;
 
   } gray_TWorker, *gray_PWorker;
 
@@ -516,7 +521,7 @@
 
   /**************************************************************************
    *
-   * Record the current cell in the table.
+   * Record the current cell in the linked list.
    */
   static void
   gray_record_cell( RAS_ARG )
@@ -526,10 +531,9 @@
 
 
     pcell = &ras.ycells[ras.ey - ras.min_ey];
-    for (;;)
+    while ( ( cell = *pcell ) )
     {
-      cell = *pcell;
-      if ( !cell || cell->x > x )
+      if ( cell->x > x )
         break;
 
       if ( cell->x == x )
@@ -577,16 +581,13 @@
     /* Note that if a cell is to the left of the clipping region, it is    */
     /* actually set to the (min_ex-1) horizontal position.                 */
 
-    if ( ex < ras.min_ex )
-      ex = ras.min_ex - 1;
-
     /* record the current one if it is valid and substantial */
     if ( !ras.invalid && ( ras.area || ras.cover ) )
       gray_record_cell( RAS_VAR );
 
     ras.area  = 0;
     ras.cover = 0;
-    ras.ex    = ex;
+    ras.ex    = FT_MAX( ex, ras.min_ex - 1 );
     ras.ey    = ey;
 
     ras.invalid = ( ey >= ras.max_ey || ey < ras.min_ey ||
@@ -622,8 +623,8 @@
       return;
     }
 
-    fx1   = (TCoord)( x1 - SUBPIXELS( ex1 ) );
-    fx2   = (TCoord)( x2 - SUBPIXELS( ex2 ) );
+    fx1   = FRACT( x1 );
+    fx2   = FRACT( x2 );
 
     /* everything is located in a single cell.  That is easy! */
     /*                                                        */
@@ -650,6 +651,9 @@
       dx    = -dx;
     }
 
+    /* the fractional part of y-delta is mod/dx. It is essential to */
+    /* keep track of its accumulation for accurate rendering.       */
+    /* XXX: y-delta and x-delta below should be related.            */
     FT_DIV_MOD( TCoord, p, dx, delta, mod );
 
     ras.area  += (TArea)( ( fx1 + first ) * delta );
@@ -715,8 +719,8 @@
          ( ey1 <  ras.min_ey && ey2 <  ras.min_ey ) )
       goto End;
 
-    fy1 = (TCoord)( ras.y - SUBPIXELS( ey1 ) );
-    fy2 = (TCoord)( to_y - SUBPIXELS( ey2 ) );
+    fy1 = FRACT( ras.y );
+    fy2 = FRACT( to_y );
 
     /* everything is on a single scanline */
     if ( ey1 == ey2 )
@@ -732,7 +736,7 @@
     if ( dx == 0 )
     {
       TCoord  ex     = TRUNC( ras.x );
-      TCoord  two_fx = (TCoord)( ( ras.x - SUBPIXELS( ex ) ) << 1 );
+      TCoord  two_fx = FRACT( ras.x ) << 1;
       TArea   area;
 
 
@@ -787,6 +791,8 @@
       dy    = -dy;
     }
 
+    /* the fractional part of x-delta is mod/dy. It is essential to */
+    /* keep track of its accumulation for accurate rendering.       */
     FT_DIV_MOD( TCoord, p, dy, delta, mod );
 
     x = ras.x + delta;
@@ -843,8 +849,9 @@
   gray_render_line( RAS_ARG_ TPos  to_x,
                              TPos  to_y )
   {
-    TPos    dx, dy, fx1, fy1, fx2, fy2;
-    TCoord  ex1, ex2, ey1, ey2;
+    TPos    dx, dy;
+    TCoord  fx1, fy1, fx2, fy2;
+    TCoord  ex1, ey1, ex2, ey2;
 
 
     ey1 = TRUNC( ras.y );
@@ -858,8 +865,8 @@
     ex1 = TRUNC( ras.x );
     ex2 = TRUNC( to_x );
 
-    fx1 = ras.x - SUBPIXELS( ex1 );
-    fy1 = ras.y - SUBPIXELS( ey1 );
+    fx1 = FRACT( ras.x );
+    fy1 = FRACT( ras.y );
 
     dx = to_x - ras.x;
     dy = to_y - ras.y;
@@ -868,8 +875,8 @@
       ;
     else if ( dy == 0 ) /* ex1 != ex2 */  /* any horizontal line */
     {
-      ex1 = ex2;
-      gray_set_cell( RAS_VAR_ ex1, ey1 );
+      gray_set_cell( RAS_VAR_ ex2, ey2 );
+      goto End;
     }
     else if ( dx == 0 )
     {
@@ -896,7 +903,7 @@
     }
     else                                  /* any other line */
     {
-      TPos  prod = dx * fy1 - dy * fx1;
+      TPos  prod = dx * (TPos)fy1 - dy * (TPos)fx1;
       FT_UDIVPREP( ex1 != ex2, dx );
       FT_UDIVPREP( ey1 != ey2, dy );
 
@@ -910,7 +917,7 @@
                   prod - dx * ONE_PIXEL                  >  0 ) /* left */
         {
           fx2 = 0;
-          fy2 = (TPos)FT_UDIV( -prod, -dx );
+          fy2 = FT_UDIV( -prod, -dx );
           prod -= dy * ONE_PIXEL;
           ras.cover += ( fy2 - fy1 );
           ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -922,7 +929,7 @@
                   prod - dx * ONE_PIXEL + dy * ONE_PIXEL >  0 ) /* up */
         {
           prod -= dx * ONE_PIXEL;
-          fx2 = (TPos)FT_UDIV( -prod, dy );
+          fx2 = FT_UDIV( -prod, dy );
           fy2 = ONE_PIXEL;
           ras.cover += ( fy2 - fy1 );
           ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -935,7 +942,7 @@
         {
           prod += dy * ONE_PIXEL;
           fx2 = ONE_PIXEL;
-          fy2 = (TPos)FT_UDIV( prod, dx );
+          fy2 = FT_UDIV( prod, dx );
           ras.cover += ( fy2 - fy1 );
           ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
           fx1 = 0;
@@ -945,7 +952,7 @@
         else /* ( prod                  + dy * ONE_PIXEL <  0 &&
                   prod                                   >  0 )    down */
         {
-          fx2 = (TPos)FT_UDIV( prod, -dy );
+          fx2 = FT_UDIV( prod, -dy );
           fy2 = 0;
           prod += dx * ONE_PIXEL;
           ras.cover += ( fy2 - fy1 );
@@ -959,8 +966,8 @@
       } while ( ex1 != ex2 || ey1 != ey2 );
     }
 
-    fx2 = to_x - SUBPIXELS( ex2 );
-    fy2 = to_y - SUBPIXELS( ey2 );
+    fx2 = FRACT( to_x );
+    fy2 = FRACT( to_y );
 
     ras.cover += ( fy2 - fy1 );
     ras.area  += ( fy2 - fy1 ) * ( fx1 + fx2 );
@@ -979,16 +986,18 @@
 
 
     base[4].x = base[2].x;
-    b = base[1].x;
-    a = base[3].x = ( base[2].x + b ) / 2;
-    b = base[1].x = ( base[0].x + b ) / 2;
-    base[2].x = ( a + b ) / 2;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    base[3].x = b >> 1;
+    base[2].x = ( a + b ) >> 2;
+    base[1].x = a >> 1;
 
     base[4].y = base[2].y;
-    b = base[1].y;
-    a = base[3].y = ( base[2].y + b ) / 2;
-    b = base[1].y = ( base[0].y + b ) / 2;
-    base[2].y = ( a + b ) / 2;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    base[3].y = b >> 1;
+    base[2].y = ( a + b ) >> 2;
+    base[1].y = a >> 1;
   }
 
 
@@ -1042,12 +1051,11 @@
     /* many times as there are trailing zeros in the counter.         */
     do
     {
-      split = 1;
-      while ( ( draw & split ) == 0 )
+      split = draw & ( -draw );  /* isolate the rightmost 1-bit */
+      while ( ( split >>= 1 ) )
       {
         gray_split_conic( arc );
         arc += 2;
-        split <<= 1;
       }
 
       gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
@@ -1060,28 +1068,32 @@
   static void
   gray_split_cubic( FT_Vector*  base )
   {
-    TPos  a, b, c, d;
+    TPos  a, b, c;
 
 
     base[6].x = base[3].x;
-    c = base[1].x;
-    d = base[2].x;
-    base[1].x = a = ( base[0].x + c ) / 2;
-    base[5].x = b = ( base[3].x + d ) / 2;
-    c = ( c + d ) / 2;
-    base[2].x = a = ( a + c ) / 2;
-    base[4].x = b = ( b + c ) / 2;
-    base[3].x = ( a + b ) / 2;
+    a = base[0].x + base[1].x;
+    b = base[1].x + base[2].x;
+    c = base[2].x + base[3].x;
+    base[5].x = c >> 1;
+    c += b;
+    base[4].x = c >> 2;
+    base[1].x = a >> 1;
+    a += b;
+    base[2].x = a >> 2;
+    base[3].x = ( a + c ) >> 3;
 
     base[6].y = base[3].y;
-    c = base[1].y;
-    d = base[2].y;
-    base[1].y = a = ( base[0].y + c ) / 2;
-    base[5].y = b = ( base[3].y + d ) / 2;
-    c = ( c + d ) / 2;
-    base[2].y = a = ( a + c ) / 2;
-    base[4].y = b = ( b + c ) / 2;
-    base[3].y = ( a + b ) / 2;
+    a = base[0].y + base[1].y;
+    b = base[1].y + base[2].y;
+    c = base[2].y + base[3].y;
+    base[5].y = c >> 1;
+    c += b;
+    base[4].y = c >> 2;
+    base[1].y = a >> 1;
+    a += b;
+    base[2].y = a >> 2;
+    base[3].y = ( a + c ) >> 3;
   }
 
 
@@ -1092,9 +1104,6 @@
   {
     FT_Vector   bez_stack[16 * 3 + 1];  /* enough to accommodate bisections */
     FT_Vector*  arc = bez_stack;
-    TPos        dx, dy, dx_, dy_;
-    TPos        dx1, dy1, dx2, dy2;
-    TPos        L, s, s_limit;
 
 
     arc[0].x = UPSCALE( to->x );
@@ -1123,45 +1132,13 @@
 
     for (;;)
     {
-      /* Decide whether to split or draw. See `Rapid Termination          */
-      /* Evaluation for Recursive Subdivision of Bezier Curves' by Thomas */
-      /* F. Hain, at                                                      */
-      /* http://www.cis.southalabama.edu/~hain/general/Publications/Bezier/Camera-ready%20CISST02%202.pdf */
-
-      /* dx and dy are x and y components of the P0-P3 chord vector. */
-      dx = dx_ = arc[3].x - arc[0].x;
-      dy = dy_ = arc[3].y - arc[0].y;
-
-      L = FT_HYPOT( dx_, dy_ );
-
-      /* Avoid possible arithmetic overflow below by splitting. */
-      if ( L > 32767 )
-        goto Split;
-
-      /* Max deviation may be as much as (s/L) * 3/4 (if Hain's v = 1). */
-      s_limit = L * (TPos)( ONE_PIXEL / 6 );
-
-      /* s is L * the perpendicular distance from P1 to the line P0-P3. */
-      dx1 = arc[1].x - arc[0].x;
-      dy1 = arc[1].y - arc[0].y;
-      s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx1 ), MUL_LONG( dx, dy1 ) ) );
-
-      if ( s > s_limit )
-        goto Split;
-
-      /* s is L * the perpendicular distance from P2 to the line P0-P3. */
-      dx2 = arc[2].x - arc[0].x;
-      dy2 = arc[2].y - arc[0].y;
-      s = FT_ABS( SUB_LONG( MUL_LONG( dy, dx2 ), MUL_LONG( dx, dy2 ) ) );
-
-      if ( s > s_limit )
-        goto Split;
-
-      /* Split super curvy segments where the off points are so far
-         from the chord that the angles P0-P1-P3 or P0-P2-P3 become
-         acute as detected by appropriate dot products. */
-      if ( dx1 * ( dx1 - dx ) + dy1 * ( dy1 - dy ) > 0 ||
-           dx2 * ( dx2 - dx ) + dy2 * ( dy2 - dy ) > 0 )
+      /* with each split, control points quickly converge towards  */
+      /* chord trisection points and the vanishing distances below */
+      /* indicate when the segment is flat enough to draw          */
+      if ( FT_ABS( 2 * arc[0].x - 3 * arc[1].x + arc[3].x ) > ONE_PIXEL / 2 ||
+           FT_ABS( 2 * arc[0].y - 3 * arc[1].y + arc[3].y ) > ONE_PIXEL / 2 ||
+           FT_ABS( arc[0].x - 3 * arc[2].x + 2 * arc[3].x ) > ONE_PIXEL / 2 ||
+           FT_ABS( arc[0].y - 3 * arc[2].y + 2 * arc[3].y ) > ONE_PIXEL / 2 )
         goto Split;
 
       gray_render_line( RAS_VAR_ arc[0].x, arc[0].y );
@@ -1236,8 +1213,6 @@
   {
     /* scale the coverage from 0..(ONE_PIXEL*ONE_PIXEL*2) to 0..256  */
     coverage >>= PIXEL_BITS * 2 + 1 - 8;
-    if ( coverage < 0 )
-      coverage = -coverage - 1;
 
     /* compute the line's coverage depending on the outline fill rule */
     if ( ras.outline.flags & FT_OUTLINE_EVEN_ODD_FILL )
@@ -1247,23 +1222,30 @@
       if ( coverage >= 256 )
         coverage = 511 - coverage;
     }
-    else
+    else  /* default non-zero winding rule */
     {
-      /* normal non-zero winding rule */
+      if ( coverage < 0 )
+        coverage = ~coverage;  /* the same as -coverage - 1 */
+
       if ( coverage >= 256 )
         coverage = 255;
     }
 
-    if ( ras.render_span )  /* for FT_RASTER_FLAG_DIRECT only */
+    if ( ras.num_spans >= 0 )  /* for FT_RASTER_FLAG_DIRECT only */
     {
-      FT_Span  span;
+      FT_Span*  span = ras.spans + ras.num_spans++;
 
 
-      span.x        = (short)x;
-      span.len      = (unsigned short)acount;
-      span.coverage = (unsigned char)coverage;
+      span->x        = (short)x;
+      span->len      = (unsigned short)acount;
+      span->coverage = (unsigned char)coverage;
 
-      ras.render_span( y, 1, &span, ras.render_span_data );
+      if ( ras.num_spans == FT_MAX_GRAY_SPANS )
+      {
+        /* flush the span buffer and reset the count */
+        ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
+        ras.num_spans = 0;
+      }
     }
     else
     {
@@ -1277,14 +1259,29 @@
        */
       switch ( acount )
       {
-      case 7: *q++ = c;
-      case 6: *q++ = c;
-      case 5: *q++ = c;
-      case 4: *q++ = c;
-      case 3: *q++ = c;
-      case 2: *q++ = c;
-      case 1: *q   = c;
-      case 0: break;
+      case 7:
+        *q++ = c;
+        /* fall through */
+      case 6:
+        *q++ = c;
+        /* fall through */
+      case 5:
+        *q++ = c;
+        /* fall through */
+      case 4:
+        *q++ = c;
+        /* fall through */
+      case 3:
+        *q++ = c;
+        /* fall through */
+      case 2:
+        *q++ = c;
+        /* fall through */
+      case 1:
+        *q = c;
+        /* fall through */
+      case 0:
+        break;
       default:
         FT_MEM_SET( q, c, acount );
       }
@@ -1322,6 +1319,13 @@
 
       if ( cover != 0 )
         gray_hline( RAS_VAR_ x, y, cover, ras.max_ex - x );
+
+      if ( ras.num_spans > 0 )  /* for FT_RASTER_FLAG_DIRECT only */
+      {
+        /* flush the span buffer and reset the count */
+        ras.render_span( y, ras.num_spans, ras.spans, ras.render_span_data );
+        ras.num_spans = 0;
+      }
     }
   }
 
@@ -1371,7 +1375,7 @@
                         void*                    user )
   {
 #undef SCALED
-#define SCALED( x )  ( ( (x) << shift ) - delta )
+#define SCALED( x )  ( (x) * ( 1L << shift ) - delta )
 
     FT_Vector   v_last;
     FT_Vector   v_control;
@@ -1631,7 +1635,7 @@
   gray_convert_glyph_inner( RAS_ARG,
                             int  continued )
   {
-    volatile int  error = 0;
+    int  error;
 
 
     if ( ft_setjmp( ras.jump_buffer ) == 0 )
@@ -1755,7 +1759,6 @@
   {
     const FT_Outline*  outline    = (const FT_Outline*)params->source;
     const FT_Bitmap*   target_map = params->target;
-    FT_BBox            clip;
 
 #ifndef FT_STATIC_RASTER
     gray_TWorker  worker[1];
@@ -1792,6 +1795,12 @@
 
       ras.render_span      = (FT_Raster_Span_Func)params->gray_spans;
       ras.render_span_data = params->user;
+      ras.num_spans        = 0;
+
+      ras.min_ex = params->clip_box.xMin;
+      ras.min_ey = params->clip_box.yMin;
+      ras.max_ex = params->clip_box.xMax;
+      ras.max_ey = params->clip_box.yMax;
     }
     else
     {
@@ -1816,27 +1825,15 @@
 
       ras.render_span      = (FT_Raster_Span_Func)NULL;
       ras.render_span_data = NULL;
+      ras.num_spans        = -1;  /* invalid */
+
+      ras.min_ex = 0;
+      ras.min_ey = 0;
+      ras.max_ex = (FT_Pos)target_map->width;
+      ras.max_ey = (FT_Pos)target_map->rows;
     }
 
-    /* compute clipping box */
-    if ( params->flags & FT_RASTER_FLAG_DIRECT &&
-         params->flags & FT_RASTER_FLAG_CLIP   )
-      clip = params->clip_box;
-    else
-    {
-      /* compute clip box from target pixmap */
-      clip.xMin = 0;
-      clip.yMin = 0;
-      clip.xMax = (FT_Pos)target_map->width;
-      clip.yMax = (FT_Pos)target_map->rows;
-    }
-
-    /* clip to target bitmap, exit if nothing to do */
-    ras.min_ex = clip.xMin;
-    ras.min_ey = clip.yMin;
-    ras.max_ex = clip.xMax;
-    ras.max_ey = clip.yMax;
-
+    /* exit if nothing to do */
     if ( ras.max_ex <= ras.min_ex || ras.max_ey <= ras.min_ey )
       return 0;
 
diff --git a/src/smooth/ftgrays.h b/src/smooth/ftgrays.h
index 6aa7f35..e9f9c7a 100644
--- a/src/smooth/ftgrays.h
+++ b/src/smooth/ftgrays.h
@@ -4,7 +4,7 @@
  *
  *   FreeType smooth renderer declaration
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/smooth/ftsmerrs.h b/src/smooth/ftsmerrs.h
index 4c55e32..d52c0dd 100644
--- a/src/smooth/ftsmerrs.h
+++ b/src/smooth/ftsmerrs.h
@@ -4,7 +4,7 @@
  *
  *   smooth renderer error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
index c6b7e21..cd034d2 100644
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -4,7 +4,7 @@
  *
  *   Anti-aliasing renderer interface (body).
  *
- * Copyright 2000-2018 by
+ * Copyright (C) 2000-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -44,6 +44,10 @@
     sub[2].x = 21;
     sub[2].y = 0;
 
+#elif 0   /* or else, once ClearType patents expire */
+
+    FT_Library_SetLcdFilter( render->root.library, FT_LCD_FILTER_DEFAULT );
+
 #endif
 
     render->clazz->raster_class->raster_reset( render->raster, NULL, 0 );
@@ -145,12 +149,8 @@
       slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
     }
 
-    ft_glyphslot_preset_bitmap( slot, mode, origin );
-
-    if ( bitmap->width > 0x7FFF || bitmap->rows > 0x7FFF )
+    if ( ft_glyphslot_preset_bitmap( slot, mode, origin ) )
     {
-      FT_ERROR(( "ft_smooth_render_generic: glyph is too large: %u x %u\n",
-                 bitmap->width, bitmap->rows ));
       error = FT_THROW( Raster_Overflow );
       goto Exit;
     }
@@ -243,7 +243,7 @@
       }
 
       if ( lcd_filter_func )
-        lcd_filter_func( bitmap, mode, lcd_weights );
+        lcd_filter_func( bitmap, lcd_weights );
     }
 
 #else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -264,27 +264,33 @@
       /* Render 3 separate monochrome bitmaps, shifting the outline.  */
       width /= 3;
 
-      FT_Outline_Translate( outline,           -sub[0].x,           -sub[0].y );
+      FT_Outline_Translate( outline,
+                            -sub[0].x,
+                            -sub[0].y );
       error = render->raster_render( render->raster, &params );
       if ( error )
         goto Exit;
 
       bitmap->buffer += width;
-      FT_Outline_Translate( outline, sub[0].x - sub[1].x, sub[0].y - sub[1].y );
+      FT_Outline_Translate( outline,
+                            sub[0].x - sub[1].x,
+                            sub[0].y - sub[1].y );
       error = render->raster_render( render->raster, &params );
       bitmap->buffer -= width;
       if ( error )
         goto Exit;
 
       bitmap->buffer += 2 * width;
-      FT_Outline_Translate( outline, sub[1].x - sub[2].x, sub[1].y - sub[2].y );
+      FT_Outline_Translate( outline,
+                            sub[1].x - sub[2].x,
+                            sub[1].y - sub[2].y );
       error = render->raster_render( render->raster, &params );
       bitmap->buffer -= 2 * width;
       if ( error )
         goto Exit;
 
-      x_shift        -= sub[2].x;
-      y_shift        -= sub[2].y;
+      x_shift -= sub[2].x;
+      y_shift -= sub[2].y;
 
       /* XXX: Rearrange the bytes according to FT_PIXEL_MODE_LCD.    */
       /* XXX: It is more efficient to render every third byte above. */
@@ -319,27 +325,33 @@
       bitmap->pitch *= 3;
       bitmap->rows  /= 3;
 
-      FT_Outline_Translate( outline,           -sub[0].y, sub[0].x            );
+      FT_Outline_Translate( outline,
+                            -sub[0].y,
+                            sub[0].x );
       error = render->raster_render( render->raster, &params );
       if ( error )
         goto Exit;
 
       bitmap->buffer += pitch;
-      FT_Outline_Translate( outline, sub[0].y - sub[1].y, sub[1].x - sub[0].x );
+      FT_Outline_Translate( outline,
+                            sub[0].y - sub[1].y,
+                            sub[1].x - sub[0].x );
       error = render->raster_render( render->raster, &params );
       bitmap->buffer -= pitch;
       if ( error )
         goto Exit;
 
       bitmap->buffer += 2 * pitch;
-      FT_Outline_Translate( outline, sub[1].y - sub[2].y, sub[2].x - sub[1].x );
+      FT_Outline_Translate( outline,
+                            sub[1].y - sub[2].y,
+                            sub[2].x - sub[1].x );
       error = render->raster_render( render->raster, &params );
       bitmap->buffer -= 2 * pitch;
       if ( error )
         goto Exit;
 
-      x_shift        -= sub[2].y;
-      y_shift        += sub[2].x;
+      x_shift -= sub[2].y;
+      y_shift += sub[2].x;
 
       bitmap->pitch /= 3;
       bitmap->rows  *= 3;
diff --git a/src/smooth/ftsmooth.h b/src/smooth/ftsmooth.h
index 782f11a..fbb21a3 100644
--- a/src/smooth/ftsmooth.h
+++ b/src/smooth/ftsmooth.h
@@ -4,7 +4,7 @@
  *
  *   Anti-aliasing renderer interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/smooth/module.mk b/src/smooth/module.mk
index 5b8bc3b..44b76df 100644
--- a/src/smooth/module.mk
+++ b/src/smooth/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/smooth/rules.mk b/src/smooth/rules.mk
index 8f808f8..0153ac2 100644
--- a/src/smooth/rules.mk
+++ b/src/smooth/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/smooth/smooth.c b/src/smooth/smooth.c
index ac414f3..9c543d3 100644
--- a/src/smooth/smooth.c
+++ b/src/smooth/smooth.c
@@ -4,7 +4,7 @@
  *
  *   FreeType anti-aliasing rasterer module component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/tools/afblue.pl b/src/tools/afblue.pl
index 7c6f1a7..937d4ec 100644
--- a/src/tools/afblue.pl
+++ b/src/tools/afblue.pl
@@ -5,7 +5,7 @@
 #
 # Process a blue zone character data file.
 #
-# Copyright 2013-2018 by
+# Copyright (C) 2013-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used,
diff --git a/src/tools/apinames.c b/src/tools/apinames.c
index 06c3260..aeecf88 100644
--- a/src/tools/apinames.c
+++ b/src/tools/apinames.c
@@ -10,7 +10,7 @@
  * accepted if you are using GCC for compilation (and probably by
  * other compilers too).
  *
- * Author: David Turner, 2005, 2006, 2008-2013, 2015
+ * Author: FreeType team, 2005-2019
  *
  * This code is explicitly placed into the public domain.
  *
@@ -26,6 +26,7 @@
 
 #define  LINEBUFF_SIZE  1024
 
+
 typedef enum  OutputFormat_
 {
   OUTPUT_LIST = 0,      /* output the list of names, one per line             */
@@ -53,10 +54,12 @@
 
 } NameRec, *Name;
 
+
 static Name  the_names;
 static int   num_names;
 static int   max_names;
 
+
 static void
 names_add( const char*  name,
            const char*  end )
@@ -65,14 +68,16 @@
   int           nn, len;
   Name          nm;
 
+
   if ( end <= name )
     return;
 
   /* compute hash value */
-  len = (int)(end - name);
+  len = (int)( end - name );
   h   = 0;
+
   for ( nn = 0; nn < len; nn++ )
-    h = h*33 + name[nn];
+    h = h * 33 + name[nn];
 
   /* check for an pre-existing name */
   for ( nn = 0; nn < num_names; nn++ )
@@ -88,7 +93,7 @@
   /* add new name */
   if ( num_names >= max_names )
   {
-    max_names += (max_names >> 1) + 4;
+    max_names += ( max_names >> 1 ) + 4;
     the_names  = (NameRec*)realloc( the_names,
                                     sizeof ( the_names[0] ) * max_names );
     if ( !the_names )
@@ -97,7 +102,7 @@
   nm = &the_names[num_names++];
 
   nm->hash = h;
-  nm->name = (char*)malloc( len+1 );
+  nm->name = (char*)malloc( len + 1 );
   if ( !nm->name )
     panic( "not enough memory" );
 
@@ -116,6 +121,7 @@
   return strcmp( n1->name, n2->name );
 }
 
+
 static void
 names_sort( void )
 {
@@ -134,89 +140,95 @@
 
   switch ( format )
   {
-    case OUTPUT_WINDOWS_DEF:
-      if ( dll_name )
-        fprintf( out, "LIBRARY %s\n", dll_name );
+  case OUTPUT_WINDOWS_DEF:
+    if ( dll_name )
+      fprintf( out, "LIBRARY %s\n", dll_name );
 
-      fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
-      fprintf( out, "EXPORTS\n" );
-      for ( nn = 0; nn < num_names; nn++ )
-        fprintf( out, "  %s\n", the_names[nn].name );
-      break;
+    fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
+    fprintf( out, "EXPORTS\n" );
 
-    case OUTPUT_BORLAND_DEF:
-      if ( dll_name )
-        fprintf( out, "LIBRARY %s\n", dll_name );
+    for ( nn = 0; nn < num_names; nn++ )
+      fprintf( out, "  %s\n", the_names[nn].name );
 
-      fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
-      fprintf( out, "EXPORTS\n" );
-      for ( nn = 0; nn < num_names; nn++ )
-        fprintf( out, "  _%s\n", the_names[nn].name );
-      break;
+    break;
 
-    case OUTPUT_WATCOM_LBC:
+  case OUTPUT_BORLAND_DEF:
+    if ( dll_name )
+      fprintf( out, "LIBRARY %s\n", dll_name );
+
+    fprintf( out, "DESCRIPTION  FreeType 2 DLL\n" );
+    fprintf( out, "EXPORTS\n" );
+
+    for ( nn = 0; nn < num_names; nn++ )
+      fprintf( out, "  _%s\n", the_names[nn].name );
+
+    break;
+
+  case OUTPUT_WATCOM_LBC:
+    {
+      const char*  dot;
+      char         temp[512];
+
+
+      if ( !dll_name )
       {
-        const char*  dot;
-        char         temp[512];
-
-
-        if ( !dll_name )
-        {
-          fprintf( stderr,
-                   "you must provide a DLL name with the -d option!\n" );
-          exit( 4 );
-        }
-
-        /* we must omit the .dll suffix from the library name */
-        dot = strchr( dll_name, '.' );
-        if ( dot )
-        {
-          int  len = dot - dll_name;
-
-
-          if ( len > (int)( sizeof ( temp ) - 1 ) )
-            len = sizeof ( temp ) - 1;
-
-          memcpy( temp, dll_name, len );
-          temp[len] = 0;
-
-          dll_name = (const char*)temp;
-        }
-
-        for ( nn = 0; nn < num_names; nn++ )
-          fprintf( out, "++_%s.%s.%s\n", the_names[nn].name, dll_name,
-                        the_names[nn].name );
+        fprintf( stderr,
+                 "you must provide a DLL name with the -d option!\n" );
+        exit( 4 );
       }
-      break;
 
-    case OUTPUT_NETWARE_IMP:
+      /* we must omit the `.dll' suffix from the library name */
+      dot = strchr( dll_name, '.' );
+      if ( dot )
       {
-        if ( dll_name )
-          fprintf( out, "  (%s)\n", dll_name );
-        for ( nn = 0; nn < num_names - 1; nn++ )
-          fprintf( out, "  %s,\n", the_names[nn].name );
-        fprintf( out, "  %s\n", the_names[num_names - 1].name );
-      }
-      break;
+        int  len = dot - dll_name;
 
-    case OUTPUT_GNU_VERMAP:
-      {
-        fprintf( out, "{\n\tglobal:\n" );
-        for ( nn = 0; nn < num_names; nn++ )
-          fprintf( out, "\t\t%s;\n", the_names[nn].name );
-        fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
-      }
-      break;
 
-    default:  /* LIST */
+        if ( len > (int)( sizeof ( temp ) - 1 ) )
+          len = sizeof ( temp ) - 1;
+
+        memcpy( temp, dll_name, len );
+        temp[len] = 0;
+
+        dll_name = (const char*)temp;
+      }
+
       for ( nn = 0; nn < num_names; nn++ )
-        fprintf( out, "%s\n", the_names[nn].name );
+        fprintf( out, "++_%s.%s.%s\n",
+                      the_names[nn].name, dll_name, the_names[nn].name );
+    }
+
+    break;
+
+  case OUTPUT_NETWARE_IMP:
+    if ( dll_name )
+      fprintf( out, "  (%s)\n", dll_name );
+
+    for ( nn = 0; nn < num_names - 1; nn++ )
+      fprintf( out, "  %s,\n", the_names[nn].name );
+    fprintf( out, "  %s\n", the_names[num_names - 1].name );
+
+    break;
+
+  case OUTPUT_GNU_VERMAP:
+    fprintf( out, "{\n\tglobal:\n" );
+
+    for ( nn = 0; nn < num_names; nn++ )
+      fprintf( out, "\t\t%s;\n", the_names[nn].name );
+
+    fprintf( out, "\tlocal:\n\t\t*;\n};\n" );
+
+    break;
+
+  default:  /* LIST */
+    for ( nn = 0; nn < num_names; nn++ )
+      fprintf( out, "%s\n", the_names[nn].name );
+
+    break;
   }
 }
 
 
-
-
 /* states of the line parser */
 
 typedef enum  State_
@@ -226,89 +238,96 @@
 
 } State;
 
+
 static int
-read_header_file( FILE*  file, int  verbose )
+read_header_file( FILE*  file,
+                  int    verbose )
 {
   static char  buff[LINEBUFF_SIZE + 1];
   State        state = STATE_START;
 
+
   while ( !feof( file ) )
   {
     char*  p;
 
+
     if ( !fgets( buff, LINEBUFF_SIZE, file ) )
       break;
 
     p = buff;
 
-    while ( *p && (*p == ' ' || *p == '\\') )  /* skip leading whitespace */
+    /* skip leading whitespace */
+    while ( *p && ( *p == ' ' || *p == '\\' ) )
       p++;
 
-    if ( *p == '\n' || *p == '\r' )  /* skip empty lines */
+    /* skip empty lines */
+    if ( *p == '\n' || *p == '\r' )
       continue;
 
     switch ( state )
     {
-      case STATE_START:
-        {
-          if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
-            break;
-
-          p += 10;
-          for (;;)
-          {
-            if ( *p == 0 || *p == '\n' || *p == '\r' )
-              goto NextLine;
-
-            if ( *p == ')' )
-            {
-              p++;
-              break;
-            }
-
-            p++;
-          }
-
-          state = STATE_TYPE;
-
-         /* sometimes, the name is just after the FT_EXPORT(...), so
-          * skip whitespace, and fall-through if we find an alphanumeric
-          * character
-          */
-          while ( *p == ' ' || *p == '\t' )
-            p++;
-
-          if ( !isalpha(*p) )
-            break;
-        }
-        /* fall-through */
-
-      case STATE_TYPE:
-        {
-          char*   name = p;
-
-          while ( isalnum(*p) || *p == '_' )
-            p++;
-
-          if ( p > name )
-          {
-            if ( verbose )
-              fprintf( stderr, ">>> %.*s\n", (int)(p - name), name );
-
-            names_add( name, p );
-          }
-
-          state = STATE_START;
-        }
+    case STATE_START:
+      if ( memcmp( p, "FT_EXPORT(", 10 ) != 0 )
         break;
 
-      default:
-        ;
+      p += 10;
+      for (;;)
+      {
+        if ( *p == 0 || *p == '\n' || *p == '\r' )
+          goto NextLine;
+
+        if ( *p == ')' )
+        {
+          p++;
+          break;
+        }
+
+        p++;
+      }
+
+      state = STATE_TYPE;
+
+      /*
+       * Sometimes, the name is just after `FT_EXPORT(...)', so skip
+       * whitespace and fall-through if we find an alphanumeric character.
+       */
+      while ( *p == ' ' || *p == '\t' )
+        p++;
+
+      if ( !isalpha( *p ) )
+        break;
+
+      /* fall-through */
+
+    case STATE_TYPE:
+      {
+        char*   name = p;
+
+
+        while ( isalnum( *p ) || *p == '_' )
+          p++;
+
+        if ( p > name )
+        {
+          if ( verbose )
+            fprintf( stderr, ">>> %.*s\n", (int)( p - name ), name );
+
+          names_add( name, p );
+        }
+
+        state = STATE_START;
+      }
+
+      break;
+
+    default:
+      ;
     }
 
-  NextLine:
+NextLine:
     ;
-  }
+  } /* end of while loop */
 
   return 0;
 }
@@ -318,143 +337,154 @@
 usage( void )
 {
   static const char* const  format =
-   "%s %s: extract FreeType API names from header files\n\n"
-   "this program is used to extract the list of public FreeType API\n"
-   "functions. It receives the list of header files as argument and\n"
-   "generates a sorted list of unique identifiers\n\n"
-
-   "usage: %s header1 [options] [header2 ...]\n\n"
-
-   "options:   -      : parse the content of stdin, ignore arguments\n"
-   "           -v     : verbose mode, output sent to standard error\n"
-   "           -oFILE : write output to FILE instead of standard output\n"
-   "           -dNAME : indicate DLL file name, 'freetype.dll' by default\n"
-   "           -w     : output .DEF file for Visual C++ and Mingw\n"
-   "           -wB    : output .DEF file for Borland C++\n"
-   "           -wW    : output Watcom Linker Response File\n"
-   "           -wN    : output NetWare Import File\n"
-   "           -wL    : output version map for GNU or Solaris linker\n"
-   "\n";
+    "%s %s: extract FreeType API names from header files\n"
+    "\n"
+    "This program extracts the list of public FreeType API functions.\n"
+    "It receives a list of header files as an argument and\n"
+    "generates a sorted list of unique identifiers in various formats.\n"
+    "\n"
+    "usage: %s header1 [options] [header2 ...]\n"
+    "\n"
+    "options:   -       parse the contents of stdin, ignore arguments\n"
+    "           -v      verbose mode, output sent to standard error\n"
+    "           -oFILE  write output to FILE instead of standard output\n"
+    "           -dNAME  indicate DLL file name, 'freetype.dll' by default\n"
+    "           -w      output .DEF file for Visual C++ and Mingw\n"
+    "           -wB     output .DEF file for Borland C++\n"
+    "           -wW     output Watcom Linker Response File\n"
+    "           -wN     output NetWare Import File\n"
+    "           -wL     output version map for GNU or Solaris linker\n"
+    "\n";
 
   fprintf( stderr,
            format,
            PROGRAM_NAME,
            PROGRAM_VERSION,
-           PROGRAM_NAME
-           );
-  exit(1);
+           PROGRAM_NAME );
+
+  exit( 1 );
 }
 
 
-int  main( int argc, const char* const*  argv )
+int
+main( int                 argc,
+      const char* const*  argv )
 {
-  int           from_stdin = 0;
-  int           verbose = 0;
-  OutputFormat  format = OUTPUT_LIST;  /* the default */
-  FILE*         out    = stdout;
+  int           from_stdin   = 0;
+  int           verbose      = 0;
+  OutputFormat  format       = OUTPUT_LIST;  /* the default */
+  FILE*         out          = stdout;
   const char*   library_name = NULL;
 
+
   if ( argc < 2 )
     usage();
 
-  /* '-' used as a single argument means read source file from stdin */
+  /* `-' used as a single argument means read source file from stdin */
   while ( argc > 1 && argv[1][0] == '-' )
   {
     const char*  arg = argv[1];
 
+
     switch ( arg[1] )
     {
-      case 'v':
-        verbose = 1;
+    case 'v':
+      verbose = 1;
+
+      break;
+
+    case 'o':
+      if ( arg[2] == 0 )
+      {
+        if ( argc < 2 )
+          usage();
+
+        arg = argv[2];
+        argv++;
+        argc--;
+      }
+      else
+        arg += 2;
+
+      out = fopen( arg, "wt" );
+      if ( !out )
+      {
+        fprintf( stderr, "could not open '%s' for writing\n", arg );
+        exit( 3 );
+      }
+
+      break;
+
+    case 'd':
+      if ( arg[2] == 0 )
+      {
+        if ( argc < 2 )
+          usage();
+
+        arg = argv[2];
+        argv++;
+        argc--;
+      }
+      else
+        arg += 2;
+
+      library_name = arg;
+
+      break;
+
+    case 'w':
+      format = OUTPUT_WINDOWS_DEF;
+
+      switch ( arg[2] )
+      {
+      case 'B':
+        format = OUTPUT_BORLAND_DEF;
         break;
 
-      case 'o':
-        if ( arg[2] == 0 )
-        {
-          if ( argc < 2 )
-            usage();
-
-          arg = argv[2];
-          argv++;
-          argc--;
-        }
-        else
-          arg += 2;
-
-        out = fopen( arg, "wt" );
-        if ( !out )
-        {
-          fprintf( stderr, "could not open '%s' for writing\n", argv[2] );
-          exit(3);
-        }
+      case 'W':
+        format = OUTPUT_WATCOM_LBC;
         break;
 
-      case 'd':
-        if ( arg[2] == 0 )
-        {
-          if ( argc < 2 )
-            usage();
-
-          arg = argv[2];
-          argv++;
-          argc--;
-        }
-        else
-          arg += 2;
-
-        library_name = arg;
+      case 'N':
+        format = OUTPUT_NETWARE_IMP;
         break;
 
-      case 'w':
-        format = OUTPUT_WINDOWS_DEF;
-        switch ( arg[2] )
-        {
-          case 'B':
-            format = OUTPUT_BORLAND_DEF;
-            break;
-
-          case 'W':
-            format = OUTPUT_WATCOM_LBC;
-            break;
-
-          case 'N':
-            format = OUTPUT_NETWARE_IMP;
-            break;
-
-          case 'L':
-            format = OUTPUT_GNU_VERMAP;
-            break;
-
-          case 0:
-            break;
-
-          default:
-            usage();
-        }
+      case 'L':
+        format = OUTPUT_GNU_VERMAP;
         break;
 
       case 0:
-        from_stdin = 1;
         break;
 
       default:
         usage();
+      }
+
+      break;
+
+    case 0:
+      from_stdin = 1;
+
+      break;
+
+    default:
+      usage();
     }
 
     argc--;
     argv++;
-  }
+
+  } /* end of while loop */
 
   if ( from_stdin )
-  {
     read_header_file( stdin, verbose );
-  }
   else
   {
     for ( --argc, argv++; argc > 0; argc--, argv++ )
     {
       FILE*  file = fopen( argv[0], "rb" );
 
+
       if ( !file )
         fprintf( stderr, "unable to open '%s'\n", argv[0] );
       else
@@ -469,7 +499,7 @@
   }
 
   if ( num_names == 0 )
-    panic( "could not find exported functions !!\n" );
+    panic( "could not find exported functions\n" );
 
   names_sort();
   names_dump( out, format, library_name );
@@ -479,3 +509,6 @@
 
   return 0;
 }
+
+
+/* END */
diff --git a/src/tools/docmaker/.gitignore b/src/tools/docmaker/.gitignore
deleted file mode 100644
index 0d20b64..0000000
--- a/src/tools/docmaker/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/src/tools/docmaker/content.py b/src/tools/docmaker/content.py
deleted file mode 100644
index 198780a..0000000
--- a/src/tools/docmaker/content.py
+++ /dev/null
@@ -1,672 +0,0 @@
-#
-#  content.py
-#
-#    Parse comment blocks to build content blocks (library file).
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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.
-
-#
-# This file contains routines to parse documentation comment blocks,
-# building more structured objects out of them.
-#
-
-
-from sources import *
-from utils   import *
-
-import string, re
-
-
-#
-# Regular expressions to detect code sequences.  `Code sequences' are simply
-# code fragments embedded in '{' and '}', as demonstrated in the following
-# example.
-#
-#   {
-#     x = y + z;
-#     if ( zookoo == 2 )
-#     {
-#       foobar();
-#     }
-#   }
-#
-# Note that the indentation of the first opening brace and the last closing
-# brace must be exactly the same.  The code sequence itself should have a
-# larger indentation than the surrounding braces.
-#
-re_code_start = re.compile( r"(\s*){\s*$" )
-re_code_end   = re.compile( r"(\s*)}\s*$" )
-
-
-#
-# A regular expression to isolate identifiers from other text.  Two syntax
-# forms are supported:
-#
-#   <name>
-#   <name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'.  Use `<id>' if there are multiple, valid `<name>' entries; in the
-# index, `<id>' will be appended in parentheses.
-#
-# For example,
-#
-#   stem_darkening[autofit]
-#
-# becomes `stem_darkening (autofit)' in the index.
-#
-re_identifier = re.compile( r"""
-                              ((?:\w|-)+
-                               (?:\[(?:\w|-)+\])?)
-                            """, re.VERBOSE )
-
-
-#
-# We collect macro names ending in `_H' (group 1), as defined in
-# `freetype/config/ftheader.h'.  While outputting the object data, we use
-# this info together with the object's file location (group 2) to emit the
-# appropriate header file macro and its associated file name before the
-# object itself.
-#
-# Example:
-#
-#   #define FT_FREETYPE_H <freetype.h>
-#
-re_header_macro = re.compile( r'^#define\s{1,}(\w{1,}_H)\s{1,}<(.*)>' )
-
-
-################################################################
-##
-##  DOC CODE CLASS
-##
-##  The `DocCode' class is used to store source code lines.
-##
-##  `self.lines' contains a set of source code lines that will be dumped as
-##  HTML in a <PRE> tag.
-##
-##  The object is filled line by line by the parser; it strips the leading
-##  `margin' space from each input line before storing it in `self.lines'.
-##
-class  DocCode:
-
-    def  __init__( self, margin, lines ):
-        self.lines = []
-        self.words = None
-
-        # remove margin spaces
-        for l in lines:
-            if string.strip( l[:margin] ) == "":
-                l = l[margin:]
-            self.lines.append( l )
-
-    def  dump( self, prefix = "", width = 60 ):
-        lines = self.dump_lines( 0, width )
-        for l in lines:
-            print( prefix + l )
-
-    def  dump_lines( self, margin = 0, width = 60 ):
-        result = []
-        for l in self.lines:
-            result.append( " " * margin + l )
-        return result
-
-
-
-################################################################
-##
-##  DOC PARA CLASS
-##
-##  `Normal' text paragraphs are stored in the `DocPara' class.
-##
-##  `self.words' contains the list of words that make up the paragraph.
-##
-class  DocPara:
-
-    def  __init__( self, lines ):
-        self.lines = None
-        self.words = []
-        for l in lines:
-            l = string.strip( l )
-            self.words.extend( string.split( l ) )
-
-    def  dump( self, prefix = "", width = 60 ):
-        lines = self.dump_lines( 0, width )
-        for l in lines:
-            print( prefix + l )
-
-    def  dump_lines( self, margin = 0, width = 60 ):
-        cur    = ""  # current line
-        col    = 0   # current width
-        result = []
-
-        for word in self.words:
-            ln = len( word )
-            if col > 0:
-                ln = ln + 1
-
-            if col + ln > width:
-                result.append( " " * margin + cur )
-                cur = word
-                col = len( word )
-            else:
-                if col > 0:
-                    cur = cur + " "
-                cur = cur + word
-                col = col + ln
-
-        if col > 0:
-            result.append( " " * margin + cur )
-
-        return result
-
-
-################################################################
-##
-##  DOC FIELD CLASS
-##
-##  The `DocField' class stores a list containing either `DocPara' or
-##  `DocCode' objects.  Each DocField object also has an optional `name'
-##  that is used when the object corresponds to a field or value definition.
-##
-class  DocField:
-
-    def  __init__( self, name, lines ):
-        self.name  = name  # can be `None' for normal paragraphs/sources
-        self.items = []    # list of items
-
-        mode_none  = 0     # start parsing mode
-        mode_code  = 1     # parsing code sequences
-        mode_para  = 3     # parsing normal paragraph
-
-        margin     = -1    # current code sequence indentation
-        cur_lines  = []
-
-        # analyze the markup lines to check whether they contain paragraphs,
-        # code sequences, or fields definitions
-        #
-        start = 0
-        mode  = mode_none
-
-        for l in lines:
-            # are we parsing a code sequence?
-            if mode == mode_code:
-                m = re_code_end.match( l )
-                if m and len( m.group( 1 ) ) <= margin:
-                    # that's it, we finished the code sequence
-                    code = DocCode( 0, cur_lines )
-                    self.items.append( code )
-                    margin    = -1
-                    cur_lines = []
-                    mode      = mode_none
-                else:
-                    # otherwise continue the code sequence
-                    cur_lines.append( l[margin:] )
-            else:
-                # start of code sequence?
-                m = re_code_start.match( l )
-                if m:
-                    # save current lines
-                    if cur_lines:
-                        para = DocPara( cur_lines )
-                        self.items.append( para )
-                        cur_lines = []
-
-                    # switch to code extraction mode
-                    margin = len( m.group( 1 ) )
-                    mode   = mode_code
-                else:
-                    if not string.split( l ) and cur_lines:
-                        # if the line is empty, we end the current paragraph,
-                        # if any
-                        para = DocPara( cur_lines )
-                        self.items.append( para )
-                        cur_lines = []
-                    else:
-                        # otherwise, simply add the line to the current
-                        # paragraph
-                        cur_lines.append( l )
-
-        if mode == mode_code:
-            # unexpected end of code sequence
-            code = DocCode( margin, cur_lines )
-            self.items.append( code )
-        elif cur_lines:
-            para = DocPara( cur_lines )
-            self.items.append( para )
-
-    def  dump( self, prefix = "" ):
-        if self.field:
-            print( prefix + self.field + " ::" )
-            prefix = prefix + "----"
-
-        first = 1
-        for p in self.items:
-            if not first:
-                print( "" )
-            p.dump( prefix )
-            first = 0
-
-    def  dump_lines( self, margin = 0, width = 60 ):
-        result = []
-        nl     = None
-
-        for p in self.items:
-            if nl:
-                result.append( "" )
-
-            result.extend( p.dump_lines( margin, width ) )
-            nl = 1
-
-        return result
-
-
-#
-# A regular expression to detect field definitions.
-#
-# Examples:
-#
-#   foo     ::
-#   foo.bar ::
-#
-re_field = re.compile( r"""
-                         \s*
-                           (
-                             \w*
-                           |
-                             \w (\w | \.)* \w
-                           )
-                         \s* ::
-                       """, re.VERBOSE )
-
-
-################################################################
-##
-##  DOC MARKUP CLASS
-##
-class  DocMarkup:
-
-    def  __init__( self, tag, lines ):
-        self.tag    = string.lower( tag )
-        self.fields = []
-
-        cur_lines = []
-        field     = None
-        mode      = 0
-
-        for l in lines:
-            m = re_field.match( l )
-            if m:
-                # We detected the start of a new field definition.
-
-                # first, save the current one
-                if cur_lines:
-                    f = DocField( field, cur_lines )
-                    self.fields.append( f )
-                    cur_lines = []
-                    field     = None
-
-                field     = m.group( 1 )   # record field name
-                ln        = len( m.group( 0 ) )
-                l         = " " * ln + l[ln:]
-                cur_lines = [l]
-            else:
-                cur_lines.append( l )
-
-        if field or cur_lines:
-            f = DocField( field, cur_lines )
-            self.fields.append( f )
-
-    def  get_name( self ):
-        try:
-            return self.fields[0].items[0].words[0]
-        except:
-            return None
-
-    def  dump( self, margin ):
-        print( " " * margin + "<" + self.tag + ">" )
-        for f in self.fields:
-            f.dump( "  " )
-        print( " " * margin + "</" + self.tag + ">" )
-
-
-################################################################
-##
-##  DOC CHAPTER CLASS
-##
-class  DocChapter:
-
-    def  __init__( self, block ):
-        self.block    = block
-        self.sections = []
-        if block:
-            self.name  = block.name
-            self.title = block.get_markup_words( "title" )
-            self.order = block.get_markup_words( "sections" )
-        else:
-            self.name  = "Other"
-            self.title = string.split( "Miscellaneous" )
-            self.order = []
-
-
-################################################################
-##
-##  DOC SECTION CLASS
-##
-class  DocSection:
-
-    def  __init__( self, name = "Other" ):
-        self.name        = name
-        self.blocks      = {}
-        self.block_names = []  # ordered block names in section
-        self.defs        = []
-        self.abstract    = ""
-        self.description = ""
-        self.order       = []
-        self.title       = "ERROR"
-        self.chapter     = None
-
-    def  add_def( self, block ):
-        self.defs.append( block )
-
-    def  add_block( self, block ):
-        self.block_names.append( block.name )
-        self.blocks[block.name] = block
-
-    def  process( self ):
-        # look up one block that contains a valid section description
-        for block in self.defs:
-            title = block.get_markup_text( "title" )
-            if title:
-                self.title       = title
-                self.abstract    = block.get_markup_words( "abstract" )
-                self.description = block.get_markup_items( "description" )
-                self.order       = block.get_markup_words_all( "order" )
-                return
-
-    def  reorder( self ):
-        self.block_names = sort_order_list( self.block_names, self.order )
-
-
-################################################################
-##
-##  CONTENT PROCESSOR CLASS
-##
-class  ContentProcessor:
-
-    def  __init__( self ):
-        """Initialize a block content processor."""
-        self.reset()
-
-        self.sections = {}    # dictionary of documentation sections
-        self.section  = None  # current documentation section
-
-        self.chapters = []    # list of chapters
-
-        self.headers  = {}    # dictionary of header macros
-
-    def  set_section( self, section_name ):
-        """Set current section during parsing."""
-        if not section_name in self.sections:
-            section = DocSection( section_name )
-            self.sections[section_name] = section
-            self.section                = section
-        else:
-            self.section = self.sections[section_name]
-
-    def  add_chapter( self, block ):
-        chapter = DocChapter( block )
-        self.chapters.append( chapter )
-
-    def  reset( self ):
-        """Reset the content processor for a new block."""
-        self.markups      = []
-        self.markup       = None
-        self.markup_lines = []
-
-    def  add_markup( self ):
-        """Add a new markup section."""
-        if self.markup and self.markup_lines:
-
-            # get rid of last line of markup if it's empty
-            marks = self.markup_lines
-            if len( marks ) > 0 and not string.strip( marks[-1] ):
-                self.markup_lines = marks[:-1]
-
-            m = DocMarkup( self.markup, self.markup_lines )
-
-            self.markups.append( m )
-
-            self.markup       = None
-            self.markup_lines = []
-
-    def  process_content( self, content ):
-        """Process a block content and return a list of DocMarkup objects
-           corresponding to it."""
-        markup       = None
-        markup_lines = []
-        first        = 1
-
-        margin  = -1
-        in_code = 0
-
-        for line in content:
-            if in_code:
-                m = re_code_end.match( line )
-                if m and len( m.group( 1 ) ) <= margin:
-                    in_code = 0
-                    margin  = -1
-            else:
-                m = re_code_start.match( line )
-                if m:
-                    in_code = 1
-                    margin  = len( m.group( 1 ) )
-
-            found = None
-
-            if not in_code:
-                for t in re_markup_tags:
-                    m = t.match( line )
-                    if m:
-                        found  = string.lower( m.group( 1 ) )
-                        prefix = len( m.group( 0 ) )
-                        # remove markup from line
-                        line   = " " * prefix + line[prefix:]
-                        break
-
-            # is it the start of a new markup section ?
-            if found:
-                first = 0
-                self.add_markup()  # add current markup content
-                self.markup = found
-                if len( string.strip( line ) ) > 0:
-                    self.markup_lines.append( line )
-            elif first == 0:
-                self.markup_lines.append( line )
-
-        self.add_markup()
-
-        return self.markups
-
-    def  parse_sources( self, source_processor ):
-        blocks = source_processor.blocks
-        count  = len( blocks )
-
-        for n in range( count ):
-            source = blocks[n]
-            if source.content:
-                # this is a documentation comment, we need to catch
-                # all following normal blocks in the "follow" list
-                #
-                follow = []
-                m = n + 1
-                while m < count and not blocks[m].content:
-                    follow.append( blocks[m] )
-                    m = m + 1
-
-                doc_block = DocBlock( source, follow, self )
-
-    def  finish( self ):
-        # process all sections to extract their abstract, description
-        # and ordered list of items
-        #
-        for sec in self.sections.values():
-            sec.process()
-
-        # process chapters to check that all sections are correctly
-        # listed there
-        for chap in self.chapters:
-            for sec in chap.order:
-                if sec in self.sections:
-                    section = self.sections[sec]
-                    section.chapter = chap
-                    section.reorder()
-                    chap.sections.append( section )
-                else:
-                    sys.stderr.write( "WARNING: chapter '" +          \
-                        chap.name + "' in " + chap.block.location() + \
-                        " lists unknown section '" + sec + "'\n" )
-
-        # check that all sections are in a chapter
-        #
-        others = []
-        for sec in self.sections.values():
-            if not sec.chapter:
-                sec.reorder()
-                others.append( sec )
-
-        # create a new special chapter for all remaining sections
-        # when necessary
-        #
-        if others:
-            chap = DocChapter( None )
-            chap.sections = others
-            self.chapters.append( chap )
-
-
-################################################################
-##
-##  DOC BLOCK CLASS
-##
-class  DocBlock:
-
-    def  __init__( self, source, follow, processor ):
-        processor.reset()
-
-        self.source  = source
-        self.code    = []
-        self.type    = "ERRTYPE"
-        self.name    = "ERRNAME"
-        self.section = processor.section
-        self.markups = processor.process_content( source.content )
-
-        # compute block type from first markup tag
-        try:
-            self.type = self.markups[0].tag
-        except:
-            pass
-
-        # compute block name from first markup paragraph
-        try:
-            markup = self.markups[0]
-            para   = markup.fields[0].items[0]
-            name   = para.words[0]
-            m = re_identifier.match( name )
-            if m:
-                name = m.group( 1 )
-            self.name = name
-        except:
-            pass
-
-        if self.type == "section":
-            # detect new section starts
-            processor.set_section( self.name )
-            processor.section.add_def( self )
-        elif self.type == "chapter":
-            # detect new chapter
-            processor.add_chapter( self )
-        else:
-            processor.section.add_block( self )
-
-        # now, compute the source lines relevant to this documentation
-        # block. We keep normal comments in for obvious reasons (??)
-        source = []
-        for b in follow:
-            if b.format:
-                break
-            for l in b.lines:
-                # collect header macro definitions
-                m = re_header_macro.match( l )
-                if m:
-                    processor.headers[m.group( 2 )] = m.group( 1 );
-
-                # we use "/* */" as a separator
-                if re_source_sep.match( l ):
-                    break
-                source.append( l )
-
-        # now strip the leading and trailing empty lines from the sources
-        start = 0
-        end   = len( source ) - 1
-
-        while start < end and not string.strip( source[start] ):
-            start = start + 1
-
-        while start < end and not string.strip( source[end] ):
-            end = end - 1
-
-        if start == end and not string.strip( source[start] ):
-            self.code = []
-        else:
-            self.code = source[start:end + 1]
-
-    def  location( self ):
-        return self.source.location()
-
-    def  get_markup( self, tag_name ):
-        """Return the DocMarkup corresponding to a given tag in a block."""
-        for m in self.markups:
-            if m.tag == string.lower( tag_name ):
-                return m
-        return None
-
-    def  get_markup_words( self, tag_name ):
-        try:
-            m = self.get_markup( tag_name )
-            return m.fields[0].items[0].words
-        except:
-            return []
-
-    def  get_markup_words_all( self, tag_name ):
-        try:
-            m = self.get_markup( tag_name )
-            words = []
-            for item in m.fields[0].items:
-                # We honour empty lines in an `<Order>' section element by
-                # adding the sentinel `/empty/'.  The formatter should then
-                # convert it to an appropriate representation in the
-                # `section_enter' function.
-                words += item.words
-                words.append( "/empty/" )
-            return words
-        except:
-            return []
-
-    def  get_markup_text( self, tag_name ):
-        result = self.get_markup_words( tag_name )
-        return string.join( result )
-
-    def  get_markup_items( self, tag_name ):
-        try:
-            m = self.get_markup( tag_name )
-            return m.fields[0].items
-        except:
-            return None
-
-# eof
diff --git a/src/tools/docmaker/docbeauty.py b/src/tools/docmaker/docbeauty.py
deleted file mode 100644
index 0b021fa..0000000
--- a/src/tools/docmaker/docbeauty.py
+++ /dev/null
@@ -1,111 +0,0 @@
-#!/usr/bin/env python
-#
-#  DocBeauty (c) 2003, 2004, 2008 David Turner <david@freetype.org>
-#
-# This program is used to beautify the documentation comments used
-# in the FreeType 2 public headers.
-#
-
-from sources import *
-from content import *
-from utils   import *
-
-import sys, os, string, getopt
-
-
-content_processor = ContentProcessor()
-
-
-def  beautify_block( block ):
-    if block.content:
-        content_processor.reset()
-
-        markups = content_processor.process_content( block.content )
-        text    = []
-        first   = 1
-
-        for markup in markups:
-            text.extend( markup.beautify( first ) )
-            first = 0
-
-        # now beautify the documentation "borders" themselves
-        lines = [" /*************************************************************************"]
-        for l in text:
-            lines.append( "  *" + l )
-        lines.append( "  */" )
-
-        block.lines = lines
-
-
-def  usage():
-    print( "\nDocBeauty 0.1 Usage information\n" )
-    print( "  docbeauty [options] file1 [file2 ...]\n" )
-    print( "using the following options:\n" )
-    print( "  -h : print this page" )
-    print( "  -b : backup original files with the 'orig' extension" )
-    print( "" )
-    print( "  --backup : same as -b" )
-
-
-def  main( argv ):
-    """main program loop"""
-
-    global output_dir
-
-    try:
-        opts, args = getopt.getopt( sys.argv[1:], \
-                                    "hb",         \
-                                    ["help", "backup"] )
-    except getopt.GetoptError:
-        usage()
-        sys.exit( 2 )
-
-    if args == []:
-        usage()
-        sys.exit( 1 )
-
-    # process options
-    #
-    output_dir = None
-    do_backup  = None
-
-    for opt in opts:
-        if opt[0] in ( "-h", "--help" ):
-            usage()
-            sys.exit( 0 )
-
-        if opt[0] in ( "-b", "--backup" ):
-            do_backup = 1
-
-    # create context and processor
-    source_processor = SourceProcessor()
-
-    # retrieve the list of files to process
-    file_list = make_file_list( args )
-    for filename in file_list:
-        source_processor.parse_file( filename )
-
-        for block in source_processor.blocks:
-            beautify_block( block )
-
-        new_name = filename + ".new"
-        ok       = None
-
-        try:
-            file = open( new_name, "wt" )
-            for block in source_processor.blocks:
-                for line in block.lines:
-                    file.write( line )
-                    file.write( "\n" )
-            file.close()
-        except:
-            ok = 0
-
-
-# if called from the command line
-#
-if __name__ == '__main__':
-    main( sys.argv )
-
-
-# eof
diff --git a/src/tools/docmaker/docmaker.py b/src/tools/docmaker/docmaker.py
deleted file mode 100644
index eb49afb..0000000
--- a/src/tools/docmaker/docmaker.py
+++ /dev/null
@@ -1,115 +0,0 @@
-#!/usr/bin/env python
-#
-#  docmaker.py
-#
-#    Convert source code markup to HTML documentation.
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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.
-
-#
-# This program is a re-write of the original DocMaker tool used to generate
-# the API Reference of the FreeType font rendering engine by converting
-# in-source comments into structured HTML.
-#
-# This new version is capable of outputting XML data as well as accepting
-# more liberal formatting options.  It also uses regular expression matching
-# and substitution to speed up operation significantly.
-#
-
-from sources   import *
-from content   import *
-from utils     import *
-from formatter import *
-from tohtml    import *
-
-import utils
-
-import sys, glob, getopt
-
-
-def  usage():
-    print( "\nDocMaker Usage information\n" )
-    print( "  docmaker [options] file1 [file2 ...]\n" )
-    print( "using the following options:\n" )
-    print( "  -h : print this page" )
-    print( "  -t : set project title, as in '-t \"My Project\"'" )
-    print( "  -o : set output directory, as in '-o mydir'" )
-    print( "  -p : set documentation prefix, as in '-p ft2'" )
-    print( "" )
-    print( "  --title  : same as -t, as in '--title=\"My Project\"'" )
-    print( "  --output : same as -o, as in '--output=mydir'" )
-    print( "  --prefix : same as -p, as in '--prefix=ft2'" )
-
-
-def  main( argv ):
-    """Main program loop."""
-
-    global output_dir
-
-    try:
-        opts, args = getopt.getopt( sys.argv[1:],
-                                    "ht:o:p:",
-                                    ["help", "title=", "output=", "prefix="] )
-    except getopt.GetoptError:
-        usage()
-        sys.exit( 2 )
-
-    if args == []:
-        usage()
-        sys.exit( 1 )
-
-    # process options
-    project_title  = "Project"
-    project_prefix = None
-    output_dir     = None
-
-    for opt in opts:
-        if opt[0] in ( "-h", "--help" ):
-            usage()
-            sys.exit( 0 )
-
-        if opt[0] in ( "-t", "--title" ):
-            project_title = opt[1]
-
-        if opt[0] in ( "-o", "--output" ):
-            utils.output_dir = opt[1]
-
-        if opt[0] in ( "-p", "--prefix" ):
-            project_prefix = opt[1]
-
-    check_output()
-
-    # create context and processor
-    source_processor  = SourceProcessor()
-    content_processor = ContentProcessor()
-
-    # retrieve the list of files to process
-    file_list = make_file_list( args )
-    for filename in file_list:
-        source_processor.parse_file( filename )
-        content_processor.parse_sources( source_processor )
-
-    # process sections
-    content_processor.finish()
-
-    formatter = HtmlFormatter( content_processor,
-                               project_title,
-                               project_prefix )
-
-    formatter.toc_dump()
-    formatter.index_dump()
-    formatter.section_dump_all()
-
-
-# if called from the command line
-if __name__ == '__main__':
-    main( sys.argv )
-
-# eof
diff --git a/src/tools/docmaker/formatter.py b/src/tools/docmaker/formatter.py
deleted file mode 100644
index 2708fd4..0000000
--- a/src/tools/docmaker/formatter.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-#  formatter.py
-#
-#    Convert parsed content blocks to a structured document (library file).
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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.
-
-#
-# This is the base Formatter class.  Its purpose is to convert a content
-# processor's data into specific documents (i.e., table of contents, global
-# index, and individual API reference indices).
-#
-# You need to sub-class it to output anything sensible.  For example, the
-# file `tohtml.py' contains the definition of the `HtmlFormatter' sub-class
-# to output HTML.
-#
-
-
-from sources import *
-from content import *
-from utils   import *
-
-
-################################################################
-##
-##  FORMATTER CLASS
-##
-class  Formatter:
-
-    def  __init__( self, processor ):
-        self.processor   = processor
-        self.identifiers = {}
-        self.chapters    = processor.chapters
-        self.sections    = processor.sections.values()
-        self.block_index = []
-
-        # store all blocks in a dictionary
-        self.blocks = []
-        for section in self.sections:
-            for block in section.blocks.values():
-                self.add_identifier( block.name, block )
-
-                # add enumeration values to the index, since this is useful
-                for markup in block.markups:
-                    if markup.tag == 'values':
-                        for field in markup.fields:
-                            self.add_identifier( field.name, block )
-
-        self.block_index = self.identifiers.keys()
-        self.block_index.sort( key = index_key )
-
-        # also add section names to dictionary (without making them appear
-        # in the index)
-        for section in self.sections:
-            self.add_identifier( section.name, section )
-
-    def  add_identifier( self, name, block ):
-        if name in self.identifiers:
-            # duplicate name!
-            sys.stderr.write( "WARNING: duplicate definition for"
-                              + " '" + name + "' "
-                              + "in " + block.location() + ", "
-                              + "previous definition in "
-                              + self.identifiers[name].location()
-                              + "\n" )
-        else:
-            self.identifiers[name] = block
-
-    #
-    # formatting the table of contents
-    #
-    def  toc_enter( self ):
-        pass
-
-    def  toc_chapter_enter( self, chapter ):
-        pass
-
-    def  toc_section_enter( self, section ):
-        pass
-
-    def  toc_section_exit( self, section ):
-        pass
-
-    def  toc_chapter_exit( self, chapter ):
-        pass
-
-    def  toc_index( self, index_filename ):
-        pass
-
-    def  toc_exit( self ):
-        pass
-
-    def  toc_dump( self, toc_filename = None, index_filename = None ):
-        output = None
-        if toc_filename:
-            output = open_output( toc_filename )
-
-        self.toc_enter()
-
-        for chap in self.processor.chapters:
-
-            self.toc_chapter_enter( chap )
-
-            for section in chap.sections:
-                self.toc_section_enter( section )
-                self.toc_section_exit( section )
-
-            self.toc_chapter_exit( chap )
-
-        self.toc_index( index_filename )
-
-        self.toc_exit()
-
-        if output:
-            close_output( output )
-
-    #
-    # formatting the index
-    #
-    def  index_enter( self ):
-        pass
-
-    def  index_name_enter( self, name ):
-        pass
-
-    def  index_name_exit( self, name ):
-        pass
-
-    def  index_exit( self ):
-        pass
-
-    def  index_dump( self, index_filename = None ):
-        output = None
-        if index_filename:
-            output = open_output( index_filename )
-
-        self.index_enter()
-
-        for name in self.block_index:
-            self.index_name_enter( name )
-            self.index_name_exit( name )
-
-        self.index_exit()
-
-        if output:
-            close_output( output )
-
-    #
-    # formatting a section
-    #
-    def  section_enter( self, section ):
-        pass
-
-    def  block_enter( self, block ):
-        pass
-
-    def  markup_enter( self, markup, block = None ):
-        pass
-
-    def  field_enter( self, field, markup = None, block = None ):
-        pass
-
-    def  field_exit( self, field, markup = None, block = None ):
-        pass
-
-    def  markup_exit( self, markup, block = None ):
-        pass
-
-    def  block_exit( self, block ):
-        pass
-
-    def  section_exit( self, section ):
-        pass
-
-    def  section_dump( self, section, section_filename = None ):
-        output = None
-        if section_filename:
-            output = open_output( section_filename )
-
-        self.section_enter( section )
-
-        for name in section.block_names:
-            skip_entry = 0
-            try:
-                block = self.identifiers[name]
-                # `block_names' can contain field names also,
-                # which we filter out
-                for markup in block.markups:
-                    if markup.tag == 'values':
-                        for field in markup.fields:
-                            if field.name == name:
-                                skip_entry = 1
-            except:
-                skip_entry = 1   # this happens e.g. for `/empty/' entries
-
-            if skip_entry:
-              continue
-
-            self.block_enter( block )
-
-            for markup in block.markups[1:]:   # always ignore first markup!
-                self.markup_enter( markup, block )
-
-                for field in markup.fields:
-                    self.field_enter( field, markup, block )
-                    self.field_exit( field, markup, block )
-
-                self.markup_exit( markup, block )
-
-            self.block_exit( block )
-
-        self.section_exit( section )
-
-        if output:
-            close_output( output )
-
-    def  section_dump_all( self ):
-        for section in self.sections:
-            self.section_dump( section )
-
-# eof
diff --git a/src/tools/docmaker/sources.py b/src/tools/docmaker/sources.py
deleted file mode 100644
index e3b95e0..0000000
--- a/src/tools/docmaker/sources.py
+++ /dev/null
@@ -1,410 +0,0 @@
-#
-#  sources.py
-#
-#    Convert source code comments to multi-line blocks (library file).
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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.
-
-#
-# This library file contains definitions of classes needed to decompose C
-# source code files into a series of multi-line `blocks'.  There are two
-# kinds of blocks.
-#
-#   - Normal blocks, which contain source code or ordinary comments.
-#
-#   - Documentation blocks, which have restricted formatting, and whose text
-#     always start with a documentation markup tag like `<Function>',
-#     `<Type>', etc.
-#
-# The routines to process the content of documentation blocks are contained
-# in file `content.py'; the classes and methods found here only deal with
-# text parsing and basic documentation block extraction.
-#
-
-
-import fileinput, re, string
-
-
-################################################################
-##
-##  SOURCE BLOCK FORMAT CLASS
-##
-##  A simple class containing compiled regular expressions to detect
-##  potential documentation format block comments within C source code.
-##
-##  The `column' pattern must contain a group to `unbox' the content of
-##  documentation comment blocks.
-##
-##  Later on, paragraphs are converted to long lines, which simplifies the
-##  regular expressions that act upon the text.
-##
-class  SourceBlockFormat:
-
-    def  __init__( self, id, start, column, end ):
-        """Create a block pattern, used to recognize special documentation
-           blocks."""
-        self.id     = id
-        self.start  = re.compile( start, re.VERBOSE )
-        self.column = re.compile( column, re.VERBOSE )
-        self.end    = re.compile( end, re.VERBOSE )
-
-
-#
-# Format 1 documentation comment blocks.
-#
-#    /************************************/ (at least 2 asterisks)
-#    /*                                  */
-#    /*                                  */
-#    /*                                  */
-#    /************************************/ (at least 2 asterisks)
-#
-start = r'''
-  \s*      # any number of whitespace
-  /\*{2,}/ # followed by '/' and at least two asterisks then '/'
-  \s*$     # probably followed by whitespace
-'''
-
-column = r'''
-  \s*      # any number of whitespace
-  /\*{1}   # followed by '/' and precisely one asterisk
-  ([^*].*) # followed by anything (group 1)
-  \*{1}/   # followed by one asterisk and a '/'
-  \s*$     # probably followed by whitespace
-'''
-
-re_source_block_format1 = SourceBlockFormat( 1, start, column, start )
-
-
-#
-# Format 2 documentation comment blocks.
-#
-#    /************************************ (at least 2 asterisks)
-#     *
-#     *                                    (1 asterisk)
-#     *
-#     */                                   (1 or more asterisks)
-#
-start = r'''
-  \s*     # any number of whitespace
-  /\*{2,} # followed by '/' and at least two asterisks
-  \s*$    # probably followed by whitespace
-'''
-
-column = r'''
-  \s*           # any number of whitespace
-  \*{1}(?![*/]) # followed by precisely one asterisk not followed by `/'
-  (.*)          # then anything (group1)
-'''
-
-end = r'''
-  \s*  # any number of whitespace
-  \*+/ # followed by at least one asterisk, then '/'
-'''
-
-re_source_block_format2 = SourceBlockFormat( 2, start, column, end )
-
-
-#
-# The list of supported documentation block formats.  We could add new ones
-# quite easily.
-#
-re_source_block_formats = [re_source_block_format1, re_source_block_format2]
-
-
-#
-# The following regular expressions correspond to markup tags within the
-# documentation comment blocks.  They are equivalent despite their different
-# syntax.
-#
-# A markup tag consists of letters or character `-', to be found in group 1.
-#
-# Notice that a markup tag _must_ begin a new paragraph.
-#
-re_markup_tag1 = re.compile( r'''\s*<((?:\w|-)*)>''' )  # <xxxx> format
-re_markup_tag2 = re.compile( r'''\s*@((?:\w|-)*):''' )  # @xxxx: format
-
-#
-# The list of supported markup tags.  We could add new ones quite easily.
-#
-re_markup_tags = [re_markup_tag1, re_markup_tag2]
-
-
-#
-# A regular expression to detect a cross reference, after markup tags have
-# been stripped off.
-#
-# Two syntax forms are supported:
-#
-#   @<name>
-#   @<name>[<id>]
-#
-# where both `<name>' and `<id>' consist of alphanumeric characters, `_',
-# and `-'.  Use `<id>' if there are multiple, valid `<name>' entries.
-#
-# Example: @foo[bar]
-#
-re_crossref = re.compile( r"""
-                            @
-                            (?P<name>(?:\w|-)+
-                                     (?:\[(?:\w|-)+\])?)
-                            (?P<rest>.*)
-                          """, re.VERBOSE )
-
-#
-# Two regular expressions to detect italic and bold markup, respectively.
-# Group 1 is the markup, group 2 the rest of the line.
-#
-# Note that the markup is limited to words consisting of letters, digits,
-# the characters `_' and `-', or an apostrophe (but not as the first
-# character).
-#
-re_italic = re.compile( r"_((?:\w|-)(?:\w|'|-)*)_(.*)" )     #  _italic_
-re_bold   = re.compile( r"\*((?:\w|-)(?:\w|'|-)*)\*(.*)" )   #  *bold*
-
-#
-# This regular expression code to identify an URL has been taken from
-#
-#   https://mail.python.org/pipermail/tutor/2002-September/017228.html
-#
-# (with slight modifications).
-#
-urls = r'(?:https?|telnet|gopher|file|wais|ftp)'
-ltrs = r'\w'
-gunk = r'/#~:.?+=&%@!\-'
-punc = r'.:?\-'
-any  = "%(ltrs)s%(gunk)s%(punc)s" % { 'ltrs' : ltrs,
-                                      'gunk' : gunk,
-                                      'punc' : punc }
-url  = r"""
-         (
-           \b                    # start at word boundary
-           %(urls)s :            # need resource and a colon
-           [%(any)s] +?          # followed by one or more of any valid
-                                 # character, but be conservative and
-                                 # take only what you need to...
-           (?=                   # [look-ahead non-consumptive assertion]
-             [%(punc)s]*         # either 0 or more punctuation
-             (?:                 # [non-grouping parentheses]
-               [^%(any)s] | $    # followed by a non-url char
-                                 # or end of the string
-             )
-           )
-         )
-        """ % {'urls' : urls,
-               'any'  : any,
-               'punc' : punc }
-
-re_url = re.compile( url, re.VERBOSE | re.MULTILINE )
-
-#
-# A regular expression that stops collection of comments for the current
-# block.
-#
-re_source_sep = re.compile( r'\s*/\*\s*\*/' )   #  /* */
-
-#
-# A regular expression to find possible C identifiers while outputting
-# source code verbatim, covering things like `*foo' or `(bar'.  Group 1 is
-# the prefix, group 2 the identifier -- since we scan lines from left to
-# right, sequentially splitting the source code into prefix and identifier
-# is fully sufficient for our purposes.
-#
-re_source_crossref = re.compile( r'(\W*)(\w*)' )
-
-#
-# A regular expression that matches a list of reserved C source keywords.
-#
-re_source_keywords = re.compile( '''\\b ( typedef   |
-                                          struct    |
-                                          enum      |
-                                          union     |
-                                          const     |
-                                          char      |
-                                          int       |
-                                          short     |
-                                          long      |
-                                          void      |
-                                          signed    |
-                                          unsigned  |
-                                          \#include |
-                                          \#define  |
-                                          \#undef   |
-                                          \#if      |
-                                          \#ifdef   |
-                                          \#ifndef  |
-                                          \#else    |
-                                          \#endif   ) \\b''', re.VERBOSE )
-
-
-################################################################
-##
-##  SOURCE BLOCK CLASS
-##
-##  There are two important fields in a `SourceBlock' object.
-##
-##    self.lines
-##      A list of text lines for the corresponding block.
-##
-##    self.content
-##      For documentation comment blocks only, this is the block content
-##      that has been `unboxed' from its decoration.  This is `None' for all
-##      other blocks (i.e., sources or ordinary comments with no starting
-##      markup tag)
-##
-class  SourceBlock:
-
-    def  __init__( self, processor, filename, lineno, lines ):
-        self.processor = processor
-        self.filename  = filename
-        self.lineno    = lineno
-        self.lines     = lines[:]
-        self.format    = processor.format
-        self.content   = []
-
-        if self.format == None:
-            return
-
-        words = []
-
-        # extract comment lines
-        lines = []
-
-        for line0 in self.lines:
-            m = self.format.column.match( line0 )
-            if m:
-                lines.append( m.group( 1 ) )
-
-        # now, look for a markup tag
-        for l in lines:
-            l = string.strip( l )
-            if len( l ) > 0:
-                for tag in re_markup_tags:
-                    if tag.match( l ):
-                        self.content = lines
-                        return
-
-    def  location( self ):
-        return "(" + self.filename + ":" + repr( self.lineno ) + ")"
-
-    # debugging only -- not used in normal operations
-    def  dump( self ):
-        if self.content:
-            print( "{{{content start---" )
-            for l in self.content:
-                print( l )
-            print( "---content end}}}" )
-            return
-
-        fmt = ""
-        if self.format:
-            fmt = repr( self.format.id ) + " "
-
-        for line in self.lines:
-            print( line )
-
-
-################################################################
-##
-##  SOURCE PROCESSOR CLASS
-##
-##  The `SourceProcessor' is in charge of reading a C source file and
-##  decomposing it into a series of different `SourceBlock' objects.
-##
-##  A SourceBlock object consists of the following data.
-##
-##    - A documentation comment block using one of the layouts above.  Its
-##      exact format will be discussed later.
-##
-##    - Normal sources lines, including comments.
-##
-##
-class  SourceProcessor:
-
-    def  __init__( self ):
-        """Initialize a source processor."""
-        self.blocks   = []
-        self.filename = None
-        self.format   = None
-        self.lines    = []
-
-    def  reset( self ):
-        """Reset a block processor and clean up all its blocks."""
-        self.blocks = []
-        self.format = None
-
-    def  parse_file( self, filename ):
-        """Parse a C source file and add its blocks to the processor's
-           list."""
-        self.reset()
-
-        self.filename = filename
-
-        fileinput.close()
-        self.format = None
-        self.lineno = 0
-        self.lines  = []
-
-        for line in fileinput.input( filename ):
-            # strip trailing newlines, important on Windows machines!
-            if line[-1] == '\012':
-                line = line[0:-1]
-
-            if self.format == None:
-                self.process_normal_line( line )
-            else:
-                if self.format.end.match( line ):
-                    # A normal block end.  Add it to `lines' and create a
-                    # new block
-                    self.lines.append( line )
-                    self.add_block_lines()
-                elif self.format.column.match( line ):
-                    # A normal column line.  Add it to `lines'.
-                    self.lines.append( line )
-                else:
-                    # An unexpected block end.  Create a new block, but
-                    # don't process the line.
-                    self.add_block_lines()
-
-                    # we need to process the line again
-                    self.process_normal_line( line )
-
-        # record the last lines
-        self.add_block_lines()
-
-    def  process_normal_line( self, line ):
-        """Process a normal line and check whether it is the start of a new
-           block."""
-        for f in re_source_block_formats:
-            if f.start.match( line ):
-                self.add_block_lines()
-                self.format = f
-                self.lineno = fileinput.filelineno()
-
-        self.lines.append( line )
-
-    def  add_block_lines( self ):
-        """Add the current accumulated lines and create a new block."""
-        if self.lines != []:
-            block = SourceBlock( self,
-                                 self.filename,
-                                 self.lineno,
-                                 self.lines )
-
-            self.blocks.append( block )
-            self.format = None
-            self.lines  = []
-
-    # debugging only, not used in normal operations
-    def  dump( self ):
-        """Print all blocks in a processor."""
-        for b in self.blocks:
-            b.dump()
-
-# eof
diff --git a/src/tools/docmaker/tohtml.py b/src/tools/docmaker/tohtml.py
deleted file mode 100644
index 97a5459..0000000
--- a/src/tools/docmaker/tohtml.py
+++ /dev/null
@@ -1,726 +0,0 @@
-#
-#  tohtml.py
-#
-#    A sub-class container of the `Formatter' class to produce HTML.
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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 parent class is contained in file `formatter.py'.
-
-
-from sources import *
-from content import *
-from formatter import *
-
-import time
-
-
-# The following strings define the HTML header used by all generated pages.
-html_header_1 = """\
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
-"https://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<title>\
-"""
-
-html_header_2 = """\
- API Reference</title>
-<style type="text/css">
-  a:link { color: #0000EF; }
-  a:visited { color: #51188E; }
-  a:hover { color: #FF0000; }
-
-  body { font-family: Verdana, Geneva, Arial, Helvetica, serif;
-         color: #000000;
-         background: #FFFFFF;
-         width: 87%;
-         margin: auto; }
-
-  div.section { width: 75%;
-                margin: auto; }
-  div.section hr { margin: 4ex 0 1ex 0; }
-  div.section h4 { background-color: #EEEEFF;
-                   font-size: medium;
-                   font-style: oblique;
-                   font-weight: bold;
-                   margin: 3ex 0 1.5ex 9%;
-                   padding: 0.3ex 0 0.3ex 1%; }
-  div.section p { margin: 1.5ex 0 1.5ex 10%; }
-  div.section pre { margin: 3ex 0 3ex 9%;
-                    background-color: #D6E8FF;
-                    padding: 2ex 0 2ex 1%; }
-  div.section table.fields { width: 90%;
-                             margin: 1.5ex 0 1.5ex 10%; }
-  div.section table.toc { width: 95%;
-                          margin: 1.5ex 0 1.5ex 5%; }
-  div.timestamp { text-align: center;
-                  font-size: 69%;
-                  margin: 1.5ex 0 1.5ex 0; }
-
-  h1 { text-align: center; }
-  h3 { font-size: medium;
-       margin: 4ex 0 1.5ex 0; }
-
-  p { text-align: justify; }
-
-  pre.colored { color: blue; }
-
-  span.keyword { font-family: monospace;
-                 text-align: left;
-                 white-space: pre;
-                 color: darkblue; }
-
-  table.fields td.val { font-weight: bold;
-                        text-align: right;
-                        width: 30%;
-                        vertical-align: baseline;
-                        padding: 1ex 1em 1ex 0; }
-  table.fields td.desc { vertical-align: baseline;
-                         padding: 1ex 0 1ex 1em; }
-  table.fields td.desc p:first-child { margin: 0; }
-  table.fields td.desc p { margin: 1.5ex 0 0 0; }
-  table.index { margin: 6ex auto 6ex auto;
-                border: 0;
-                border-collapse: separate;
-                border-spacing: 1em 0.3ex; }
-  table.index tr { padding: 0; }
-  table.index td { padding: 0; }
-  table.index-toc-link { width: 100%;
-                         border: 0;
-                         border-spacing: 0;
-                         margin: 1ex 0 1ex 0; }
-  table.index-toc-link td.left { padding: 0 0.5em 0 0.5em;
-                                 font-size: 83%;
-                                 text-align: left; }
-  table.index-toc-link td.middle { padding: 0 0.5em 0 0.5em;
-                                   font-size: 83%;
-                                   text-align: center; }
-  table.index-toc-link td.right { padding: 0 0.5em 0 0.5em;
-                                  font-size: 83%;
-                                  text-align: right; }
-  table.synopsis { margin: 6ex auto 6ex auto;
-                   border: 0;
-                   border-collapse: separate;
-                   border-spacing: 2em 0.6ex; }
-  table.synopsis tr { padding: 0; }
-  table.synopsis td { padding: 0; }
-  table.toc td.link { width: 30%;
-                      text-align: right;
-                      vertical-align: baseline;
-                      padding: 1ex 1em 1ex 0; }
-  table.toc td.desc { vertical-align: baseline;
-                      padding: 1ex 0 1ex 1em;
-                      text-align: left; }
-  table.toc td.desc p:first-child { margin: 0;
-                                    text-align: left; }
-  table.toc td.desc p { margin: 1.5ex 0 0 0;
-                        text-align: left; }
-
-</style>
-</head>
-<body>
-"""
-
-html_header_3l = """
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-
-html_header_3r = """
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-
-html_header_4 = """\
-">Index</a>]</td><td class="right">[<a href="\
-"""
-
-html_header_5t = """\
-">TOC</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_5i = """\
-">Index</a>]</td></tr></table>
-<h1>\
-"""
-
-html_header_6 = """\
- API Reference</h1>
-"""
-
-
-# The HTML footer used by all generated pages.
-html_footer = """\
-</body>
-</html>\
-"""
-
-# The header and footer used for each section.
-section_title_header1 = '<h1 id="'
-section_title_header2 = '">'
-section_title_footer = "</h1>"
-
-# The header and footer used for code segments.
-code_header = '<pre class="colored">'
-code_footer = '</pre>'
-
-# Paragraph header and footer.
-para_header = "<p>"
-para_footer = "</p>"
-
-# Block header and footer.
-block_header        = '<div class="section">'
-block_footer_start  = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-block_footer_middle = """\
-">Index</a>]</td>\
-<td class="middle">[<a href="#">Top</a>]</td>\
-<td class="right">[<a href="\
-"""
-block_footer_end    = """\
-">TOC</a>]</td></tr></table></div>
-"""
-
-# Description header/footer.
-description_header = ""
-description_footer = ""
-
-# Marker header/inter/footer combination.
-marker_header = "<h4>"
-marker_inter  = "</h4>"
-marker_footer = ""
-
-# Header location header/footer.
-header_location_header = "<p>"
-header_location_footer = "</p>"
-
-# Source code extracts header/footer.
-source_header = "<pre>"
-source_footer = "</pre>"
-
-# Chapter header/inter/footer.
-chapter_header = """\
-<div class="section">
-<h2>\
-"""
-chapter_inter  = '</h2>'
-chapter_footer = '</div>'
-
-# Index footer.
-index_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="right">[<a href="\
-"""
-index_footer_end = """\
-">TOC</a>]</td></tr></table>
-"""
-
-# TOC footer.
-toc_footer_start = """\
-<hr>
-<table class="index-toc-link"><tr><td class="left">[<a href="\
-"""
-toc_footer_end = """\
-">Index</a>]</td></tr></table>
-"""
-
-
-# Source language keyword coloration and styling.
-keyword_prefix = '<span class="keyword">'
-keyword_suffix = '</span>'
-
-section_synopsis_header = '<h2>Synopsis</h2>'
-section_synopsis_footer = ''
-
-
-# Translate a single line of source to HTML.  This converts `<', `>', and
-# `&' into `&lt;',`&gt;', and `&amp;'.
-#
-def  html_quote( line ):
-    result = string.replace( line,   "&", "&amp;" )
-    result = string.replace( result, "<", "&lt;"  )
-    result = string.replace( result, ">", "&gt;"  )
-    return result
-
-
-################################################################
-##
-##  HTML FORMATTER CLASS
-##
-class  HtmlFormatter( Formatter ):
-
-    def  __init__( self, processor, project_title, file_prefix ):
-        Formatter.__init__( self, processor )
-
-        global html_header_1
-        global html_header_2
-        global html_header_3l, html_header_3r
-        global html_header_4
-        global html_header_5t, html_header_5i
-        global html_header_6
-        global html_footer
-
-        if file_prefix:
-            file_prefix = file_prefix + "-"
-        else:
-            file_prefix = ""
-
-        self.headers       = processor.headers
-        self.project_title = project_title
-        self.file_prefix   = file_prefix
-        self.html_header   = (
-          html_header_1 + project_title
-          + html_header_2
-          + html_header_3l + file_prefix + "index.html"
-          + html_header_4 + file_prefix + "toc.html"
-          + html_header_5t + project_title
-          + html_header_6 )
-        self.html_index_header = (
-          html_header_1 + project_title
-          + html_header_2
-          + html_header_3r + file_prefix + "toc.html"
-          + html_header_5t + project_title
-          + html_header_6 )
-        self.html_toc_header = (
-          html_header_1 + project_title
-          + html_header_2
-          + html_header_3l + file_prefix + "index.html"
-          + html_header_5i + project_title
-          + html_header_6 )
-        self.html_footer = (
-          '<div class="timestamp">generated on '
-          + time.asctime( time.localtime( time.time() ) )
-          + "</div>" + html_footer )
-
-        self.columns = 3
-
-    def  make_section_url( self, section ):
-        return self.file_prefix + section.name + ".html"
-
-    def  make_block_url( self, block, name = None ):
-        if name == None:
-            name = block.name
-
-        try:
-            section_url = self.make_section_url( block.section )
-        except:
-            # we already have a section
-            section_url = self.make_section_url( block )
-
-        return section_url + "#" + name
-
-    def  make_html_word( self, word ):
-        """Analyze a simple word to detect cross-references and markup."""
-        # handle cross-references
-        m = re_crossref.match( word )
-        if m:
-            try:
-                name = m.group( 'name' )
-                rest = m.group( 'rest' )
-                block = self.identifiers[name]
-                url   = self.make_block_url( block )
-                # display `foo[bar]' as `foo'
-                name = re.sub( r'\[.*\]', '', name )
-                # normalize url, following RFC 3986
-                url = string.replace( url, "[", "(" )
-                url = string.replace( url, "]", ")" )
-
-                try:
-                    # for sections, display title
-                    url = ( '&lsquo;<a href="' + url + '">'
-                            + block.title + '</a>&rsquo;'
-                            + rest )
-                except:
-                    url = ( '<a href="' + url + '">'
-                            + name + '</a>'
-                            + rest )
-
-                return url
-            except:
-                # we detected a cross-reference to an unknown item
-                sys.stderr.write( "WARNING: undefined cross reference"
-                                  + " '" + name + "'.\n" )
-                return '?' + name + '?' + rest
-
-        # handle markup for italic and bold
-        m = re_italic.match( word )
-        if m:
-            name = m.group( 1 )
-            rest = m.group( 2 )
-            return '<i>' + name + '</i>' + rest
-
-        m = re_bold.match( word )
-        if m:
-            name = m.group( 1 )
-            rest = m.group( 2 )
-            return '<b>' + name + '</b>' + rest
-
-        return html_quote( word )
-
-    def  make_html_para( self, words ):
-        """Convert words of a paragraph into tagged HTML text.  Also handle
-           cross references."""
-        line = ""
-        if words:
-            line = self.make_html_word( words[0] )
-            for word in words[1:]:
-                line = line + " " + self.make_html_word( word )
-            # handle hyperlinks
-            line = re_url.sub( r'<a href="\1">\1</a>', line )
-            # convert `...' quotations into real left and right single quotes
-            line = re.sub( r"(^|\W)`(.*?)'(\W|$)",
-                           r'\1&lsquo;\2&rsquo;\3',
-                           line )
-            # convert tilde into non-breakable space
-            line = string.replace( line, "~", "&nbsp;" )
-
-        return para_header + line + para_footer
-
-    def  make_html_code( self, lines ):
-        """Convert a code sequence to HTML."""
-        line = code_header + '\n'
-        for l in lines:
-            line = line + html_quote( l ).rstrip() + '\n'
-
-        return line + code_footer
-
-    def  make_html_items( self, items ):
-        """Convert a field's content into HTML."""
-        lines = []
-        for item in items:
-            if item.lines:
-                lines.append( self.make_html_code( item.lines ) )
-            else:
-                lines.append( self.make_html_para( item.words ) )
-
-        return string.join( lines, '\n' )
-
-    def  print_html_items( self, items ):
-        print( self.make_html_items( items ) )
-
-    def  print_html_field( self, field ):
-        if field.name:
-            print( '<table><tr valign="top"><td><b>'
-                   + field.name
-                   + "</b></td><td>" )
-
-        print( self.make_html_items( field.items ) )
-
-        if field.name:
-            print( "</td></tr></table>" )
-
-    def  html_source_quote( self, line, block_name = None ):
-        result = ""
-        while line:
-            m = re_source_crossref.match( line )
-            if m:
-                name   = m.group( 2 )
-                prefix = html_quote( m.group( 1 ) )
-                length = len( m.group( 0 ) )
-
-                if name == block_name:
-                    # this is the current block name, if any
-                    result = result + prefix + '<b>' + name + '</b>'
-                elif re_source_keywords.match( name ):
-                    # this is a C keyword
-                    result = ( result + prefix
-                               + keyword_prefix + name + keyword_suffix )
-                elif name in self.identifiers:
-                    # this is a known identifier
-                    block = self.identifiers[name]
-                    id = block.name
-
-                    # link to a field ID if possible
-                    try:
-                      for markup in block.markups:
-                          if markup.tag == 'values':
-                              for field in markup.fields:
-                                  if field.name:
-                                      id = name
-
-                      result = ( result + prefix
-                                 + '<a href="'
-                                 + self.make_block_url( block, id )
-                                 + '">' + name + '</a>' )
-                    except:
-                      # sections don't have `markups'; however, we don't
-                      # want references to sections here anyway
-                      result = result + html_quote( line[:length] )
-
-                else:
-                    result = result + html_quote( line[:length] )
-
-                line = line[length:]
-            else:
-                result = result + html_quote( line )
-                line   = []
-
-        return result
-
-    def  print_html_field_list( self, fields ):
-        print( '<table class="fields">' )
-        for field in fields:
-            print( '<tr><td class="val" id="' + field.name + '">'
-                   + field.name
-                   + '</td><td class="desc">' )
-            self.print_html_items( field.items )
-            print( "</td></tr>" )
-        print( "</table>" )
-
-    def  print_html_markup( self, markup ):
-        table_fields = []
-        for field in markup.fields:
-            if field.name:
-                # We begin a new series of field or value definitions.  We
-                # record them in the `table_fields' list before outputting
-                # all of them as a single table.
-                table_fields.append( field )
-            else:
-                if table_fields:
-                    self.print_html_field_list( table_fields )
-                    table_fields = []
-
-                self.print_html_items( field.items )
-
-        if table_fields:
-            self.print_html_field_list( table_fields )
-
-    #
-    # formatting the index
-    #
-    def  index_enter( self ):
-        print( self.html_index_header )
-        self.index_items = {}
-
-    def  index_name_enter( self, name ):
-        block = self.identifiers[name]
-        url   = self.make_block_url( block )
-        self.index_items[name] = url
-
-    def  index_exit( self ):
-        # `block_index' already contains the sorted list of index names
-        count = len( self.block_index )
-        rows  = ( count + self.columns - 1 ) // self.columns
-
-        print( '<table class="index">' )
-        for r in range( rows ):
-            line = "<tr>"
-            for c in range( self.columns ):
-                i = r + c * rows
-                if i < count:
-                    bname = self.block_index[r + c * rows]
-                    url   = self.index_items[bname]
-                    # display `foo[bar]' as `foo (bar)'
-                    bname = string.replace( bname, "[", " (" )
-                    bname = string.replace( bname, "]", ")"  )
-                    # normalize url, following RFC 3986
-                    url = string.replace( url, "[", "(" )
-                    url = string.replace( url, "]", ")" )
-                    line  = ( line + '<td><a href="' + url + '">'
-                              + bname + '</a></td>' )
-                else:
-                    line = line + '<td></td>'
-            line = line + "</tr>"
-            print( line )
-
-        print( "</table>" )
-
-        print( index_footer_start
-               + self.file_prefix + "toc.html"
-               + index_footer_end )
-
-        print( self.html_footer )
-
-        self.index_items = {}
-
-    def  index_dump( self, index_filename = None ):
-        if index_filename == None:
-            index_filename = self.file_prefix + "index.html"
-
-        Formatter.index_dump( self, index_filename )
-
-    #
-    # formatting the table of contents
-    #
-    def  toc_enter( self ):
-        print( self.html_toc_header )
-        print( "<h1>Table of Contents</h1>" )
-
-    def  toc_chapter_enter( self, chapter ):
-        print( chapter_header + string.join( chapter.title ) + chapter_inter )
-        print( '<table class="toc">' )
-
-    def  toc_section_enter( self, section ):
-        print( '<tr><td class="link">'
-               + '<a href="' + self.make_section_url( section ) + '">'
-               + section.title + '</a></td><td class="desc">' )
-        print( self.make_html_para( section.abstract ) )
-
-    def  toc_section_exit( self, section ):
-        print( "</td></tr>" )
-
-    def  toc_chapter_exit( self, chapter ):
-        print( "</table>" )
-        print( chapter_footer )
-
-    def  toc_index( self, index_filename ):
-        print( chapter_header
-               + '<a href="' + index_filename + '">Global Index</a>'
-               + chapter_inter + chapter_footer )
-
-    def  toc_exit( self ):
-        print( toc_footer_start
-               + self.file_prefix + "index.html"
-               + toc_footer_end )
-
-        print( self.html_footer )
-
-    def  toc_dump( self, toc_filename = None, index_filename = None ):
-        if toc_filename == None:
-            toc_filename = self.file_prefix + "toc.html"
-
-        if index_filename == None:
-            index_filename = self.file_prefix + "index.html"
-
-        Formatter.toc_dump( self, toc_filename, index_filename )
-
-    #
-    # formatting sections
-    #
-    def  section_enter( self, section ):
-        print( self.html_header )
-
-        print( section_title_header1 + section.name + section_title_header2
-               + section.title
-               + section_title_footer )
-
-        maxwidth = 0
-        for b in section.blocks.values():
-            if len( b.name ) > maxwidth:
-                maxwidth = len( b.name )
-
-        width = 70  # XXX magic number
-        if maxwidth > 0:
-            # print section synopsis
-            print( section_synopsis_header )
-            print( '<table class="synopsis">' )
-
-            columns = width // maxwidth
-            if columns < 1:
-                columns = 1
-
-            count = len( section.block_names )
-            # don't handle last entry if it is empty
-            if section.block_names[-1] == "/empty/":
-                count -= 1
-            rows  = ( count + columns - 1 ) // columns
-
-            for r in range( rows ):
-                line = "<tr>"
-                for c in range( columns ):
-                    i = r + c * rows
-                    line = line + '<td>'
-                    if i < count:
-                        name = section.block_names[i]
-                        if name == "/empty/":
-                            # it can happen that a complete row is empty, and
-                            # without a proper `filler' the browser might
-                            # collapse the row to a much smaller height (or
-                            # even omit it completely)
-                            line = line + "&nbsp;"
-                        else:
-                            url = name
-                            # display `foo[bar]' as `foo'
-                            name = re.sub( r'\[.*\]', '', name )
-                            # normalize url, following RFC 3986
-                            url = string.replace( url, "[", "(" )
-                            url = string.replace( url, "]", ")" )
-                            line = ( line + '<a href="#' + url + '">'
-                                     + name + '</a>' )
-
-                    line = line + '</td>'
-                line = line + "</tr>"
-                print( line )
-
-            print( "</table>" )
-            print( section_synopsis_footer )
-
-        print( description_header )
-        print( self.make_html_items( section.description ) )
-        print( description_footer )
-
-    def  block_enter( self, block ):
-        print( block_header )
-
-        # place html anchor if needed
-        if block.name:
-            url = block.name
-            # display `foo[bar]' as `foo'
-            name = re.sub( r'\[.*\]', '', block.name )
-            # normalize url, following RFC 3986
-            url = string.replace( url, "[", "(" )
-            url = string.replace( url, "]", ")" )
-            print( '<h3 id="' + url + '">' + name + '</h3>' )
-
-        # dump the block C source lines now
-        if block.code:
-            header = ''
-            for f in self.headers.keys():
-                header_filename = os.path.normpath(block.source.filename)
-                if header_filename.find( os.path.normpath( f ) ) >= 0:
-                    header = self.headers[f] + ' (' + f + ')'
-                    break
-
-#           if not header:
-#               sys.stderr.write(
-#                 "WARNING: No header macro for"
-#                 + " '" + block.source.filename + "'.\n" )
-
-            if header:
-                print( header_location_header
-                       + 'Defined in ' + header + '.'
-                       + header_location_footer )
-
-            print( source_header )
-            for l in block.code:
-                print( self.html_source_quote( l, block.name ) )
-            print( source_footer )
-
-    def  markup_enter( self, markup, block ):
-        if markup.tag == "description":
-            print( description_header )
-        else:
-            print( marker_header + markup.tag + marker_inter )
-
-        self.print_html_markup( markup )
-
-    def  markup_exit( self, markup, block ):
-        if markup.tag == "description":
-            print( description_footer )
-        else:
-            print( marker_footer )
-
-    def  block_exit( self, block ):
-        print( block_footer_start + self.file_prefix + "index.html"
-               + block_footer_middle + self.file_prefix + "toc.html"
-               + block_footer_end )
-
-    def  section_exit( self, section ):
-        print( html_footer )
-
-    def  section_dump_all( self ):
-        for section in self.sections:
-            self.section_dump( section,
-                               self.file_prefix + section.name + '.html' )
-
-# eof
diff --git a/src/tools/docmaker/utils.py b/src/tools/docmaker/utils.py
deleted file mode 100644
index f40f167..0000000
--- a/src/tools/docmaker/utils.py
+++ /dev/null
@@ -1,127 +0,0 @@
-#
-#  utils.py
-#
-#    Auxiliary functions for the `docmaker' tool (library file).
-#
-#  Copyright 2002-2018 by
-#  David Turner.
-#
-#  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.
-
-
-import string, sys, os, glob, itertools
-
-
-# current output directory
-#
-output_dir = None
-
-
-# A function that generates a sorting key.  We want lexicographical order
-# (primary key) except that capital letters are sorted before lowercase
-# ones (secondary key).
-#
-# The primary key is implemented by lowercasing the input.  The secondary
-# key is simply the original data appended, character by character.  For
-# example, the sort key for `FT_x' is `fFtT__xx', while the sort key for
-# `ft_X' is `fftt__xX'.  Since ASCII codes of uppercase letters are
-# numerically smaller than the codes of lowercase letters, `fFtT__xx' gets
-# sorted before `fftt__xX'.
-#
-def  index_key( s ):
-    return string.join( itertools.chain( *zip( s.lower(), s ) ) )
-
-
-# Sort `input_list', placing the elements of `order_list' in front.
-#
-def  sort_order_list( input_list, order_list ):
-    new_list = order_list[:]
-    for id in input_list:
-        if not id in order_list:
-            new_list.append( id )
-    return new_list
-
-
-# Divert standard output to a given project documentation file.  Use
-# `output_dir' to determine the filename location if necessary and save the
-# old stdout handle in a tuple that is returned by this function.
-#
-def  open_output( filename ):
-    global output_dir
-
-    if output_dir and output_dir != "":
-        filename = output_dir + os.sep + filename
-
-    old_stdout = sys.stdout
-    new_file   = open( filename, "w" )
-    sys.stdout = new_file
-
-    return ( new_file, old_stdout )
-
-
-# Close the output that was returned by `open_output'.
-#
-def  close_output( output ):
-    output[0].close()
-    sys.stdout = output[1]
-
-
-# Check output directory.
-#
-def  check_output():
-    global output_dir
-    if output_dir:
-        if output_dir != "":
-            if not os.path.isdir( output_dir ):
-                sys.stderr.write( "argument"
-                                  + " '" + output_dir + "' "
-                                  + "is not a valid directory\n" )
-                sys.exit( 2 )
-        else:
-            output_dir = None
-
-
-def  file_exists( pathname ):
-    """Check that a given file exists."""
-    result = 1
-    try:
-        file = open( pathname, "r" )
-        file.close()
-    except:
-        result = None
-        sys.stderr.write( pathname + " couldn't be accessed\n" )
-
-    return result
-
-
-def  make_file_list( args = None ):
-    """Build a list of input files from command-line arguments."""
-    file_list = []
-    # sys.stderr.write( repr( sys.argv[1 :] ) + '\n' )
-
-    if not args:
-        args = sys.argv[1:]
-
-    for pathname in args:
-        if string.find( pathname, '*' ) >= 0:
-            newpath = glob.glob( pathname )
-            newpath.sort()  # sort files -- this is important because
-                            # of the order of files
-        else:
-            newpath = [pathname]
-
-        file_list.extend( newpath )
-
-    if len( file_list ) == 0:
-        file_list = None
-    else:
-        # now filter the file list to remove non-existing ones
-        file_list = filter( file_exists, file_list )
-
-    return file_list
-
-# eof
diff --git a/src/tools/glnames.py b/src/tools/glnames.py
index e88f710..e1b613d 100644
--- a/src/tools/glnames.py
+++ b/src/tools/glnames.py
@@ -6,7 +6,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -5318,7 +5318,7 @@
   write( " *\n" )
   write( " *   PostScript glyph names.\n" )
   write( " *\n" )
-  write( " * Copyright 2005-2018 by\n" )
+  write( " * Copyright 2005-2019 by\n" )
   write( " * David Turner, Robert Wilhelm, and Werner Lemberg.\n" )
   write( " *\n" )
   write( " * This file is part of the FreeType project, and may only be used,\n" )
diff --git a/src/tools/update-copyright-year b/src/tools/update-copyright-year
index 934f11c..2ae50d6 100755
--- a/src/tools/update-copyright-year
+++ b/src/tools/update-copyright-year
@@ -2,7 +2,7 @@
   & eval 'exec perl -wS -i "$0" $argv:q'
     if 0;
 
-# Copyright 2015-2018 by
+# Copyright (C) 2015-2019 by
 # Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -67,7 +67,8 @@
     s {
         (?<begin>.*)
         Copyright
-        (?<space1>\ +)
+        (?<space1>(\ +
+                   | \ +\(C\)\ +))
         (?<first>[12][0-9][0-9][0-9])
         (?<middle>.+)
         (?<last>[12][0-9][0-9][0-9])
@@ -78,14 +79,15 @@
       }
       {
         # Fill line to the same length (if appropriate); we skip the middle
-        # part but insert two spaces and `-'.
+        # part but insert `(C)', three spaces, and `-'.
         my $space = length($+{space1}) - 1
                     + length($+{middle}) - 1
                     + length($+{space2}) - 1
-                    + length($+{space3});
+                    + length($+{space3})
+                    - (length("(C)") + 1);
 
         print "$+{begin}";
-        print "Copyright\ $+{first}-$year\ by";
+        print "Copyright\ (C)\ $+{first}-$year\ by";
         print ' ' x $space if length($+{end});
         print "$+{end}\n";
         $replaced = 1;
@@ -95,7 +97,8 @@
     s {
         (?<begin>.*)
         Copyright
-        (?<space1>\ +)
+        (?<space1>(\ +
+                   | \ +\(C\)\ +))
         (?<first>[12][0-9][0-9][0-9])
         (?<space2>\ +)
         by
@@ -103,7 +106,7 @@
         (?<end>.*)
       }
       {
-        # Fill line to the same length (if appropriate); we insert two
+        # Fill line to the same length (if appropriate); we insert three
         # spaces, a `-', and the current year.
         my $space = length($+{space1}) - 1
                     + length($+{space2}) - 1
@@ -111,7 +114,7 @@
                     - (length($year) + 1);
 
         print "$+{begin}";
-        print "Copyright $+{first}-$year by";
+        print "Copyright\ (C)\ $+{first}-$year\ by";
         # If $space is negative this inserts nothing.
         print ' ' x $space if length($+{end});
         print "$+{end}\n";
diff --git a/src/truetype/Jamfile b/src/truetype/Jamfile
index e321fba..2de63a7 100644
--- a/src/truetype/Jamfile
+++ b/src/truetype/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/truetype Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/module.mk b/src/truetype/module.mk
index 16bc9c8..8a841cc 100644
--- a/src/truetype/module.mk
+++ b/src/truetype/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/rules.mk b/src/truetype/rules.mk
index e1547ed..df8dcd4 100644
--- a/src/truetype/rules.mk
+++ b/src/truetype/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/truetype/truetype.c b/src/truetype/truetype.c
index dd64db8..84928e7 100644
--- a/src/truetype/truetype.c
+++ b/src/truetype/truetype.c
@@ -4,7 +4,7 @@
  *
  *   FreeType TrueType driver component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttdriver.c b/src/truetype/ttdriver.c
index eac736c..ff626d5 100644
--- a/src/truetype/ttdriver.c
+++ b/src/truetype/ttdriver.c
@@ -4,7 +4,7 @@
  *
  *   TrueType font driver implementation (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -51,7 +51,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttdriver
+#define FT_COMPONENT  ttdriver
 
 
   /*
@@ -498,17 +498,19 @@
   FT_DEFINE_SERVICE_MULTIMASTERSREC(
     tt_service_gx_multi_masters,
 
-    (FT_Get_MM_Func)        NULL,                   /* get_mm         */
-    (FT_Set_MM_Design_Func) NULL,                   /* set_mm_design  */
-    (FT_Set_MM_Blend_Func)  TT_Set_MM_Blend,        /* set_mm_blend   */
-    (FT_Get_MM_Blend_Func)  TT_Get_MM_Blend,        /* get_mm_blend   */
-    (FT_Get_MM_Var_Func)    TT_Get_MM_Var,          /* get_mm_var     */
-    (FT_Set_Var_Design_Func)TT_Set_Var_Design,      /* set_var_design */
-    (FT_Get_Var_Design_Func)TT_Get_Var_Design,      /* get_var_design */
-    (FT_Set_Instance_Func)  TT_Set_Named_Instance,  /* set_instance   */
+    (FT_Get_MM_Func)             NULL,                  /* get_mm              */
+    (FT_Set_MM_Design_Func)      NULL,                  /* set_mm_design       */
+    (FT_Set_MM_Blend_Func)       TT_Set_MM_Blend,       /* set_mm_blend        */
+    (FT_Get_MM_Blend_Func)       TT_Get_MM_Blend,       /* get_mm_blend        */
+    (FT_Get_MM_Var_Func)         TT_Get_MM_Var,         /* get_mm_var          */
+    (FT_Set_Var_Design_Func)     TT_Set_Var_Design,     /* set_var_design      */
+    (FT_Get_Var_Design_Func)     TT_Get_Var_Design,     /* get_var_design      */
+    (FT_Set_Instance_Func)       TT_Set_Named_Instance, /* set_instance        */
+    (FT_Set_MM_WeightVector_Func)NULL,                  /* set_mm_weightvector */
+    (FT_Get_MM_WeightVector_Func)NULL,                  /* get_mm_weightvector */
 
-    (FT_Get_Var_Blend_Func) tt_get_var_blend,       /* get_var_blend  */
-    (FT_Done_Blend_Func)    tt_done_blend           /* done_blend     */
+    (FT_Get_Var_Blend_Func)      tt_get_var_blend,      /* get_var_blend       */
+    (FT_Done_Blend_Func)         tt_done_blend          /* done_blend          */
   )
 
   FT_DEFINE_SERVICE_METRICSVARIATIONSREC(
diff --git a/src/truetype/ttdriver.h b/src/truetype/ttdriver.h
index 45e25b6..3936c6a 100644
--- a/src/truetype/ttdriver.h
+++ b/src/truetype/ttdriver.h
@@ -4,7 +4,7 @@
  *
  *   High-level TrueType driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/tterrors.h b/src/truetype/tterrors.h
index a14dee3..5609d28 100644
--- a/src/truetype/tterrors.h
+++ b/src/truetype/tterrors.h
@@ -4,7 +4,7 @@
  *
  *   TrueType error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttgload.c b/src/truetype/ttgload.c
index 9e98f11..a046840 100644
--- a/src/truetype/ttgload.c
+++ b/src/truetype/ttgload.c
@@ -4,7 +4,7 @@
  *
  *   TrueType Glyph Loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -45,7 +45,22 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttgload
+#define FT_COMPONENT  ttgload
+
+
+  /**************************************************************************
+   *
+   * Simple glyph flags.
+   */
+#define ON_CURVE_POINT  0x01  /* same value as FT_CURVE_TAG_ON            */
+#define X_SHORT_VECTOR  0x02
+#define Y_SHORT_VECTOR  0x04
+#define REPEAT_FLAG     0x08
+#define X_POSITIVE      0x10  /* two meanings depending on X_SHORT_VECTOR */
+#define SAME_X          0x10
+#define Y_POSITIVE      0x20  /* two meanings depending on Y_SHORT_VECTOR */
+#define SAME_Y          0x20
+#define OVERLAP_SIMPLE  0x40  /* we ignore this value                     */
 
 
   /**************************************************************************
@@ -62,11 +77,20 @@
 #define WE_HAVE_A_2X2              0x0080
 #define WE_HAVE_INSTR              0x0100
 #define USE_MY_METRICS             0x0200
-#define OVERLAP_COMPOUND           0x0400
+#define OVERLAP_COMPOUND           0x0400  /* we ignore this value */
 #define SCALED_COMPONENT_OFFSET    0x0800
 #define UNSCALED_COMPONENT_OFFSET  0x1000
 
 
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+#define IS_DEFAULT_INSTANCE( _face )             \
+          ( !( FT_IS_NAMED_INSTANCE( _face ) ||  \
+               FT_IS_VARIATION( _face )      ) )
+#else
+#define IS_DEFAULT_INSTANCE( _face )  1
+#endif
+
+
   /**************************************************************************
    *
    * Return the horizontal metrics in font units for a given glyph.
@@ -267,12 +291,9 @@
     FT_Error   error;
     FT_Stream  stream = loader->stream;
 
-    /* for non-debug mode */
     FT_UNUSED( glyph_index );
 
 
-    FT_TRACE4(( "Glyph %ld\n", glyph_index ));
-
     /* the following line sets the `error' variable through macros! */
     if ( FT_STREAM_SEEK( offset ) || FT_FRAME_ENTER( byte_count ) )
       return error;
@@ -337,7 +358,7 @@
     FT_Byte         *flag, *flag_limit;
     FT_Byte         c, count;
     FT_Vector       *vec, *vec_limit;
-    FT_Pos          x;
+    FT_Pos          x, y;
     FT_Short        *cont, *cont_limit, prev_cont;
     FT_Int          xy_size = 0;
 
@@ -454,7 +475,7 @@
         goto Invalid_Outline;
 
       *flag++ = c = FT_NEXT_BYTE( p );
-      if ( c & 8 )
+      if ( c & REPEAT_FLAG )
       {
         if ( p + 1 > limit )
           goto Invalid_Outline;
@@ -480,31 +501,29 @@
 
     for ( ; vec < vec_limit; vec++, flag++ )
     {
-      FT_Pos   y = 0;
-      FT_Byte  f = *flag;
+      FT_Pos   delta = 0;
+      FT_Byte  f     = *flag;
 
 
-      if ( f & 2 )
+      if ( f & X_SHORT_VECTOR )
       {
         if ( p + 1 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_BYTE( p );
-        if ( ( f & 16 ) == 0 )
-          y = -y;
+        delta = (FT_Pos)FT_NEXT_BYTE( p );
+        if ( !( f & X_POSITIVE ) )
+          delta = -delta;
       }
-      else if ( ( f & 16 ) == 0 )
+      else if ( !( f & SAME_X ) )
       {
         if ( p + 2 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_SHORT( p );
+        delta = (FT_Pos)FT_NEXT_SHORT( p );
       }
 
-      x     += y;
+      x     += delta;
       vec->x = x;
-      /* the cast is for stupid compilers */
-      *flag  = (FT_Byte)( f & ~( 2 | 16 ) );
     }
 
     /* reading the Y coordinates */
@@ -512,35 +531,36 @@
     vec       = gloader->current.outline.points;
     vec_limit = vec + n_points;
     flag      = (FT_Byte*)outline->tags;
-    x         = 0;
+    y         = 0;
 
     for ( ; vec < vec_limit; vec++, flag++ )
     {
-      FT_Pos   y = 0;
-      FT_Byte  f = *flag;
+      FT_Pos   delta = 0;
+      FT_Byte  f     = *flag;
 
 
-      if ( f & 4 )
+      if ( f & Y_SHORT_VECTOR )
       {
         if ( p + 1 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_BYTE( p );
-        if ( ( f & 32 ) == 0 )
-          y = -y;
+        delta = (FT_Pos)FT_NEXT_BYTE( p );
+        if ( !( f & Y_POSITIVE ) )
+          delta = -delta;
       }
-      else if ( ( f & 32 ) == 0 )
+      else if ( !( f & SAME_Y ) )
       {
         if ( p + 2 > limit )
           goto Invalid_Outline;
 
-        y = (FT_Pos)FT_NEXT_SHORT( p );
+        delta = (FT_Pos)FT_NEXT_SHORT( p );
       }
 
-      x     += y;
-      vec->y = x;
+      y     += delta;
+      vec->y = y;
+
       /* the cast is for stupid compilers */
-      *flag  = (FT_Byte)( f & FT_CURVE_TAG_ON );
+      *flag  = (FT_Byte)( f & ON_CURVE_POINT );
     }
 
     outline->n_points   = (FT_Short)n_points;
@@ -805,15 +825,9 @@
 
 
 #ifdef TT_USE_BYTECODE_INTERPRETER
-    if ( loader->glyph->control_len > 0xFFFFL )
-    {
-      FT_TRACE1(( "TT_Hint_Glyph: too long instructions" ));
-      FT_TRACE1(( " (0x%lx byte) is truncated\n",
-                  loader->glyph->control_len ));
-    }
     n_ins = loader->glyph->control_len;
 
-    /* save original point position in org */
+    /* save original point positions in `org' array */
     if ( n_ins > 0 )
       FT_ARRAY_COPY( zone->org, zone->cur, zone->n_points );
 
@@ -922,6 +936,11 @@
     FT_Outline*     outline;
     FT_Int          n_points;
 
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+    FT_Memory   memory    = loader->face->root.memory;
+    FT_Vector*  unrounded = NULL;
+#endif
+
 
     outline  = &gloader->current.outline;
     n_points = outline->n_points;
@@ -942,26 +961,32 @@
 
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
 
-    if ( FT_IS_NAMED_INSTANCE( FT_FACE( loader->face ) ) ||
-         FT_IS_VARIATION( FT_FACE( loader->face ) )      )
+    if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
     {
+      if ( FT_NEW_ARRAY( unrounded, n_points ) )
+        goto Exit;
+
       /* Deltas apply to the unscaled data. */
       error = TT_Vary_Apply_Glyph_Deltas( loader->face,
                                           loader->glyph_index,
                                           outline,
+                                          unrounded,
                                           (FT_UInt)n_points );
 
       /* recalculate linear horizontal and vertical advances */
       /* if we don't have HVAR and VVAR, respectively        */
+
+      /* XXX: change all FreeType modules to store `linear' and `vadvance' */
+      /*      in 26.6 format before the `base' module scales them to 16.16 */
       if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
-        loader->linear = outline->points[n_points - 3].x -
-                         outline->points[n_points - 4].x;
+        loader->linear = FT_PIX_ROUND( unrounded[n_points - 3].x -
+                                       unrounded[n_points - 4].x ) / 64;
       if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
-        loader->vadvance = outline->points[n_points - 1].x -
-                           outline->points[n_points - 2].x;
+        loader->vadvance = FT_PIX_ROUND( unrounded[n_points - 1].x -
+                                         unrounded[n_points - 2].x ) / 64;
 
       if ( error )
-        return error;
+        goto Exit;
     }
 
 #endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1016,10 +1041,23 @@
           /* compensate for any scaling by de/emboldening; */
           /* the amount was determined via experimentation */
           if ( x_scale_factor != 1000 && ppem > 11 )
+          {
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+            FT_Vector*  orig_points = outline->points;
+
+
+            if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
+              outline->points = unrounded;
+#endif
             FT_Outline_EmboldenXY( outline,
                                    FT_MulFix( 1280 * ppem,
                                               1000 - x_scale_factor ),
                                    0 );
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+            if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
+              outline->points = orig_points;
+#endif
+          }
           do_scale = TRUE;
         }
       }
@@ -1040,10 +1078,26 @@
 
       if ( do_scale )
       {
-        for ( ; vec < limit; vec++ )
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+        if ( !IS_DEFAULT_INSTANCE( FT_FACE( loader->face ) ) )
         {
-          vec->x = FT_MulFix( vec->x, x_scale );
-          vec->y = FT_MulFix( vec->y, y_scale );
+          FT_Vector*  u = unrounded;
+
+
+          for ( ; vec < limit; vec++, u++ )
+          {
+            vec->x = ( FT_MulFix( u->x, x_scale ) + 32 ) >> 6;
+            vec->y = ( FT_MulFix( u->y, y_scale ) + 32 ) >> 6;
+          }
+        }
+        else
+#endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
+        {
+          for ( ; vec < limit; vec++ )
+          {
+            vec->x = FT_MulFix( vec->x, x_scale );
+            vec->y = FT_MulFix( vec->y, y_scale );
+          }
         }
       }
 
@@ -1075,6 +1129,11 @@
       error = TT_Hint_Glyph( loader, 0 );
     }
 
+#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
+  Exit:
+    FT_FREE( unrounded );
+#endif
+
     return error;
   }
 
@@ -1468,7 +1527,7 @@
     }
 #endif
 
-    use_aw_2 = (FT_Bool)( subpixel_hinting && grayscale );
+    use_aw_2 = FT_BOOL( subpixel_hinting && grayscale );
 
     loader->pp1.x = loader->bbox.xMin - loader->left_bearing;
     loader->pp1.y = 0;
@@ -1520,12 +1579,13 @@
                        FT_UInt    recurse_count,
                        FT_Bool    header_only )
   {
-    FT_Error        error        = FT_Err_Ok;
+    FT_Error        error   = FT_Err_Ok;
     FT_Fixed        x_scale, y_scale;
     FT_ULong        offset;
-    TT_Face         face         = loader->face;
-    FT_GlyphLoader  gloader      = loader->gloader;
-    FT_Bool         opened_frame = 0;
+    TT_Face         face    = loader->face;
+    FT_GlyphLoader  gloader = loader->gloader;
+
+    FT_Bool  opened_frame = 0;
 
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
     FT_StreamRec    inc_stream;
@@ -1558,16 +1618,16 @@
 
     loader->glyph_index = glyph_index;
 
-    if ( ( loader->load_flags & FT_LOAD_NO_SCALE ) == 0 )
-    {
-      x_scale = loader->size->metrics->x_scale;
-      y_scale = loader->size->metrics->y_scale;
-    }
-    else
+    if ( loader->load_flags & FT_LOAD_NO_SCALE )
     {
       x_scale = 0x10000L;
       y_scale = 0x10000L;
     }
+    else
+    {
+      x_scale = loader->size->metrics->x_scale;
+      y_scale = loader->size->metrics->y_scale;
+    }
 
     /* Set `offset' to the start of the glyph relative to the start of */
     /* the `glyf' table, and `byte_len' to the length of the glyph in  */
@@ -1625,38 +1685,36 @@
       if ( error )
         goto Exit;
 
-      opened_frame = 1;
-
       /* read glyph header first */
       error = face->read_glyph_header( loader );
-      if ( error )
-        goto Exit;
 
-      /* the metrics must be computed after loading the glyph header */
-      /* since we need the glyph's `yMax' value in case the vertical */
-      /* metrics must be emulated                                    */
-      error = tt_get_metrics( loader, glyph_index );
-      if ( error )
-        goto Exit;
+      face->forget_glyph_frame( loader );
 
-      if ( header_only )
+      if ( error )
         goto Exit;
     }
 
+    /* a space glyph */
     if ( loader->byte_len == 0 || loader->n_contours == 0 )
     {
       loader->bbox.xMin = 0;
       loader->bbox.xMax = 0;
       loader->bbox.yMin = 0;
       loader->bbox.yMax = 0;
+    }
 
-      error = tt_get_metrics( loader, glyph_index );
-      if ( error )
-        goto Exit;
+    /* the metrics must be computed after loading the glyph header */
+    /* since we need the glyph's `yMax' value in case the vertical */
+    /* metrics must be emulated                                    */
+    error = tt_get_metrics( loader, glyph_index );
+    if ( error )
+      goto Exit;
 
-      if ( header_only )
-        goto Exit;
+    if ( header_only )
+      goto Exit;
 
+    if ( loader->byte_len == 0 || loader->n_contours == 0 )
+    {
       /* must initialize points before (possibly) overriding */
       /* glyph metrics from the incremental interface        */
       tt_loader_set_pp( loader );
@@ -1677,6 +1735,9 @@
         short       contours[4] = { 0, 1, 2, 3 };
         FT_Outline  outline;
 
+        /* unrounded values */
+        FT_Vector  unrounded[4] = { {0, 0}, {0, 0}, {0, 0}, {0, 0} };
+
 
         points[0].x = loader->pp1.x;
         points[0].y = loader->pp1.y;
@@ -1698,6 +1759,7 @@
         error = TT_Vary_Apply_Glyph_Deltas( loader->face,
                                             glyph_index,
                                             &outline,
+                                            unrounded,
                                             (FT_UInt)outline.n_points );
         if ( error )
           goto Exit;
@@ -1712,13 +1774,14 @@
         loader->pp4.x = points[3].x;
         loader->pp4.y = points[3].y;
 
-
         /* recalculate linear horizontal and vertical advances */
         /* if we don't have HVAR and VVAR, respectively        */
         if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
-          loader->linear = loader->pp2.x - loader->pp1.x;
+          loader->linear = FT_PIX_ROUND( unrounded[1].x -
+                                         unrounded[0].x ) / 64;
         if ( !( loader->face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
-          loader->vadvance = loader->pp4.x - loader->pp3.x;
+          loader->vadvance = FT_PIX_ROUND( unrounded[3].x -
+                                           unrounded[2].x ) / 64;
       }
 
 #endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
@@ -1753,6 +1816,16 @@
     /***********************************************************************/
     /***********************************************************************/
 
+    /* we now open a frame again, right after the glyph header */
+    /* (which consists of 10 bytes)                            */
+    error = face->access_glyph_frame( loader, glyph_index,
+                                      face->glyf_offset + offset + 10,
+                                      (FT_UInt)loader->byte_len - 10 );
+    if ( error )
+      goto Exit;
+
+    opened_frame = 1;
+
     /* if it is a simple glyph, load it */
 
     if ( loader->n_contours > 0 )
@@ -1798,7 +1871,6 @@
        * pointers with a width of at least 32 bits.
        */
 
-
       /* clear the nodes filled by sibling chains */
       node = ft_list_get_node_at( &loader->composites, recurse_count );
       for ( node2 = node; node2; node2 = node2->next )
@@ -1849,9 +1921,10 @@
         FT_SubGlyph  subglyph;
 
         FT_Outline  outline;
-        FT_Vector*  points   = NULL;
-        char*       tags     = NULL;
-        short*      contours = NULL;
+        FT_Vector*  points    = NULL;
+        char*       tags      = NULL;
+        short*      contours  = NULL;
+        FT_Vector*  unrounded = NULL;
 
 
         limit = (short)gloader->current.num_subglyphs;
@@ -1865,9 +1938,10 @@
         outline.tags     = NULL;
         outline.contours = NULL;
 
-        if ( FT_NEW_ARRAY( points, outline.n_points )   ||
-             FT_NEW_ARRAY( tags, outline.n_points )     ||
-             FT_NEW_ARRAY( contours, outline.n_points ) )
+        if ( FT_NEW_ARRAY( points, outline.n_points )    ||
+             FT_NEW_ARRAY( tags, outline.n_points )      ||
+             FT_NEW_ARRAY( contours, outline.n_points )  ||
+             FT_NEW_ARRAY( unrounded, outline.n_points ) )
           goto Exit1;
 
         subglyph = gloader->current.subglyphs;
@@ -1916,6 +1990,7 @@
                              face,
                              glyph_index,
                              &outline,
+                             unrounded,
                              (FT_UInt)outline.n_points ) ) )
           goto Exit1;
 
@@ -1943,14 +2018,19 @@
         /* recalculate linear horizontal and vertical advances */
         /* if we don't have HVAR and VVAR, respectively        */
         if ( !( face->variation_support & TT_FACE_FLAG_VAR_HADVANCE ) )
-          loader->linear = loader->pp2.x - loader->pp1.x;
+          loader->linear =
+            FT_PIX_ROUND( unrounded[outline.n_points - 3].x -
+                          unrounded[outline.n_points - 4].x ) / 64;
         if ( !( face->variation_support & TT_FACE_FLAG_VAR_VADVANCE ) )
-          loader->vadvance = loader->pp4.x - loader->pp3.x;
+          loader->vadvance =
+            FT_PIX_ROUND( unrounded[outline.n_points - 1].x -
+                          unrounded[outline.n_points - 2].x ) / 64;
 
       Exit1:
         FT_FREE( outline.points );
         FT_FREE( outline.tags );
         FT_FREE( outline.contours );
+        FT_FREE( unrounded );
 
         if ( error )
           goto Exit;
@@ -2010,7 +2090,7 @@
           FT_Int  linear_vadvance;
 
 
-          /* Each time we call load_truetype_glyph in this loop, the   */
+          /* Each time we call `load_truetype_glyph' in this loop, the */
           /* value of `gloader.base.subglyphs' can change due to table */
           /* reallocations.  We thus need to recompute the subglyph    */
           /* pointer on each iteration.                                */
@@ -2053,12 +2133,14 @@
           if ( num_points == num_base_points )
             continue;
 
-          /* gloader->base.outline consists of three parts:               */
-          /* 0 -(1)-> start_point -(2)-> num_base_points -(3)-> n_points. */
-          /*                                                              */
-          /* (1): exists from the beginning                               */
-          /* (2): components that have been loaded so far                 */
-          /* (3): the newly loaded component                              */
+          /* gloader->base.outline consists of three parts:           */
+          /*                                                          */
+          /* 0 ----> start_point ----> num_base_points ----> n_points */
+          /*    (1)               (2)                   (3)           */
+          /*                                                          */
+          /* (1) points that exist from the beginning                 */
+          /* (2) component points that have been loaded so far        */
+          /* (3) points of the newly loaded component                 */
           error = TT_Process_Composite_Component( loader,
                                                   subglyph,
                                                   start_point,
@@ -2074,6 +2156,7 @@
         loader->ins_pos = ins_pos;
         if ( IS_HINTED( loader->load_flags ) &&
 #ifdef TT_USE_BYTECODE_INTERPRETER
+             subglyph                        &&
              subglyph->flags & WE_HAVE_INSTR &&
 #endif
              num_points > start_point )
@@ -2140,7 +2223,7 @@
 
     glyph->metrics.horiBearingX = bbox.xMin;
     glyph->metrics.horiBearingY = bbox.yMax;
-    glyph->metrics.horiAdvance  = loader->pp2.x - loader->pp1.x;
+    glyph->metrics.horiAdvance  = SUB_LONG(loader->pp2.x, loader->pp1.x);
 
     /* Adjust advance width to the value contained in the hdmx table   */
     /* unless FT_LOAD_COMPUTE_METRICS is set or backward compatibility */
@@ -2597,11 +2680,6 @@
 
       if ( reexecute )
       {
-        FT_UInt  i;
-
-
-        for ( i = 0; i < size->cvt_size; i++ )
-          size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
         error = tt_size_run_prep( size, pedantic );
         if ( error )
           return error;
@@ -2704,13 +2782,6 @@
     FT_Error      error;
     TT_LoaderRec  loader;
 
-#ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-#define IS_DEFAULT_INSTANCE  ( !( FT_IS_NAMED_INSTANCE( glyph->face ) ||  \
-                                  FT_IS_VARIATION( glyph->face )      ) )
-#else
-#define IS_DEFAULT_INSTANCE  1
-#endif
-
 
     FT_TRACE1(( "TT_Load_Glyph: glyph index %d\n", glyph_index ));
 
@@ -2719,7 +2790,7 @@
     /* try to load embedded bitmap (if any) */
     if ( size->strike_index != 0xFFFFFFFFUL      &&
          ( load_flags & FT_LOAD_NO_BITMAP ) == 0 &&
-         IS_DEFAULT_INSTANCE                     )
+         IS_DEFAULT_INSTANCE( glyph->face )      )
     {
       FT_Fixed  x_scale = size->root.metrics.x_scale;
       FT_Fixed  y_scale = size->root.metrics.y_scale;
diff --git a/src/truetype/ttgload.h b/src/truetype/ttgload.h
index c117728..f1324bc 100644
--- a/src/truetype/ttgload.h
+++ b/src/truetype/ttgload.h
@@ -4,7 +4,7 @@
  *
  *   TrueType Glyph Loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttgxvar.c b/src/truetype/ttgxvar.c
index 3df50d6..78d87dc 100644
--- a/src/truetype/ttgxvar.c
+++ b/src/truetype/ttgxvar.c
@@ -4,7 +4,7 @@
  *
  *   TrueType GX Font Variation loader
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, Werner Lemberg, and George Williams.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -68,14 +68,16 @@
 
 
   /* some macros we need */
-#define FT_FIXED_ONE  ( (FT_Fixed)0x10000 )
-
-#define FT_fdot14ToFixed( x )                \
-        ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
-#define FT_intToFixed( i )                    \
-        ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
-#define FT_fixedToInt( x )                                   \
-        ( (FT_Short)( ( (FT_UInt32)(x) + 0x8000U ) >> 16 ) )
+#define FT_fdot14ToFixed( x )                  \
+          ( (FT_Fixed)( (FT_ULong)(x) << 2 ) )
+#define FT_intToFixed( i )                      \
+          ( (FT_Fixed)( (FT_ULong)(i) << 16 ) )
+#define FT_fdot6ToFixed( i )                    \
+          ( (FT_Fixed)( (FT_ULong)(i) << 10 ) )
+#define FT_fixedToInt( x )                          \
+          ( (FT_Short)( ( (x) + 0x8000U ) >> 16 ) )
+#define FT_fixedToFdot6( x )                    \
+          ( (FT_Pos)( ( (x) + 0x200 ) >> 10 ) )
 
 
   /**************************************************************************
@@ -85,7 +87,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttgxvar
+#define FT_COMPONENT  ttgxvar
 
 
   /*************************************************************************/
@@ -399,9 +401,10 @@
 
       for ( j = 0; j < segment->pairCount; j++ )
       {
-        /* convert to Fixed */
-        segment->correspondence[j].fromCoord = FT_GET_SHORT() * 4;
-        segment->correspondence[j].toCoord   = FT_GET_SHORT() * 4;
+        segment->correspondence[j].fromCoord =
+          FT_fdot14ToFixed( FT_GET_SHORT() );
+        segment->correspondence[j].toCoord =
+          FT_fdot14ToFixed( FT_GET_SHORT() );
 
         FT_TRACE5(( "    mapping %.5f to %.5f\n",
                     segment->correspondence[j].fromCoord / 65536.0,
@@ -884,7 +887,7 @@
     /* outer loop steps through master designs to be blended */
     for ( master = 0; master < varData->regionIdxCount; master++ )
     {
-      FT_Fixed  scalar      = FT_FIXED_ONE;
+      FT_Fixed  scalar      = 0x10000L;
       FT_UInt   regionIndex = varData->regionIndices[master];
 
       GX_AxisCoords  axis = itemStore->varRegionList[regionIndex].axisList;
@@ -893,47 +896,43 @@
       /* inner loop steps through axes in this region */
       for ( j = 0; j < itemStore->axisCount; j++, axis++ )
       {
-        FT_Fixed  axisScalar;
-
-
         /* compute the scalar contribution of this axis; */
         /* ignore invalid ranges                         */
         if ( axis->startCoord > axis->peakCoord ||
              axis->peakCoord > axis->endCoord   )
-          axisScalar = FT_FIXED_ONE;
+          continue;
 
         else if ( axis->startCoord < 0 &&
                   axis->endCoord > 0   &&
                   axis->peakCoord != 0 )
-          axisScalar = FT_FIXED_ONE;
+          continue;
 
         /* peak of 0 means ignore this axis */
         else if ( axis->peakCoord == 0 )
-          axisScalar = FT_FIXED_ONE;
+          continue;
+
+        else if ( face->blend->normalizedcoords[j] == axis->peakCoord )
+          continue;
 
         /* ignore this region if coords are out of range */
-        else if ( face->blend->normalizedcoords[j] < axis->startCoord ||
-                  face->blend->normalizedcoords[j] > axis->endCoord   )
-          axisScalar = 0;
-
-        /* calculate a proportional factor */
-        else
+        else if ( face->blend->normalizedcoords[j] <= axis->startCoord ||
+                  face->blend->normalizedcoords[j] >= axis->endCoord   )
         {
-          if ( face->blend->normalizedcoords[j] == axis->peakCoord )
-            axisScalar = FT_FIXED_ONE;
-          else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
-            axisScalar =
-              FT_DivFix( face->blend->normalizedcoords[j] - axis->startCoord,
-                         axis->peakCoord - axis->startCoord );
-          else
-            axisScalar =
-              FT_DivFix( axis->endCoord - face->blend->normalizedcoords[j],
-                         axis->endCoord - axis->peakCoord );
+          scalar = 0;
+          break;
         }
 
-        /* take product of all the axis scalars */
-        scalar = FT_MulFix( scalar, axisScalar );
-
+        /* cumulative product of all the axis scalars */
+        else if ( face->blend->normalizedcoords[j] < axis->peakCoord )
+          scalar =
+            FT_MulDiv( scalar,
+                       face->blend->normalizedcoords[j] - axis->startCoord,
+                       axis->peakCoord - axis->startCoord );
+        else
+          scalar =
+            FT_MulDiv( scalar,
+                       axis->endCoord - face->blend->normalizedcoords[j],
+                       axis->endCoord - axis->peakCoord );
       } /* per-axis loop */
 
       /* get the scaled delta for this region */
@@ -1331,6 +1330,9 @@
   {
     GX_Blend  blend = face->blend;
     GX_Value  value, limit;
+    FT_Short  mvar_hasc_delta = 0;
+    FT_Short  mvar_hdsc_delta = 0;
+    FT_Short  mvar_hlgp_delta = 0;
 
 
     if ( !( face->variation_support & TT_FACE_FLAG_VAR_MVAR ) )
@@ -1365,6 +1367,14 @@
         /* since we handle both signed and unsigned values as FT_Short, */
         /* ensure proper overflow arithmetic                            */
         *p = (FT_Short)( value->unmodified + (FT_Short)delta );
+
+        /* Treat hasc, hdsc and hlgp specially, see below. */
+        if ( value->tag == MVAR_TAG_HASC )
+          mvar_hasc_delta = (FT_Short)delta;
+        else if ( value->tag == MVAR_TAG_HDSC )
+          mvar_hdsc_delta = (FT_Short)delta;
+        else if ( value->tag == MVAR_TAG_HLGP )
+          mvar_hlgp_delta = (FT_Short)delta;
       }
     }
 
@@ -1372,25 +1382,40 @@
     {
       FT_Face  root = &face->root;
 
+      /*
+       * Apply the deltas of hasc, hdsc and hlgp to the FT_Face's ascender,
+       * descender and height attributes, no matter how they were originally
+       * computed.
+       *
+       * (Code that ignores those and accesses the font's metrics values
+       * directly is already served by the delta application code above.)
+       *
+       * The MVAR table supports variations for both typo and win metrics.
+       * According to Behdad Esfahbod, the thinking of the working group was
+       * that no one uses win metrics anymore for setting line metrics (the
+       * specification even calls these metrics "horizontal clipping
+       * ascent/descent", probably for their role on the Windows platform in
+       * computing clipping boxes), and new fonts should use typo metrics, so
+       * typo deltas should be applied to whatever sfnt_load_face decided the
+       * line metrics should be.
+       *
+       * Before, the following led to different line metrics between default
+       * outline and instances, visible when e.g. the default outlines were
+       * used as the regular face and instances for everything else:
+       *
+       * 1. sfnt_load_face applied the hhea metrics by default.
+       * 2. This code later applied the typo metrics by default, regardless of
+       *    whether they were actually changed or the font had the OS/2 table's
+       *    fsSelection's bit 7 (USE_TYPO_METRICS) set.
+       */
+      FT_Short  current_line_gap = root->height - root->ascender +
+                                   root->descender;
 
-      if ( face->os2.version != 0xFFFFU )
-      {
-        if ( face->os2.sTypoAscender || face->os2.sTypoDescender )
-        {
-          root->ascender  = face->os2.sTypoAscender;
-          root->descender = face->os2.sTypoDescender;
 
-          root->height = root->ascender - root->descender +
-                         face->os2.sTypoLineGap;
-        }
-        else
-        {
-          root->ascender  =  (FT_Short)face->os2.usWinAscent;
-          root->descender = -(FT_Short)face->os2.usWinDescent;
-
-          root->height = root->ascender - root->descender;
-        }
-      }
+      root->ascender  = root->ascender + mvar_hasc_delta;
+      root->descender = root->descender + mvar_hdsc_delta;
+      root->height    = root->ascender - root->descender +
+                        current_line_gap + mvar_hlgp_delta;
 
       root->underline_position  = face->postscript.underlinePosition -
                                   face->postscript.underlineThickness / 2;
@@ -1531,28 +1556,55 @@
 
     if ( gvar_head.flags & 1 )
     {
+      FT_ULong  limit = gvar_start + table_len;
+
+
       /* long offsets (one more offset than glyphs, to mark size of last) */
       if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 4L ) )
         goto Exit;
 
       for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+      {
         blend->glyphoffsets[i] = offsetToData + FT_GET_ULONG();
-
-      FT_FRAME_EXIT();
+        /* use `>', not `>=' */
+        if ( blend->glyphoffsets[i] > limit )
+        {
+          FT_TRACE2(( "ft_var_load_gvar:"
+                      " invalid glyph variation data offset for index %d\n",
+                      i ));
+          error = FT_THROW( Invalid_Table );
+          break;
+        }
+      }
     }
     else
     {
+      FT_ULong  limit = gvar_start + table_len;
+
+
       /* short offsets (one more offset than glyphs, to mark size of last) */
       if ( FT_FRAME_ENTER( ( blend->gv_glyphcnt + 1 ) * 2L ) )
         goto Exit;
 
       for ( i = 0; i <= blend->gv_glyphcnt; i++ )
+      {
         blend->glyphoffsets[i] = offsetToData + FT_GET_USHORT() * 2;
-                                               /* XXX: Undocumented: `*2'! */
-
-      FT_FRAME_EXIT();
+        /* use `>', not `>=' */
+        if ( blend->glyphoffsets[i] > limit )
+        {
+          FT_TRACE2(( "ft_var_load_gvar:"
+                      " invalid glyph variation data offset for index %d\n",
+                      i ));
+          error = FT_THROW( Invalid_Table );
+          break;
+        }
+      }
     }
 
+    FT_FRAME_EXIT();
+    if ( error )
+      goto Exit;
+
     if ( blend->tuplecount != 0 )
     {
       if ( FT_NEW_ARRAY( blend->tuplecoords,
@@ -1569,7 +1621,7 @@
         for ( j = 0; j < (FT_UInt)gvar_head.axisCount; j++ )
         {
           blend->tuplecoords[i * gvar_head.axisCount + j] =
-            FT_GET_SHORT() * 4;                 /* convert to FT_Fixed */
+            FT_fdot14ToFixed( FT_GET_SHORT() );
           FT_TRACE5(( "%.5f ",
             blend->tuplecoords[i * gvar_head.axisCount + j] / 65536.0 ));
         }
@@ -1631,13 +1683,8 @@
 
     for ( i = 0; i < blend->num_axis; i++ )
     {
-      FT_TRACE6(( "    axis coordinate %d (%.5f):\n",
+      FT_TRACE6(( "    axis %d coordinate %.5f:\n",
                   i, blend->normalizedcoords[i] / 65536.0 ));
-      if ( !( tupleIndex & GX_TI_INTERMEDIATE_TUPLE ) )
-        FT_TRACE6(( "      intermediate coordinates %d (%.5f, %.5f):\n",
-                    i,
-                    im_start_coords[i] / 65536.0,
-                    im_end_coords[i] / 65536.0 ));
 
       /* It's not clear why (for intermediate tuples) we don't need     */
       /* to check against start/end -- the documentation says we don't. */
@@ -1646,7 +1693,7 @@
 
       if ( tuple_coords[i] == 0 )
       {
-        FT_TRACE6(( "      tuple coordinate is zero, ignored\n", i ));
+        FT_TRACE6(( "      tuple coordinate is zero, ignore\n", i ));
         continue;
       }
 
@@ -1659,7 +1706,7 @@
 
       if ( blend->normalizedcoords[i] == tuple_coords[i] )
       {
-        FT_TRACE6(( "      tuple coordinate value %.5f fits perfectly\n",
+        FT_TRACE6(( "      tuple coordinate %.5f fits perfectly\n",
                     tuple_coords[i] / 65536.0 ));
         /* `apply' does not change */
         continue;
@@ -1672,13 +1719,13 @@
         if ( blend->normalizedcoords[i] < FT_MIN( 0, tuple_coords[i] ) ||
              blend->normalizedcoords[i] > FT_MAX( 0, tuple_coords[i] ) )
         {
-          FT_TRACE6(( "      tuple coordinate value %.5f is exceeded, stop\n",
+          FT_TRACE6(( "      tuple coordinate %.5f is exceeded, stop\n",
                       tuple_coords[i] / 65536.0 ));
           apply = 0;
           break;
         }
 
-        FT_TRACE6(( "      tuple coordinate value %.5f fits\n",
+        FT_TRACE6(( "      tuple coordinate %.5f fits\n",
                     tuple_coords[i] / 65536.0 ));
         apply = FT_MulDiv( apply,
                            blend->normalizedcoords[i],
@@ -1688,10 +1735,10 @@
       {
         /* intermediate tuple */
 
-        if ( blend->normalizedcoords[i] < im_start_coords[i] ||
-             blend->normalizedcoords[i] > im_end_coords[i]   )
+        if ( blend->normalizedcoords[i] <= im_start_coords[i] ||
+             blend->normalizedcoords[i] >= im_end_coords[i]   )
         {
-          FT_TRACE6(( "      intermediate tuple range [%.5f;%.5f] is exceeded,"
+          FT_TRACE6(( "      intermediate tuple range ]%.5f;%.5f[ is exceeded,"
                       " stop\n",
                       im_start_coords[i] / 65536.0,
                       im_end_coords[i] / 65536.0 ));
@@ -1699,25 +1746,17 @@
           break;
         }
 
-        else if ( blend->normalizedcoords[i] < tuple_coords[i] )
-        {
-          FT_TRACE6(( "      intermediate tuple range [%.5f;%.5f] fits\n",
-                      im_start_coords[i] / 65536.0,
-                      im_end_coords[i] / 65536.0 ));
+        FT_TRACE6(( "      intermediate tuple range ]%.5f;%.5f[ fits\n",
+                    im_start_coords[i] / 65536.0,
+                    im_end_coords[i] / 65536.0 ));
+        if ( blend->normalizedcoords[i] < tuple_coords[i] )
           apply = FT_MulDiv( apply,
                              blend->normalizedcoords[i] - im_start_coords[i],
                              tuple_coords[i] - im_start_coords[i] );
-        }
-
         else
-        {
-          FT_TRACE6(( "      intermediate tuple range [%.5f;%.5f] fits\n",
-                      im_start_coords[i] / 65536.0,
-                      im_end_coords[i] / 65536.0 ));
           apply = FT_MulDiv( apply,
                              im_end_coords[i] - blend->normalizedcoords[i],
                              im_end_coords[i] - tuple_coords[i] );
-        }
       }
     }
 
@@ -3020,7 +3059,7 @@
     if ( instance_index > num_instances )
       goto Exit;
 
-    if ( instance_index > 0 && mmvar->namedstyle )
+    if ( instance_index > 0 )
     {
       FT_Memory     memory = face->root.memory;
       SFNT_Service  sfnt   = (SFNT_Service)face->sfnt;
@@ -3046,7 +3085,12 @@
                                  mmvar->num_axis,
                                  named_style->coords );
       if ( error )
+      {
+        /* internal error code -1 means `no change' */
+        if ( error == -1 )
+          error = FT_Err_Ok;
         goto Exit;
+      }
     }
     else
       error = TT_Set_Var_Design( face, 0, NULL );
@@ -3069,6 +3113,21 @@
   /*************************************************************************/
 
 
+  static FT_Error
+  tt_cvt_ready_iterator( FT_ListNode  node,
+                         void*        user )
+  {
+    TT_Size  size = (TT_Size)node->data;
+
+    FT_UNUSED( user );
+
+
+    size->cvt_ready = -1;
+
+    return FT_Err_Ok;
+  }
+
+
   /**************************************************************************
    *
    * @Function:
@@ -3099,6 +3158,8 @@
     FT_Error   error;
     FT_Memory  memory = stream->memory;
 
+    FT_Face  root = &face->root;
+
     FT_ULong  table_start;
     FT_ULong  table_len;
 
@@ -3205,14 +3266,14 @@
     }
 
     FT_TRACE5(( "cvar: there %s %d tuple%s:\n",
-                ( tupleCount & 0xFFF ) == 1 ? "is" : "are",
-                tupleCount & 0xFFF,
-                ( tupleCount & 0xFFF ) == 1 ? "" : "s" ));
+                ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "is" : "are",
+                tupleCount & GX_TC_TUPLE_COUNT_MASK,
+                ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) == 1 ? "" : "s" ));
 
     if ( FT_NEW_ARRAY( cvt_deltas, face->cvt_size ) )
       goto FExit;
 
-    for ( i = 0; i < ( tupleCount & 0xFFF ); i++ )
+    for ( i = 0; i < ( tupleCount & GX_TC_TUPLE_COUNT_MASK ); i++ )
     {
       FT_UInt   tupleDataSize;
       FT_UInt   tupleIndex;
@@ -3227,8 +3288,7 @@
       if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
       {
         for ( j = 0; j < blend->num_axis; j++ )
-          tuple_coords[j] = FT_GET_SHORT() * 4;  /* convert from        */
-                                                 /* short frac to fixed */
+          tuple_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
       }
       else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
       {
@@ -3236,20 +3296,32 @@
                     " invalid tuple index\n" ));
 
         error = FT_THROW( Invalid_Table );
-        goto Exit;
+        goto FExit;
       }
       else
+      {
+        if ( !blend->tuplecoords )
+        {
+          FT_TRACE2(( "tt_face_vary_cvt:"
+                      " no valid tuple coordinates available\n" ));
+
+          error = FT_THROW( Invalid_Table );
+          goto FExit;
+        }
+
         FT_MEM_COPY(
           tuple_coords,
-          &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
+          blend->tuplecoords +
+            ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis,
           blend->num_axis * sizeof ( FT_Fixed ) );
+      }
 
       if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
       {
         for ( j = 0; j < blend->num_axis; j++ )
-          im_start_coords[j] = FT_GET_SHORT() * 4;
+          im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
         for ( j = 0; j < blend->num_axis; j++ )
-          im_end_coords[j] = FT_GET_SHORT() * 4;
+          im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
       }
 
       apply = ft_var_apply_tuple( blend,
@@ -3314,9 +3386,9 @@
           {
             FT_TRACE7(( "      %d: %f -> %f\n",
                         j,
-                        ( FT_intToFixed( face->cvt[j] ) +
+                        ( FT_fdot6ToFixed( face->cvt[j] ) +
                           old_cvt_delta ) / 65536.0,
-                        ( FT_intToFixed( face->cvt[j] ) +
+                        ( FT_fdot6ToFixed( face->cvt[j] ) +
                           cvt_deltas[j] ) / 65536.0 ));
             count++;
           }
@@ -3356,9 +3428,9 @@
           {
             FT_TRACE7(( "      %d: %f -> %f\n",
                         pindex,
-                        ( FT_intToFixed( face->cvt[pindex] ) +
+                        ( FT_fdot6ToFixed( face->cvt[pindex] ) +
                           old_cvt_delta ) / 65536.0,
-                        ( FT_intToFixed( face->cvt[pindex] ) +
+                        ( FT_fdot6ToFixed( face->cvt[pindex] ) +
                           cvt_deltas[pindex] ) / 65536.0 ));
             count++;
           }
@@ -3383,7 +3455,7 @@
     FT_TRACE5(( "\n" ));
 
     for ( i = 0; i < face->cvt_size; i++ )
-      face->cvt[i] += FT_fixedToInt( cvt_deltas[i] );
+      face->cvt[i] += FT_fixedToFdot6( cvt_deltas[i] );
 
   FExit:
     FT_FRAME_EXIT();
@@ -3396,6 +3468,12 @@
     FT_FREE( im_end_coords );
     FT_FREE( cvt_deltas );
 
+    /* iterate over all FT_Size objects and set `cvt_ready' to -1 */
+    /* to trigger rescaling of all CVT values                     */
+    FT_List_Iterate( &root->sizes_list,
+                     tt_cvt_ready_iterator,
+                     NULL );
+
     return error;
   }
 
@@ -3440,9 +3518,8 @@
   /* between `p1' and `p2', using `ref1' and `ref2' as the reference */
   /* point indices.                                                  */
 
-  /* modeled after `af_iup_interp', `_iup_worker_interpolate', and */
-  /* `Ins_IUP'                                                     */
-
+  /* modeled after `af_iup_interp', `_iup_worker_interpolate', and   */
+  /* `Ins_IUP' with spec differences in handling ill-defined cases.  */
   static void
   tt_delta_interpolate( int         p1,
                         int         p2,
@@ -3624,6 +3701,11 @@
    *   outline ::
    *     The outline to change.
    *
+   * @Output:
+   *   unrounded ::
+   *     An array with `n_points' elements that is filled with unrounded
+   *     point coordinates (in 26.6 format).
+   *
    * @Return:
    *   FreeType error code.  0 means success.
    */
@@ -3631,6 +3713,7 @@
   TT_Vary_Apply_Glyph_Deltas( TT_Face      face,
                               FT_UInt      glyph_index,
                               FT_Outline*  outline,
+                              FT_Vector*   unrounded,
                               FT_UInt      n_points )
   {
     FT_Error   error;
@@ -3645,6 +3728,7 @@
 
     FT_UInt   tupleCount;
     FT_ULong  offsetToData;
+    FT_ULong  dataSize;
 
     FT_ULong  here;
     FT_UInt   i, j;
@@ -3671,6 +3755,12 @@
     if ( !face->doblend || !blend )
       return FT_THROW( Invalid_Argument );
 
+    for ( i = 0; i < n_points; i++ )
+    {
+      unrounded[i].x = INT_TO_F26DOT6( outline->points[i].x );
+      unrounded[i].y = INT_TO_F26DOT6( outline->points[i].y );
+    }
+
     if ( glyph_index >= blend->gv_glyphcnt      ||
          blend->glyphoffsets[glyph_index] ==
            blend->glyphoffsets[glyph_index + 1] )
@@ -3685,9 +3775,11 @@
          FT_NEW_ARRAY( has_delta, n_points )  )
       goto Fail1;
 
-    if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] )   ||
-         FT_FRAME_ENTER( blend->glyphoffsets[glyph_index + 1] -
-                           blend->glyphoffsets[glyph_index] ) )
+    dataSize = blend->glyphoffsets[glyph_index + 1] -
+                 blend->glyphoffsets[glyph_index];
+
+    if ( FT_STREAM_SEEK( blend->glyphoffsets[glyph_index] ) ||
+         FT_FRAME_ENTER( dataSize )                         )
       goto Fail1;
 
     glyph_start = FT_Stream_FTell( stream );
@@ -3703,8 +3795,8 @@
     offsetToData = FT_GET_USHORT();
 
     /* rough sanity test */
-    if ( offsetToData + ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 >
-           blend->gvar_size )
+    if ( offsetToData > dataSize                                ||
+         ( tupleCount & GX_TC_TUPLE_COUNT_MASK ) * 4 > dataSize )
     {
       FT_TRACE2(( "TT_Vary_Apply_Glyph_Deltas:"
                   " invalid glyph variation array header\n" ));
@@ -3759,8 +3851,7 @@
       if ( tupleIndex & GX_TI_EMBEDDED_TUPLE_COORD )
       {
         for ( j = 0; j < blend->num_axis; j++ )
-          tuple_coords[j] = FT_GET_SHORT() * 4;   /* convert from        */
-                                                  /* short frac to fixed */
+          tuple_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
       }
       else if ( ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) >= blend->tuplecount )
       {
@@ -3773,15 +3864,16 @@
       else
         FT_MEM_COPY(
           tuple_coords,
-          &blend->tuplecoords[( tupleIndex & 0xFFF ) * blend->num_axis],
+          blend->tuplecoords +
+            ( tupleIndex & GX_TI_TUPLE_INDEX_MASK ) * blend->num_axis,
           blend->num_axis * sizeof ( FT_Fixed ) );
 
       if ( tupleIndex & GX_TI_INTERMEDIATE_TUPLE )
       {
         for ( j = 0; j < blend->num_axis; j++ )
-          im_start_coords[j] = FT_GET_SHORT() * 4;
+          im_start_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
         for ( j = 0; j < blend->num_axis; j++ )
-          im_end_coords[j] = FT_GET_SHORT() * 4;
+          im_end_coords[j] = FT_fdot14ToFixed( FT_GET_SHORT() );
       }
 
       apply = ft_var_apply_tuple( blend,
@@ -4015,6 +4107,9 @@
 
     for ( i = 0; i < n_points; i++ )
     {
+      unrounded[i].x += FT_fixedToFdot6( point_deltas_x[i] );
+      unrounded[i].y += FT_fixedToFdot6( point_deltas_y[i] );
+
       outline->points[i].x += FT_fixedToInt( point_deltas_x[i] );
       outline->points[i].y += FT_fixedToInt( point_deltas_y[i] );
     }
diff --git a/src/truetype/ttgxvar.h b/src/truetype/ttgxvar.h
index bdc09d1..07c99b6 100644
--- a/src/truetype/ttgxvar.h
+++ b/src/truetype/ttgxvar.h
@@ -4,7 +4,7 @@
  *
  *   TrueType GX Font Variation loader (specification)
  *
- * Copyright 2004-2018 by
+ * Copyright (C) 2004-2019 by
  * David Turner, Robert Wilhelm, Werner Lemberg and George Williams.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -416,6 +416,7 @@
   TT_Vary_Apply_Glyph_Deltas( TT_Face      face,
                               FT_UInt      glyph_index,
                               FT_Outline*  outline,
+                              FT_Vector*   unrounded,
                               FT_UInt      n_points );
 
   FT_LOCAL( FT_Error )
diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
index 35aa399..70434e1 100644
--- a/src/truetype/ttinterp.c
+++ b/src/truetype/ttinterp.c
@@ -4,7 +4,7 @@
  *
  *   TrueType bytecode interpreter (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -46,7 +46,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttinterp
+#define FT_COMPONENT  ttinterp
 
 
 #define NO_SUBPIXEL_HINTING                                                  \
@@ -537,14 +537,6 @@
    *   Executes one or more instructions in the execution context.
    *
    * @Input:
-   *   debug ::
-   *     A Boolean flag.  If set, the function sets some internal
-   *     variables and returns immediately, otherwise TT_RunIns()
-   *     is called.
-   *
-   *     This is commented out currently.
-   *
-   * @Input:
    *   exec ::
    *     A handle to the target execution context.
    *
@@ -662,23 +654,25 @@
     /* opcodes are gathered in groups of 16 */
     /* please keep the spaces as they are   */
 
-    /*  SVTCA  y  */  PACK( 0, 0 ),
-    /*  SVTCA  x  */  PACK( 0, 0 ),
-    /*  SPvTCA y  */  PACK( 0, 0 ),
-    /*  SPvTCA x  */  PACK( 0, 0 ),
-    /*  SFvTCA y  */  PACK( 0, 0 ),
-    /*  SFvTCA x  */  PACK( 0, 0 ),
-    /*  SPvTL //  */  PACK( 2, 0 ),
-    /*  SPvTL +   */  PACK( 2, 0 ),
-    /*  SFvTL //  */  PACK( 2, 0 ),
-    /*  SFvTL +   */  PACK( 2, 0 ),
-    /*  SPvFS     */  PACK( 2, 0 ),
-    /*  SFvFS     */  PACK( 2, 0 ),
-    /*  GPv       */  PACK( 0, 2 ),
-    /*  GFv       */  PACK( 0, 2 ),
-    /*  SFvTPv    */  PACK( 0, 0 ),
+    /* 0x00 */
+    /*  SVTCA[0]  */  PACK( 0, 0 ),
+    /*  SVTCA[1]  */  PACK( 0, 0 ),
+    /*  SPVTCA[0] */  PACK( 0, 0 ),
+    /*  SPVTCA[1] */  PACK( 0, 0 ),
+    /*  SFVTCA[0] */  PACK( 0, 0 ),
+    /*  SFVTCA[1] */  PACK( 0, 0 ),
+    /*  SPVTL[0]  */  PACK( 2, 0 ),
+    /*  SPVTL[1]  */  PACK( 2, 0 ),
+    /*  SFVTL[0]  */  PACK( 2, 0 ),
+    /*  SFVTL[1]  */  PACK( 2, 0 ),
+    /*  SPVFS     */  PACK( 2, 0 ),
+    /*  SFVFS     */  PACK( 2, 0 ),
+    /*  GPV       */  PACK( 0, 2 ),
+    /*  GFV       */  PACK( 0, 2 ),
+    /*  SFVTPV    */  PACK( 0, 0 ),
     /*  ISECT     */  PACK( 5, 0 ),
 
+    /* 0x10 */
     /*  SRP0      */  PACK( 1, 0 ),
     /*  SRP1      */  PACK( 1, 0 ),
     /*  SRP2      */  PACK( 1, 0 ),
@@ -692,10 +686,11 @@
     /*  SMD       */  PACK( 1, 0 ),
     /*  ELSE      */  PACK( 0, 0 ),
     /*  JMPR      */  PACK( 1, 0 ),
-    /*  SCvTCi    */  PACK( 1, 0 ),
-    /*  SSwCi     */  PACK( 1, 0 ),
+    /*  SCVTCI    */  PACK( 1, 0 ),
+    /*  SSWCI     */  PACK( 1, 0 ),
     /*  SSW       */  PACK( 1, 0 ),
 
+    /* 0x20 */
     /*  DUP       */  PACK( 1, 2 ),
     /*  POP       */  PACK( 1, 0 ),
     /*  CLEAR     */  PACK( 0, 0 ),
@@ -703,7 +698,7 @@
     /*  DEPTH     */  PACK( 0, 1 ),
     /*  CINDEX    */  PACK( 1, 1 ),
     /*  MINDEX    */  PACK( 1, 0 ),
-    /*  AlignPTS  */  PACK( 2, 0 ),
+    /*  ALIGNPTS  */  PACK( 2, 0 ),
     /*  INS_$28   */  PACK( 0, 0 ),
     /*  UTP       */  PACK( 1, 0 ),
     /*  LOOPCALL  */  PACK( 2, 0 ),
@@ -713,6 +708,7 @@
     /*  MDAP[0]   */  PACK( 1, 0 ),
     /*  MDAP[1]   */  PACK( 1, 0 ),
 
+    /* 0x30 */
     /*  IUP[0]    */  PACK( 0, 0 ),
     /*  IUP[1]    */  PACK( 0, 0 ),
     /*  SHP[0]    */  PACK( 0, 0 ), /* loops */
@@ -725,17 +721,18 @@
     /*  IP        */  PACK( 0, 0 ), /* loops */
     /*  MSIRP[0]  */  PACK( 2, 0 ),
     /*  MSIRP[1]  */  PACK( 2, 0 ),
-    /*  AlignRP   */  PACK( 0, 0 ), /* loops */
+    /*  ALIGNRP   */  PACK( 0, 0 ), /* loops */
     /*  RTDG      */  PACK( 0, 0 ),
     /*  MIAP[0]   */  PACK( 2, 0 ),
     /*  MIAP[1]   */  PACK( 2, 0 ),
 
-    /*  NPushB    */  PACK( 0, 0 ),
-    /*  NPushW    */  PACK( 0, 0 ),
+    /* 0x40 */
+    /*  NPUSHB    */  PACK( 0, 0 ),
+    /*  NPUSHW    */  PACK( 0, 0 ),
     /*  WS        */  PACK( 2, 0 ),
     /*  RS        */  PACK( 1, 1 ),
-    /*  WCvtP     */  PACK( 2, 0 ),
-    /*  RCvt      */  PACK( 1, 1 ),
+    /*  WCVTP     */  PACK( 2, 0 ),
+    /*  RCVT      */  PACK( 1, 1 ),
     /*  GC[0]     */  PACK( 1, 1 ),
     /*  GC[1]     */  PACK( 1, 1 ),
     /*  SCFS      */  PACK( 2, 0 ),
@@ -743,10 +740,11 @@
     /*  MD[1]     */  PACK( 2, 1 ),
     /*  MPPEM     */  PACK( 0, 1 ),
     /*  MPS       */  PACK( 0, 1 ),
-    /*  FlipON    */  PACK( 0, 0 ),
-    /*  FlipOFF   */  PACK( 0, 0 ),
+    /*  FLIPON    */  PACK( 0, 0 ),
+    /*  FLIPOFF   */  PACK( 0, 0 ),
     /*  DEBUG     */  PACK( 1, 0 ),
 
+    /* 0x50 */
     /*  LT        */  PACK( 2, 1 ),
     /*  LTEQ      */  PACK( 2, 1 ),
     /*  GT        */  PACK( 2, 1 ),
@@ -760,10 +758,11 @@
     /*  AND       */  PACK( 2, 1 ),
     /*  OR        */  PACK( 2, 1 ),
     /*  NOT       */  PACK( 1, 1 ),
-    /*  DeltaP1   */  PACK( 1, 0 ),
+    /*  DELTAP1   */  PACK( 1, 0 ),
     /*  SDB       */  PACK( 1, 0 ),
     /*  SDS       */  PACK( 1, 0 ),
 
+    /* 0x60 */
     /*  ADD       */  PACK( 2, 1 ),
     /*  SUB       */  PACK( 2, 1 ),
     /*  DIV       */  PACK( 2, 1 ),
@@ -781,14 +780,15 @@
     /*  NROUND[2] */  PACK( 1, 1 ),
     /*  NROUND[3] */  PACK( 1, 1 ),
 
-    /*  WCvtF     */  PACK( 2, 0 ),
-    /*  DeltaP2   */  PACK( 1, 0 ),
-    /*  DeltaP3   */  PACK( 1, 0 ),
-    /*  DeltaCn[0] */ PACK( 1, 0 ),
-    /*  DeltaCn[1] */ PACK( 1, 0 ),
-    /*  DeltaCn[2] */ PACK( 1, 0 ),
+    /* 0x70 */
+    /*  WCVTF     */  PACK( 2, 0 ),
+    /*  DELTAP2   */  PACK( 1, 0 ),
+    /*  DELTAP3   */  PACK( 1, 0 ),
+    /*  DELTAC1   */  PACK( 1, 0 ),
+    /*  DELTAC2   */  PACK( 1, 0 ),
+    /*  DELTAC3   */  PACK( 1, 0 ),
     /*  SROUND    */  PACK( 1, 0 ),
-    /*  S45Round  */  PACK( 1, 0 ),
+    /*  S45ROUND  */  PACK( 1, 0 ),
     /*  JROT      */  PACK( 2, 0 ),
     /*  JROF      */  PACK( 2, 0 ),
     /*  ROFF      */  PACK( 0, 0 ),
@@ -798,23 +798,25 @@
     /*  SANGW     */  PACK( 1, 0 ),
     /*  AA        */  PACK( 1, 0 ),
 
-    /*  FlipPT    */  PACK( 0, 0 ), /* loops */
-    /*  FlipRgON  */  PACK( 2, 0 ),
-    /*  FlipRgOFF */  PACK( 2, 0 ),
+    /* 0x80 */
+    /*  FLIPPT    */  PACK( 0, 0 ), /* loops */
+    /*  FLIPRGON  */  PACK( 2, 0 ),
+    /*  FLIPRGOFF */  PACK( 2, 0 ),
     /*  INS_$83   */  PACK( 0, 0 ),
     /*  INS_$84   */  PACK( 0, 0 ),
-    /*  ScanCTRL  */  PACK( 1, 0 ),
-    /*  SDPvTL[0] */  PACK( 2, 0 ),
-    /*  SDPvTL[1] */  PACK( 2, 0 ),
-    /*  GetINFO   */  PACK( 1, 1 ),
+    /*  SCANCTRL  */  PACK( 1, 0 ),
+    /*  SDPVTL[0] */  PACK( 2, 0 ),
+    /*  SDPVTL[1] */  PACK( 2, 0 ),
+    /*  GETINFO   */  PACK( 1, 1 ),
     /*  IDEF      */  PACK( 1, 0 ),
     /*  ROLL      */  PACK( 3, 3 ),
     /*  MAX       */  PACK( 2, 1 ),
     /*  MIN       */  PACK( 2, 1 ),
-    /*  ScanTYPE  */  PACK( 1, 0 ),
-    /*  InstCTRL  */  PACK( 2, 0 ),
+    /*  SCANTYPE  */  PACK( 1, 0 ),
+    /*  INSTCTRL  */  PACK( 2, 0 ),
     /*  INS_$8F   */  PACK( 0, 0 ),
 
+    /* 0x90 */
     /*  INS_$90  */   PACK( 0, 0 ),
     /*  GETVAR   */   PACK( 0, 0 ), /* will be handled specially */
     /*  GETDATA  */   PACK( 0, 1 ),
@@ -832,6 +834,7 @@
     /*  INS_$9E  */   PACK( 0, 0 ),
     /*  INS_$9F  */   PACK( 0, 0 ),
 
+    /* 0xA0 */
     /*  INS_$A0  */   PACK( 0, 0 ),
     /*  INS_$A1  */   PACK( 0, 0 ),
     /*  INS_$A2  */   PACK( 0, 0 ),
@@ -849,23 +852,25 @@
     /*  INS_$AE  */   PACK( 0, 0 ),
     /*  INS_$AF  */   PACK( 0, 0 ),
 
-    /*  PushB[0]  */  PACK( 0, 1 ),
-    /*  PushB[1]  */  PACK( 0, 2 ),
-    /*  PushB[2]  */  PACK( 0, 3 ),
-    /*  PushB[3]  */  PACK( 0, 4 ),
-    /*  PushB[4]  */  PACK( 0, 5 ),
-    /*  PushB[5]  */  PACK( 0, 6 ),
-    /*  PushB[6]  */  PACK( 0, 7 ),
-    /*  PushB[7]  */  PACK( 0, 8 ),
-    /*  PushW[0]  */  PACK( 0, 1 ),
-    /*  PushW[1]  */  PACK( 0, 2 ),
-    /*  PushW[2]  */  PACK( 0, 3 ),
-    /*  PushW[3]  */  PACK( 0, 4 ),
-    /*  PushW[4]  */  PACK( 0, 5 ),
-    /*  PushW[5]  */  PACK( 0, 6 ),
-    /*  PushW[6]  */  PACK( 0, 7 ),
-    /*  PushW[7]  */  PACK( 0, 8 ),
+    /* 0xB0 */
+    /*  PUSHB[0]  */  PACK( 0, 1 ),
+    /*  PUSHB[1]  */  PACK( 0, 2 ),
+    /*  PUSHB[2]  */  PACK( 0, 3 ),
+    /*  PUSHB[3]  */  PACK( 0, 4 ),
+    /*  PUSHB[4]  */  PACK( 0, 5 ),
+    /*  PUSHB[5]  */  PACK( 0, 6 ),
+    /*  PUSHB[6]  */  PACK( 0, 7 ),
+    /*  PUSHB[7]  */  PACK( 0, 8 ),
+    /*  PUSHW[0]  */  PACK( 0, 1 ),
+    /*  PUSHW[1]  */  PACK( 0, 2 ),
+    /*  PUSHW[2]  */  PACK( 0, 3 ),
+    /*  PUSHW[3]  */  PACK( 0, 4 ),
+    /*  PUSHW[4]  */  PACK( 0, 5 ),
+    /*  PUSHW[5]  */  PACK( 0, 6 ),
+    /*  PUSHW[6]  */  PACK( 0, 7 ),
+    /*  PUSHW[7]  */  PACK( 0, 8 ),
 
+    /* 0xC0 */
     /*  MDRP[00]  */  PACK( 1, 0 ),
     /*  MDRP[01]  */  PACK( 1, 0 ),
     /*  MDRP[02]  */  PACK( 1, 0 ),
@@ -883,6 +888,7 @@
     /*  MDRP[14]  */  PACK( 1, 0 ),
     /*  MDRP[15]  */  PACK( 1, 0 ),
 
+    /* 0xD0 */
     /*  MDRP[16]  */  PACK( 1, 0 ),
     /*  MDRP[17]  */  PACK( 1, 0 ),
     /*  MDRP[18]  */  PACK( 1, 0 ),
@@ -900,6 +906,7 @@
     /*  MDRP[30]  */  PACK( 1, 0 ),
     /*  MDRP[31]  */  PACK( 1, 0 ),
 
+    /* 0xE0 */
     /*  MIRP[00]  */  PACK( 2, 0 ),
     /*  MIRP[01]  */  PACK( 2, 0 ),
     /*  MIRP[02]  */  PACK( 2, 0 ),
@@ -917,6 +924,7 @@
     /*  MIRP[14]  */  PACK( 2, 0 ),
     /*  MIRP[15]  */  PACK( 2, 0 ),
 
+    /* 0xF0 */
     /*  MIRP[16]  */  PACK( 2, 0 ),
     /*  MIRP[17]  */  PACK( 2, 0 ),
     /*  MIRP[18]  */  PACK( 2, 0 ),
@@ -945,23 +953,25 @@
   static
   const char*  const opcode_name[256] =
   {
-    "7 SVTCA y",
-    "7 SVTCA x",
-    "8 SPvTCA y",
-    "8 SPvTCA x",
-    "8 SFvTCA y",
-    "8 SFvTCA x",
-    "8 SPvTL ||",
-    "7 SPvTL +",
-    "8 SFvTL ||",
-    "7 SFvTL +",
-    "5 SPvFS",
-    "5 SFvFS",
-    "3 GPv",
-    "3 GFv",
-    "6 SFvTPv",
+    /* 0x00 */
+    "8 SVTCA[y]",
+    "8 SVTCA[x]",
+    "9 SPVTCA[y]",
+    "9 SPVTCA[x]",
+    "9 SFVTCA[y]",
+    "9 SFVTCA[x]",
+    "9 SPVTL[||]",
+    "8 SPVTL[+]",
+    "9 SFVTL[||]",
+    "8 SFVTL[+]",
+    "5 SPVFS",
+    "5 SFVFS",
+    "3 GPV",
+    "3 GFV",
+    "6 SFVTPV",
     "5 ISECT",
 
+    /* 0x10 */
     "4 SRP0",
     "4 SRP1",
     "4 SRP2",
@@ -975,10 +985,11 @@
     "3 SMD",
     "4 ELSE",
     "4 JMPR",
-    "6 SCvTCi",
-    "5 SSwCi",
+    "6 SCVTCI",
+    "5 SSWCI",
     "3 SSW",
 
+    /* 0x20 */
     "3 DUP",
     "3 POP",
     "5 CLEAR",
@@ -986,50 +997,53 @@
     "5 DEPTH",
     "6 CINDEX",
     "6 MINDEX",
-    "8 AlignPTS",
+    "8 ALIGNPTS",
     "7 INS_$28",
     "3 UTP",
     "8 LOOPCALL",
     "4 CALL",
     "4 FDEF",
     "4 ENDF",
-    "7 MDAP[0]",
-    "7 MDAP[1]",
+    "6 MDAP[]",
+    "9 MDAP[rnd]",
 
-    "6 IUP[0]",
-    "6 IUP[1]",
-    "6 SHP[0]",
-    "6 SHP[1]",
-    "6 SHC[0]",
-    "6 SHC[1]",
-    "6 SHZ[0]",
-    "6 SHZ[1]",
+    /* 0x30 */
+    "6 IUP[y]",
+    "6 IUP[x]",
+    "8 SHP[rp2]",
+    "8 SHP[rp1]",
+    "8 SHC[rp2]",
+    "8 SHC[rp1]",
+    "8 SHZ[rp2]",
+    "8 SHZ[rp1]",
     "5 SHPIX",
     "2 IP",
-    "8 MSIRP[0]",
-    "8 MSIRP[1]",
-    "7 AlignRP",
+    "7 MSIRP[]",
+    "A MSIRP[rp0]",
+    "7 ALIGNRP",
     "4 RTDG",
-    "7 MIAP[0]",
-    "7 MIAP[1]",
+    "6 MIAP[]",
+    "9 MIAP[rnd]",
 
-    "6 NPushB",
-    "6 NPushW",
+    /* 0x40 */
+    "6 NPUSHB",
+    "6 NPUSHW",
     "2 WS",
     "2 RS",
-    "5 WCvtP",
-    "4 RCvt",
-    "5 GC[0]",
-    "5 GC[1]",
+    "5 WCVTP",
+    "4 RCVT",
+    "8 GC[curr]",
+    "8 GC[orig]",
     "4 SCFS",
-    "5 MD[0]",
-    "5 MD[1]",
+    "8 MD[curr]",
+    "8 MD[orig]",
     "5 MPPEM",
     "3 MPS",
-    "6 FlipON",
-    "7 FlipOFF",
+    "6 FLIPON",
+    "7 FLIPOFF",
     "5 DEBUG",
 
+    /* 0x50 */
     "2 LT",
     "4 LTEQ",
     "2 GT",
@@ -1043,10 +1057,11 @@
     "3 AND",
     "2 OR",
     "3 NOT",
-    "7 DeltaP1",
+    "7 DELTAP1",
     "3 SDB",
     "3 SDS",
 
+    /* 0x60 */
     "3 ADD",
     "3 SUB",
     "3 DIV",
@@ -1055,23 +1070,24 @@
     "3 NEG",
     "5 FLOOR",
     "7 CEILING",
-    "8 ROUND[0]",
-    "8 ROUND[1]",
-    "8 ROUND[2]",
-    "8 ROUND[3]",
-    "9 NROUND[0]",
-    "9 NROUND[1]",
-    "9 NROUND[2]",
-    "9 NROUND[3]",
+    "8 ROUND[G]",
+    "8 ROUND[B]",
+    "8 ROUND[W]",
+    "7 ROUND[]",
+    "9 NROUND[G]",
+    "9 NROUND[B]",
+    "9 NROUND[W]",
+    "8 NROUND[]",
 
-    "5 WCvtF",
-    "7 DeltaP2",
-    "7 DeltaP3",
-    "A DeltaCn[0]",
-    "A DeltaCn[1]",
-    "A DeltaCn[2]",
+    /* 0x70 */
+    "5 WCVTF",
+    "7 DELTAP2",
+    "7 DELTAP3",
+    "7 DELTAC1",
+    "7 DELTAC2",
+    "7 DELTAC3",
     "6 SROUND",
-    "8 S45Round",
+    "8 S45ROUND",
     "4 JROT",
     "4 JROF",
     "4 ROFF",
@@ -1081,26 +1097,28 @@
     "5 SANGW",
     "2 AA",
 
-    "6 FlipPT",
-    "8 FlipRgON",
-    "9 FlipRgOFF",
+    /* 0x80 */
+    "6 FLIPPT",
+    "8 FLIPRGON",
+    "9 FLIPRGOFF",
     "7 INS_$83",
     "7 INS_$84",
-    "8 ScanCTRL",
-    "9 SDPvTL[0]",
-    "9 SDPvTL[1]",
-    "7 GetINFO",
+    "8 SCANCTRL",
+    "A SDPVTL[||]",
+    "9 SDPVTL[+]",
+    "7 GETINFO",
     "4 IDEF",
     "4 ROLL",
     "3 MAX",
     "3 MIN",
-    "8 ScanTYPE",
-    "8 InstCTRL",
+    "8 SCANTYPE",
+    "8 INSTCTRL",
     "7 INS_$8F",
 
+    /* 0x90 */
     "7 INS_$90",
 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
-    "6 GETVAR",
+    "C GETVARIATION",
     "7 GETDATA",
 #else
     "7 INS_$91",
@@ -1120,6 +1138,7 @@
     "7 INS_$9E",
     "7 INS_$9F",
 
+    /* 0xA0 */
     "7 INS_$A0",
     "7 INS_$A1",
     "7 INS_$A2",
@@ -1137,90 +1156,95 @@
     "7 INS_$AE",
     "7 INS_$AF",
 
-    "8 PushB[0]",
-    "8 PushB[1]",
-    "8 PushB[2]",
-    "8 PushB[3]",
-    "8 PushB[4]",
-    "8 PushB[5]",
-    "8 PushB[6]",
-    "8 PushB[7]",
-    "8 PushW[0]",
-    "8 PushW[1]",
-    "8 PushW[2]",
-    "8 PushW[3]",
-    "8 PushW[4]",
-    "8 PushW[5]",
-    "8 PushW[6]",
-    "8 PushW[7]",
+    /* 0xB0 */
+    "8 PUSHB[0]",
+    "8 PUSHB[1]",
+    "8 PUSHB[2]",
+    "8 PUSHB[3]",
+    "8 PUSHB[4]",
+    "8 PUSHB[5]",
+    "8 PUSHB[6]",
+    "8 PUSHB[7]",
+    "8 PUSHW[0]",
+    "8 PUSHW[1]",
+    "8 PUSHW[2]",
+    "8 PUSHW[3]",
+    "8 PUSHW[4]",
+    "8 PUSHW[5]",
+    "8 PUSHW[6]",
+    "8 PUSHW[7]",
 
+    /* 0xC0 */
     "7 MDRP[G]",
     "7 MDRP[B]",
     "7 MDRP[W]",
-    "7 MDRP[?]",
+    "6 MDRP[]",
     "8 MDRP[rG]",
     "8 MDRP[rB]",
     "8 MDRP[rW]",
-    "8 MDRP[r?]",
+    "7 MDRP[r]",
     "8 MDRP[mG]",
     "8 MDRP[mB]",
     "8 MDRP[mW]",
-    "8 MDRP[m?]",
+    "7 MDRP[m]",
     "9 MDRP[mrG]",
     "9 MDRP[mrB]",
     "9 MDRP[mrW]",
-    "9 MDRP[mr?]",
+    "8 MDRP[mr]",
 
+    /* 0xD0 */
     "8 MDRP[pG]",
     "8 MDRP[pB]",
     "8 MDRP[pW]",
-    "8 MDRP[p?]",
+    "7 MDRP[p]",
     "9 MDRP[prG]",
     "9 MDRP[prB]",
     "9 MDRP[prW]",
-    "9 MDRP[pr?]",
+    "8 MDRP[pr]",
     "9 MDRP[pmG]",
     "9 MDRP[pmB]",
     "9 MDRP[pmW]",
-    "9 MDRP[pm?]",
+    "8 MDRP[pm]",
     "A MDRP[pmrG]",
     "A MDRP[pmrB]",
     "A MDRP[pmrW]",
-    "A MDRP[pmr?]",
+    "9 MDRP[pmr]",
 
+    /* 0xE0 */
     "7 MIRP[G]",
     "7 MIRP[B]",
     "7 MIRP[W]",
-    "7 MIRP[?]",
+    "6 MIRP[]",
     "8 MIRP[rG]",
     "8 MIRP[rB]",
     "8 MIRP[rW]",
-    "8 MIRP[r?]",
+    "7 MIRP[r]",
     "8 MIRP[mG]",
     "8 MIRP[mB]",
     "8 MIRP[mW]",
-    "8 MIRP[m?]",
+    "7 MIRP[m]",
     "9 MIRP[mrG]",
     "9 MIRP[mrB]",
     "9 MIRP[mrW]",
-    "9 MIRP[mr?]",
+    "8 MIRP[mr]",
 
+    /* 0xF0 */
     "8 MIRP[pG]",
     "8 MIRP[pB]",
     "8 MIRP[pW]",
-    "8 MIRP[p?]",
+    "7 MIRP[p]",
     "9 MIRP[prG]",
     "9 MIRP[prB]",
     "9 MIRP[prW]",
-    "9 MIRP[pr?]",
+    "8 MIRP[pr]",
     "9 MIRP[pmG]",
     "9 MIRP[pmB]",
     "9 MIRP[pmW]",
-    "9 MIRP[pm?]",
+    "8 MIRP[pm]",
     "A MIRP[pmrG]",
     "A MIRP[pmrB]",
     "A MIRP[pmrW]",
-    "A MIRP[pmr?]"
+    "9 MIRP[pmr]"
   };
 
 #endif /* FT_DEBUG_LEVEL_TRACE */
@@ -1572,7 +1596,7 @@
             FT_ULong        idx,
             FT_F26Dot6      value )
   {
-    exc->cvt[idx] += value;
+    exc->cvt[idx] = ADD_LONG( exc->cvt[idx], value );
   }
 
 
@@ -1581,7 +1605,8 @@
                       FT_ULong        idx,
                       FT_F26Dot6      value )
   {
-    exc->cvt[idx] += FT_DivFix( value, Current_Ratio( exc ) );
+    exc->cvt[idx] = ADD_LONG( exc->cvt[idx],
+                              FT_DivFix( value, Current_Ratio( exc ) ) );
   }
 
 
@@ -1669,6 +1694,32 @@
   }
 
 
+  /*
+   *
+   * Apple's TrueType specification at
+   *
+   *   https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#order
+   *
+   * gives the following order of operations in instructions that move
+   * points.
+   *
+   *   - check single width cut-in (MIRP, MDRP)
+   *
+   *   - check control value cut-in (MIRP, MIAP)
+   *
+   *   - apply engine compensation (MIRP, MDRP)
+   *
+   *   - round distance (MIRP, MDRP) or value (MIAP, MDAP)
+   *
+   *   - check minimum distance (MIRP,MDRP)
+   *
+   *   - move point (MIRP, MDRP, MIAP, MSIRP, MDAP)
+   *
+   * For rounding instructions, engine compensation happens before rounding.
+   *
+   */
+
+
   /**************************************************************************
    *
    * @Function:
@@ -1893,7 +1944,6 @@
     zone->org[point].y = ADD_LONG( zone->org[point].y, distance );
   }
 
-
   /**************************************************************************
    *
    * @Function:
@@ -1911,12 +1961,6 @@
    *
    * @Return:
    *   The compensated distance.
-   *
-   * @Note:
-   *   The TrueType specification says very few about the relationship
-   *   between rounding and engine compensation.  However, it seems from
-   *   the description of super round that we should add the compensation
-   *   before rounding.
    */
   static FT_F26Dot6
   Round_None( TT_ExecContext  exc,
@@ -6319,7 +6363,7 @@
     if ( exc->GS.auto_flip )
     {
       if ( ( org_dist ^ cvt_dist ) < 0 )
-        cvt_dist = -cvt_dist;
+        cvt_dist = NEG_LONG( cvt_dist );
     }
 
 #ifdef TT_SUPPORT_SUBPIXEL_HINTING_INFINALITY
@@ -7874,7 +7918,7 @@
         /* and the first few stack elements also             */
         FT_TRACE6(( "  " ));
         FT_TRACE7(( "%06d ", exc->IP ));
-        FT_TRACE6(( opcode_name[exc->opcode] + 2 ));
+        FT_TRACE6(( "%s", opcode_name[exc->opcode] + 2 ));
         FT_TRACE7(( "%*s", *opcode_name[exc->opcode] == 'A'
                               ? 2
                               : 12 - ( *opcode_name[exc->opcode] - '0' ),
diff --git a/src/truetype/ttinterp.h b/src/truetype/ttinterp.h
index 172cdd0..0cb1e89 100644
--- a/src/truetype/ttinterp.h
+++ b/src/truetype/ttinterp.h
@@ -4,7 +4,7 @@
  *
  *   TrueType bytecode interpreter (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -352,7 +352,7 @@
      *     https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
      *
      * [3] Beat Stamm describes it in more detail:
-     *     http://www.beatstamm.com/typography/RTRCh4.htm#Sec12
+     *     http://rastertragedy.com/RTRCh4.htm#Sec12.
      *
      * [4] The list of `native ClearType' fonts is small at the time of this
      *     writing; I found the following on a Windows 10 Update 1511
diff --git a/src/truetype/ttobjs.c b/src/truetype/ttobjs.c
index df6c72a..e4775a5 100644
--- a/src/truetype/ttobjs.c
+++ b/src/truetype/ttobjs.c
@@ -4,7 +4,7 @@
  *
  *   Objects manager (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -43,7 +43,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttobjs
+#define FT_COMPONENT  ttobjs
 
 
 #ifdef TT_USE_BYTECODE_INTERPRETER
@@ -148,7 +148,7 @@
   /* This list shall be expanded as we find more of them.       */
 
   static FT_Bool
-  tt_check_trickyness_family( FT_String*  name )
+  tt_check_trickyness_family( const FT_String*  name )
   {
 
 #define TRICK_NAMES_MAX_CHARACTERS  19
@@ -937,7 +937,22 @@
     TT_Face         face = (TT_Face)size->root.face;
     TT_ExecContext  exec;
     FT_Error        error;
+    FT_UInt         i;
 
+    /* unscaled CVT values are already stored in 26.6 format */
+    FT_Fixed  scale = size->ttmetrics.scale >> 6;
+
+
+    /* Scale the cvt values to the new ppem.            */
+    /* By default, we use the y ppem value for scaling. */
+    FT_TRACE6(( "CVT values:\n" ));
+    for ( i = 0; i < size->cvt_size; i++ )
+    {
+      size->cvt[i] = FT_MulFix( face->cvt[i], scale );
+      FT_TRACE6(( "  %3d: %f (%f)\n",
+                  i, face->cvt[i] / 64.0, size->cvt[i] / 64.0 ));
+    }
+    FT_TRACE6(( "\n" ));
 
     exec = size->context;
 
@@ -1094,11 +1109,17 @@
       tt_metrics->rotated   = FALSE;
       tt_metrics->stretched = FALSE;
 
-      /* set default engine compensation */
-      tt_metrics->compensations[0] = 0;   /* gray     */
-      tt_metrics->compensations[1] = 0;   /* black    */
-      tt_metrics->compensations[2] = 0;   /* white    */
-      tt_metrics->compensations[3] = 0;   /* reserved */
+      /* Set default engine compensation.  Value 3 is not described */
+      /* in the OpenType specification (as of Mai 2019), but Greg   */
+      /* says that MS handles it the same as `gray'.                */
+      /*                                                            */
+      /* The Apple specification says that the compensation for     */
+      /* `gray' is always zero.  FreeType doesn't do any            */
+      /* compensation at all.                                       */
+      tt_metrics->compensations[0] = 0;   /* gray             */
+      tt_metrics->compensations[1] = 0;   /* black            */
+      tt_metrics->compensations[2] = 0;   /* white            */
+      tt_metrics->compensations[3] = 0;   /* the same as gray */
     }
 
     /* allocate function defs, instruction defs, cvt, and storage area */
@@ -1171,14 +1192,8 @@
     if ( size->cvt_ready < 0 )
     {
       FT_UInt  i;
-      TT_Face  face = (TT_Face)size->root.face;
 
 
-      /* Scale the cvt values to the new ppem.          */
-      /* We use by default the y ppem to scale the CVT. */
-      for ( i = 0; i < size->cvt_size; i++ )
-        size->cvt[i] = FT_MulFix( face->cvt[i], size->ttmetrics.scale );
-
       /* all twilight points are originally zero */
       for ( i = 0; i < (FT_UInt)size->twilight.n_points; i++ )
       {
diff --git a/src/truetype/ttobjs.h b/src/truetype/ttobjs.h
index dcff3f7..9fc654d 100644
--- a/src/truetype/ttobjs.h
+++ b/src/truetype/ttobjs.h
@@ -4,7 +4,7 @@
  *
  *   Objects manager (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttpload.c b/src/truetype/ttpload.c
index f7935cf..bc954c2 100644
--- a/src/truetype/ttpload.c
+++ b/src/truetype/ttpload.c
@@ -4,7 +4,7 @@
  *
  *   TrueType-specific tables loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -38,7 +38,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_ttpload
+#define FT_COMPONENT  ttpload
 
 
   /**************************************************************************
@@ -352,12 +352,12 @@
       goto Exit;
 
     {
-      FT_Short*  cur   = face->cvt;
-      FT_Short*  limit = cur + face->cvt_size;
+      FT_Int32*  cur   = face->cvt;
+      FT_Int32*  limit = cur + face->cvt_size;
 
 
       for ( ; cur < limit; cur++ )
-        *cur = FT_GET_SHORT();
+        *cur = FT_GET_SHORT() * 64;
     }
 
     FT_FRAME_EXIT();
diff --git a/src/truetype/ttpload.h b/src/truetype/ttpload.h
index eef2695..022750e 100644
--- a/src/truetype/ttpload.h
+++ b/src/truetype/ttpload.h
@@ -4,7 +4,7 @@
  *
  *   TrueType-specific tables loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttsubpix.c b/src/truetype/ttsubpix.c
index 70e94e2..23a2e5b 100644
--- a/src/truetype/ttsubpix.c
+++ b/src/truetype/ttsubpix.c
@@ -4,7 +4,7 @@
  *
  *   TrueType Subpixel Hinting.
  *
- * Copyright 2010-2018 by
+ * Copyright (C) 2010-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/truetype/ttsubpix.h b/src/truetype/ttsubpix.h
index 2e10ea3..4966800 100644
--- a/src/truetype/ttsubpix.h
+++ b/src/truetype/ttsubpix.h
@@ -4,7 +4,7 @@
  *
  *   TrueType Subpixel Hinting.
  *
- * Copyright 2010-2018 by
+ * Copyright (C) 2010-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/Jamfile b/src/type1/Jamfile
index b94b7d0..0bcfb2e 100644
--- a/src/type1/Jamfile
+++ b/src/type1/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/type1 Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type1/module.mk b/src/type1/module.mk
index 3fea5cc..2f48c65 100644
--- a/src/type1/module.mk
+++ b/src/type1/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type1/rules.mk b/src/type1/rules.mk
index cb1a142..901169c 100644
--- a/src/type1/rules.mk
+++ b/src/type1/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type1/t1afm.c b/src/type1/t1afm.c
index 0cbef3b..6841184 100644
--- a/src/type1/t1afm.c
+++ b/src/type1/t1afm.c
@@ -4,7 +4,7 @@
  *
  *   AFM support for Type 1 fonts (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -33,7 +33,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1afm
+#define FT_COMPONENT  t1afm
 
 
   FT_LOCAL_DEF( void )
diff --git a/src/type1/t1afm.h b/src/type1/t1afm.h
index d92b78f..a8e6a54 100644
--- a/src/type1/t1afm.h
+++ b/src/type1/t1afm.h
@@ -4,7 +4,7 @@
  *
  *   AFM support for Type 1 fonts (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1driver.c b/src/type1/t1driver.c
index 4d46e3e..557733d 100644
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 driver interface (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,7 +50,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1driver
+#define FT_COMPONENT  t1driver
 
   /*
    * GLYPH DICT SERVICE
@@ -70,8 +70,8 @@
 
 
   static FT_UInt
-  t1_get_name_index( T1_Face     face,
-                     FT_String*  glyph_name )
+  t1_get_name_index( T1_Face           face,
+                     const FT_String*  glyph_name )
   {
     FT_Int  i;
 
@@ -122,17 +122,19 @@
 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
   static const FT_Service_MultiMastersRec  t1_service_multi_masters =
   {
-    (FT_Get_MM_Func)        T1_Get_Multi_Master,   /* get_mm         */
-    (FT_Set_MM_Design_Func) T1_Set_MM_Design,      /* set_mm_design  */
-    (FT_Set_MM_Blend_Func)  T1_Set_MM_Blend,       /* set_mm_blend   */
-    (FT_Get_MM_Blend_Func)  T1_Get_MM_Blend,       /* get_mm_blend   */
-    (FT_Get_MM_Var_Func)    T1_Get_MM_Var,         /* get_mm_var     */
-    (FT_Set_Var_Design_Func)T1_Set_Var_Design,     /* set_var_design */
-    (FT_Get_Var_Design_Func)T1_Get_Var_Design,     /* get_var_design */
-    (FT_Set_Instance_Func)  T1_Reset_MM_Blend,     /* set_instance   */
+    (FT_Get_MM_Func)             T1_Get_Multi_Master,    /* get_mm              */
+    (FT_Set_MM_Design_Func)      T1_Set_MM_Design,       /* set_mm_design       */
+    (FT_Set_MM_Blend_Func)       T1_Set_MM_Blend,        /* set_mm_blend        */
+    (FT_Get_MM_Blend_Func)       T1_Get_MM_Blend,        /* get_mm_blend        */
+    (FT_Get_MM_Var_Func)         T1_Get_MM_Var,          /* get_mm_var          */
+    (FT_Set_Var_Design_Func)     T1_Set_Var_Design,      /* set_var_design      */
+    (FT_Get_Var_Design_Func)     T1_Get_Var_Design,      /* get_var_design      */
+    (FT_Set_Instance_Func)       T1_Reset_MM_Blend,      /* set_instance        */
+    (FT_Set_MM_WeightVector_Func)T1_Set_MM_WeightVector, /* set_mm_weightvector */
+    (FT_Get_MM_WeightVector_Func)T1_Get_MM_WeightVector, /* get_mm_weightvector */
 
-    (FT_Get_Var_Blend_Func) NULL,                  /* get_var_blend  */
-    (FT_Done_Blend_Func)    T1_Done_Blend          /* done_blend     */
+    (FT_Get_Var_Blend_Func)      NULL,                   /* get_var_blend       */
+    (FT_Done_Blend_Func)         T1_Done_Blend           /* done_blend          */
   };
 #endif
 
diff --git a/src/type1/t1driver.h b/src/type1/t1driver.h
index 2dae4bd..206f64a 100644
--- a/src/type1/t1driver.h
+++ b/src/type1/t1driver.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type 1 driver interface (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1errors.h b/src/type1/t1errors.h
index 312f456..b35f67a 100644
--- a/src/type1/t1errors.h
+++ b/src/type1/t1errors.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1gload.c b/src/type1/t1gload.c
index 87c2a0f..f9b115b 100644
--- a/src/type1/t1gload.c
+++ b/src/type1/t1gload.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 Glyph Loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -36,7 +36,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1gload
+#define FT_COMPONENT  t1gload
 
 
   static FT_Error
@@ -402,9 +402,9 @@
     t1glyph->outline.n_points   = 0;
     t1glyph->outline.n_contours = 0;
 
-    hinting = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE   ) == 0 &&
-                       ( load_flags & FT_LOAD_NO_HINTING ) == 0 );
-    scaled  = FT_BOOL( ( load_flags & FT_LOAD_NO_SCALE   ) == 0 );
+    hinting = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE   ) &&
+                       !( load_flags & FT_LOAD_NO_HINTING ) );
+    scaled  = FT_BOOL( !( load_flags & FT_LOAD_NO_SCALE   ) );
 
     glyph->hint     = hinting;
     glyph->scaled   = scaled;
@@ -416,7 +416,7 @@
                                  t1glyph,
                                  (FT_Byte**)type1->glyph_names,
                                  face->blend,
-                                 FT_BOOL( hinting ),
+                                 hinting,
                                  FT_LOAD_TARGET_MODE( load_flags ),
                                  T1_Parse_Glyph );
     if ( error )
@@ -424,8 +424,7 @@
 
     must_finish_decoder = TRUE;
 
-    decoder.builder.no_recurse = FT_BOOL(
-                                   ( load_flags & FT_LOAD_NO_RECURSE ) != 0 );
+    decoder.builder.no_recurse = FT_BOOL( load_flags & FT_LOAD_NO_RECURSE );
 
     decoder.num_subrs     = type1->num_subrs;
     decoder.subrs         = type1->subrs;
@@ -546,7 +545,7 @@
 
 
           /* First of all, scale the points, if we are not hinting */
-          if ( !hinting || ! decoder.builder.hints_funcs )
+          if ( !hinting || !decoder.builder.hints_funcs )
             for ( n = cur->n_points; n > 0; n--, vec++ )
             {
               vec->x = FT_MulFix( vec->x, x_scale );
diff --git a/src/type1/t1gload.h b/src/type1/t1gload.h
index 12ba234..8044036 100644
--- a/src/type1/t1gload.h
+++ b/src/type1/t1gload.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 Glyph Loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1load.c b/src/type1/t1load.c
index a443571..5cffdfa 100644
--- a/src/type1/t1load.c
+++ b/src/type1/t1load.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 font loader (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -73,7 +73,7 @@
 
 
 #ifdef FT_CONFIG_OPTION_INCREMENTAL
-#define IS_INCREMENTAL  (FT_Bool)( face->root.internal->incremental_interface != 0 )
+#define IS_INCREMENTAL  FT_BOOL( face->root.internal->incremental_interface )
 #else
 #define IS_INCREMENTAL  0
 #endif
@@ -86,7 +86,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1load
+#define FT_COMPONENT  t1load
 
 
 #ifndef T1_CONFIG_OPTION_NO_MM_SUPPORT
@@ -384,24 +384,31 @@
     for ( n = 0; n < blend->num_designs; n++ )
     {
       FT_Fixed  result = 0x10000L;  /* 1.0 fixed */
+      FT_Fixed  factor;
 
 
       for ( m = 0; m < blend->num_axis; m++ )
       {
-        FT_Fixed  factor;
-
-
-        /* get current blend axis position;                  */
         /* use a default value if we don't have a coordinate */
-        factor = m < num_coords ? coords[m] : 0x8000;
-        if ( factor < 0 )
-          factor = 0;
-        if ( factor > 0x10000L )
-          factor = 0x10000L;
+        if ( m >= num_coords )
+        {
+          result >>= 1;
+          continue;
+        }
 
+        /* get current blend axis position */
+        factor = coords[m];
         if ( ( n & ( 1 << m ) ) == 0 )
           factor = 0x10000L - factor;
 
+        if ( factor <= 0 )
+        {
+          result = 0;
+          break;
+        }
+        else if ( factor >= 0x10000L )
+          continue;
+
         result = FT_MulFix( result, factor );
       }
 
@@ -474,6 +481,75 @@
 
 
   FT_LOCAL_DEF( FT_Error )
+  T1_Set_MM_WeightVector( T1_Face    face,
+                          FT_UInt    len,
+                          FT_Fixed*  weightvector )
+  {
+    PS_Blend  blend = face->blend;
+    FT_UInt   i, n;
+
+
+    if ( !blend )
+     return FT_THROW( Invalid_Argument );
+
+    if ( !len && !weightvector )
+    {
+      for ( i = 0; i < blend->num_designs; i++ )
+        blend->weight_vector[i] = blend->default_weight_vector[i];
+    }
+    else
+    {
+      if ( !weightvector )
+        return FT_THROW( Invalid_Argument );
+
+      n = len < blend->num_designs ? len : blend->num_designs;
+
+      for ( i = 0; i < n; i++ )
+        blend->weight_vector[i] = weightvector[i];
+
+      for ( ; i < blend->num_designs; i++ )
+        blend->weight_vector[i] = (FT_Fixed)0;
+
+      if ( len )
+        face->root.face_flags |= FT_FACE_FLAG_VARIATION;
+      else
+        face->root.face_flags &= ~FT_FACE_FLAG_VARIATION;
+    }
+
+    return FT_Err_Ok;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
+  T1_Get_MM_WeightVector( T1_Face    face,
+                          FT_UInt*   len,
+                          FT_Fixed*  weightvector )
+  {
+    PS_Blend  blend = face->blend;
+    FT_UInt   i;
+
+
+    if ( !blend )
+      return FT_THROW( Invalid_Argument );
+
+    if ( *len < blend->num_designs )
+    {
+      *len = blend->num_designs;
+      return FT_THROW( Invalid_Argument );
+    }
+
+    for ( i = 0; i < blend->num_designs; i++ )
+      weightvector[i] = blend->weight_vector[i];
+    for ( ; i < *len; i++ )
+      weightvector[i] = (FT_Fixed)0;
+
+    *len = blend->num_designs;
+
+    return FT_Err_Ok;
+  }
+
+
+  FT_LOCAL_DEF( FT_Error )
   T1_Set_MM_Design( T1_Face   face,
                     FT_UInt   num_coords,
                     FT_Long*  coords )
@@ -1062,16 +1138,22 @@
   parse_buildchar( T1_Face    face,
                    T1_Loader  loader )
   {
-    FT_UInt  i;
-
-
     face->len_buildchar = (FT_UInt)T1_ToFixedArray( &loader->parser,
                                                     0, NULL, 0 );
-    FT_TRACE4(( " [" ));
-    for ( i = 0; i < face->len_buildchar; i++ )
-      FT_TRACE4(( " 0" ));
 
-    FT_TRACE4(( "]\n" ));
+#ifdef FT_DEBUG_LEVEL_TRACE
+    {
+      FT_UInt  i;
+
+
+      FT_TRACE4(( " [" ));
+      for ( i = 0; i < face->len_buildchar; i++ )
+        FT_TRACE4(( " 0" ));
+
+      FT_TRACE4(( "]\n" ));
+    }
+#endif
+
     return;
   }
 
@@ -1425,12 +1507,7 @@
 
       /* We need to `zero' out encoding_table.elements */
       for ( n = 0; n < array_size; n++ )
-      {
-        char*  notdef = (char *)".notdef";
-
-
-        (void)T1_Add_Table( char_table, n, notdef, 8 );
-      }
+        (void)T1_Add_Table( char_table, n, ".notdef", 8 );
 
       /* Now we need to read records of the form                */
       /*                                                        */
@@ -2065,7 +2142,6 @@
 
       /* 0 333 hsbw endchar */
       FT_Byte  notdef_glyph[] = { 0x8B, 0xF7, 0xE1, 0x0D, 0x0E };
-      char*    notdef_name    = (char *)".notdef";
 
 
       error = T1_Add_Table( swap_table, 0,
@@ -2080,7 +2156,7 @@
       if ( error )
         goto Fail;
 
-      error = T1_Add_Table( name_table, 0, notdef_name, 8 );
+      error = T1_Add_Table( name_table, 0, ".notdef", 8 );
       if ( error )
         goto Fail;
 
@@ -2551,8 +2627,7 @@
     /* we must now build type1.encoding when we have a custom array */
     if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
     {
-      FT_Int    charcode, idx, min_char, max_char;
-      FT_Byte*  glyph_name;
+      FT_Int  charcode, idx, min_char, max_char;
 
 
       /* OK, we do the following: for each element in the encoding  */
@@ -2566,27 +2641,27 @@
       charcode = 0;
       for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
       {
-        FT_Byte*  char_name;
+        const FT_String*  char_name =
+              (const FT_String*)loader.encoding_table.elements[charcode];
 
 
         type1->encoding.char_index[charcode] = 0;
-        type1->encoding.char_name [charcode] = (char *)".notdef";
+        type1->encoding.char_name [charcode] = ".notdef";
 
-        char_name = loader.encoding_table.elements[charcode];
         if ( char_name )
           for ( idx = 0; idx < type1->num_glyphs; idx++ )
           {
-            glyph_name = (FT_Byte*)type1->glyph_names[idx];
-            if ( ft_strcmp( (const char*)char_name,
-                            (const char*)glyph_name ) == 0 )
+            const FT_String*  glyph_name = type1->glyph_names[idx];
+
+
+            if ( ft_strcmp( char_name, glyph_name ) == 0 )
             {
               type1->encoding.char_index[charcode] = (FT_UShort)idx;
-              type1->encoding.char_name [charcode] = (char*)glyph_name;
+              type1->encoding.char_name [charcode] = glyph_name;
 
               /* Change min/max encoded char only if glyph name is */
               /* not /.notdef                                      */
-              if ( ft_strcmp( (const char*)".notdef",
-                              (const char*)glyph_name ) != 0 )
+              if ( ft_strcmp( ".notdef", glyph_name ) != 0 )
               {
                 if ( charcode < min_char )
                   min_char = charcode;
diff --git a/src/type1/t1load.h b/src/type1/t1load.h
index 43d5db5..44f835b 100644
--- a/src/type1/t1load.h
+++ b/src/type1/t1load.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 font loader (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -106,6 +106,16 @@
   FT_LOCAL( void )
   T1_Done_Blend( T1_Face  face );
 
+  FT_LOCAL( FT_Error )
+  T1_Set_MM_WeightVector( T1_Face    face,
+                          FT_UInt    len,
+                          FT_Fixed*  weightvector );
+
+  FT_LOCAL( FT_Error )
+  T1_Get_MM_WeightVector( T1_Face    face,
+                          FT_UInt*   len,
+                          FT_Fixed*  weightvector );
+
 #endif /* !T1_CONFIG_OPTION_NO_MM_SUPPORT */
 
 
diff --git a/src/type1/t1objs.c b/src/type1/t1objs.c
index 05f02d5..741388a 100644
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 objects manager (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -43,7 +43,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1objs
+#define FT_COMPONENT  t1objs
 
 
   /**************************************************************************
@@ -526,7 +526,8 @@
 
         error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
         if ( error                                      &&
-             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+             FT_ERR_NEQ( error, Unimplemented_Feature ) )
           goto Exit;
         error = FT_Err_Ok;
 
diff --git a/src/type1/t1objs.h b/src/type1/t1objs.h
index 86fecd9..2161091 100644
--- a/src/type1/t1objs.h
+++ b/src/type1/t1objs.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 objects manager (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1parse.c b/src/type1/t1parse.c
index 9214831..56caeb9 100644
--- a/src/type1/t1parse.c
+++ b/src/type1/t1parse.c
@@ -4,7 +4,7 @@
  *
  *   Type 1 parser (body).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -50,7 +50,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t1parse
+#define FT_COMPONENT  t1parse
 
 
   /*************************************************************************/
diff --git a/src/type1/t1parse.h b/src/type1/t1parse.h
index 5659f4a..dab8fdd 100644
--- a/src/type1/t1parse.h
+++ b/src/type1/t1parse.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 parser (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/t1tokens.h b/src/type1/t1tokens.h
index 45fc50d..97f2dbe 100644
--- a/src/type1/t1tokens.h
+++ b/src/type1/t1tokens.h
@@ -4,7 +4,7 @@
  *
  *   Type 1 tokenizer (specification).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type1/type1.c b/src/type1/type1.c
index c2d7922..ce8557a 100644
--- a/src/type1/type1.c
+++ b/src/type1/type1.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Type 1 driver component (body only).
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/Jamfile b/src/type42/Jamfile
index b98de05..6123b35 100644
--- a/src/type42/Jamfile
+++ b/src/type42/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/type42 Jamfile
 #
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type42/module.mk b/src/type42/module.mk
index 3d4732b..9e9d154 100644
--- a/src/type42/module.mk
+++ b/src/type42/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type42/rules.mk b/src/type42/rules.mk
index 9325d38..9d71f53 100644
--- a/src/type42/rules.mk
+++ b/src/type42/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 2002-2018 by
+# Copyright (C) 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/type42/t42drivr.c b/src/type42/t42drivr.c
index 1036503..09ad632 100644
--- a/src/type42/t42drivr.c
+++ b/src/type42/t42drivr.c
@@ -4,7 +4,7 @@
  *
  *   High-level Type 42 driver interface (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -47,7 +47,7 @@
 #include FT_SERVICE_POSTSCRIPT_INFO_H
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t42
+#define FT_COMPONENT  t42
 
 
   /*
@@ -69,8 +69,8 @@
 
 
   static FT_UInt
-  t42_get_name_index( T42_Face    face,
-                      FT_String*  glyph_name )
+  t42_get_name_index( T42_Face          face,
+                      const FT_String*  glyph_name )
   {
     FT_Int  i;
 
diff --git a/src/type42/t42drivr.h b/src/type42/t42drivr.h
index ef50ad9..a35ca28 100644
--- a/src/type42/t42drivr.h
+++ b/src/type42/t42drivr.h
@@ -4,7 +4,7 @@
  *
  *   High-level Type 42 driver interface (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/t42error.h b/src/type42/t42error.h
index 95f9e69..5fb2143 100644
--- a/src/type42/t42error.h
+++ b/src/type42/t42error.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 error codes (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/t42objs.c b/src/type42/t42objs.c
index 0325cad..d31bace 100644
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -4,7 +4,7 @@
  *
  *   Type 42 objects manager (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -25,7 +25,7 @@
 
 
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t42
+#define FT_COMPONENT  t42
 
 
   static FT_Error
@@ -98,8 +98,7 @@
     /* we must now build type1.encoding when we have a custom array */
     if ( type1->encoding_type == T1_ENCODING_TYPE_ARRAY )
     {
-      FT_Int    charcode, idx, min_char, max_char;
-      FT_Byte*  glyph_name;
+      FT_Int  charcode, idx, min_char, max_char;
 
 
       /* OK, we do the following: for each element in the encoding   */
@@ -114,27 +113,27 @@
       charcode = 0;
       for ( ; charcode < loader.encoding_table.max_elems; charcode++ )
       {
-        FT_Byte*  char_name;
+        const FT_String*  char_name =
+              (const FT_String*)loader.encoding_table.elements[charcode];
 
 
         type1->encoding.char_index[charcode] = 0;
-        type1->encoding.char_name [charcode] = (char *)".notdef";
+        type1->encoding.char_name [charcode] = ".notdef";
 
-        char_name = loader.encoding_table.elements[charcode];
         if ( char_name )
           for ( idx = 0; idx < type1->num_glyphs; idx++ )
           {
-            glyph_name = (FT_Byte*)type1->glyph_names[idx];
-            if ( ft_strcmp( (const char*)char_name,
-                            (const char*)glyph_name ) == 0 )
+            const FT_String*  glyph_name = type1->glyph_names[idx];
+
+
+            if ( ft_strcmp( char_name, glyph_name ) == 0 )
             {
               type1->encoding.char_index[charcode] = (FT_UShort)idx;
-              type1->encoding.char_name [charcode] = (char*)glyph_name;
+              type1->encoding.char_name [charcode] = glyph_name;
 
               /* Change min/max encoded char only if glyph name is */
               /* not /.notdef                                      */
-              if ( ft_strcmp( (const char*)".notdef",
-                              (const char*)glyph_name ) != 0 )
+              if ( ft_strcmp( ".notdef", glyph_name ) != 0 )
               {
                 if ( charcode < min_char )
                   min_char = charcode;
@@ -354,7 +353,8 @@
 
         error = FT_CMap_New( cmap_classes->unicode, NULL, &charmap, NULL );
         if ( error                                      &&
-             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) )
+             FT_ERR_NEQ( error, No_Unicode_Glyph_Name ) &&
+             FT_ERR_NEQ( error, Unimplemented_Feature ) )
           goto Exit;
         error = FT_Err_Ok;
 
diff --git a/src/type42/t42objs.h b/src/type42/t42objs.h
index 332a43c..98300cf 100644
--- a/src/type42/t42objs.h
+++ b/src/type42/t42objs.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 objects manager (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/t42parse.c b/src/type42/t42parse.c
index edd27a8..c47a777 100644
--- a/src/type42/t42parse.c
+++ b/src/type42/t42parse.c
@@ -4,7 +4,7 @@
  *
  *   Type 42 font parser (body).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
@@ -30,7 +30,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_t42
+#define FT_COMPONENT  t42
 
 
   static void
@@ -226,7 +226,8 @@
     if ( !parser->in_memory )
       FT_FREE( parser->base_dict );
 
-    parser->root.funcs.done( &parser->root );
+    if ( parser->root.funcs.done )
+      parser->root.funcs.done( &parser->root );
   }
 
 
@@ -373,12 +374,7 @@
 
       /* We need to `zero' out encoding_table.elements */
       for ( n = 0; n < count; n++ )
-      {
-        char*  notdef = (char *)".notdef";
-
-
-        (void)T1_Add_Table( char_table, n, notdef, 8 );
-      }
+        (void)T1_Add_Table( char_table, n, ".notdef", 8 );
 
       /* Now we need to read records of the form                */
       /*                                                        */
@@ -595,6 +591,14 @@
 
       else if ( *cur == '<' )
       {
+        if ( string_buf && !allocated )
+        {
+          FT_ERROR(( "t42_parse_sfnts: "
+                     "can't handle mixed binary and hex strings\n" ));
+          error = FT_THROW( Invalid_File_Format );
+          goto Fail;
+        }
+
         T1_Skip_PS_Token( parser );
         if ( parser->root.error )
           goto Exit;
@@ -1013,8 +1017,7 @@
     }
 
     /* if /.notdef does not occupy index 0, do our magic. */
-    if ( ft_strcmp( (const char*)".notdef",
-                    (const char*)name_table->elements[0] ) )
+    if ( ft_strcmp( ".notdef", (const char*)name_table->elements[0] ) )
     {
       /* Swap glyph in index 0 with /.notdef glyph.  First, add index 0  */
       /* name and code entries to swap_table.  Then place notdef_index   */
diff --git a/src/type42/t42parse.h b/src/type42/t42parse.h
index d9b9a69..0c7bb48 100644
--- a/src/type42/t42parse.h
+++ b/src/type42/t42parse.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 font parser (specification).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/t42types.h b/src/type42/t42types.h
index 7d0230e..a258144 100644
--- a/src/type42/t42types.h
+++ b/src/type42/t42types.h
@@ -4,7 +4,7 @@
  *
  *   Type 42 font data types (specification only).
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * Roberto Alameda.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/type42/type42.c b/src/type42/type42.c
index 187c5ed..0cb7b77 100644
--- a/src/type42/type42.c
+++ b/src/type42/type42.c
@@ -4,7 +4,7 @@
  *
  *   FreeType Type 42 driver component.
  *
- * Copyright 2002-2018 by
+ * Copyright (C) 2002-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/winfonts/Jamfile b/src/winfonts/Jamfile
index 4385e3b..4b92226 100644
--- a/src/winfonts/Jamfile
+++ b/src/winfonts/Jamfile
@@ -1,6 +1,6 @@
 # FreeType 2 src/winfonts Jamfile
 #
-# Copyright 2001-2018 by
+# Copyright (C) 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/fnterrs.h b/src/winfonts/fnterrs.h
index 08fceb0..af29307 100644
--- a/src/winfonts/fnterrs.h
+++ b/src/winfonts/fnterrs.h
@@ -4,7 +4,7 @@
  *
  *   Win FNT/FON error codes (specification only).
  *
- * Copyright 2001-2018 by
+ * Copyright (C) 2001-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  *
  * This file is part of the FreeType project, and may only be used,
diff --git a/src/winfonts/module.mk b/src/winfonts/module.mk
index 13f9077..82fb015 100644
--- a/src/winfonts/module.mk
+++ b/src/winfonts/module.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/rules.mk b/src/winfonts/rules.mk
index d694d1a..998d49b 100644
--- a/src/winfonts/rules.mk
+++ b/src/winfonts/rules.mk
@@ -3,7 +3,7 @@
 #
 
 
-# Copyright 1996-2018 by
+# Copyright (C) 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
diff --git a/src/winfonts/winfnt.c b/src/winfonts/winfnt.c
index 70fc827..2d771be 100644
--- a/src/winfonts/winfnt.c
+++ b/src/winfonts/winfnt.c
@@ -4,7 +4,7 @@
  *
  *   FreeType font driver for Windows FNT/FON files
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * Copyright 2003 Huw D M Davies for Codeweavers
  * Copyright 2007 Dmitry Timoshkov for Codeweavers
@@ -37,7 +37,7 @@
    * messages during execution.
    */
 #undef  FT_COMPONENT
-#define FT_COMPONENT  trace_winfnt
+#define FT_COMPONENT  winfnt
 
 
   static const FT_Frame_Field  winmz_header_fields[] =
diff --git a/src/winfonts/winfnt.h b/src/winfonts/winfnt.h
index 0161939..b628ad4 100644
--- a/src/winfonts/winfnt.h
+++ b/src/winfonts/winfnt.h
@@ -4,7 +4,7 @@
  *
  *   FreeType font driver for Windows FNT/FON files
  *
- * Copyright 1996-2018 by
+ * Copyright (C) 1996-2019 by
  * David Turner, Robert Wilhelm, and Werner Lemberg.
  * Copyright 2007 Dmitry Timoshkov for Codeweavers
  *
@@ -150,9 +150,6 @@
     FT_FaceRec     root;
     FNT_Font       font;
 
-    FT_CharMap     charmap_handle;
-    FT_CharMapRec  charmap;  /* a single charmap per face */
-
   } FNT_FaceRec, *FNT_Face;
 
 
diff --git a/vms_make.com b/vms_make.com
index 7b8a49b..b5da5f8 100644
--- a/vms_make.com
+++ b/vms_make.com
@@ -1,6 +1,6 @@
 $! make FreeType 2 under OpenVMS
 $!
-$! Copyright 2003-2018 by
+$! Copyright (C) 2003-2019 by
 $! David Turner, Robert Wilhelm, and Werner Lemberg.
 $!
 $! This file is part of the FreeType project, and may only be used, modified,
@@ -47,13 +47,13 @@
 $! Setup variables holding "config" information
 $!
 $ Make    = ""
-$ ccopt   = "/name=as_is/float=ieee"
+$ ccopt   = "/name=(as_is,short)/float=ieee"
 $ lopts   = ""
 $ dnsrl   = ""
 $ aconf_in_file = "config.hin"
 $ name    = "Freetype2"
-$ mapfile =  name + ".map"
-$ optfile =  name + ".opt"
+$ mapfile = name + ".map"
+$ optfile = name + ".opt"
 $ s_case  = false
 $ liblist = ""
 $!
@@ -113,7 +113,14 @@
 $ If f$getsyi("HW_MODEL") .gt. 1024
 $ Then
 $   write sys$output "Creating freetype2shr.exe"
-$   call anal_obj_axp 'optfile' _link.opt
+$   If f$getsyi("HW_MODEL") .le. 2048
+$   Then
+$     call anal_obj_axp 'optfile' _link.opt
+$   Else
+$     copy _link.opt_ia64 _link.opt
+$     close libsf
+$     copy libs.opt_ia64 libs.opt
+$   endif
 $   open/append  optf 'optfile'
 $   if s_case then WRITE optf "case_sensitive=YES"
 $   close optf
@@ -157,7 +164,7 @@
 #
 
 
-# Copyright 2001 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -172,15 +179,16 @@
 
 
 all :
-        define freetype [--.include]
-        define psaux [-.psaux]
+        define config [--.include.freetype.config]
+        define internal [--.include.freetype.internal]
         define autofit [-.autofit]
-        define autohint [-.autohint]
         define base [-.base]
         define cache [-.cache]
         define cff [-.cff]
         define cid [-.cid]
+        define freetype [--.include.freetype]
         define pcf [-.pcf]
+        define psaux [-.psaux]
         define psnames [-.psnames]
         define raster [-.raster]
         define sfnt [-.sfnt]
@@ -191,9 +199,7 @@
         if f$search("lib.dir") .eqs. "" then create/directory [.lib]
         set default [.builds.vms]
         $(MMS)$(MMSQUALIFIERS)
-#        set default [--.src.autofit]
-#        $(MMS)$(MMSQUALIFIERS)
-        set default [--.src.autohint]
+        set default [--.src.autofit]
         $(MMS)$(MMSQUALIFIERS)
         set default [-.base]
         $(MMS)$(MMSQUALIFIERS)
@@ -205,8 +211,12 @@
         $(MMS)$(MMSQUALIFIERS)
         set default [-.cid]
         $(MMS)$(MMSQUALIFIERS)
+        set default [-.gxvalid]
+        $(MMS)$(MMSQUALIFIERS)
         set default [-.gzip]
         $(MMS)$(MMSQUALIFIERS)
+        set default [-.bzip2]
+        $(MMS)$(MMSQUALIFIERS)
         set default [-.lzw]
         $(MMS)$(MMSQUALIFIERS)
         set default [-.otvalid]
@@ -250,7 +260,7 @@
 #
 
 
-# Copyright 2001 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -260,7 +270,7 @@
 # fully.
 
 
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([],[--.include],[--.src.base])
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/list/show=all/include=([],[--.include],[--.src.base])
 
 OBJS=ftsystem.obj
 
@@ -282,7 +292,7 @@
 #
 
 
-# Copyright 2002 by
+# Copyright 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -293,39 +303,7 @@
 
 CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.autofit])
 
-OBJS=afangles.obj,afhints.obj,aflatin.obj
-
-all : $(OBJS)
-        library [--.lib]freetype.olb $(OBJS)
-
-# EOF
-$ eod
-$ close out
-$ write sys$output "... [.src.autohint] directory"
-$ create [.src.autohint]descrip.mms
-$ open/append out [.src.autohint]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 auto-hinter module compilation rules for VMS
-#
-
-
-# Copyright 2001, 2002 Catharon Productions Inc.
-#
-# This file is part of the Catharon Typography Project and shall only
-# be used, modified, and distributed under the terms of the Catharon
-# Open Source License that should come with this file under the name
-# `CatharonLicense.txt'.  By continuing to use, modify, or distribute
-# this file you indicate that you have read the license and
-# understand and accept it fully.
-#
-# Note that this license is compatible with the FreeType license.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/incl=([--.include],[--.src.autohint])
-
-OBJS=autohint.obj
+OBJS=autofit.obj
 
 all : $(OBJS)
         library [--.lib]freetype.olb $(OBJS)
@@ -343,7 +321,7 @@
 #
 
 
-# Copyright 2001, 2003 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -355,9 +333,22 @@
 
 CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.builds.vms],[--.include],[--.src.base])
 
-OBJS=ftbase.obj,ftinit.obj,ftglyph.obj,ftdebug.obj,ftbdf.obj,ftmm.obj,\
-     fttype1.obj,ftpfr.obj,ftstroke.obj,ftwinfnt.obj,ftbbox.obj,\
-     ftbitmap.obj,ftgasp.obj
+OBJS=ftbase.obj,\
+     ftbbox.obj,\
+     ftbdf.obj,\
+     ftbitmap.obj,\
+     ftcid.obj,\
+     ftdebug.obj,\
+     ftfstype.obj,\
+     ftgasp.obj,\
+     ftglyph.obj,\
+     ftinit.obj,\
+     ftmm.obj,\
+     ftpfr.obj,\
+     ftstroke.obj,\
+     ftsynth.obj,\
+     fttype1.obj,\
+     ftwinfnt.obj
 
 all : $(OBJS)
         library [--.lib]freetype.olb $(OBJS)
@@ -375,7 +366,7 @@
 #
 
 
-# Copyright 2002 by
+# Copyright 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -405,7 +396,7 @@
 #
 
 
-# Copyright 2001, 2002, 2003, 2004 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -415,16 +406,13 @@
 # fully.
 
 
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cache])
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.cache])/nowarn
 
 OBJS=ftcache.obj
 
 all : $(OBJS)
         library [--.lib]freetype.olb $(OBJS)
 
-ftcache.obj : ftcache.c ftcbasic.c ftccache.c ftccmap.c ftcglyph.c ftcimage.c \
-              ftcmanag.c ftcmru.c ftcsbits.c
-
 # EOF
 $ eod
 $ close out
@@ -438,7 +426,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -468,7 +456,7 @@
 #
 
 
-# Copyright 2001 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -488,6 +476,36 @@
 # EOF
 $ eod
 $ close out
+$ write sys$output "... [.src.gxvalid] directory"
+$ create [.src.gxvalid]descrip.mms
+$ open/append out [.src.gxvalid]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 TrueTypeGX/AAT validation driver configuration rules for VMS
+#
+
+
+# Copyright 2004-2019 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.
+
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.gxvalid])
+
+OBJS=gxvalid.obj
+
+all : $(OBJS)
+        library [--.lib]freetype.olb $(OBJS)
+
+# EOF
+$ eod
+$ close out
 $ write sys$output "... [.src.gzip] directory"
 $ create [.src.gzip]descrip.mms
 $ open/append out [.src.gzip]descrip.mms
@@ -498,7 +516,7 @@
 #
 
 
-# Copyright 2002 by
+# Copyright 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -522,6 +540,42 @@
 # EOF
 $ eod
 $ close out
+$ write sys$output "... [.src.bzip2] directory"
+$ create [.src.bzip2]descrip.mms
+$ open/append out [.src.bzip2]descrip.mms
+$ copy sys$input: out
+$ deck
+#
+# FreeType 2 BZIP2 support compilation rules for VMS
+#
+
+
+# Copyright 2010-2019 by
+# Joel Klinghed.
+#
+# based on `src/lzw/rules.mk'
+#
+# 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.
+$EOD
+$ if libincs .nes. "" then write out "LIBINCS = ", libincs - ",", ","
+$ write out "COMP_FLAGS = ", ccopt
+$ copy sys$input: out
+$ deck
+
+CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.bzip2])
+
+OBJS=ftbzip2.obj
+
+all : $(OBJS)
+        library [--.lib]freetype.olb $(OBJS)
+
+# EOF
+$ eod
+$ close out
 $ write sys$output "... [.src.lzw] directory"
 $ create [.src.lzw]descrip.mms
 $ open/append out [.src.lzw]descrip.mms
@@ -532,7 +586,7 @@
 #
 
 
-# Copyright 2004 by
+# Copyright 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -556,38 +610,6 @@
 # EOF
 $ eod
 $ close out
-$ write sys$output "... [.src.otlayout] directory"
-$ create [.src.otlayout]descrip.mms
-$ open/append out [.src.otlayout]descrip.mms
-$ copy sys$input: out
-$ deck
-#
-# FreeType 2 OT layout compilation rules for VMS
-#
-
-
-# Copyright 2004 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.
-
-
-CFLAGS=$(COMP_FLAGS)$(DEBUG)/include=([--.include],[--.src.otlayout])
-
-OBJS=otlbase.obj,otlcommn.obj,otlgdef.obj,otlgpos.obj,otlgsub.obj,\
-     otljstf.obj,otlparse.obj
-
-all : $(OBJS)
-        library [--.lib]freetype.olb $(OBJS)
-
-
-# EOF
-$ eod
-$ close out
 $ write sys$output "... [.src.otvalid] directory"
 $ create [.src.otvalid]descrip.mms
 $ open/append out [.src.otvalid]descrip.mms
@@ -598,7 +620,7 @@
 #
 
 
-# Copyright 2004 by
+# Copyright 2004-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -670,7 +692,7 @@
 #
 
 
-# Copyright 2002 by
+# Copyright 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -700,7 +722,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -730,7 +752,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -756,11 +778,11 @@
 $ copy sys$input: out
 $ deck
 #
-# FreeType 2 PSNames driver compilation rules for VMS
+# FreeType 2 psnames driver compilation rules for VMS
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -790,7 +812,7 @@
 #
 
 
-# Copyright 2001 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -820,7 +842,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -850,7 +872,7 @@
 #
 
 
-# Copyright 2001 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -880,7 +902,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -910,7 +932,7 @@
 #
 
 
-# Copyright 1996-2000, 2002 by
+# Copyright 1996-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -927,8 +949,6 @@
 all : $(OBJS)
         library [--.lib]freetype.olb $(OBJS)
 
-type1.obj : type1.c t1parse.c t1load.c t1objs.c t1driver.c t1gload.c t1afm.c
-
 # EOF
 $ eod
 $ close out
@@ -942,7 +962,7 @@
 #
 
 
-# Copyright 2002 by
+# Copyright 2002-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -972,7 +992,7 @@
 #
 
 
-# Copyright 2001, 2002 by
+# Copyright 2001-2019 by
 # David Turner, Robert Wilhelm, and Werner Lemberg.
 #
 # This file is part of the FreeType project, and may only be used, modified,
@@ -1103,7 +1123,7 @@
 $!
 $! Init symbols used to hold CPP definitions and include path
 $!
-$ libdefs = ""
+$ libdefs = "FT2_BUILD_LIBRARY,FT_CONFIG_OPTION_OLD_INTERNALS,"
 $ libincs = ""
 $!
 $! Open data file with location of libraries