shithub: freetype+ttf2subf

Download patch

ref: 49e18b8d5f7df1c931e07f94615b375a0399162a
parent: a48162759e7ffbdfe3c06ead5ab6863bbd1a1dab
author: Werner Lemberg <[email protected]>
date: Mon Jun 11 17:15:09 EDT 2007

formatting

git/fs: mount .git/fs: mount/attach disallowed
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,12 +1,49 @@
 2007-06-11  David Turner  <[email protected]>
 
-	* src/autofit/aflatin,c: fix incorrect segment linking computation,
-	this was the root cause of bug #19565.
+	* src/autofit/aflatin.c (af_latin_hints_link_segments): Fix
+	incorrect segment linking computation.  This was the root cause of
+	Savannah bug #19565.
 
 
-	* src/autofit/*: some very experimental changes to improve the Latin
-	auto-hinter. note that the new code is disabled by default since this
-	is not stablizied yet.
+	* src/autofit/* [FT_OPTION_AUTOFIT2]: Some very experimental changes
+	to improve the Latin auto-hinter.  Note that the new code is
+	disabled by default since it is not stabilized yet.
+
+	* src/autofit/aflatin2.c, src/autofit/aflatin2.h: New files
+	(disabled currently).
+
+	* src/autofit/afhints.c: Remove dead code.
+	(af_axis_hints_new_edge): Add argument to handle segment directions.
+	(af_edge_flags_to_string): New function.
+	(af_glyph_hints_dump_segments, af_glyph_hints_dump_edges): Handle
+	option flags.
+	(af_glyph_hints_reload): Add argument to handle inflections.
+	Simplify.
+	(af_direction_compute): Fine tuning.
+	(af_glyph_hints_align_edge_points): Fix logic.
+	(af_glyph_hints_align_strong_points): Do linear search for small
+	edge counts.
+	(af_glyph_hints_align_weak_points): Skip any touched neighbors.
+	(af_iup_shift): Handle zero `delta'.
+
+	* src/autofit/afhints.h: Updated.
+	(AF_SORT_SEGMENTS): New macro (disabled).
+	(AF_AxisHintsRec) [AF_SORT_SEGMENTS]: New member `mid_segments'.
+
+	* src/autofit/afglobal.c (af_face_globals_get_metrics): Add
+	argument to pass option flags for handling scripts.
+	* src/autofit/afglobal.h: Updated.
+
+	* src/autofit/afcjk.c: Updated.
+	* src/autofit/aflatin.c: Updated.
+	(af_latin_metrics_scale_dim): Don't reduce scale by 2%.
+
+	(af_latin_hints_compute_segments) [AF_HINT_METRICS]: Remove dead code.
+	(af_latin_hints_compute_edges) [AF_HINT_METRICS]: Remove dead code.
+	Don't set `edge->dir'
+	(af_latin_hint_edges): Add more logging.
+
+	* src/autofit/afloader.c: Updated.
 
 2007-06-11  Werner Lemberg  <[email protected]>
 
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -229,10 +229,10 @@
     AF_ScriptMetrics  metrics = NULL;
     FT_UInt           gidx;
     AF_ScriptClass    clazz;
-    FT_UInt           script     = (options & 15);
-    const FT_UInt     script_max = sizeof(af_script_classes)/
-                                   sizeof(af_script_classes[0]);
-    FT_Error          error = AF_Err_Ok;
+    FT_UInt           script     = options & 15;
+    const FT_UInt     script_max = sizeof ( af_script_classes ) /
+                                     sizeof ( af_script_classes[0] );
+    FT_Error          error      = AF_Err_Ok;
 
 
     if ( gindex >= globals->glyph_count )
@@ -242,11 +242,11 @@
     }
 
     gidx = script;
-    if (gidx == 0 || gidx+1 >= script_max)
+    if ( gidx == 0 || gidx + 1 >= script_max )
       gidx = globals->glyph_scripts[gindex];
 
-    clazz   = af_script_classes[gidx];
-    if (script == 0)
+    clazz = af_script_classes[gidx];
+    if ( script == 0 )
       script = clazz->script;
 
     metrics = globals->metrics[clazz->script];
--- a/src/autofit/afglobal.h
+++ b/src/autofit/afglobal.h
@@ -5,7 +5,7 @@
 /*    Auto-fitter routines to compute global hinting values                */
 /*    (specification).                                                     */
 /*                                                                         */
-/*  Copyright 2003, 2004, 2005 by                                          */
+/*  Copyright 2003, 2004, 2005, 2007 by                                    */
 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
 /*                                                                         */
 /*  This file is part of the FreeType project, and may only be used,       */
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -101,13 +101,12 @@
 
     while ( edge > edges )
     {
-      if (edge[-1].fpos < fpos)
+      if ( edge[-1].fpos < fpos )
         break;
 
-     /* we want the edge with same position and minor direction
-      * to appear before those in the major one in the list
-      */
-      if (edge[-1].fpos == fpos && dir == axis->major_dir)
+      /* we want the edge with same position and minor direction */
+      /* to appear before those in the major one in the list     */
+      if ( edge[-1].fpos == fpos && dir == axis->major_dir )
         break;
 
       edge[0] = edge[-1];
@@ -198,28 +197,31 @@
   static const char*
   af_edge_flags_to_string( AF_Edge_Flags  flags )
   {
-    static  char  temp[32];
-    int     pos = 0;
+    static char  temp[32];
+    int          pos = 0;
 
+
     if ( flags & AF_EDGE_ROUND )
     {
-      memcpy( temp+pos, "round", 5 );
+      memcpy( temp + pos, "round", 5 );
       pos += 5;
     }
     if ( flags & AF_EDGE_SERIF )
     {
-      if (pos > 0)
+      if ( pos > 0 )
         temp[pos++] = ' ';
-      memcpy( temp+pos, "serif", 5 );
+      memcpy( temp + pos, "serif", 5 );
       pos += 5;
     }
-    if (pos == 0)
+    if ( pos == 0 )
       return "normal";
 
     temp[pos] = 0;
+
     return temp;
   }
 
+
   /* A function to dump the array of linked segments. */
   void
   af_glyph_hints_dump_segments( AF_GlyphHints  hints )
@@ -244,13 +246,14 @@
       {
         printf ( "  [ %5d | %5.2g | %5s | %4d | %5d | %5d | %5d | %s ]\n",
                  seg - segments,
-                 dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox/64.0 : (int)seg->first->oy/64.0,
+                 dimension == AF_DIMENSION_HORZ ? (int)seg->first->ox / 64.0
+                                                : (int)seg->first->oy / 64.0,
                  af_dir_str( (AF_Direction)seg->dir ),
                  AF_INDEX_NUM( seg->link, segments ),
                  AF_INDEX_NUM( seg->serif, segments ),
                  seg->height,
                  seg->height - ( seg->max_coord - seg->min_coord ),
-                 af_edge_flags_to_string(seg->flags));
+                 af_edge_flags_to_string( seg->flags ) );
       }
       printf( "\n" );
     }
@@ -285,7 +288,7 @@
         printf ( "  [ %5d | %5.2g | %5s | %4d |"
                  " %5d |   %c  | %5.2f | %5.2f | %s ]\n",
                  edge - edges,
-                 (int)edge->opos/64.0,
+                 (int)edge->opos / 64.0,
                  af_dir_str( (AF_Direction)edge->dir ),
                  AF_INDEX_NUM( edge->link, edges ),
                  AF_INDEX_NUM( edge->serif, edges ),
@@ -292,7 +295,7 @@
                  edge->blue_edge ? 'y' : 'n',
                  edge->opos / 64.0,
                  edge->pos / 64.0,
-                 af_edge_flags_to_string(edge->flags) );
+                 af_edge_flags_to_string( edge->flags ) );
       }
       printf( "\n" );
     }
@@ -367,7 +370,7 @@
     }
 
     ss *= 14;
-    if ( FT_ABS(ll) <= FT_ABS(ss) )
+    if ( FT_ABS( ll ) <= FT_ABS( ss ) )
       dir = AF_DIR_NONE;
 
     return dir;
@@ -634,13 +637,14 @@
 
       /* compute coordinates & Bezier flags, next and prev */
       {
-        FT_Vector*  vec = outline->points;
-        char*       tag = outline->tags;
-        AF_Point    first = points;
-        AF_Point    end   = points + outline->contours[0];
-        AF_Point    prev  = end;
+        FT_Vector*  vec           = outline->points;
+        char*       tag           = outline->tags;
+        AF_Point    first         = points;
+        AF_Point    end           = points + outline->contours[0];
+        AF_Point    prev          = end;
         FT_Int      contour_index = 0;
 
+
         for ( point = points; point < point_limit; point++, vec++, tag++ )
         {
           point->fx = (FT_Short)vec->x;
@@ -664,7 +668,7 @@
           prev->next  = point;
           prev        = point;
 
-          if (point == end)
+          if ( point == end )
           {
             if ( ++contour_index < outline->n_contours )
             {
@@ -699,11 +703,13 @@
         FT_Pos        in_y   = 0;
         AF_Direction  in_dir = AF_DIR_NONE;
 
+
         for ( point = points; point < point_limit; point++ )
         {
           AF_Point  next;
           FT_Pos    out_x, out_y;
 
+
           if ( point == first )
           {
             prev   = first->prev;
@@ -713,14 +719,14 @@
             first  = prev + 1;
           }
 
-          point->in_dir = (FT_Char) in_dir;
+          point->in_dir = (FT_Char)in_dir;
 
-          next   = point->next;
-          out_x  = next->fx - point->fx;
-          out_y  = next->fy - point->fy;
+          next  = point->next;
+          out_x = next->fx - point->fx;
+          out_y = next->fy - point->fy;
 
           in_dir         = af_direction_compute( out_x, out_y );
-          point->out_dir = (FT_Char) in_dir;
+          point->out_dir = (FT_Char)in_dir;
 
           if ( point->flags & ( AF_FLAG_CONIC | AF_FLAG_CUBIC ) )
           {
@@ -745,8 +751,9 @@
       }
     }
 
-    /* compute inflection points -- disable due to no longer perceived benefits */
-    if (0 && get_inflections)
+    /* compute inflection points --                 */
+    /* disabled due to no longer perceived benefits */
+    if ( 0 && get_inflections )
       af_glyph_hints_compute_inflections( hints );
 
   Exit:
@@ -1021,7 +1028,7 @@
     AF_Point  p;
     FT_Pos    delta = ref->u - ref->v;
 
-    if (delta == 0)
+    if ( delta == 0 )
       return;
 
     for ( p = p1; p < ref; p++ )
@@ -1141,8 +1148,9 @@
 
     for ( ; contour < contour_limit; contour++ )
     {
-      AF_Point   first_touched, last_touched;
+      AF_Point  first_touched, last_touched;
 
+
       point       = *contour;
       end_point   = point->prev;
       first_point = point;
@@ -1164,10 +1172,11 @@
 
       for (;;)
       {
-        FT_ASSERT( point <= end_point && (point->flags & touch_flag) != 0 );
+        FT_ASSERT( point <= end_point &&
+                   ( point->flags & touch_flag ) != 0 );
 
         /* skip any touched neighbhours */
-        while ( point < end_point && (point[1].flags & touch_flag) != 0 )
+        while ( point < end_point && ( point[1].flags & touch_flag ) != 0 )
           point++;
 
         last_touched = point;
@@ -1179,7 +1188,7 @@
           if ( point > end_point )
             goto EndContour;
 
-          if ( (point->flags & touch_flag) != 0 )
+          if ( ( point->flags & touch_flag ) != 0 )
             break;
 
           point++;
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -2009,13 +2009,16 @@
                           FT_MulDiv( edge->opos - before->opos,
                                      after->pos - before->pos,
                                      after->opos - before->opos );
-            AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) from %d (opos=%.2f)\n",
-                     edge-edges, edge->opos / 64.0, edge->pos / 64.0, before - edges, before->opos / 64.0 ));
+            AF_LOG(( "SERIF_LINK1: edge %d (opos=%.2f) snapped to (%.2f) "
+                     "from %d (opos=%.2f)\n",
+                     edge-edges, edge->opos / 64.0,
+                     edge->pos / 64.0, before - edges,
+                     before->opos / 64.0 ));
           }
           else
           {
-              edge->pos = anchor->pos + (( edge->opos - anchor->opos + 16) & ~31);
-
+            edge->pos = anchor->pos +
+                        ( ( edge->opos - anchor->opos + 16 ) & ~31 );
             AF_LOG(( "SERIF_LINK2: edge %d (opos=%.2f) snapped to (%.2f)\n",
                      edge-edges, edge->opos / 64.0, edge->pos / 64.0 ));
           }
--- a/src/autofit/afloader.c
+++ b/src/autofit/afloader.c
@@ -494,9 +494,10 @@
       AF_ScriptMetrics  metrics;
       FT_UInt           options = 0;
 
+
 #ifdef FT_OPTION_AUTOFIT2
       /* XXX: undocumented hook to activate the latin2 hinter */
-      if (load_flags & (1UL << 20))
+      if ( load_flags & ( 1UL << 20 ) )
         options = 2;
 #endif