summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-07-13 01:14:58 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-07-30 23:57:00 +0530
commitab75cfedd094f9868dda920402018914fd30341a (patch)
treebf976274b40e0ce46a089dc34faa6b0d94391400
parent460fe90b590f55ca99d3f05b5ca30d8486e08845 (diff)
downloadfreetype2-ab75cfedd094f9868dda920402018914fd30341a.tar.gz
[pk] Fixes.
-rw-r--r--include/freetype/internal/fttrace.h4
-rw-r--r--modules.cfg3
-rw-r--r--src/pk/pklib.c147
3 files changed, 85 insertions, 69 deletions
diff --git a/include/freetype/internal/fttrace.h b/include/freetype/internal/fttrace.h
index 5a7700c14..6fee24b65 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 61042c05e..10030735e 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 6274003ed..eecf77dc4 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 )