[Top][All Lists]
[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;
RE: [Devel] Mac language ID, Turner David, 2003/12/16
RE: [Devel] Mac language ID, Turner David, 2003/12/16