ref: 66b3509bdd013698950a80546fbe66782a118e44
parent: 7c89d18d9f5b866481d2314cf3a65140fb671982
author: Werner Lemberg <[email protected]>
date: Sun Feb 10 07:33:14 EST 2002
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'.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2002-02-10 Roberto Alameda <[email protected]>
+
+ 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 <[email protected]>
* README: Fix typo.
--- a/include/freetype/freetype.h
+++ b/include/freetype/freetype.h
@@ -395,6 +395,7 @@
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_latin_1, 'l', 'a', 't', '1' ),
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_gb2312, 'g', 'b', ' ', ' ' ),
--- a/include/freetype/internal/t1types.h
+++ b/include/freetype/internal/t1types.h
@@ -80,6 +80,7 @@
t1_encoding_none = 0,
t1_encoding_array,
t1_encoding_standard,
+ t1_encoding_isolatin1,
t1_encoding_expert
} T1_EncodingType;
--- a/src/type1/t1driver.c
+++ b/src/type1/t1driver.c
@@ -275,6 +275,24 @@
/*******************************************************************/
/* */
+ /* 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 */
/* */
case ft_encoding_adobe_custom:
@@ -367,6 +385,23 @@
/*******************************************************************/
/* */
+ /* 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 */
/* */
case ft_encoding_adobe_custom:
@@ -426,9 +461,9 @@
{
{
ft_module_font_driver |
- ft_module_driver_scalable |
+ ft_module_driver_scalable |
ft_module_driver_has_hinter,
-
+
sizeof( FT_DriverRec ),
"type1",
@@ -466,7 +501,7 @@
(FTDriver_attachFile) T1_Read_AFM,
#endif
(FTDriver_getAdvances) 0,
-
+
(FTDriver_getNextChar) Get_Next_Char
};
--- a/src/type1/t1load.c
+++ b/src/type1/t1load.c
@@ -1082,6 +1082,10 @@
strncmp( (const char*)cur, "ExpertEncoding", 14 ) == 0 )
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
{
FT_ERROR(( "parse_encoding: invalid token!\n" ));
--- a/src/type1/t1objs.c
+++ b/src/type1/t1objs.c
@@ -61,8 +61,8 @@
T1_Face face = (T1_Face) size->root.face;
PSHinter_Interface* pshinter = face->pshinter;
FT_Module module;
-
+
module = FT_Get_Module( size->root.face->driver->root.library,
"pshinter" );
return ( module && pshinter && pshinter->get_globals_funcs )
@@ -77,8 +77,8 @@
if ( size->root.internal )
{
PSH_Globals_Funcs funcs;
-
+
funcs = T1_Size_Get_Globals_Funcs( size );
if ( funcs )
funcs->destroy( (PSH_Globals)size->root.internal );
@@ -93,20 +93,20 @@
{
FT_Error error = 0;
PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
-
+
if ( funcs )
{
PSH_Globals globals;
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 );
if ( !error )
size->root.internal = (FT_Size_Internal)(void*)globals;
}
-
+
return error;
}
@@ -117,7 +117,7 @@
PSH_Globals_Funcs funcs = T1_Size_Get_Globals_Funcs( size );
FT_Error error = 0;
-
+
if ( funcs )
error = funcs->set_scale( (PSH_Globals)size->root.internal,
size->root.metrics.x_scale,
@@ -142,21 +142,21 @@
FT_LOCAL_DEF FT_Error
T1_GlyphSlot_Init( T1_GlyphSlot slot )
- {
+ {
T1_Face face;
PSHinter_Interface* pshinter;
-
+
face = (T1_Face) slot->root.face;
pshinter = face->pshinter;
if (pshinter)
{
FT_Module module;
-
+
module = FT_Get_Module( slot->root.face->driver->root.library, "pshinter" );
if (module)
{
T1_Hints_Funcs funcs;
-
+
funcs = pshinter->get_t1_funcs( module );
slot->root.internal->glyph_hints = (void*)funcs;
}
@@ -163,8 +163,8 @@
}
return 0;
}
-
-
+
+
/*************************************************************************/
/* */
/* FACE FUNCTIONS */
@@ -304,7 +304,7 @@
face->psaux = psaux;
}
-
+
pshinter = (PSHinter_Interface*)face->pshinter;
if ( !pshinter )
{
@@ -372,7 +372,7 @@
family++;
full++;
}
-
+
root->style_name = ( *full == ' ' ? full + 1
: (char *)"Regular" );
}
@@ -489,10 +489,20 @@
charmap->encoding_id = 1;
break;
- default:
+ case t1_encoding_array:
charmap->encoding = ft_encoding_adobe_custom;
charmap->encoding_id = 2;
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;