ref: b9b2cac6343caca35e3f8f5818b4f1018e8f44c5
parent: ee06410b0aabc0ae466fd8919b4e4850056ae679
author: David Turner <[email protected]>
date: Wed Jul 10 12:52:06 EDT 2002
* src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added to support charmaps for CFF fonts * src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c, src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c, src/cff/cffgload.h: adding support for CFF charmaps, reformatting the sources, and removing some bugs in the Encoding and Charset loaders
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-07-10 David Turner <[email protected]>
+
+ * src/cff/cffcmap.c, src/cff/cffcmap.h, Jamfile, rules.mk: new files added
+ to support charmaps for CFF fonts
+
+ * src/cff/cffload.c, src/cff/cffload.h, src/cff/cffobjs.c,
+ src/cff/cffobjs.h, src/cff/cffparse.c, src/cffparse.h, src/cff/cffgload.c,
+ src/cff/cffgload.h: adding support for CFF charmaps, reformatting the
+ sources, and removing some bugs in the Encoding and Charset loaders
+
2002-07-09 Owen Taylor <[email protected]>
* src/pshinter/pshglob.c: fixed a bug that prevented the hinter from using
--- a/include/freetype/internal/cfftypes.h
+++ b/include/freetype/internal/cfftypes.h
@@ -68,8 +68,9 @@
FT_UInt format;
FT_ULong offset;
- FT_UShort* sids;
- FT_UShort* codes;
+ FT_UInt count;
+ FT_UShort sids [256]; /* avoid dynamic allocations */
+ FT_UShort codes[256];
} CFF_EncodingRec, *CFF_Encoding;
@@ -240,6 +241,9 @@
/* interface to PostScript hinter */
void* pshinter;
+
+ /* interface to Postscript Names service */
+ void* psnames;
} CFF_FontRec, *CFF_Font;
--- a/src/cff/Jamfile
+++ b/src/cff/Jamfile
@@ -10,7 +10,7 @@
if $(FT2_MULTI)
{
- _sources = cffdrivr cffgload cffload cffobjs cffparse ;
+ _sources = cffdrivr cffgload cffload cffobjs cffparse cffcmap ;
}
else
{
--- a/src/cff/cff.c
+++ b/src/cff/cff.c
@@ -24,6 +24,6 @@
#include "cffload.c"
#include "cffobjs.c"
#include "cffgload.c"
-
+#include "cffcmap.c"
/* END */
--- /dev/null
+++ b/src/cff/cffcmap.c
@@ -1,0 +1,301 @@
+#include "cffcmap.h"
+#include "cffload.h"
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CFF STANDARD (AND EXPERT) ENCODING CMAPS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ FT_CALLBACK_DEF( FT_Error )
+ cff_cmap_encoding_init( CFF_CMapStd cmap )
+ {
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
+ CFF_Font cff = face->extra.data;
+ CFF_Encoding encoding = &cff->encoding;
+ PSNames_Service psnames = cff->psnames;
+
+ cmap->count = encoding->count;
+ cmap->gids = encoding->codes;
+
+ return 0;
+ }
+
+
+ FT_CALLBACK_DEF( void )
+ cff_cmap_encoding_done( CFF_CMapStd cmap )
+ {
+ cmap->count = 0;
+ cmap->gids = NULL;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ cff_cmap_encoding_char_index( CFF_CMapStd cmap,
+ FT_UInt32 char_code )
+ {
+ FT_UInt result = 0;
+
+ if ( char_code < cmap->count )
+ result = cmap->gids[ char_code ];
+
+ return result;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ cff_cmap_encoding_char_next( CFF_CMapStd cmap,
+ FT_UInt32 *pchar_code )
+ {
+ FT_UInt result = 0;
+ FT_UInt32 char_code = *pchar_code;
+
+ *pchar_code = 0;
+
+ if ( char_code < cmap->count )
+ {
+ FT_UInt code = (FT_UInt)(char_code+1);
+
+ for (;;)
+ {
+ if ( code >= cmap->count )
+ break;
+
+ result = cmap->gids[ code ];
+ if ( result != 0 )
+ {
+ *pchar_code = code;
+ break;
+ }
+
+ code++;
+ }
+ }
+ return result;
+ }
+
+
+
+ FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
+ cff_cmap_encoding_class_rec =
+ {
+ sizeof ( CFF_CMapStdRec ),
+
+ (FT_CMap_InitFunc) cff_cmap_encoding_init,
+ (FT_CMap_DoneFunc) cff_cmap_encoding_done,
+ (FT_CMap_CharIndexFunc)cff_cmap_encoding_char_index,
+ (FT_CMap_CharNextFunc) cff_cmap_encoding_char_next
+ };
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ FT_CALLBACK_DEF( FT_Int )
+ cff_cmap_uni_pair_compare( const void* pair1,
+ const void* pair2 )
+ {
+ FT_UInt32 u1 = ((CFF_CMapUniPair)pair1)->unicode;
+ FT_UInt32 u2 = ((CFF_CMapUniPair)pair2)->unicode;
+
+
+ if ( u1 < u2 )
+ return -1;
+
+ if ( u1 > u2 )
+ return +1;
+
+ return 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_Error )
+ cff_cmap_unicode_init( CFF_CMapUnicode cmap )
+ {
+ FT_Error error;
+ FT_UInt count;
+ TT_Face face = (TT_Face)FT_CMAP_FACE( cmap );
+ FT_Memory memory = FT_FACE_MEMORY( face );
+ CFF_Font cff = face->extra.data;
+ CFF_Charset charset = &cff->charset;
+ PSNames_Service psnames = cff->psnames;
+
+
+ cmap->num_pairs = 0;
+ cmap->pairs = NULL;
+
+ count = face->root.num_glyphs;
+
+ if ( !FT_NEW_ARRAY( cmap->pairs, count ) )
+ {
+ FT_UInt n, new_count;
+ CFF_CMapUniPair pair;
+ FT_UInt32 uni_code;
+
+
+ pair = cmap->pairs;
+ for ( n = 0; n < count; n++ )
+ {
+ FT_UInt sid = charset->sids[n];
+ const char* gname;
+
+ gname = cff_index_get_sid_string( &cff->string_index, sid, psnames );
+
+ /* build unsorted pair table by matching glyph names */
+ if ( gname )
+ {
+ uni_code = psnames->unicode_value( gname );
+
+ if ( uni_code != 0 )
+ {
+ pair->unicode = uni_code;
+ pair->gindex = n;
+ pair++;
+ }
+
+ FT_FREE( gname );
+ }
+ }
+
+ new_count = (FT_UInt)( pair - cmap->pairs );
+ if ( new_count == 0 )
+ {
+ /* there are no unicode characters in here! */
+ FT_FREE( cmap->pairs );
+ error = FT_Err_Invalid_Argument;
+ }
+ else
+ {
+ /* re-allocate if the new array is much smaller than the original */
+ /* one */
+ if ( new_count != count && new_count < count / 2 )
+ {
+ (void)FT_RENEW_ARRAY( cmap->pairs, count, new_count );
+ error = 0;
+ }
+
+ /* sort the pairs table to allow efficient binary searches */
+ ft_qsort( cmap->pairs,
+ new_count,
+ sizeof ( CFF_CMapUniPairRec ),
+ cff_cmap_uni_pair_compare );
+
+ cmap->num_pairs = new_count;
+ }
+ }
+
+ return error;
+ }
+
+
+ FT_CALLBACK_DEF( void )
+ cff_cmap_unicode_done( CFF_CMapUnicode cmap )
+ {
+ FT_Face face = FT_CMAP_FACE(cmap);
+ FT_Memory memory = FT_FACE_MEMORY(face);
+
+ FT_FREE( cmap->pairs );
+ cmap->num_pairs = 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ cff_cmap_unicode_char_index( CFF_CMapUnicode cmap,
+ FT_UInt32 char_code )
+ {
+ FT_UInt min = 0;
+ FT_UInt max = cmap->num_pairs;
+ FT_UInt mid;
+ CFF_CMapUniPair pair;
+
+
+ while ( min < max )
+ {
+ mid = min + ( max - min ) / 2;
+ pair = cmap->pairs + mid;
+
+ if ( pair->unicode == char_code )
+ return pair->gindex;
+
+ if ( pair->unicode < char_code )
+ min = mid + 1;
+ else
+ max = mid;
+ }
+ return 0;
+ }
+
+
+ FT_CALLBACK_DEF( FT_UInt )
+ cff_cmap_unicode_char_next( CFF_CMapUnicode cmap,
+ FT_UInt32 *pchar_code )
+ {
+ FT_UInt result = 0;
+ FT_UInt32 char_code = *pchar_code + 1;
+
+
+ Restart:
+ {
+ FT_UInt min = 0;
+ FT_UInt max = cmap->num_pairs;
+ FT_UInt mid;
+ CFF_CMapUniPair pair;
+
+
+ while ( min < max )
+ {
+ mid = min + ( ( max - min ) >> 1 );
+ pair = cmap->pairs + mid;
+
+ if ( pair->unicode == char_code )
+ {
+ result = pair->gindex;
+ if ( result != 0 )
+ goto Exit;
+
+ char_code++;
+ goto Restart;
+ }
+
+ if ( pair->unicode < char_code )
+ min = mid+1;
+ else
+ max = mid;
+ }
+
+ /* we didn't find it, but we have a pair just above it */
+ char_code = 0;
+
+ if ( min < cmap->num_pairs )
+ {
+ pair = cmap->pairs + min;
+ result = pair->gindex;
+ if ( result != 0 )
+ char_code = pair->unicode;
+ }
+ }
+
+ Exit:
+ *pchar_code = char_code;
+ return result;
+ }
+
+
+ FT_CALLBACK_TABLE_DEF const FT_CMap_ClassRec
+ cff_cmap_unicode_class_rec =
+ {
+ sizeof ( CFF_CMapUnicodeRec ),
+
+ (FT_CMap_InitFunc) cff_cmap_unicode_init,
+ (FT_CMap_DoneFunc) cff_cmap_unicode_done,
+ (FT_CMap_CharIndexFunc)cff_cmap_unicode_char_index,
+ (FT_CMap_CharNextFunc) cff_cmap_unicode_char_next
+ };
+
--- /dev/null
+++ b/src/cff/cffcmap.h
@@ -1,0 +1,66 @@
+#ifndef __CFF_CMAP_H__
+#define __CFF_CMAP_H__
+
+#include "cffobjs.h"
+
+FT_BEGIN_HEADER
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** TYPE1 STANDARD (AND EXPERT) ENCODING CMAPS *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /* standard (and expert) encoding cmaps */
+ typedef struct CFF_CMapStdRec_* CFF_CMapStd;
+
+ typedef struct CFF_CMapStdRec_
+ {
+ FT_CMapRec cmap;
+ FT_UInt count;
+ FT_UShort* gids; /* up to 256 elements */
+
+ } CFF_CMapStdRec;
+
+
+ FT_CALLBACK_TABLE const FT_CMap_ClassRec
+ cff_cmap_encoding_class_rec;
+
+
+ /*************************************************************************/
+ /*************************************************************************/
+ /***** *****/
+ /***** CFF SYNTHETIC UNICODE ENCODING CMAP *****/
+ /***** *****/
+ /*************************************************************************/
+ /*************************************************************************/
+
+ /* unicode (synthetic) cmaps */
+ typedef struct CFF_CMapUnicodeRec_* CFF_CMapUnicode;
+
+ typedef struct CFF_CMapUniPairRec_
+ {
+ FT_UInt32 unicode;
+ FT_UInt gindex;
+
+ } CFF_CMapUniPairRec, *CFF_CMapUniPair;
+
+
+ typedef struct CFF_CMapUnicodeRec_
+ {
+ FT_CMapRec cmap;
+ FT_UInt num_pairs;
+ CFF_CMapUniPair pairs;
+
+ } CFF_CMapUnicodeRec;
+
+
+ FT_CALLBACK_TABLE const FT_CMap_ClassRec
+ cff_cmap_unicode_class_rec;
+
+
+FT_END_HEADER
+
+#endif /* __CFF_CMAP_H__ */
--- a/src/cff/cffdrivr.c
+++ b/src/cff/cffdrivr.c
@@ -201,7 +201,7 @@
}
/* now load the glyph outline if necessary */
- error = CFF_Load_Glyph( slot, size, glyph_index, load_flags );
+ error = cff_slot_load( slot, size, glyph_index, load_flags );
/* force drop-out mode to 2 - irrelevant now */
/* slot->outline.dropout_mode = 2; */
@@ -253,7 +253,7 @@
sid = font->charset.sids[glyph_index];
/* now, lookup the name itself */
- gname = CFF_Get_String( &font->string_index, sid, psnames );
+ gname = cff_index_get_sid_string( &font->string_index, sid, psnames );
if ( buffer_max > 0 )
{
@@ -406,7 +406,7 @@
sid = charset->sids[i];
if ( sid > 390 )
- name = CFF_Get_Name( &cff->string_index, sid - 391 );
+ name = cff_index_get_name( &cff->string_index, sid - 391 );
else
name = (FT_String *)psnames->adobe_std_strings( sid );
@@ -477,8 +477,8 @@
0, /* module-specific interface */
- (FT_Module_Constructor)CFF_Driver_Init,
- (FT_Module_Destructor) CFF_Driver_Done,
+ (FT_Module_Constructor)cff_driver_init,
+ (FT_Module_Destructor) cff_driver_done,
(FT_Module_Requester) cff_get_interface,
},
@@ -487,15 +487,15 @@
sizeof( FT_SizeRec ),
sizeof( CFF_GlyphSlotRec ),
- (FT_Face_InitFunc) CFF_Face_Init,
- (FT_Face_DoneFunc) CFF_Face_Done,
- (FT_Size_InitFunc) CFF_Size_Init,
- (FT_Size_DoneFunc) CFF_Size_Done,
- (FT_Slot_InitFunc) CFF_GlyphSlot_Init,
- (FT_Slot_DoneFunc) CFF_GlyphSlot_Done,
+ (FT_Face_InitFunc) cff_face_init,
+ (FT_Face_DoneFunc) cff_face_done,
+ (FT_Size_InitFunc) cff_size_init,
+ (FT_Size_DoneFunc) cff_size_done,
+ (FT_Slot_InitFunc) cff_slot_init,
+ (FT_Slot_DoneFunc) cff_slot_done,
- (FT_Size_ResetPointsFunc) CFF_Size_Reset,
- (FT_Size_ResetPixelsFunc) CFF_Size_Reset,
+ (FT_Size_ResetPointsFunc) cff_size_reset,
+ (FT_Size_ResetPixelsFunc) cff_size_reset,
(FT_Slot_LoadFunc) Load_Glyph,
(FT_CharMap_CharIndexFunc)cff_get_char_index,
--- a/src/cff/cffgload.c
+++ b/src/cff/cffgload.c
@@ -207,7 +207,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* CFF_Builder_Init */
+ /* cff_builder_init */
/* */
/* <Description> */
/* Initializes a given glyph builder. */
@@ -223,7 +223,7 @@
/* glyph :: The current glyph object. */
/* */
static void
- CFF_Builder_Init( CFF_Builder* builder,
+ cff_builder_init( CFF_Builder* builder,
TT_Face face,
CFF_Size size,
CFF_GlyphSlot glyph,
@@ -276,7 +276,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* CFF_Builder_Done */
+ /* cff_builder_done */
/* */
/* <Description> */
/* Finalizes a given glyph builder. Its contents can still be used */
@@ -287,7 +287,7 @@
/* builder :: A pointer to the glyph builder to finalize. */
/* */
static void
- CFF_Builder_Done( CFF_Builder* builder )
+ cff_builder_done( CFF_Builder* builder )
{
CFF_GlyphSlot glyph = builder->glyph;
@@ -331,7 +331,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* CFF_Init_Decoder */
+ /* cff_decoder_init */
/* */
/* <Description> */
/* Initializes a given glyph decoder. */
@@ -347,7 +347,7 @@
/* slot :: The current glyph object. */
/* */
FT_LOCAL_DEF( void )
- CFF_Init_Decoder( CFF_Decoder* decoder,
+ cff_decoder_init( CFF_Decoder* decoder,
TT_Face face,
CFF_Size size,
CFF_GlyphSlot slot,
@@ -360,7 +360,7 @@
FT_MEM_SET( decoder, 0, sizeof ( *decoder ) );
/* initialize builder */
- CFF_Builder_Init( &decoder->builder, face, size, slot, hinting );
+ cff_builder_init( &decoder->builder, face, size, slot, hinting );
/* initialize Type2 decoder */
decoder->num_globals = cff->num_global_subrs;
@@ -371,7 +371,7 @@
/* this function is used to select the locals subrs array */
FT_LOCAL_DEF( void )
- CFF_Prepare_Decoder( CFF_Decoder* decoder,
+ cff_decoder_prepare( CFF_Decoder* decoder,
FT_UInt glyph_index )
{
CFF_Font cff = (CFF_Font)decoder->builder.face->extra.data;
@@ -381,7 +381,7 @@
/* manage CID fonts */
if ( cff->num_subfonts >= 1 )
{
- FT_Byte fd_index = CFF_Get_FD( &cff->fd_select, glyph_index );
+ FT_Byte fd_index = cff_fd_select_get( &cff->fd_select, glyph_index );
sub = cff->subfonts[fd_index];
@@ -407,10 +407,10 @@
/* add a new point, do not check space */
static void
- add_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y,
- FT_Byte flag )
+ cff_builder_add_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y,
+ FT_Byte flag )
{
FT_Outline* outline = builder->current;
@@ -434,9 +434,9 @@
/* check space for a new on-curve point, then add it */
static FT_Error
- add_point1( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
+ cff_builder_cff_builder_add_point1( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
{
FT_Error error;
@@ -443,7 +443,7 @@
error = check_points( builder, 1 );
if ( !error )
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
return error;
}
@@ -451,7 +451,7 @@
/* check room for a new contour, then add it */
static FT_Error
- add_contour( CFF_Builder* builder )
+ cff_builder_add_contour( CFF_Builder* builder )
{
FT_Outline* outline = builder->current;
FT_Error error;
@@ -479,9 +479,9 @@
/* if a path was begun, add its first on-curve point */
static FT_Error
- start_point( CFF_Builder* builder,
- FT_Pos x,
- FT_Pos y )
+ cff_builder_start_point( CFF_Builder* builder,
+ FT_Pos x,
+ FT_Pos y )
{
FT_Error error = 0;
@@ -490,9 +490,9 @@
if ( !builder->path_begun )
{
builder->path_begun = 1;
- error = add_contour( builder );
+ error = cff_builder_add_contour( builder );
if ( !error )
- error = add_point1( builder, x, y );
+ error = cff_builder_cff_builder_add_point1( builder, x, y );
}
return error;
@@ -501,7 +501,7 @@
/* close the current contour */
static void
- close_contour( CFF_Builder* builder )
+ cff_builder_close_contour( CFF_Builder* builder )
{
FT_Outline* outline = builder->current;
@@ -548,7 +548,7 @@
return -1;
/* Get code to SID mapping from `cff_standard_encoding'. */
- glyph_sid = CFF_Get_Standard_Encoding( (FT_UInt)charcode );
+ glyph_sid = cff_get_standard_encoding( (FT_UInt)charcode );
for ( n = 0; n < cff->num_glyphs; n++ )
{
@@ -626,16 +626,16 @@
}
/* First load `bchar' in builder */
- error = CFF_Access_Element( &cff->charstrings_index, bchar_index,
+ error = cff_index_access_element( &cff->charstrings_index, bchar_index,
&charstring, &charstring_len );
if ( !error )
{
- error = CFF_Parse_CharStrings( decoder, charstring, charstring_len );
+ error = cff_decoder_parse_charstrings( decoder, charstring, charstring_len );
if ( error )
goto Exit;
- CFF_Forget_Element( &cff->charstrings_index, &charstring );
+ cff_index_forget_element( &cff->charstrings_index, &charstring );
}
n_base_points = base->n_points;
@@ -650,16 +650,16 @@
decoder->builder.left_bearing.y = 0;
/* Now load `achar' on top of the base outline. */
- error = CFF_Access_Element( &cff->charstrings_index, achar_index,
+ error = cff_index_access_element( &cff->charstrings_index, achar_index,
&charstring, &charstring_len );
if ( !error )
{
- error = CFF_Parse_CharStrings( decoder, charstring, charstring_len );
+ error = cff_decoder_parse_charstrings( decoder, charstring, charstring_len );
if ( error )
goto Exit;
- CFF_Forget_Element( &cff->charstrings_index, &charstring );
+ cff_index_forget_element( &cff->charstrings_index, &charstring );
}
/* Restore the left side bearing and advance width */
@@ -687,7 +687,7 @@
/*************************************************************************/
/* */
/* <Function> */
- /* CFF_Parse_CharStrings */
+ /* cff_decoder_parse_charstrings */
/* */
/* <Description> */
/* Parses a given Type 2 charstrings program. */
@@ -704,7 +704,7 @@
/* FreeType error code. 0 means success. */
/* */
FT_LOCAL_DEF( FT_Error )
- CFF_Parse_CharStrings( CFF_Decoder* decoder,
+ cff_decoder_parse_charstrings( CFF_Decoder* decoder,
FT_Byte* charstring_base,
FT_Int charstring_len )
{
@@ -1147,7 +1147,7 @@
case cff_op_rmoveto:
FT_TRACE4(( " rmoveto" ));
- close_contour( builder );
+ cff_builder_close_contour( builder );
builder->path_begun = 0;
x += args[0];
y += args[1];
@@ -1157,7 +1157,7 @@
case cff_op_vmoveto:
FT_TRACE4(( " vmoveto" ));
- close_contour( builder );
+ cff_builder_close_contour( builder );
builder->path_begun = 0;
y += args[0];
args = stack;
@@ -1166,7 +1166,7 @@
case cff_op_hmoveto:
FT_TRACE4(( " hmoveto" ));
- close_contour( builder );
+ cff_builder_close_contour( builder );
builder->path_begun = 0;
x += args[0];
args = stack;
@@ -1175,7 +1175,7 @@
case cff_op_rlineto:
FT_TRACE4(( " rlineto" ));
- if ( start_point ( builder, x, y ) ||
+ if ( cff_builder_start_point ( builder, x, y ) ||
check_points( builder, num_args / 2 ) )
goto Memory_Error;
@@ -1187,7 +1187,7 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 2;
}
args = stack;
@@ -1202,7 +1202,7 @@
FT_TRACE4(( op == cff_op_hlineto ? " hlineto"
: " vlineto" ));
- if ( start_point ( builder, x, y ) ||
+ if ( cff_builder_start_point ( builder, x, y ) ||
check_points( builder, num_args ) )
goto Memory_Error;
@@ -1214,7 +1214,7 @@
else
y += args[0];
- if ( add_point1( builder, x, y ) )
+ if ( cff_builder_cff_builder_add_point1( builder, x, y ) )
goto Memory_Error;
args++;
@@ -1231,7 +1231,7 @@
if ( num_args % 6 != 0 )
goto Stack_Underflow;
- if ( start_point ( builder, x, y ) ||
+ if ( cff_builder_start_point ( builder, x, y ) ||
check_points( builder, num_args / 2 ) )
goto Memory_Error;
@@ -1240,13 +1240,13 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[2];
y += args[3];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[4];
y += args[5];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 6;
}
args = stack;
@@ -1255,7 +1255,7 @@
case cff_op_vvcurveto:
FT_TRACE4(( " vvcurveto" ));
- if ( start_point ( builder, x, y ) )
+ if ( cff_builder_start_point ( builder, x, y ) )
goto Memory_Error;
args = stack;
@@ -1275,12 +1275,12 @@
while ( args < decoder->top )
{
y += args[0];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[1];
y += args[2];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
y += args[3];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 4;
}
args = stack;
@@ -1289,7 +1289,7 @@
case cff_op_hhcurveto:
FT_TRACE4(( " hhcurveto" ));
- if ( start_point ( builder, x, y ) )
+ if ( cff_builder_start_point ( builder, x, y ) )
goto Memory_Error;
args = stack;
@@ -1309,12 +1309,12 @@
while ( args < decoder->top )
{
x += args[0];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[1];
y += args[2];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[3];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 4;
}
args = stack;
@@ -1329,7 +1329,7 @@
FT_TRACE4(( op == cff_op_vhcurveto ? " vhcurveto"
: " hvcurveto" ));
- if ( start_point ( builder, x, y ) )
+ if ( cff_builder_start_point ( builder, x, y ) )
goto Memory_Error;
args = stack;
@@ -1347,26 +1347,26 @@
if ( phase )
{
x += args[0];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[1];
y += args[2];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
y += args[3];
if ( num_args == 1 )
x += args[4];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
}
else
{
y += args[0];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[1];
y += args[2];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[3];
if ( num_args == 1 )
y += args[4];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
}
args += 4;
phase ^= 1;
@@ -1385,7 +1385,7 @@
if ( num_args < 8 || ( num_args - 6 ) & 1 )
goto Stack_Underflow;
- if ( start_point( builder, x, y ) ||
+ if ( cff_builder_start_point( builder, x, y ) ||
check_points( builder, num_lines + 3 ) )
goto Memory_Error;
@@ -1396,7 +1396,7 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 2;
num_lines--;
}
@@ -1404,13 +1404,13 @@
/* then the curve */
x += args[0];
y += args[1];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[2];
y += args[3];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[4];
y += args[5];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args = stack;
}
break;
@@ -1425,7 +1425,7 @@
if ( num_args < 8 || ( num_args - 2 ) % 6 )
goto Stack_Underflow;
- if ( start_point ( builder, x, y ) ||
+ if ( cff_builder_start_point ( builder, x, y ) ||
check_points( builder, num_curves*3 + 2 ) )
goto Memory_Error;
@@ -1436,13 +1436,13 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[2];
y += args[3];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
x += args[4];
y += args[5];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args += 6;
num_curves--;
}
@@ -1450,7 +1450,7 @@
/* then the final line */
x += args[0];
y += args[1];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args = stack;
}
break;
@@ -1467,7 +1467,7 @@
/* adding five more points; 4 control points, 1 on-curve point */
/* make sure we have enough space for the start point if it */
/* needs to be added.. */
- if ( start_point( builder, x, y ) ||
+ if ( cff_builder_start_point( builder, x, y ) ||
check_points( builder, 6 ) )
goto Memory_Error;
@@ -1477,32 +1477,32 @@
/* first control point */
x += args[0];
y += args[1];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* second control point */
x += args[2];
y += args[3];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* join point; on curve, with y-value the same as the last */
/* control point's y-value */
x += args[4];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
/* third control point, with y-value the same as the join */
/* point's y-value */
x += args[5];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* fourth control point */
x += args[6];
y += args[7];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* ending point, with y-value the same as the start */
x += args[8];
y = start_y;
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args = stack;
break;
@@ -1518,7 +1518,7 @@
args = stack;
/* adding six more points; 4 control points, 2 on-curve points */
- if ( start_point( builder, x, y ) ||
+ if ( cff_builder_start_point( builder, x, y ) ||
check_points ( builder, 6 ) )
goto Memory_Error;
@@ -1527,32 +1527,32 @@
/* first control point */
x += args[0];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* second control point */
x += args[1];
y += args[2];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* join point; on curve, with y-value the same as the last */
/* control point's y-value */
x += args[3];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
/* third control point, with y-value the same as the join */
/* point's y-value */
x += args[4];
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* fourth control point */
x += args[5];
y = start_y;
- add_point( builder, x, y, 0 );
+ cff_builder_add_point( builder, x, y, 0 );
/* ending point, with y-value the same as the start point's */
/* y-value -- we don't add this point, though */
x += args[6];
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args = stack;
break;
@@ -1570,7 +1570,7 @@
FT_TRACE4(( " flex1" ));
/* adding six more points; 4 control points, 2 on-curve points */
- if ( start_point( builder, x, y ) ||
+ if ( cff_builder_start_point( builder, x, y ) ||
check_points( builder, 6 ) )
goto Memory_Error;
@@ -1604,7 +1604,7 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y, (FT_Bool)( count == 3 ) );
+ cff_builder_add_point( builder, x, y, (FT_Bool)( count == 3 ) );
args += 2;
}
@@ -1620,7 +1620,7 @@
y += args[0];
}
- add_point( builder, x, y, 1 );
+ cff_builder_add_point( builder, x, y, 1 );
args = stack;
break;
@@ -1633,7 +1633,7 @@
FT_TRACE4(( " flex" ));
- if ( start_point( builder, x, y ) ||
+ if ( cff_builder_start_point( builder, x, y ) ||
check_points( builder, 6 ) )
goto Memory_Error;
@@ -1642,7 +1642,7 @@
{
x += args[0];
y += args[1];
- add_point( builder, x, y,
+ cff_builder_add_point( builder, x, y,
(FT_Bool)( count == 3 || count == 0 ) );
args += 2;
}
@@ -1666,7 +1666,7 @@
if ( !error )
error = CFF_Err_Ok;
- close_contour( builder );
+ cff_builder_close_contour( builder );
/* close hints recording session */
if ( hinter )
@@ -1967,7 +1967,7 @@
if ( idx >= decoder->num_locals )
{
- FT_ERROR(( "CFF_Parse_CharStrings:" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings:" ));
FT_ERROR(( " invalid local subr index\n" ));
goto Syntax_Error;
}
@@ -1974,7 +1974,7 @@
if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
{
- FT_ERROR(( "CFF_Parse_CharStrings: too many nested subrs\n" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings: too many nested subrs\n" ));
goto Syntax_Error;
}
@@ -1987,7 +1987,7 @@
if ( !zone->base )
{
- FT_ERROR(( "CFF_Parse_CharStrings: invoking empty subrs!\n" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings: invoking empty subrs!\n" ));
goto Syntax_Error;
}
@@ -2007,7 +2007,7 @@
if ( idx >= decoder->num_globals )
{
- FT_ERROR(( "CFF_Parse_CharStrings:" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings:" ));
FT_ERROR(( " invalid global subr index\n" ));
goto Syntax_Error;
}
@@ -2014,7 +2014,7 @@
if ( zone - decoder->zones >= CFF_MAX_SUBRS_CALLS )
{
- FT_ERROR(( "CFF_Parse_CharStrings: too many nested subrs\n" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings: too many nested subrs\n" ));
goto Syntax_Error;
}
@@ -2027,7 +2027,7 @@
if ( !zone->base )
{
- FT_ERROR(( "CFF_Parse_CharStrings: invoking empty subrs!\n" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings: invoking empty subrs!\n" ));
goto Syntax_Error;
}
@@ -2042,7 +2042,7 @@
if ( decoder->zone <= decoder->zones )
{
- FT_ERROR(( "CFF_Parse_CharStrings: unexpected return\n" ));
+ FT_ERROR(( "cff_decoder_parse_charstrings: unexpected return\n" ));
goto Syntax_Error;
}
@@ -2074,15 +2074,15 @@
return error;
Syntax_Error:
- FT_TRACE4(( "CFF_Parse_CharStrings: syntax error!" ));
+ FT_TRACE4(( "cff_decoder_parse_charstrings: syntax error!" ));
return CFF_Err_Invalid_File_Format;
Stack_Underflow:
- FT_TRACE4(( "CFF_Parse_CharStrings: stack underflow!" ));
+ FT_TRACE4(( "cff_decoder_parse_charstrings: stack underflow!" ));
return CFF_Err_Too_Few_Arguments;
Stack_Overflow:
- FT_TRACE4(( "CFF_Parse_CharStrings: stack overflow!" ));
+ FT_TRACE4(( "cff_decoder_parse_charstrings: stack overflow!" ));
return CFF_Err_Stack_Overflow;
Memory_Error:
@@ -2112,7 +2112,7 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Compute_Max_Advance( TT_Face face,
+ cff_compute_max_advance( TT_Face face,
FT_Int* max_advance )
{
FT_Error error = 0;
@@ -2124,7 +2124,7 @@
*max_advance = 0;
/* Initialize load decoder */
- CFF_Init_Decoder( &decoder, face, 0, 0, 0 );
+ cff_decoder_init( &decoder, face, 0, 0, 0 );
decoder.builder.metrics_only = 1;
decoder.builder.load_points = 0;
@@ -2139,14 +2139,14 @@
/* now get load the unscaled outline */
- error = CFF_Access_Element( &cff->charstrings_index, glyph_index,
+ error = cff_index_access_element( &cff->charstrings_index, glyph_index,
&charstring, &charstring_len );
if ( !error )
{
- CFF_Prepare_Decoder( &decoder, glyph_index );
- error = CFF_Parse_CharStrings( &decoder, charstring, charstring_len );
+ cff_decoder_prepare( &decoder, glyph_index );
+ error = cff_decoder_parse_charstrings( &decoder, charstring, charstring_len );
- CFF_Forget_Element( &cff->charstrings_index, &charstring );
+ cff_index_forget_element( &cff->charstrings_index, &charstring );
}
/* ignore the error if one has occurred -- skip to next glyph */
@@ -2179,10 +2179,10 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Load_Glyph( CFF_GlyphSlot glyph,
- CFF_Size size,
- FT_Int glyph_index,
- FT_Int load_flags )
+ cff_slot_load( CFF_GlyphSlot glyph,
+ CFF_Size size,
+ FT_Int glyph_index,
+ FT_Int load_flags )
{
FT_Error error;
CFF_Decoder decoder;
@@ -2218,13 +2218,13 @@
FT_ULong charstring_len;
- CFF_Init_Decoder( &decoder, face, size, glyph, hinting );
+ cff_decoder_init( &decoder, face, size, glyph, hinting );
decoder.builder.no_recurse =
(FT_Bool)( ( load_flags & FT_LOAD_NO_RECURSE ) != 0 );
/* now load the unscaled outline */
- error = CFF_Access_Element( &cff->charstrings_index, glyph_index,
+ error = cff_index_access_element( &cff->charstrings_index, glyph_index,
&charstring, &charstring_len );
if ( !error )
{
@@ -2231,13 +2231,13 @@
CFF_IndexRec csindex = cff->charstrings_index;
- CFF_Prepare_Decoder( &decoder, glyph_index );
- error = CFF_Parse_CharStrings( &decoder, charstring, charstring_len );
+ cff_decoder_prepare( &decoder, glyph_index );
+ error = cff_decoder_parse_charstrings( &decoder, charstring, charstring_len );
- CFF_Forget_Element( &cff->charstrings_index, &charstring );
+ cff_index_forget_element( &cff->charstrings_index, &charstring );
/* We set control_data and control_len if charstrings is loaded. */
- /* See how charstring loads at CFF_Access_Element() in cffload.c. */
+ /* See how charstring loads at cff_index_access_element() in cffload.c. */
glyph->root.control_data =
csindex.bytes + csindex.offsets[glyph_index] - 1;
@@ -2246,7 +2246,7 @@
}
/* save new glyph tables */
- CFF_Builder_Done( &decoder.builder );
+ cff_builder_done( &decoder.builder );
}
font_matrix = cff->top_font.font_dict.font_matrix;
--- a/src/cff/cffgload.h
+++ b/src/cff/cffgload.h
@@ -172,7 +172,7 @@
FT_LOCAL( void )
- CFF_Init_Decoder( CFF_Decoder* decoder,
+ cff_decoder_init( CFF_Decoder* decoder,
TT_Face face,
CFF_Size size,
CFF_GlyphSlot slot,
@@ -179,7 +179,7 @@
FT_Bool hinting );
FT_LOCAL( void )
- CFF_Prepare_Decoder( CFF_Decoder* decoder,
+ cff_decoder_prepare( CFF_Decoder* decoder,
FT_UInt glyph_index );
#if 0 /* unused until we support pure CFF fonts */
@@ -186,21 +186,21 @@
/* Compute the maximum advance width of a font through quick parsing */
FT_LOCAL( FT_Error )
- CFF_Compute_Max_Advance( TT_Face face,
+ cff_compute_max_advance( TT_Face face,
FT_Int* max_advance );
#endif /* 0 */
FT_LOCAL( FT_Error )
- CFF_Parse_CharStrings( CFF_Decoder* decoder,
- FT_Byte* charstring_base,
- FT_Int charstring_len );
+ cff_decoder_parse_charstrings( CFF_Decoder* decoder,
+ FT_Byte* charstring_base,
+ FT_Int charstring_len );
FT_LOCAL( FT_Error )
- CFF_Load_Glyph( CFF_GlyphSlot glyph,
- CFF_Size size,
- FT_Int glyph_index,
- FT_Int load_flags );
+ cff_slot_load( CFF_GlyphSlot glyph,
+ CFF_Size size,
+ FT_Int glyph_index,
+ FT_Int load_flags );
FT_END_HEADER
--- a/src/cff/cffload.c
+++ b/src/cff/cffload.c
@@ -1047,7 +1047,7 @@
FT_LOCAL_DEF( FT_UShort )
- CFF_Get_Standard_Encoding( FT_UInt charcode )
+ cff_get_standard_encoding( FT_UInt charcode )
{
return (FT_UShort)(charcode < 256 ? cff_standard_encoding[charcode] : 0);
}
@@ -1172,9 +1172,10 @@
}
+ /* allocate a table containing pointers to an index's elements */
static FT_Error
- cff_explicit_index( CFF_Index idx,
- FT_Byte*** table )
+ cff_index_get_pointers( CFF_Index idx,
+ FT_Byte*** table )
{
FT_Error error = 0;
FT_Memory memory = idx->stream->memory;
@@ -1205,10 +1206,10 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Access_Element( CFF_Index idx,
- FT_UInt element,
- FT_Byte** pbytes,
- FT_ULong* pbyte_len )
+ cff_index_access_element( CFF_Index idx,
+ FT_UInt element,
+ FT_Byte** pbytes,
+ FT_ULong* pbyte_len )
{
FT_Error error = 0;
@@ -1270,8 +1271,8 @@
FT_LOCAL_DEF( void )
- CFF_Forget_Element( CFF_Index idx,
- FT_Byte** pbytes )
+ cff_index_forget_element( CFF_Index idx,
+ FT_Byte** pbytes )
{
if ( idx->bytes == 0 )
{
@@ -1284,8 +1285,8 @@
FT_LOCAL_DEF( FT_String* )
- CFF_Get_Name( CFF_Index idx,
- FT_UInt element )
+ cff_index_get_name( CFF_Index idx,
+ FT_UInt element )
{
FT_Memory memory = idx->stream->memory;
FT_Byte* bytes;
@@ -1294,7 +1295,7 @@
FT_String* name = 0;
- error = CFF_Access_Element( idx, element, &bytes, &byte_len );
+ error = cff_index_access_element( idx, element, &bytes, &byte_len );
if ( error )
goto Exit;
@@ -1303,7 +1304,7 @@
FT_MEM_COPY( name, bytes, byte_len );
name[byte_len] = 0;
}
- CFF_Forget_Element( idx, &bytes );
+ cff_index_forget_element( idx, &bytes );
Exit:
return name;
@@ -1311,18 +1312,18 @@
FT_LOCAL_DEF( FT_String* )
- CFF_Get_String( CFF_Index idx,
- FT_UInt sid,
- PSNames_Service psnames_interface )
+ cff_index_get_sid_string( CFF_Index idx,
+ FT_UInt sid,
+ PSNames_Service psnames_service )
{
/* if it is not a standard string, return it */
if ( sid > 390 )
- return CFF_Get_Name( idx, sid - 391 );
+ return cff_index_get_name( idx, sid - 391 );
/* that's a standard string, fetch a copy from the PSName module */
{
FT_String* name = 0;
- const char* adobe_name = psnames_interface->adobe_std_strings( sid );
+ const char* adobe_name = psnames_service->adobe_std_strings( sid );
FT_UInt len;
@@ -1414,8 +1415,8 @@
FT_LOCAL_DEF( FT_Byte )
- CFF_Get_FD( CFF_FDSelect select,
- FT_UInt glyph_index )
+ cff_fd_select_get( CFF_FDSelect select,
+ FT_UInt glyph_index )
{
FT_Byte fd = 0;
@@ -1484,23 +1485,7 @@
/*************************************************************************/
static void
- CFF_Done_Encoding( CFF_Encoding encoding,
- FT_Stream stream )
- {
- FT_Memory memory = stream->memory;
-
-
- FT_FREE( encoding->codes );
- FT_FREE( encoding->sids );
- encoding->format = 0;
- encoding->offset = 0;
- encoding->codes = 0;
- encoding->sids = 0;
- }
-
-
- static void
- CFF_Done_Charset( CFF_Charset charset,
+ cff_charset_done( CFF_Charset charset,
FT_Stream stream )
{
FT_Memory memory = stream->memory;
@@ -1509,12 +1494,11 @@
FT_FREE( charset->sids );
charset->format = 0;
charset->offset = 0;
- charset->sids = 0;
}
static FT_Error
- CFF_Load_Charset( CFF_Charset charset,
+ cff_charset_load( CFF_Charset charset,
FT_UInt num_glyphs,
FT_Stream stream,
FT_ULong base_offset,
@@ -1525,13 +1509,6 @@
FT_UShort glyph_sid;
- charset->offset = base_offset + offset;
-
- /* Get the format of the table. */
- if ( FT_STREAM_SEEK( charset->offset ) ||
- FT_READ_BYTE( charset->format ) )
- goto Exit;
-
/* If the the offset is greater than 2, we have to parse the */
/* charset table. */
if ( offset > 2 )
@@ -1539,6 +1516,13 @@
FT_UInt j;
+ charset->offset = base_offset + offset;
+
+ /* Get the format of the table. */
+ if ( FT_STREAM_SEEK( charset->offset ) ||
+ FT_READ_BYTE( charset->format ) )
+ goto Exit;
+
/* Allocate memory for sids. */
if ( FT_NEW_ARRAY( charset->sids, num_glyphs ) )
goto Exit;
@@ -1549,12 +1533,15 @@
switch ( charset->format )
{
case 0:
- for ( j = 1; j < num_glyphs; j++ )
+ if ( num_glyphs > 0 )
{
- if ( FT_READ_USHORT( glyph_sid ) )
+ if ( FT_FRAME_ENTER( (num_glyphs-1)*2 ) )
goto Exit;
-
- charset->sids[j] = glyph_sid;
+
+ for ( j = 1; j < num_glyphs; j++ )
+ charset->sids[j] = FT_GET_USHORT();
+
+ FT_FRAME_EXIT();
}
break;
@@ -1587,7 +1574,7 @@
}
/* Fill in the range of sids -- `nleft + 1' glyphs. */
- for ( i = 0; i <= nleft; i++, j++, glyph_sid++ )
+ for ( i = 0; j < num_glyphs && i <= nleft; i++, j++, glyph_sid++ )
charset->sids[j] = glyph_sid;
}
}
@@ -1594,7 +1581,7 @@
break;
default:
- FT_ERROR(( "CFF_Load_Charset: invalid table format!\n" ));
+ FT_ERROR(( "cff_charset_load: invalid table format!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
}
@@ -1610,12 +1597,14 @@
/* the first num_glyphs, and hence must match the predefined */
/* charset *exactly*. */
+ charset->offset = offset; /* record charset type */
+
switch ( offset )
{
case 0:
if ( num_glyphs != 229 )
{
- FT_ERROR(("CFF_Load_Charset: implicit charset not equal to\n"
+ FT_ERROR(("cff_charset_load: implicit charset not equal to\n"
"predefined charset (Adobe ISO-Latin)!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
@@ -1634,7 +1623,7 @@
case 1:
if ( num_glyphs != 166 )
{
- FT_ERROR(( "CFF_Load_Charset: implicit charset not equal to\n"
+ FT_ERROR(( "cff_charset_load: implicit charset not equal to\n"
"predefined charset (Adobe Expert)!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
@@ -1653,7 +1642,7 @@
case 2:
if ( num_glyphs != 87 )
{
- FT_ERROR(( "CFF_Load_Charset: implicit charset not equal to\n"
+ FT_ERROR(( "cff_charset_load: implicit charset not equal to\n"
"predefined charset (Adobe Expert Subset)!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
@@ -1681,8 +1670,7 @@
if ( error )
if ( charset->sids )
{
- if ( charset->sids )
- FT_FREE( charset->sids );
+ FT_FREE( charset->sids );
charset->format = 0;
charset->offset = 0;
charset->sids = 0;
@@ -1692,8 +1680,19 @@
}
+
+ static void
+ cff_encoding_done( CFF_Encoding encoding )
+ {
+ encoding->format = 0;
+ encoding->offset = 0;
+ encoding->count = 0;
+ }
+
+
+
static FT_Error
- CFF_Load_Encoding( CFF_Encoding encoding,
+ cff_encoding_load( CFF_Encoding encoding,
CFF_Charset charset,
FT_UInt num_glyphs,
FT_Stream stream,
@@ -1705,7 +1704,7 @@
FT_UInt count;
FT_UInt j;
FT_UShort glyph_sid;
- FT_Byte glyph_code;
+ FT_UInt glyph_code;
/* Check for charset->sids. If we do not have this, we fail. */
@@ -1715,14 +1714,8 @@
goto Exit;
}
- /* Allocate memory for sids/codes -- there are at most 256 sids/codes */
- /* for an encoding. */
- if ( FT_NEW_ARRAY( encoding->sids, 256 ) ||
- FT_NEW_ARRAY( encoding->codes, 256 ) )
- goto Exit;
-
/* Zero out the code to gid/sid mappings. */
- for ( j = 0; j < 255; j++ )
+ for ( j = 0; j < 256; j++ )
{
encoding->sids [j] = 0;
encoding->codes[j] = 0;
@@ -1751,32 +1744,43 @@
FT_READ_BYTE( count ) )
goto Exit;
+ encoding->count = (count+1);
+
switch ( encoding->format & 0x7F )
{
case 0:
- for ( j = 1; j <= count; j++ )
{
- if ( FT_READ_BYTE( glyph_code ) )
+ FT_Byte* p;
+
+ if ( FT_FRAME_ENTER( count ) )
goto Exit;
- /* Make sure j is not too big. */
- if ( j > num_glyphs )
- goto Exit;
+ p = (FT_Byte*) stream->cursor;
+
+ for ( j = 1; j <= count; j++ )
+ {
+ glyph_code = *p++;
- /* Assign code to GID mapping. */
- encoding->codes[glyph_code] = (FT_UShort)j;
+ /* Make sure j is not too big. */
+ if ( (FT_UInt) glyph_code < num_glyphs )
+ {
+ /* Assign code to GID mapping. */
+ encoding->codes[glyph_code] = (FT_UShort)j;
- /* Assign code to SID mapping. */
- encoding->sids[glyph_code] = charset->sids[j];
+ /* Assign code to SID mapping. */
+ encoding->sids[glyph_code] = charset->sids[j];
+ }
+ }
+
+ FT_FRAME_EXIT();
}
-
break;
case 1:
{
- FT_Byte nleft;
- FT_UInt i = 1;
- FT_UInt k;
+ FT_Byte nleft;
+ FT_UInt i = 1;
+ FT_UInt k;
/* Parse the Format1 ranges. */
@@ -1797,14 +1801,14 @@
for ( k = i; k < nleft + i; k++, glyph_code++ )
{
/* Make sure k is not too big. */
- if ( k > num_glyphs )
- goto Exit;
+ if ( k < num_glyphs && glyph_code < 256 )
+ {
+ /* Assign code to GID mapping. */
+ encoding->codes[glyph_code] = (FT_UShort)k;
- /* Assign code to GID mapping. */
- encoding->codes[glyph_code] = (FT_UShort)k;
-
- /* Assign code to SID mapping. */
- encoding->sids[glyph_code] = charset->sids[k];
+ /* Assign code to SID mapping. */
+ encoding->sids[glyph_code] = charset->sids[k];
+ }
}
}
}
@@ -1811,7 +1815,7 @@
break;
default:
- FT_ERROR(( "CFF_Load_Encoding: invalid table format!\n" ));
+ FT_ERROR(( "cff_encoding_load: invalid table format!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
}
@@ -1819,7 +1823,7 @@
/* Parse supplemental encodings, if any. */
if ( encoding->format & 0x80 )
{
- FT_UInt glyph_id;
+ FT_UInt gindex;
/* count supplements */
@@ -1841,14 +1845,14 @@
/* First, lookup GID which has been assigned to */
/* SID glyph_sid. */
- for ( glyph_id = 0; glyph_id < num_glyphs; glyph_id++ )
+ for ( gindex = 0; gindex < num_glyphs; gindex++ )
{
- if ( charset->sids[glyph_id] == glyph_sid )
+ if ( charset->sids[gindex] == glyph_sid )
+ {
+ encoding->codes[glyph_code] = (FT_UShort) gindex;
break;
+ }
}
-
- /* Now, make the assignment. */
- encoding->codes[glyph_code] = (FT_UShort)glyph_id;
}
}
}
@@ -1862,6 +1866,8 @@
/* encoding (see the note at the end of section 12 in the CFF */
/* specification). */
+ encoding->count = 256;
+
switch ( offset )
{
case 0:
@@ -1869,37 +1875,14 @@
FT_MEM_COPY( encoding->sids, cff_standard_encoding,
256 * sizeof ( FT_UShort ) );
- /* Construct code to GID mapping from code */
- /* to SID mapping and charset. */
- for ( j = 0; j < 256; j++ )
- {
- /* If j is encoded, find the GID for it. */
- if ( encoding->sids[j] )
- {
- for ( i = 1; i < num_glyphs; i++ )
- /* We matched, so break. */
- if ( charset->sids[i] == encoding->sids[j] )
- break;
+ goto Populate;
- /* i will be equal to num_glyphs if we exited the above */
- /* loop without a match. In this case, we also have to */
- /* fix the code to SID mapping. */
- if ( i == num_glyphs )
- {
- encoding->codes[j] = 0;
- encoding->sids [j] = 0;
- }
- else
- encoding->codes[j] = (FT_UShort)i;
- }
- }
- break;
-
case 1:
/* First, copy the code to SID mapping. */
FT_MEM_COPY( encoding->sids, cff_expert_encoding,
256 * sizeof ( FT_UShort ) );
+ Populate:
/* Construct code to GID mapping from code to SID mapping */
/* and charset. */
for ( j = 0; j < 256; j++ )
@@ -1927,7 +1910,7 @@
break;
default:
- FT_ERROR(( "CFF_Load_Encoding: invalid table format!\n" ));
+ FT_ERROR(( "cff_encoding_load: invalid table format!\n" ));
error = CFF_Err_Invalid_File_Format;
goto Exit;
}
@@ -1936,28 +1919,12 @@
Exit:
/* Clean up if there was an error. */
- if ( error )
- {
- if ( encoding->sids || encoding->codes )
- {
- if ( encoding->sids )
- FT_FREE( encoding->sids );
-
- if ( encoding->codes )
- FT_FREE( encoding->codes );
-
- charset->format = 0;
- charset->offset = 0;
- charset->sids = 0;
- }
- }
-
return error;
}
static FT_Error
- CFF_Load_SubFont( CFF_SubFont font,
+ cff_subfont_load( CFF_SubFont font,
CFF_Index idx,
FT_UInt font_index,
FT_Stream stream,
@@ -1971,7 +1938,7 @@
CFF_Private priv = &font->private_dict;
- CFF_Parser_Init( &parser, CFF_CODE_TOPDICT, &font->font_dict );
+ cff_parser_init( &parser, CFF_CODE_TOPDICT, &font->font_dict );
/* set defaults */
FT_MEM_SET( top, 0, sizeof ( *top ) );
@@ -1983,10 +1950,10 @@
top->font_matrix.yy = 0x10000L;
top->cid_count = 8720;
- error = CFF_Access_Element( idx, font_index, &dict, &dict_len ) ||
- CFF_Parser_Run( &parser, dict, dict + dict_len );
+ error = cff_index_access_element( idx, font_index, &dict, &dict_len ) ||
+ cff_parser_run( &parser, dict, dict + dict_len );
- CFF_Forget_Element( idx, &dict );
+ cff_index_forget_element( idx, &dict );
if ( error )
goto Exit;
@@ -2007,13 +1974,13 @@
priv->expansion_factor = (FT_Fixed)0.06 * 0x10000L;
priv->blue_scale = (FT_Fixed)0.039625 * 0x10000L;
- CFF_Parser_Init( &parser, CFF_CODE_PRIVATE, priv );
+ cff_parser_init( &parser, CFF_CODE_PRIVATE, priv );
if ( FT_STREAM_SEEK( base_offset + font->font_dict.private_offset ) ||
FT_FRAME_ENTER( font->font_dict.private_size ) )
goto Exit;
- error = CFF_Parser_Run( &parser,
+ error = cff_parser_run( &parser,
(FT_Byte*)stream->cursor,
(FT_Byte*)stream->limit );
FT_FRAME_EXIT();
@@ -2033,7 +2000,7 @@
goto Exit;
font->num_local_subrs = font->local_subrs_index.count;
- error = cff_explicit_index( &font->local_subrs_index,
+ error = cff_index_get_pointers( &font->local_subrs_index,
&font->local_subrs );
if ( error )
goto Exit;
@@ -2045,7 +2012,7 @@
static void
- CFF_Done_SubFont( FT_Memory memory,
+ cff_subfont_done( FT_Memory memory,
CFF_SubFont subfont )
{
if ( subfont )
@@ -2057,7 +2024,7 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Load_Font( FT_Stream stream,
+ cff_font_load( FT_Stream stream,
FT_Int face_index,
CFF_Font font )
{
@@ -2080,7 +2047,7 @@
CFF_FontRecDict dict;
- FT_MEM_SET( font, 0, sizeof ( *font ) );
+ FT_ZERO( font );
font->stream = stream;
font->memory = memory;
@@ -2116,7 +2083,7 @@
font->num_faces = font->name_index.count;
if ( face_index >= (FT_Int)font->num_faces )
{
- FT_ERROR(( "CFF_Load_Font: incorrect face index = %d\n",
+ FT_ERROR(( "cff_font_load: incorrect face index = %d\n",
face_index ));
error = CFF_Err_Invalid_Argument;
}
@@ -2126,7 +2093,7 @@
goto Exit;
/* now, parse the top-level font dictionary */
- error = CFF_Load_SubFont( &font->top_font,
+ error = cff_subfont_load( &font->top_font,
&font->font_dict_index,
face_index,
stream,
@@ -2153,7 +2120,7 @@
if ( fd_index.count > CFF_MAX_CID_FONTS )
{
- FT_ERROR(( "CFF_Load_Font: FD array too large in CID font\n" ));
+ FT_ERROR(( "cff_font_load: FD array too large in CID font\n" ));
goto Fail_CID;
}
@@ -2170,7 +2137,7 @@
for ( idx = 0; idx < fd_index.count; idx++ )
{
sub = font->subfonts[idx];
- error = CFF_Load_SubFont( sub, &fd_index, idx,
+ error = cff_subfont_load( sub, &fd_index, idx,
stream, base_offset );
if ( error )
goto Fail_CID;
@@ -2194,7 +2161,7 @@
/* read the charstrings index now */
if ( dict->charstrings_offset == 0 )
{
- FT_ERROR(( "CFF_Load_Font: no charstrings offset!\n" ));
+ FT_ERROR(( "cff_font_load: no charstrings offset!\n" ));
error = CFF_Err_Unknown_File_Format;
goto Exit;
}
@@ -2210,7 +2177,7 @@
font->num_global_subrs = font->global_subrs_index.count;
font->num_glyphs = font->charstrings_index.count;
- error = cff_explicit_index( &font->global_subrs_index,
+ error = cff_index_get_pointers( &font->global_subrs_index,
&font->global_subrs ) ;
if ( error )
@@ -2217,12 +2184,12 @@
goto Exit;
/* read the Charset and Encoding tables when available */
- error = CFF_Load_Charset( &font->charset, font->num_glyphs, stream,
+ error = cff_charset_load( &font->charset, font->num_glyphs, stream,
base_offset, dict->charset_offset );
if ( error )
goto Exit;
- error = CFF_Load_Encoding( &font->encoding,
+ error = cff_encoding_load( &font->encoding,
&font->charset,
font->num_glyphs,
stream,
@@ -2232,7 +2199,7 @@
goto Exit;
/* get the font name */
- font->font_name = CFF_Get_Name( &font->name_index, face_index );
+ font->font_name = cff_index_get_name( &font->name_index, face_index );
Exit:
return error;
@@ -2240,7 +2207,7 @@
FT_LOCAL_DEF( void )
- CFF_Done_Font( CFF_Font font )
+ cff_font_done( CFF_Font font )
{
FT_Memory memory = font->memory;
FT_UInt idx;
@@ -2257,15 +2224,15 @@
if ( font->num_subfonts > 0 )
{
for ( idx = 0; idx < font->num_subfonts; idx++ )
- CFF_Done_SubFont( memory, font->subfonts[idx] );
+ cff_subfont_done( memory, font->subfonts[idx] );
FT_FREE( font->subfonts );
}
- CFF_Done_Encoding( &font->encoding, font->stream );
- CFF_Done_Charset( &font->charset, font->stream );
+ cff_encoding_done( &font->encoding );
+ cff_charset_done( &font->charset, font->stream );
- CFF_Done_SubFont( memory, &font->top_font );
+ cff_subfont_done( memory, &font->top_font );
CFF_Done_FD_Select( &font->fd_select, font->stream );
--- a/src/cff/cffload.h
+++ b/src/cff/cffload.h
@@ -28,42 +28,42 @@
FT_BEGIN_HEADER
FT_LOCAL( FT_UShort )
- CFF_Get_Standard_Encoding( FT_UInt charcode );
+ cff_get_standard_encoding( FT_UInt charcode );
FT_LOCAL( FT_String* )
- CFF_Get_Name( CFF_Index idx,
- FT_UInt element );
+ cff_index_get_name( CFF_Index idx,
+ FT_UInt element );
FT_LOCAL( FT_String* )
- CFF_Get_String( CFF_Index idx,
- FT_UInt sid,
- PSNames_Service psnames_interface );
+ cff_index_get_sid_string( CFF_Index idx,
+ FT_UInt sid,
+ PSNames_Service psnames_interface );
FT_LOCAL( FT_Error )
- CFF_Access_Element( CFF_Index idx,
- FT_UInt element,
- FT_Byte** pbytes,
- FT_ULong* pbyte_len );
+ cff_index_access_element( CFF_Index idx,
+ FT_UInt element,
+ FT_Byte** pbytes,
+ FT_ULong* pbyte_len );
FT_LOCAL( void )
- CFF_Forget_Element( CFF_Index idx,
- FT_Byte** pbytes );
+ cff_index_forget_element( CFF_Index idx,
+ FT_Byte** pbytes );
FT_LOCAL( FT_Error )
- CFF_Load_Font( FT_Stream stream,
+ cff_font_load( FT_Stream stream,
FT_Int face_index,
CFF_Font font );
FT_LOCAL( void )
- CFF_Done_Font( CFF_Font font );
+ cff_font_done( CFF_Font font );
FT_LOCAL( FT_Byte )
- CFF_Get_FD( CFF_FDSelect select,
- FT_UInt glyph_index );
+ cff_fd_select_get( CFF_FDSelect select,
+ FT_UInt glyph_index );
FT_END_HEADER
--- a/src/cff/cffobjs.c
+++ b/src/cff/cffobjs.c
@@ -28,7 +28,7 @@
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
#include "cffobjs.h"
#include "cffload.h"
-
+#include "cffcmap.h"
#include "cfferrs.h"
@@ -53,7 +53,7 @@
static PSH_Globals_Funcs
- CFF_Size_Get_Globals_Funcs( CFF_Size size )
+ cff_size_get_globals_funcs( CFF_Size size )
{
CFF_Face face = (CFF_Face)size->face;
CFF_Font font = (CFF_FontRec *)face->extra.data;
@@ -70,7 +70,7 @@
FT_LOCAL_DEF( void )
- CFF_Size_Done( CFF_Size size )
+ cff_size_done( CFF_Size size )
{
if ( size->internal )
{
@@ -77,7 +77,7 @@
PSH_Globals_Funcs funcs;
- funcs = CFF_Size_Get_Globals_Funcs( size );
+ funcs = cff_size_get_globals_funcs( size );
if ( funcs )
funcs->destroy( (PSH_Globals)size->internal );
@@ -87,10 +87,10 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Size_Init( CFF_Size size )
+ cff_size_init( CFF_Size size )
{
FT_Error error = 0;
- PSH_Globals_Funcs funcs = CFF_Size_Get_Globals_Funcs( size );
+ PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size );
if ( funcs )
@@ -160,9 +160,9 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Size_Reset( CFF_Size size )
+ cff_size_reset( CFF_Size size )
{
- PSH_Globals_Funcs funcs = CFF_Size_Get_Globals_Funcs( size );
+ PSH_Globals_Funcs funcs = cff_size_get_globals_funcs( size );
FT_Error error = 0;
@@ -182,7 +182,7 @@
/*************************************************************************/
FT_LOCAL_DEF( void )
- CFF_GlyphSlot_Done( CFF_GlyphSlot slot )
+ cff_slot_done( CFF_GlyphSlot slot )
{
slot->root.internal->glyph_hints = 0;
}
@@ -189,7 +189,7 @@
FT_LOCAL_DEF( FT_Error )
- CFF_GlyphSlot_Init( CFF_GlyphSlot slot )
+ cff_slot_init( CFF_GlyphSlot slot )
{
CFF_Face face = (CFF_Face)slot->root.face;
CFF_Font font = (CFF_FontRec *)face->extra.data;
@@ -224,7 +224,7 @@
/*************************************************************************/
static FT_String*
- CFF_StrCopy( FT_Memory memory,
+ cff_strcpy( FT_Memory memory,
const FT_String* source )
{
FT_Error error;
@@ -245,8 +245,9 @@
+
FT_LOCAL_DEF( FT_Error )
- CFF_Face_Init( FT_Stream stream,
+ cff_face_init( FT_Stream stream,
CFF_Face face,
FT_Int face_index,
FT_Int num_params,
@@ -341,11 +342,12 @@
goto Exit;
face->extra.data = cff;
- error = CFF_Load_Font( stream, face_index, cff );
+ error = cff_font_load( stream, face_index, cff );
if ( error )
goto Exit;
cff->pshinter = pshinter;
+ cff->psnames = psnames;
/* Complement the root flags with some interesting information. */
/* Note that this is only necessary for pure CFF and CEF fonts. */
@@ -361,7 +363,7 @@
/* we need the `PSNames' module for pure-CFF and CEF formats */
if ( !psnames )
{
- FT_ERROR(( "CFF_Face_Init:" ));
+ FT_ERROR(( "cff_face_init:" ));
FT_ERROR(( " cannot open CFF & CEF fonts\n" ));
FT_ERROR(( " " ));
FT_ERROR(( " without the `PSNames' module\n" ));
@@ -395,11 +397,11 @@
root->units_per_EM = 1000;
/* retrieve font family & style name */
- root->family_name = CFF_Get_Name( &cff->name_index, face_index );
+ root->family_name = cff_index_get_name( &cff->name_index, face_index );
if ( dict->cid_registry )
- root->style_name = CFF_StrCopy( memory, "Regular" ); /* XXXX */
+ root->style_name = cff_strcpy( memory, "Regular" ); /* XXXX */
else
- root->style_name = CFF_Get_String( &cff->string_index,
+ root->style_name = cff_index_get_sid_string( &cff->string_index,
dict->weight,
psnames );
@@ -445,7 +447,82 @@
root->style_flags = flags;
- /* XXX: no charmaps for pure CFF fonts currently! */
+ /*******************************************************************/
+ /* */
+ /* Compute char maps. */
+ /* */
+
+ /* try to synthetize a Unicode charmap if there is none available */
+ /* already. If an OpenType font contains a Unicode "cmap", we */
+ /* will use it, wathever be in the CFF part of the file.. */
+ {
+ FT_CharMapRec cmaprec;
+ FT_CharMap cmap;
+ FT_UInt nn;
+ CFF_Encoding encoding = &cff->encoding;
+
+ for ( nn = 0; nn < (FT_UInt) root->num_charmaps; nn++ )
+ {
+ cmap = root->charmaps[nn];
+
+ /* Windows Unicode (3,1) ? */
+ if ( cmap->platform_id == 3 && cmap->platform_id == 1 )
+ goto Skip_Unicode;
+
+ /* Deprecated Unicode platform id ?? */
+ if ( cmap->platform_id == 0 )
+ break; /* Standard Unicode (deprecated) */
+ }
+
+ /* we didn't find a Unicode charmap, synthetize one */
+#ifdef FT_CONFIG_OPTION_USE_CMAPS
+
+ cmaprec.face = root;
+ cmaprec.platform_id = 3;
+ cmaprec.encoding_id = 1;
+ cmaprec.encoding = ft_encoding_unicode;
+
+ FT_CMap_New( &cff_cmap_unicode_class_rec, NULL, &cmaprec, NULL );
+
+ Skip_Unicode:
+ if ( encoding->count > 0 )
+ {
+ FT_CMap_Class clazz;
+
+ cmaprec.face = root;
+ cmaprec.platform_id = 7; /* Adobe platform id */
+
+ switch( encoding->offset )
+ {
+ case 0:
+ cmaprec.encoding_id = 0;
+ cmaprec.encoding = ft_encoding_adobe_standard;
+ clazz = &cff_cmap_encoding_class_rec;
+ break;
+
+ case 1:
+ cmaprec.encoding_id = 1;
+ cmaprec.encoding = ft_encoding_adobe_expert;
+ clazz = &cff_cmap_encoding_class_rec;
+ break;
+
+ default:
+ cmaprec.encoding_id = 3;
+ cmaprec.encoding = ft_encoding_adobe_custom;
+ clazz = &cff_cmap_encoding_class_rec;
+ }
+
+ FT_CMap_New( clazz, NULL, &cmaprec, NULL );
+
+#else /* !FT_CONFIG_OPTION_USE_CMAPS */
+
+ /* unimplemented !! */
+
+#endif /* !FT_CONFIG_OPTION_USE_CMAPS */
+
+ }
+ }
+
}
}
@@ -459,7 +536,7 @@
FT_LOCAL_DEF( void )
- CFF_Face_Done( CFF_Face face )
+ cff_face_done( CFF_Face face )
{
FT_Memory memory = face->root.memory;
SFNT_Service sfnt = (SFNT_Service)face->sfnt;
@@ -474,7 +551,7 @@
if ( cff )
{
- CFF_Done_Font( cff );
+ cff_font_done( cff );
FT_FREE( face->extra.data );
}
}
@@ -482,7 +559,7 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Driver_Init( CFF_Driver driver )
+ cff_driver_init( CFF_Driver driver )
{
FT_UNUSED( driver );
@@ -491,7 +568,7 @@
FT_LOCAL_DEF( void )
- CFF_Driver_Done( CFF_Driver driver )
+ cff_driver_done( CFF_Driver driver )
{
FT_UNUSED( driver );
}
--- a/src/cff/cffobjs.h
+++ b/src/cff/cffobjs.h
@@ -23,6 +23,7 @@
#include <ft2build.h>
#include FT_INTERNAL_OBJECTS_H
#include FT_INTERNAL_CFF_TYPES_H
+#include FT_INTERNAL_TRUETYPE_TYPES_H
#include FT_INTERNAL_POSTSCRIPT_NAMES_H
@@ -110,19 +111,19 @@
FT_LOCAL( FT_Error )
- CFF_Size_Init( CFF_Size size );
+ cff_size_init( CFF_Size size );
FT_LOCAL( void )
- CFF_Size_Done( CFF_Size size );
+ cff_size_done( CFF_Size size );
FT_LOCAL( FT_Error )
- CFF_Size_Reset( CFF_Size size );
+ cff_size_reset( CFF_Size size );
FT_LOCAL( void )
- CFF_GlyphSlot_Done( CFF_GlyphSlot slot );
+ cff_slot_done( CFF_GlyphSlot slot );
FT_LOCAL( FT_Error )
- CFF_GlyphSlot_Init( CFF_GlyphSlot slot );
+ cff_slot_init( CFF_GlyphSlot slot );
/*************************************************************************/
@@ -130,7 +131,7 @@
/* Face functions */
/* */
FT_LOCAL( FT_Error )
- CFF_Face_Init( FT_Stream stream,
+ cff_face_init( FT_Stream stream,
CFF_Face face,
FT_Int face_index,
FT_Int num_params,
@@ -137,7 +138,7 @@
FT_Parameter* params );
FT_LOCAL( void )
- CFF_Face_Done( CFF_Face face );
+ cff_face_done( CFF_Face face );
/*************************************************************************/
@@ -145,10 +146,10 @@
/* Driver functions */
/* */
FT_LOCAL( FT_Error )
- CFF_Driver_Init( CFF_Driver driver );
+ cff_driver_init( CFF_Driver driver );
FT_LOCAL( void )
- CFF_Driver_Done( CFF_Driver driver );
+ cff_driver_done( CFF_Driver driver );
FT_END_HEADER
--- a/src/cff/cffparse.c
+++ b/src/cff/cffparse.c
@@ -64,7 +64,7 @@
FT_LOCAL_DEF( void )
- CFF_Parser_Init( CFF_Parser parser,
+ cff_parser_init( CFF_Parser parser,
FT_UInt code,
void* object )
{
@@ -480,7 +480,7 @@
FT_LOCAL_DEF( FT_Error )
- CFF_Parser_Run( CFF_Parser parser,
+ cff_parser_run( CFF_Parser parser,
FT_Byte* start,
FT_Byte* limit )
{
--- a/src/cff/cffparse.h
+++ b/src/cff/cffparse.h
@@ -50,12 +50,12 @@
FT_LOCAL( void )
- CFF_Parser_Init( CFF_Parser parser,
+ cff_parser_init( CFF_Parser parser,
FT_UInt code,
void* object );
FT_LOCAL( FT_Error )
- CFF_Parser_Run( CFF_Parser parser,
+ cff_parser_run( CFF_Parser parser,
FT_Byte* start,
FT_Byte* limit );
--- a/src/cff/rules.mk
+++ b/src/cff/rules.mk
@@ -28,6 +28,7 @@
$(CFF_DIR_)cffload.c \
$(CFF_DIR_)cffgload.c \
$(CFF_DIR_)cffparse.c \
+ $(CFF_DIR_)cffcmap.c \
$(CFF_DIR_)cffdrivr.c
# CFF driver headers