freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] master a0f3a1f: Formatting.


From: Werner LEMBERG
Subject: [freetype2] master a0f3a1f: Formatting.
Date: Fri, 8 Jul 2016 04:54:05 +0000 (UTC)

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

    Formatting.
---
 ChangeLog                          |   32 +++++-----
 include/freetype/config/ftstdlib.h |    3 +-
 src/base/ftinit.c                  |  119 ++++++++++++++++++++++++++++++++++++
 src/smooth/ftgrays.c               |    2 +-
 4 files changed, 138 insertions(+), 18 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index e5bbe83..199ed91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,25 +2,25 @@
 
        [smooth] Sub-banding protocol revision.
 
-       Rasterization sub-banding is utilized at large sizes while using
-       rather small fixed memory pool. Indeed it is possible to make an
+       Rasterization sub-banding is utilized at large sizes while using a
+       rather small fixed memory pool.  Indeed it is possible to make an
        educated guess how much memory is necessary at a given size for a
-       given glyph. It turns out that, for large majority of European glyphs,
-       you should store about 8 times more boundary pixels than their height.
-       Or, vice versa, if your memory pool can hold 800 pixels the band
-       height should be 100 and you should sub-band anything larger than
-       that. Should you still run out of memory, FreeType bisects the band
-       but you have wasted some time. This is what has been implemented in
-       FreeType since the beginning.
-
-       It was overlooked, however, that the top band could grow to twice the
-       default band size leading to unnecessary memory overflows there. This
-       commit fixes that. Now the bands are distributed more evenly and
-       cannot exceed the default size.
+       given glyph.  It turns out that, for a large majority of European
+       glyphs, you should store about 8 times more boundary pixels than
+       their height.  Or, vice versa, if your memory pool can hold 800
+       pixels the band height should be 100 and you should sub-band
+       anything larger than that.  Should you still run out of memory,
+       FreeType bisects the band but you have wasted some time.  This is
+       what has been implemented in FreeType since the beginning.
+
+       It was overlooked, however, that the top band could grow to twice
+       the default band size leading to unnecessary memory overflows there.
+       This commit fixes that.  Now the bands are distributed more evenly
+       and cannot exceed the default size.
 
        Now the magic number 8 is really suitable for rather simple European
-       scripts. For complex Chinese logograms the magic number should be 13
-       but that is subject for another day.
+       scripts.  For complex Chinese logograms the magic number should be
+       13 but that is subject for another day.
 
        * src/smooth/ftgrays.c (gray_convert_glyph): Revise sub-banding
        protocol.
diff --git a/include/freetype/config/ftstdlib.h 
b/include/freetype/config/ftstdlib.h
index 562e255..58b95a7 100644
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -142,7 +142,8 @@
   /**********************************************************************/
 
 
-#define ft_atol  atol
+#define ft_atol    atol
+#define ft_getenv  getenv
 
 
   /**********************************************************************/
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index c2dd0a7..a0a09db 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -226,6 +226,123 @@
   }
 
 
+#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES
+
+#define MAX_LENGTH  128
+
+  /*
+   * The `FREETYPE_PROPERTIES' environment variable has the following
+   * syntax form (broken here into multiple lines for better readability)
+   *
+   *   <whitespace>
+   *   <module-name1> ':'
+   *   <property-name1> '=' <property-value1>
+   *   <whitespace>
+   *   <module-name2> ':'
+   *   <property-name2> '=' <property-value2>
+   *   ...
+   *
+   * Example:
+   *
+   *   FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
+   *                       cff:no-stem-darkening=1 \
+   *                       autofitter:warping=1
+   *
+   */
+
+  static void
+  ft_get_default_properties( FT_Library  library )
+  {
+    const char*  env;
+    const char*  p;
+    const char*  q;
+
+    char  module_name[MAX_LENGTH + 1];
+    char  property_name[MAX_LENGTH + 1];
+    char  property_value[MAX_LENGTH + 1];
+
+    int  i;
+
+
+    env = getenv( "FREETYPE_PROPERTIES" );
+    if ( !env )
+      return;
+
+    for ( p = env; *p; p++ )
+    {
+      module_name[0]    = '\0';
+      property_name[0]  = '\0';
+      property_value[0] = '\0';
+
+      /* skip leading whitespace and separators */
+      if ( *p == ' ' || *p == '\t' )
+        continue;
+
+      /* read module name, followed by `:' */
+      q = p;
+      for ( i = 0; i < MAX_LENGTH; i++ )
+      {
+        if ( !*p || *p == ':' )
+          break;
+        module_name[i] = *p++;
+      }
+      module_name[i] = '\0';
+
+      if ( !*p )
+        break;
+      if ( *p != ':' || p == q )
+        break;
+
+      /* read property name, followed by `=' */
+      q = p;
+      for ( i = 0; i < MAX_LENGTH; i++ )
+      {
+        if ( !*p || *p == '=' )
+          break;
+        property_name[i] = *p++;
+      }
+      property_name[i] = '\0';
+
+      if ( !*p )
+        break;
+      if ( *p != '=' || p == q )
+        break;
+
+      /* read property value, followed by whitespace (if any) */
+      q = p;
+      for ( i = 0; i < MAX_LENGTH; i++ )
+      {
+        if ( !*p || *p == ' ' || *p == '\t' )
+          break;
+        property_value[i] = *p++;
+      }
+      property_value[i] = '\0';
+
+      if ( !( *p == '\0' || *p == ' ' || *p == '\t' ) || p == q )
+        break;
+
+      /* we have all data; resolve them into a call to FT_Property_Set */
+      /* if possible                                                   */
+
+      /* we completely ignore errors */
+      FT_Property_Set( library,
+                       module_name,
+                       property_name,
+                       property_value );
+    }
+  }
+
+#else
+
+  static void
+  ft_get_default_properties( FT_Library  library )
+  {
+    FT_UNUSED( library );
+  }
+
+#endif
+
+
   /* documentation is in freetype.h */
 
   FT_EXPORT_DEF( FT_Error )
@@ -256,6 +373,8 @@
     else
       FT_Add_Default_Modules( *alibrary );
 
+    ft_get_default_properties( *alibrary );
+
     return error;
   }
 
diff --git a/src/smooth/ftgrays.c b/src/smooth/ftgrays.c
index 12df14d..0bf3ac6 100644
--- a/src/smooth/ftgrays.c
+++ b/src/smooth/ftgrays.c
@@ -1911,7 +1911,7 @@ typedef ptrdiff_t  FT_PtrDist;
     min   = ras.min_ey;
     max_y = ras.max_ey;
 
-    for (; min < max_y; min = max )
+    for ( ; min < max_y; min = max )
     {
       max = min + band_size;
       if ( max > max_y )



reply via email to

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