shithub: freetype+ttf2subf

Download patch

ref: 61bd4b9dd1713faf57e738b3ca5e728f87e7e912
parent: 1c0d4acb256927c69bcfadc47c98458754e20865
author: Werner Lemberg <[email protected]>
date: Tue Jun 6 20:00:08 EDT 2000

Added FT_FRAME_SKIP_xxx to skip fields.

More use of READ_Fields() in ttsbit.c

Other minor fixes.

git/fs: mount .git/fs: mount/attach disallowed
--- a/include/freetype/internal/ftstream.h
+++ b/include/freetype/internal/ftstream.h
@@ -83,6 +83,11 @@
 #define FT_FRAME_SHORT_LE(s,f)  FT_FRAME_FIELD( ft_frame_short_le, s, f )
 #define FT_FRAME_USHORT_LE(s,f) FT_FRAME_FIELD( ft_frame_ushort_le, s, f )
 
+#define FT_FRAME_SKIP_LONG   { ft_frame_long_be, 0, 0 }
+#define FT_FRAME_SKIP_SHORT  { ft_frame_short_be, 0, 0 }
+#define FT_FRAME_SKIP_BYTE   { ft_frame_byte, 0, 0 }
+
+
   /*************************************************************************/
   /*                                                                       */
   /* integer extraction macros - the `buffer' parameter must ALWAYS be of  */
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -373,7 +373,7 @@
     else
       a = 0x7FFFFFFFL;
 
-    return ( s < 0 ) ? -a : a;
+    return ( s < 0 ? -a : a );
   }
 
 
@@ -648,7 +648,7 @@
       else
         q = 0x7FFFFFFFL;
 
-      return ( s < 0 ) ? -(FT_Int32)q : (FT_Int32)q;
+      return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
     }
 
     r  = x->hi;
@@ -655,7 +655,7 @@
     lo = x->lo;
 
     if ( r >= (FT_Word32)y ) /* we know y is to be treated as unsigned here */
-      return ( s < 0 ) ? 0x80000001UL : 0x7FFFFFFFUL;
+      return ( s < 0 ? 0x80000001UL : 0x7FFFFFFFUL );
                              /* Return Max/Min Int32 if division overflow.  */
                              /* This includes division by zero!             */
     q = 0;
@@ -673,7 +673,7 @@
       lo <<= 1;
     }
 
-    return ( s < 0 ) ? -(FT_Int32)q : (FT_Int32)q;
+    return ( s < 0 ? -(FT_Int32)q : (FT_Int32)q );
   }
 
 
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -1371,7 +1371,7 @@
       {
         /* the arc is y-monotonous, either ascending or descending */
         /* detect a change of direction                            */
-        state_bez =  y1 < y3 ? Ascending : Descending;
+        state_bez = y1 < y3 ? Ascending : Descending;
         if ( ras.state != state_bez )
         {
           /* finalize current profile if any */
@@ -1498,7 +1498,7 @@
       }
       else
       {
-        state_bez = ( y1 <= y4 ) ? Ascending : Descending;
+        state_bez = y1 <= y4 ? Ascending : Descending;
 
         /* detect a change of direction */
         if ( ras.state != state_bez )
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -531,38 +531,35 @@
       switch ( fields->value )
       {
       case ft_frame_start:  /* access a new frame */
-        {
-          error = FT_Access_Frame( stream, fields->offset );
-          if ( error )
-            goto Exit;
+        error = FT_Access_Frame( stream, fields->offset );
+        if ( error )
+          goto Exit;
 
-          frame_accessed = 1;
-          fields++;
-          continue;  /* loop! */
-        }
+        frame_accessed = 1;
+        fields++;
+        continue;  /* loop! */
 
       case ft_frame_byte:
       case ft_frame_schar:  /* read a single byte */
-        {
-          value = GET_Byte();
-          sign_shift = 24;
-          break;
-        }
+        value = GET_Byte();
+        sign_shift = 24;
+        break;
 
       case ft_frame_short_be:
       case ft_frame_ushort_be:  /* read a 2-byte big-endian short */
-        {
-          value = GET_UShort();
-          sign_shift = 16;
-          break;
-        }
+        value = GET_UShort();
+        sign_shift = 16;
+        break;
 
       case ft_frame_short_le:
       case ft_frame_ushort_le:  /* read a 2-byte little-endian short */
         {
           char* p;
+
+
           value = 0;
           p     = stream->cursor;
+
           if ( p + 1 < stream->limit )
           {
             value = ( FT_UShort)p[0] | ((FT_UShort)p[1] << 8 );
@@ -574,11 +571,9 @@
 
       case ft_frame_long_be:
       case ft_frame_ulong_be:  /* read a 4-byte big-endian long */
-        {
-          value = GET_ULong();
-          sign_shift = 0;
-          break;
-        }
+        value = GET_ULong();
+        sign_shift = 0;
+        break;
 
       case ft_frame_long_le:
       case ft_frame_ulong_le:  /* read a 4-byte little-endian long */
@@ -588,12 +583,13 @@
 
           value = 0;
           p     = stream->cursor;
+
           if ( p + 3 < stream->limit )
           {
-            value =  (FT_ULong)p[0]         |
-                   ( (FT_ULong)p[1] << 8  ) |
-                   ( (FT_ULong)p[2] << 16 ) |
-                   ( (FT_ULong)p[3] << 24 );
+            value =   (FT_ULong)p[0]         |
+                    ( (FT_ULong)p[1] << 8  ) |
+                    ( (FT_ULong)p[2] << 16 ) |
+                    ( (FT_ULong)p[3] << 24 );
             stream->cursor += 4;
           }
           sign_shift = 0;
@@ -602,11 +598,9 @@
 
       case ft_frame_off3_be:
       case ft_frame_uoff3_be:  /* read a 3-byte big-endian long */
-        {
-          value = GET_UOffset();
-          sign_shift = 8;
-          break;
-        }
+        value = GET_UOffset();
+        sign_shift = 8;
+        break;
 
       case ft_frame_off3_le:
       case ft_frame_uoff3_le:  /* read a 3-byte little-endian long */
@@ -616,12 +610,13 @@
 
           value = 0;
           p     = stream->cursor;
+
           if ( p + 3 < stream->limit )
           {
-            value =  (FT_ULong)p[0]         |
-                   ( (FT_ULong)p[1] << 8  ) |
-                   ( (FT_ULong)p[2] << 16 ) |
-                   ( (FT_ULong)p[3] << 24 );
+            value =   (FT_ULong)p[0]         |
+                    ( (FT_ULong)p[1] << 8  ) |
+                    ( (FT_ULong)p[2] << 16 ) |
+                    ( (FT_ULong)p[3] << 24 );
             stream->cursor += 4;
           }
           sign_shift = 8;
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -130,7 +130,7 @@
       /* load subheaders */
 
       cmap2->numGlyphId = l =
-        ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xffff ) / 2;
+        ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xFFFF ) / 2;
 
       if ( ALLOC_ARRAY( cmap2->subHeaders,
                         num_SH + 1,
--- a/src/sfnt/ttsbit.c
+++ b/src/sfnt/ttsbit.c
@@ -403,7 +403,29 @@
       FT_FRAME_END
     };
 
+    const FT_Frame_Field  strike_start_fields[] =
+    {
+      /* no FT_FRAME_START */
+        FT_FRAME_ULONG( TT_SBit_Strike, ranges_offset ),
+        FT_FRAME_SKIP_LONG,
+        FT_FRAME_ULONG( TT_SBit_Strike, num_ranges ),
+        FT_FRAME_ULONG( TT_SBit_Strike, color_ref ),
+      FT_FRAME_END
+    };
 
+    const FT_Frame_Field  strike_end_fields[] =
+    {
+      /* no FT_FRAME_START */
+        FT_FRAME_USHORT( TT_SBit_Strike, start_glyph ),
+        FT_FRAME_USHORT( TT_SBit_Strike, end_glyph ),
+        FT_FRAME_BYTE  ( TT_SBit_Strike, x_ppem ),
+        FT_FRAME_BYTE  ( TT_SBit_Strike, y_ppem ),
+        FT_FRAME_BYTE  ( TT_SBit_Strike, bit_depth ),
+        FT_FRAME_CHAR  ( TT_SBit_Strike, flags ),
+      FT_FRAME_END
+    };
+
+
     face->num_sbit_strikes = 0;
 
     /* this table is optional */
@@ -450,24 +472,12 @@
 
       while ( count > 0 )
       {
-        TT_ULong  indexTablesSize;
+        (void)READ_Fields( strike_start_fields, strike );
 
-
-        strike->ranges_offset = GET_ULong();
-        indexTablesSize       = GET_ULong();  /* don't save */
-
-        strike->num_ranges    = GET_ULong();
-        strike->color_ref     = GET_ULong();
-
         (void)READ_Fields( sbit_line_metrics_fields, &strike->hori );
         (void)READ_Fields( sbit_line_metrics_fields, &strike->vert );
 
-        strike->start_glyph   = GET_UShort();
-        strike->end_glyph     = GET_UShort();
-        strike->x_ppem        = GET_Byte();
-        strike->y_ppem        = GET_Byte();
-        strike->bit_depth     = GET_Byte();
-        strike->flags         = GET_Char();
+        (void)READ_Fields( strike_end_fields, strike );
 
         count--;
         strike++;