freetype-commit
[Top][All Lists]
Advanced

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

[freetype2] parthw-cleaned ab75cfe 07/10: [pk] Fixes.


From: Parth Wazurkar
Subject: [freetype2] parthw-cleaned ab75cfe 07/10: [pk] Fixes.
Date: Mon, 30 Jul 2018 14:32:01 -0400 (EDT)

branch: parthw-cleaned
commit ab75cfedd094f9868dda920402018914fd30341a
Author: Parth Wazurkar <address@hidden>
Commit: Parth Wazurkar <address@hidden>

    [pk] Fixes.
---
 include/freetype/internal/fttrace.h |   4 +
 modules.cfg                         |   3 +
 src/pk/pklib.c                      | 147 +++++++++++++++++++-----------------
 3 files changed, 85 insertions(+), 69 deletions(-)

diff --git a/include/freetype/internal/fttrace.h 
b/include/freetype/internal/fttrace.h
index 5a7700c..6fee24b 100644
--- a/include/freetype/internal/fttrace.h
+++ b/include/freetype/internal/fttrace.h
@@ -123,6 +123,10 @@ FT_TRACE_DEF( gflib )
   /* TFM helper module components */
 FT_TRACE_DEF( tfmobjs )
 
+  /* PK font components */
+FT_TRACE_DEF( pkdriver )
+FT_TRACE_DEF( pklib )
+
   /* PFR font component */
 FT_TRACE_DEF( pfr )
 
diff --git a/modules.cfg b/modules.cfg
index 61042c0..1003073 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -70,6 +70,9 @@ FONT_MODULES += bdf
 # GF font driver.
 FONT_MODULES += gf
 
+# PK font driver.
+FONT_MODULES += pk
+
 # SFNT files support.  If used without `truetype' or `cff', it supports
 # bitmap-only fonts within an SFNT wrapper.
 #
diff --git a/src/pk/pklib.c b/src/pk/pklib.c
index 6274003..eecf77d 100644
--- a/src/pk/pklib.c
+++ b/src/pk/pklib.c
@@ -54,8 +54,12 @@ unsigned char   bit_table[] = {
   unsigned long  pk_read_uintn(FT_Stream,int);
 
 #define READ_UINT1( stream )    (UINT1)pk_read_uintn( stream, 1)
+#define READ_UINT2( stream )    (UINT1)pk_read_uintn( stream, 2)
+#define READ_UINT3( stream )    (UINT1)pk_read_uintn( stream, 3)
+#define READ_UINT4( stream )    (UINT1)pk_read_uintn( stream, 4)
 #define READ_UINTN( stream,n)   (UINT4)pk_read_uintn( stream, n)
 #define READ_INT1( stream )     (INT1)pk_read_intn( stream, 1)
+#define READ_INT2( stream )     (INT1)pk_read_intn( stream, 2)
 #define READ_INT4( stream )     (INT4)pk_read_intn( stream, 4)
 
 /*
@@ -104,6 +108,72 @@ unsigned char   bit_table[] = {
     return v;
   }
 
+  int  pk_read_nyble_rest_cnt;
+  int  pk_read_nyble_max_bytes;
+
+  void
+  pk_read_nyble_init(int max)
+  {
+    pk_read_nyble_rest_cnt  = 0;
+    pk_read_nyble_max_bytes = max;
+  }
+
+  int
+  pk_read_nyble(FT_Stream stream)
+  {
+    static UINT1  d;
+    int           v;
+
+    switch (pk_read_nyble_rest_cnt)
+    {
+    case 0:
+      d = READ_UINT1( stream );
+      if (--pk_read_nyble_max_bytes < 0)
+        return -1L;
+      v = d / 0x10;
+      d = d % 0x10;
+      pk_read_nyble_rest_cnt = 1;
+      break;
+    case 1:
+    default:
+      v = d;
+      pk_read_nyble_rest_cnt = 0;
+      break;
+    }
+  return v;
+  }
+
+  long
+  pk_read_packed_number(long* repeat, FT_Stream stream, int dyn_f)
+  {
+    int   d, n;
+    long  di;
+
+    entry:
+      d = pk_read_nyble( stream );
+      if (d == 0)
+      {
+        n = 0;
+        do
+        {
+          di = pk_read_nyble( stream );
+          n++;
+        }
+        while (di == 0);
+        for ( ; n > 0; n--)
+          di = di*16 + pk_read_nyble( stream );
+        return di - 15 + (13 - dyn_f)*16 + dyn_f;
+      }
+    if (d <= dyn_f)
+      return d;
+    if (d <= 13)
+      return (d - dyn_f - 1)*16 + pk_read_nyble( stream ) + dyn_f + 1;
+    *repeat = 1;
+    if (d == 14)
+      *repeat = pk_read_packed_number(repeat, stream, dyn_f);
+    goto entry;
+  }
+
   int
   pk_read_14(FT_Stream stream, int dyn_f, int bw, UINT4 rs, PK_Bitmap bm, long 
cc)
   {
@@ -205,73 +275,6 @@ unsigned char   bit_table[] = {
     return 0;
   }
 
-  long
-  pk_read_packed_number(long* repeat, FT_Stream, int dyn_f)
-  {
-    int   d, n;
-    long  di;
-
-    entry:
-      d = pk_read_nyble( stream );
-      if (d == 0)
-      {
-        n = 0;
-        do
-        {
-          di = pk_read_nyble( stream );
-          n++;
-        }
-        while (di == 0);
-        for ( ; n > 0; n--)
-          di = di*16 + pk_read_nyble( stream );
-        return di - 15 + (13 - dyn_f)*16 + dyn_f;
-      }
-    if (d <= dyn_f)
-      return d;
-    if (d <= 13)
-      return (d - dyn_f - 1)*16 + pk_read_nyble( stream ) + dyn_f + 1;
-    *repeat = 1;
-    if (d == 14)
-      *repeat = pk_read_packed_number(repeat, stream, dyn_f);
-    goto entry;
-  }
-
-  int  pk_read_nyble_rest_cnt;
-  int  pk_read_nyble_max_bytes;
-
-  void
-  pk_read_nyble_init(int max)
-  {
-    pk_read_nyble_rest_cnt  = 0;
-    pk_read_nyble_max_bytes = max;
-  }
-
-  int
-  pk_read_nyble(FT_Stream stream)
-  {
-    static UINT1  d;
-    int           v;
-
-    switch (pk_read_nyble_rest_cnt)
-    {
-    case 0:
-      d = READ_UINT1( stream );
-      if (--pk_read_nyble_max_bytes < 0)
-        return -1L;
-      v = d / 0x10;
-      d = d % 0x10;
-      pk_read_nyble_rest_cnt = 1;
-      break;
-    case 1:
-    default:
-      v = d;
-      pk_read_nyble_rest_cnt = 0;
-      break;
-    }
-  return v;
-  }
-
-
   /**************************************************************************
    *
    * API.
@@ -291,8 +294,13 @@ unsigned char   bit_table[] = {
     INT4          hoff, voff, mv_x, mv_y;
     long          gptr;
     int           bc, ec, nchars, index, i;
+    FT_Error      error  = FT_Err_Ok;
+    FT_Memory     memory = extmemory; /* needed for FT_NEW */
+
+    go = NULL;
+    nchars = -1;
 
-    k         = READ_UINT1( stream );
+    k = READ_UINT1( stream );
     if ( FT_STREAM_SKIP( k ) )
       goto Exit;
     ds        = READ_UINT4( stream );
@@ -518,13 +526,14 @@ unsigned char   bit_table[] = {
       }
       FT_FREE(go->bm_table);
       FT_FREE(go);
+      return error;
   }
 
   FT_LOCAL_DEF( void )
   pk_free_font( PK_Face face )
   {
     FT_Memory  memory = FT_FACE( face )->memory;
-    GF_Glyph   go     = face->pk_glyph;
+    PK_Glyph   go     = face->pk_glyph;
     FT_UInt    nchars = FT_FACE( face )->num_glyphs,i;
 
     if ( !go )



reply via email to

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