summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Dubois2017-05-23 19:42:24 -0400
committerErik Dubois2017-05-23 19:42:24 -0400
commitffcf31530facfd0906663453d17db97aaec1c3d5 (patch)
tree7635d6e1ef4a111b63bcf0ed636b57cb7af51be5
parent5f838ddcf49b3550edadac17d7c68552e8d58b65 (diff)
downloadaur-ffcf31530facfd0906663453d17db97aaec1c3d5.tar.gz
updating to 2.8
-rw-r--r--.SRCINFO53
-rw-r--r--0001-Enable-table-validation-modules.patch28
-rw-r--r--0002-infinality-2.8-2017.05.22.patch (renamed from 0002-infinality-2.7.1-2017.01.11.patch)2586
-rw-r--r--0003-inf.patch2089
-rw-r--r--0004-Enable-long-PCF-family-names.patch25
-rw-r--r--0005-freetype-2.5.2-more-demos.patch17
-rw-r--r--0005-freetype-2.5.2-more-demos.patch.html606
-rw-r--r--PKGBUILD79
8 files changed, 3169 insertions, 2314 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 1be9c2dc4ab7..7bc19a912f53 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,38 +1,55 @@
# Generated by mksrcinfo v8
-# Wed May 3 22:54:06 UTC 2017
+# Tue May 23 23:42:11 UTC 2017
pkgbase = freetype2-infinality-ultimate
pkgdesc = TrueType font rendering library with Infinality patches and custom settings by bohoomil
- pkgver = 2.7.1
- pkgrel = 5
+ pkgver = 2.8
+ pkgrel = 1
url = http://www.freetype.org/
install = freetype2.install
arch = i686
arch = x86_64
- groups = infinality-bundle
license = GPL
makedepends = libx11
+ source = https://download.savannah.gnu.org/releases/freetype/freetype-2.8.tar.bz2
+ source = https://download.savannah.gnu.org/releases/freetype/freetype-doc-2.8.tar.bz2
+ source = https://download-mirror.savannah.gnu.org/releases/freetype/ft2demos-2.8.tar.bz2
+ source = 0001-Enable-table-validation-modules.patch
+ source = 0002-infinality-2.8-2017.05.22.patch
+ source = 0003-inf.patch
+ source = 0004-Enable-long-PCF-family-names.patch
+ source = 0005-freetype-2.5.2-more-demos.patch
+ source = freetype2.sh
+ source = infinality-settings.sh
+ source = xft-settings.sh
+ sha256sums = a3c603ed84c3c2495f9c9331fe6bba3bb0ee65e06ec331e0a0fb52158291b40b
+ sha256sums = 427ba04d11f450df4bac4c95fec247be1b835ccdcf85d8b081f3f39d31811154
+ sha256sums = 2b6ce0d36bcb43fcc8aac07a0287982d855571ee271c3803c768e501f9c1a233
+ sha256sums = 515d52643fa47bb96c99792c81d4c05694b4e08494d36c5f81f6d05b61d4f287
+ sha256sums = 72329f1efbc0a8a06c072d81f7c75464a2874a3d95e9319d0ab42bf5786fe4de
+ sha256sums = 9d65d9c6eee7ecf993bfada7aa5530f09a44dec6796a23f2f186d29c2acf775a
+ sha256sums = 7f5aa51a67a68002226f8e869eaa3f6b870c04d19135a14c64a6c355eb023a39
+ sha256sums = 36484db4b926ed026e7f32570573493b5a9793a129f08d54383a26d65a6af89b
+ sha256sums = f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467
+ sha256sums = 2041947007b27d58101b5aebdf225d79d2c6d64cf8ac07a71c225d9e027578a0
+ sha256sums = a4b3db6882de85304c5e4099fca5832a598607f90e582bcd030df0e9b526cd0b
+
+pkgname = freetype2-infinality-ultimate
+ groups = infinality-bundle
depends = zlib
depends = bzip2
depends = sh
depends = libpng
depends = harfbuzz
- provides = freetype2=2.7.1
+ provides = freetype2=2.8
provides = freetype2-infinality
provides = libfreetype.so
conflicts = freetype2
conflicts = freetype2-infinality
- source = https://download.savannah.gnu.org/releases/freetype/freetype-2.7.1.tar.bz2
- source = 0001-Enable-table-validation-modules.patch
- source = 0002-infinality-2.7.1-2017.01.11.patch
- source = freetype2.sh
- source = infinality-settings.sh
- source = xft-settings.sh
- sha256sums = 3a3bb2c4e15ffb433f2032f50a5b5a92558206822e22bfe8cbe339af4aa82f88
- sha256sums = 6d273254fd925d284e5f66e3861eaef69a4393f34872398b2c93af0d5e15d34e
- sha256sums = 0d7e15b94a20ebcc4c857b062219118ae8f7f50f4c8ad108d1abaca99cdf2304
- sha256sums = f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467
- sha256sums = 2041947007b27d58101b5aebdf225d79d2c6d64cf8ac07a71c225d9e027578a0
- sha256sums = a4b3db6882de85304c5e4099fca5832a598607f90e582bcd030df0e9b526cd0b
-pkgname = freetype2-infinality-ultimate
+pkgname = freetype2-demos-infinality
+ pkgdesc = Freetype tools and demos
+ depends = freetype2
+ depends = libx11
+ conflicts = freetyp2-demos
+ conflicts = freetyp2-demos-kagayaki
diff --git a/0001-Enable-table-validation-modules.patch b/0001-Enable-table-validation-modules.patch
index 3e9451fa8b82..d03ec67e19cf 100644
--- a/0001-Enable-table-validation-modules.patch
+++ b/0001-Enable-table-validation-modules.patch
@@ -1,17 +1,17 @@
-From c3680bf8d38cf759c1e33dcc2d2d51e0a4fea2f9 Mon Sep 17 00:00:00 2001
+From 17dd2751813c3c8b37dac474cc5024473eb9bece Mon Sep 17 00:00:00 2001
From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
Date: Tue, 23 Jun 2015 08:40:29 +0200
-Subject: [PATCH 1/3] Enable table validation modules
+Subject: [PATCH 1/4] Enable table validation modules
---
modules.cfg | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/modules.cfg b/modules.cfg
-index f30049c38cc45159..7b8e50fe1b34584a 100644
+index 517111efeb642459..64b2a34d510ce8f7 100644
--- a/modules.cfg
+++ b/modules.cfg
-@@ -120,7 +120,7 @@ AUX_MODULES += cache
+@@ -120,30 +120,30 @@ AUX_MODULES += cache
# TrueType GX/AAT table validation. Needs ftgxval.c below.
#
# No FT_CONFIG_OPTION_PIC support.
@@ -20,7 +20,22 @@ index f30049c38cc45159..7b8e50fe1b34584a 100644
# Support for streams compressed with gzip (files with suffix .gz).
#
-@@ -143,7 +143,7 @@ AUX_MODULES += bzip2
+ # See include/freetype/ftgzip.h for the API.
+ # No FT_CONFIG_OPTION_PIC support.
+ AUX_MODULES += gzip
+
+ # Support for streams compressed with LZW (files with suffix .Z).
+ #
+ # See include/freetype/ftlzw.h for the API.
+ # No FT_CONFIG_OPTION_PIC support.
+ AUX_MODULES += lzw
+
+ # Support for streams compressed with bzip2 (files with suffix .bz2).
+ #
+ # See include/freetype/ftbzip2.h for the API.
+ # No FT_CONFIG_OPTION_PIC support.
+ AUX_MODULES += bzip2
+
# OpenType table validation. Needs ftotval.c below.
#
# No FT_CONFIG_OPTION_PIC support.
@@ -30,5 +45,4 @@ index f30049c38cc45159..7b8e50fe1b34584a 100644
# Auxiliary PostScript driver component to share common code.
#
--
-2.9.3
-
+2.13.0
diff --git a/0002-infinality-2.7.1-2017.01.11.patch b/0002-infinality-2.8-2017.05.22.patch
index fbb7db2e34ea..d8e63ec23834 100644
--- a/0002-infinality-2.7.1-2017.01.11.patch
+++ b/0002-infinality-2.8-2017.05.22.patch
@@ -1,7 +1,34 @@
-diff -ruN freetype-2.7.1-orig/builds/freetype.mk freetype-2.7.1/builds/freetype.mk
---- freetype-2.7.1-orig/builds/freetype.mk 2017-01-11 12:28:16.720016867 +0100
-+++ freetype-2.7.1/builds/freetype.mk 2017-01-11 12:28:34.873016390 +0100
-@@ -161,6 +161,7 @@
+From b0f880b8216e56ad48d4c3b59a0d565fcace8e12 Mon Sep 17 00:00:00 2001
+From: "Devin J. Pohly" <djpohly@gmail.com>
+Date: Mon, 22 May 2017 12:39:32 -0500
+Subject: [PATCH] infinality 2.8 2017.05.22
+
+---
+ builds/freetype.mk | 1 +
+ configure | 2 +
+ devel/ftoption.h | 10 +
+ include/freetype/config/ftoption.h | 17 +-
+ src/autofit/aflatin.c | 170 ++-
+ src/autofit/aflatin.h | 3 +
+ src/autofit/afmodule.c | 7 +
+ src/base/Jamfile | 1 +
+ src/base/ftbase.c | 3 +
+ src/base/ftinit.c | 14 +-
+ src/base/ftlcdfil.c | 36 +-
+ src/base/ftobjs.c | 67 +-
+ src/base/ftoutln.c | 10 +-
+ src/base/ftsynth.c | 22 +-
+ src/base/rules.mk | 1 +
+ src/cff/cffobjs.c | 6 +
+ src/smooth/ftsmooth.c | 2808 ++++++++++++++++++++++++++++++++++--
+ src/truetype/ttinterp.c | 1 +
+ 18 files changed, 3057 insertions(+), 122 deletions(-)
+
+diff --git a/builds/freetype.mk b/builds/freetype.mk
+index f8cfd41..7e7ac5b 100644
+--- a/builds/freetype.mk
++++ b/builds/freetype.mk
+@@ -161,6 +161,7 @@ FT_CFLAGS = $(CPPFLAGS) \
$(CFLAGS) \
$DFT2_BUILD_LIBRARY \
$DFT_CONFIG_MODULES_H="<ftmodule.h>" \
@@ -9,9 +36,10 @@ diff -ruN freetype-2.7.1-orig/builds/freetype.mk freetype-2.7.1/builds/freetype.
$(FTOPTION_FLAG)
-diff -ruN freetype-2.7.1-orig/configure freetype-2.7.1/configure
---- freetype-2.7.1-orig/configure 2017-01-11 12:28:16.730016867 +0100
-+++ freetype-2.7.1/configure 2017-01-11 12:28:34.873016390 +0100
+diff --git a/configure b/configure
+index 68dbd99..165703c 100755
+--- a/configure
++++ b/configure
@@ -13,6 +13,8 @@
# Call the `configure' script located in `builds/unix'.
#
@@ -20,11 +48,12 @@ diff -ruN freetype-2.7.1-orig/configure freetype-2.7.1/configure
+
rm -f config.mk builds/unix/unix-def.mk builds/unix/unix-cc.mk
- # respect GNUMAKE environment variable for backwards compatibility
-diff -ruN freetype-2.7.1-orig/devel/ftoption.h freetype-2.7.1/devel/ftoption.h
---- freetype-2.7.1-orig/devel/ftoption.h 2017-01-11 12:28:16.713016867 +0100
-+++ freetype-2.7.1/devel/ftoption.h 2017-01-11 12:28:34.874016390 +0100
-@@ -626,6 +626,16 @@
+ # respect GNUMAKE environment variable for backward compatibility
+diff --git a/devel/ftoption.h b/devel/ftoption.h
+index db661e7..911f411 100644
+--- a/devel/ftoption.h
++++ b/devel/ftoption.h
+@@ -626,6 +626,16 @@ FT_BEGIN_HEADER
/* */
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
@@ -41,10 +70,11 @@ diff -ruN freetype-2.7.1-orig/devel/ftoption.h freetype-2.7.1/devel/ftoption.h
/*************************************************************************/
/* */
-diff -ruN freetype-2.7.1-orig/include/freetype/config/ftoption.h freetype-2.7.1/include/freetype/config/ftoption.h
---- freetype-2.7.1-orig/include/freetype/config/ftoption.h 2017-01-11 12:28:16.720016867 +0100
-+++ freetype-2.7.1/include/freetype/config/ftoption.h 2017-01-11 12:31:27.676011855 +0100
-@@ -122,7 +122,7 @@
+diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
+index 1bf6e8f..c565b36 100644
+--- a/include/freetype/config/ftoption.h
++++ b/include/freetype/config/ftoption.h
+@@ -122,7 +122,7 @@ FT_BEGIN_HEADER
/* This is done to allow FreeType clients to run unmodified, forcing */
/* them to display normal gray-level anti-aliased glyphs. */
/* */
@@ -53,7 +83,7 @@ diff -ruN freetype-2.7.1-orig/include/freetype/config/ftoption.h freetype-2.7.1/
/*************************************************************************/
-@@ -626,6 +626,17 @@
+@@ -626,6 +626,17 @@ FT_BEGIN_HEADER
/* */
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
@@ -71,7 +101,7 @@ diff -ruN freetype-2.7.1-orig/include/freetype/config/ftoption.h freetype-2.7.1/
/*************************************************************************/
/* */
-@@ -675,8 +686,8 @@
+@@ -684,8 +695,8 @@ FT_BEGIN_HEADER
/* [1] http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx */
/* */
/* #define TT_CONFIG_OPTION_SUBPIXEL_HINTING 1 */
@@ -82,9 +112,10 @@ diff -ruN freetype-2.7.1-orig/include/freetype/config/ftoption.h freetype-2.7.1/
/*************************************************************************/
-diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/aflatin.c
---- freetype-2.7.1-orig/src/autofit/aflatin.c 2017-01-11 12:28:16.724016867 +0100
-+++ freetype-2.7.1/src/autofit/aflatin.c 2017-01-11 12:28:34.876016390 +0100
+diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
+index 11fa523..9036fc4 100644
+--- a/src/autofit/aflatin.c
++++ b/src/autofit/aflatin.c
@@ -24,7 +24,10 @@
#include "afpic.h"
#include "aflatin.h"
@@ -108,7 +139,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
/* needed for computation of round vs. flat segments */
#define FLAT_THRESHOLD( x ) ( x / 14 )
-@@ -1028,7 +1035,10 @@
+@@ -1121,7 +1128,10 @@
FT_Pos delta;
AF_LatinAxis axis;
FT_UInt nn;
@@ -120,7 +151,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
if ( dim == AF_DIMENSION_HORZ )
{
-@@ -1056,7 +1066,7 @@
+@@ -1149,7 +1159,7 @@
{
AF_LatinAxis Axis = &metrics->axis[AF_DIMENSION_VERT];
AF_LatinBlue blue = NULL;
@@ -129,7 +160,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
for ( nn = 0; nn < Axis->blue_count; nn++ )
{
-@@ -1066,7 +1076,12 @@
+@@ -1159,7 +1169,12 @@
break;
}
}
@@ -143,7 +174,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
if ( blue )
{
FT_Pos scaled;
-@@ -1222,7 +1237,13 @@
+@@ -1315,7 +1330,13 @@
/* a blue zone is only active if it is less than 3/4 pixels tall */
dist = FT_MulFix( blue->ref.org - blue->shoot.org, scale );
@@ -157,7 +188,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
{
#if 0
FT_Pos delta1;
-@@ -1273,7 +1294,12 @@
+@@ -1366,7 +1387,12 @@
delta2 = -delta2;
blue->ref.fit = FT_PIX_ROUND( blue->ref.cur );
@@ -170,7 +201,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
#endif
-@@ -2407,7 +2433,10 @@
+@@ -2504,7 +2530,10 @@
dist = edge->fpos - blue->shoot.org;
if ( dist < 0 )
dist = -dist;
@@ -182,10 +213,12 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
dist = FT_MulFix( dist, scale );
if ( dist < best_dist )
{
-@@ -2583,8 +2612,17 @@
+@@ -2680,8 +2709,17 @@
FT_Pos dist = width;
FT_Int sign = 0;
FT_Int vertical = ( dim == AF_DIMENSION_VERT );
+-
+-
+#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
+ FT_Int infinality_dist = 0;
+ FT_UInt autohint_snap_stem_height = 0;
@@ -194,14 +227,13 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
+ autohint_snap_stem_height = 100;
+ else if ( autohint_snap_stem_height < 0 )
+ autohint_snap_stem_height = 0;
-
--
++
+ if ( autohint_snap_stem_height == 0 )
+#endif /* FT_CONFIG_OPTION_INFINALITY_PATCHSET */
if ( !AF_LATIN_HINTS_DO_STEM_ADJUST( hints ) ||
axis->extra_light )
return width;
-@@ -2594,9 +2632,76 @@
+@@ -2691,9 +2729,76 @@
dist = -width;
sign = 1;
}
@@ -279,7 +311,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
{
/* smooth hinting process: very lightly quantize the stem width */
-@@ -2688,6 +2793,9 @@
+@@ -2785,6 +2890,9 @@
}
}
else
@@ -289,7 +321,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
{
/* strong hinting process: snap the stem width to integer pixels */
-@@ -2695,7 +2803,10 @@
+@@ -2792,7 +2900,10 @@
dist = af_latin_snap_width( axis->widths, axis->width_count, dist );
@@ -301,7 +333,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
if ( vertical )
{
/* in the case of vertical hinting, always round */
-@@ -2758,6 +2869,32 @@
+@@ -2855,6 +2966,32 @@
}
Done_Width:
@@ -334,7 +366,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
if ( sign )
dist = -dist;
-@@ -2776,6 +2913,8 @@
+@@ -2873,6 +3010,8 @@
FT_Pos dist, base_delta;
FT_Pos fitted_width;
@@ -343,7 +375,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
dist = stem_edge->opos - base_edge->opos;
base_delta = base_edge->pos - base_edge->opos;
-@@ -3384,8 +3523,11 @@
+@@ -3485,8 +3624,11 @@
int dim;
AF_LatinAxis axis;
@@ -357,7 +389,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
error = af_glyph_hints_reload( hints, outline );
if ( error )
goto Exit;
-@@ -3455,7 +3597,11 @@
+@@ -3556,7 +3698,11 @@
}
af_glyph_hints_save( hints, outline );
@@ -370,10 +402,11 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.c freetype-2.7.1/src/autofit/a
Exit:
return error;
}
-diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.h freetype-2.7.1/src/autofit/aflatin.h
---- freetype-2.7.1-orig/src/autofit/aflatin.h 2017-01-11 12:28:16.724016867 +0100
-+++ freetype-2.7.1/src/autofit/aflatin.h 2017-01-11 12:28:34.877016390 +0100
-@@ -64,6 +64,9 @@
+diff --git a/src/autofit/aflatin.h b/src/autofit/aflatin.h
+index d80e125..3ca779b 100644
+--- a/src/autofit/aflatin.h
++++ b/src/autofit/aflatin.h
+@@ -64,6 +64,9 @@ FT_BEGIN_HEADER
#define AF_LATIN_MAX_WIDTHS 16
@@ -383,9 +416,10 @@ diff -ruN freetype-2.7.1-orig/src/autofit/aflatin.h freetype-2.7.1/src/autofit/a
#define AF_LATIN_BLUE_ACTIVE ( 1U << 0 ) /* zone height is <= 3/4px */
#define AF_LATIN_BLUE_TOP ( 1U << 1 ) /* we have a top blue zone */
-diff -ruN freetype-2.7.1-orig/src/autofit/afmodule.c freetype-2.7.1/src/autofit/afmodule.c
---- freetype-2.7.1-orig/src/autofit/afmodule.c 2017-01-11 12:28:16.724016867 +0100
-+++ freetype-2.7.1/src/autofit/afmodule.c 2017-01-11 12:28:34.877016390 +0100
+diff --git a/src/autofit/afmodule.c b/src/autofit/afmodule.c
+index 9d7ba22..abe2367 100644
+--- a/src/autofit/afmodule.c
++++ b/src/autofit/afmodule.c
@@ -22,6 +22,10 @@
#include "aferrors.h"
#include "afpic.h"
@@ -397,7 +431,7 @@ diff -ruN freetype-2.7.1-orig/src/autofit/afmodule.c freetype-2.7.1/src/autofit/
#ifdef FT_DEBUG_AUTOFIT
#ifndef FT_MAKE_OPTION_SINGLE_OBJECT
-@@ -466,6 +470,9 @@
+@@ -477,6 +481,9 @@
module->warping = 0;
#endif
module->no_stem_darkening = TRUE;
@@ -407,9 +441,22 @@ diff -ruN freetype-2.7.1-orig/src/autofit/afmodule.c freetype-2.7.1/src/autofit/
module->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
module->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
-diff -ruN freetype-2.7.1-orig/src/base/ftbase.c freetype-2.7.1/src/base/ftbase.c
---- freetype-2.7.1-orig/src/base/ftbase.c 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/ftbase.c 2017-01-11 12:28:34.878016390 +0100
+diff --git a/src/base/Jamfile b/src/base/Jamfile
+index 9e9a91b..5217651 100644
+--- a/src/base/Jamfile
++++ b/src/base/Jamfile
+@@ -56,6 +56,7 @@ SubDir FT2_TOP $(FT2_SRC_DIR) base ;
+ ftglyph
+ ftgxval
+ ftinit
++ ftinf
+ ftlcdfil
+ ftmm
+ ftotval
+diff --git a/src/base/ftbase.c b/src/base/ftbase.c
+index 55f7359..4d50dca 100644
+--- a/src/base/ftbase.c
++++ b/src/base/ftbase.c
@@ -34,6 +34,9 @@
#include "ftstream.c"
#include "fttrigon.c"
@@ -418,2100 +465,12 @@ diff -ruN freetype-2.7.1-orig/src/base/ftbase.c freetype-2.7.1/src/base/ftbase.c
+#include "ftinf.c"
+#endif
- #ifdef FT_MACINTOSH
- #include "ftmac.c"
-diff -ruN freetype-2.7.1-orig/src/base/ftinf.c freetype-2.7.1/src/base/ftinf.c
---- freetype-2.7.1-orig/src/base/ftinf.c 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf.c 2017-01-11 12:28:34.879016390 +0100
-@@ -0,0 +1,363 @@
-+#include <stdlib.h>
-+#include "ftinf.h"
-+#define true 1
-+#define false 0
-+
-+#define on 1
-+#define off 0
-+#define end (-128)
-+
-+#define sw2pv 18 /* STEM_WIDTH_2_PPEM */
-+#define maxp 100 /* MAX_PPEM */
-+
-+typedef signed char pv; /* ppm and values type */
-+/* the arrays start with existence flag + values */
-+typedef struct sa_rules_s {
-+ const char *name;
-+ pv always_use_100[1+4+1];
-+ pv brightness[1+2+1];
-+ pv contrast[1+2+1];
-+ pv edge_detection[1+4+1];
-+ pv m[1+4+1];
-+ pv bearing_correction[1+2+1];
-+ pv spacing[1+5+1];
-+ pv start[1+5+1];
-+ pv stem_scaling[1+6+1];
-+ pv stem_translating[1+2+1];
-+ pv stem_translating_only[1+10+1];
-+ pv stem_widths[1+4]; /* these end with maxp */
-+ pv synthesize_stems[1+2+1];
-+} sa_rules_t;
-+
-+#pragma GCC diagnostic ignored "-Wpedantic" /* C99 struct initializer tags are needed */
-+#pragma GCC diagnostic ignored "-Wunused-function"
-+
-+const ftinf_t *ftinf;
-+/* final settings, updated from environment */
-+ftinf_t _env;
-+
-+/* rules and hashing function */
-+#include "ftinf_rh.c"
-+
-+/* rules selection */
-+void ftinf_fill_stem_values( Stem_Data *stem_values,
-+ const char *family, int ppem, int use_known ){
-+ /* set the defaults */
-+ stem_values->bearing_correction = TRUE;
-+ stem_values->brightness = 0.0;
-+ stem_values->contrast = 0.0;
-+ stem_values->edge_detection = FALSE;
-+ stem_values->m = -1;
-+ stem_values->stem_scaling = -1;
-+ stem_values->stem_spacing = -1;
-+ stem_values->stem_start = -1;
-+ stem_values->stem_translating = 0;
-+ stem_values->stem_translating_only = -1024;
-+ stem_values->stem_width = -1;
-+ stem_values->synth_stems = FALSE;
-+ stem_values->use_100 = FALSE;
-+ /* pick from known rules if requested and they exist for current family */
-+ if( !use_known )
-+ return;
-+ else {
-+ const sa_rules_t *r=ftinf_rules( family );
-+ int i;
-+ if( r==NULL ) return;
-+ if( r->stem_widths[0]==on )
-+ for( i=1; r->stem_widths[i]!=maxp; ++i )
-+ if( ppem < r->stem_widths[i] ){
-+ stem_values->stem_width = i-1;
-+ break;
-+ }
-+
-+ if( r->stem_scaling[0]==on )
-+ for( i=1; r->stem_scaling[i]!=end; i+=2 )
-+ if( ppem==r->stem_scaling[i] ){
-+ stem_values->stem_scaling = r->stem_scaling[i+1];
-+ break;
-+ }
-+
-+ if( r->m[0]==on )
-+ for( i=1; r->m[i]!=end; i+=2 )
-+ if( ppem==r->m[i] ){
-+ stem_values->m = r->m[i+1];
-+ break;
-+ }
-+
-+ if( r->stem_translating_only[0]==on )
-+ for( i=1; r->stem_translating_only[i]!=end; i+=2 )
-+ if( ppem==r->stem_translating_only[i] || r->stem_translating_only[i]==0 ){
-+ stem_values->stem_translating_only = r->stem_translating_only[i+1];
-+ break;
-+ }
-+
-+ if( r->stem_translating[0]==on )
-+ for( i=1; r->stem_translating[i]!=end; i+=2 )
-+ if( ppem==r->stem_translating[i] || r->stem_translating[i]==0 ){
-+ stem_values->stem_translating = r->stem_translating[i+1];
-+ break;
-+ }
-+
-+ if( r->always_use_100[0]==on )
-+ for( i=1; r->always_use_100[i]!=end; i+=2 )
-+ if( ppem>=r->always_use_100[i] && ppem<=r->always_use_100[i+1] ){
-+ stem_values->use_100 = TRUE;
-+ break;
-+ }
-+
-+ if( r->synthesize_stems[0]==on )
-+ for( i=1; r->synthesize_stems[i]!=end; i+=2 )
-+ if( ppem>=r->synthesize_stems[i] && ppem<=r->synthesize_stems[i+1] ){
-+ stem_values->synth_stems = TRUE;
-+ break;
-+ }
-+
-+ if( r->edge_detection[0]==on )
-+ for( i=1; r->edge_detection[i]!=end; i+=2 )
-+ if( ppem>=r->edge_detection[i] && ppem<=r->edge_detection[i+1] ){
-+ stem_values->edge_detection = TRUE;
-+ break;
-+ }
-+
-+ if( r->bearing_correction[0]==on )
-+ for( i=1; r->bearing_correction[i]!=end; i+=2 )
-+ if( ppem>=r->bearing_correction[i] && ppem<=r->bearing_correction[i+1] ){
-+ stem_values->bearing_correction = FALSE;
-+ break;
-+ }
-+
-+#if(0)
-+ if( r->brightness[0]==on )
-+ for( i=1; r->brightness[i]!=end; i+=2 )
-+ if( ppem==r->brightness[i]||r->brightness[i]==0 ){
-+ stem_values->brightness=r->brightness[i+1]*(1.0f/300.0f);
-+ break;
-+ }
-+
-+ if( r->contrast[0]==on )
-+ for( i=1; r->contrast[i]!=end; i+=2 )
-+ if( ppem==r->contrast[i]||r->contrast[i]==0 ){
-+ stem_values->contrast=r->contrast[i+1]*(1.0f/300.0f);
-+ break;
-+ }
-+ if( r->spacing[0]==on ){
-+ /* not used by original code */
-+ }
-+ if( r->start[0]==on ){
-+ /* not used by original code */
-+ }
-+#endif
-+ }
-+ return;
-+}
-+
-+void ftinf_get_bc( const char *family, int ppem, float *brightness, float *contrast ){
-+ const sa_rules_t *r=ftinf_rules( family );
-+ *brightness=0;
-+ *contrast=0;
-+ if( r ){
-+ int i;
-+ if( r->brightness[0]==on )
-+ for( i=1; r->brightness[i]!=end; i+=2 )
-+ if( ppem==r->brightness[i]||r->brightness[i]==0 ){
-+ *brightness=r->brightness[i+1]*(1.0f/300.0f);
-+ break;
-+ }
-+
-+ if( r->contrast[0]==on )
-+ for( i=1; r->contrast[i]!=end; i+=2 )
-+ if( ppem==r->contrast[i]||r->contrast[i]==0 ){
-+ *contrast=r->contrast[i+1]*(1.0f/300.0f);
-+ break;
-+ }
-+ }
-+ return;
-+}
-+
-+static int
-+bool_val( const char *s ){
-+ if ( s != NULL )
-+ return strcasecmp(s, "true") == 0
-+ || strcasecmp(s, "1") == 0
-+ || strcasecmp(s, "on") == 0
-+ || strcasecmp(s, "yes") ==0;
-+ else
-+ return 0;
-+}
-+
-+static int
-+int_val( const char *s, int min, int max ){
-+ int val;
-+ sscanf ( s, "%d", &val );
-+ if ( val > max )
-+ val = max;
-+ else if ( val < min )
-+ val = min;
-+ return val;
-+}
-+
-+/* settings and hashing function */
-+#include "ftinf_sh.c"
-+
-+/*
-+ Get active Infinality settings
-+ */
-+void ftinf_env(){
-+ const char *s;
-+ ftinf=ftinf_settings( getenv( "INFINALITY_FT" ) );
-+
-+ if( ftinf==NULL ){
-+ ftinf=ftinf_settings( "ultimate3" );
-+ /* this should always succeed */
-+#if(0)
-+ if( ftinf==NULL ){
-+ /* put an error here */
-+ exit(-1);
-+ }
-+#endif
-+ }
-+ _env=ftinf[0]; /* copy as defaults */
-+
-+ /* check if custom environment values are set and update with them */
-+ s=getenv( "INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS" );
-+ if( s ) _env.autohint_increase_glyph_heights=bool_val( s );
-+ s=getenv( "INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT" );
-+ if( s ) _env.autohint_snap_stem_height=int_val( s, 0, 100 );
-+ s=getenv( "INFINALITY_FT_USE_VARIOUS_TWEAKS" );
-+ if( s ) _env.use_various_tweaks=bool_val( s );
-+ s=getenv( "INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS" );
-+ if( s ) _env.use_known_settings_on_selected_fonts=bool_val(s);
-+#if(0) /* not used (naming error also) */
-+ s=getenv( "INFINALITY_FT_AUTOHINT_MINIMUM_STEM_WIDTH" );
-+ if( s ) _env.autohint_minimum_stem_height=int_val( s, 0, 100 );
-+#endif
-+ s=getenv( "INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE" );
-+ if( s ) sscanf( s, "%d", &_env.stem_snapping_sliding_scale );
-+ s=getenv( "INFINALITY_FT_STEM_ALIGNMENT_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.stem_alignment_strength );
-+ s=getenv( "INFINALITY_FT_STEM_DARKENING_AUTOFIT" );
-+ if( s ) _env.stem_darkening_autofit=bool_val( s );
-+ s=getenv( "INFINALITY_FT_STEM_DARKENING_CFF" );
-+ if( s ) _env.stem_darkening_cff=bool_val( s );
-+ s=getenv( "INFINALITY_FT_STEM_FITTING_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.stem_fitting_strength );
-+ s=getenv( "INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH" );
-+ if( s ) _env.chromeos_style_sharpening_strength=int_val( s, 0, 100 );
-+ s=getenv( "INFINALITY_FT_BRIGHTNESS" );
-+ if( s ) sscanf( s, "%d", &_env.brightness );
-+ s=getenv( "INFINALITY_FT_CONTRAST" );
-+ if( s ) sscanf( s, "%d", &_env.contrast );
-+ s=getenv( "INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH" );
-+ if( s ) _env.windows_style_sharpening_strength=int_val( s, 0, 100 );
-+ s=getenv( "INFINALITY_FT_GAMMA_CORRECTION" );
-+ if( s ){
-+ float *f=_env.gamma_correction;
-+ sscanf ( s, "%f %f", &f[0], &f[1] );
-+ if( f[1] < 1.0f ) f[1]=1.0f;
-+ }
-+ s=getenv( "INFINALITY_FT_FRINGE_FILTER_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.fringe_filter_strength );
-+ s=getenv( "INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.grayscale_filter_strength );
-+ s=getenv( "INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.autohint_horizontal_stem_darken_strength );
-+ s=getenv( "INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH" );
-+ if( s ) sscanf( s, "%d", &_env.autohint_vertical_stem_darken_strength );
-+ s=getenv( "INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE" );
-+ if( s ) sscanf( s, "%d", &_env.global_embolden_x_value );
-+ s=getenv( "INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE" );
-+ if( s ) sscanf( s, "%d", &_env.global_embolden_y_value );
-+ s=getenv( "INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE" );
-+ if( s ) sscanf( s, "%d", &_env.bold_embolden_x_value );
-+ s=getenv( "INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE" );
-+ if( s ) sscanf( s, "%d", &_env.bold_embolden_y_value );
-+ s=getenv( "INFINALITY_FT_FILTER_PARAMS" );
-+ if( s ) {
-+ int *f=_env.filter_params;
-+ if( sscanf( s, "%d %d %d %d %d", f+1, f+2, f+3, f+4, f+5 )==5 )
-+ f[0]=on;
-+ else
-+ f[0]=off; /* FIXME: put a warning? */
-+ }
-+ /* do the range verifications as in original code */
-+ if ( _env.stem_snapping_sliding_scale > maxp )
-+ _env.stem_snapping_sliding_scale = 0;
-+ else if ( _env.stem_snapping_sliding_scale < 0 )
-+ _env.stem_snapping_sliding_scale = 0;
-+ if (_env.stem_snapping_sliding_scale < 11 &&
-+ _env.stem_snapping_sliding_scale > 0 )
-+ _env.stem_snapping_sliding_scale = 11;
-+
-+ if ( _env.stem_alignment_strength > 100 )
-+ _env.stem_alignment_strength = 100;
-+ else if ( _env.stem_alignment_strength < 0 )
-+ _env.stem_alignment_strength = 0;
-+
-+ if ( _env.stem_fitting_strength > 100 )
-+ _env.stem_fitting_strength = 100;
-+ else if ( _env.stem_fitting_strength < 0 )
-+ _env.stem_fitting_strength = 0;
-+
-+ if ( _env.chromeos_style_sharpening_strength > 100 )
-+ _env.chromeos_style_sharpening_strength = 100;
-+ else if ( _env.chromeos_style_sharpening_strength < 0 )
-+ _env.chromeos_style_sharpening_strength = 0;
-+
-+ if ( _env.brightness > 100 )
-+ _env.brightness = 100;
-+ else if ( _env.brightness < -100 )
-+ _env.brightness = 0;
-+
-+ if ( _env.contrast > 100 )
-+ _env.contrast = 100;
-+ else if ( _env.contrast < -100 )
-+ _env.contrast = 0;
-+
-+ if ( _env.windows_style_sharpening_strength > 100 )
-+ _env.windows_style_sharpening_strength = 100;
-+ else if ( _env.windows_style_sharpening_strength < 0 )
-+ _env.windows_style_sharpening_strength = 0;
-+
-+ if ( _env.fringe_filter_strength > 100 )
-+ _env.fringe_filter_strength = 100;
-+ else if ( _env.fringe_filter_strength < 0 )
-+ _env.fringe_filter_strength = 0;
-+
-+ if ( _env.grayscale_filter_strength > 100 )
-+ _env.grayscale_filter_strength = 100;
-+ else if ( _env.grayscale_filter_strength < 0 )
-+ _env.grayscale_filter_strength = 0;
-+
-+ if ( _env.autohint_horizontal_stem_darken_strength > 100 )
-+ _env.autohint_horizontal_stem_darken_strength = 100;
-+ else if ( _env.autohint_horizontal_stem_darken_strength < 0 )
-+ _env.autohint_horizontal_stem_darken_strength = 0;
-+
-+ if ( _env.autohint_vertical_stem_darken_strength > 100 )
-+ _env.autohint_vertical_stem_darken_strength = 100;
-+ else if ( _env.autohint_horizontal_stem_darken_strength < 0 )
-+ _env.autohint_vertical_stem_darken_strength = 0;
-+
-+ if ( _env.global_embolden_x_value > 128 )
-+ _env.global_embolden_x_value = 128;
-+ else if ( _env.global_embolden_x_value < -128 )
-+ _env.global_embolden_x_value = -128;
-+
-+ if ( _env.global_embolden_y_value > 128 )
-+ _env.global_embolden_y_value = 128;
-+ else if ( _env.global_embolden_y_value < -128 )
-+ _env.global_embolden_y_value = -128;
-+
-+ if ( _env.bold_embolden_x_value > 128 )
-+ _env.bold_embolden_x_value = 128;
-+ else if (_env.bold_embolden_x_value < -128 )
-+ _env.bold_embolden_x_value = -128;
-+
-+ if ( _env.bold_embolden_y_value > 128 )
-+ _env.bold_embolden_y_value = 128;
-+ else if ( _env.bold_embolden_y_value < -128 )
-+ _env.bold_embolden_y_value = -128;
-+
-+ /* point to the combined and checked settings */
-+ ftinf=&_env;
-+}
-diff -ruN freetype-2.7.1-orig/src/base/ftinf.h freetype-2.7.1/src/base/ftinf.h
---- freetype-2.7.1-orig/src/base/ftinf.h 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf.h 2017-01-11 12:28:34.879016390 +0100
-@@ -0,0 +1,66 @@
-+#ifndef _FTINF_H_
-+#define _FTINF_H_
-+/*
-+ Stem snapping rules
-+ (base freetype typedefs assumed already included)
-+ */
-+typedef struct
-+{
-+ FT_Int stem_width;
-+ FT_Int stem_spacing;
-+ FT_Int stem_start;
-+ FT_Int stem_scaling;
-+ FT_Int stem_translating_only;
-+ FT_Int stem_translating;
-+ float brightness;
-+ float contrast;
-+ FT_Bool use_100;
-+ FT_Bool synth_stems;
-+ FT_Bool edge_detection;
-+ FT_Bool bearing_correction;
-+ FT_Int m;
-+} Stem_Data;
-+
-+/*
-+ Infinality settings
-+ */
-+typedef struct ftinf_s {
-+ const char *name;
-+ int autohint_horizontal_stem_darken_strength;
-+ int autohint_snap_stem_height;
-+ int autohint_increase_glyph_heights;
-+ int autohint_vertical_stem_darken_strength;
-+ int bold_embolden_x_value;
-+ int bold_embolden_y_value;
-+ int brightness;
-+ int chromeos_style_sharpening_strength;
-+ int contrast;
-+ int filter_params[6]; /* 1st one used as existence flag */
-+ int fringe_filter_strength;
-+ float gamma_correction[2];
-+ int global_embolden_x_value;
-+ int global_embolden_y_value;
-+ int grayscale_filter_strength;
-+ int stem_alignment_strength;
-+ int stem_darkening_autofit;
-+ int stem_darkening_cff;
-+ int stem_fitting_strength;
-+ int stem_snapping_sliding_scale;
-+ int use_known_settings_on_selected_fonts;
-+ int use_various_tweaks;
-+ int windows_style_sharpening_strength;
-+} ftinf_t;
-+
-+extern FT_Pos infinality_cur_width; /* defined in aflatin.c */
-+
-+extern const ftinf_t *ftinf; /* active settings */
-+
-+extern void ftinf_fill_stem_values( Stem_Data *stem_values,
-+ const char *family, int ppem, int use_known );
-+extern void ftinf_get_bc( const char *family, int ppem,
-+ float *brightness, float *contrast );
-+
-+/* get values from environment (FIXME: maybe update with using user files) */
-+extern void ftinf_env();
-+
-+#endif
-diff -ruN freetype-2.7.1-orig/src/base/ftinf_rh.c freetype-2.7.1/src/base/ftinf_rh.c
---- freetype-2.7.1-orig/src/base/ftinf_rh.c 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf_rh.c 2017-01-11 12:28:34.880016390 +0100
-@@ -0,0 +1,626 @@
-+/* ANSI-C code produced by gperf version 3.1 */
-+/* Command-line: gperf --output-file=ftinf_rh.c ftinf_rh.gperf */
-+/* Computed positions: -k'1,$' */
-+
-+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-+/* The character set is not based on ISO-646. */
-+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-+#endif
-+
-+#line 9 "ftinf_rh.gperf"
-+
-+#include <ctype.h>
-+static const struct sa_rules_s* _rules_get( const char*str, unsigned len );
-+/* maximum key range = 82, duplicates = 0 */
-+
-+#ifdef __GNUC__
-+__inline
-+#else
-+#ifdef __cplusplus
-+inline
-+#endif
-+#endif
-+static unsigned int
-+_rules_hash (register const char *str, register unsigned int len)
-+{
-+ static const unsigned char asso_values[] =
-+ {
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 0, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 5, 45, 5,
-+ 35, 25, 35, 35, 50, 45, 85, 85, 0, 25,
-+ 40, 5, 0, 85, 50, 20, 20, 0, 10, 10,
-+ 85, 10, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
-+ 85, 85, 85, 85, 85, 85
-+ };
-+ return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
-+}
-+
-+#ifdef __GNUC__
-+__inline
-+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-+__attribute__ ((__gnu_inline__))
-+#endif
-+#endif
-+const struct sa_rules_s *
-+_rules_get (register const char *str, register unsigned int len)
-+{
-+ enum
-+ {
-+ TOTAL_KEYWORDS = 58,
-+ MIN_WORD_LENGTH = 3,
-+ MAX_WORD_LENGTH = 24,
-+ MIN_HASH_VALUE = 3,
-+ MAX_HASH_VALUE = 84
-+ };
-+
-+ static const struct sa_rules_s wordlist[] =
-+ {
-+#line 15 "ftinf_rh.gperf"
-+{ .name="---",
-+ .synthesize_stems={on, 13, 13, end}
-+},
-+#line 253 "ftinf_rh.gperf"
-+{ .name="ubuntu",
-+ .always_use_100={on, 12, 13, 15, 15, end}
-+},
-+#line 31 "ftinf_rh.gperf"
-+{ .name="arial",
-+ .always_use_100={on, 0, maxp, end},
-+ .edge_detection={on, 11, 11, 13, 13, end},
-+ .spacing={on, 10, 11, 23, 25, 30, end},
-+ .start={on, 11, 18, 23, 30, 30, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, 16, -24, end}
-+},
-+#line 87 "ftinf_rh.gperf"
-+{ .name="corbel",
-+ .stem_translating_only={on, 10, 16, end},
-+ .stem_widths={on, 10, 21, maxp}
-+},
-+#line 71 "ftinf_rh.gperf"
-+{ .name="canwell",
-+ .stem_scaling={on, 13, 0, end}
-+},
-+#line 216 "ftinf_rh.gperf"
-+{ .name="pragmata",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 67 "ftinf_rh.gperf"
-+{ .name="cantarell",
-+ .stem_translating_only={on, 11, 0, 12, 0, end},
-+ .stem_widths={on, 10, 22, maxp,}
-+},
-+#line 39 "ftinf_rh.gperf"
-+{ .name="arimo",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end}
-+},
-+#line 207 "ftinf_rh.gperf"
-+{ .name="optima",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end},
-+ .stem_scaling={on, 17, 1, end},
-+ .stem_translating_only={on, 10, 0, 11, 0, 12, 0, end}
-+},
-+#line 63 "ftinf_rh.gperf"
-+{ .name="candara",
-+ .stem_scaling={on, 14, 1, 17, 1, end},
-+ .stem_translating_only={on, 10, 16, end}
-+},
-+#line 77 "ftinf_rh.gperf"
-+{ .name="comfortaa",
-+ .stem_widths={on, 10, 19, 22, maxp},
-+ .stem_scaling={on, 11, 0, end}
-+},
-+#line 161 "ftinf_rh.gperf"
-+{ .name="liberation mono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 18 "ftinf_rh.gperf"
-+{ .name="andale mono",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_scaling={on, 11, 1, end},
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+#line 256 "ftinf_rh.gperf"
-+{ .name="verdana",
-+ .always_use_100={on, 0, 14, 16, maxp, end},
-+ .stem_scaling={on, 12, 1, 15, 1, end},
-+ .stem_translating_only={on, 8, 16, 15, 16, 14, 32, 18, 32, 19, 24, end}
-+},
-+#line 74 "ftinf_rh.gperf"
-+{ .name="century gothic",
-+ .stem_widths={on, 10, 22, maxp,}
-+},
-+#line 91 "ftinf_rh.gperf"
-+{ .name="courier new",
-+ .always_use_100={on, 12, 12, end},
-+ .edge_detection={on, 10, 12, end},
-+ .m={on, 13, 1, 14, 1, end}
-+},
-+#line 23 "ftinf_rh.gperf"
-+{ .name="arial narrow",
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+#line 185 "ftinf_rh.gperf"
-+{ .name="luxi sans",
-+ .always_use_100={on, 13, 13, end},
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+#line 225 "ftinf_rh.gperf"
-+{ .name="samba",
-+ .stem_scaling={on, 11, 0, end}
-+},
-+#line 233 "ftinf_rh.gperf"
-+{ .name="tahoma",
-+ .always_use_100={on, 11, 11, 14, maxp, end},
-+ .edge_detection={on, 11, 11, end},
-+ .spacing={on, 10, 12, 18, 18, 30, end},
-+ .start={on, 14, 17, 30, 100, 100, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 7, 32, 8, 32, 9, 32, end},
-+},
-+#line 164 "ftinf_rh.gperf"
-+{ .name="liberation sans narrow",
-+ .stem_widths={on,10, 22, maxp,}
-+},
-+#line 81 "ftinf_rh.gperf"
-+{ .name="consolas",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 8, 32, 9, 32, end},
-+ .stem_widths={on, 10, 20, maxp,},
-+ .stem_scaling={on, 11, 1, end}
-+},
-+#line 203 "ftinf_rh.gperf"
-+{ .name="open sans",
-+ .stem_translating_only={on, 10, 16, 9, 16, end},
-+ .stem_widths={on, 10, 20, maxp,}
-+},
-+#line 167 "ftinf_rh.gperf"
-+{ .name="liberation sans",
-+ .edge_detection={on, 11, 11, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end},
-+ .stem_widths={on,10, 19, maxp,}
-+},
-+#line 193 "ftinf_rh.gperf"
-+{ .name="monaco",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 101 "ftinf_rh.gperf"
-+{ .name="cousine",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 176 "ftinf_rh.gperf"
-+{ .name="lucida grande",
-+ .stem_scaling={on, 13, 1, end},
-+ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
-+ .stem_widths={on, 10, 16, sw2pv, maxp},
-+},
-+#line 173 "ftinf_rh.gperf"
-+{ .name="lucida console",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 196 "ftinf_rh.gperf"
-+{ .name="myriad pro",
-+ .stem_scaling={on, 14, 1, 17, 1, end},
-+ .stem_translating_only={on, 10, 16, 11, 0, 9, 16, end}
-+},
-+#line 26 "ftinf_rh.gperf"
-+{ .name="arial unicode ms",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
-+},
-+#line 213 "ftinf_rh.gperf"
-+{ .name="palatino linotype",
-+ .edge_detection={on, 0, 100, end}
-+},
-+#line 181 "ftinf_rh.gperf"
-+{ .name="lucida sans unicode",
-+ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
-+ .stem_widths={on,10, 16, sw2pv, maxp,}
-+},
-+#line 140 "ftinf_rh.gperf"
-+{ .name="futura",
-+ .stem_widths={on, 10, 14, sw2pv, maxp,}
-+},
-+#line 147 "ftinf_rh.gperf"
-+{ .name="georgia",
-+ .stem_translating_only={on, 13, 16, 14, 16, 15, 0, end}
-+},
-+#line 125 "ftinf_rh.gperf"
-+{ .name="freemono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 200 "ftinf_rh.gperf"
-+{ .name="nina",
-+ .stem_scaling={on, 11, 0, 12, 0, 13, 0, end}
-+},
-+#line 121 "ftinf_rh.gperf"
-+{ .name="essential pragmatapro",
-+ .always_use_100={on, 0, maxp, end},
-+ .m={on, 13, 0, 14, 0, end}
-+},
-+#line 247 "ftinf_rh.gperf"
-+{ .name="trebuchet ms",
-+ .always_use_100={on, 13, 13, end},
-+ .stem_scaling={on, 13, 0, 17, 0, 20, 1, end},
-+ .stem_translating_only={on, 10, 16, 11, 0, 8, 32, 9, 32, end},
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+#line 114 "ftinf_rh.gperf"
-+{ .name="droid sans mono",
-+ .m={on, 12, 0, end}
-+},
-+#line 104 "ftinf_rh.gperf"
-+{ .name="dejavu sans mono",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 7, 16, 8, 32, 9, 16, end}
-+},
-+#line 57 "ftinf_rh.gperf"
-+{ .name="calibri",
-+ .always_use_100={on, 23, maxp, end},
-+ .stem_scaling={on, 15, 1, 17, 1, 18, 1, end},
-+ .stem_translating_only={on, 10, 16, 15, 0, end},
-+ .stem_widths={on, 1, 10, 19, maxp,}
-+},
-+#line 156 "ftinf_rh.gperf"
-+{ .name="inconsolata",
-+ .stem_scaling={on, 12, 1, 15, 1, end},
-+ .stem_translating_only={on, 10, 24, 9, 32, end},
-+ .stem_widths={on, 10, 23, maxp,},
-+},
-+#line 96 "ftinf_rh.gperf"
-+{ .name="courier",
-+ .always_use_100={on, 0, maxp, end},
-+ .m={on, 13, 1, 14, 1, end},
-+ .stem_translating_only={on, 13, 16, 15, 0, end}
-+},
-+#line 128 "ftinf_rh.gperf"
-+{ .name="freesans",
-+ .always_use_100={on, 0, maxp, end},
-+ .edge_detection={on, 11, 11, 13, 13, end},
-+ .spacing={on, 10, 12, 18, 18, 30, end},
-+ .start={on, 10, 18, 18, 25, 30, end},
-+ .stem_scaling={on, 16, 0, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 9, 8, end}
-+},
-+#line 150 "ftinf_rh.gperf"
-+{ .name="gill sans",
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+#line 117 "ftinf_rh.gperf"
-+{ .name="droid sans",
-+ .always_use_100={on, 12, 12, 15, 15, end},
-+ .stem_translating_only={on, 8, 16, 9, 16, end}
-+},
-+#line 108 "ftinf_rh.gperf"
-+{ .name="dejavu sans",
-+ .always_use_100={on, 10, 14, 16, 17, end},
-+ .m={on, 12, 0, end},
-+ .stem_scaling={on, 12, 1, end},
-+ .stem_translating_only={on, 8, 16, 15, -20, end}
-+},
-+#line 219 "ftinf_rh.gperf"
-+{ .name="raleway",
-+ .stem_scaling={on, 15, 0, end}
-+},
-+#line 153 "ftinf_rh.gperf"
-+{ .name="helvetica cy",
-+ .stem_widths={on, 10, 23, maxp,}
-+},
-+#line 228 "ftinf_rh.gperf"
-+{ .name="segoe ui",
-+ .always_use_100={on, 11, 12, 14, 14, end},
-+ .stem_translating_only={on, 10, 0, 7, 32, 8, 16, 9, 24, end},
-+ .stem_widths={on, 10, 23, maxp,}
-+},
-+#line 48 "ftinf_rh.gperf"
-+{ .name="bitstream vera sans mono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+#line 241 "ftinf_rh.gperf"
-+{ .name="times new roman",
-+ .always_use_100={on, 14, 14, 16, 16, end},
-+ .bearing_correction={0, 100, end},
-+ .stem_scaling={on, 17, 1, end},
-+ .stem_translating_only={on, 17, 8, end}
-+},
-+#line 222 "ftinf_rh.gperf"
-+{ .name="rokkitt",
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+#line 143 "ftinf_rh.gperf"
-+{ .name="garamond",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end}
-+},
-+#line 137 "ftinf_rh.gperf"
-+{ .name="freeserif",
-+ .stem_scaling={on, 13, 1, 17, 1, end}
-+},
-+#line 189 "ftinf_rh.gperf"
-+{ .name="microsoft sans serif",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
-+},
-+#line 44 "ftinf_rh.gperf"
-+{ .name="baskerville",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end}
-+},
-+#line 51 "ftinf_rh.gperf"
-+{ .name="bitstream vera sans",
-+ .always_use_100={on, 10, 14, 16, 17, end},
-+ .m={on, 12, 0, end},
-+ .stem_scaling={on ,12, 1, end},
-+ .stem_translating_only={on, 8, 16, end}
-+}
-+ };
-+
-+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
-+ {
-+ register int key = _rules_hash (str, len);
-+
-+ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
-+ {
-+ register const struct sa_rules_s *resword;
-+
-+ switch (key - 3)
-+ {
-+ case 0:
-+ resword = &wordlist[0];
-+ goto compare;
-+ case 3:
-+ resword = &wordlist[1];
-+ goto compare;
-+ case 7:
-+ resword = &wordlist[2];
-+ goto compare;
-+ case 8:
-+ resword = &wordlist[3];
-+ goto compare;
-+ case 9:
-+ resword = &wordlist[4];
-+ goto compare;
-+ case 10:
-+ resword = &wordlist[5];
-+ goto compare;
-+ case 11:
-+ resword = &wordlist[6];
-+ goto compare;
-+ case 12:
-+ resword = &wordlist[7];
-+ goto compare;
-+ case 13:
-+ resword = &wordlist[8];
-+ goto compare;
-+ case 14:
-+ resword = &wordlist[9];
-+ goto compare;
-+ case 16:
-+ resword = &wordlist[10];
-+ goto compare;
-+ case 17:
-+ resword = &wordlist[11];
-+ goto compare;
-+ case 18:
-+ resword = &wordlist[12];
-+ goto compare;
-+ case 19:
-+ resword = &wordlist[13];
-+ goto compare;
-+ case 21:
-+ resword = &wordlist[14];
-+ goto compare;
-+ case 23:
-+ resword = &wordlist[15];
-+ goto compare;
-+ case 24:
-+ resword = &wordlist[16];
-+ goto compare;
-+ case 26:
-+ resword = &wordlist[17];
-+ goto compare;
-+ case 27:
-+ resword = &wordlist[18];
-+ goto compare;
-+ case 28:
-+ resword = &wordlist[19];
-+ goto compare;
-+ case 29:
-+ resword = &wordlist[20];
-+ goto compare;
-+ case 30:
-+ resword = &wordlist[21];
-+ goto compare;
-+ case 31:
-+ resword = &wordlist[22];
-+ goto compare;
-+ case 32:
-+ resword = &wordlist[23];
-+ goto compare;
-+ case 33:
-+ resword = &wordlist[24];
-+ goto compare;
-+ case 34:
-+ resword = &wordlist[25];
-+ goto compare;
-+ case 35:
-+ resword = &wordlist[26];
-+ goto compare;
-+ case 36:
-+ resword = &wordlist[27];
-+ goto compare;
-+ case 37:
-+ resword = &wordlist[28];
-+ goto compare;
-+ case 38:
-+ resword = &wordlist[29];
-+ goto compare;
-+ case 39:
-+ resword = &wordlist[30];
-+ goto compare;
-+ case 41:
-+ resword = &wordlist[31];
-+ goto compare;
-+ case 43:
-+ resword = &wordlist[32];
-+ goto compare;
-+ case 44:
-+ resword = &wordlist[33];
-+ goto compare;
-+ case 45:
-+ resword = &wordlist[34];
-+ goto compare;
-+ case 46:
-+ resword = &wordlist[35];
-+ goto compare;
-+ case 48:
-+ resword = &wordlist[36];
-+ goto compare;
-+ case 49:
-+ resword = &wordlist[37];
-+ goto compare;
-+ case 52:
-+ resword = &wordlist[38];
-+ goto compare;
-+ case 53:
-+ resword = &wordlist[39];
-+ goto compare;
-+ case 54:
-+ resword = &wordlist[40];
-+ goto compare;
-+ case 58:
-+ resword = &wordlist[41];
-+ goto compare;
-+ case 59:
-+ resword = &wordlist[42];
-+ goto compare;
-+ case 60:
-+ resword = &wordlist[43];
-+ goto compare;
-+ case 61:
-+ resword = &wordlist[44];
-+ goto compare;
-+ case 62:
-+ resword = &wordlist[45];
-+ goto compare;
-+ case 63:
-+ resword = &wordlist[46];
-+ goto compare;
-+ case 64:
-+ resword = &wordlist[47];
-+ goto compare;
-+ case 69:
-+ resword = &wordlist[48];
-+ goto compare;
-+ case 70:
-+ resword = &wordlist[49];
-+ goto compare;
-+ case 71:
-+ resword = &wordlist[50];
-+ goto compare;
-+ case 72:
-+ resword = &wordlist[51];
-+ goto compare;
-+ case 74:
-+ resword = &wordlist[52];
-+ goto compare;
-+ case 75:
-+ resword = &wordlist[53];
-+ goto compare;
-+ case 76:
-+ resword = &wordlist[54];
-+ goto compare;
-+ case 77:
-+ resword = &wordlist[55];
-+ goto compare;
-+ case 78:
-+ resword = &wordlist[56];
-+ goto compare;
-+ case 81:
-+ resword = &wordlist[57];
-+ goto compare;
-+ }
-+ return 0;
-+ compare:
-+ {
-+ register const char *s = resword->name;
-+
-+ if (*str == *s && !strcmp (str + 1, s + 1))
-+ return resword;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+#line 261 "ftinf_rh.gperf"
-+
-+
-+static const sa_rules_t*
-+ftinf_rules( const char *name ){
-+ if( name ){
-+ enum {
-+ max_wlen=31
-+ };
-+ char buf[max_wlen+1];
-+ int len=strlen( name );
-+ if( len <= max_wlen ){
-+ int i;
-+ for( i=0; i<len; ++i )
-+ buf[i]=tolower( name[i] );
-+ buf[len]='\0';
-+ return _rules_get( buf, len );
-+ }
-+ }
-+ return NULL;
-+}
-+/*
-+ gperf --output-file=ftinf_rh.c ftinf_rh.gperf
-+*/
-diff -ruN freetype-2.7.1-orig/src/base/ftinf_rh.gperf freetype-2.7.1/src/base/ftinf_rh.gperf
---- freetype-2.7.1-orig/src/base/ftinf_rh.gperf 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf_rh.gperf 2017-01-11 12:28:34.880016390 +0100
-@@ -0,0 +1,283 @@
-+%struct-type
-+%define slot-name name
-+%enum
-+%switch=1
-+%readonly-tables
-+%omit-struct-type
-+%define lookup-function-name _rules_get
-+%define hash-function-name _rules_hash
-+%{
-+#include <ctype.h>
-+static const struct sa_rules_s* _rules_get( const char*str, unsigned len );
-+%}
-+struct sa_rules_s;
-+%%
-+{ .name="---",
-+ .synthesize_stems={on, 13, 13, end}
-+},
-+{ .name="andale mono",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_scaling={on, 11, 1, end},
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+{ .name="arial narrow",
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+{ .name="arial unicode ms",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
-+},
-+{ .name="arial",
-+ .always_use_100={on, 0, maxp, end},
-+ .edge_detection={on, 11, 11, 13, 13, end},
-+ .spacing={on, 10, 11, 23, 25, 30, end},
-+ .start={on, 11, 18, 23, 30, 30, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, 16, -24, end}
-+},
-+{ .name="arimo",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end}
-+},
-+{ .name="baskerville",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end}
-+},
-+{ .name="bitstream vera sans mono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="bitstream vera sans",
-+ .always_use_100={on, 10, 14, 16, 17, end},
-+ .m={on, 12, 0, end},
-+ .stem_scaling={on ,12, 1, end},
-+ .stem_translating_only={on, 8, 16, end}
-+},
-+{ .name="calibri",
-+ .always_use_100={on, 23, maxp, end},
-+ .stem_scaling={on, 15, 1, 17, 1, 18, 1, end},
-+ .stem_translating_only={on, 10, 16, 15, 0, end},
-+ .stem_widths={on, 1, 10, 19, maxp,}
-+},
-+{ .name="candara",
-+ .stem_scaling={on, 14, 1, 17, 1, end},
-+ .stem_translating_only={on, 10, 16, end}
-+},
-+{ .name="cantarell",
-+ .stem_translating_only={on, 11, 0, 12, 0, end},
-+ .stem_widths={on, 10, 22, maxp,}
-+},
-+{ .name="canwell",
-+ .stem_scaling={on, 13, 0, end}
-+},
-+{ .name="century gothic",
-+ .stem_widths={on, 10, 22, maxp,}
-+},
-+{ .name="comfortaa",
-+ .stem_widths={on, 10, 19, 22, maxp},
-+ .stem_scaling={on, 11, 0, end}
-+},
-+{ .name="consolas",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 8, 32, 9, 32, end},
-+ .stem_widths={on, 10, 20, maxp,},
-+ .stem_scaling={on, 11, 1, end}
-+},
-+{ .name="corbel",
-+ .stem_translating_only={on, 10, 16, end},
-+ .stem_widths={on, 10, 21, maxp}
-+},
-+{ .name="courier new",
-+ .always_use_100={on, 12, 12, end},
-+ .edge_detection={on, 10, 12, end},
-+ .m={on, 13, 1, 14, 1, end}
-+},
-+{ .name="courier",
-+ .always_use_100={on, 0, maxp, end},
-+ .m={on, 13, 1, 14, 1, end},
-+ .stem_translating_only={on, 13, 16, 15, 0, end}
-+},
-+{ .name="cousine",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="dejavu sans mono",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 7, 16, 8, 32, 9, 16, end}
-+},
-+{ .name="dejavu sans",
-+ .always_use_100={on, 10, 14, 16, 17, end},
-+ .m={on, 12, 0, end},
-+ .stem_scaling={on, 12, 1, end},
-+ .stem_translating_only={on, 8, 16, 15, -20, end}
-+},
-+{ .name="droid sans mono",
-+ .m={on, 12, 0, end}
-+},
-+{ .name="droid sans",
-+ .always_use_100={on, 12, 12, 15, 15, end},
-+ .stem_translating_only={on, 8, 16, 9, 16, end}
-+},
-+{ .name="essential pragmatapro",
-+ .always_use_100={on, 0, maxp, end},
-+ .m={on, 13, 0, 14, 0, end}
-+},
-+{ .name="freemono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="freesans",
-+ .always_use_100={on, 0, maxp, end},
-+ .edge_detection={on, 11, 11, 13, 13, end},
-+ .spacing={on, 10, 12, 18, 18, 30, end},
-+ .start={on, 10, 18, 18, 25, 30, end},
-+ .stem_scaling={on, 16, 0, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 16, 9, 8, end}
-+},
-+{ .name="freeserif",
-+ .stem_scaling={on, 13, 1, 17, 1, end}
-+},
-+{ .name="futura",
-+ .stem_widths={on, 10, 14, sw2pv, maxp,}
-+},
-+{ .name="garamond",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end}
-+},
-+{ .name="georgia",
-+ .stem_translating_only={on, 13, 16, 14, 16, 15, 0, end}
-+},
-+{ .name="gill sans",
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+{ .name="helvetica cy",
-+ .stem_widths={on, 10, 23, maxp,}
-+},
-+{ .name="inconsolata",
-+ .stem_scaling={on, 12, 1, 15, 1, end},
-+ .stem_translating_only={on, 10, 24, 9, 32, end},
-+ .stem_widths={on, 10, 23, maxp,},
-+},
-+{ .name="liberation mono",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="liberation sans narrow",
-+ .stem_widths={on,10, 22, maxp,}
-+},
-+{ .name="liberation sans",
-+ .edge_detection={on, 11, 11, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end},
-+ .stem_widths={on,10, 19, maxp,}
-+},
-+{ .name="lucida console",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="lucida grande",
-+ .stem_scaling={on, 13, 1, end},
-+ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
-+ .stem_widths={on, 10, 16, sw2pv, maxp},
-+},
-+{ .name="lucida sans unicode",
-+ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
-+ .stem_widths={on,10, 16, sw2pv, maxp,}
-+},
-+{ .name="luxi sans",
-+ .always_use_100={on, 13, 13, end},
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+{ .name="microsoft sans serif",
-+ .always_use_100={on, 0, maxp, end},
-+ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
-+},
-+{ .name="monaco",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="myriad pro",
-+ .stem_scaling={on, 14, 1, 17, 1, end},
-+ .stem_translating_only={on, 10, 16, 11, 0, 9, 16, end}
-+},
-+{ .name="nina",
-+ .stem_scaling={on, 11, 0, 12, 0, 13, 0, end}
-+},
-+{ .name="open sans",
-+ .stem_translating_only={on, 10, 16, 9, 16, end},
-+ .stem_widths={on, 10, 20, maxp,}
-+},
-+{ .name="optima",
-+ .brightness={on, 0, -20, end},
-+ .contrast={on, 0, 25, end},
-+ .stem_scaling={on, 17, 1, end},
-+ .stem_translating_only={on, 10, 0, 11, 0, 12, 0, end}
-+},
-+{ .name="palatino linotype",
-+ .edge_detection={on, 0, 100, end}
-+},
-+{ .name="pragmata",
-+ .always_use_100={on, 0, maxp, end}
-+},
-+{ .name="raleway",
-+ .stem_scaling={on, 15, 0, end}
-+},
-+{ .name="rokkitt",
-+ .stem_widths={on, 10, 21, maxp,}
-+},
-+{ .name="samba",
-+ .stem_scaling={on, 11, 0, end}
-+},
-+{ .name="segoe ui",
-+ .always_use_100={on, 11, 12, 14, 14, end},
-+ .stem_translating_only={on, 10, 0, 7, 32, 8, 16, 9, 24, end},
-+ .stem_widths={on, 10, 23, maxp,}
-+},
-+{ .name="tahoma",
-+ .always_use_100={on, 11, 11, 14, maxp, end},
-+ .edge_detection={on, 11, 11, end},
-+ .spacing={on, 10, 12, 18, 18, 30, end},
-+ .start={on, 14, 17, 30, 100, 100, end},
-+ .stem_translating={on, 11, 32, end},
-+ .stem_translating_only={on, 7, 32, 8, 32, 9, 32, end},
-+},
-+{ .name="times new roman",
-+ .always_use_100={on, 14, 14, 16, 16, end},
-+ .bearing_correction={0, 100, end},
-+ .stem_scaling={on, 17, 1, end},
-+ .stem_translating_only={on, 17, 8, end}
-+},
-+{ .name="trebuchet ms",
-+ .always_use_100={on, 13, 13, end},
-+ .stem_scaling={on, 13, 0, 17, 0, 20, 1, end},
-+ .stem_translating_only={on, 10, 16, 11, 0, 8, 32, 9, 32, end},
-+ .stem_widths={on, 10, 17, sw2pv, maxp,}
-+},
-+{ .name="ubuntu",
-+ .always_use_100={on, 12, 13, 15, 15, end}
-+},
-+{ .name="verdana",
-+ .always_use_100={on, 0, 14, 16, maxp, end},
-+ .stem_scaling={on, 12, 1, 15, 1, end},
-+ .stem_translating_only={on, 8, 16, 15, 16, 14, 32, 18, 32, 19, 24, end}
-+},
-+%%
-+
-+static const sa_rules_t*
-+ftinf_rules( const char *name ){
-+ if( name ){
-+ enum {
-+ max_wlen=31
-+ };
-+ char buf[max_wlen+1];
-+ int len=strlen( name );
-+ if( len <= max_wlen ){
-+ int i;
-+ for( i=0; i<len; ++i )
-+ buf[i]=tolower( name[i] );
-+ buf[len]='\0';
-+ return _rules_get( buf, len );
-+ }
-+ }
-+ return NULL;
-+}
-+/*
-+ gperf --output-file=ftinf_rh.c ftinf_rh.gperf
-+*/
-diff -ruN freetype-2.7.1-orig/src/base/ftinf_sh.c freetype-2.7.1/src/base/ftinf_sh.c
---- freetype-2.7.1-orig/src/base/ftinf_sh.c 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf_sh.c 2017-01-11 12:28:34.881016390 +0100
-@@ -0,0 +1,463 @@
-+/* ANSI-C code produced by gperf version 3.1 */
-+/* Command-line: gperf --output-file=ftinf_sh.c ftinf_sh.gperf */
-+/* Computed positions: -k'1,$' */
-+
-+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-+/* The character set is not based on ISO-646. */
-+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-+#endif
-+
-+#line 9 "ftinf_sh.gperf"
-+
-+#include <ctype.h>
-+static const struct ftinf_s* _settings_get( const char*str, unsigned len);
-+/* maximum key range = 37, duplicates = 0 */
-+
-+#ifdef __GNUC__
-+__inline
-+#else
-+#ifdef __cplusplus
-+inline
-+#endif
-+#endif
-+static unsigned int
-+_settings_hash (register const char *str, register unsigned int len)
-+{
-+ static const unsigned char asso_values[] =
-+ {
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 13,
-+ 8, 30, 25, 20, 40, 10, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 5, 40, 0,
-+ 0, 0, 40, 40, 10, 0, 40, 40, 15, 5,
-+ 10, 0, 10, 40, 40, 0, 0, 0, 0, 0,
-+ 0, 0, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
-+ 40, 40, 40, 40, 40, 40
-+ };
-+ return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
-+}
-+
-+#ifdef __GNUC__
-+__inline
-+#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-+__attribute__ ((__gnu_inline__))
-+#endif
-+#endif
-+const struct ftinf_s *
-+_settings_get (register const char *str, register unsigned int len)
-+{
-+ enum
-+ {
-+ TOTAL_KEYWORDS = 22,
-+ MIN_WORD_LENGTH = 3,
-+ MAX_WORD_LENGTH = 14,
-+ MIN_HASH_VALUE = 3,
-+ MAX_HASH_VALUE = 39
-+ };
-+
-+ static const struct ftinf_s wordlist[] =
-+ {
-+#line 76 "ftinf_sh.gperf"
-+{ .name="osx",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .bold_embolden_x_value=16,
-+ .brightness=10,
-+ .contrast=20,
-+ .filter_params={on, 3, 32, 38, 32, 3},
-+ .gamma_correction={1000, 80},
-+ .global_embolden_y_value=8,
-+ .grayscale_filter_strength=25,
-+},
-+#line 37 "ftinf_sh.gperf"
-+{ .name="ipad",
-+ .filter_params={on, 0, 0, 100, 0, 0},
-+ .gamma_correction={1000, 80},
-+ .grayscale_filter_strength=100
-+},
-+#line 114 "ftinf_sh.gperf"
-+{ .name="shove",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=100,
-+ .stem_fitting_strength=100,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+#line 126 "ftinf_sh.gperf"
-+{ .name="ubuntu",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=-10,
-+ .contrast=15,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={1000, 80},
-+ .use_various_tweaks=true
-+},
-+#line 27 "ftinf_sh.gperf"
-+{ .name="classic",
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .filter_params={on, 6, 25, 38, 25, 6},
-+ .gamma_correction={0, 100},
-+ .use_various_tweaks=true
-+},
-+#line 34 "ftinf_sh.gperf"
-+{ .name="disabled",
-+ .gamma_correction={0, 100},
-+},
-+#line 100 "ftinf_sh.gperf"
-+{ .name="sharpened",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=25,
-+ .stem_snapping_sliding_scale=40,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+#line 42 "ftinf_sh.gperf"
-+{ .name="infinality",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=25,
-+ .stem_snapping_sliding_scale=40,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=5
-+},
-+#line 15 "ftinf_sh.gperf"
-+{ .name="custom",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 8, 24, 48, 24, 8},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=75,
-+ .stem_fitting_strength=50,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+#line 180 "ftinf_sh.gperf"
-+{ .name="vanilla",
-+ .filter_params={on, 6, 25, 38, 25, 6},
-+ .gamma_correction={0, 100},
-+},
-+#line 184 "ftinf_sh.gperf"
-+{ .name="windows7light",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .contrast=20,
-+ .filter_params={on, 20, 25, 38, 25, 05},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 160},
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=100
-+},
-+#line 226 "ftinf_sh.gperf"
-+{ .name="windowsxplight",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=20,
-+ .contrast=30,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 120},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+#line 64 "ftinf_sh.gperf"
-+{ .name="nudge",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_various_tweaks=true,
-+},
-+#line 144 "ftinf_sh.gperf"
-+{ .name="ultimate2",
-+ .filter_params={on, 6, 22, 36, 22, 6},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+#line 197 "ftinf_sh.gperf"
-+{ .name="windows7",
-+ .filter_params={on, 20, 25, 42, 25, 06},
-+ .fringe_filter_strength=100,
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .windows_style_sharpening_strength=65,
-+ .gamma_correction={1000, 120},
-+ .brightness=10,
-+ .contrast=20,
-+ .use_various_tweaks=true,
-+ .autohint_snap_stem_height=100,
-+ .use_known_settings_on_selected_fonts=true,
-+},
-+#line 210 "ftinf_sh.gperf"
-+{ .name="windowsxp",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=10,
-+ .contrast=20,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 120},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+#line 56 "ftinf_sh.gperf"
-+{ .name="linux",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .gamma_correction={0, 100},
-+ .use_various_tweaks=true
-+},
-+#line 135 "ftinf_sh.gperf"
-+{ .name="ultimate1",
-+ .filter_params={on, 4, 22, 38, 22, 4},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+#line 87 "ftinf_sh.gperf"
-+{ .name="push",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=75,
-+ .stem_fitting_strength=50,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+#line 171 "ftinf_sh.gperf"
-+{ .name="ultimate5",
-+ .filter_params={on, 12, 28, 42, 28, 12},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+#line 162 "ftinf_sh.gperf"
-+{ .name="ultimate4",
-+ .filter_params={on, 10, 25, 37, 25, 10},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+#line 153 "ftinf_sh.gperf"
-+{ .name="ultimate3",
-+ .filter_params={on, 8, 24, 36, 24, 8},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+}
-+ };
-+
-+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
-+ {
-+ register int key = _settings_hash (str, len);
-+
-+ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
-+ {
-+ register const struct ftinf_s *resword;
-+
-+ switch (key - 3)
-+ {
-+ case 0:
-+ resword = &wordlist[0];
-+ goto compare;
-+ case 1:
-+ resword = &wordlist[1];
-+ goto compare;
-+ case 2:
-+ resword = &wordlist[2];
-+ goto compare;
-+ case 3:
-+ resword = &wordlist[3];
-+ goto compare;
-+ case 4:
-+ resword = &wordlist[4];
-+ goto compare;
-+ case 5:
-+ resword = &wordlist[5];
-+ goto compare;
-+ case 6:
-+ resword = &wordlist[6];
-+ goto compare;
-+ case 7:
-+ resword = &wordlist[7];
-+ goto compare;
-+ case 8:
-+ resword = &wordlist[8];
-+ goto compare;
-+ case 9:
-+ resword = &wordlist[9];
-+ goto compare;
-+ case 10:
-+ resword = &wordlist[10];
-+ goto compare;
-+ case 11:
-+ resword = &wordlist[11];
-+ goto compare;
-+ case 12:
-+ resword = &wordlist[12];
-+ goto compare;
-+ case 14:
-+ resword = &wordlist[13];
-+ goto compare;
-+ case 15:
-+ resword = &wordlist[14];
-+ goto compare;
-+ case 16:
-+ resword = &wordlist[15];
-+ goto compare;
-+ case 17:
-+ resword = &wordlist[16];
-+ goto compare;
-+ case 19:
-+ resword = &wordlist[17];
-+ goto compare;
-+ case 21:
-+ resword = &wordlist[18];
-+ goto compare;
-+ case 26:
-+ resword = &wordlist[19];
-+ goto compare;
-+ case 31:
-+ resword = &wordlist[20];
-+ goto compare;
-+ case 36:
-+ resword = &wordlist[21];
-+ goto compare;
-+ }
-+ return 0;
-+ compare:
-+ {
-+ register const char *s = resword->name;
-+
-+ if (*str == *s && !strcmp (str + 1, s + 1))
-+ return resword;
-+ }
-+ }
-+ }
-+ return 0;
-+}
-+#line 242 "ftinf_sh.gperf"
-+
-+
-+static const ftinf_t*
-+ftinf_settings( const char *name ){
-+ if( name ){
-+ enum {
-+ max_wlen=31
-+ };
-+ char buf[max_wlen+1];
-+ int len=strlen( name );
-+ if( len <= max_wlen ){
-+ int i;
-+ for( i=0; i<len; ++i )
-+ buf[i]=tolower( name[i] );
-+ buf[len]='\0';
-+ return _settings_get( buf, len );
-+ }
-+ }
-+ return NULL;
-+}
-+/*
-+ gperf --output-file=ftinf_sh.c ftinf_sh.gperf
-+*/
-diff -ruN freetype-2.7.1-orig/src/base/ftinf_sh.gperf freetype-2.7.1/src/base/ftinf_sh.gperf
---- freetype-2.7.1-orig/src/base/ftinf_sh.gperf 1970-01-01 01:00:00.000000000 +0100
-+++ freetype-2.7.1/src/base/ftinf_sh.gperf 2017-01-11 12:28:34.881016390 +0100
-@@ -0,0 +1,264 @@
-+%struct-type
-+%define slot-name name
-+%enum
-+%switch=1
-+%readonly-tables
-+%omit-struct-type
-+%define lookup-function-name _settings_get
-+%define hash-function-name _settings_hash
-+%{
-+#include <ctype.h>
-+static const struct ftinf_s* _settings_get( const char*str, unsigned len);
-+%}
-+struct ftinf_s;
-+%%
-+{ .name="custom",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 8, 24, 48, 24, 8},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=75,
-+ .stem_fitting_strength=50,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+{ .name="classic",
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .filter_params={on, 6, 25, 38, 25, 6},
-+ .gamma_correction={0, 100},
-+ .use_various_tweaks=true
-+},
-+{ .name="disabled",
-+ .gamma_correction={0, 100},
-+},
-+{ .name="ipad",
-+ .filter_params={on, 0, 0, 100, 0, 0},
-+ .gamma_correction={1000, 80},
-+ .grayscale_filter_strength=100
-+},
-+{ .name="infinality",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=25,
-+ .stem_snapping_sliding_scale=40,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=5
-+},
-+{ .name="linux",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .gamma_correction={0, 100},
-+ .use_various_tweaks=true
-+},
-+{ .name="nudge",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_various_tweaks=true,
-+},
-+{ .name="osx",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .bold_embolden_x_value=16,
-+ .brightness=10,
-+ .contrast=20,
-+ .filter_params={on, 3, 32, 38, 32, 3},
-+ .gamma_correction={1000, 80},
-+ .global_embolden_y_value=8,
-+ .grayscale_filter_strength=25,
-+},
-+{ .name="push",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=75,
-+ .stem_fitting_strength=50,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+{ .name="sharpened",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=25,
-+ .stem_fitting_strength=25,
-+ .stem_snapping_sliding_scale=40,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+{ .name="shove",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_increase_glyph_heights=true,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=100,
-+ .stem_fitting_strength=100,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true
-+},
-+{ .name="ubuntu",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=-10,
-+ .contrast=15,
-+ .filter_params={on, 11, 22, 38, 22, 11},
-+ .gamma_correction={1000, 80},
-+ .use_various_tweaks=true
-+},
-+{ .name="ultimate1",
-+ .filter_params={on, 4, 22, 38, 22, 4},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+{ .name="ultimate2",
-+ .filter_params={on, 6, 22, 36, 22, 6},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+{ .name="ultimate3",
-+ .filter_params={on, 8, 24, 36, 24, 8},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+{ .name="ultimate4",
-+ .filter_params={on, 10, 25, 37, 25, 10},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+{ .name="ultimate5",
-+ .filter_params={on, 12, 28, 42, 28, 12},
-+ .fringe_filter_strength=25,
-+ .gamma_correction={0, 100},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=25
-+},
-+{ .name="vanilla",
-+ .filter_params={on, 6, 25, 38, 25, 6},
-+ .gamma_correction={0, 100},
-+},
-+{ .name="windows7light",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .contrast=20,
-+ .filter_params={on, 20, 25, 38, 25, 05},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 160},
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=100
-+},
-+{ .name="windows7",
-+ .filter_params={on, 20, 25, 42, 25, 06},
-+ .fringe_filter_strength=100,
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .windows_style_sharpening_strength=65,
-+ .gamma_correction={1000, 120},
-+ .brightness=10,
-+ .contrast=20,
-+ .use_various_tweaks=true,
-+ .autohint_snap_stem_height=100,
-+ .use_known_settings_on_selected_fonts=true,
-+},
-+{ .name="windowsxp",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=10,
-+ .contrast=20,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 120},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+{ .name="windowsxplight",
-+ .autohint_horizontal_stem_darken_strength=10,
-+ .autohint_snap_stem_height=100,
-+ .autohint_vertical_stem_darken_strength=25,
-+ .brightness=20,
-+ .contrast=30,
-+ .filter_params={on, 6, 25, 44, 25, 6},
-+ .fringe_filter_strength=100,
-+ .gamma_correction={1000, 120},
-+ .stem_alignment_strength=15,
-+ .stem_fitting_strength=15,
-+ .stem_snapping_sliding_scale=30,
-+ .use_known_settings_on_selected_fonts=true,
-+ .use_various_tweaks=true,
-+ .windows_style_sharpening_strength=65
-+},
-+%%
-+
-+static const ftinf_t*
-+ftinf_settings( const char *name ){
-+ if( name ){
-+ enum {
-+ max_wlen=31
-+ };
-+ char buf[max_wlen+1];
-+ int len=strlen( name );
-+ if( len <= max_wlen ){
-+ int i;
-+ for( i=0; i<len; ++i )
-+ buf[i]=tolower( name[i] );
-+ buf[len]='\0';
-+ return _settings_get( buf, len );
-+ }
-+ }
-+ return NULL;
-+}
-+/*
-+ gperf --output-file=ftinf_sh.c ftinf_sh.gperf
-+*/
-diff -ruN freetype-2.7.1-orig/src/base/ftinit.c freetype-2.7.1/src/base/ftinit.c
---- freetype-2.7.1-orig/src/base/ftinit.c 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/ftinit.c 2017-01-11 12:28:34.882016390 +0100
+
+ /* END */
+diff --git a/src/base/ftinit.c b/src/base/ftinit.c
+index b3b08fa..c125db9 100644
+--- a/src/base/ftinit.c
++++ b/src/base/ftinit.c
@@ -43,7 +43,9 @@
#include FT_INTERNAL_DEBUG_H
#include FT_MODULE_H
@@ -2523,7 +482,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftinit.c freetype-2.7.1/src/base/ftinit.c
/*************************************************************************/
/* */
-@@ -362,11 +364,14 @@
+@@ -341,10 +343,14 @@
error = FT_New_Library( memory, alibrary );
if ( error )
FT_Done_Memory( memory );
@@ -2531,20 +490,20 @@ diff -ruN freetype-2.7.1-orig/src/base/ftinit.c freetype-2.7.1/src/base/ftinit.c
+ else {
FT_Add_Default_Modules( *alibrary );
-
-- ft_set_default_properties( *alibrary );
--
-+ ft_set_default_properties( *alibrary );
+- FT_Set_Default_Properties( *alibrary );
++ FT_Set_Default_Properties( *alibrary );
+#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
-+ /* get Infinality settings */
-+ ftinf_env();
++ /* get Infinality settings */
++ ftinf_env();
+#endif
+ }
+
return error;
}
-
-diff -ruN freetype-2.7.1-orig/src/base/ftlcdfil.c freetype-2.7.1/src/base/ftlcdfil.c
---- freetype-2.7.1-orig/src/base/ftlcdfil.c 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/ftlcdfil.c 2017-01-11 12:28:34.882016390 +0100
+diff --git a/src/base/ftlcdfil.c b/src/base/ftlcdfil.c
+index 611b39f..0e7048c 100644
+--- a/src/base/ftlcdfil.c
++++ b/src/base/ftlcdfil.c
@@ -22,7 +22,10 @@
#include FT_LCD_FILTER_H
#include FT_IMAGE_H
@@ -2557,50 +516,51 @@ diff -ruN freetype-2.7.1-orig/src/base/ftlcdfil.c freetype-2.7.1/src/base/ftlcdf
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-@@ -307,11 +310,36 @@
+@@ -306,11 +309,36 @@
FT_Library_SetLcdFilter( FT_Library library,
FT_LcdFilter filter )
{
-- static const FT_Byte default_filter[5] =
-- { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
- static const FT_Byte light_filter[5] =
- { 0x00, 0x55, 0x56, 0x55, 0x00 };
+- static const FT_LcdFiveTapFilter default_weights =
+- { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
+ static const FT_LcdFiveTapFilter light_weights =
+ { 0x00, 0x55, 0x56, 0x55, 0x00 };
-
+#ifndef FT_CONFIG_OPTION_INFINALITY_PATCHSET
-+ static const FT_Byte default_filter[5] =
++ static const FT_LcdFiveTapFilter default_weights =
+ { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
+#else
-+ FT_Byte default_filter[5];
++ FT_LcdFiveTapFilter default_weights;
+ if( ftinf && ftinf->filter_params[0] )
+ {
+ const int *f=ftinf->filter_params;
+ /* Assume we were given integers [0-100] get them to [0-255] */
+ int val; /* 2611=2.55*1024 */
+ val=(f[1]*2611+512)>>10; if( val > 255 ) val=255;
-+ default_filter[0] = (FT_Byte) val;
++ default_weights[0] = (FT_Byte) val;
+ val=(f[2]*2611+512)>>10; if( val > 255 ) val=255;
-+ default_filter[1] = (FT_Byte) val;
++ default_weights[1] = (FT_Byte) val;
+ val=(f[3]*2611+512)>>10; if( val > 255 ) val=255;
-+ default_filter[2] = (FT_Byte) val;
++ default_weights[2] = (FT_Byte) val;
+ val=(f[4]*2611+512)>>10; if( val > 255 ) val=255;
-+ default_filter[3] = (FT_Byte) val;
++ default_weights[3] = (FT_Byte) val;
+ val=(f[5]*2611+512)>>10; if( val > 255 ) val=255;
-+ default_filter[4] = (FT_Byte) val;
++ default_weights[4] = (FT_Byte) val;
+ } else {
-+ default_filter[0]=0x08;
-+ default_filter[1]=0x4d;
-+ default_filter[2]=0x56;
-+ default_filter[3]=0x4d;
-+ default_filter[4]=0x08;
++ default_weights[0]=0x08;
++ default_weights[1]=0x4d;
++ default_weights[2]=0x56;
++ default_weights[3]=0x4d;
++ default_weights[4]=0x08;
+ }
+#endif
if ( !library )
return FT_THROW( Invalid_Library_Handle );
-diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
---- freetype-2.7.1-orig/src/base/ftobjs.c 2017-01-11 12:28:16.727016867 +0100
-+++ freetype-2.7.1/src/base/ftobjs.c 2017-01-11 12:28:34.885016390 +0100
-@@ -40,7 +40,9 @@
+diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
+index 539116e..c86b348 100644
+--- a/src/base/ftobjs.c
++++ b/src/base/ftobjs.c
+@@ -43,7 +43,9 @@
#ifdef FT_CONFIG_OPTION_MAC_FONTS
#include "ftbase.h"
#endif
@@ -2611,7 +571,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
#ifdef FT_DEBUG_LEVEL_TRACE
-@@ -78,6 +80,11 @@
+@@ -81,6 +83,11 @@
#define GRID_FIT_METRICS
@@ -2623,7 +583,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
/* forward declaration */
static FT_Error
-@@ -563,6 +570,25 @@
+@@ -567,6 +574,25 @@
ft_lookup_glyph_renderer( FT_GlyphSlot slot );
@@ -2649,7 +609,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
#ifdef GRID_FIT_METRICS
static void
ft_glyphslot_grid_fit_metrics( FT_GlyphSlot slot,
-@@ -621,8 +647,18 @@
+@@ -625,8 +651,18 @@
FT_Bool autohint = FALSE;
FT_Module hinter;
TT_Face ttface = (TT_Face)face;
@@ -2668,7 +628,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
if ( !face || !face->size || !face->glyph )
return FT_THROW( Invalid_Face_Handle );
-@@ -713,6 +749,18 @@
+@@ -717,6 +753,18 @@
{
FT_AutoHinter_Interface hinting;
@@ -2687,7 +647,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
/* try to load embedded bitmaps first if available */
/* */
-@@ -758,6 +806,18 @@
+@@ -762,6 +810,18 @@
if ( error )
goto Exit;
@@ -2706,7 +666,7 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
if ( slot->format == FT_GLYPH_FORMAT_OUTLINE )
{
/* check that the loaded outline is correct */
-@@ -4874,6 +4934,11 @@
+@@ -4986,6 +5046,11 @@
/* That's ok now */
*alibrary = library;
@@ -2718,9 +678,10 @@ diff -ruN freetype-2.7.1-orig/src/base/ftobjs.c freetype-2.7.1/src/base/ftobjs.c
return FT_Err_Ok;
#ifdef FT_CONFIG_OPTION_PIC
-diff -ruN freetype-2.7.1-orig/src/base/ftoutln.c freetype-2.7.1/src/base/ftoutln.c
---- freetype-2.7.1-orig/src/base/ftoutln.c 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/ftoutln.c 2017-01-11 12:28:34.886016390 +0100
+diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
+index 464a066..d84a82a 100644
+--- a/src/base/ftoutln.c
++++ b/src/base/ftoutln.c
@@ -29,7 +29,9 @@
#include FT_INTERNAL_CALC_H
#include FT_INTERNAL_DEBUG_H
@@ -2736,20 +697,20 @@ diff -ruN freetype-2.7.1-orig/src/base/ftoutln.c freetype-2.7.1/src/base/ftoutln
FT_Vector* points;
FT_Int c, first, last;
FT_Int orientation;
--
+#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
+ FT_Bool use_various_tweaks = FALSE;
+ if( ftinf ) use_various_tweaks=ftinf->use_various_tweaks;
-+
+
+ if ( use_various_tweaks )
+ ystrength = FT_PIX_FLOOR ( ystrength );
+#endif
if ( !outline )
return FT_THROW( Invalid_Outline );
-diff -ruN freetype-2.7.1-orig/src/base/ftsynth.c freetype-2.7.1/src/base/ftsynth.c
---- freetype-2.7.1-orig/src/base/ftsynth.c 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/ftsynth.c 2017-01-11 12:28:34.886016390 +0100
+diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
+index 66dae60..89124f1 100644
+--- a/src/base/ftsynth.c
++++ b/src/base/ftsynth.c
@@ -22,7 +22,9 @@
#include FT_INTERNAL_OBJECTS_H
#include FT_OUTLINE_H
@@ -2801,21 +762,11 @@ diff -ruN freetype-2.7.1-orig/src/base/ftsynth.c freetype-2.7.1/src/base/ftsynth
slot->metrics.horiAdvance += xstr;
slot->metrics.vertAdvance += ystr;
slot->metrics.horiBearingY += ystr;
-diff -ruN freetype-2.7.1-orig/src/base/Jamfile freetype-2.7.1/src/base/Jamfile
---- freetype-2.7.1-orig/src/base/Jamfile 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/Jamfile 2017-01-11 12:28:34.886016390 +0100
-@@ -56,6 +56,7 @@
- ftglyph
- ftgxval
- ftinit
-+ ftinf
- ftlcdfil
- ftmm
- ftotval
-diff -ruN freetype-2.7.1-orig/src/base/rules.mk freetype-2.7.1/src/base/rules.mk
---- freetype-2.7.1-orig/src/base/rules.mk 2017-01-11 12:28:16.726016867 +0100
-+++ freetype-2.7.1/src/base/rules.mk 2017-01-11 12:28:34.887016390 +0100
-@@ -42,6 +42,7 @@
+diff --git a/src/base/rules.mk b/src/base/rules.mk
+index 2a1e93c..1a38d49 100644
+--- a/src/base/rules.mk
++++ b/src/base/rules.mk
+@@ -42,6 +42,7 @@ BASE_SRC := $(BASE_DIR)/basepic.c \
$(BASE_DIR)/ftdbgmem.c \
$(BASE_DIR)/ftgloadr.c \
$(BASE_DIR)/fthash.c \
@@ -2823,10 +774,11 @@ diff -ruN freetype-2.7.1-orig/src/base/rules.mk freetype-2.7.1/src/base/rules.mk
$(BASE_DIR)/ftobjs.c \
$(BASE_DIR)/ftoutln.c \
$(BASE_DIR)/ftpic.c \
-diff -ruN freetype-2.7.1-orig/src/cff/cffobjs.c freetype-2.7.1/src/cff/cffobjs.c
---- freetype-2.7.1-orig/src/cff/cffobjs.c 2017-01-11 12:28:16.725016867 +0100
-+++ freetype-2.7.1/src/cff/cffobjs.c 2017-01-11 12:28:34.887016390 +0100
-@@ -34,6 +34,9 @@
+diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
+index 6161393..8c00aa9 100644
+--- a/src/cff/cffobjs.c
++++ b/src/cff/cffobjs.c
+@@ -39,6 +39,9 @@
#include "cfferrs.h"
@@ -2836,7 +788,7 @@ diff -ruN freetype-2.7.1-orig/src/cff/cffobjs.c freetype-2.7.1/src/cff/cffobjs.c
/*************************************************************************/
/* */
-@@ -1173,6 +1176,9 @@
+@@ -1172,6 +1175,9 @@
#endif
driver->no_stem_darkening = TRUE;
@@ -2846,9 +798,10 @@ diff -ruN freetype-2.7.1-orig/src/cff/cffobjs.c freetype-2.7.1/src/cff/cffobjs.c
driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
-diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ftsmooth.c
---- freetype-2.7.1-orig/src/smooth/ftsmooth.c 2017-01-11 12:28:16.725016867 +0100
-+++ freetype-2.7.1/src/smooth/ftsmooth.c 2017-01-11 12:41:51.510995480 +0100
+diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
+index 435854e..5d79844 100644
+--- a/src/smooth/ftsmooth.c
++++ b/src/smooth/ftsmooth.c
@@ -26,6 +26,18 @@
#include "ftsmerrs.h"
@@ -2868,10 +821,72 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
/* initialize renderer -- init its raster */
static FT_Error
-@@ -93,6 +105,2219 @@
- FT_Outline_Get_CBox( &slot->outline, cbox );
- }
+@@ -34,65 +46,2278 @@
+ FT_Library library = FT_MODULE_LIBRARY( render );
+
+- render->clazz->raster_class->raster_reset( render->raster,
+- library->raster_pool,
+- library->raster_pool_size );
++ render->clazz->raster_class->raster_reset( render->raster,
++ library->raster_pool,
++ library->raster_pool_size );
++
++ return 0;
++ }
++
++
++ /* sets render-specific mode */
++ static FT_Error
++ ft_smooth_set_mode( FT_Renderer render,
++ FT_ULong mode_tag,
++ FT_Pointer data )
++ {
++ /* we simply pass it to the raster */
++ return render->clazz->raster_class->raster_set_mode( render->raster,
++ mode_tag,
++ data );
++ }
++
++ /* transform a given glyph image */
++ static FT_Error
++ ft_smooth_transform( FT_Renderer render,
++ FT_GlyphSlot slot,
++ const FT_Matrix* matrix,
++ const FT_Vector* delta )
++ {
++ FT_Error error = FT_Err_Ok;
++
++
++ if ( slot->format != render->glyph_format )
++ {
++ error = FT_THROW( Invalid_Argument );
++ goto Exit;
++ }
++
++ if ( matrix )
++ FT_Outline_Transform( &slot->outline, matrix );
++
++ if ( delta )
++ FT_Outline_Translate( &slot->outline, delta->x, delta->y );
++
++ Exit:
++ return error;
++ }
++
++
++ /* return the glyph's control box */
++ static void
++ ft_smooth_get_cbox( FT_Renderer render,
++ FT_GlyphSlot slot,
++ FT_BBox* cbox )
++ {
++ FT_ZERO( cbox );
++
++ if ( slot->format == render->glyph_format )
++ FT_Outline_Get_CBox( &slot->outline, cbox );
++ }
++
+#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
+ static FT_Fixed FT_FixedFromFloat(float f)
+ {
@@ -4537,24 +2552,46 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ stems[valid_stems].generated = TRUE;
+ valid_stems += 1;
+ }
-+
+
+- return 0;
+- }
+ }
-+
+
+ /* sort stems in x direction */
+ if ( valid_stems > 1 && stems[0].center > stems[1].center )
+ swap_stem ( &stems[0], &stems[1] );
-+
+
+- /* sets render-specific mode */
+- static FT_Error
+- ft_smooth_set_mode( FT_Renderer render,
+- FT_ULong mode_tag,
+- FT_Pointer data )
+- {
+- /* we simply pass it to the raster */
+- return render->clazz->raster_class->raster_set_mode( render->raster,
+- mode_tag,
+- data );
+- }
+ if ( valid_stems == 0 && known_stem_values->stem_translating != 0 )
+ {
+ *translate_value += known_stem_values->stem_translating;
-+
+
+- /* transform a given glyph image */
+- static FT_Error
+- ft_smooth_transform( FT_Renderer render,
+- FT_GlyphSlot slot,
+- const FT_Matrix* matrix,
+- const FT_Vector* delta )
+- {
+- FT_Error error = FT_Err_Ok;
+ if ( strategy_use_strengths )
+ {
+ /* consider 1/2 pixel the max when strength is at 100%,
+ unless translate is already greater than that */
+ FT_Int strength_cutoff = 32;
-+
-+
+
+
+- if ( slot->format != render->glyph_format )
+ if ( abs ( *translate_value ) > strength_cutoff)
+ strength_cutoff = *translate_value;
+
@@ -4568,7 +2605,8 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ }
+ else
+ /* Start snapping */
-+ {
+ {
+- error = FT_THROW( Invalid_Argument );
+ FT_Int center_offset;
+ FT_Int modulus;
+ FT_Int delta, delta2;
@@ -5006,13 +3044,19 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ printf ( "TRANSLATING -64 " );
+ }
+ }
-+ goto Exit;
-+ }
-+
+ goto Exit;
+ }
+
+- if ( matrix )
+- FT_Outline_Transform( &slot->outline, matrix );
+ Exit:
-+
+
+- if ( delta )
+- FT_Outline_Translate( &slot->outline, delta->x, delta->y );
+#define transformed_point( point ) point * *scale_value + *translate_value * 12
-+
+
+- Exit:
+- return error;
+ if ( strategy_correct_out_of_bounds_outlines )
+ {
+ /* Correct if outside bitmap */
@@ -5034,24 +3078,31 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ free ( stem_centers );
+ free ( stems );
+ free ( leftmost_segment );
-+ }
-+
-+
+ }
+
+
+- /* return the glyph's control box */
+ /* Gamma correction */
-+ static void
+ static void
+- ft_smooth_get_cbox( FT_Renderer render,
+- FT_GlyphSlot slot,
+- FT_BBox* cbox )
+ _ft_lcd_gamma_correction_correction ( FT_Bitmap* bitmap,
+ FT_Render_Mode mode,
+ FT_GlyphSlot slot,
+ float gamma_correction_lt,
+ float gamma_correction_value )
-+ {
+ {
+- FT_ZERO( cbox );
+ if ( gamma_correction_value != 1.0 )
+ {
+ FT_UInt width = (FT_UInt)bitmap->width;
+ FT_UInt height = (FT_UInt)bitmap->rows;
+ FT_Byte* line = bitmap->buffer;
+ float ppem = (float)slot->face->size->metrics.x_ppem;
-+
+
+- if ( slot->format == render->glyph_format )
+- FT_Outline_Get_CBox( &slot->outline, cbox );
+
+ if ( !slot->face || !slot->face->size ) return;
+
@@ -5082,8 +3133,8 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ }
+ }
+ }
-+ }
-+
+ }
+
+#endif
/* convert a slot's glyph image into a bitmap */
@@ -5258,9 +3309,9 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+
+#endif
+ #ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
- /* check glyph image format */
-@@ -137,26 +2500,119 @@
+@@ -191,26 +2554,119 @@
goto Exit;
}
@@ -5393,7 +3444,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
width = (FT_ULong)( cbox.xMax - cbox.xMin ) >> 6;
height = (FT_ULong)( cbox.yMax - cbox.yMin ) >> 6;
-@@ -166,16 +2622,29 @@
+@@ -220,22 +2676,35 @@
height_org = height;
#endif
@@ -5423,30 +3474,25 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ y_top = cbox.yMax >> 6;
+
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-
- if ( slot->library->lcd_filter_func )
-@@ -185,33 +2654,25 @@
-
+ if ( lcd_filter_func )
+ {
if ( hmul )
{
-- x_shift += 64 * ( extra >> 1 );
-- x_left -= extra >> 1;
-+ x_shift -= 64 * ( extra >> 1 );
- width += 3 * extra;
+- x_shift += 64 * ( lcd_extra >> 1 );
++ x_shift -= 64 * ( lcd_extra >> 1 );
+ x_left -= lcd_extra >> 1;
+ width += 3 * lcd_extra;
pitch = FT_PAD_CEIL( width, 4 );
-+ x_left -= extra >> 1;
- }
+@@ -243,24 +2712,17 @@
if ( vmul )
{
-- y_shift += 64 * ( extra >> 1 );
-- y_top += extra >> 1;
-+ y_shift -= 64 * ( extra >> 1 );
- height += 3 * extra;
-+ y_top += extra >> 1;
+- y_shift += 64 * ( lcd_extra >> 1 );
++ y_shift -= 64 * ( lcd_extra >> 1 );
+ y_top += lcd_extra >> 1;
+ height += 3 * lcd_extra;
}
}
--
#endif
-
- /*
@@ -5466,7 +3512,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
/* Required check is (pitch * height < FT_ULONG_MAX), */
/* but we care realistic cases only. Always pitch <= width. */
if ( width > 0x7FFF || height > 0x7FFF )
-@@ -222,6 +2683,22 @@
+@@ -271,6 +2733,22 @@
goto Exit;
}
@@ -5489,7 +3535,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
/* release old bitmap buffer */
if ( slot->internal->flags & FT_GLYPH_OWN_BITMAP )
{
-@@ -229,7 +2706,6 @@
+@@ -278,7 +2756,6 @@
slot->internal->flags &= ~FT_GLYPH_OWN_BITMAP;
}
@@ -5497,7 +3543,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
if ( FT_ALLOC( bitmap->buffer, (FT_ULong)( pitch * height ) ) )
goto Exit;
else
-@@ -237,23 +2713,6 @@
+@@ -286,23 +2763,6 @@
slot->internal->flags |= FT_GLYPH_OWN_BITMAP;
@@ -5521,7 +3567,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
/* set up parameters */
params.target = bitmap;
params.source = outline;
-@@ -299,9 +2758,153 @@
+@@ -348,9 +2808,153 @@
if ( error )
goto Exit;
@@ -5645,8 +3691,8 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ }
+
+
-+ if ( slot->library->lcd_filter_func )
-+ slot->library->lcd_filter_func( bitmap, mode, slot->library );
++ if ( lcd_filter_func )
++ lcd_filter_func( bitmap, mode, slot->library );
+
+ if ( grayscale_filter_strength > 0 )
+ _ft_lcd_grayscale_filter( bitmap,
@@ -5665,17 +3711,17 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
+ FT_Outline_Done( slot->library, outline_orig );
+ }
+ else if ( mode == FT_RENDER_MODE_LCD &&
-+ slot->library->lcd_filter_func )
-+ slot->library->lcd_filter_func( bitmap, mode, slot->library );
++ lcd_filter_func )
++ lcd_filter_func( bitmap, mode, slot->library );
+#else
- if ( slot->library->lcd_filter_func )
- slot->library->lcd_filter_func( bitmap, mode, slot->library );
+ if ( lcd_filter_func )
+ lcd_filter_func( bitmap, mode, lcd_weights );
+#endif /* FT_CONFIG_OPTION_INFINALITY_PATCHSET */
#else /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
/* render outline into bitmap */
-@@ -359,6 +2962,20 @@
+@@ -408,6 +3012,20 @@
#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
@@ -5696,7 +3742,7 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
/* everything is fine; don't deallocate buffer */
have_buffer = FALSE;
-@@ -366,7 +2983,9 @@
+@@ -415,7 +3033,9 @@
Exit:
if ( have_outline_shifted )
@@ -5707,10 +3753,11 @@ diff -ruN freetype-2.7.1-orig/src/smooth/ftsmooth.c freetype-2.7.1/src/smooth/ft
if ( have_buffer )
{
FT_FREE( bitmap->buffer );
-diff -ruN freetype-2.7.1-orig/src/truetype/ttinterp.c freetype-2.7.1/src/truetype/ttinterp.c
---- freetype-2.7.1-orig/src/truetype/ttinterp.c 2017-01-11 12:28:16.728016867 +0100
-+++ freetype-2.7.1/src/truetype/ttinterp.c 2017-01-11 12:28:34.895016390 +0100
-@@ -5739,6 +5739,7 @@
+diff --git a/src/truetype/ttinterp.c b/src/truetype/ttinterp.c
+index af31408..6380d83 100644
+--- a/src/truetype/ttinterp.c
++++ b/src/truetype/ttinterp.c
+@@ -5753,6 +5753,7 @@
if ( exc->ignore_x_mode &&
exc->GS.freeVector.x != 0 &&
@@ -5718,3 +3765,6 @@ diff -ruN freetype-2.7.1-orig/src/truetype/ttinterp.c freetype-2.7.1/src/truetyp
!( exc->sph_tweak_flags & SPH_TWEAK_NORMAL_ROUND ) )
control_value_cutin = 0;
}
+--
+2.13.0
+
diff --git a/0003-inf.patch b/0003-inf.patch
new file mode 100644
index 000000000000..8b289f7a7c6c
--- /dev/null
+++ b/0003-inf.patch
@@ -0,0 +1,2089 @@
+diff -ruN freetype2.orig/src/base/ftinf.c freetype2.new/src/base/ftinf.c
+--- freetype2.orig/src/base/ftinf.c 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf.c 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,363 @@
++#include <stdlib.h>
++#include "ftinf.h"
++#define true 1
++#define false 0
++
++#define on 1
++#define off 0
++#define end (-128)
++
++#define sw2pv 18 /* STEM_WIDTH_2_PPEM */
++#define maxp 100 /* MAX_PPEM */
++
++typedef signed char pv; /* ppm and values type */
++/* the arrays start with existence flag + values */
++typedef struct sa_rules_s {
++ const char *name;
++ pv always_use_100[1+4+1];
++ pv brightness[1+2+1];
++ pv contrast[1+2+1];
++ pv edge_detection[1+4+1];
++ pv m[1+4+1];
++ pv bearing_correction[1+2+1];
++ pv spacing[1+5+1];
++ pv start[1+5+1];
++ pv stem_scaling[1+6+1];
++ pv stem_translating[1+2+1];
++ pv stem_translating_only[1+10+1];
++ pv stem_widths[1+4]; /* these end with maxp */
++ pv synthesize_stems[1+2+1];
++} sa_rules_t;
++
++#pragma GCC diagnostic ignored "-Wpedantic" /* C99 struct initializer tags are needed */
++#pragma GCC diagnostic ignored "-Wunused-function"
++
++const ftinf_t *ftinf;
++/* final settings, updated from environment */
++ftinf_t _env;
++
++/* rules and hashing function */
++#include "ftinf_rh.c"
++
++/* rules selection */
++void ftinf_fill_stem_values( Stem_Data *stem_values,
++ const char *family, int ppem, int use_known ){
++ /* set the defaults */
++ stem_values->bearing_correction = TRUE;
++ stem_values->brightness = 0.0;
++ stem_values->contrast = 0.0;
++ stem_values->edge_detection = FALSE;
++ stem_values->m = -1;
++ stem_values->stem_scaling = -1;
++ stem_values->stem_spacing = -1;
++ stem_values->stem_start = -1;
++ stem_values->stem_translating = 0;
++ stem_values->stem_translating_only = -1024;
++ stem_values->stem_width = -1;
++ stem_values->synth_stems = FALSE;
++ stem_values->use_100 = FALSE;
++ /* pick from known rules if requested and they exist for current family */
++ if( !use_known )
++ return;
++ else {
++ const sa_rules_t *r=ftinf_rules( family );
++ int i;
++ if( r==NULL ) return;
++ if( r->stem_widths[0]==on )
++ for( i=1; r->stem_widths[i]!=maxp; ++i )
++ if( ppem < r->stem_widths[i] ){
++ stem_values->stem_width = i-1;
++ break;
++ }
++
++ if( r->stem_scaling[0]==on )
++ for( i=1; r->stem_scaling[i]!=end; i+=2 )
++ if( ppem==r->stem_scaling[i] ){
++ stem_values->stem_scaling = r->stem_scaling[i+1];
++ break;
++ }
++
++ if( r->m[0]==on )
++ for( i=1; r->m[i]!=end; i+=2 )
++ if( ppem==r->m[i] ){
++ stem_values->m = r->m[i+1];
++ break;
++ }
++
++ if( r->stem_translating_only[0]==on )
++ for( i=1; r->stem_translating_only[i]!=end; i+=2 )
++ if( ppem==r->stem_translating_only[i] || r->stem_translating_only[i]==0 ){
++ stem_values->stem_translating_only = r->stem_translating_only[i+1];
++ break;
++ }
++
++ if( r->stem_translating[0]==on )
++ for( i=1; r->stem_translating[i]!=end; i+=2 )
++ if( ppem==r->stem_translating[i] || r->stem_translating[i]==0 ){
++ stem_values->stem_translating = r->stem_translating[i+1];
++ break;
++ }
++
++ if( r->always_use_100[0]==on )
++ for( i=1; r->always_use_100[i]!=end; i+=2 )
++ if( ppem>=r->always_use_100[i] && ppem<=r->always_use_100[i+1] ){
++ stem_values->use_100 = TRUE;
++ break;
++ }
++
++ if( r->synthesize_stems[0]==on )
++ for( i=1; r->synthesize_stems[i]!=end; i+=2 )
++ if( ppem>=r->synthesize_stems[i] && ppem<=r->synthesize_stems[i+1] ){
++ stem_values->synth_stems = TRUE;
++ break;
++ }
++
++ if( r->edge_detection[0]==on )
++ for( i=1; r->edge_detection[i]!=end; i+=2 )
++ if( ppem>=r->edge_detection[i] && ppem<=r->edge_detection[i+1] ){
++ stem_values->edge_detection = TRUE;
++ break;
++ }
++
++ if( r->bearing_correction[0]==on )
++ for( i=1; r->bearing_correction[i]!=end; i+=2 )
++ if( ppem>=r->bearing_correction[i] && ppem<=r->bearing_correction[i+1] ){
++ stem_values->bearing_correction = FALSE;
++ break;
++ }
++
++#if(0)
++ if( r->brightness[0]==on )
++ for( i=1; r->brightness[i]!=end; i+=2 )
++ if( ppem==r->brightness[i]||r->brightness[i]==0 ){
++ stem_values->brightness=r->brightness[i+1]*(1.0f/300.0f);
++ break;
++ }
++
++ if( r->contrast[0]==on )
++ for( i=1; r->contrast[i]!=end; i+=2 )
++ if( ppem==r->contrast[i]||r->contrast[i]==0 ){
++ stem_values->contrast=r->contrast[i+1]*(1.0f/300.0f);
++ break;
++ }
++ if( r->spacing[0]==on ){
++ /* not used by original code */
++ }
++ if( r->start[0]==on ){
++ /* not used by original code */
++ }
++#endif
++ }
++ return;
++}
++
++void ftinf_get_bc( const char *family, int ppem, float *brightness, float *contrast ){
++ const sa_rules_t *r=ftinf_rules( family );
++ *brightness=0;
++ *contrast=0;
++ if( r ){
++ int i;
++ if( r->brightness[0]==on )
++ for( i=1; r->brightness[i]!=end; i+=2 )
++ if( ppem==r->brightness[i]||r->brightness[i]==0 ){
++ *brightness=r->brightness[i+1]*(1.0f/300.0f);
++ break;
++ }
++
++ if( r->contrast[0]==on )
++ for( i=1; r->contrast[i]!=end; i+=2 )
++ if( ppem==r->contrast[i]||r->contrast[i]==0 ){
++ *contrast=r->contrast[i+1]*(1.0f/300.0f);
++ break;
++ }
++ }
++ return;
++}
++
++static int
++bool_val( const char *s ){
++ if ( s != NULL )
++ return strcasecmp(s, "true") == 0
++ || strcasecmp(s, "1") == 0
++ || strcasecmp(s, "on") == 0
++ || strcasecmp(s, "yes") ==0;
++ else
++ return 0;
++}
++
++static int
++int_val( const char *s, int min, int max ){
++ int val;
++ sscanf ( s, "%d", &val );
++ if ( val > max )
++ val = max;
++ else if ( val < min )
++ val = min;
++ return val;
++}
++
++/* settings and hashing function */
++#include "ftinf_sh.c"
++
++/*
++ Get active Infinality settings
++ */
++void ftinf_env(){
++ const char *s;
++ ftinf=ftinf_settings( getenv( "INFINALITY_FT" ) );
++
++ if( ftinf==NULL ){
++ ftinf=ftinf_settings( "ultimate3" );
++ /* this should always succeed */
++#if(0)
++ if( ftinf==NULL ){
++ /* put an error here */
++ exit(-1);
++ }
++#endif
++ }
++ _env=ftinf[0]; /* copy as defaults */
++
++ /* check if custom environment values are set and update with them */
++ s=getenv( "INFINALITY_FT_AUTOHINT_INCREASE_GLYPH_HEIGHTS" );
++ if( s ) _env.autohint_increase_glyph_heights=bool_val( s );
++ s=getenv( "INFINALITY_FT_AUTOHINT_SNAP_STEM_HEIGHT" );
++ if( s ) _env.autohint_snap_stem_height=int_val( s, 0, 100 );
++ s=getenv( "INFINALITY_FT_USE_VARIOUS_TWEAKS" );
++ if( s ) _env.use_various_tweaks=bool_val( s );
++ s=getenv( "INFINALITY_FT_USE_KNOWN_SETTINGS_ON_SELECTED_FONTS" );
++ if( s ) _env.use_known_settings_on_selected_fonts=bool_val(s);
++#if(0) /* not used (naming error also) */
++ s=getenv( "INFINALITY_FT_AUTOHINT_MINIMUM_STEM_WIDTH" );
++ if( s ) _env.autohint_minimum_stem_height=int_val( s, 0, 100 );
++#endif
++ s=getenv( "INFINALITY_FT_STEM_SNAPPING_SLIDING_SCALE" );
++ if( s ) sscanf( s, "%d", &_env.stem_snapping_sliding_scale );
++ s=getenv( "INFINALITY_FT_STEM_ALIGNMENT_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.stem_alignment_strength );
++ s=getenv( "INFINALITY_FT_STEM_DARKENING_AUTOFIT" );
++ if( s ) _env.stem_darkening_autofit=bool_val( s );
++ s=getenv( "INFINALITY_FT_STEM_DARKENING_CFF" );
++ if( s ) _env.stem_darkening_cff=bool_val( s );
++ s=getenv( "INFINALITY_FT_STEM_FITTING_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.stem_fitting_strength );
++ s=getenv( "INFINALITY_FT_CHROMEOS_STYLE_SHARPENING_STRENGTH" );
++ if( s ) _env.chromeos_style_sharpening_strength=int_val( s, 0, 100 );
++ s=getenv( "INFINALITY_FT_BRIGHTNESS" );
++ if( s ) sscanf( s, "%d", &_env.brightness );
++ s=getenv( "INFINALITY_FT_CONTRAST" );
++ if( s ) sscanf( s, "%d", &_env.contrast );
++ s=getenv( "INFINALITY_FT_WINDOWS_STYLE_SHARPENING_STRENGTH" );
++ if( s ) _env.windows_style_sharpening_strength=int_val( s, 0, 100 );
++ s=getenv( "INFINALITY_FT_GAMMA_CORRECTION" );
++ if( s ){
++ float *f=_env.gamma_correction;
++ sscanf ( s, "%f %f", &f[0], &f[1] );
++ if( f[1] < 1.0f ) f[1]=1.0f;
++ }
++ s=getenv( "INFINALITY_FT_FRINGE_FILTER_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.fringe_filter_strength );
++ s=getenv( "INFINALITY_FT_GRAYSCALE_FILTER_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.grayscale_filter_strength );
++ s=getenv( "INFINALITY_FT_AUTOHINT_HORIZONTAL_STEM_DARKEN_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.autohint_horizontal_stem_darken_strength );
++ s=getenv( "INFINALITY_FT_AUTOHINT_VERTICAL_STEM_DARKEN_STRENGTH" );
++ if( s ) sscanf( s, "%d", &_env.autohint_vertical_stem_darken_strength );
++ s=getenv( "INFINALITY_FT_GLOBAL_EMBOLDEN_X_VALUE" );
++ if( s ) sscanf( s, "%d", &_env.global_embolden_x_value );
++ s=getenv( "INFINALITY_FT_GLOBAL_EMBOLDEN_Y_VALUE" );
++ if( s ) sscanf( s, "%d", &_env.global_embolden_y_value );
++ s=getenv( "INFINALITY_FT_BOLD_EMBOLDEN_X_VALUE" );
++ if( s ) sscanf( s, "%d", &_env.bold_embolden_x_value );
++ s=getenv( "INFINALITY_FT_BOLD_EMBOLDEN_Y_VALUE" );
++ if( s ) sscanf( s, "%d", &_env.bold_embolden_y_value );
++ s=getenv( "INFINALITY_FT_FILTER_PARAMS" );
++ if( s ) {
++ int *f=_env.filter_params;
++ if( sscanf( s, "%d %d %d %d %d", f+1, f+2, f+3, f+4, f+5 )==5 )
++ f[0]=on;
++ else
++ f[0]=off; /* FIXME: put a warning? */
++ }
++ /* do the range verifications as in original code */
++ if ( _env.stem_snapping_sliding_scale > maxp )
++ _env.stem_snapping_sliding_scale = 0;
++ else if ( _env.stem_snapping_sliding_scale < 0 )
++ _env.stem_snapping_sliding_scale = 0;
++ if (_env.stem_snapping_sliding_scale < 11 &&
++ _env.stem_snapping_sliding_scale > 0 )
++ _env.stem_snapping_sliding_scale = 11;
++
++ if ( _env.stem_alignment_strength > 100 )
++ _env.stem_alignment_strength = 100;
++ else if ( _env.stem_alignment_strength < 0 )
++ _env.stem_alignment_strength = 0;
++
++ if ( _env.stem_fitting_strength > 100 )
++ _env.stem_fitting_strength = 100;
++ else if ( _env.stem_fitting_strength < 0 )
++ _env.stem_fitting_strength = 0;
++
++ if ( _env.chromeos_style_sharpening_strength > 100 )
++ _env.chromeos_style_sharpening_strength = 100;
++ else if ( _env.chromeos_style_sharpening_strength < 0 )
++ _env.chromeos_style_sharpening_strength = 0;
++
++ if ( _env.brightness > 100 )
++ _env.brightness = 100;
++ else if ( _env.brightness < -100 )
++ _env.brightness = 0;
++
++ if ( _env.contrast > 100 )
++ _env.contrast = 100;
++ else if ( _env.contrast < -100 )
++ _env.contrast = 0;
++
++ if ( _env.windows_style_sharpening_strength > 100 )
++ _env.windows_style_sharpening_strength = 100;
++ else if ( _env.windows_style_sharpening_strength < 0 )
++ _env.windows_style_sharpening_strength = 0;
++
++ if ( _env.fringe_filter_strength > 100 )
++ _env.fringe_filter_strength = 100;
++ else if ( _env.fringe_filter_strength < 0 )
++ _env.fringe_filter_strength = 0;
++
++ if ( _env.grayscale_filter_strength > 100 )
++ _env.grayscale_filter_strength = 100;
++ else if ( _env.grayscale_filter_strength < 0 )
++ _env.grayscale_filter_strength = 0;
++
++ if ( _env.autohint_horizontal_stem_darken_strength > 100 )
++ _env.autohint_horizontal_stem_darken_strength = 100;
++ else if ( _env.autohint_horizontal_stem_darken_strength < 0 )
++ _env.autohint_horizontal_stem_darken_strength = 0;
++
++ if ( _env.autohint_vertical_stem_darken_strength > 100 )
++ _env.autohint_vertical_stem_darken_strength = 100;
++ else if ( _env.autohint_horizontal_stem_darken_strength < 0 )
++ _env.autohint_vertical_stem_darken_strength = 0;
++
++ if ( _env.global_embolden_x_value > 128 )
++ _env.global_embolden_x_value = 128;
++ else if ( _env.global_embolden_x_value < -128 )
++ _env.global_embolden_x_value = -128;
++
++ if ( _env.global_embolden_y_value > 128 )
++ _env.global_embolden_y_value = 128;
++ else if ( _env.global_embolden_y_value < -128 )
++ _env.global_embolden_y_value = -128;
++
++ if ( _env.bold_embolden_x_value > 128 )
++ _env.bold_embolden_x_value = 128;
++ else if (_env.bold_embolden_x_value < -128 )
++ _env.bold_embolden_x_value = -128;
++
++ if ( _env.bold_embolden_y_value > 128 )
++ _env.bold_embolden_y_value = 128;
++ else if ( _env.bold_embolden_y_value < -128 )
++ _env.bold_embolden_y_value = -128;
++
++ /* point to the combined and checked settings */
++ ftinf=&_env;
++}
+diff -ruN freetype2.orig/src/base/ftinf.h freetype2.new/src/base/ftinf.h
+--- freetype2.orig/src/base/ftinf.h 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf.h 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,66 @@
++#ifndef _FTINF_H_
++#define _FTINF_H_
++/*
++ Stem snapping rules
++ (base freetype typedefs assumed already included)
++ */
++typedef struct
++{
++ FT_Int stem_width;
++ FT_Int stem_spacing;
++ FT_Int stem_start;
++ FT_Int stem_scaling;
++ FT_Int stem_translating_only;
++ FT_Int stem_translating;
++ float brightness;
++ float contrast;
++ FT_Bool use_100;
++ FT_Bool synth_stems;
++ FT_Bool edge_detection;
++ FT_Bool bearing_correction;
++ FT_Int m;
++} Stem_Data;
++
++/*
++ Infinality settings
++ */
++typedef struct ftinf_s {
++ const char *name;
++ int autohint_horizontal_stem_darken_strength;
++ int autohint_snap_stem_height;
++ int autohint_increase_glyph_heights;
++ int autohint_vertical_stem_darken_strength;
++ int bold_embolden_x_value;
++ int bold_embolden_y_value;
++ int brightness;
++ int chromeos_style_sharpening_strength;
++ int contrast;
++ int filter_params[6]; /* 1st one used as existence flag */
++ int fringe_filter_strength;
++ float gamma_correction[2];
++ int global_embolden_x_value;
++ int global_embolden_y_value;
++ int grayscale_filter_strength;
++ int stem_alignment_strength;
++ int stem_darkening_autofit;
++ int stem_darkening_cff;
++ int stem_fitting_strength;
++ int stem_snapping_sliding_scale;
++ int use_known_settings_on_selected_fonts;
++ int use_various_tweaks;
++ int windows_style_sharpening_strength;
++} ftinf_t;
++
++extern FT_Pos infinality_cur_width; /* defined in aflatin.c */
++
++extern const ftinf_t *ftinf; /* active settings */
++
++extern void ftinf_fill_stem_values( Stem_Data *stem_values,
++ const char *family, int ppem, int use_known );
++extern void ftinf_get_bc( const char *family, int ppem,
++ float *brightness, float *contrast );
++
++/* get values from environment (FIXME: maybe update with using user files) */
++extern void ftinf_env();
++
++#endif
+diff -ruN freetype2.orig/src/base/ftinf_rh.c freetype2.new/src/base/ftinf_rh.c
+--- freetype2.orig/src/base/ftinf_rh.c 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf_rh.c 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,626 @@
++/* ANSI-C code produced by gperf version 3.1 */
++/* Command-line: gperf --output-file=ftinf_rh.c ftinf_rh.gperf */
++/* Computed positions: -k'1,$' */
++
++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
++/* The character set is not based on ISO-646. */
++#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
++#endif
++
++#line 9 "ftinf_rh.gperf"
++
++#include <ctype.h>
++static const struct sa_rules_s* _rules_get( const char*str, unsigned len );
++/* maximum key range = 82, duplicates = 0 */
++
++#ifdef __GNUC__
++__inline
++#else
++#ifdef __cplusplus
++inline
++#endif
++#endif
++static unsigned int
++_rules_hash (register const char *str, register unsigned int len)
++{
++ static const unsigned char asso_values[] =
++ {
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 0, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 5, 45, 5,
++ 35, 25, 35, 35, 50, 45, 85, 85, 0, 25,
++ 40, 5, 0, 85, 50, 20, 20, 0, 10, 10,
++ 85, 10, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
++ 85, 85, 85, 85, 85, 85
++ };
++ return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
++}
++
++#ifdef __GNUC__
++__inline
++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
++__attribute__ ((__gnu_inline__))
++#endif
++#endif
++const struct sa_rules_s *
++_rules_get (register const char *str, register unsigned int len)
++{
++ enum
++ {
++ TOTAL_KEYWORDS = 58,
++ MIN_WORD_LENGTH = 3,
++ MAX_WORD_LENGTH = 24,
++ MIN_HASH_VALUE = 3,
++ MAX_HASH_VALUE = 84
++ };
++
++ static const struct sa_rules_s wordlist[] =
++ {
++#line 15 "ftinf_rh.gperf"
++{ .name="---",
++ .synthesize_stems={on, 13, 13, end}
++},
++#line 253 "ftinf_rh.gperf"
++{ .name="ubuntu",
++ .always_use_100={on, 12, 13, 15, 15, end}
++},
++#line 31 "ftinf_rh.gperf"
++{ .name="arial",
++ .always_use_100={on, 0, maxp, end},
++ .edge_detection={on, 11, 11, 13, 13, end},
++ .spacing={on, 10, 11, 23, 25, 30, end},
++ .start={on, 11, 18, 23, 30, 30, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, 16, -24, end}
++},
++#line 87 "ftinf_rh.gperf"
++{ .name="corbel",
++ .stem_translating_only={on, 10, 16, end},
++ .stem_widths={on, 10, 21, maxp}
++},
++#line 71 "ftinf_rh.gperf"
++{ .name="canwell",
++ .stem_scaling={on, 13, 0, end}
++},
++#line 216 "ftinf_rh.gperf"
++{ .name="pragmata",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 67 "ftinf_rh.gperf"
++{ .name="cantarell",
++ .stem_translating_only={on, 11, 0, 12, 0, end},
++ .stem_widths={on, 10, 22, maxp,}
++},
++#line 39 "ftinf_rh.gperf"
++{ .name="arimo",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end}
++},
++#line 207 "ftinf_rh.gperf"
++{ .name="optima",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end},
++ .stem_scaling={on, 17, 1, end},
++ .stem_translating_only={on, 10, 0, 11, 0, 12, 0, end}
++},
++#line 63 "ftinf_rh.gperf"
++{ .name="candara",
++ .stem_scaling={on, 14, 1, 17, 1, end},
++ .stem_translating_only={on, 10, 16, end}
++},
++#line 77 "ftinf_rh.gperf"
++{ .name="comfortaa",
++ .stem_widths={on, 10, 19, 22, maxp},
++ .stem_scaling={on, 11, 0, end}
++},
++#line 161 "ftinf_rh.gperf"
++{ .name="liberation mono",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 18 "ftinf_rh.gperf"
++{ .name="andale mono",
++ .always_use_100={on, 0, maxp, end},
++ .stem_scaling={on, 11, 1, end},
++ .stem_widths={on, 10, 21, maxp,}
++},
++#line 256 "ftinf_rh.gperf"
++{ .name="verdana",
++ .always_use_100={on, 0, 14, 16, maxp, end},
++ .stem_scaling={on, 12, 1, 15, 1, end},
++ .stem_translating_only={on, 8, 16, 15, 16, 14, 32, 18, 32, 19, 24, end}
++},
++#line 74 "ftinf_rh.gperf"
++{ .name="century gothic",
++ .stem_widths={on, 10, 22, maxp,}
++},
++#line 91 "ftinf_rh.gperf"
++{ .name="courier new",
++ .always_use_100={on, 12, 12, end},
++ .edge_detection={on, 10, 12, end},
++ .m={on, 13, 1, 14, 1, end}
++},
++#line 23 "ftinf_rh.gperf"
++{ .name="arial narrow",
++ .stem_widths={on, 10, 21, maxp,}
++},
++#line 185 "ftinf_rh.gperf"
++{ .name="luxi sans",
++ .always_use_100={on, 13, 13, end},
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++#line 225 "ftinf_rh.gperf"
++{ .name="samba",
++ .stem_scaling={on, 11, 0, end}
++},
++#line 233 "ftinf_rh.gperf"
++{ .name="tahoma",
++ .always_use_100={on, 11, 11, 14, maxp, end},
++ .edge_detection={on, 11, 11, end},
++ .spacing={on, 10, 12, 18, 18, 30, end},
++ .start={on, 14, 17, 30, 100, 100, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 7, 32, 8, 32, 9, 32, end},
++},
++#line 164 "ftinf_rh.gperf"
++{ .name="liberation sans narrow",
++ .stem_widths={on,10, 22, maxp,}
++},
++#line 81 "ftinf_rh.gperf"
++{ .name="consolas",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 8, 32, 9, 32, end},
++ .stem_widths={on, 10, 20, maxp,},
++ .stem_scaling={on, 11, 1, end}
++},
++#line 203 "ftinf_rh.gperf"
++{ .name="open sans",
++ .stem_translating_only={on, 10, 16, 9, 16, end},
++ .stem_widths={on, 10, 20, maxp,}
++},
++#line 167 "ftinf_rh.gperf"
++{ .name="liberation sans",
++ .edge_detection={on, 11, 11, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end},
++ .stem_widths={on,10, 19, maxp,}
++},
++#line 193 "ftinf_rh.gperf"
++{ .name="monaco",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 101 "ftinf_rh.gperf"
++{ .name="cousine",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 176 "ftinf_rh.gperf"
++{ .name="lucida grande",
++ .stem_scaling={on, 13, 1, end},
++ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
++ .stem_widths={on, 10, 16, sw2pv, maxp},
++},
++#line 173 "ftinf_rh.gperf"
++{ .name="lucida console",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 196 "ftinf_rh.gperf"
++{ .name="myriad pro",
++ .stem_scaling={on, 14, 1, 17, 1, end},
++ .stem_translating_only={on, 10, 16, 11, 0, 9, 16, end}
++},
++#line 26 "ftinf_rh.gperf"
++{ .name="arial unicode ms",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
++},
++#line 213 "ftinf_rh.gperf"
++{ .name="palatino linotype",
++ .edge_detection={on, 0, 100, end}
++},
++#line 181 "ftinf_rh.gperf"
++{ .name="lucida sans unicode",
++ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
++ .stem_widths={on,10, 16, sw2pv, maxp,}
++},
++#line 140 "ftinf_rh.gperf"
++{ .name="futura",
++ .stem_widths={on, 10, 14, sw2pv, maxp,}
++},
++#line 147 "ftinf_rh.gperf"
++{ .name="georgia",
++ .stem_translating_only={on, 13, 16, 14, 16, 15, 0, end}
++},
++#line 125 "ftinf_rh.gperf"
++{ .name="freemono",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 200 "ftinf_rh.gperf"
++{ .name="nina",
++ .stem_scaling={on, 11, 0, 12, 0, 13, 0, end}
++},
++#line 121 "ftinf_rh.gperf"
++{ .name="essential pragmatapro",
++ .always_use_100={on, 0, maxp, end},
++ .m={on, 13, 0, 14, 0, end}
++},
++#line 247 "ftinf_rh.gperf"
++{ .name="trebuchet ms",
++ .always_use_100={on, 13, 13, end},
++ .stem_scaling={on, 13, 0, 17, 0, 20, 1, end},
++ .stem_translating_only={on, 10, 16, 11, 0, 8, 32, 9, 32, end},
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++#line 114 "ftinf_rh.gperf"
++{ .name="droid sans mono",
++ .m={on, 12, 0, end}
++},
++#line 104 "ftinf_rh.gperf"
++{ .name="dejavu sans mono",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 7, 16, 8, 32, 9, 16, end}
++},
++#line 57 "ftinf_rh.gperf"
++{ .name="calibri",
++ .always_use_100={on, 23, maxp, end},
++ .stem_scaling={on, 15, 1, 17, 1, 18, 1, end},
++ .stem_translating_only={on, 10, 16, 15, 0, end},
++ .stem_widths={on, 1, 10, 19, maxp,}
++},
++#line 156 "ftinf_rh.gperf"
++{ .name="inconsolata",
++ .stem_scaling={on, 12, 1, 15, 1, end},
++ .stem_translating_only={on, 10, 24, 9, 32, end},
++ .stem_widths={on, 10, 23, maxp,},
++},
++#line 96 "ftinf_rh.gperf"
++{ .name="courier",
++ .always_use_100={on, 0, maxp, end},
++ .m={on, 13, 1, 14, 1, end},
++ .stem_translating_only={on, 13, 16, 15, 0, end}
++},
++#line 128 "ftinf_rh.gperf"
++{ .name="freesans",
++ .always_use_100={on, 0, maxp, end},
++ .edge_detection={on, 11, 11, 13, 13, end},
++ .spacing={on, 10, 12, 18, 18, 30, end},
++ .start={on, 10, 18, 18, 25, 30, end},
++ .stem_scaling={on, 16, 0, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 9, 8, end}
++},
++#line 150 "ftinf_rh.gperf"
++{ .name="gill sans",
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++#line 117 "ftinf_rh.gperf"
++{ .name="droid sans",
++ .always_use_100={on, 12, 12, 15, 15, end},
++ .stem_translating_only={on, 8, 16, 9, 16, end}
++},
++#line 108 "ftinf_rh.gperf"
++{ .name="dejavu sans",
++ .always_use_100={on, 10, 14, 16, 17, end},
++ .m={on, 12, 0, end},
++ .stem_scaling={on, 12, 1, end},
++ .stem_translating_only={on, 8, 16, 15, -20, end}
++},
++#line 219 "ftinf_rh.gperf"
++{ .name="raleway",
++ .stem_scaling={on, 15, 0, end}
++},
++#line 153 "ftinf_rh.gperf"
++{ .name="helvetica cy",
++ .stem_widths={on, 10, 23, maxp,}
++},
++#line 228 "ftinf_rh.gperf"
++{ .name="segoe ui",
++ .always_use_100={on, 11, 12, 14, 14, end},
++ .stem_translating_only={on, 10, 0, 7, 32, 8, 16, 9, 24, end},
++ .stem_widths={on, 10, 23, maxp,}
++},
++#line 48 "ftinf_rh.gperf"
++{ .name="bitstream vera sans mono",
++ .always_use_100={on, 0, maxp, end}
++},
++#line 241 "ftinf_rh.gperf"
++{ .name="times new roman",
++ .always_use_100={on, 14, 14, 16, 16, end},
++ .bearing_correction={0, 100, end},
++ .stem_scaling={on, 17, 1, end},
++ .stem_translating_only={on, 17, 8, end}
++},
++#line 222 "ftinf_rh.gperf"
++{ .name="rokkitt",
++ .stem_widths={on, 10, 21, maxp,}
++},
++#line 143 "ftinf_rh.gperf"
++{ .name="garamond",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end}
++},
++#line 137 "ftinf_rh.gperf"
++{ .name="freeserif",
++ .stem_scaling={on, 13, 1, 17, 1, end}
++},
++#line 189 "ftinf_rh.gperf"
++{ .name="microsoft sans serif",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
++},
++#line 44 "ftinf_rh.gperf"
++{ .name="baskerville",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end}
++},
++#line 51 "ftinf_rh.gperf"
++{ .name="bitstream vera sans",
++ .always_use_100={on, 10, 14, 16, 17, end},
++ .m={on, 12, 0, end},
++ .stem_scaling={on ,12, 1, end},
++ .stem_translating_only={on, 8, 16, end}
++}
++ };
++
++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
++ {
++ register int key = _rules_hash (str, len);
++
++ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
++ {
++ register const struct sa_rules_s *resword;
++
++ switch (key - 3)
++ {
++ case 0:
++ resword = &wordlist[0];
++ goto compare;
++ case 3:
++ resword = &wordlist[1];
++ goto compare;
++ case 7:
++ resword = &wordlist[2];
++ goto compare;
++ case 8:
++ resword = &wordlist[3];
++ goto compare;
++ case 9:
++ resword = &wordlist[4];
++ goto compare;
++ case 10:
++ resword = &wordlist[5];
++ goto compare;
++ case 11:
++ resword = &wordlist[6];
++ goto compare;
++ case 12:
++ resword = &wordlist[7];
++ goto compare;
++ case 13:
++ resword = &wordlist[8];
++ goto compare;
++ case 14:
++ resword = &wordlist[9];
++ goto compare;
++ case 16:
++ resword = &wordlist[10];
++ goto compare;
++ case 17:
++ resword = &wordlist[11];
++ goto compare;
++ case 18:
++ resword = &wordlist[12];
++ goto compare;
++ case 19:
++ resword = &wordlist[13];
++ goto compare;
++ case 21:
++ resword = &wordlist[14];
++ goto compare;
++ case 23:
++ resword = &wordlist[15];
++ goto compare;
++ case 24:
++ resword = &wordlist[16];
++ goto compare;
++ case 26:
++ resword = &wordlist[17];
++ goto compare;
++ case 27:
++ resword = &wordlist[18];
++ goto compare;
++ case 28:
++ resword = &wordlist[19];
++ goto compare;
++ case 29:
++ resword = &wordlist[20];
++ goto compare;
++ case 30:
++ resword = &wordlist[21];
++ goto compare;
++ case 31:
++ resword = &wordlist[22];
++ goto compare;
++ case 32:
++ resword = &wordlist[23];
++ goto compare;
++ case 33:
++ resword = &wordlist[24];
++ goto compare;
++ case 34:
++ resword = &wordlist[25];
++ goto compare;
++ case 35:
++ resword = &wordlist[26];
++ goto compare;
++ case 36:
++ resword = &wordlist[27];
++ goto compare;
++ case 37:
++ resword = &wordlist[28];
++ goto compare;
++ case 38:
++ resword = &wordlist[29];
++ goto compare;
++ case 39:
++ resword = &wordlist[30];
++ goto compare;
++ case 41:
++ resword = &wordlist[31];
++ goto compare;
++ case 43:
++ resword = &wordlist[32];
++ goto compare;
++ case 44:
++ resword = &wordlist[33];
++ goto compare;
++ case 45:
++ resword = &wordlist[34];
++ goto compare;
++ case 46:
++ resword = &wordlist[35];
++ goto compare;
++ case 48:
++ resword = &wordlist[36];
++ goto compare;
++ case 49:
++ resword = &wordlist[37];
++ goto compare;
++ case 52:
++ resword = &wordlist[38];
++ goto compare;
++ case 53:
++ resword = &wordlist[39];
++ goto compare;
++ case 54:
++ resword = &wordlist[40];
++ goto compare;
++ case 58:
++ resword = &wordlist[41];
++ goto compare;
++ case 59:
++ resword = &wordlist[42];
++ goto compare;
++ case 60:
++ resword = &wordlist[43];
++ goto compare;
++ case 61:
++ resword = &wordlist[44];
++ goto compare;
++ case 62:
++ resword = &wordlist[45];
++ goto compare;
++ case 63:
++ resword = &wordlist[46];
++ goto compare;
++ case 64:
++ resword = &wordlist[47];
++ goto compare;
++ case 69:
++ resword = &wordlist[48];
++ goto compare;
++ case 70:
++ resword = &wordlist[49];
++ goto compare;
++ case 71:
++ resword = &wordlist[50];
++ goto compare;
++ case 72:
++ resword = &wordlist[51];
++ goto compare;
++ case 74:
++ resword = &wordlist[52];
++ goto compare;
++ case 75:
++ resword = &wordlist[53];
++ goto compare;
++ case 76:
++ resword = &wordlist[54];
++ goto compare;
++ case 77:
++ resword = &wordlist[55];
++ goto compare;
++ case 78:
++ resword = &wordlist[56];
++ goto compare;
++ case 81:
++ resword = &wordlist[57];
++ goto compare;
++ }
++ return 0;
++ compare:
++ {
++ register const char *s = resword->name;
++
++ if (*str == *s && !strcmp (str + 1, s + 1))
++ return resword;
++ }
++ }
++ }
++ return 0;
++}
++#line 261 "ftinf_rh.gperf"
++
++
++static const sa_rules_t*
++ftinf_rules( const char *name ){
++ if( name ){
++ enum {
++ max_wlen=31
++ };
++ char buf[max_wlen+1];
++ int len=strlen( name );
++ if( len <= max_wlen ){
++ int i;
++ for( i=0; i<len; ++i )
++ buf[i]=tolower( name[i] );
++ buf[len]='\0';
++ return _rules_get( buf, len );
++ }
++ }
++ return NULL;
++}
++/*
++ gperf --output-file=ftinf_rh.c ftinf_rh.gperf
++*/
+diff -ruN freetype2.orig/src/base/ftinf_rh.gperf freetype2.new/src/base/ftinf_rh.gperf
+--- freetype2.orig/src/base/ftinf_rh.gperf 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf_rh.gperf 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,283 @@
++%struct-type
++%define slot-name name
++%enum
++%switch=1
++%readonly-tables
++%omit-struct-type
++%define lookup-function-name _rules_get
++%define hash-function-name _rules_hash
++%{
++#include <ctype.h>
++static const struct sa_rules_s* _rules_get( const char*str, unsigned len );
++%}
++struct sa_rules_s;
++%%
++{ .name="---",
++ .synthesize_stems={on, 13, 13, end}
++},
++{ .name="andale mono",
++ .always_use_100={on, 0, maxp, end},
++ .stem_scaling={on, 11, 1, end},
++ .stem_widths={on, 10, 21, maxp,}
++},
++{ .name="arial narrow",
++ .stem_widths={on, 10, 21, maxp,}
++},
++{ .name="arial unicode ms",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
++},
++{ .name="arial",
++ .always_use_100={on, 0, maxp, end},
++ .edge_detection={on, 11, 11, 13, 13, end},
++ .spacing={on, 10, 11, 23, 25, 30, end},
++ .start={on, 11, 18, 23, 30, 30, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, 16, -24, end}
++},
++{ .name="arimo",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end}
++},
++{ .name="baskerville",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end}
++},
++{ .name="bitstream vera sans mono",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="bitstream vera sans",
++ .always_use_100={on, 10, 14, 16, 17, end},
++ .m={on, 12, 0, end},
++ .stem_scaling={on ,12, 1, end},
++ .stem_translating_only={on, 8, 16, end}
++},
++{ .name="calibri",
++ .always_use_100={on, 23, maxp, end},
++ .stem_scaling={on, 15, 1, 17, 1, 18, 1, end},
++ .stem_translating_only={on, 10, 16, 15, 0, end},
++ .stem_widths={on, 1, 10, 19, maxp,}
++},
++{ .name="candara",
++ .stem_scaling={on, 14, 1, 17, 1, end},
++ .stem_translating_only={on, 10, 16, end}
++},
++{ .name="cantarell",
++ .stem_translating_only={on, 11, 0, 12, 0, end},
++ .stem_widths={on, 10, 22, maxp,}
++},
++{ .name="canwell",
++ .stem_scaling={on, 13, 0, end}
++},
++{ .name="century gothic",
++ .stem_widths={on, 10, 22, maxp,}
++},
++{ .name="comfortaa",
++ .stem_widths={on, 10, 19, 22, maxp},
++ .stem_scaling={on, 11, 0, end}
++},
++{ .name="consolas",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 8, 32, 9, 32, end},
++ .stem_widths={on, 10, 20, maxp,},
++ .stem_scaling={on, 11, 1, end}
++},
++{ .name="corbel",
++ .stem_translating_only={on, 10, 16, end},
++ .stem_widths={on, 10, 21, maxp}
++},
++{ .name="courier new",
++ .always_use_100={on, 12, 12, end},
++ .edge_detection={on, 10, 12, end},
++ .m={on, 13, 1, 14, 1, end}
++},
++{ .name="courier",
++ .always_use_100={on, 0, maxp, end},
++ .m={on, 13, 1, 14, 1, end},
++ .stem_translating_only={on, 13, 16, 15, 0, end}
++},
++{ .name="cousine",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="dejavu sans mono",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 7, 16, 8, 32, 9, 16, end}
++},
++{ .name="dejavu sans",
++ .always_use_100={on, 10, 14, 16, 17, end},
++ .m={on, 12, 0, end},
++ .stem_scaling={on, 12, 1, end},
++ .stem_translating_only={on, 8, 16, 15, -20, end}
++},
++{ .name="droid sans mono",
++ .m={on, 12, 0, end}
++},
++{ .name="droid sans",
++ .always_use_100={on, 12, 12, 15, 15, end},
++ .stem_translating_only={on, 8, 16, 9, 16, end}
++},
++{ .name="essential pragmatapro",
++ .always_use_100={on, 0, maxp, end},
++ .m={on, 13, 0, 14, 0, end}
++},
++{ .name="freemono",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="freesans",
++ .always_use_100={on, 0, maxp, end},
++ .edge_detection={on, 11, 11, 13, 13, end},
++ .spacing={on, 10, 12, 18, 18, 30, end},
++ .start={on, 10, 18, 18, 25, 30, end},
++ .stem_scaling={on, 16, 0, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 16, 9, 8, end}
++},
++{ .name="freeserif",
++ .stem_scaling={on, 13, 1, 17, 1, end}
++},
++{ .name="futura",
++ .stem_widths={on, 10, 14, sw2pv, maxp,}
++},
++{ .name="garamond",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end}
++},
++{ .name="georgia",
++ .stem_translating_only={on, 13, 16, 14, 16, 15, 0, end}
++},
++{ .name="gill sans",
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++{ .name="helvetica cy",
++ .stem_widths={on, 10, 23, maxp,}
++},
++{ .name="inconsolata",
++ .stem_scaling={on, 12, 1, 15, 1, end},
++ .stem_translating_only={on, 10, 24, 9, 32, end},
++ .stem_widths={on, 10, 23, maxp,},
++},
++{ .name="liberation mono",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="liberation sans narrow",
++ .stem_widths={on,10, 22, maxp,}
++},
++{ .name="liberation sans",
++ .edge_detection={on, 11, 11, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 10, 8, 8, 32, 9, 32, end},
++ .stem_widths={on,10, 19, maxp,}
++},
++{ .name="lucida console",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="lucida grande",
++ .stem_scaling={on, 13, 1, end},
++ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
++ .stem_widths={on, 10, 16, sw2pv, maxp},
++},
++{ .name="lucida sans unicode",
++ .stem_translating_only={on, 13, 24, 14, 24, 8, 16, 9, 16, end},
++ .stem_widths={on,10, 16, sw2pv, maxp,}
++},
++{ .name="luxi sans",
++ .always_use_100={on, 13, 13, end},
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++{ .name="microsoft sans serif",
++ .always_use_100={on, 0, maxp, end},
++ .stem_translating_only={on, 10, 16, 8, 32, 9, 32, end}
++},
++{ .name="monaco",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="myriad pro",
++ .stem_scaling={on, 14, 1, 17, 1, end},
++ .stem_translating_only={on, 10, 16, 11, 0, 9, 16, end}
++},
++{ .name="nina",
++ .stem_scaling={on, 11, 0, 12, 0, 13, 0, end}
++},
++{ .name="open sans",
++ .stem_translating_only={on, 10, 16, 9, 16, end},
++ .stem_widths={on, 10, 20, maxp,}
++},
++{ .name="optima",
++ .brightness={on, 0, -20, end},
++ .contrast={on, 0, 25, end},
++ .stem_scaling={on, 17, 1, end},
++ .stem_translating_only={on, 10, 0, 11, 0, 12, 0, end}
++},
++{ .name="palatino linotype",
++ .edge_detection={on, 0, 100, end}
++},
++{ .name="pragmata",
++ .always_use_100={on, 0, maxp, end}
++},
++{ .name="raleway",
++ .stem_scaling={on, 15, 0, end}
++},
++{ .name="rokkitt",
++ .stem_widths={on, 10, 21, maxp,}
++},
++{ .name="samba",
++ .stem_scaling={on, 11, 0, end}
++},
++{ .name="segoe ui",
++ .always_use_100={on, 11, 12, 14, 14, end},
++ .stem_translating_only={on, 10, 0, 7, 32, 8, 16, 9, 24, end},
++ .stem_widths={on, 10, 23, maxp,}
++},
++{ .name="tahoma",
++ .always_use_100={on, 11, 11, 14, maxp, end},
++ .edge_detection={on, 11, 11, end},
++ .spacing={on, 10, 12, 18, 18, 30, end},
++ .start={on, 14, 17, 30, 100, 100, end},
++ .stem_translating={on, 11, 32, end},
++ .stem_translating_only={on, 7, 32, 8, 32, 9, 32, end},
++},
++{ .name="times new roman",
++ .always_use_100={on, 14, 14, 16, 16, end},
++ .bearing_correction={0, 100, end},
++ .stem_scaling={on, 17, 1, end},
++ .stem_translating_only={on, 17, 8, end}
++},
++{ .name="trebuchet ms",
++ .always_use_100={on, 13, 13, end},
++ .stem_scaling={on, 13, 0, 17, 0, 20, 1, end},
++ .stem_translating_only={on, 10, 16, 11, 0, 8, 32, 9, 32, end},
++ .stem_widths={on, 10, 17, sw2pv, maxp,}
++},
++{ .name="ubuntu",
++ .always_use_100={on, 12, 13, 15, 15, end}
++},
++{ .name="verdana",
++ .always_use_100={on, 0, 14, 16, maxp, end},
++ .stem_scaling={on, 12, 1, 15, 1, end},
++ .stem_translating_only={on, 8, 16, 15, 16, 14, 32, 18, 32, 19, 24, end}
++},
++%%
++
++static const sa_rules_t*
++ftinf_rules( const char *name ){
++ if( name ){
++ enum {
++ max_wlen=31
++ };
++ char buf[max_wlen+1];
++ int len=strlen( name );
++ if( len <= max_wlen ){
++ int i;
++ for( i=0; i<len; ++i )
++ buf[i]=tolower( name[i] );
++ buf[len]='\0';
++ return _rules_get( buf, len );
++ }
++ }
++ return NULL;
++}
++/*
++ gperf --output-file=ftinf_rh.c ftinf_rh.gperf
++*/
+diff -ruN freetype2.orig/src/base/ftinf_sh.c freetype2.new/src/base/ftinf_sh.c
+--- freetype2.orig/src/base/ftinf_sh.c 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf_sh.c 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,463 @@
++/* ANSI-C code produced by gperf version 3.1 */
++/* Command-line: gperf --output-file=ftinf_sh.c ftinf_sh.gperf */
++/* Computed positions: -k'1,$' */
++
++#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
++ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
++ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
++ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
++ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
++ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
++ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
++ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
++ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
++ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
++ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
++ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
++ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
++ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
++ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
++ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
++ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
++ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
++ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
++ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
++ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
++ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
++ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
++/* The character set is not based on ISO-646. */
++#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
++#endif
++
++#line 9 "ftinf_sh.gperf"
++
++#include <ctype.h>
++static const struct ftinf_s* _settings_get( const char*str, unsigned len);
++/* maximum key range = 37, duplicates = 0 */
++
++#ifdef __GNUC__
++__inline
++#else
++#ifdef __cplusplus
++inline
++#endif
++#endif
++static unsigned int
++_settings_hash (register const char *str, register unsigned int len)
++{
++ static const unsigned char asso_values[] =
++ {
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 13,
++ 8, 30, 25, 20, 40, 10, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 5, 40, 0,
++ 0, 0, 40, 40, 10, 0, 40, 40, 15, 5,
++ 10, 0, 10, 40, 40, 0, 0, 0, 0, 0,
++ 0, 0, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
++ 40, 40, 40, 40, 40, 40
++ };
++ return len + asso_values[(unsigned char)str[len - 1]] + asso_values[(unsigned char)str[0]];
++}
++
++#ifdef __GNUC__
++__inline
++#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
++__attribute__ ((__gnu_inline__))
++#endif
++#endif
++const struct ftinf_s *
++_settings_get (register const char *str, register unsigned int len)
++{
++ enum
++ {
++ TOTAL_KEYWORDS = 22,
++ MIN_WORD_LENGTH = 3,
++ MAX_WORD_LENGTH = 14,
++ MIN_HASH_VALUE = 3,
++ MAX_HASH_VALUE = 39
++ };
++
++ static const struct ftinf_s wordlist[] =
++ {
++#line 76 "ftinf_sh.gperf"
++{ .name="osx",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .bold_embolden_x_value=16,
++ .brightness=10,
++ .contrast=20,
++ .filter_params={on, 3, 32, 38, 32, 3},
++ .gamma_correction={1000, 80},
++ .global_embolden_y_value=8,
++ .grayscale_filter_strength=25,
++},
++#line 37 "ftinf_sh.gperf"
++{ .name="ipad",
++ .filter_params={on, 0, 0, 100, 0, 0},
++ .gamma_correction={1000, 80},
++ .grayscale_filter_strength=100
++},
++#line 114 "ftinf_sh.gperf"
++{ .name="shove",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=100,
++ .stem_fitting_strength=100,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++#line 126 "ftinf_sh.gperf"
++{ .name="ubuntu",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=-10,
++ .contrast=15,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={1000, 80},
++ .use_various_tweaks=true
++},
++#line 27 "ftinf_sh.gperf"
++{ .name="classic",
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .filter_params={on, 6, 25, 38, 25, 6},
++ .gamma_correction={0, 100},
++ .use_various_tweaks=true
++},
++#line 34 "ftinf_sh.gperf"
++{ .name="disabled",
++ .gamma_correction={0, 100},
++},
++#line 100 "ftinf_sh.gperf"
++{ .name="sharpened",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=25,
++ .stem_snapping_sliding_scale=40,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++#line 42 "ftinf_sh.gperf"
++{ .name="infinality",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=25,
++ .stem_snapping_sliding_scale=40,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=5
++},
++#line 15 "ftinf_sh.gperf"
++{ .name="custom",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 8, 24, 48, 24, 8},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=75,
++ .stem_fitting_strength=50,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++#line 180 "ftinf_sh.gperf"
++{ .name="vanilla",
++ .filter_params={on, 6, 25, 38, 25, 6},
++ .gamma_correction={0, 100},
++},
++#line 184 "ftinf_sh.gperf"
++{ .name="windows7light",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .contrast=20,
++ .filter_params={on, 20, 25, 38, 25, 05},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 160},
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=100
++},
++#line 226 "ftinf_sh.gperf"
++{ .name="windowsxplight",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=20,
++ .contrast=30,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 120},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++#line 64 "ftinf_sh.gperf"
++{ .name="nudge",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_various_tweaks=true,
++},
++#line 144 "ftinf_sh.gperf"
++{ .name="ultimate2",
++ .filter_params={on, 6, 22, 36, 22, 6},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++#line 197 "ftinf_sh.gperf"
++{ .name="windows7",
++ .filter_params={on, 20, 25, 42, 25, 06},
++ .fringe_filter_strength=100,
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .windows_style_sharpening_strength=65,
++ .gamma_correction={1000, 120},
++ .brightness=10,
++ .contrast=20,
++ .use_various_tweaks=true,
++ .autohint_snap_stem_height=100,
++ .use_known_settings_on_selected_fonts=true,
++},
++#line 210 "ftinf_sh.gperf"
++{ .name="windowsxp",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=10,
++ .contrast=20,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 120},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++#line 56 "ftinf_sh.gperf"
++{ .name="linux",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .gamma_correction={0, 100},
++ .use_various_tweaks=true
++},
++#line 135 "ftinf_sh.gperf"
++{ .name="ultimate1",
++ .filter_params={on, 4, 22, 38, 22, 4},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++#line 87 "ftinf_sh.gperf"
++{ .name="push",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=75,
++ .stem_fitting_strength=50,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++#line 171 "ftinf_sh.gperf"
++{ .name="ultimate5",
++ .filter_params={on, 12, 28, 42, 28, 12},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++#line 162 "ftinf_sh.gperf"
++{ .name="ultimate4",
++ .filter_params={on, 10, 25, 37, 25, 10},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++#line 153 "ftinf_sh.gperf"
++{ .name="ultimate3",
++ .filter_params={on, 8, 24, 36, 24, 8},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++}
++ };
++
++ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
++ {
++ register int key = _settings_hash (str, len);
++
++ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
++ {
++ register const struct ftinf_s *resword;
++
++ switch (key - 3)
++ {
++ case 0:
++ resword = &wordlist[0];
++ goto compare;
++ case 1:
++ resword = &wordlist[1];
++ goto compare;
++ case 2:
++ resword = &wordlist[2];
++ goto compare;
++ case 3:
++ resword = &wordlist[3];
++ goto compare;
++ case 4:
++ resword = &wordlist[4];
++ goto compare;
++ case 5:
++ resword = &wordlist[5];
++ goto compare;
++ case 6:
++ resword = &wordlist[6];
++ goto compare;
++ case 7:
++ resword = &wordlist[7];
++ goto compare;
++ case 8:
++ resword = &wordlist[8];
++ goto compare;
++ case 9:
++ resword = &wordlist[9];
++ goto compare;
++ case 10:
++ resword = &wordlist[10];
++ goto compare;
++ case 11:
++ resword = &wordlist[11];
++ goto compare;
++ case 12:
++ resword = &wordlist[12];
++ goto compare;
++ case 14:
++ resword = &wordlist[13];
++ goto compare;
++ case 15:
++ resword = &wordlist[14];
++ goto compare;
++ case 16:
++ resword = &wordlist[15];
++ goto compare;
++ case 17:
++ resword = &wordlist[16];
++ goto compare;
++ case 19:
++ resword = &wordlist[17];
++ goto compare;
++ case 21:
++ resword = &wordlist[18];
++ goto compare;
++ case 26:
++ resword = &wordlist[19];
++ goto compare;
++ case 31:
++ resword = &wordlist[20];
++ goto compare;
++ case 36:
++ resword = &wordlist[21];
++ goto compare;
++ }
++ return 0;
++ compare:
++ {
++ register const char *s = resword->name;
++
++ if (*str == *s && !strcmp (str + 1, s + 1))
++ return resword;
++ }
++ }
++ }
++ return 0;
++}
++#line 242 "ftinf_sh.gperf"
++
++
++static const ftinf_t*
++ftinf_settings( const char *name ){
++ if( name ){
++ enum {
++ max_wlen=31
++ };
++ char buf[max_wlen+1];
++ int len=strlen( name );
++ if( len <= max_wlen ){
++ int i;
++ for( i=0; i<len; ++i )
++ buf[i]=tolower( name[i] );
++ buf[len]='\0';
++ return _settings_get( buf, len );
++ }
++ }
++ return NULL;
++}
++/*
++ gperf --output-file=ftinf_sh.c ftinf_sh.gperf
++*/
+diff -ruN freetype2.orig/src/base/ftinf_sh.gperf freetype2.new/src/base/ftinf_sh.gperf
+--- freetype2.orig/src/base/ftinf_sh.gperf 1969-12-31 19:00:00.000000000 -0500
++++ freetype2.new/src/base/ftinf_sh.gperf 2017-05-23 17:10:16.903407566 -0400
+@@ -0,0 +1,264 @@
++%struct-type
++%define slot-name name
++%enum
++%switch=1
++%readonly-tables
++%omit-struct-type
++%define lookup-function-name _settings_get
++%define hash-function-name _settings_hash
++%{
++#include <ctype.h>
++static const struct ftinf_s* _settings_get( const char*str, unsigned len);
++%}
++struct ftinf_s;
++%%
++{ .name="custom",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 8, 24, 48, 24, 8},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=75,
++ .stem_fitting_strength=50,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++{ .name="classic",
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .filter_params={on, 6, 25, 38, 25, 6},
++ .gamma_correction={0, 100},
++ .use_various_tweaks=true
++},
++{ .name="disabled",
++ .gamma_correction={0, 100},
++},
++{ .name="ipad",
++ .filter_params={on, 0, 0, 100, 0, 0},
++ .gamma_correction={1000, 80},
++ .grayscale_filter_strength=100
++},
++{ .name="infinality",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=25,
++ .stem_snapping_sliding_scale=40,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=5
++},
++{ .name="linux",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .gamma_correction={0, 100},
++ .use_various_tweaks=true
++},
++{ .name="nudge",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_various_tweaks=true,
++},
++{ .name="osx",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .bold_embolden_x_value=16,
++ .brightness=10,
++ .contrast=20,
++ .filter_params={on, 3, 32, 38, 32, 3},
++ .gamma_correction={1000, 80},
++ .global_embolden_y_value=8,
++ .grayscale_filter_strength=25,
++},
++{ .name="push",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=75,
++ .stem_fitting_strength=50,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++{ .name="sharpened",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=25,
++ .stem_fitting_strength=25,
++ .stem_snapping_sliding_scale=40,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++{ .name="shove",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_increase_glyph_heights=true,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=100,
++ .stem_fitting_strength=100,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true
++},
++{ .name="ubuntu",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=-10,
++ .contrast=15,
++ .filter_params={on, 11, 22, 38, 22, 11},
++ .gamma_correction={1000, 80},
++ .use_various_tweaks=true
++},
++{ .name="ultimate1",
++ .filter_params={on, 4, 22, 38, 22, 4},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++{ .name="ultimate2",
++ .filter_params={on, 6, 22, 36, 22, 6},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++{ .name="ultimate3",
++ .filter_params={on, 8, 24, 36, 24, 8},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++{ .name="ultimate4",
++ .filter_params={on, 10, 25, 37, 25, 10},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++{ .name="ultimate5",
++ .filter_params={on, 12, 28, 42, 28, 12},
++ .fringe_filter_strength=25,
++ .gamma_correction={0, 100},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=25
++},
++{ .name="vanilla",
++ .filter_params={on, 6, 25, 38, 25, 6},
++ .gamma_correction={0, 100},
++},
++{ .name="windows7light",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .contrast=20,
++ .filter_params={on, 20, 25, 38, 25, 05},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 160},
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=100
++},
++{ .name="windows7",
++ .filter_params={on, 20, 25, 42, 25, 06},
++ .fringe_filter_strength=100,
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_vertical_stem_darken_strength=25,
++ .windows_style_sharpening_strength=65,
++ .gamma_correction={1000, 120},
++ .brightness=10,
++ .contrast=20,
++ .use_various_tweaks=true,
++ .autohint_snap_stem_height=100,
++ .use_known_settings_on_selected_fonts=true,
++},
++{ .name="windowsxp",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=10,
++ .contrast=20,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 120},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++{ .name="windowsxplight",
++ .autohint_horizontal_stem_darken_strength=10,
++ .autohint_snap_stem_height=100,
++ .autohint_vertical_stem_darken_strength=25,
++ .brightness=20,
++ .contrast=30,
++ .filter_params={on, 6, 25, 44, 25, 6},
++ .fringe_filter_strength=100,
++ .gamma_correction={1000, 120},
++ .stem_alignment_strength=15,
++ .stem_fitting_strength=15,
++ .stem_snapping_sliding_scale=30,
++ .use_known_settings_on_selected_fonts=true,
++ .use_various_tweaks=true,
++ .windows_style_sharpening_strength=65
++},
++%%
++
++static const ftinf_t*
++ftinf_settings( const char *name ){
++ if( name ){
++ enum {
++ max_wlen=31
++ };
++ char buf[max_wlen+1];
++ int len=strlen( name );
++ if( len <= max_wlen ){
++ int i;
++ for( i=0; i<len; ++i )
++ buf[i]=tolower( name[i] );
++ buf[len]='\0';
++ return _settings_get( buf, len );
++ }
++ }
++ return NULL;
++}
++/*
++ gperf --output-file=ftinf_sh.c ftinf_sh.gperf
++*/
diff --git a/0004-Enable-long-PCF-family-names.patch b/0004-Enable-long-PCF-family-names.patch
new file mode 100644
index 000000000000..675423a7c472
--- /dev/null
+++ b/0004-Enable-long-PCF-family-names.patch
@@ -0,0 +1,25 @@
+From 62da6a0f7f5cb77859a793863c386c452411e2a6 Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
+Date: Sun, 14 May 2017 18:09:31 +0200
+Subject: [PATCH 4/4] Enable long PCF family names
+
+---
+ include/freetype/config/ftoption.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/freetype/config/ftoption.h b/include/freetype/config/ftoption.h
+index ebb44acdbbef9a47..0b39b417162707e4 100644
+--- a/include/freetype/config/ftoption.h
++++ b/include/freetype/config/ftoption.h
+@@ -865,7 +865,7 @@ FT_BEGIN_HEADER
+ /* If this option is activated, it can be controlled with the */
+ /* `no-long-family-names' property of the pcf driver module. */
+ /* */
+-/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */
++#define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES
+
+
+ /*************************************************************************/
+--
+2.13.0
+
diff --git a/0005-freetype-2.5.2-more-demos.patch b/0005-freetype-2.5.2-more-demos.patch
new file mode 100644
index 000000000000..e737cb7dafe7
--- /dev/null
+++ b/0005-freetype-2.5.2-more-demos.patch
@@ -0,0 +1,17 @@
+--- ft2demos-2.5.2/Makefile
++++ ft2demos-2.5.2/Makefile
+@@ -296,10 +296,10 @@ else
+ # The following programs are not compiled automatically; either comment
+ # out the affected line or use the program name as a Makefile target.
+ #
+- # EXES += ftchkwd
+- # EXES += ftmemchk
+- # EXES += ftpatchk
+- # EXES += fttimer
++ EXES += ftchkwd
++ EXES += ftmemchk
++ EXES += ftpatchk
++ EXES += fttimer
+ # EXES += testname
+
+ exes: $(EXES:%=$(BIN_DIR_2)/%$E)
diff --git a/0005-freetype-2.5.2-more-demos.patch.html b/0005-freetype-2.5.2-more-demos.patch.html
new file mode 100644
index 000000000000..5f117fae2cb3
--- /dev/null
+++ b/0005-freetype-2.5.2-more-demos.patch.html
@@ -0,0 +1,606 @@
+
+
+
+
+
+
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+
+
+
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/frameworks-81a59bf26d881d29286674f6deefe779c444382fff322085b50ba455460ccae5.css" media="all" rel="stylesheet" />
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/github-cc9de0e8eacc2e4692137e919b3627e9d539401c99d4e78b4a344c5fe153899a.css" media="all" rel="stylesheet" />
+
+
+ <link crossorigin="anonymous" href="https://assets-cdn.github.com/assets/site-0047c348443848937ad9891b690c4acb6ee0d96263d91e9b1725194e65869e91.css" media="all" rel="stylesheet" />
+
+
+ <meta name="viewport" content="width=device-width">
+
+ <title>kagayaki/0005-freetype-2.5.2-more-demos.patch at master · julroy67/kagayaki · GitHub</title>
+ <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">
+ <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
+ <meta property="fb:app_id" content="1401488693436528">
+
+
+ <meta content="https://avatars3.githubusercontent.com/u/198724?v=3&amp;s=400" property="og:image" /><meta content="GitHub" property="og:site_name" /><meta content="object" property="og:type" /><meta content="julroy67/kagayaki" property="og:title" /><meta content="https://github.com/julroy67/kagayaki" property="og:url" /><meta content="kagayaki - Kagayaki font configuration for Archlinux (infinality)" property="og:description" />
+
+ <link rel="assets" href="https://assets-cdn.github.com/">
+
+ <meta name="pjax-timeout" content="1000">
+
+ <meta name="request-id" content="E9E8:6851:5E95DE0:8EBF122:5924A7C7" data-pjax-transient>
+
+
+ <meta name="selected-link" value="repo_source" data-pjax-transient>
+
+ <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
+<meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
+ <meta name="google-analytics" content="UA-3769691-2">
+
+<meta content="collector.githubapp.com" name="octolytics-host" /><meta content="github" name="octolytics-app-id" /><meta content="https://collector.githubapp.com/github-external/browser_event" name="octolytics-event-url" /><meta content="E9E8:6851:5E95DE0:8EBF122:5924A7C7" name="octolytics-dimension-request_id" />
+<meta content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-pjax-transient="true" name="analytics-location" />
+
+
+
+
+ <meta class="js-ga-set" name="dimension1" content="Logged Out">
+
+
+
+
+ <meta name="hostname" content="github.com">
+ <meta name="user-login" content="">
+
+ <meta name="expected-hostname" content="github.com">
+ <meta name="js-proxy-site-detection-payload" content="NzlhYjY4MTUxMTMxNTQ2ODlhMDkyMmNhZjE3MjkyY2Y1OWVhN2NkYTQxMDRmNDI4NTZkYzI0OGJlOWViNDNjOHx7InJlbW90ZV9hZGRyZXNzIjoiMjQuMTg0Ljc0LjEzMyIsInJlcXVlc3RfaWQiOiJFOUU4OjY4NTE6NUU5NURFMDo4RUJGMTIyOjU5MjRBN0M3IiwidGltZXN0YW1wIjoxNDk1NTc0NDcyLCJob3N0IjoiZ2l0aHViLmNvbSJ9">
+
+
+ <meta name="html-safe-nonce" content="53aae4eb9a06afbd4ed184dd24f9128fed3cefdb">
+
+ <meta http-equiv="x-pjax-version" content="41915c7ca180787506dc821fa760322f">
+
+
+
+ <meta name="description" content="kagayaki - Kagayaki font configuration for Archlinux (infinality)">
+ <meta name="go-import" content="github.com/julroy67/kagayaki git https://github.com/julroy67/kagayaki.git">
+
+ <meta content="198724" name="octolytics-dimension-user_id" /><meta content="julroy67" name="octolytics-dimension-user_login" /><meta content="77477681" name="octolytics-dimension-repository_id" /><meta content="julroy67/kagayaki" name="octolytics-dimension-repository_nwo" /><meta content="true" name="octolytics-dimension-repository_public" /><meta content="false" name="octolytics-dimension-repository_is_fork" /><meta content="77477681" name="octolytics-dimension-repository_network_root_id" /><meta content="julroy67/kagayaki" name="octolytics-dimension-repository_network_root_nwo" />
+ <link href="https://github.com/julroy67/kagayaki/commits/master.atom" rel="alternate" title="Recent Commits to kagayaki:master" type="application/atom+xml">
+
+
+ <link rel="canonical" href="https://github.com/julroy67/kagayaki/blob/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" data-pjax-transient>
+
+
+ <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">
+
+ <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">
+
+ <link rel="mask-icon" href="https://assets-cdn.github.com/pinned-octocat.svg" color="#000000">
+ <link rel="icon" type="image/x-icon" href="https://assets-cdn.github.com/favicon.ico">
+
+<meta name="theme-color" content="#1e2327">
+
+
+
+ </head>
+
+ <body class="logged-out env-production page-blob">
+
+
+
+
+ <div class="position-relative js-header-wrapper ">
+ <a href="#start-of-content" tabindex="1" class="accessibility-aid js-skip-to-content">Skip to content</a>
+ <div id="js-pjax-loader-bar" class="pjax-loader-bar"><div class="progress"></div></div>
+
+
+
+
+
+
+
+ <header class="site-header js-details-container Details" role="banner">
+ <div class="container-responsive">
+ <a class="header-logo-invertocat" href="https://github.com/" aria-label="Homepage" data-ga-click="(Logged out) Header, go to homepage, icon:logo-wordmark">
+ <svg aria-hidden="true" class="octicon octicon-mark-github" height="32" version="1.1" viewBox="0 0 16 16" width="32"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+ </a>
+
+ <button class="btn-link float-right site-header-toggle js-details-target" type="button" aria-label="Toggle navigation">
+ <svg aria-hidden="true" class="octicon octicon-three-bars" height="24" version="1.1" viewBox="0 0 12 16" width="18"><path fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0 4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59 11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1 .59-1z"/></svg>
+ </button>
+
+ <div class="site-header-menu">
+ <nav class="site-header-nav">
+ <a href="/features" class="js-selected-navigation-item nav-item" data-ga-click="Header, click, Nav menu - item:features" data-selected-links="/features /features">
+ Features
+</a> <a href="/business" class="js-selected-navigation-item nav-item" data-ga-click="Header, click, Nav menu - item:business" data-selected-links="/business /business/security /business/customers /business">
+ Business
+</a> <a href="/explore" class="js-selected-navigation-item nav-item" data-ga-click="Header, click, Nav menu - item:explore" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship /showcases /explore">
+ Explore
+</a> <a href="/marketplace" class="js-selected-navigation-item nav-item" data-ga-click="Header, click, Nav menu - item:marketplace" data-selected-links=" /marketplace">
+ Marketplace
+</a> <a href="/pricing" class="js-selected-navigation-item nav-item" data-ga-click="Header, click, Nav menu - item:pricing" data-selected-links="/pricing /pricing/developer /pricing/team /pricing/business-hosted /pricing/business-enterprise /pricing">
+ Pricing
+</a> </nav>
+
+ <div class="site-header-actions">
+ <div class="header-search scoped-search site-scoped-search js-site-search" role="search">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="/julroy67/kagayaki/search" class="js-site-search-form" data-scoped-search-url="/julroy67/kagayaki/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+ <label class="form-control header-search-wrapper js-chromeless-input-container">
+ <a href="/julroy67/kagayaki/blob/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" class="header-search-scope no-underline">This repository</a>
+ <input type="text"
+ class="form-control header-search-input js-site-search-focus js-site-search-field is-clearable"
+ data-hotkey="s"
+ name="q"
+ value=""
+ placeholder="Search"
+ aria-label="Search this repository"
+ data-unscoped-placeholder="Search GitHub"
+ data-scoped-placeholder="Search"
+ autocapitalize="off">
+ <input type="hidden" class="js-site-search-type-field" name="type" >
+ </label>
+</form></div>
+
+
+ <a class="text-bold site-header-link" href="/login?return_to=%2Fjulroy67%2Fkagayaki%2Fblob%2Fmaster%2Fbase%2Ffreetype2-kagayaki%2F0005-freetype-2.5.2-more-demos.patch" data-ga-click="(Logged out) Header, clicked Sign in, text:sign-in">Sign in</a>
+ <span class="text-gray">or</span>
+ <a class="text-bold site-header-link" href="/join?source=header-repo" data-ga-click="(Logged out) Header, clicked Sign up, text:sign-up">Sign up</a>
+ </div>
+ </div>
+ </div>
+</header>
+
+
+ </div>
+
+ <div id="start-of-content" class="accessibility-aid"></div>
+
+ <div id="js-flash-container">
+</div>
+
+
+
+ <div role="main">
+ <div itemscope itemtype="http://schema.org/SoftwareSourceCode">
+ <div id="js-repo-pjax-container" data-pjax-container>
+
+
+
+
+ <div class="pagehead repohead instapaper_ignore readability-menu experiment-repo-nav">
+ <div class="container repohead-details-container">
+
+ <ul class="pagehead-actions">
+ <li>
+ <a href="/login?return_to=%2Fjulroy67%2Fkagayaki"
+ class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+ aria-label="You must be signed in to watch a repository" rel="nofollow">
+ <svg aria-hidden="true" class="octicon octicon-eye" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14 16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8 4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2 2-2 1.11 0 2 .89 2 2z"/></svg>
+ Watch
+ </a>
+ <a class="social-count" href="/julroy67/kagayaki/watchers"
+ aria-label="5 users are watching this repository">
+ 5
+ </a>
+
+ </li>
+
+ <li>
+ <a href="/login?return_to=%2Fjulroy67%2Fkagayaki"
+ class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+ aria-label="You must be signed in to star a repository" rel="nofollow">
+ <svg aria-hidden="true" class="octicon octicon-star" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6 3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg>
+ Star
+ </a>
+
+ <a class="social-count js-social-count" href="/julroy67/kagayaki/stargazers"
+ aria-label="5 users starred this repository">
+ 5
+ </a>
+
+ </li>
+
+ <li>
+ <a href="/login?return_to=%2Fjulroy67%2Fkagayaki"
+ class="btn btn-sm btn-with-count tooltipped tooltipped-n"
+ aria-label="You must be signed in to fork a repository" rel="nofollow">
+ <svg aria-hidden="true" class="octicon octicon-repo-forked" height="16" version="1.1" viewBox="0 0 10 16" width="10"><path fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3 6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993 1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8 1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+ Fork
+ </a>
+
+ <a href="/julroy67/kagayaki/network" class="social-count"
+ aria-label="2 users forked this repository">
+ 2
+ </a>
+ </li>
+</ul>
+
+ <h1 class="public ">
+ <svg aria-hidden="true" class="octicon octicon-repo" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M4 9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1 1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1 1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
+ <span class="author" itemprop="author"><a href="/julroy67" class="url fn" rel="author">julroy67</a></span><!--
+--><span class="path-divider">/</span><!--
+--><strong itemprop="name"><a href="/julroy67/kagayaki" data-pjax="#js-repo-pjax-container">kagayaki</a></strong>
+
+</h1>
+
+ </div>
+ <div class="container">
+
+<nav class="reponav js-repo-nav js-sidenav-container-pjax"
+ itemscope
+ itemtype="http://schema.org/BreadcrumbList"
+ role="navigation"
+ data-pjax="#js-repo-pjax-container">
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/julroy67/kagayaki" class="js-selected-navigation-item selected reponav-item" data-hotkey="g c" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches /julroy67/kagayaki" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-code" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14 8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
+ <span itemprop="name">Code</span>
+ <meta itemprop="position" content="1">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/julroy67/kagayaki/issues" class="js-selected-navigation-item reponav-item" data-hotkey="g i" data-selected-links="repo_issues repo_labels repo_milestones /julroy67/kagayaki/issues" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-issue-opened" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"/></svg>
+ <span itemprop="name">Issues</span>
+ <span class="Counter">1</span>
+ <meta itemprop="position" content="2">
+</a> </span>
+
+ <span itemscope itemtype="http://schema.org/ListItem" itemprop="itemListElement">
+ <a href="/julroy67/kagayaki/pulls" class="js-selected-navigation-item reponav-item" data-hotkey="g p" data-selected-links="repo_pulls /julroy67/kagayaki/pulls" itemprop="url">
+ <svg aria-hidden="true" class="octicon octicon-git-pull-request" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3 3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993 1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0 0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0 1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2z"/></svg>
+ <span itemprop="name">Pull requests</span>
+ <span class="Counter">0</span>
+ <meta itemprop="position" content="3">
+</a> </span>
+
+ <a href="/julroy67/kagayaki/projects" class="js-selected-navigation-item reponav-item" data-selected-links="repo_projects new_repo_project repo_project /julroy67/kagayaki/projects">
+ <svg aria-hidden="true" class="octicon octicon-project" height="16" version="1.1" viewBox="0 0 15 16" width="15"><path fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4 4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0 0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
+ Projects
+ <span class="Counter" >0</span>
+</a>
+
+
+ <div class="reponav-dropdown js-menu-container">
+ <button type="button" class="btn-link reponav-item reponav-dropdown js-menu-target " data-no-toggle aria-expanded="false" aria-haspopup="true">
+ Insights
+ <svg aria-hidden="true" class="octicon octicon-triangle-down v-align-middle text-gray" height="11" version="1.1" viewBox="0 0 12 16" width="8"><path fill-rule="evenodd" d="M0 5l6 6 6-6z"/></svg>
+ </button>
+ <div class="dropdown-menu-content js-menu-content">
+ <div class="dropdown-menu dropdown-menu-sw">
+ <a class="dropdown-item" href="/julroy67/kagayaki/pulse" data-skip-pjax>
+ <svg aria-hidden="true" class="octicon octicon-pulse" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38 8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8z"/></svg>
+ Pulse
+ </a>
+ <a class="dropdown-item" href="/julroy67/kagayaki/graphs" data-skip-pjax>
+ <svg aria-hidden="true" class="octicon octicon-graph" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4 0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
+ Graphs
+ </a>
+ </div>
+ </div>
+ </div>
+</nav>
+
+ </div>
+ </div>
+
+<div class="container new-discussion-timeline experiment-repo-nav">
+ <div class="repository-content">
+
+
+
+
+<a href="/julroy67/kagayaki/blob/6101ded718b29f67f38054f2f05b8943c39d78cd/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" class="d-none js-permalink-shortcut" data-hotkey="y">Permalink</a>
+
+<!-- blob contrib key: blob_contributors:v21:4f37a77f4990702bd3d16c885ff74735 -->
+
+<div class="file-navigation js-zeroclipboard-container">
+
+<div class="select-menu branch-select-menu js-menu-container js-select-menu float-left">
+ <button class=" btn btn-sm select-menu-button js-menu-target css-truncate" data-hotkey="w"
+
+ type="button" aria-label="Switch branches or tags" tabindex="0" aria-haspopup="true">
+ <i>Branch:</i>
+ <span class="js-select-button css-truncate-target">master</span>
+ </button>
+
+ <div class="select-menu-modal-holder js-menu-content js-navigation-container" data-pjax>
+
+ <div class="select-menu-modal">
+ <div class="select-menu-header">
+ <svg aria-label="Close" class="octicon octicon-x js-menu-close" height="16" role="img" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+ <span class="select-menu-title">Switch branches/tags</span>
+ </div>
+
+ <div class="select-menu-filters">
+ <div class="select-menu-text-filter">
+ <input type="text" aria-label="Filter branches/tags" id="context-commitish-filter-field" class="form-control js-filterable-field js-navigation-enable" placeholder="Filter branches/tags">
+ </div>
+ <div class="select-menu-tabs">
+ <ul>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="branches" data-filter-placeholder="Filter branches/tags" class="js-select-menu-tab" role="tab">Branches</a>
+ </li>
+ <li class="select-menu-tab">
+ <a href="#" data-tab-filter="tags" data-filter-placeholder="Find a tag…" class="js-select-menu-tab" role="tab">Tags</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="branches" role="menu">
+
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ <a class="select-menu-item js-navigation-item js-navigation-open selected"
+ href="/julroy67/kagayaki/blob/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch"
+ data-name="master"
+ data-skip-pjax="true"
+ rel="nofollow">
+ <svg aria-hidden="true" class="octicon octicon-check select-menu-item-icon" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M12 5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
+ <span class="select-menu-item-text css-truncate-target js-select-menu-filter-text">
+ master
+ </span>
+ </a>
+ </div>
+
+ <div class="select-menu-no-results">Nothing to show</div>
+ </div>
+
+ <div class="select-menu-list select-menu-tab-bucket js-select-menu-tab-bucket" data-tab-filter="tags">
+ <div data-filterable-for="context-commitish-filter-field" data-filterable-type="substring">
+
+
+ </div>
+
+ <div class="select-menu-no-results">Nothing to show</div>
+ </div>
+
+ </div>
+ </div>
+</div>
+
+ <div class="BtnGroup float-right">
+ <a href="/julroy67/kagayaki/find/master"
+ class="js-pjax-capture-input btn btn-sm BtnGroup-item"
+ data-pjax
+ data-hotkey="t">
+ Find file
+ </a>
+ <button aria-label="Copy file path to clipboard" class="js-zeroclipboard btn btn-sm BtnGroup-item tooltipped tooltipped-s" data-copied-hint="Copied!" type="button">Copy path</button>
+ </div>
+ <div class="breadcrumb js-zeroclipboard-target">
+ <span class="repo-root js-repo-root"><span class="js-path-segment"><a href="/julroy67/kagayaki"><span>kagayaki</span></a></span></span><span class="separator">/</span><span class="js-path-segment"><a href="/julroy67/kagayaki/tree/master/base"><span>base</span></a></span><span class="separator">/</span><span class="js-path-segment"><a href="/julroy67/kagayaki/tree/master/base/freetype2-kagayaki"><span>freetype2-kagayaki</span></a></span><span class="separator">/</span><strong class="final-path">0005-freetype-2.5.2-more-demos.patch</strong>
+ </div>
+</div>
+
+
+
+ <div class="commit-tease">
+ <span class="float-right">
+ <a class="commit-tease-sha" href="/julroy67/kagayaki/commit/637821134845494264d5d79b56b9883a10bd93f0" data-pjax>
+ 6378211
+ </a>
+ <relative-time datetime="2017-01-04T21:13:18Z">Jan 4, 2017</relative-time>
+ </span>
+ <div>
+ <img alt="@julroy67" class="avatar" height="20" src="https://avatars1.githubusercontent.com/u/198724?v=3&amp;s=40" width="20" />
+ <a href="/julroy67" class="user-mention" rel="author">julroy67</a>
+ <a href="/julroy67/kagayaki/commit/637821134845494264d5d79b56b9883a10bd93f0" class="message" data-pjax="true" title="Fix CJK fonts &amp; change folder organisation">Fix CJK fonts &amp; change folder organisation</a>
+ </div>
+
+ <div class="commit-tease-contributors">
+ <button type="button" class="btn-link muted-link contributors-toggle" data-facebox="#blob_contributors_box">
+ <strong>1</strong>
+ contributor
+ </button>
+
+ </div>
+
+ <div id="blob_contributors_box" style="display:none">
+ <h2 class="facebox-header" data-facebox-id="facebox-header">Users who have contributed to this file</h2>
+ <ul class="facebox-user-list" data-facebox-id="facebox-description">
+ <li class="facebox-user-list-item">
+ <img alt="@julroy67" height="24" src="https://avatars3.githubusercontent.com/u/198724?v=3&amp;s=48" width="24" />
+ <a href="/julroy67">julroy67</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+
+<div class="file">
+ <div class="file-header">
+ <div class="file-actions">
+
+ <div class="BtnGroup">
+ <a href="/julroy67/kagayaki/raw/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" class="btn btn-sm BtnGroup-item" id="raw-url">Raw</a>
+ <a href="/julroy67/kagayaki/blame/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" class="btn btn-sm js-update-url-with-hash BtnGroup-item" data-hotkey="b">Blame</a>
+ <a href="/julroy67/kagayaki/commits/master/base/freetype2-kagayaki/0005-freetype-2.5.2-more-demos.patch" class="btn btn-sm BtnGroup-item" rel="nofollow">History</a>
+ </div>
+
+
+ <button type="button" class="btn-octicon disabled tooltipped tooltipped-nw"
+ aria-label="You must be signed in to make or propose changes">
+ <svg aria-hidden="true" class="octicon octicon-pencil" height="16" version="1.1" viewBox="0 0 14 16" width="14"><path fill-rule="evenodd" d="M0 12v3h3l8-8-3-3-8 8zm3 2H1v-2h1v1h1v1zm10.3-9.3L12 6 9 3l1.3-1.3a.996.996 0 0 1 1.41 0l1.59 1.59c.39.39.39 1.02 0 1.41z"/></svg>
+ </button>
+ <button type="button" class="btn-octicon btn-octicon-danger disabled tooltipped tooltipped-nw"
+ aria-label="You must be signed in to make or propose changes">
+ <svg aria-hidden="true" class="octicon octicon-trashcan" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1 .45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45 1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1 12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
+ </button>
+ </div>
+
+ <div class="file-info">
+ 18 lines (16 sloc)
+ <span class="file-info-divider"></span>
+ 460 Bytes
+ </div>
+</div>
+
+
+
+ <div itemprop="text" class="blob-wrapper data type-diff">
+ <table class="highlight tab-size js-file-line-container" data-tab-size="8">
+ <tr>
+ <td id="L1" class="blob-num js-line-number" data-line-number="1"></td>
+ <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-md">--- ft2demos-2.5.2/Makefile</span></td>
+ </tr>
+ <tr>
+ <td id="L2" class="blob-num js-line-number" data-line-number="2"></td>
+ <td id="LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1">+++ ft2demos-2.5.2/Makefile</span></td>
+ </tr>
+ <tr>
+ <td id="L3" class="blob-num js-line-number" data-line-number="3"></td>
+ <td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-mdr">@@ -296,10 +296,10 @@</span> else</td>
+ </tr>
+ <tr>
+ <td id="L4" class="blob-num js-line-number" data-line-number="4"></td>
+ <td id="LC4" class="blob-code blob-code-inner js-file-line"> # The following programs are not compiled automatically; either comment</td>
+ </tr>
+ <tr>
+ <td id="L5" class="blob-num js-line-number" data-line-number="5"></td>
+ <td id="LC5" class="blob-code blob-code-inner js-file-line"> # out the affected line or use the program name as a Makefile target.</td>
+ </tr>
+ <tr>
+ <td id="L6" class="blob-num js-line-number" data-line-number="6"></td>
+ <td id="LC6" class="blob-code blob-code-inner js-file-line"> #</td>
+ </tr>
+ <tr>
+ <td id="L7" class="blob-num js-line-number" data-line-number="7"></td>
+ <td id="LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> # EXES += ftchkwd</span></td>
+ </tr>
+ <tr>
+ <td id="L8" class="blob-num js-line-number" data-line-number="8"></td>
+ <td id="LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> # EXES += ftmemchk</span></td>
+ </tr>
+ <tr>
+ <td id="L9" class="blob-num js-line-number" data-line-number="9"></td>
+ <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> # EXES += ftpatchk</span></td>
+ </tr>
+ <tr>
+ <td id="L10" class="blob-num js-line-number" data-line-number="10"></td>
+ <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-md"><span class="pl-md">-</span> # EXES += fttimer</span></td>
+ </tr>
+ <tr>
+ <td id="L11" class="blob-num js-line-number" data-line-number="11"></td>
+ <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> EXES += ftchkwd</span></td>
+ </tr>
+ <tr>
+ <td id="L12" class="blob-num js-line-number" data-line-number="12"></td>
+ <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> EXES += ftmemchk</span></td>
+ </tr>
+ <tr>
+ <td id="L13" class="blob-num js-line-number" data-line-number="13"></td>
+ <td id="LC13" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> EXES += ftpatchk</span></td>
+ </tr>
+ <tr>
+ <td id="L14" class="blob-num js-line-number" data-line-number="14"></td>
+ <td id="LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-mi1"><span class="pl-mi1">+</span> EXES += fttimer</span></td>
+ </tr>
+ <tr>
+ <td id="L15" class="blob-num js-line-number" data-line-number="15"></td>
+ <td id="LC15" class="blob-code blob-code-inner js-file-line"> # EXES += testname</td>
+ </tr>
+ <tr>
+ <td id="L16" class="blob-num js-line-number" data-line-number="16"></td>
+ <td id="LC16" class="blob-code blob-code-inner js-file-line"> </td>
+ </tr>
+ <tr>
+ <td id="L17" class="blob-num js-line-number" data-line-number="17"></td>
+ <td id="LC17" class="blob-code blob-code-inner js-file-line"> exes: $(EXES:%=$(BIN_DIR_2)/%$E)</td>
+ </tr>
+</table>
+
+ </div>
+
+</div>
+
+<button type="button" data-facebox="#jump-to-line" data-facebox-class="linejump" data-hotkey="l" class="d-none">Jump to Line</button>
+<div id="jump-to-line" style="display:none">
+ <!-- '"` --><!-- </textarea></xmp> --></option></form><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
+ <input class="form-control linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line&hellip;" aria-label="Jump to line" autofocus>
+ <button type="submit" class="btn">Go</button>
+</form></div>
+
+
+ </div>
+ <div class="modal-backdrop js-touch-events"></div>
+</div>
+
+ </div>
+ </div>
+
+ </div>
+
+
+<div class="container site-footer-container">
+ <div class="site-footer " role="contentinfo">
+ <ul class="site-footer-links float-right">
+ <li><a href="https://github.com/contact" data-ga-click="Footer, go to contact, text:contact">Contact GitHub</a></li>
+ <li><a href="https://developer.github.com" data-ga-click="Footer, go to api, text:api">API</a></li>
+ <li><a href="https://training.github.com" data-ga-click="Footer, go to training, text:training">Training</a></li>
+ <li><a href="https://shop.github.com" data-ga-click="Footer, go to shop, text:shop">Shop</a></li>
+ <li><a href="https://github.com/blog" data-ga-click="Footer, go to blog, text:blog">Blog</a></li>
+ <li><a href="https://github.com/about" data-ga-click="Footer, go to about, text:about">About</a></li>
+
+ </ul>
+
+ <a href="https://github.com" aria-label="Homepage" class="site-footer-mark" title="GitHub">
+ <svg aria-hidden="true" class="octicon octicon-mark-github" height="24" version="1.1" viewBox="0 0 16 16" width="24"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
+</a>
+ <ul class="site-footer-links">
+ <li>&copy; 2017 <span title="0.09880s from unicorn-1174744565-wg4vc">GitHub</span>, Inc.</li>
+ <li><a href="https://github.com/site/terms" data-ga-click="Footer, go to terms, text:terms">Terms</a></li>
+ <li><a href="https://github.com/site/privacy" data-ga-click="Footer, go to privacy, text:privacy">Privacy</a></li>
+ <li><a href="https://github.com/security" data-ga-click="Footer, go to security, text:security">Security</a></li>
+ <li><a href="https://status.github.com/" data-ga-click="Footer, go to status, text:status">Status</a></li>
+ <li><a href="https://help.github.com" data-ga-click="Footer, go to help, text:help">Help</a></li>
+ </ul>
+ </div>
+</div>
+
+
+
+
+
+ <div id="ajax-error-message" class="ajax-error-message flash flash-error">
+ <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+ <button type="button" class="flash-close js-flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
+ <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+ </button>
+ You can't perform that action at this time.
+ </div>
+
+
+ <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/compat-8a4318ffea09a0cdb8214b76cf2926b9f6a0ced318a317bed419db19214c690d.js"></script>
+ <script crossorigin="anonymous" src="https://assets-cdn.github.com/assets/frameworks-5fe43fc6a9e5120c427334a38e9a7601418682a33981c073851434a7e1005049.js"></script>
+ <script async="async" crossorigin="anonymous" src="https://assets-cdn.github.com/assets/github-24dd080ce0b2b5ef36a73dffb7be5028414316925aeb75db598e246a1970010a.js"></script>
+
+
+
+
+ <div class="js-stale-session-flash stale-session-flash flash flash-warn flash-banner d-none">
+ <svg aria-hidden="true" class="octicon octicon-alert" height="16" version="1.1" viewBox="0 0 16 16" width="16"><path fill-rule="evenodd" d="M8.865 1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1 .19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865 1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
+ <span class="signed-in-tab-flash">You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ <span class="signed-out-tab-flash">You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span>
+ </div>
+ <div class="facebox" id="facebox" style="display:none;">
+ <div class="facebox-popup">
+ <div class="facebox-content" role="dialog" aria-labelledby="facebox-header" aria-describedby="facebox-description">
+ </div>
+ <button type="button" class="facebox-close js-facebox-close" aria-label="Close modal">
+ <svg aria-hidden="true" class="octicon octicon-x" height="16" version="1.1" viewBox="0 0 12 16" width="12"><path fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
+ </button>
+ </div>
+</div>
+
+
+ </body>
+</html>
+
diff --git a/PKGBUILD b/PKGBUILD
index c742a8099d6e..61cb935354cf 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -1,59 +1,96 @@
# $Id: PKGBUILD 271839 2016-07-13 18:19:11Z andyrtr $
# Maintainer: Jan de Groot <jgc@archlinux.org>
-pkgname=freetype2-infinality-ultimate
-pkgver=2.7.1
-pkgrel=5
-_patchrel=2017.01.11
+pkgbase=freetype2-infinality-ultimate
+pkgname=(freetype2-infinality-ultimate freetype2-demos-infinality)
+pkgver=2.8
+pkgrel=1
+_patchrel=2017.05.22
pkgdesc="TrueType font rendering library with Infinality patches and custom settings by bohoomil"
arch=(i686 x86_64)
license=('GPL')
url="http://www.freetype.org/"
# adding harfbuzz for improved OpenType features auto-hinting
# introduces a cycle dep to harfbuzz depending on freetype wanted by upstream
-groups=('infinality-bundle')
-depends=('zlib' 'bzip2' 'sh' 'libpng' 'harfbuzz')
makedepends=('libx11')
-provides=("freetype2=$pkgver" 'freetype2-infinality' 'libfreetype.so')
-conflicts=('freetype2' 'freetype2-infinality')
install=freetype2.install
source=(https://download.savannah.gnu.org/releases/freetype/freetype-${pkgver}.tar.bz2
+ https://download.savannah.gnu.org/releases/freetype/freetype-doc-${pkgver}.tar.bz2
+ https://download-mirror.savannah.gnu.org/releases/freetype/ft2demos-${pkgver}.tar.bz2
0001-Enable-table-validation-modules.patch
- 0002-infinality-${pkgver}-${_patchrel}.patch
- freetype2.sh
- infinality-settings.sh
- xft-settings.sh)
-
-sha256sums=('3a3bb2c4e15ffb433f2032f50a5b5a92558206822e22bfe8cbe339af4aa82f88'
- '6d273254fd925d284e5f66e3861eaef69a4393f34872398b2c93af0d5e15d34e'
- '0d7e15b94a20ebcc4c857b062219118ae8f7f50f4c8ad108d1abaca99cdf2304'
+ 0002-infinality-${pkgver}-${_patchrel}.patch
+ 0003-inf.patch
+ 0004-Enable-long-PCF-family-names.patch
+ 0005-freetype-2.5.2-more-demos.patch
+ freetype2.sh
+ infinality-settings.sh
+ xft-settings.sh)
+
+sha256sums=('a3c603ed84c3c2495f9c9331fe6bba3bb0ee65e06ec331e0a0fb52158291b40b'
+ '427ba04d11f450df4bac4c95fec247be1b835ccdcf85d8b081f3f39d31811154'
+ '2b6ce0d36bcb43fcc8aac07a0287982d855571ee271c3803c768e501f9c1a233'
+ '515d52643fa47bb96c99792c81d4c05694b4e08494d36c5f81f6d05b61d4f287'
+ '72329f1efbc0a8a06c072d81f7c75464a2874a3d95e9319d0ab42bf5786fe4de'
+ '9d65d9c6eee7ecf993bfada7aa5530f09a44dec6796a23f2f186d29c2acf775a'
+ '7f5aa51a67a68002226f8e869eaa3f6b870c04d19135a14c64a6c355eb023a39'
+ '36484db4b926ed026e7f32570573493b5a9793a129f08d54383a26d65a6af89b'
'f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467'
'2041947007b27d58101b5aebdf225d79d2c6d64cf8ac07a71c225d9e027578a0'
'a4b3db6882de85304c5e4099fca5832a598607f90e582bcd030df0e9b526cd0b')
prepare() {
mv freetype-${pkgver} freetype2
+ mv ft2demos-${pkgver} freetype2-demos
cd freetype2
patch -Np1 -i ../0001-Enable-table-validation-modules.patch
patch -Np1 -i ../0002-infinality-${pkgver}-${_patchrel}.patch
+ patch -Np1 -i ../0003-inf.patch
+ patch -Np1 -i ../0004-Enable-long-PCF-family-names.patch
+ cd ../freetype2-demos
+ # enable more demos
+ patch -Np1 -i ../0005-freetype-2.5.2-more-demos.patch
+
+ # Suppress RPATH
+ sed -i '/X11_LIB:%=-R%/d' graph/x11/rules.mk
}
build() {
cd freetype2
./configure --prefix=/usr --disable-static --with-harfbuzz --with-png
make
+
+ # Build demos
+ cd ../freetype2-demos
+ make
}
-#check() {
-# cd freetype2
-# make -k check
-#}
+check() {
+ cd freetype2
+ make -k check
+}
-package() {
+package_freetype2-infinality-ultimate() {
+ groups=('infinality-bundle')
+ depends=('zlib' 'bzip2' 'sh' 'libpng' 'harfbuzz')
+ provides=("freetype2=$pkgver" 'freetype2-infinality' 'libfreetype.so')
+ conflicts=('freetype2' 'freetype2-infinality')
+
cd freetype2
make DESTDIR="${pkgdir}" install
install -Dm644 ../freetype2.sh "${pkgdir}/etc/profile.d/freetype2.sh"
install -Dm644 ../xft-settings.sh "${pkgdir}/etc/X11/xinit/xinitrc.d/xft-settings.sh"
install -Dm644 ../infinality-settings.sh "${pkgdir}/etc/X11/xinit/xinitrc.d/infinality-settings.sh"
}
+
+package_freetype2-demos-infinality() {
+ pkgdesc="Freetype tools and demos"
+ depends=('freetype2' 'libx11')
+ conflicts=('freetyp2-demos' 'freetyp2-demos-kagayaki')
+
+ cd freetype2-demos
+ install -d "${pkgdir}/usr/bin"
+ for _i in bin/{f,t}t*; do
+ libtool --mode=install install $_i "${pkgdir}/usr/bin"
+ done
+}