summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParth Wazurkar <parthwazurkar@gmail.com>2018-06-29 14:24:59 +0530
committerParth Wazurkar <parthwazurkar@gmail.com>2018-07-30 23:47:51 +0530
commit2439cfb7e94f9f4a3e1837389399aed7e94455ca (patch)
tree25a71af70921548660ebddc1798673c9851fa654
parentf7f6a981c4f7fea87b43541e016f48a1c8814b18 (diff)
downloadfreetype2-2439cfb7e94f9f4a3e1837389399aed7e94455ca.tar.gz
[gf] Minor fixes.
-rw-r--r--modules.cfg2
-rw-r--r--src/gf/gf.h1
-rw-r--r--src/gf/gfdrivr.c66
-rw-r--r--src/gf/gfdrivr.h33
-rw-r--r--src/gf/gflib.c125
-rw-r--r--src/gf/rules.mk16
6 files changed, 125 insertions, 118 deletions
diff --git a/modules.cfg b/modules.cfg
index 79be2b916..3337e91bd 100644
--- a/modules.cfg
+++ b/modules.cfg
@@ -68,7 +68,7 @@ FONT_MODULES += pcf
FONT_MODULES += bdf
# GF font driver.
-#FONT_MODULES += gf
+FONT_MODULES += gf
# SFNT files support. If used without `truetype' or `cff', it supports
# bitmap-only fonts within an SFNT wrapper.
diff --git a/src/gf/gf.h b/src/gf/gf.h
index b88f73031..e624b9577 100644
--- a/src/gf/gf.h
+++ b/src/gf/gf.h
@@ -23,6 +23,7 @@
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_STREAM_H
+#include FT_SYSTEM_H
FT_BEGIN_HEADER
diff --git a/src/gf/gfdrivr.c b/src/gf/gfdrivr.c
index a60948f89..11ea9e1b6 100644
--- a/src/gf/gfdrivr.c
+++ b/src/gf/gfdrivr.c
@@ -1,6 +1,6 @@
/****************************************************************************
*
- * gfdrivr.h
+ * gfdrivr.c
*
* FreeType font driver for TeX's GF FONT files
*
@@ -20,7 +20,8 @@
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_INTERNAL_OBJECTS_H
-
+#include FT_TRUETYPE_IDS_H
+#include FT_SERVICE_FONT_FORMAT_H
#include "gf.h"
#include "gfdrivr.h"
@@ -50,10 +51,11 @@
FT_Pointer init_data )
{
GF_CMap cmap = (GF_CMap)gfcmap;
+ GF_Face face = (GF_Face)FT_CMAP_FACE( cmap );
FT_UNUSED( init_data );
- cmap->bc = 0;
- cmap->ec = 255;
+ cmap->bc = face->gf_glyph->code_min;
+ cmap->ec = face->gf_glyph->code_max;
return FT_Err_Ok;
}
@@ -89,6 +91,7 @@
gf_cmap_char_next( FT_CMap gfcmap,
FT_UInt32 *achar_code )
{
+ GF_CMap cmap = (GF_CMap)gfcmap;
FT_UInt gindex = 0;
FT_UInt32 result = 0;
FT_UInt32 char_code = *achar_code + 1;
@@ -131,7 +134,7 @@
GF_Face_Done( FT_Face gfface ) /* GF_Face */
{
GF_Face face = (GF_Face)gfface;
- FT_Memory memory;
+ FT_Memory memory= FT_FACE_MEMORY( gfface );
if ( !face )
@@ -139,7 +142,8 @@
memory = FT_FACE_MEMORY( face );
- gf_free_font( face->gf_glyph );
+ gf_free_font( face->gf_glyph, memory );
+ /* FT_FREE( ); */
}
@@ -154,6 +158,7 @@
FT_Error error;
FT_Memory memory = FT_FACE_MEMORY( face );
GF_Glyph go;
+ int i,count;
face->gf_glyph = &go ;
FT_UNUSED( num_params );
@@ -171,9 +176,20 @@
gfface->num_faces = 1;
gfface->face_index = 0;
- gfface->face_flags | = FT_FACE_FLAG_FIXED_SIZES | FT_FACE_FLAG_HORIZONTAL ;
+ gfface->face_flags |= FT_FACE_FLAG_FIXED_SIZES |
+ FT_FACE_FLAG_HORIZONTAL ;
+ /*
+ * XXX: TO-DO: gfface->face_flags |= FT_FACE_FLAG_FIXED_WIDTH;
+ * XXX: I have to check for this.
+ */
gfface->family_name = NULL;
- gfface->num_glyphs = (FT_Long)(go->code_max - go->code_min + 1 );
+ count=0;
+ for (i = 0; i < 256; i++)
+ {
+ if(go->bm_table[i].bitmap != NULL)
+ count++;
+ }
+ gfface->num_glyphs = (FT_Long)count;
gfface->num_fixed_sizes = 1;
if ( FT_NEW_ARRAY( gfface->available_sizes, 1 ) )
@@ -185,7 +201,7 @@
bsize->width = (FT_Short) face->gf_glyph->font_bbx_w ;
bsize->height = (FT_Short) face->gf_glyph->font_bbx_h ;
- bsize->size = (FT_Short) face->gf_glyph->ds ; /* Preliminary to be checked for 26.6 fractional points*/
+ bsize->size = (FT_Short) face->gf_glyph->ds ; /* Preliminary to be checked for 26.6 fractional points*/
/*x_res = ; To be Checked for x_resolution and y_resolution
y_res = ;*/
@@ -204,7 +220,7 @@
/* initial platform/encoding should indicate unset status? */
charmap.platform_id = TT_PLATFORM_APPLE_UNICODE; /*Preliminary */
charmap.encoding_id = TT_APPLE_ID_DEFAULT;
- charmap.face = root;
+ charmap.face = face;
error = FT_CMap_New( &gf_cmap_class, NULL, &charmap, NULL );
@@ -286,7 +302,10 @@
FT_Face face = FT_FACE( gf );
FT_Error error = FT_Err_Ok;
FT_Bitmap* bitmap = &slot->bitmap;
- GF_BitmapRec glyph ;
+ GF_BitmapRec bm ;
+ GF_Glyph go;
+
+ go = gf->gf_glyph;
FT_UNUSED( load_flags );
@@ -305,26 +324,25 @@
FT_TRACE1(( "GF_Glyph_Load: glyph index %d\n", glyph_index ));
- #if 0
- if ( glyph_index > 0 )
- glyph_index--;
- else
- glyph_index = /* */;
- #endif
-
if ( glyph_index < 0 )
glyph_index = 0;
+ if ((glyph_index < go->code_min) || (go->code_max < glyph_index))
+ {
+ error = FT_THROW( Invalid_Argument );
+ goto Exit;
+ }
+
/* slot, bitmap => freetype, glyph => gflib */
- glyph = gf->gf_glyph->bm_table[glyph_index];
+ bm = gf->gf_glyph->bm_table[glyph_index];
- bitmap->rows = bm.mv_y ; /* Prelimiary */
- bitmap->width = bm.mv_x ; /* Prelimiary */
- /* bitmap->pitch = ; */
+ bitmap->rows = bm.mv_y ; /* Prelimiary */
+ bitmap->width = bm.mv_x ; /* Prelimiary */
+ bitmap->pitch = bm.raster ; /* Prelimiary */
/* note: we don't allocate a new array to hold the bitmap; */
/* we can simply point to it */
- ft_glyphslot_set_bitmap( slot, bm.bitmap );
+ ft_glyphslot_set_bitmap( slot, bm.bitmap ); /* TO CHECK for column and row? like winfont.*/
slot->format = FT_GLYPH_FORMAT_BITMAP;
slot->bitmap_left = bm.off_x ; /* Prelimiary */
@@ -336,7 +354,7 @@
slot->metrics.width = (FT_Pos) ( bitmap->width * 64 ) ; /* Prelimiary */
slot->metrics.height = (FT_Pos) ( bitmap->rows * 64 ) ; /* Prelimiary */
- ft_synthesize_vertical_metrics( &slot->metrics, bm.bbx_height * 64 );
+ ft_synthesize_vertical_metrics( &slot->metrics, bm.bbx_height * 64 );
Exit:
return error;
diff --git a/src/gf/gfdrivr.h b/src/gf/gfdrivr.h
index 07a756469..f32b3b061 100644
--- a/src/gf/gfdrivr.h
+++ b/src/gf/gfdrivr.h
@@ -28,32 +28,33 @@
FT_BEGIN_HEADER
/* BitmapRec for GF format specific glyphs */
- typedef struct GF_BitmapRec_
+ typedef struct GF_BitmapRec_
{
- int bbx_width, bbx_height;
- int off_x, off_y;
- int mv_x, mv_y;
- unsigned char *bitmap;
- int raster;
+ FT_UInt bbx_width, bbx_height;
+ FT_UInt off_x, off_y;
+ FT_UInt mv_x, mv_y;
+ FT_Byte *bitmap;
+ FT_UInt raster;
+
} GF_BitmapRec, *GF_Bitmap;
-
- typedef struct GF_Glyph_
+
+ typedef struct GF_GlyphRec_
{
- int code_min, code_max;
- GF_BITMAP bm_table;
- double ds, hppp, vppp;
- int font_bbx_w, font_bbx_h;
- int font_bbx_xoff, font_bbx_yoff;
- } GF_Glyph, *GF_Glyph;
+ FT_UInt code_min, code_max;
+ GF_Bitmap bm_table;
+ double ds, hppp, vppp;
+ FT_UInt font_bbx_w, font_bbx_h;
+ FT_UInt font_bbx_xoff, font_bbx_yoff;
+
+ } GF_GlyphRec, *GF_Glyph;
typedef struct GF_FaceRec_
{
FT_FaceRec root;
GF_Glyph gf_glyph;
- GF_BitmapRec gf_bitmap;
-
+
} GF_FaceRec, *GF_Face;
diff --git a/src/gf/gflib.c b/src/gf/gflib.c
index 31bd2eca2..aaab4ed73 100644
--- a/src/gf/gflib.c
+++ b/src/gf/gflib.c
@@ -1,6 +1,6 @@
/****************************************************************************
*
- * gfdrivr.h
+ * gflib.c
*
* FreeType font driver for TeX's GF FONT files
*
@@ -107,7 +107,7 @@ unsigned char bit_table[] = {
*/
FT_LOCAL_DEF( FT_Error )
- gf_read_glyph(FT_Stream stream, GF_Bitmap bm)
+ gf_read_glyph(FT_Stream stream, GF_Bitmap bm, FT_Memory memory)
{
long m, n;
int paint_sw;
@@ -116,33 +116,31 @@ unsigned char bit_table[] = {
long w, h, d;
int m_b, k;
unsigned char *ptr;
- FT_Error error = FT_Err_Ok;
- FT_Face face = FT_FACE_STREAM( stream );
- FT_Memory memory = FT_FACE_MEMORY( face );
+ FT_Error error = FT_Err_Ok;
switch (READ_UINT1( stream ))
{
- case GF_BOC:
- FT_STREAM_SKIP( 4 );
- FT_STREAM_SKIP( 4 );
- min_m = READ_INT4( stream );
- max_m = READ_INT4( stream );
- min_n = READ_INT4( stream );
- max_n = READ_INT4( stream );
- break;
-
- case GF_BOC1:
- FT_STREAM_SKIP( 1 );
- del_m = (INT4)READ_UINT1( stream );
- max_m = (INT4)READ_UINT1( stream );
- del_n = (INT4)READ_UINT1( stream );
- max_n = (INT4)READ_UINT1( stream );
- min_m = max_m - del_m;
- min_n = max_n - del_n;
- break;
-
- default:
- goto Fail;
+ case GF_BOC:
+ FT_STREAM_SKIP( 4 );
+ FT_STREAM_SKIP( 4 );
+ min_m = READ_INT4( stream );
+ max_m = READ_INT4( stream );
+ min_n = READ_INT4( stream );
+ max_n = READ_INT4( stream );
+ break;
+
+ case GF_BOC1:
+ FT_STREAM_SKIP( 1 );
+ del_m = (INT4)READ_UINT1( stream );
+ max_m = (INT4)READ_UINT1( stream );
+ del_n = (INT4)READ_UINT1( stream );
+ max_n = (INT4)READ_UINT1( stream );
+ min_m = max_m - del_m;
+ min_n = max_n - del_n;
+ break;
+
+ default:
+ return -1;
}
w = max_m - min_m + 1;
@@ -150,13 +148,13 @@ unsigned char bit_table[] = {
if ((w < 0) || (h < 0))
{
error = FT_THROW( Invalid_File_Format );
- goto Fail;
+ return -1;
}
if ((bm->bitmap = (unsigned char*)malloc(h*((w+7)/8))) == NULL)
{
error = FT_THROW( Invalid_File_Format );
- goto Fail;
+ return -1;
}
memset(bm->bitmap, 0, h*((w+7)/8));
@@ -194,11 +192,10 @@ unsigned char bit_table[] = {
{
switch ((int)instr)
{
- case GF_PAINT1:
- case GF_PAINT2:
- case GF_PAINT3:
+ case GF_PAINT1:
+ case GF_PAINT2:
+ case GF_PAINT3:
d = (UINT4)READ_UINTN( stream, (instr - GF_PAINT1 + 1));
-
Paint:
if (paint_sw == 0)
{
@@ -222,50 +219,39 @@ unsigned char bit_table[] = {
}
paint_sw = 1 - paint_sw;
break;
-
- case GF_SKIP0:
+ case GF_SKIP0:
m = min_m;
n = n - 1;
paint_sw = 0;
break;
-
- case GF_SKIP1:
- case GF_SKIP2:
- case GF_SKIP3:
+ case GF_SKIP1:
+ case GF_SKIP2:
+ case GF_SKIP3:
m = min_m;
n = n - (UINT4)READ_UINTN( stream, (instr - GF_SKIP1 + 1)) - 1;
paint_sw = 0;
break;
-
- case GF_XXX1:
- case GF_XXX2:
- case GF_XXX3:
- case GF_XXX4:
+ case GF_XXX1:
+ case GF_XXX2:
+ case GF_XXX3:
+ case GF_XXX4:
k = READ_UINTN( stream, instr - GF_XXX1 + 1);
FT_STREAM_SKIP( k );
break;
-
- case GF_YYY:
+ case GF_YYY:
FT_STREAM_SKIP( 4 );
break;
-
- case GF_NO_OP:
+ case GF_NO_OP:
break;
-
- default:
+ default:
FT_FREE(bm->bitmap);
bm->bitmap = NULL;
error = FT_THROW( Invalid_File_Format );
- goto Exit;
+ return -1;
}
}
}
-
- Fail:
- return -1;
-
- Exit:
- return error;
+ return 0;
}
@@ -444,7 +430,7 @@ unsigned char bit_table[] = {
FT_STREAM_SEEK( ptr );
bm = &go->bm_table[code - bc];
- if (gf_read_glyph( stream, bm ) < 0)
+ if (gf_read_glyph( stream, bm, memory ) < 0)
goto ErrExit;
bm->mv_x = dx;
@@ -453,7 +439,6 @@ unsigned char bit_table[] = {
FT_STREAM_SEEK( optr );
}
*goptr = go;
-
return error;
ErrExit:
@@ -462,30 +447,32 @@ unsigned char bit_table[] = {
{
if (go->bm_table != NULL)
{
- 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->bm_table); */
}
- FT_FREE(go);
- return NULL;
+ /* FT_FREE(go); */
}
FT_LOCAL_DEF( void )
- gf_free_font( GF_Glyph go, FT_Memory memory )
+ gf_free_font( FT_Face gfface, FT_Memory memory )
{
- int i=0, nchars =sizeof(go->bm_table);
+ GF_Face gf = (GF_Face)gfface;
+ GF_Glyph go;
+ go = gf->gf_glyph;
+ int i=0, nchars =gfface->num_glyphs;
if (go != NULL)
{
if (go->bm_table != NULL)
{
- 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->bm_table); */
}
- FT_FREE(go);
+ /* FT_FREE(go); */
}
diff --git a/src/gf/rules.mk b/src/gf/rules.mk
index 4f138033c..a26154141 100644
--- a/src/gf/rules.mk
+++ b/src/gf/rules.mk
@@ -26,27 +26,27 @@ GF_COMPILE := $(CC) $(ANSIFLAGS) \
# gf driver sources (i.e., C files)
#
-BDF_DRV_SRC := $(BDF_DIR)/gflib.c \
- $(BDF_DIR)/gfdrivr.c
+GF_DRV_SRC := $(GF_DIR)/gflib.c \
+ $(GF_DIR)/gfdrivr.c
# gf driver headers
#
-GF_DRV_H := $(BDF_DIR)/gf.h \
- $(BDF_DIR)/gfdrivr.h \
- $(BDF_DIR)/gferror.h
+GF_DRV_H := $(GF_DIR)/gf.h \
+ $(GF_DIR)/gfdrivr.h \
+ $(GF_DIR)/gferror.h
# gf driver object(s)
#
# GF_DRV_OBJ_M is used during `multi' builds
# GF_DRV_OBJ_S is used during `single' builds
#
-GF_DRV_OBJ_M := $(GF_DRV_SRC:$(BDF_DIR)/%.c=$(OBJ_DIR)/%.$O)
+GF_DRV_OBJ_M := $(GF_DRV_SRC:$(GF_DIR)/%.c=$(OBJ_DIR)/%.$O)
GF_DRV_OBJ_S := $(OBJ_DIR)/gf.$O
# gf driver source file for single build
#
-GF_DRV_SRC_S := $(BDF_DIR)/gf.c
+GF_DRV_SRC_S := $(GF_DIR)/gf.c
# gf driver - single object
@@ -57,7 +57,7 @@ $(GF_DRV_OBJ_S): $(GF_DRV_SRC_S) $(GF_DRV_SRC) $(FREETYPE_H) $(GF_DRV_H)
# gf driver - multiple objects
#
-$(OBJ_DIR)/%.$O: $(GF_DIR)/%.c $(FREETYPE_H) $(BDF_DRV_H)
+$(OBJ_DIR)/%.$O: $(GF_DIR)/%.c $(FREETYPE_H) $(GF_DRV_H)
$(GF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<)