summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorErik Dubois2017-05-24 17:39:42 -0400
committerErik Dubois2017-05-24 17:39:42 -0400
commita07d2cf5304017a69c85721c84c5c623149828f9 (patch)
treec00543f240d152247476371f4bb779b71f8c4358
parentffcf31530facfd0906663453d17db97aaec1c3d5 (diff)
downloadaur-a07d2cf5304017a69c85721c84c5c623149828f9.tar.gz
updating patches and fixing
-rw-r--r--.SRCINFO10
-rw-r--r--0002-infinality-2.8-2017.05.24.patch (renamed from 0002-infinality-2.8-2017.05.22.patch)2161
-rw-r--r--0003-inf.patch2089
-rw-r--r--PKGBUILD9
4 files changed, 2143 insertions, 2126 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 7bc19a912f53..32790a969de8 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -1,9 +1,9 @@
# Generated by mksrcinfo v8
-# Tue May 23 23:42:11 UTC 2017
+# Wed May 24 21:39:17 UTC 2017
pkgbase = freetype2-infinality-ultimate
pkgdesc = TrueType font rendering library with Infinality patches and custom settings by bohoomil
pkgver = 2.8
- pkgrel = 1
+ pkgrel = 2
url = http://www.freetype.org/
install = freetype2.install
arch = i686
@@ -14,8 +14,7 @@ pkgbase = freetype2-infinality-ultimate
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 = 0002-infinality-2.8-2017.05.24.patch
source = 0004-Enable-long-PCF-family-names.patch
source = 0005-freetype-2.5.2-more-demos.patch
source = freetype2.sh
@@ -25,8 +24,7 @@ pkgbase = freetype2-infinality-ultimate
sha256sums = 427ba04d11f450df4bac4c95fec247be1b835ccdcf85d8b081f3f39d31811154
sha256sums = 2b6ce0d36bcb43fcc8aac07a0287982d855571ee271c3803c768e501f9c1a233
sha256sums = 515d52643fa47bb96c99792c81d4c05694b4e08494d36c5f81f6d05b61d4f287
- sha256sums = 72329f1efbc0a8a06c072d81f7c75464a2874a3d95e9319d0ab42bf5786fe4de
- sha256sums = 9d65d9c6eee7ecf993bfada7aa5530f09a44dec6796a23f2f186d29c2acf775a
+ sha256sums = faac711ba50c7366399331d9a62a13becf125a99ab051b319e18fa0761311159
sha256sums = 7f5aa51a67a68002226f8e869eaa3f6b870c04d19135a14c64a6c355eb023a39
sha256sums = 36484db4b926ed026e7f32570573493b5a9793a129f08d54383a26d65a6af89b
sha256sums = f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467
diff --git a/0002-infinality-2.8-2017.05.22.patch b/0002-infinality-2.8-2017.05.24.patch
index d8e63ec23834..09df6f9cf632 100644
--- a/0002-infinality-2.8-2017.05.22.patch
+++ b/0002-infinality-2.8-2017.05.24.patch
@@ -1,7 +1,7 @@
-From b0f880b8216e56ad48d4c3b59a0d565fcace8e12 Mon Sep 17 00:00:00 2001
+From 48c2930e9b83c47457ca03f5f8e6f1b61540a8e6 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
+Date: Wed, 24 May 2017 15:08:52 -0500
+Subject: [PATCH] infinality 2.8 2017.05.24
---
builds/freetype.mk | 1 +
@@ -13,8 +13,14 @@ Subject: [PATCH] infinality 2.8 2017.05.22
src/autofit/afmodule.c | 7 +
src/base/Jamfile | 1 +
src/base/ftbase.c | 3 +
+ src/base/ftinf.c | 363 +++++
+ src/base/ftinf.h | 66 +
+ src/base/ftinf_rh.c | 626 ++++++++
+ src/base/ftinf_rh.gperf | 283 ++++
+ src/base/ftinf_sh.c | 463 ++++++
+ src/base/ftinf_sh.gperf | 264 ++++
src/base/ftinit.c | 14 +-
- src/base/ftlcdfil.c | 36 +-
+ src/base/ftlcdfil.c | 35 +-
src/base/ftobjs.c | 67 +-
src/base/ftoutln.c | 10 +-
src/base/ftsynth.c | 22 +-
@@ -22,7 +28,13 @@ Subject: [PATCH] infinality 2.8 2017.05.22
src/cff/cffobjs.c | 6 +
src/smooth/ftsmooth.c | 2808 ++++++++++++++++++++++++++++++++++--
src/truetype/ttinterp.c | 1 +
- 18 files changed, 3057 insertions(+), 122 deletions(-)
+ 24 files changed, 5122 insertions(+), 121 deletions(-)
+ create mode 100644 src/base/ftinf.c
+ create mode 100644 src/base/ftinf.h
+ create mode 100644 src/base/ftinf_rh.c
+ create mode 100644 src/base/ftinf_rh.gperf
+ create mode 100644 src/base/ftinf_sh.c
+ create mode 100644 src/base/ftinf_sh.gperf
diff --git a/builds/freetype.mk b/builds/freetype.mk
index f8cfd41..7e7ac5b 100644
@@ -467,6 +479,2107 @@ index 55f7359..4d50dca 100644
/* END */
+diff --git a/src/base/ftinf.c b/src/base/ftinf.c
+new file mode 100644
+index 0000000..5d6b7f6
+--- /dev/null
++++ b/src/base/ftinf.c
+@@ -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 --git a/src/base/ftinf.h b/src/base/ftinf.h
+new file mode 100644
+index 0000000..fbe1bd1
+--- /dev/null
++++ b/src/base/ftinf.h
+@@ -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 --git a/src/base/ftinf_rh.c b/src/base/ftinf_rh.c
+new file mode 100644
+index 0000000..606b567
+--- /dev/null
++++ b/src/base/ftinf_rh.c
+@@ -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 --git a/src/base/ftinf_rh.gperf b/src/base/ftinf_rh.gperf
+new file mode 100644
+index 0000000..9fd8aab
+--- /dev/null
++++ b/src/base/ftinf_rh.gperf
+@@ -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 --git a/src/base/ftinf_sh.c b/src/base/ftinf_sh.c
+new file mode 100644
+index 0000000..87d2ff8
+--- /dev/null
++++ b/src/base/ftinf_sh.c
+@@ -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 --git a/src/base/ftinf_sh.gperf b/src/base/ftinf_sh.gperf
+new file mode 100644
+index 0000000..5f6e0ae
+--- /dev/null
++++ b/src/base/ftinf_sh.gperf
+@@ -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/src/base/ftinit.c b/src/base/ftinit.c
index b3b08fa..c125db9 100644
--- a/src/base/ftinit.c
@@ -501,7 +2614,7 @@ index b3b08fa..c125db9 100644
return error;
}
diff --git a/src/base/ftlcdfil.c b/src/base/ftlcdfil.c
-index 611b39f..0e7048c 100644
+index 611b39f..f59793a 100644
--- a/src/base/ftlcdfil.c
+++ b/src/base/ftlcdfil.c
@@ -22,7 +22,10 @@
@@ -516,7 +2629,7 @@ index 611b39f..0e7048c 100644
#ifdef FT_CONFIG_OPTION_SUBPIXEL_RENDERING
-@@ -306,11 +309,36 @@
+@@ -306,11 +309,37 @@
FT_Library_SetLcdFilter( FT_Library library,
FT_LcdFilter filter )
{
@@ -524,10 +2637,10 @@ index 611b39f..0e7048c 100644
- { 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_LcdFiveTapFilter default_weights =
-+ { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
++ { 0x08, 0x4d, 0x56, 0x4d, 0x08 };
+#else
+ FT_LcdFiveTapFilter default_weights;
+ if( ftinf && ftinf->filter_params[0] )
@@ -799,7 +2912,7 @@ index 6161393..8c00aa9 100644
driver->darken_params[0] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1;
driver->darken_params[1] = CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1;
diff --git a/src/smooth/ftsmooth.c b/src/smooth/ftsmooth.c
-index 435854e..5d79844 100644
+index 435854e..d14cd1a 100644
--- a/src/smooth/ftsmooth.c
+++ b/src/smooth/ftsmooth.c
@@ -26,6 +26,18 @@
@@ -1039,7 +3152,7 @@ index 435854e..5d79844 100644
+ FT_Bitmap new_bitmap;
+
+
-+ FT_Bitmap_New( &new_bitmap );
++ FT_Bitmap_Init( &new_bitmap );
+ FT_Bitmap_Copy( library, bitmap, &new_bitmap );
+ new_line = (&new_bitmap)->buffer;
+
@@ -1217,7 +3330,7 @@ index 435854e..5d79844 100644
+ int factor1, factor2;
+ int bias = 0;
+
-+ FT_Bitmap_New( &new_bitmap );
++ FT_Bitmap_Init( &new_bitmap );
+
+ FT_Bitmap_Copy( library, bitmap, &new_bitmap );
+ new_line = (&new_bitmap)->buffer;
@@ -1291,7 +3404,7 @@ index 435854e..5d79844 100644
+ FT_Bitmap new_bitmap;
+
+
-+ FT_Bitmap_New( &new_bitmap );
++ FT_Bitmap_Init( &new_bitmap );
+ FT_Bitmap_Copy( library, bitmap, &new_bitmap );
+ new_line = (&new_bitmap)->buffer;
+
@@ -1333,7 +3446,7 @@ index 435854e..5d79844 100644
+ FT_Bitmap new_bitmap;
+
+
-+ FT_Bitmap_New( &new_bitmap );
++ FT_Bitmap_Init( &new_bitmap );
+ FT_Bitmap_Copy( library, bitmap, &new_bitmap );
+ new_line = (&new_bitmap)->buffer;
+
@@ -1382,7 +3495,7 @@ index 435854e..5d79844 100644
+ FT_UInt xx;
+
+
-+ FT_Bitmap_New(&new_bitmap);
++ FT_Bitmap_Init(&new_bitmap);
+ FT_Bitmap_Copy(library, bitmap, &new_bitmap);
+ new_line = (&new_bitmap)->buffer;
+
@@ -1453,7 +3566,7 @@ index 435854e..5d79844 100644
+ FT_Bitmap new_bitmap;
+
+
-+ FT_Bitmap_New(&new_bitmap);
++ FT_Bitmap_Init(&new_bitmap);
+
+ line = bitmap->buffer;
+ FT_Bitmap_Copy( library, bitmap, &new_bitmap );
@@ -3195,7 +5308,7 @@ index 435854e..5d79844 100644
+
+ FT_Int brightness_value = 0.0;
+ FT_Int contrast_value = 0.0;
-+
++
+ FT_Int snapping_sliding_scale_value = 0;
+
+ FT_Int global_embolden_x_value = 0;
@@ -3483,7 +5596,7 @@ index 435854e..5d79844 100644
x_left -= lcd_extra >> 1;
width += 3 * lcd_extra;
pitch = FT_PAD_CEIL( width, 4 );
-@@ -243,24 +2712,17 @@
+@@ -243,23 +2712,16 @@
if ( vmul )
{
@@ -3506,12 +5619,11 @@ index 435854e..5d79844 100644
- goto Exit;
+#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
}
-
+#endif
+
+
/* Required check is (pitch * height < FT_ULONG_MAX), */
/* but we care realistic cases only. Always pitch <= width. */
- if ( width > 0x7FFF || height > 0x7FFF )
@@ -271,6 +2733,22 @@
goto Exit;
}
@@ -3567,7 +5679,7 @@ index 435854e..5d79844 100644
/* set up parameters */
params.target = bitmap;
params.source = outline;
-@@ -348,9 +2808,153 @@
+@@ -348,8 +2808,152 @@
if ( error )
goto Exit;
@@ -3692,7 +5804,7 @@ index 435854e..5d79844 100644
+
+
+ if ( lcd_filter_func )
-+ lcd_filter_func( bitmap, mode, slot->library );
++ lcd_filter_func( bitmap, mode, lcd_weights );
+
+ if ( grayscale_filter_strength > 0 )
+ _ft_lcd_grayscale_filter( bitmap,
@@ -3712,15 +5824,14 @@ index 435854e..5d79844 100644
+ }
+ else if ( mode == FT_RENDER_MODE_LCD &&
+ lcd_filter_func )
-+ lcd_filter_func( bitmap, mode, slot->library );
++ lcd_filter_func( bitmap, mode, lcd_weights );
+#else
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 */
@@ -408,6 +3012,20 @@
#endif /* !FT_CONFIG_OPTION_SUBPIXEL_RENDERING */
diff --git a/0003-inf.patch b/0003-inf.patch
deleted file mode 100644
index 8b289f7a7c6c..000000000000
--- a/0003-inf.patch
+++ /dev/null
@@ -1,2089 +0,0 @@
-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/PKGBUILD b/PKGBUILD
index 61cb935354cf..47740d026c5a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -4,8 +4,8 @@
pkgbase=freetype2-infinality-ultimate
pkgname=(freetype2-infinality-ultimate freetype2-demos-infinality)
pkgver=2.8
-pkgrel=1
-_patchrel=2017.05.22
+pkgrel=2
+_patchrel=2017.05.24
pkgdesc="TrueType font rendering library with Infinality patches and custom settings by bohoomil"
arch=(i686 x86_64)
license=('GPL')
@@ -19,7 +19,6 @@ source=(https://download.savannah.gnu.org/releases/freetype/freetype-${pkgver}.t
https://download-mirror.savannah.gnu.org/releases/freetype/ft2demos-${pkgver}.tar.bz2
0001-Enable-table-validation-modules.patch
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
@@ -30,8 +29,7 @@ sha256sums=('a3c603ed84c3c2495f9c9331fe6bba3bb0ee65e06ec331e0a0fb52158291b40b'
'427ba04d11f450df4bac4c95fec247be1b835ccdcf85d8b081f3f39d31811154'
'2b6ce0d36bcb43fcc8aac07a0287982d855571ee271c3803c768e501f9c1a233'
'515d52643fa47bb96c99792c81d4c05694b4e08494d36c5f81f6d05b61d4f287'
- '72329f1efbc0a8a06c072d81f7c75464a2874a3d95e9319d0ab42bf5786fe4de'
- '9d65d9c6eee7ecf993bfada7aa5530f09a44dec6796a23f2f186d29c2acf775a'
+ 'faac711ba50c7366399331d9a62a13becf125a99ab051b319e18fa0761311159'
'7f5aa51a67a68002226f8e869eaa3f6b870c04d19135a14c64a6c355eb023a39'
'36484db4b926ed026e7f32570573493b5a9793a129f08d54383a26d65a6af89b'
'f7f8e09c44f7552c883846e9a6a1efc50377c4932234e74adc4a8ff750606467'
@@ -45,7 +43,6 @@ prepare() {
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