shithub: freetype+ttf2subf

Download patch

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'.

git/fs: mount .git/fs: mount/attach disallowed
--- 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;