Add support for ISOLatin1 PS encoding.

* include/freetype/freetype.h (ft_encoding_latin_1): New tag
(`lat1').
* include/freetype/internal/t1types.h (T1_Encoding_Type): Add
`t1_encoding_isolatin1'.
* src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Handle
ft_encoding_latin_1.
* src/type1/t1load.c (parse_encoding): Handle `ISOLatin1Encoding'.
* src/type1/t1objs.c (T1_Face_Init): Handle `t1_encoding_isolatin1'.
This commit is contained in:
Werner Lemberg 2002-02-10 12:33:14 +00:00
parent 7c89d18d9f
commit 66b3509bdd
6 changed files with 83 additions and 19 deletions

View File

@ -1,3 +1,16 @@
2002-02-10 Roberto Alameda <ojancano@geekmail.de>
Add support for ISOLatin1 PS encoding.
* include/freetype/freetype.h (ft_encoding_latin_1): New tag
(`lat1').
* include/freetype/internal/t1types.h (T1_Encoding_Type): Add
`t1_encoding_isolatin1'.
* src/type1/t1driver.c (Get_Char_Index, Get_Next_Char): Handle
ft_encoding_latin_1.
* src/type1/t1load.c (parse_encoding): Handle `ISOLatin1Encoding'.
* src/type1/t1objs.c (T1_Face_Init): Handle `t1_encoding_isolatin1'.
2002-02-09 Werner Lemberg <wl@gnu.org> 2002-02-09 Werner Lemberg <wl@gnu.org>
* README: Fix typo. * README: Fix typo.

View File

@ -395,6 +395,7 @@ FT_BEGIN_HEADER
FT_ENC_TAG( ft_encoding_symbol, 's', 'y', 'm', 'b' ), FT_ENC_TAG( ft_encoding_symbol, 's', 'y', 'm', 'b' ),
FT_ENC_TAG( ft_encoding_unicode, 'u', 'n', 'i', 'c' ), FT_ENC_TAG( ft_encoding_unicode, 'u', 'n', 'i', 'c' ),
FT_ENC_TAG( ft_encoding_latin_1, 'l', 'a', 't', '1' ),
FT_ENC_TAG( ft_encoding_latin_2, 'l', 'a', 't', '2' ), FT_ENC_TAG( ft_encoding_latin_2, 'l', 'a', 't', '2' ),
FT_ENC_TAG( ft_encoding_sjis, 's', 'j', 'i', 's' ), FT_ENC_TAG( ft_encoding_sjis, 's', 'j', 'i', 's' ),
FT_ENC_TAG( ft_encoding_gb2312, 'g', 'b', ' ', ' ' ), FT_ENC_TAG( ft_encoding_gb2312, 'g', 'b', ' ', ' ' ),

View File

@ -80,6 +80,7 @@ FT_BEGIN_HEADER
t1_encoding_none = 0, t1_encoding_none = 0,
t1_encoding_array, t1_encoding_array,
t1_encoding_standard, t1_encoding_standard,
t1_encoding_isolatin1,
t1_encoding_expert t1_encoding_expert
} T1_EncodingType; } T1_EncodingType;

View File

@ -273,6 +273,24 @@
result = 0; result = 0;
goto Exit; goto Exit;
/*******************************************************************/
/* */
/* ISOLatin1 encoding support */
/* */
case ft_encoding_latin_1:
/* ISOLatin1 is the first page of Unicode */
if ( charcode < 256 && psnames->unicode_value )
{
result = psnames->lookup_unicode( &face->unicode_map,
(FT_ULong)charcode );
/* the function returns 0xFFFF if the Unicode charcode has */
/* no corresponding glyph */
if ( result == 0xFFFF )
result = 0;
}
goto Exit;
/*******************************************************************/ /*******************************************************************/
/* */ /* */
/* Custom Type 1 encoding */ /* Custom Type 1 encoding */
@ -365,6 +383,23 @@
return psnames->next_unicode( &face->unicode_map, return psnames->next_unicode( &face->unicode_map,
(FT_ULong)charcode ); (FT_ULong)charcode );
/*******************************************************************/
/* */
/* ISOLatin1 encoding support */
/* */
case ft_encoding_latin_1:
{
FT_Long code;
/* use the `PSNames' module to synthetize the Unicode charmap */
code = psnames->next_unicode( &face->unicode_map,
(FT_ULong)charcode );
if ( code < 256 )
return code;
break;
}
/*******************************************************************/ /*******************************************************************/
/* */ /* */
/* Custom Type 1 encoding */ /* Custom Type 1 encoding */
@ -426,9 +461,9 @@
{ {
{ {
ft_module_font_driver | ft_module_font_driver |
ft_module_driver_scalable | ft_module_driver_scalable |
ft_module_driver_has_hinter, ft_module_driver_has_hinter,
sizeof( FT_DriverRec ), sizeof( FT_DriverRec ),
"type1", "type1",
@ -466,7 +501,7 @@
(FTDriver_attachFile) T1_Read_AFM, (FTDriver_attachFile) T1_Read_AFM,
#endif #endif
(FTDriver_getAdvances) 0, (FTDriver_getAdvances) 0,
(FTDriver_getNextChar) Get_Next_Char (FTDriver_getNextChar) Get_Next_Char
}; };

View File

@ -1082,6 +1082,10 @@
strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 ) strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )
face->type1.encoding_type = t1_encoding_expert; face->type1.encoding_type = t1_encoding_expert;
else if ( cur + 18 < limit &&
strncmp( (const char*)cur, "ISOLatin1Encoding", 17 ) == 0 )
face->type1.encoding_type = t1_encoding_isolatin1;
else else
{ {
FT_ERROR(( "parse_encoding: invalid token!\n" )); FT_ERROR(( "parse_encoding: invalid token!\n" ));

View File

@ -61,7 +61,7 @@
T1_Face face = (T1_Face) size->root.face; T1_Face face = (T1_Face) size->root.face;
PSHinter_Interface* pshinter = face->pshinter; PSHinter_Interface* pshinter = face->pshinter;
FT_Module module; FT_Module module;
module = FT_Get_Module( size->root.face->driver->root.library, module = FT_Get_Module( size->root.face->driver->root.library,
"pshinter" ); "pshinter" );
@ -77,7 +77,7 @@
if ( size->root.internal ) if ( size->root.internal )
{ {
PSH_Globals_Funcs funcs; PSH_Globals_Funcs funcs;
funcs = T1_Size_Get_Globals_Funcs( size ); funcs = T1_Size_Get_Globals_Funcs( size );
if ( funcs ) if ( funcs )
@ -93,20 +93,20 @@
{ {
FT_Error error = 0; FT_Error error = 0;
PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size ); PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
if ( funcs ) if ( funcs )
{ {
PSH_Globals globals; PSH_Globals globals;
T1_Face face = (T1_Face)size->root.face; T1_Face face = (T1_Face)size->root.face;
error = funcs->create( size->root.face->memory,
error = funcs->create( size->root.face->memory,
&face->type1.private_dict, &globals ); &face->type1.private_dict, &globals );
if ( !error ) if ( !error )
size->root.internal = (FT_Size_Internal)(void*)globals; size->root.internal = (FT_Size_Internal)(void*)globals;
} }
return error; return error;
} }
@ -117,7 +117,7 @@
PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size ); PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
FT_Error error = 0; FT_Error error = 0;
if ( funcs ) if ( funcs )
error = funcs->set_scale( (PSH_Globals)size->root.internal, error = funcs->set_scale( (PSH_Globals)size->root.internal,
size->root.metrics.x_scale, size->root.metrics.x_scale,
@ -142,29 +142,29 @@
FT_LOCAL_DEF FT_Error FT_LOCAL_DEF FT_Error
T1_GlyphSlot_Init( T1_GlyphSlot slot ) T1_GlyphSlot_Init( T1_GlyphSlot slot )
{ {
T1_Face face; T1_Face face;
PSHinter_Interface* pshinter; PSHinter_Interface* pshinter;
face = (T1_Face) slot->root.face; face = (T1_Face) slot->root.face;
pshinter = face->pshinter; pshinter = face->pshinter;
if (pshinter) if (pshinter)
{ {
FT_Module module; FT_Module module;
module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" ); module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" );
if (module) if (module)
{ {
T1_Hints_Funcs funcs; T1_Hints_Funcs funcs;
funcs = pshinter->get_t1_funcs( module ); funcs = pshinter->get_t1_funcs( module );
slot->root.internal->glyph_hints = (void*)funcs; slot->root.internal->glyph_hints = (void*)funcs;
} }
} }
return 0; return 0;
} }
/*************************************************************************/ /*************************************************************************/
/* */ /* */
/* FACE FUNCTIONS */ /* FACE FUNCTIONS */
@ -304,7 +304,7 @@
face->psaux = psaux; face->psaux = psaux;
} }
pshinter = (PSHinter_Interface*)face->pshinter; pshinter = (PSHinter_Interface*)face->pshinter;
if ( !pshinter ) if ( !pshinter )
{ {
@ -372,7 +372,7 @@
family++; family++;
full++; full++;
} }
root->style_name = ( *full == ' ' ? full + 1 root->style_name = ( *full == ' ' ? full + 1
: (char *)"Regular" ); : (char *)"Regular" );
} }
@ -489,10 +489,20 @@
charmap->encoding_id = 1; charmap->encoding_id = 1;
break; break;
default: case t1_encoding_array:
charmap->encoding = ft_encoding_adobe_custom; charmap->encoding = ft_encoding_adobe_custom;
charmap->encoding_id = 2; charmap->encoding_id = 2;
break; break;
case t1_encoding_isolatin1:
charmap->encoding = ft_encoding_latin_1;
charmap->encoding_id = 3;
break;
default:
FT_ERROR(( "T1_Face_Init: invalid encoding\n" ));
error = T1_Err_Invalid_File_Format;
goto Exit;
} }
root->charmaps = face->charmaps; root->charmaps = face->charmaps;