freetype-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Devel] Mac language ID


From: Masatake YAMATO
Subject: Re: [Devel] Mac language ID
Date: Tue, 16 Dec 2003 19:16:11 +0900 (JST)

> > If we are not permitted to add language_id field to FT_CharMapRec_
> > because the addition breaks binary compatibility (or for some other
> > reason), we have to add the language_id to TT_CMap.
> > 
> >   typedef struct  TT_CMapRec_
> >   {
> >     FT_CMapRec  cmap;
> >     /* here */
> >     FT_Byte*    data;         /* pointer to in-memory cmap table */
> >   } TT_CMapRec, *TT_CMap;
> > 
> > In this case we have to consider about the filed accessor because
> > the TT_CMapRec is sfnt private.
> 
> Perhaps an equivalent to the the fttype1.c file; something like an
> `FT_Get_TT_CMap_Info' function.  This would be a candidate for a
> Freetype service since the cff and type 42 drivers are affected
> also...

I've implemented. I added one type and one function to the public interface.

  /*************************************************************************/
  /*                                                                       */
  /* <Struct>                                                              */
  /*    TT_CMapInfo                                                        */
  /*                                                                       */
  /* <Description>                                                         */
  /*    A structure used to store truetype/sfnt specific cmap information  */
  /*    which is not covered by generic FT_CharMap structure. This         */
  /*    structure can be accessed with FT_Get_TT_CMap_Info function.       */
  /*                                                                       */
  /* <Fields>                                                              */
  /*    language               :: language ID used in Mac fonts.           */
  /*                              Definitions of values are in             */
  /*                              freetype/ttnameid.h.                     */
  /*                                                                       */
  typedef struct  TT_CMapInfo_
  {
    FT_ULong language;
  } TT_CMapInfo;

  /*************************************************************************/
  /*                                                                       */
  /* <Function>                                                            */
  /*    FT_Get_TT_CMap_Info                                                */
  /*                                                                       */
  /* <Description>                                                         */
  /*    Get truetype/sfnt specific cmap information for given charmap.     */
  /*                                                                       */
  /* <Input>                                                               */
  /*    charmap :: target charmap.                                         */
  /*                                                                       */
  /* <Output>                                                              */
  /*    cmap_info :: truetype/sfnt specific cmap information.              */
  /*                                                                       */
  /* <Return>                                                              */
  /*    FreeType errror code. 0 means success.                             */
  /*                                                                       */
  FT_EXPORT( FT_Error )
  FT_Get_TT_CMap_Info( FT_CharMap   charmap,
                       TT_CMapInfo  *cmap_info );


I've added language field to the private data structure.

  typedef struct  TT_CMapRec_
  {
    FT_CMapRec  cmap;
    FT_Byte*    data;           /* pointer to in-memory cmap table */
    FT_ULong    language;       /* Used in Mac platform */

  } TT_CMapRec, *TT_CMap;

We can do the same thing with language field(`data' field holds the language 
data). 
I should provide a function which extracts language field from data instead of
providing language field which is set by TT_CMap initialize phase. Give me 
comments.

language.c is for the test. Compile with patched freetype2 and run with font 
files.
language.patch is the patch.

Regards,
Masatake YAMATO
/* ./a.out fontfiles ...
   gcc language.c -I/opt/include -I/opt/include/freetype2 
/opt/lib/libfreetype.a -lz */

#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_TRUETYPE_TABLES_H

#include <stdio.h>

static void dump( FT_Library library, char * file );

int
main(int argc, char ** argv)
{
  int i;
  FT_Library library;
  
  if (FT_Init_FreeType (&library))
    {
      fprintf(stderr, "Error in %s\n", "FT_Init_FreeType");
      exit (1);
    }
  
  for ( i = 1; i < argc; i++ )
    dump( library, argv[i] );

  if ( FT_Done_FreeType  (library) )
    {
      fprintf(stderr, "Error in %s\n", "FT_Done_FreeType");
      exit(1);
    }
  return 0;
} 

static void
dump( FT_Library library, char * file )
{
  FT_Error error;
  FT_Face face;
  FT_CharMap charmap;
  TT_CMapInfo cmap_info;
  FT_Int i;
  
  if ( FT_New_Face (library, file, 0, &face) )
    {
      fprintf(stderr, "Error in %s: %s\n", "FT_New_Face", file);
      return;
    }

  fprintf(stdout, "File: %s\n", file);
  fprintf(stdout, "Num_Charmaps: %d\n", face->num_charmaps);
  for ( i = 0; i < face->num_charmaps; i++ )
    {
      charmap = face->charmaps[i];
      if (( error = FT_Get_TT_CMap_Info ( charmap, &cmap_info )))
        {
          fprintf(stdout, "     Error at %d\n", i);
          continue ;
        }
      fprintf(stdout, " Language id: %d at %d\n", 
              cmap_info.language,
              i);
                           
    }
  if ( FT_Done_Face ( face ) )
    fprintf(stderr, "Error in %s: %s\n", "FT_Done_Face", file);
}
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/include/freetype/internal/ftserv.h 
freetype2.new/include/freetype/internal/ftserv.h
*** freetype2/include/freetype/internal/ftserv.h        2003-11-01 
23:36:19.000000000 +0900
--- freetype2.new/include/freetype/internal/ftserv.h    2003-12-16 
17:04:57.000000000 +0900
***************
*** 248,253 ****
--- 248,254 ----
  #define FT_SERVICE_SFNT_H              <freetype/internal/services/svsfnt.h>
  #define FT_SERVICE_PFR_H               <freetype/internal/services/svpfr.h>
  #define FT_SERVICE_WINFNT_H            <freetype/internal/services/svwinfnt.h>
+ #define FT_SERVICE_TT_CMAP_H           <freetype/internal/services/svttcmap.h>
  
   /* */
  
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file 
freetype2/include/freetype/internal/services/svttcmap.h 
freetype2.new/include/freetype/internal/services/svttcmap.h
*** freetype2/include/freetype/internal/services/svttcmap.h     1970-01-01 
09:00:00.000000000 +0900
--- freetype2.new/include/freetype/internal/services/svttcmap.h 2003-12-16 
18:58:54.000000000 +0900
***************
*** 0 ****
--- 1,48 ----
+ /***************************************************************************/
+ /*                                                                         */
+ /*  svsttcmap.h                                                            */
+ /*                                                                         */
+ /*    The FreeType tt/sfnt cmap extra information service.                 */
+ /*                                                                         */
+ /*  Copyright 2003 by                                                      */
+ /*  Masatake YAMATO, Redhat K.K.                                           */
+ /*                                                                         */
+ /*  Copyright 2003 by                                                      */
+ /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
+ /*                                                                         */
+ /*  This file is part of the FreeType project, and may only be used,       */
+ /*  modified, and distributed under the terms of the FreeType project      */
+ /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
+ /*  this file you indicate that you have read the license and              */
+ /*  understand and accept it fully.                                        */
+ /*                                                                         */
+ /***************************************************************************/
+ 
+ /* Development of this service is support of 
+    Information-technology Promotion Agency, Japan. */
+ 
+ #ifndef __SVSTTCMAP_H__
+ #define __SVSTTCMAP_H__ 
+ 
+ #include FT_INTERNAL_SERVICE_H
+ #include FT_TRUETYPE_TABLES_H
+ 
+ FT_BEGIN_HEADER
+ 
+ #define FT_SERVICE_ID_TT_CMAP "tt-cmaps"
+ 
+   
+   typedef FT_Error
+   (*TT_CMap_Info_GetFunc) ( FT_CharMap charmap, TT_CMapInfo *cmap_info );
+ 
+   FT_DEFINE_SERVICE( TTCMaps )
+   {
+     TT_CMap_Info_GetFunc get_cmap_info;
+   }; 
+   
+   /* */
+ 
+ FT_END_HEADER
+ #endif /* __SVSTTCMAP_H__ */
+ 
+ /* END */
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/include/freetype/tttables.h 
freetype2.new/include/freetype/tttables.h
*** freetype2/include/freetype/tttables.h       2003-11-04 16:44:19.000000000 
+0900
--- freetype2.new/include/freetype/tttables.h   2003-12-16 18:49:46.000000000 
+0900
***************
*** 570,575 ****
--- 570,595 ----
  
    } FT_Sfnt_Tag;
  
+   /*************************************************************************/
+   /*                                                                       */
+   /* <Struct>                                                              */
+   /*    TT_CMapInfo                                                        */
+   /*                                                                       */
+   /* <Description>                                                         */
+   /*    A structure used to store truetype/sfnt specific cmap information  */
+   /*    which is not covered by generic FT_CharMap structure. This         */
+   /*    structure can be accessed with FT_Get_TT_CMap_Info function.       */
+   /*                                                                       */
+   /* <Fields>                                                              */
+   /*    language               :: language ID used in Mac fonts.           */
+   /*                              Definitions of values are in             */
+   /*                              freetype/ttnameid.h.                     */
+   /*                                                                       */
+   typedef struct  TT_CMapInfo_
+   {
+     FT_ULong language;
+   } TT_CMapInfo;
+ 
    /* */
  
  
***************
*** 663,668 ****
--- 683,710 ----
                        FT_Byte*   buffer,
                        FT_ULong*  length );
  
+ 
+   /*************************************************************************/
+   /*                                                                       */
+   /* <Function>                                                            */
+   /*    FT_Get_TT_CMap_Info                                                */
+   /*                                                                       */
+   /* <Description>                                                         */
+   /*    Get truetype/sfnt specific cmap information for given charmap.     */
+   /*                                                                       */
+   /* <Input>                                                               */
+   /*    charmap :: target charmap.                                         */
+   /*                                                                       */
+   /* <Output>                                                              */
+   /*    cmap_info :: truetype/sfnt specific cmap information.              */
+   /*                                                                       */
+   /* <Return>                                                              */
+   /*    FreeType errror code. 0 means success.                             */
+   /*                                                                       */
+   FT_EXPORT( FT_Error )
+   FT_Get_TT_CMap_Info( FT_CharMap   charmap,
+                      TT_CMapInfo  *cmap_info );
+ 
    /* */
  
  
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/src/base/ftobjs.c 
freetype2.new/src/base/ftobjs.c
*** freetype2/src/base/ftobjs.c 2003-12-11 07:10:16.000000000 +0900
--- freetype2.new/src/base/ftobjs.c     2003-12-16 17:43:48.000000000 +0900
***************
*** 30,36 ****
  #include FT_SERVICE_SFNT_H
  #include FT_SERVICE_POSTSCRIPT_NAME_H
  #include FT_SERVICE_GLYPH_DICT_H
! 
  
    FT_BASE_DEF( FT_Pointer )
    ft_service_list_lookup( FT_ServiceDesc  service_descriptors,
--- 30,36 ----
  #include FT_SERVICE_SFNT_H
  #include FT_SERVICE_POSTSCRIPT_NAME_H
  #include FT_SERVICE_GLYPH_DICT_H
! #include FT_SERVICE_TT_CMAP_H
  
    FT_BASE_DEF( FT_Pointer )
    ft_service_list_lookup( FT_ServiceDesc  service_descriptors,
***************
*** 2507,2512 ****
--- 2507,2528 ----
      return service->load_table( face, tag, offset, buffer, length );
    }
  
+   FT_EXPORT_DEF( FT_Error )
+   FT_Get_TT_CMap_Info( FT_CharMap   charmap,
+                      TT_CMapInfo  *cmap_info )
+   {
+     FT_Service_TTCMaps service;
+     FT_Face face;
+     
+     if ( !charmap || !charmap->face || !cmap_info )
+       return FT_Err_Invalid_Argument;
+ 
+     face = charmap->face;
+     FT_FACE_FIND_SERVICE( face, service, TT_CMAP );
+     if ( service == NULL )
+       return FT_Err_Unimplemented_Feature;
+     return service->get_cmap_info( charmap, cmap_info );
+   }
  
    FT_EXPORT_DEF( FT_Error )
    FT_Activate_Size( FT_Size  size )
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/src/sfnt/sfdriver.c 
freetype2.new/src/sfnt/sfdriver.c
*** freetype2/src/sfnt/sfdriver.c       2003-12-16 15:42:11.000000000 +0900
--- freetype2.new/src/sfnt/sfdriver.c   2003-12-16 19:00:21.000000000 +0900
***************
*** 34,43 ****
  #include "ttpost.h"
  #endif
  
  #include FT_SERVICE_GLYPH_DICT_H
  #include FT_SERVICE_POSTSCRIPT_NAME_H
  #include FT_SERVICE_SFNT_H
! 
  
   /*
    *  SFNT TABLE SERVICE
--- 34,45 ----
  #include "ttpost.h"
  #endif
  
+ #include "ttcmap0.h"
+ 
  #include FT_SERVICE_GLYPH_DICT_H
  #include FT_SERVICE_POSTSCRIPT_NAME_H
  #include FT_SERVICE_SFNT_H
! #include FT_SERVICE_TT_CMAP_H
  
   /*
    *  SFNT TABLE SERVICE
***************
*** 259,265 ****
--- 261,284 ----
      (FT_PsName_GetFunc)sfnt_get_ps_name
    };
  
+  /*
+   *  TT CMAP INFO
+   *
+   */
  
+   static FT_Error 
+   tt_get_cmap_info( FT_CharMap charmap,
+                   TT_CMapInfo *cmap_info )
+   {
+     TT_CMap tt_cmap        = (TT_CMap)charmap;
+     cmap_info->language      = tt_cmap->language;
+     return FT_Err_Ok;
+   }
+ 
+   static const FT_Service_TTCMapsRec tt_service_get_cap_info =
+   {
+     (TT_CMap_Info_GetFunc) tt_get_cmap_info
+   };
  
   /*
    *  SERVICE LIST
***************
*** 273,279 ****
  #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
      { FT_SERVICE_ID_GLYPH_DICT,           &sfnt_service_glyph_dict },
  #endif
! 
      { NULL, NULL }
    };
  
--- 292,298 ----
  #ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
      { FT_SERVICE_ID_GLYPH_DICT,           &sfnt_service_glyph_dict },
  #endif
!     { FT_SERVICE_ID_TT_CMAP,              &tt_service_get_cap_info },
      { NULL, NULL }
    };
  
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/src/sfnt/ttcmap0.c 
freetype2.new/src/sfnt/ttcmap0.c
*** freetype2/src/sfnt/ttcmap0.c        2003-06-23 00:33:53.000000000 +0900
--- freetype2.new/src/sfnt/ttcmap0.c    2003-12-16 19:02:25.000000000 +0900
***************
*** 143,148 ****
--- 143,156 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap0_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 4; /* Skip format and length */
+     cmap->language = (FT_ULong)TT_PEEK_USHORT( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap0_class_rec =
***************
*** 150,156 ****
      {
        sizeof( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap0_char_index,
        (FT_CMap_CharNextFunc) tt_cmap0_char_next
--- 158,164 ----
      {
        sizeof( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap0_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap0_char_index,
        (FT_CMap_CharNextFunc) tt_cmap0_char_next
***************
*** 496,501 ****
--- 504,517 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap2_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 4; /* Skip format and length */
+     cmap->language = (FT_ULong)TT_PEEK_USHORT( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap2_class_rec =
***************
*** 503,509 ****
      {
        sizeof( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap2_char_index,
        (FT_CMap_CharNextFunc) tt_cmap2_char_next
--- 519,525 ----
      {
        sizeof( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap2_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap2_char_index,
        (FT_CMap_CharNextFunc) tt_cmap2_char_next
***************
*** 1057,1062 ****
--- 1073,1086 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap4_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 4; /* Skip format and length */
+     cmap->language = (FT_ULong)TT_PEEK_USHORT( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap4_class_rec =
***************
*** 1064,1070 ****
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap4_char_index,
        (FT_CMap_CharNextFunc) tt_cmap4_char_next
--- 1088,1094 ----
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap4_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap4_char_index,
        (FT_CMap_CharNextFunc) tt_cmap4_char_next
***************
*** 1201,1206 ****
--- 1225,1238 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap6_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 4; /* Skip format and length */
+     cmap->language = (FT_ULong)TT_PEEK_USHORT( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap6_class_rec =
***************
*** 1208,1214 ****
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap6_char_index,
        (FT_CMap_CharNextFunc) tt_cmap6_char_next
--- 1240,1246 ----
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap6_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap6_char_index,
        (FT_CMap_CharNextFunc) tt_cmap6_char_next
***************
*** 1438,1443 ****
--- 1470,1483 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap8_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 8; /* Skip format, reserved and length */
+     cmap->language = TT_PEEK_ULONG( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap8_class_rec =
***************
*** 1445,1451 ****
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap8_char_index,
        (FT_CMap_CharNextFunc) tt_cmap8_char_next
--- 1485,1491 ----
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap8_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap8_char_index,
        (FT_CMap_CharNextFunc) tt_cmap8_char_next
***************
*** 1570,1575 ****
--- 1610,1623 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap10_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 8; /* Skip format, reserved and length */
+     cmap->language = TT_PEEK_ULONG( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap10_class_rec =
***************
*** 1577,1583 ****
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap10_char_index,
        (FT_CMap_CharNextFunc) tt_cmap10_char_next
--- 1625,1631 ----
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap10_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap10_char_index,
        (FT_CMap_CharNextFunc) tt_cmap10_char_next
***************
*** 1740,1745 ****
--- 1788,1801 ----
      return gindex;
    }
  
+   FT_CALLBACK_DEF( FT_Error )
+   tt_cmap12_init( TT_CMap   cmap,
+                FT_Byte*  table )
+   {
+     FT_Byte*  p    = table + 8; /* Skip format, reserved and length */
+     cmap->language = TT_PEEK_ULONG( p );
+     return tt_cmap_init( cmap, table );
+   }
  
    FT_CALLBACK_TABLE_DEF
    const TT_CMap_ClassRec  tt_cmap12_class_rec =
***************
*** 1747,1753 ****
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap12_char_index,
        (FT_CMap_CharNextFunc) tt_cmap12_char_next
--- 1803,1809 ----
      {
        sizeof ( TT_CMapRec ),
  
!       (FT_CMap_InitFunc)     tt_cmap12_init,
        (FT_CMap_DoneFunc)     NULL,
        (FT_CMap_CharIndexFunc)tt_cmap12_char_index,
        (FT_CMap_CharNextFunc) tt_cmap12_char_next
diff -c -r --exclude=cscope.files --exclude=cscope.out --exclude=CVS 
--exclude=.cvsignore --exclude=stamp-vti --exclude=version.texi --exclude='.#*' 
--exclude='*~' --exclude='*.orig' --exclude='automake.info*' --exclude=aclocal 
--exclude=autom4te.cache --exclude=automake --exclude=config.status 
--exclude=Makefile --exclude=samples --exclude=amversion.m4 
--exclude=automake-1.5e --new-file freetype2/src/sfnt/ttcmap0.h 
freetype2.new/src/sfnt/ttcmap0.h
*** freetype2/src/sfnt/ttcmap0.h        2002-08-28 05:20:27.000000000 +0900
--- freetype2.new/src/sfnt/ttcmap0.h    2003-12-16 17:40:32.000000000 +0900
***************
*** 31,36 ****
--- 31,37 ----
    {
      FT_CMapRec  cmap;
      FT_Byte*    data;           /* pointer to in-memory cmap table */
+     FT_ULong    language;     /* Used in Mac platform */
  
    } TT_CMapRec, *TT_CMap;
  

reply via email to

[Prev in Thread] Current Thread [Next in Thread]