summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-09-08 21:15:45 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-09-08 21:15:45 +0530
commit38f652dbd6bc8f1f75299feb2f56149415054de4 (patch)
treebf8eb2e383408954a3c50322890e9e6fa44cee87
parent52fc5d1819809c0c9d1480cdb965e7975bde1e42 (diff)
downloadfreetype2-38f652dbd6bc8f1f75299feb2f56149415054de4.tar.gz
[gf] Formatting fixes.
-rw-r--r--src/gf/gf.h2
-rw-r--r--src/gf/gfdrivr.c127
-rw-r--r--src/gf/gfdrivr.h41
-rw-r--r--src/gf/gferror.h2
-rw-r--r--src/gf/gflib.c433
5 files changed, 310 insertions, 295 deletions
diff --git a/src/gf/gf.h b/src/gf/gf.h
index 7fae6ebae..334ecfccc 100644
--- a/src/gf/gf.h
+++ b/src/gf/gf.h
@@ -28,7 +28,6 @@
FT_BEGIN_HEADER
-#define FONT_DRIVER_GF 1
#define GF_PRE 247
#define GF_ID 131
@@ -61,6 +60,7 @@ FT_BEGIN_HEADER
#define toint(x) (int)(((x)>0)?(x+0.5):(x-0.5))
+
FT_END_HEADER
diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c
index fd65cd65d..2c9092da1 100644
--- a/src/gf/gfdrivr.c
+++ b/src/gf/gfdrivr.c
@@ -53,8 +53,8 @@
gf_cmap_init( FT_CMap gfcmap,
FT_Pointer init_data )
{
- GF_CMap cmap = (GF_CMap)gfcmap;
- GF_Face face = (GF_Face)FT_CMAP_FACE( cmap );
+ GF_CMap cmap = (GF_CMap) gfcmap;
+ GF_Face face = (GF_Face) FT_CMAP_FACE( cmap );
FT_UNUSED( init_data );
cmap->num_encodings = face->gf_glyph->nencodings;
@@ -67,7 +67,7 @@
FT_CALLBACK_DEF( void )
gf_cmap_done( FT_CMap gfcmap )
{
- GF_CMap cmap = (GF_CMap)gfcmap;
+ GF_CMap cmap = (GF_CMap) gfcmap;
cmap->encodings = NULL;
cmap->num_encodings = 0;
@@ -79,30 +79,31 @@
gf_cmap_char_index( FT_CMap gfcmap,
FT_UInt32 charcode )
{
- GF_CMap cmap = (GF_CMap)gfcmap;
+ GF_CMap cmap = (GF_CMap) gfcmap;
GF_Encoding encodings = cmap->encodings;
- FT_UInt max, code, result = 0, i;
+ FT_UInt max, code, result = 0, i;
max = cmap->num_encodings;
for( i = 0; i < max; i++ )
{
- code = (FT_ULong)encodings[i].enc;
+ code = (FT_ULong) encodings[i].enc;
if ( charcode == code )
{
result = encodings[i].glyph;
goto Exit;
}
}
- Exit:
- return result;
+ Exit:
+ return result;
}
+
FT_CALLBACK_DEF( FT_UInt )
gf_cmap_char_next( FT_CMap gfcmap,
FT_UInt32 *acharcode )
{
- GF_CMap cmap = (GF_CMap)gfcmap;
+ GF_CMap cmap = (GF_CMap) gfcmap;
GF_Encoding encodings = cmap->encodings;
FT_UInt result = 0, i, code, max;
FT_ULong charcode = *acharcode + 1;
@@ -111,7 +112,7 @@
for( i = 0; i < max; i++ )
{
- code = (FT_ULong)encodings[i].enc;
+ code = (FT_ULong) encodings[i].enc;
if ( charcode == code )
{
result = encodings[i].glyph + 1;
@@ -127,7 +128,7 @@
/* XXX: result should be changed to indicate an overflow error */
}
else
- *acharcode = (FT_UInt32)charcode;
+ *acharcode = (FT_UInt32) charcode;
return result;
}
@@ -146,12 +147,11 @@
FT_CALLBACK_DEF( void )
- GF_Face_Done( FT_Face gfface ) /* GF_Face */
+ GF_Face_Done( FT_Face gfface ) /* GF_Face */
{
- GF_Face face = (GF_Face)gfface;
+ GF_Face face = (GF_Face) gfface;
FT_Memory memory;
-
if ( !face )
return;
@@ -168,16 +168,16 @@
FT_CALLBACK_DEF( FT_Error )
- GF_Face_Init( FT_Stream stream,
- FT_Face gfface, /* GF_Face */
- FT_Int face_index,
- FT_Int num_params,
- FT_Parameter* params )
+ GF_Face_Init( FT_Stream stream,
+ FT_Face gfface, /* GF_Face */
+ FT_Int face_index,
+ FT_Int num_params,
+ FT_Parameter* params )
{
- GF_Face face = (GF_Face)gfface;
+ GF_Face face = (GF_Face) gfface;
FT_Error error = FT_Err_Ok;
FT_Memory memory = FT_FACE_MEMORY( face );
- GF_Glyph go=NULL;
+ GF_Glyph go = NULL;
TFM_Service tfm;
@@ -185,9 +185,9 @@
FT_UNUSED( params );
- face->tfm = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ),
- "tfm" );
- tfm = (TFM_Service)face->tfm;
+ face->tfm = FT_Get_Module_Interface( FT_FACE_LIBRARY( face ), "tfm" );
+
+ tfm = (TFM_Service) face->tfm;
if ( !tfm )
{
FT_ERROR(( "GF_Face_Init: cannot access `tfm' module\n" ));
@@ -244,9 +244,9 @@
*/
gfface->family_name = NULL;
- gfface->num_glyphs = (FT_Long)go->nglyphs;
+ gfface->num_glyphs = (FT_Long) go->nglyphs;
- FT_TRACE4(( " number of glyphs: allocated %d\n",gfface->num_glyphs ));
+ FT_TRACE4(( " number of glyphs: allocated %d\n", gfface->num_glyphs ));
if ( gfface->num_glyphs <= 0 )
{
@@ -266,16 +266,15 @@
bsize->height = (FT_Short) face->gf_glyph->font_bbx_h ;
bsize->width = (FT_Short) face->gf_glyph->font_bbx_w ;
bsize->size = (FT_Pos) FT_MulDiv( FT_ABS( face->gf_glyph->ds ),
- 64 * 7200,
- 72270L );
-
+ 64 * 7200,
+ 72270L );
x_res = toint( go->hppp * 72.27 );
y_res = toint( go->vppp * 72.27 );
bsize->y_ppem = (FT_Pos) toint((face->gf_glyph->ds * y_res)/ 72.27) << 6 ;
- bsize->x_ppem = (FT_Pos)FT_MulDiv( bsize->y_ppem,
- x_res,
- y_res ); ;
+ bsize->x_ppem = (FT_Pos) FT_MulDiv( bsize->y_ppem,
+ x_res,
+ y_res );
}
/* set up charmap */
@@ -298,7 +297,6 @@
charmap.face = FT_FACE( face );
charmap.encoding = FT_ENCODING_NONE;
- /* initial platform/encoding should indicate unset status? */
charmap.platform_id = TT_PLATFORM_APPLE_UNICODE;
charmap.encoding_id = TT_APPLE_ID_DEFAULT;
@@ -331,6 +329,7 @@
return FT_THROW( Unknown_File_Format );
}
+
FT_CALLBACK_DEF( FT_Error )
GF_Size_Select( FT_Size size,
FT_ULong strike_index )
@@ -341,7 +340,7 @@
FT_Select_Metrics( size->face, 0 );
- size->metrics.ascender = (go->font_bbx_h - go->font_bbx_yoff) * 64;
+ size->metrics.ascender = ( go->font_bbx_h - go->font_bbx_yoff ) * 64;
size->metrics.descender = -go->font_bbx_yoff * 64;
size->metrics.max_advance = go->font_bbx_w * 64;
@@ -349,11 +348,12 @@
}
+
FT_CALLBACK_DEF( FT_Error )
GF_Size_Request( FT_Size size,
FT_Size_Request req )
{
- GF_Face face = (GF_Face)size->face;
+ GF_Face face = (GF_Face) size->face;
FT_Bitmap_Size* bsize = size->face->available_sizes;
FT_Error error = FT_ERR( Invalid_Pixel_Size );
FT_Long height;
@@ -386,15 +386,14 @@
}
-
FT_CALLBACK_DEF( FT_Error )
GF_Glyph_Load( FT_GlyphSlot slot,
FT_Size size,
FT_UInt glyph_index,
FT_Int32 load_flags )
{
- GF_Face gf = (GF_Face)FT_SIZE_FACE( size );
- FT_Face face = FT_FACE( gf );
+ GF_Face gf = (GF_Face) FT_SIZE_FACE( size );
+ FT_Face face = FT_FACE ( gf );
FT_Error error = FT_Err_Ok;
FT_Bitmap* bitmap = &slot->bitmap;
GF_Bitmap bm;
@@ -417,10 +416,8 @@
goto Exit;
}
- FT_TRACE1(( "GF_Glyph_Load: glyph index %d charcode is %d\n", glyph_index, go->bm_table[glyph_index].code ));
-
- if ( (FT_Int)glyph_index < 0 )
- glyph_index = 0;
+ FT_TRACE1(( "GF_Glyph_Load: glyph index %d charcode is %d\n",
+ glyph_index, go->bm_table[glyph_index].code ));
if ( !go->bm_table )
{
@@ -443,7 +440,7 @@
goto Exit;
}
- bitmap->pitch = (int)bm->raster ;
+ bitmap->pitch = (FT_Int) bm->raster ;
/* note: we don't allocate a new array to hold the bitmap; */
/* we can simply point to it */
@@ -464,9 +461,9 @@
" bm->off_x is %ld\n"
" bm->off_y is %ld\n"
" bm->mv_x is %ld\n"
- " bm->mv_y is %ld\n", bm->bbx_height, bm->bbx_width,
- bm->off_x, bm->off_y, bm->mv_x,
- bm->mv_y ));
+ " bm->mv_y is %ld\n",
+ bm->bbx_height, bm->bbx_width, bm->off_x, bm->off_y,
+ bm->mv_x, bm->mv_y ));
ft_synthesize_vertical_metrics( &slot->metrics, bm->bbx_height * 64 );
@@ -474,16 +471,18 @@
return error;
}
+
FT_LOCAL_DEF( void )
TFM_Done_Metrics( FT_Memory memory,
TFM_FontInfo fi )
{
- FT_FREE(fi->width);
- FT_FREE(fi->height);
- FT_FREE(fi->depth);
+ FT_FREE( fi->width );
+ FT_FREE( fi->height );
+ FT_FREE( fi->depth );
FT_FREE( fi );
}
+
/* parse a TFM metrics file */
FT_LOCAL_DEF( FT_Error )
TFM_Read_Metrics( FT_Face gf_face,
@@ -494,14 +493,14 @@
TFM_ParserRec parser;
TFM_FontInfo fi = NULL;
FT_Error error = FT_ERR( Unknown_File_Format );
- GF_Face face = (GF_Face)gf_face;
+ GF_Face face = (GF_Face) gf_face;
GF_Glyph gf_glyph= face->gf_glyph;
if ( face->tfm_data )
{
FT_TRACE1(( "TFM_Read_Metrics:"
- " Freeing previously attached metrics data.\n" ));
+ "Freeing previously attached metrics data.\n" ));
TFM_Done_Metrics( memory, (TFM_FontInfo)face->tfm_data );
face->tfm_data = NULL;
@@ -519,15 +518,16 @@
error = tfm->tfm_parser_funcs->init( &parser,
memory,
stream );
-
if ( !error )
{
FT_TRACE4(( "TFM_Read_Metrics: Initialised tfm metric data.\n" ));
+
parser.FontInfo = fi;
parser.user_data = gf_glyph;
error = tfm->tfm_parser_funcs->parse_metrics( &parser );
- if( !error )
+
+ if( !error )
FT_TRACE4(( "TFM_Read_Metrics: parsing TFM metric information done.\n" ));
FT_TRACE6(( "TFM_Read_Metrics: TFM Metric Information:\n"
@@ -537,10 +537,13 @@
" End Char : %d\n"
" font_bbx_w : %d\n"
" font_bbx_h : %d\n"
- " slant : %d\n", parser.FontInfo->cs, parser.FontInfo->design_size, parser.FontInfo->begin_char,
- parser.FontInfo->end_char, parser.FontInfo->font_bbx_w,
- parser.FontInfo->font_bbx_h, parser.FontInfo->slant ));
- tfm->tfm_parser_funcs->done( &parser );
+ " slant : %d\n",
+ parser.FontInfo->cs, parser.FontInfo->design_size,
+ parser.FontInfo->begin_char, parser.FontInfo->end_char,
+ parser.FontInfo->font_bbx_w, parser.FontInfo->font_bbx_h,
+ parser.FontInfo->slant ));
+
+ tfm->tfm_parser_funcs->done( &parser );
}
}
@@ -563,6 +566,7 @@
return error;
}
+
/*
*
* SERVICES LIST
@@ -576,9 +580,10 @@
{ NULL, NULL }
};
+
FT_CALLBACK_DEF( FT_Module_Interface )
gf_driver_requester( FT_Module module,
- const char* name )
+ const char* name )
{
FT_UNUSED( module );
@@ -598,7 +603,7 @@
0x10000L,
0x20000L,
- NULL, /* module-specific interface */
+ NULL, /* module-specific interface */
NULL, /* FT_Module_Constructor module_init */
NULL, /* FT_Module_Destructor module_done */
@@ -622,8 +627,8 @@
TFM_Read_Metrics, /* FT_Face_AttachFunc attach_file */
NULL, /* FT_Face_GetAdvancesFunc get_advances */
- GF_Size_Request, /* FT_Size_RequestFunc request_size */
- GF_Size_Select /* FT_Size_SelectFunc select_size */
+ GF_Size_Request, /* FT_Size_RequestFunc request_size */
+ GF_Size_Select /* FT_Size_SelectFunc select_size */
};
diff --git a/src/gf/gfdrivr.h b/src/gf/gfdrivr.h
index 122940d25..bcf5b1f26 100644
--- a/src/gf/gfdrivr.h
+++ b/src/gf/gfdrivr.h
@@ -30,47 +30,48 @@ FT_BEGIN_HEADER
typedef struct GF_EncodingRec_
{
- FT_Long enc;
- FT_UShort glyph;
+ FT_Long enc;
+ FT_UShort glyph;
} GF_EncodingRec, *GF_Encoding;
+
/* BitmapRec for GF format specific glyphs */
typedef struct GF_BitmapRec_
{
- FT_Long bbx_width, bbx_height;
- FT_Long off_x, off_y;
- FT_Long mv_x, mv_y;
- FT_Byte *bitmap;
- FT_UInt raster;
- FT_UShort code;
+ FT_Long bbx_width, bbx_height;
+ FT_Long off_x, off_y;
+ FT_Long mv_x, mv_y;
+ FT_Byte *bitmap;
+ FT_UInt raster;
+ FT_UShort code;
} GF_BitmapRec, *GF_Bitmap;
typedef struct GF_GlyphRec_
{
- FT_UInt code_min, code_max;
- GF_Bitmap bm_table;
- FT_Int ds, hppp, vppp;
- FT_Int font_bbx_w, font_bbx_h;
- FT_Int font_bbx_xoff, font_bbx_yoff;
+ FT_UInt code_min, code_max;
+ GF_Bitmap bm_table;
+ FT_Int ds, hppp, vppp;
+ FT_Int font_bbx_w, font_bbx_h;
+ FT_Int font_bbx_xoff, font_bbx_yoff;
- FT_ULong nencodings;
- GF_Encoding encodings;
+ FT_ULong nencodings;
+ GF_Encoding encodings;
- FT_ULong nglyphs;
+ FT_ULong nglyphs;
} GF_GlyphRec, *GF_Glyph;
typedef struct GF_FaceRec_
{
- FT_FaceRec root;
- GF_Glyph gf_glyph;
+ FT_FaceRec root;
+ GF_Glyph gf_glyph;
- const void* tfm;
- const void* tfm_data;
+ const void* tfm;
+ const void* tfm_data;
} GF_FaceRec, *GF_Face;
diff --git a/src/gf/gferror.h b/src/gf/gferror.h
index f2df33e93..904a81f87 100644
--- a/src/gf/gferror.h
+++ b/src/gf/gferror.h
@@ -2,7 +2,7 @@
*
* gferror.h
*
- * FreeType font driver for TeX's GF FONT files
+ * FreeType font driver for METAFONT GF FONT files
*
* Copyright 1996-2018 by
* David Turner, Robert Wilhelm, and Werner Lemberg.
diff --git a/src/gf/gflib.c b/src/gf/gflib.c
index 0041b4668..67ed3b4c1 100644
--- a/src/gf/gflib.c
+++ b/src/gf/gflib.c
@@ -21,6 +21,7 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_OBJECTS_H
+
#include FT_SYSTEM_H
#include FT_CONFIG_CONFIG_H
#include FT_ERRORS_H
@@ -57,22 +58,24 @@ FT_Byte bit_table[] = {
*
*/
- FT_Long gf_read_intn(FT_Stream, FT_Int);
- FT_ULong gf_read_uintn(FT_Stream, FT_Int);
+ FT_Long gf_read_intn ( FT_Stream, FT_Int );
+ FT_ULong gf_read_uintn( FT_Stream, FT_Int );
-#define READ_UINT1( stream ) (FT_Byte)gf_read_uintn( stream, 1)
-#define READ_UINT2( stream ) (FT_Byte)gf_read_uintn( stream, 2)
-#define READ_UINT3( stream ) (FT_Byte)gf_read_uintn( stream, 3)
-#define READ_UINT4( stream ) (FT_Byte)gf_read_uintn( stream, 4)
-#define READ_UINTN( stream,n) (FT_ULong)gf_read_uintn( stream, n)
-#define READ_INT1( stream ) (FT_String)gf_read_intn( stream, 1)
-#define READ_INT4( stream ) (FT_Long)gf_read_intn( stream, 4)
+#define READ_UINT1( stream ) (FT_Byte)gf_read_uintn( stream, 1 )
+#define READ_UINT2( stream ) (FT_Byte)gf_read_uintn( stream, 2 )
+#define READ_UINT3( stream ) (FT_Byte)gf_read_uintn( stream, 3 )
+#define READ_UINT4( stream ) (FT_Byte)gf_read_uintn( stream, 4 )
+#define READ_UINTN( stream, n ) (FT_ULong)gf_read_uintn( stream, n )
+#define READ_INT1( stream ) (FT_String)gf_read_intn( stream, 1 )
+#define READ_INT4( stream ) (FT_Long)gf_read_intn( stream, 4 )
/*
* Reading a Number from file
*/
+
FT_ULong
- gf_read_uintn(FT_Stream stream, FT_Int size)
+ gf_read_uintn( FT_Stream stream,
+ FT_Int size )
{
FT_ULong v,k;
FT_Error error;
@@ -80,19 +83,21 @@ FT_Byte bit_table[] = {
v = 0L;
- while (size >= 1)
+ while ( size >= 1 )
{
if ( FT_READ_BYTE(tp) )
return 0;
- k = (FT_ULong)tp;
+ k = (FT_ULong) tp;
v = v*256L + k;
--size;
}
return v;
}
+
FT_Long
- gf_read_intn(FT_Stream stream, FT_Int size)
+ gf_read_intn( FT_Stream stream,
+ FT_Int size )
{
FT_Long v;
FT_Byte tp;
@@ -100,25 +105,26 @@ FT_Byte bit_table[] = {
FT_ULong z;
if ( FT_READ_BYTE(tp) )
- return 0;
- z = (FT_ULong)tp;
- v = (FT_Long)z & 0xffL;
+ return 0;
+ z = (FT_ULong) tp;
+ v = (FT_Long) z & 0xffL;
- if (v & 0x80L)
+ if( v & 0x80L )
v = v - 256L;
--size;
- while (size >= 1)
+ while ( size >= 1 )
{
if ( FT_READ_BYTE(tp) )
return 0;
- z = (FT_ULong)tp;
+ z = (FT_ULong) tp;
v = v*256L + z;
--size;
- }
+ }
return v;
}
+
static int
compare( FT_Long* a,
FT_Long* b )
@@ -131,12 +137,14 @@ FT_Byte bit_table[] = {
return 0;
}
+
/**************************************************************************
*
* API.
*
*/
+
static FT_Error
gf_set_encodings( GF_CharOffset of,
FT_Int ngphs,
@@ -151,7 +159,6 @@ FT_Byte bit_table[] = {
FT_Long *tosort;
nencoding = ngphs;
- FT_TRACE2(( "gf_set_encodings: Reached here.\n" ));
if ( FT_NEW_ARRAY( encoding, nencoding ) )
return error;
@@ -159,25 +166,22 @@ FT_Byte bit_table[] = {
if ( FT_NEW_ARRAY( tosort, nencoding ) )
return error;
-
- FT_TRACE2(( "gf_set_encodings: Allocated sufficient memory.\n" ));
-
- for( i = 0 ; i < ngphs ; i++ )
+ for ( i = 0 ; i < ngphs ; i++ )
{
- if( of[i].char_offset >= 0 )
+ if ( of[i].char_offset >= 0 )
tosort[i] = of[i].char_offset;
}
ft_qsort( (void*)tosort, ngphs, sizeof(FT_Long),
- (int(*)(const void*, const void*) )compare );
+ (int(*)(const void*, const void*))compare );
k = 0;
for ( i = 0; i < ngphs; i++ )
{
for ( j = 0; j < ngphs; j++ )
{
- if( of[j].char_offset == tosort[i] )
- break;
+ if ( of[j].char_offset == tosort[i] )
+ break;
}
encoding[k].enc = of[j].code;
encoding[k].glyph = k;
@@ -198,19 +202,19 @@ FT_Byte bit_table[] = {
GF_Bitmap bm,
FT_Memory memory )
{
- FT_Long m, n;
- FT_Int paint_sw;
- FT_Int instr,inst;
- FT_Long min_m, max_m, min_n, max_n, del_m, del_n;
- FT_Long w, h, d;
- FT_Int m_b, k;
- FT_Byte *ptr;
- FT_Error error = FT_Err_Ok;
+ FT_Long m, n;
+ FT_Int paint_sw;
+ FT_Int instr,inst;
+ FT_Long min_m, max_m, min_n, max_n, del_m, del_n;
+ FT_Long w, h, d;
+ FT_Int m_b, k;
+ FT_Byte *ptr;
+ FT_Error error = FT_Err_Ok;
for ( ; ; )
{
inst = READ_UINT1( stream );
- switch ((FT_Int)inst)
+ switch ( (FT_Int) inst )
{
case GF_BOC:
if ( FT_STREAM_SKIP( 4 ) )
@@ -264,159 +268,160 @@ FT_Byte bit_table[] = {
return -1;
}
}
-
return 0;
- BOC:
- if(error != FT_Err_Ok)
- return -1;
- w = max_m - min_m + 1;
- h = max_n - min_n + 1;
- if ((w < 0) || (h < 0))
+ BOC:
+ if ( error != FT_Err_Ok )
+ return -1;
+ w = max_m - min_m + 1;
+ h = max_n - min_n + 1;
+ if ( (w < 0) || (h < 0) )
+ {
+ FT_ERROR(( "gf_read_glyph: invalid w and h values\n" ));
+ error = FT_THROW( Invalid_File_Format );
+ return -1;
+ }
+
+ /* allocate and build bitmap */
+ if ( (bm->bitmap = (FT_Byte*)malloc(h*((w+7)/8))) == NULL )
+ {
+ error = FT_THROW( Invalid_File_Format );
+ return -1;
+ }
+
+ memset(bm->bitmap, 0, h*((w+7)/8));
+ bm->raster = (FT_UInt)(w+7)/8;
+ bm->bbx_width = w;
+ bm->bbx_height = h;
+ bm->off_x = -min_m;
+ bm->off_y = max_n;
+ #if 0
+ bm->mv_x = -min_m;
+ bm->mv_y = max_n;
+ #endif
+
+ m = min_m;
+ n = max_n;
+ paint_sw = 0;
+ while ( (instr = (FT_Int)READ_UINT1( stream )) != GF_EOC )
+ {
+ if ( instr == GF_PAINT_0 )
{
- FT_ERROR(( "gf_read_glyph: invalid w and h values\n" ));
- error = FT_THROW( Invalid_File_Format );
- return -1;
+ paint_sw = 1 - paint_sw;
}
-
- /* allocate and build bitmap */
- if ((bm->bitmap = (FT_Byte*)malloc(h*((w+7)/8))) == NULL)
+ else if ( (GF_NEW_ROW_0 <= instr) && (instr <= GF_NEW_ROW_164) )
{
- error = FT_THROW( Invalid_File_Format );
- return -1;
+ m = min_m + (instr - GF_NEW_ROW_0);
+ n = n - 1;
+ paint_sw = 1;
}
-
- memset(bm->bitmap, 0, h*((w+7)/8));
- bm->raster = (FT_UInt)(w+7)/8;
- bm->bbx_width = w;
- bm->bbx_height = h;
- bm->off_x = -min_m;
- bm->off_y = max_n;
- #if 0
- bm->mv_x = -min_m;
- bm->mv_y = max_n;
- #endif
-
- m = min_m;
- n = max_n;
- paint_sw = 0;
- while ((instr = (FT_Int)READ_UINT1( stream )) != GF_EOC)
+ else if ( (GF_PAINT_1 <= instr) && (instr <= GF_PAINT_63) )
{
- if (instr == GF_PAINT_0)
- {
- paint_sw = 1 - paint_sw;
- }
- else if ((GF_NEW_ROW_0 <= instr) && (instr <= GF_NEW_ROW_164))
- {
- m = min_m + (instr - GF_NEW_ROW_0);
- n = n - 1;
- paint_sw = 1;
- }
- else if ((GF_PAINT_1 <= instr) && (instr <= GF_PAINT_63))
- {
- d = (instr - GF_PAINT_1 + 1);
- goto Paint;
- }
- else
+ d = instr - GF_PAINT_1 + 1;
+ goto Paint;
+ }
+ else
+ {
+ switch ( (FT_Int)instr )
{
- switch ((FT_Int)instr)
- {
- case GF_PAINT1:
- case GF_PAINT2:
- case GF_PAINT3:
- d = (FT_ULong)READ_UINTN( stream, (instr - GF_PAINT1 + 1));
- Paint:
- if (paint_sw == 0)
- {
- m = m + d;
- }
- else
+ case GF_PAINT1:
+ case GF_PAINT2:
+ case GF_PAINT3:
+ d = (FT_ULong)READ_UINTN( stream, (instr - GF_PAINT1 + 1));
+ Paint:
+ if (paint_sw == 0)
+ {
+ m = m + d;
+ }
+ else
+ {
+ ptr = &bm->bitmap[(max_n - n) * bm->raster + (m - min_m)/8];
+ m_b = (m - min_m) % 8;
+ while (d > 0)
{
- ptr = &bm->bitmap[(max_n - n) * bm->raster + (m - min_m)/8];
- m_b = (m - min_m) % 8;
- while (d > 0)
+ *ptr |= bit_table[m_b];
+ m++;
+ if (++m_b >= 8)
{
- *ptr |= bit_table[m_b];
- m++;
- if (++m_b >= 8)
- {
- m_b = 0;
- ++ptr;
- }
- d--;
+ m_b = 0;
+ ++ptr;
}
+ d--;
}
- paint_sw = 1 - paint_sw;
- break;
- case GF_SKIP0:
- m = min_m;
- n = n - 1;
- paint_sw = 0;
- break;
- case GF_SKIP1:
- case GF_SKIP2:
- case GF_SKIP3:
- m = min_m;
- n = n - (FT_ULong)READ_UINTN( stream, (instr - GF_SKIP1 + 1)) - 1;
- paint_sw = 0;
- break;
- case GF_XXX1:
- case GF_XXX2:
- case GF_XXX3:
- case GF_XXX4:
- k = READ_UINTN( stream, instr - GF_XXX1 + 1);
- if ( FT_STREAM_SKIP( k ) )
- return -1;
- break;
- case GF_YYY:
- if ( FT_STREAM_SKIP( 4 ) )
- return -1;
- break;
- case GF_NO_OP:
- break;
- default:
- FT_FREE(bm->bitmap);
- bm->bitmap = NULL;
- error = FT_THROW( Invalid_File_Format );
+ }
+ paint_sw = 1 - paint_sw;
+ break;
+ case GF_SKIP0:
+ m = min_m;
+ n = n - 1;
+ paint_sw = 0;
+ break;
+ case GF_SKIP1:
+ case GF_SKIP2:
+ case GF_SKIP3:
+ m = min_m;
+ n = n - (FT_ULong)READ_UINTN( stream, (instr - GF_SKIP1 + 1)) - 1;
+ paint_sw = 0;
+ break;
+ case GF_XXX1:
+ case GF_XXX2:
+ case GF_XXX3:
+ case GF_XXX4:
+ k = READ_UINTN( stream, instr - GF_XXX1 + 1);
+ if ( FT_STREAM_SKIP( k ) )
return -1;
- }
- }
+ break;
+ case GF_YYY:
+ if ( FT_STREAM_SKIP( 4 ) )
+ return -1;
+ break;
+ case GF_NO_OP:
+ break;
+ default:
+ FT_FREE( bm->bitmap );
+ bm->bitmap = NULL;
+ error = FT_THROW( Invalid_File_Format );
+ return -1;
+ }
}
- return 0;
+ }
+ return 0;
}
+
FT_LOCAL_DEF( FT_Error )
gf_load_font( FT_Stream stream,
FT_Memory extmemory,
GF_Glyph *goptr )
{
- GF_Glyph go;
- GF_Bitmap bm;
- GF_CharOffset of;
- FT_Byte instr, d, pre, id, k, code;
- FT_Long ds, check_sum, hppp, vppp;
- FT_Long min_m, max_m, min_n, max_n, w;
- FT_UInt dx, dy;
- FT_Long ptr_post, ptr_p, ptr, optr, rptr;
- FT_Int bc, ec, nchars, i, ngphs, idx;
- FT_Error error = FT_Err_Ok;
- FT_Memory memory = extmemory; /* needed for FT_NEW */
+ GF_Glyph go;
+ GF_Bitmap bm;
+ GF_CharOffset of;
+ FT_Byte instr, d, pre, id, k, code;
+ FT_Long ds, check_sum, hppp, vppp;
+ FT_Long min_m, max_m, min_n, max_n, w;
+ FT_UInt dx, dy;
+ FT_Long ptr_post, ptr_p, ptr, optr, rptr;
+ FT_Int bc, ec, nchars, i, ngphs, idx;
+ FT_Error error = FT_Err_Ok;
+ FT_Memory memory = extmemory; /* needed for FT_NEW */
go = NULL;
nchars = -1;
+ idx = 0;
if( FT_STREAM_SEEK( 0 ) )
goto Exit;
pre = READ_UINT1( stream );
- if (pre != GF_PRE)
+ if ( pre != GF_PRE )
{
error = FT_THROW( Unknown_File_Format );
goto Exit;
}
id = READ_UINT1( stream );
- if (id != GF_ID)
+ if ( id != GF_ID )
{
error = FT_THROW( Unknown_File_Format );
goto Exit;
@@ -429,6 +434,7 @@ FT_Byte bit_table[] = {
/* seek to post_post instr. */
if( FT_STREAM_SEEK( stream->size - 1 ) )
goto Exit;
+
if( FT_STREAM_SEEK( stream->size - 1 ) )
goto Exit;
@@ -438,12 +444,11 @@ FT_Byte bit_table[] = {
goto Exit;
}
-
if( FT_STREAM_SEEK( stream->pos -1 ) )
goto Exit;
d= READ_UINT1( stream );
- if (d != GF_ID)
+ if ( d != GF_ID )
{
FT_ERROR(( "gf_load_font: missing GF_ID(131) field\n" ));
error = FT_THROW( Unknown_File_Format );
@@ -452,11 +457,11 @@ FT_Byte bit_table[] = {
FT_TRACE2(( "gf_load_font: GF_ID(131) found\n" ));
- if(FT_STREAM_SEEK( stream->pos -6 ))
+ if( FT_STREAM_SEEK( stream->pos -6 ) )
goto Exit;
/* check if the code is post_post */
- if (READ_UINT1( stream ) != GF_POST_POST)
+ if ( READ_UINT1( stream ) != GF_POST_POST )
{
FT_ERROR(( "gf_load_font: missing GF_POST_POST(249) field\n" ));
error = FT_THROW( Unknown_File_Format );
@@ -466,10 +471,10 @@ FT_Byte bit_table[] = {
FT_TRACE2(( "gf_load_font: GF_POST_POST(249) found\n" ));
/* read pointer to post instr. */
- if(FT_READ_ULONG( ptr_post ))
+ if( FT_READ_ULONG( ptr_post ) )
goto Exit;
- if (ptr_post == -1)
+ if ( ptr_post == -1 )
{
FT_ERROR(( "gf_load_font: invalid postamble pointer\n" ));
error = FT_THROW( Unknown_File_Format );
@@ -477,27 +482,29 @@ FT_Byte bit_table[] = {
}
/* goto post instr. and read it */
- if(FT_STREAM_SEEK( ptr_post ))
+ if( FT_STREAM_SEEK( ptr_post ) )
goto Exit;
- if (READ_UINT1( stream ) != GF_POST)
+ if ( READ_UINT1( stream ) != GF_POST )
{
FT_ERROR(( "gf_load_font: missing GF_POST(248) field\n" ));
error = FT_THROW( Unknown_File_Format );
goto Exit;
}
+
FT_TRACE2(( "gf_load_font: GF Postamble found\n" ));
- if(FT_READ_ULONG( ptr_p ))
+ if ( FT_READ_ULONG( ptr_p ) )
goto Exit;
- if(FT_READ_ULONG( ds ))
+ if ( FT_READ_ULONG( ds ) )
goto Exit;
- if(FT_READ_ULONG( check_sum ))
+ if ( FT_READ_ULONG( check_sum ) )
goto Exit;
- if(FT_READ_ULONG( hppp ))
+ if ( FT_READ_ULONG( hppp ) )
goto Exit;
- if(FT_READ_ULONG( vppp ))
+ if ( FT_READ_ULONG( vppp ) )
goto Exit;
+
min_m = READ_INT4( stream );
max_m = READ_INT4( stream );
min_n = READ_INT4( stream );
@@ -505,17 +512,18 @@ FT_Byte bit_table[] = {
FT_TRACE5(( "gf_load_font: checksum is %ld\n",check_sum ));
- if( ptr_p < 0 ) /* Defined to use ptr_p */
+ if ( ptr_p < 0 ) /* Defined to use ptr_p */
{
FT_ERROR(( "gf_load_font: invalid pointer in postamble\n" ));
goto Exit;
}
- if( check_sum < 0 ) /* Defined to use check_sum */
+ if ( check_sum < 0 ) /* Defined to use check_sum */
{
FT_ERROR(( "gf_load_font: invalid check sum value\n" ));
goto Exit;
}
+
#if 0
gptr = ftell(fp);
#endif
@@ -527,16 +535,16 @@ FT_Byte bit_table[] = {
for ( ; ; )
{
instr = READ_UINT1(fp);
- if (instr == GF_POST_POST)
+ if ( instr == GF_POST_POST )
{
break;
}
- else if (instr == GF_CHAR_LOC)
+ else if ( instr == GF_CHAR_LOC )
{
code = READ_UINT1(fp);
(void)SKIP_N(fp, 16);
}
- else if (instr == GF_CHAR_LOC0)
+ else if ( instr == GF_CHAR_LOC0 )
{
code = READ_UINT1(fp);
(void)SKIP_N(fp, 9);
@@ -546,9 +554,9 @@ FT_Byte bit_table[] = {
error = FT_THROW( Invalid_File_Format );
goto Exit;
}
- if (code < bc)
+ if ( code < bc )
bc = code;
- if (code > ec)
+ if ( code > ec )
ec = code;
}
#else
@@ -558,24 +566,24 @@ FT_Byte bit_table[] = {
nchars = ec - bc + 1;
- if( FT_ALLOC(go, sizeof(GF_GlyphRec)) )
+ if( FT_ALLOC( go, sizeof(GF_GlyphRec) ) )
goto Exit;
FT_TRACE2(( "gf_load_font: Allocated bitmap table\n" ));
- go->ds = (FT_UInt)ds/(1<<20);
- go->hppp = (FT_UInt)hppp/(1<<16);
- go->vppp = (FT_UInt)vppp/(1<<16);
- go->font_bbx_w = max_m - min_m;
- go->font_bbx_h = max_n - min_n;
- go->font_bbx_xoff = min_m;
- go->font_bbx_yoff = min_n;
- go->code_min = bc;
- go->code_max = ec;
+ go->ds = (FT_UInt)ds/(1<<20);
+ go->hppp = (FT_UInt)hppp/(1<<16);
+ go->vppp = (FT_UInt)vppp/(1<<16);
+ go->font_bbx_w = max_m - min_m;
+ go->font_bbx_h = max_n - min_n;
+ go->font_bbx_xoff = min_m;
+ go->font_bbx_yoff = min_n;
+ go->code_min = bc;
+ go->code_max = ec;
go->nglyphs = 0;
- if( FT_ALLOC_MULT(of, sizeof(GF_CharOffsetRec), nchars) )
+ if( FT_ALLOC_MULT( of, sizeof(GF_CharOffsetRec), nchars ) )
goto Exit;
rptr = stream->pos;
@@ -584,9 +592,9 @@ FT_Byte bit_table[] = {
for ( ; ; )
{
- if ((instr = READ_UINT1( stream )) == GF_POST_POST)
+ if ( (instr = READ_UINT1( stream )) == GF_POST_POST )
break;
- switch ((FT_Int)instr)
+ switch ( (FT_Int)instr )
{
case GF_CHAR_LOC:
code = READ_UINT1( stream );
@@ -608,14 +616,14 @@ FT_Byte bit_table[] = {
goto Exit;
}
- of[i].char_offset = (FT_ULong)ptr;
- of[i].code = (FT_UShort)code;
+ of[i].char_offset = (FT_ULong) ptr;
+ of[i].code = (FT_UShort) code;
of[i].gid = -1;
ngphs += 1;
i++;
}
- if( FT_ALLOC_MULT(go->bm_table, sizeof(GF_BitmapRec), ngphs) )
+ if( FT_ALLOC_MULT( go->bm_table, sizeof(GF_BitmapRec), ngphs ) )
goto Exit;
error = gf_set_encodings( of, ngphs, go, memory );
@@ -627,9 +635,9 @@ FT_Byte bit_table[] = {
for ( ; ; )
{
- if ((instr = READ_UINT1( stream )) == GF_POST_POST)
+ if ( (instr = READ_UINT1( stream )) == GF_POST_POST )
break;
- switch ((FT_Int)instr)
+ switch ( (FT_Int) instr )
{
case GF_CHAR_LOC:
code = READ_UINT1( stream );
@@ -652,7 +660,7 @@ FT_Byte bit_table[] = {
}
optr = stream->pos;
- if( FT_STREAM_SEEK( ptr ) )
+ if ( FT_STREAM_SEEK( ptr ) )
goto Exit;
for ( i = 0; i < 256; i++ )
@@ -663,6 +671,7 @@ FT_Byte bit_table[] = {
break;
}
}
+
bm = &go->bm_table[idx];
bm->mv_x = dx;
@@ -670,29 +679,29 @@ FT_Byte bit_table[] = {
bm->code = code;
go->nglyphs += 1;
- if (gf_read_glyph( stream, bm, memory ) < 0)
+ if ( gf_read_glyph( stream, bm, memory ) < 0 )
goto Exit;
- if(FT_STREAM_SEEK( optr ))
+ if ( FT_STREAM_SEEK( optr ) )
goto Exit;
}
FT_FREE(of);
- *goptr = go;
+ *goptr = go;
return error;
- Exit:
- if (go != NULL)
+ Exit:
+ if ( go != NULL )
+ {
+ if ( go->bm_table )
{
- if( go->bm_table )
- {
- for (i = 0; i < nchars; i++)
- FT_FREE(go->bm_table[i].bitmap);
- }
- FT_FREE(go->bm_table);
- FT_FREE(go);
+ for ( i = 0; i < nchars; i++ )
+ FT_FREE(go->bm_table[i].bitmap);
}
- return error;
+ FT_FREE( go->bm_table );
+ FT_FREE( go );
+ }
+ return error;
}
@@ -708,11 +717,11 @@ FT_Byte bit_table[] = {
if( go->bm_table )
{
- for (i = 0; i < nchars; i++)
- FT_FREE(go->bm_table[i].bitmap);
+ for ( i = 0; i < nchars; i++ )
+ FT_FREE(go->bm_table[i].bitmap);
}
- FT_FREE(go->bm_table);
- FT_FREE(go);
+ FT_FREE( go->bm_table );
+ FT_FREE( go );
}