freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2-demos] master 9ab4921 2/2: [ftbench] Add support for third Tr


From: Werner LEMBERG
Subject: [freetype2-demos] master 9ab4921 2/2: [ftbench] Add support for third TrueType interpreter version.
Date: Thu, 26 May 2016 06:45:29 +0000 (UTC)

branch: master
commit 9ab49218544b56ebca678e0c2517adbd2a6d001a
Author: Werner Lemberg <address@hidden>
Commit: Werner Lemberg <address@hidden>

    [ftbench] Add support for third TrueType interpreter version.
    
    Option `-H' now takes an argument to select the CFF hinting engine,
    and new option `-I' selects the TT interpreter version.
    
    * src/ftbench.c (default_hinting_engine,
    default_interpreter_version): Replaced with...
    (tt_interpreter_versions, num_tt_interpreter_versions,
    dflt_tt_interpreter_version, cff_hinting_engines,
    num_cff_hinting_engines, dflt_cff_hinting_engine,
    cff_hinting_engine_names): ...  these new global variables.
    (main): Expand check for alternative TrueType interpreter versions
    and CFF hinting engines.
    Add argument to option `-H'.
    Add new option `-I'.
    (usage): Updated.
    
    * src/ftbench.1: Updated.
---
 ChangeLog     |   21 ++++++++
 src/ftbench.1 |   18 ++++++-
 src/ftbench.c |  159 +++++++++++++++++++++++++++++++++++++++++++--------------
 3 files changed, 159 insertions(+), 39 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index d327e75..7d95d02 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
 2016-05-26  Werner Lemberg  <address@hidden>
 
+       [ftbench] Add support for third TrueType interpreter version.
+
+       Option `-H' now takes an argument to select the CFF hinting engine,
+       and new option `-I' selects the TT interpreter version.
+
+       * src/ftbench.c (default_hinting_engine,
+       default_interpreter_version): Replaced with... 
+       (tt_interpreter_versions, num_tt_interpreter_versions,
+       dflt_tt_interpreter_version, cff_hinting_engines,
+       num_cff_hinting_engines, dflt_cff_hinting_engine,
+       cff_hinting_engine_names): ...  these new global variables.
+       (main): Expand check for alternative TrueType interpreter versions
+       and CFF hinting engines.
+       Add argument to option `-H'.
+       Add new option `-I'.
+       (usage): Updated.
+
+       * src/ftbench.1: Updated.
+
+2016-05-26  Werner Lemberg  <address@hidden>
+
        [ttdebug] Rename option `-H' to `-I'.
 
        This is for consistency with a forthcoming change to `ftbench'.
diff --git a/src/ftbench.1 b/src/ftbench.1
index 94370f2..60cfb7c 100644
--- a/src/ftbench.1
+++ b/src/ftbench.1
@@ -47,8 +47,22 @@ as load flags (see the
 macros in the FreeType reference).
 .
 .TP
-.B \-H
-Use alternative hinting engine (Adobe CFF or TTF v35).
+.BI "\-H " name
+Using CFF hinting engine
+.IR name .
+Available versions are depending on compilation options of FreeType;
+call
+.B ftbench
+without an argument to get the actual list.
+.
+.TP
+.BI "\-I " ver
+Using TT interpreter version
+.IR ver .
+Available versions are depending on compilation options of FreeType;
+call
+.B ftbench
+without an argument to get the actual list.
 .
 .TP
 .BI \-i \ idx
diff --git a/src/ftbench.c b/src/ftbench.c
index da9fef3..a9240c6 100644
--- a/src/ftbench.c
+++ b/src/ftbench.c
@@ -127,8 +127,16 @@
   static FT_Render_Mode  render_mode = FT_RENDER_MODE_NORMAL;
   static FT_Int32        load_flags  = FT_LOAD_DEFAULT;
 
-  static int  default_hinting_engine;
-  static int  default_interpreter_version;
+  static unsigned int  tt_interpreter_versions[3];
+  static int           num_tt_interpreter_versions;
+  static unsigned int  dflt_tt_interpreter_version;
+
+  static unsigned int  cff_hinting_engines[2];
+  static int           num_cff_hinting_engines;
+  static unsigned int  dflt_cff_hinting_engine;
+
+  static char  cff_hinting_engine_names[2][10] = { "freetype",
+                                                   "adobe" };
 
 
   /*
@@ -727,7 +735,34 @@
   static void
   usage( void )
   {
-    int  i;
+    int   i;
+    char  interpreter_versions[32];
+    char  hinting_engines[32];
+
+
+    /* we expect that at least one interpreter version is available */
+    if ( num_tt_interpreter_versions == 2 )
+      sprintf(interpreter_versions,
+              "%d and %d",
+              tt_interpreter_versions[0],
+              tt_interpreter_versions[1] );
+    else
+      sprintf(interpreter_versions,
+              "%d, %d, and %d",
+              tt_interpreter_versions[0],
+              tt_interpreter_versions[1],
+              tt_interpreter_versions[2] );
+
+    /* we expect that at least one hinting engine is available */
+    if ( num_cff_hinting_engines == 1 )
+      sprintf(hinting_engines,
+              "`%s'",
+              cff_hinting_engine_names[cff_hinting_engines[0]] );
+    else
+      sprintf(hinting_engines,
+              "`%s' and `%s'",
+              cff_hinting_engine_names[cff_hinting_engines[0]],
+              cff_hinting_engine_names[cff_hinting_engines[1]] );
 
 
     fprintf( stderr,
@@ -741,13 +776,16 @@
       "  -c N      Use at most N iterations for each test\n"
       "            (0 means time limited).\n"
       "  -f L      Use hex number L as load flags (see `FT_LOAD_XXX').\n"
-      "  -H        Use alternative hinting engine (%s CFF or TTF v%s).\n"
+      "  -H NAME   Use CFF hinting engine NAME.\n"
+      "            Available versions are %s; default is `%s'.\n"
+      "  -I VER    Use TT interpreter version VER.\n"
+      "            Available versions are %s; default is version %d.\n"
       "  -i IDX    Start with index IDX (default is 0).\n"
       "  -m M      Set maximum cache size to M KiByte (default is %d).\n",
-             default_hinting_engine == FT_CFF_HINTING_ADOBE ? "FreeType"
-                                                            : "Adobe",
-             default_interpreter_version == TT_INTERPRETER_VERSION_35 ? "38"
-                                                                      : "35",
+             hinting_engines,
+             cff_hinting_engine_names[dflt_cff_hinting_engine],
+             interpreter_versions,
+             dflt_tt_interpreter_version,
              CACHE_SIZE );
     fprintf( stderr,
       "  -p        Preload font file in memory.\n"
@@ -801,8 +839,14 @@
     int            compare_cached = 0;
     size_t         i;
     int            j;
-    int            hinting_engine;
-    int            interpreter_version;
+
+    unsigned int  versions[3] = { TT_INTERPRETER_VERSION_35,
+                                  TT_INTERPRETER_VERSION_38,
+                                  TT_INTERPRETER_VERSION_40 };
+    unsigned int  engines[2]  = { FT_CFF_HINTING_FREETYPE,
+                                  FT_CFF_HINTING_ADOBE };
+    int           version;
+    char         *engine;
 
 
     if ( FT_Init_FreeType( &lib ) )
@@ -812,21 +856,48 @@
       return 1;
     }
 
-    FT_Property_Get( lib, "cff", "hinting-engine",
-                     &hinting_engine );
 
-    FT_Property_Get( lib, "truetype", "interpreter-version",
-                     &interpreter_version );
+    /* collect all available versions, then set again the default */
+    FT_Property_Get( lib,
+                     "truetype",
+                     "interpreter-version", &dflt_tt_interpreter_version );
+    for ( j = 0; j < 3; j++ )
+    {
+      error = FT_Property_Set( lib,
+                               "truetype",
+                               "interpreter-version", &versions[j] );
+      if ( !error )
+        tt_interpreter_versions[num_tt_interpreter_versions++] = versions[j];
+    }
+    FT_Property_Set( lib,
+                     "truetype",
+                     "interpreter-version", &dflt_tt_interpreter_version );
+
+    FT_Property_Get( lib,
+                     "cff",
+                     "hinting-engine", &dflt_cff_hinting_engine );
+    for ( j = 0; j < 2; j++ )
+    {
+      error = FT_Property_Set( lib,
+                               "cff",
+                               "hinting-engine", &engines[j] );
+      if ( !error )
+        cff_hinting_engines[num_cff_hinting_engines++] = engines[j];
+    }
+    FT_Property_Set( lib,
+                     "cff",
+                     "hinting-engine", &dflt_cff_hinting_engine );
+
 
-    default_hinting_engine      = hinting_engine;
-    default_interpreter_version = interpreter_version;
+    version = dflt_tt_interpreter_version;
+    engine  = cff_hinting_engine_names[dflt_cff_hinting_engine];
 
     while ( 1 )
     {
       int  opt;
 
 
-      opt = getopt( argc, argv, "b:Cc:f:Hi:m:pr:s:t:v" );
+      opt = getopt( argc, argv, "b:Cc:f:H:I:i:m:pr:s:t:v" );
 
       if ( opt == -1 )
         break;
@@ -852,27 +923,41 @@
         break;
 
       case 'H':
-        if ( hinting_engine == FT_CFF_HINTING_ADOBE )
-          hinting_engine = FT_CFF_HINTING_FREETYPE;
-        else
-          hinting_engine = FT_CFF_HINTING_ADOBE;
+        engine = optarg;
 
-        error = FT_Property_Set( lib, "cff", "hinting-engine",
-                                 &hinting_engine );
-        if ( error )
+        for ( j = 0; j < num_cff_hinting_engines; j++ )
+        {
+          if ( !strcmp( engine, cff_hinting_engine_names[j] ) )
+          {
+            FT_Property_Set( lib,
+                             "cff",
+                             "hinting-engine", &j );
+            break;
+          }
+        }
+
+        if ( j == num_cff_hinting_engines )
           fprintf( stderr,
-                   "warning: couldn't change CFF hinting engine\n" );
+                   "warning: couldn't set CFF hinting engine\n" );
+        break;
 
-        if ( interpreter_version == TT_INTERPRETER_VERSION_35 )
-          interpreter_version = TT_INTERPRETER_VERSION_38;
-        else
-          interpreter_version = TT_INTERPRETER_VERSION_35;
+      case 'I':
+        version = atoi( optarg );
+
+        for ( j = 0; j < num_tt_interpreter_versions; j++ )
+        {
+          if ( version == (int)tt_interpreter_versions[j] )
+          {
+            FT_Property_Set( lib,
+                             "truetype",
+                             "interpreter-version", &version );
+            break;
+          }
+        }
 
-        error = FT_Property_Set( lib, "truetype", "interpreter-version",
-                                 &interpreter_version );
-        if ( error )
+        if ( j == num_tt_interpreter_versions )
           fprintf( stderr,
-                   "warning: couldn't change TT interpreter version\n" );
+                   "warning: couldn't set TT interpreter version\n" );
         break;
 
       case 'i':
@@ -1026,11 +1111,11 @@
             load_flags,
             render_mode );
     printf( "\n"
-            "CFF engine set to %s\n"
-            "TrueType engine set to version %s\n"
+            "CFF hinting engine set to `%s'\n"
+            "TrueType interpreter set to version %d\n"
             "maximum cache size: %ldKiByte\n",
-            hinting_engine == FT_CFF_HINTING_ADOBE ? "Adobe" : "FreeType",
-            interpreter_version == TT_INTERPRETER_VERSION_35 ? "35" : "38",
+            engine,
+            version,
             max_bytes / 1024 );
 
     printf( "\n"



reply via email to

[Prev in Thread] Current Thread [Next in Thread]