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:
parent
7c89d18d9f
commit
66b3509bdd
13
ChangeLog
13
ChangeLog
|
@ -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.
|
||||||
|
|
|
@ -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', ' ', ' ' ),
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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" ));
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue