freetype.h: Adding ft_encoding_xxx values for some CJK encodings.
Fixing copyright notice on many files.
Changed some tracing levels.
A lot of formatting, fixing documentation etc. as usual.
diff --git a/src/base/ftbase.c b/src/base/ftbase.c
index 8b2f5b2..20e4199 100644
--- a/src/base/ftbase.c
+++ b/src/base/ftbase.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index 39cf6ac..f0dcf1e 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftdebug.c b/src/base/ftdebug.c
index 5fb000b..72c44a3 100644
--- a/src/base/ftdebug.c
+++ b/src/base/ftdebug.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftextend.c b/src/base/ftextend.c
index 24d8b0e..7269871 100644
--- a/src/base/ftextend.c
+++ b/src/base/ftextend.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftglyph.c b/src/base/ftglyph.c
index 6bbad90..d576b10 100644
--- a/src/base/ftglyph.c
+++ b/src/base/ftglyph.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftgrays.c b/src/base/ftgrays.c
index 44b240b..e006a35 100644
--- a/src/base/ftgrays.c
+++ b/src/base/ftgrays.c
@@ -7,8 +7,8 @@
/* Copyright 2000 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 */
+/* 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. */
diff --git a/src/base/ftinit.c b/src/base/ftinit.c
index 1c3ace6..3d524ac 100644
--- a/src/base/ftinit.c
+++ b/src/base/ftinit.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftlist.c b/src/base/ftlist.c
index 3842fcb..0158ba4 100644
--- a/src/base/ftlist.c
+++ b/src/base/ftlist.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftmm.c b/src/base/ftmm.c
index 78317a7..ea4aaee 100644
--- a/src/base/ftmm.c
+++ b/src/base/ftmm.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c
index ac89cf0..9598146 100644
--- a/src/base/ftobjs.c
+++ b/src/base/ftobjs.c
@@ -5,10 +5,10 @@
/* The FreeType private base classes (base). */
/* */
/* Copyright 1996-2000 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg */
+/* 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 */
+/* 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. */
diff --git a/src/base/ftoutln.c b/src/base/ftoutln.c
index 53cc301..93d8f45 100644
--- a/src/base/ftoutln.c
+++ b/src/base/ftoutln.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftraster.c b/src/base/ftraster.c
index d5f47bf..c450d0b 100644
--- a/src/base/ftraster.c
+++ b/src/base/ftraster.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/ftstream.c b/src/base/ftstream.c
index dd33ec7..286cc5f 100644
--- a/src/base/ftstream.c
+++ b/src/base/ftstream.c
@@ -7,8 +7,8 @@
/* Copyright 2000 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 */
+/* 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. */
diff --git a/src/base/ftsystem.c b/src/base/ftsystem.c
index f51a504..434a6db 100644
--- a/src/base/ftsystem.c
+++ b/src/base/ftsystem.c
@@ -7,8 +7,8 @@
/* Copyright 1996-2000 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 */
+/* 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. */
diff --git a/src/base/rules.mk b/src/base/rules.mk
index e2617ac..404f4d1 100644
--- a/src/base/rules.mk
+++ b/src/base/rules.mk
@@ -6,7 +6,7 @@
# Copyright 1996-2000 by
# David Turner, Robert Wilhelm, and Werner Lemberg.
#
-# This file is part of the FreeType project, and may only be used modified
+# 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
diff --git a/src/psnames/rules.mk b/src/psnames/rules.mk
index af226b7..56654b8 100644
--- a/src/psnames/rules.mk
+++ b/src/psnames/rules.mk
@@ -14,8 +14,6 @@
ifndef PSNAMES_INCLUDE
- PSNAMES_INCLUDED := 1
-
# PSNAMES driver directory
#
PSNAMES_DIR := $(SRC_)psnames
diff --git a/src/sfnt/rules.mk b/src/sfnt/rules.mk
index 14de2b6..395aab1 100644
--- a/src/sfnt/rules.mk
+++ b/src/sfnt/rules.mk
@@ -14,18 +14,16 @@
ifndef SFNT_INCLUDE
- SFNT_INCLUDED := 1
-
# SFNT driver directory
#
SFNT_DIR := $(SRC_)sfnt
SFNT_DIR_ := $(SFNT_DIR)$(SEP)
+
# additional include flags used when compiling the driver
#
SFNT_INCLUDE := $(SHARED) $(SFNT_DIR)
-
# compilation flags for the driver
#
SFNT_CFLAGS := $(SFNT_INCLUDE:%=$I%)
@@ -41,7 +39,6 @@
$(SFNT_DIR_)sfobjs.c \
$(SFNT_DIR_)sfdriver.c
-
# driver headers
#
SFNT_DRV_H := $(BASE_H) \
diff --git a/src/sfnt/sfdriver.c b/src/sfnt/sfdriver.c
index abdc645..81bdb02 100644
--- a/src/sfnt/sfdriver.c
+++ b/src/sfnt/sfdriver.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/* */
+/* sfdriver.c */
+/* */
+/* High-level SFNT driver interface (body). */
+/* */
+/* Copyright 1996-2000 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. */
+/* */
+/***************************************************************************/
+
+
#include <freetype/internal/sfnt.h>
#include <freetype/internal/ftobjs.h>
#include <sfdriver.h>
@@ -7,24 +25,48 @@
#include <ttcmap.h>
#include <sfobjs.h>
+
static
- void* get_sfnt_table( TT_Face face, FT_Sfnt_Tag tag )
+ void* get_sfnt_table( TT_Face face,
+ FT_Sfnt_Tag tag )
{
void* table;
- switch (tag)
- {
- case ft_sfnt_head: table = &face->header; break;
- case ft_sfnt_hhea: table = &face->horizontal; break;
- case ft_sfnt_vhea: table = (face->vertical_info ? &face->vertical : 0 ); break;
- case ft_sfnt_os2: table = (face->os2.version == 0xFFFF ? 0 : &face->os2 ); break;
- case ft_sfnt_post: table = &face->postscript; break;
- case ft_sfnt_maxp: table = &face->max_profile; break;
- case ft_sfnt_pclt: table = face->pclt.Version ? &face->pclt : 0 ; break;
- default:
- table = 0;
+ switch ( tag )
+ {
+ case ft_sfnt_head:
+ table = &face->header;
+ break;
+
+ case ft_sfnt_hhea:
+ table = &face->horizontal;
+ break;
+
+ case ft_sfnt_vhea:
+ table = face->vertical_info ? &face->vertical : 0;
+ break;
+
+ case ft_sfnt_os2:
+ table = face->os2.version == 0xFFFF ? 0 : &face->os2;
+ break;
+
+ case ft_sfnt_post:
+ table = &face->postscript;
+ break;
+
+ case ft_sfnt_maxp:
+ table = &face->max_profile;
+ break;
+
+ case ft_sfnt_pclt:
+ table = face->pclt.Version ? &face->pclt : 0;
+ break;
+
+ default:
+ table = 0;
}
+
return table;
}
@@ -33,9 +75,9 @@
FTDriver_Interface SFNT_Get_Interface( FT_Driver driver,
const char* interface )
{
- UNUSED(driver);
+ UNUSED( driver );
- if (strcmp(interface,"get_sfnt")==0)
+ if ( strcmp( interface, "get_sfnt" ) == 0 )
return (FTDriver_Interface)get_sfnt_table;
return 0;
@@ -70,27 +112,27 @@
TT_Load_Kern,
TT_Load_Gasp,
- TT_Load_PCLT,
+ TT_Load_PCLT,
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
/* see `ttsbit.h' */
TT_Load_SBit_Strikes,
TT_Load_SBit_Image,
TT_Free_SBit_Strikes,
-#else
+#else /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
0,
0,
0,
-#endif
+#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
- /* see `ttpost.h' */
#ifdef TT_CONFIG_OPTION_POSTSCRIPT_NAMES
+ /* see `ttpost.h' */
TT_Get_PS_Name,
TT_Free_Post_Names,
-#else
+#else /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
0,
0,
-#endif
+#endif /* TT_CONFIG_OPTION_POSTSCRIPT_NAMES */
/* see `ttcmap.h' */
TT_CharMap_Load,
@@ -100,19 +142,20 @@
const FT_DriverInterface sfnt_driver_interface =
{
- sizeof(FT_DriverRec),
- 0,
- 0,
- 0,
+ sizeof ( FT_DriverRec ), 0, 0, 0,
- "sfnt", /* driver name */
- 1, /* driver version */
- 2, /* driver requires FreeType 2 or above */
+ "sfnt", /* driver name */
+ 1, /* driver version */
+ 2, /* driver requires FreeType 2 or higher */
(void*)&sfnt_interface,
+
+ 0, 0, 0,
+ 0, 0, 0,
0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0, 0, 0,
- 0, 0,
+ 0, 0, 0,
+ 0,
};
+
+/* END */
diff --git a/src/sfnt/sfdriver.h b/src/sfnt/sfdriver.h
index 67fd3bd..44d5a55 100644
--- a/src/sfnt/sfdriver.h
+++ b/src/sfnt/sfdriver.h
@@ -4,7 +4,7 @@
/* */
/* High-level SFNT driver interface (specification). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
diff --git a/src/sfnt/sfnt.c b/src/sfnt/sfnt.c
index 445cd6c..a9aa182 100644
--- a/src/sfnt/sfnt.c
+++ b/src/sfnt/sfnt.c
@@ -1,3 +1,21 @@
+/***************************************************************************/
+/* */
+/* sfnt.c */
+/* */
+/* Single object library component. */
+/* */
+/* Copyright 1996-2000 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. */
+/* */
+/***************************************************************************/
+
+
#define FT_MAKE_OPTION_SINGLE_OBJECT
#include <ttload.c>
@@ -15,3 +33,4 @@
#include <sfdriver.c>
+/* END */
diff --git a/src/sfnt/sfobjs.c b/src/sfnt/sfobjs.c
index d85d022..a71a451 100644
--- a/src/sfnt/sfobjs.c
+++ b/src/sfnt/sfobjs.c
@@ -1,7 +1,26 @@
+/***************************************************************************/
+/* */
+/* sfobjs.c */
+/* */
+/* SFNT object management (base). */
+/* */
+/* Copyright 1996-2000 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. */
+/* */
+/***************************************************************************/
+
+
#include <freetype/internal/sfnt.h>
#include <freetype/internal/psnames.h>
#include <freetype/ttnameid.h>
+
/*************************************************************************/
/* */
/* <Function> */
@@ -16,7 +35,7 @@
/* nameid :: The name id of the name record to return. */
/* */
/* <Return> */
- /* Char string. NULL if no name is present. */
+ /* Character string. NULL if no name is present. */
/* */
static
FT_String* Get_Name( TT_Face face,
@@ -27,7 +46,7 @@
TT_NameRec* rec;
FT_Bool wide_chars = 1;
- /* first pass, look for a given name record */
+
rec = face->name_table.names;
for ( n = 0; n < face->name_table.numNameRecords; n++, rec++ )
{
@@ -36,17 +55,18 @@
/* found the name - now create an ASCII string from it */
FT_Bool found = 0;
- /* Test for Microsoft English language */
+
+ /* test for Microsoft English language */
if ( rec->platformID == TT_PLATFORM_MICROSOFT &&
rec->encodingID <= TT_MS_ID_UNICODE_CS &&
- (rec->languageID & 0x3FF) == 0x009 )
+ ( rec->languageID & 0x3FF ) == 0x009 )
found = 1;
- /* Test for Apple Unicode encoding */
+ /* test for Apple Unicode encoding */
else if ( rec->platformID == TT_PLATFORM_APPLE_UNICODE )
found = 1;
- /* Test for Apple Roman */
+ /* test for Apple Roman */
else if ( rec->platformID == TT_PLATFORM_MACINTOSH &&
rec->languageID == TT_MAC_ID_ROMAN )
{
@@ -54,22 +74,24 @@
wide_chars = 0;
}
- /* Found a Unicode Name */
+ /* found a Unicode name */
if ( found )
{
FT_String* string;
FT_UInt len;
+
if ( wide_chars )
{
TT_UInt m;
+
len = (TT_UInt)rec->stringLength / 2;
if ( MEM_Alloc( string, len + 1 ) )
return NULL;
for ( m = 0; m < len; m ++ )
- string[m] = rec->string[2*m + 1];
+ string[m] = rec->string[2 * m + 1];
}
else
{
@@ -85,13 +107,14 @@
}
}
}
+
return NULL;
}
static
- FT_Encoding find_encoding( int platform_id,
- int encoding_id )
+ FT_Encoding find_encoding( int platform_id,
+ int encoding_id )
{
typedef struct TEncoding
{
@@ -101,40 +124,42 @@
} TEncoding;
- static
- const TEncoding tt_encodings[] =
+ static const TEncoding tt_encodings[] =
{
- { TT_PLATFORM_ISO, -1, ft_encoding_unicode },
+ { TT_PLATFORM_ISO, -1, ft_encoding_unicode },
- { TT_PLATFORM_APPLE_UNICODE, -1, ft_encoding_unicode },
+ { TT_PLATFORM_APPLE_UNICODE, -1, ft_encoding_unicode },
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, ft_encoding_apple_roman },
+ { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, ft_encoding_apple_roman },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, ft_encoding_unicode },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, ft_encoding_sjis },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, ft_encoding_big5 }
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, ft_encoding_unicode },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, ft_encoding_sjis },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, ft_encoding_gb2312 },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, ft_encoding_big5 },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, ft_encoding_wansung },
+ { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, ft_encoding_johab }
};
const TEncoding *cur, *limit;
+
cur = tt_encodings;
- limit = cur + sizeof(tt_encodings)/sizeof(tt_encodings[0]);
+ limit = cur + sizeof ( tt_encodings ) / sizeof ( tt_encodings[0] );
for ( ; cur < limit; cur++ )
{
- if (cur->platform_id == platform_id)
+ if ( cur->platform_id == platform_id )
{
- if (cur->encoding_id == encoding_id ||
- cur->encoding_id == -1 )
+ if ( cur->encoding_id == encoding_id ||
+ cur->encoding_id == -1 )
return cur->encoding;
}
}
+
return ft_encoding_none;
}
-
-
LOCAL_FUNC
FT_Error SFNT_Init_Face( FT_Stream stream,
TT_Face face,
@@ -142,30 +167,32 @@
TT_Int num_params,
FT_Parameter* params )
{
- FT_Error error;
- SFNT_Interface* sfnt;
- PSNames_Interface* psnames;
- SFNT_Header sfnt_header;
+ FT_Error error;
+ SFNT_Interface* sfnt;
+ PSNames_Interface* psnames;
+ SFNT_Header sfnt_header;
/* for now, parameters are unused */
- UNUSED(num_params);
- UNUSED(params);
+ UNUSED( num_params );
+ UNUSED( params );
+
sfnt = (SFNT_Interface*)face->sfnt;
- if (!sfnt)
+ if ( !sfnt )
{
/* look-up the SFNT driver */
FT_Driver sfnt_driver;
+
sfnt_driver = FT_Get_Driver( face->root.driver->library, "sfnt" );
- if (!sfnt_driver)
+ if ( !sfnt_driver )
{
error = FT_Err_Invalid_File_Format;
goto Exit;
}
- sfnt = (SFNT_Interface*)(sfnt_driver->interface.format_interface);
- if (!sfnt)
+ sfnt = (SFNT_Interface*)( sfnt_driver->interface.format_interface );
+ if ( !sfnt )
{
error = FT_Err_Invalid_File_Format;
goto Exit;
@@ -176,27 +203,30 @@
}
psnames = (PSNames_Interface*)face->psnames;
- if (!psnames)
+ if ( !psnames )
{
/* look-up the PSNames driver */
FT_Driver psnames_driver;
+
psnames_driver = FT_Get_Driver( face->root.driver->library, "psnames" );
- if (psnames_driver)
+ if ( psnames_driver )
face->psnames = (PSNames_Interface*)
- (psnames_driver->interface.format_interface);
+ ( psnames_driver->interface.format_interface );
}
/* check that we have a valid TrueType file */
error = sfnt->load_sfnt_header( face, stream, face_index, &sfnt_header );
- if (error) goto Exit;
+ if ( error )
+ goto Exit;
face->format_tag = sfnt_header.format_tag;
face->num_tables = sfnt_header.num_tables;
/* Load font directory */
error = sfnt->load_directory( face, stream, &sfnt_header );
- if ( error ) goto Exit;
+ if ( error )
+ goto Exit;
face->root.num_faces = face->ttc_header.DirCount;
if ( face->root.num_faces < 1 )
@@ -207,9 +237,8 @@
}
-
#undef LOAD_
-#define LOAD_(x) ( (error = sfnt->load_##x( face, stream )) != FT_Err_Ok )
+#define LOAD_( x ) ( (error = sfnt->load_##x( face, stream )) != FT_Err_Ok )
LOCAL_FUNC
@@ -219,18 +248,19 @@
TT_Int num_params,
FT_Parameter* params )
{
- FT_Error error;
- SFNT_Interface* sfnt = (SFNT_Interface*)face->sfnt;
+ FT_Error error;
+ SFNT_Interface* sfnt = (SFNT_Interface*)face->sfnt;
+
/* Load tables */
if ( LOAD_( header ) ||
LOAD_( max_profile ) ||
- (error = sfnt->load_metrics( face, stream, 0 )) != FT_Err_Ok ||
/* load the `hhea' & `hmtx' tables at once */
+ ( error = sfnt->load_metrics( face, stream, 0 ) ) != FT_Err_Ok ||
- (error = sfnt->load_metrics( face, stream, 1 )) != FT_Err_Ok ||
/* try to load the `vhea' & `vmtx' at once if present */
+ ( error = sfnt->load_metrics( face, stream, 1 ) ) != FT_Err_Ok ||
LOAD_( charmaps ) ||
LOAD_( names ) ||
@@ -240,10 +270,11 @@
/* the optional tables */
- /* embedded bitmap support. */
#ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
- if (sfnt->load_sbits && LOAD_(sbits)) goto Exit;
-#endif
+ /* embedded bitmap support. */
+ if ( sfnt->load_sbits && LOAD_( sbits ) )
+ goto Exit;
+#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
if ( LOAD_( hdmx ) ||
LOAD_( gasp ) ||
@@ -267,21 +298,22 @@
TT_Int n;
FT_Memory memory;
+
memory = root->memory;
- /*****************************************************************/
- /* */
- /* Compute face flags. */
- /* */
+ /*********************************************************************/
+ /* */
+ /* Compute face flags. */
+ /* */
flags = FT_FACE_FLAG_SCALABLE | /* scalable outlines */
FT_FACE_FLAG_SFNT | /* SFNT file format */
FT_FACE_FLAG_HORIZONTAL; /* horizontal data */
- /* fixed width font ? */
+ /* fixed width font? */
if ( face->postscript.isFixedPitch )
flags |= FT_FACE_FLAG_FIXED_WIDTH;
- /* vertical information ? */
+ /* vertical information? */
if ( face->vertical_info )
flags |= FT_FACE_FLAG_VERTICAL;
@@ -291,15 +323,15 @@
root->face_flags = flags;
- /*****************************************************************/
- /* */
- /* Compute style flags. */
- /* */
+ /*********************************************************************/
+ /* */
+ /* Compute style flags. */
+ /* */
flags = 0;
if ( face->os2.version != 0xFFFF )
{
- /* We have an OS/2 table, use the `fsSelection' field */
+ /* we have an OS/2 table; use the `fsSelection' field */
if ( face->os2.fsSelection & 1 )
flags |= FT_STYLE_FLAG_ITALIC;
@@ -308,7 +340,7 @@
}
else
{
- /* This is an old Mac font, use the header field */
+ /* this is an old Mac font, use the header field */
if ( face->header.Mac_Style & 1 )
flags |= FT_STYLE_FLAG_BOLD;
@@ -318,13 +350,13 @@
face->root.style_flags = flags;
- /*****************************************************************/
- /* */
- /* Polish the charmaps. */
- /* */
- /* Try to set the charmap encoding according to the platform & */
- /* encoding ID of each charmap. */
- /* */
+ /*********************************************************************/
+ /* */
+ /* Polish the charmaps. */
+ /* */
+ /* Try to set the charmap encoding according to the platform & */
+ /* encoding ID of each charmap. */
+ /* */
charmap = face->charmaps;
root->num_charmaps = face->num_charmaps;
@@ -337,13 +369,16 @@
FT_Int platform = charmap->cmap.platformID;
FT_Int encoding = charmap->cmap.platformEncodingID;
+
charmap->root.face = (FT_Face)face;
charmap->root.platform_id = platform;
charmap->root.encoding_id = encoding;
- charmap->root.encoding = find_encoding(platform,encoding);
+ charmap->root.encoding = find_encoding( platform, encoding );
- /* now, set root->charmap with a unicode charmap wherever available */
- if (!root->charmap && charmap->root.encoding == ft_encoding_unicode)
+ /* now, set root->charmap with a unicode charmap */
+ /* wherever available */
+ if ( !root->charmap &&
+ charmap->root.encoding == ft_encoding_unicode )
root->charmap = (FT_CharMap)charmap;
root->charmaps[n] = (FT_CharMap)charmap;
@@ -358,34 +393,34 @@
FT_Bitmap_Size ) )
return error;
- for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
- {
- face->root.available_sizes[n].width =
- face->sbit_strikes[n].x_ppem;
- face->root.available_sizes[n].height =
- face->sbit_strikes[n].y_ppem;
- }
+ for ( n = 0 ; n < face->num_sbit_strikes ; n++ )
+ {
+ face->root.available_sizes[n].width =
+ face->sbit_strikes[n].x_ppem;
+ face->root.available_sizes[n].height =
+ face->sbit_strikes[n].y_ppem;
+ }
}
else
-#else
+#else /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
{
root->num_fixed_sizes = 0;
root->available_sizes = 0;
}
#endif /* TT_CONFIG_OPTION_EMBEDDED_BITMAPS */
- /*****************************************************************/
- /* */
- /* Set up metrics. */
- /* */
+ /*********************************************************************/
+ /* */
+ /* Set up metrics. */
+ /* */
root->bbox.xMin = face->header.xMin;
root->bbox.yMin = face->header.yMin;
root->bbox.xMax = face->header.xMax;
root->bbox.yMax = face->header.yMax;
root->units_per_EM = face->header.Units_Per_EM;
- /* The ascender/descender/height are computed from the OS/2 table */
- /* when found. Otherwise, they're taken from the horizontal header */
+ /* The ascender/descender/height are computed from the OS/2 table */
+ /* when found. Otherwise, they're taken from the horizontal header. */
if ( face->os2.version != 0xFFFF )
{
root->ascender = face->os2.sTypoAscender;
@@ -401,11 +436,11 @@
face->horizontal.Line_Gap;
}
- root->max_advance_width = face->horizontal.advance_Width_Max;
+ root->max_advance_width = face->horizontal.advance_Width_Max;
- root->max_advance_height = root->height;
- if ( face->vertical_info )
- root->max_advance_height = face->vertical.advance_Height_Max;
+ root->max_advance_height = face->vertical_info
+ ? face->vertical.advance_Height_Max
+ : root->height;
root->underline_position = face->postscript.underlinePosition;
root->underline_thickness = face->postscript.underlineThickness;
@@ -428,14 +463,15 @@
FT_Memory memory = face->root.memory;
SFNT_Interface* sfnt = face->sfnt;
- if (sfnt)
+
+ if ( sfnt )
{
- /* destroy the postscript names table if it is supported */
- if (sfnt->free_psnames)
+ /* destroy the postscript names table if it is loaded */
+ if ( sfnt->free_psnames )
sfnt->free_psnames( face );
- /* destroy the embedded bitmaps table if it is supported */
- if (sfnt->free_sbits)
+ /* destroy the embedded bitmaps table if it is loaded */
+ if ( sfnt->free_sbits )
sfnt->free_sbits( face );
}
@@ -455,6 +491,8 @@
if (sfnt && sfnt->load_charmaps )
{
FT_UShort n;
+
+
for ( n = 0; n < face->num_charmaps; n++ )
sfnt->free_charmap( face, &face->charmaps[n].cmap );
}
@@ -500,3 +538,5 @@
face->sfnt = 0;
}
+
+/* END */
diff --git a/src/sfnt/sfobjs.h b/src/sfnt/sfobjs.h
index 193cc9b..380a1fc 100644
--- a/src/sfnt/sfobjs.h
+++ b/src/sfnt/sfobjs.h
@@ -2,9 +2,9 @@
/* */
/* sfobjs.h */
/* */
-/* SFNT object management */
+/* SFNT object management (specification). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -15,12 +15,14 @@
/* */
/***************************************************************************/
+
#ifndef SFOBJS_H
#define SFOBJS_H
#include <freetype/internal/sfnt.h>
#include <freetype/internal/ftobjs.h>
+
LOCAL_DEF
FT_Error SFNT_Init_Face( FT_Stream stream,
TT_Face face,
diff --git a/src/sfnt/ttcmap.c b/src/sfnt/ttcmap.c
index daeaccf..a5c32f2 100644
--- a/src/sfnt/ttcmap.c
+++ b/src/sfnt/ttcmap.c
@@ -4,11 +4,11 @@
/* */
/* TrueType character mapping table (cmap) support (body). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 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 */
+/* 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. */
@@ -22,15 +22,26 @@
#include <ttload.h>
#include <ttcmap.h>
-/* required by the tracing mode */
+
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttcmap
+#define FT_COMPONENT trace_ttcmap
- static TT_UInt code_to_index0( TT_CMapTable* charmap, TT_ULong char_code );
- static TT_UInt code_to_index2( TT_CMapTable* charmap, TT_ULong char_code );
- static TT_UInt code_to_index4( TT_CMapTable* charmap, TT_ULong char_code );
- static TT_UInt code_to_index6( TT_CMapTable* charmap, TT_ULong char_code );
+ static TT_UInt code_to_index0( TT_CMapTable* charmap,
+ TT_ULong char_code );
+ static TT_UInt code_to_index2( TT_CMapTable* charmap,
+ TT_ULong char_code );
+ static TT_UInt code_to_index4( TT_CMapTable* charmap,
+ TT_ULong char_code );
+ static TT_UInt code_to_index6( TT_CMapTable* charmap,
+ TT_ULong char_code );
+
/*************************************************************************/
/* */
@@ -48,7 +59,7 @@
/* table :: A pointer to a cmap object. */
/* */
/* <Return> */
- /* Error code. 0 means success. */
+ /* TrueType error code. 0 means success. */
/* */
/* <Note> */
/* The function assumes that the stream is already in use (i.e., */
@@ -119,7 +130,7 @@
/* load subheaders */
cmap2->numGlyphId = l =
- ( ( cmap->length - 2L*(256+3) - num_SH*8L ) & 0xffff ) / 2;
+ ( ( cmap->length - 2L * ( 256 + 3 ) - num_SH * 8L ) & 0xffff ) / 2;
if ( ALLOC_ARRAY( cmap2->subHeaders,
num_SH + 1,
@@ -177,8 +188,8 @@
if ( ALLOC_ARRAY( cmap4->segments,
num_Seg,
- TT_CMap4Segment ) ||
- ACCESS_Frame( (num_Seg * 4 + 1) * 2L ) )
+ TT_CMap4Segment ) ||
+ ACCESS_Frame( ( num_Seg * 4 + 1 ) * 2L ) )
goto Fail;
segments = cmap4->segments;
@@ -200,12 +211,12 @@
FORGET_Frame();
cmap4->numGlyphId = l =
- ( ( cmap->length - ( 16L + 8L * num_Seg ) ) & 0xFFFF ) /2;
+ ( ( cmap->length - ( 16L + 8L * num_Seg ) ) & 0xFFFF ) / 2;
/* load IDs */
if ( ALLOC_ARRAY( cmap4->glyphIdArray, l, TT_UShort ) ||
- ACCESS_Frame( l*2L ) )
+ ACCESS_Frame( l * 2L ) )
goto Fail;
for ( i = 0; i < l; i++ )
@@ -248,6 +259,7 @@
return TT_Err_Invalid_CharMap_Format;
}
+
return TT_Err_Ok;
Fail:
@@ -269,7 +281,7 @@
/* cmap :: A handle to a cmap object. */
/* */
/* <Return> */
- /* Error code. 0 means success. */
+ /* TrueType error code. 0 means success. */
/* */
LOCAL_FUNC
TT_Error TT_CharMap_Free( TT_Face face,
@@ -316,7 +328,6 @@
}
-
/*************************************************************************/
/* */
/* <Function> */
@@ -332,8 +343,7 @@
/* cmap0 :: A pointer to a cmap table in format 0. */
/* */
/* <Return> */
- /* Glyph index into the glyphs array. 0 if the glyph does not */
- /* exist. */
+ /* Glyph index into the glyphs array. 0 if the glyph does not exist. */
/* */
static
TT_UInt code_to_index0( TT_CMapTable* cmap,
@@ -341,6 +351,7 @@
{
TT_CMap0* cmap0 = &cmap->c.cmap0;
+
return ( charCode <= 0xFF ? cmap0->glyphIdArray[charCode] : 0 );
}
@@ -358,54 +369,53 @@
/* cmap2 :: A pointer to a cmap table in format 2. */
/* */
/* <Return> */
- /* Glyph index into the glyphs array. 0 if the glyph does not */
- /* exist. */
+ /* Glyph index into the glyphs array. 0 if the glyph does not exist. */
/* */
static
TT_UInt code_to_index2( TT_CMapTable* cmap,
TT_ULong charCode )
{
- TT_UInt result, index1, offset;
- TT_UInt char_lo;
- TT_ULong char_hi;
- TT_CMap2SubHeader* sh2;
- TT_CMap2* cmap2;
+ TT_UInt result, index1, offset;
+ TT_UInt char_lo;
+ TT_ULong char_hi;
+ TT_CMap2SubHeader* sh2;
+ TT_CMap2* cmap2;
+
cmap2 = &cmap->c.cmap2;
result = 0;
- char_lo = (TT_UInt)(charCode & 0xFF);
+ char_lo = (TT_UInt)( charCode & 0xFF );
char_hi = charCode >> 8;
if ( char_hi == 0 )
{
/* an 8-bit character code - we use the subHeader 0 in this case */
- /* to test wether the character code is in the charmap */
+ /* to test whether the character code is in the charmap */
if ( cmap2->subHeaderKeys[char_lo] == 0 )
- {
result = cmap2->glyphIdArray[char_lo];
- }
}
else
{
/* a 16-bit character code */
- index1 = cmap2->subHeaderKeys[ char_hi & 0xFF ];
- if (index1)
+ index1 = cmap2->subHeaderKeys[char_hi & 0xFF];
+ if ( index1 )
{
sh2 = cmap2->subHeaders + index1;
char_lo -= sh2->firstCode;
- if (char_lo < sh2->entryCount)
+ if ( char_lo < sh2->entryCount )
{
- offset = sh2->idRangeOffset/2 + char_lo;
- if (offset < cmap2->numGlyphId)
+ offset = sh2->idRangeOffset / 2 + char_lo;
+ if ( offset < cmap2->numGlyphId )
{
result = cmap2->glyphIdArray[offset];
- if (result)
- result = (result + sh2->idDelta) & 0xFFFF;
+ if ( result )
+ result = ( result + sh2->idDelta ) & 0xFFFF;
}
}
}
}
+
return result;
}
@@ -423,8 +433,7 @@
/* cmap4 :: A pointer to a cmap table in format 4. */
/* */
/* <Return> */
- /* Glyph index into the glyphs array. 0 if the glyph does not */
- /* exist. */
+ /* Glyph index into the glyphs array. 0 if the glyph does not exist. */
/* */
static
TT_UInt code_to_index4( TT_CMapTable* cmap,
@@ -434,6 +443,7 @@
TT_CMap4* cmap4;
TT_CMap4Segment *seg4, *limit;
+
cmap4 = &cmap->c.cmap4;
result = 0;
segCount = cmap4->segCountX2 / 2;
@@ -448,8 +458,8 @@
for ( seg4 = cmap4->segments; seg4 < limit; seg4++, segCount-- )
{
- /* the ranges are sorted in increasing order, if we're out of */
- /* the range here, the char code isn't in the charmap, so exit */
+ /* the ranges are sorted in increasing order. If we are out of */
+ /* the range here, the char code isn't in the charmap, so exit. */
if ( charCode > seg4->endCount )
continue;
@@ -461,24 +471,23 @@
Found:
cmap4->last_segment = seg4;
- /* when the idRangeOffset is 0, we can compute the glyph index */
- /* directly.. */
+ /* if the idRangeOffset is 0, we can compute the glyph index */
+ /* directly */
if ( seg4->idRangeOffset == 0 )
- result = (charCode + seg4->idDelta) & 0xFFFF;
-
+ result = ( charCode + seg4->idDelta ) & 0xFFFF;
else
- /* otherwise, we must use the glyphIdArray to do it */
{
- index1 = seg4->idRangeOffset/2 + (charCode - seg4->startCount)
+ /* otherwise, we must use the glyphIdArray to do it */
+ index1 = seg4->idRangeOffset / 2
+ + ( charCode - seg4->startCount )
- segCount;
if ( index1 < cmap4->numGlyphId &&
cmap4->glyphIdArray[index1] != 0 )
- {
- result = (cmap4->glyphIdArray[index1] + seg4->idDelta) & 0xFFFF;
- }
+ result = ( cmap4->glyphIdArray[index1] + seg4->idDelta ) & 0xFFFF;
}
+
return result;
}
@@ -496,16 +505,16 @@
/* cmap6 :: A pointer to a cmap table in format 6. */
/* */
/* <Return> */
- /* Glyph index into the glyphs array. 0 if the glyph does not */
- /* exist. */
+ /* Glyph index into the glyphs array. 0 if the glyph does not exist. */
/* */
static
TT_UInt code_to_index6( TT_CMapTable* cmap,
- TT_ULong charCode )
+ TT_ULong charCode )
{
TT_CMap6* cmap6;
TT_UInt result = 0;
+
cmap6 = &cmap->c.cmap6;
result = 0;
charCode -= cmap6->firstCode;
diff --git a/src/sfnt/ttcmap.h b/src/sfnt/ttcmap.h
index 49ac80d..3439469 100644
--- a/src/sfnt/ttcmap.h
+++ b/src/sfnt/ttcmap.h
@@ -4,11 +4,11 @@
/* */
/* TrueType character mapping table (cmap) support (specification). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 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 */
+/* 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. */
@@ -26,50 +26,11 @@
#endif
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_CharMap_Load */
- /* */
- /* <Description> */
- /* Loads a given TrueType character map into memory. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face object. */
- /* stream :: A handle to the current stream object. */
- /* */
- /* <InOut> */
- /* cmap :: A pointer to a cmap object. */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
- /* <Note> */
- /* The function assumes that the stream is already in use (i.e., */
- /* opened). In case of error, all partially allocated tables are */
- /* released. */
- /* */
LOCAL_DEF
TT_Error TT_CharMap_Load( TT_Face face,
TT_CMapTable* cmap,
FT_Stream input );
-
- /*************************************************************************/
- /* */
- /* <Function> */
- /* TT_CharMap_Free */
- /* */
- /* <Description> */
- /* Destroys a character mapping table. */
- /* */
- /* <Input> */
- /* face :: A handle to the parent face object. */
- /* cmap :: A handle to a cmap object. */
- /* */
- /* <Return> */
- /* Error code. 0 means success. */
- /* */
LOCAL_DEF
TT_Error TT_CharMap_Free( TT_Face face,
TT_CMapTable* cmap );
diff --git a/src/sfnt/ttload.c b/src/sfnt/ttload.c
index 8b1c7d9..595ed6d 100644
--- a/src/sfnt/ttload.c
+++ b/src/sfnt/ttload.c
@@ -2,22 +2,18 @@
/* */
/* ttload.c */
/* */
-/* TrueType tables loader (body). */
+/* Load the basic TrueType tables, i.e., tables that can be either in */
+/* TTF or OTF fonts (body). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 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 */
+/* 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. */
/* */
-/* */
-/* WARNING: This file should not be compiled directly; it is meant to be */
-/* included in the source of several font drivers (i.e., the TTF */
-/* and OTF drivers). */
-/* */
/***************************************************************************/
@@ -28,11 +24,15 @@
#include <ttload.h>
#include <ttcmap.h>
-/* required by the tracing mode */
-#undef FT_COMPONENT
-#define FT_COMPONENT trace_ttload
-#define READ_FIELDS
+ /*************************************************************************/
+ /* */
+ /* The macro FT_COMPONENT is used in trace mode. It is an implicit */
+ /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */
+ /* messages during execution. */
+ /* */
+#undef FT_COMPONENT
+#define FT_COMPONENT trace_ttload
/*************************************************************************/
@@ -45,10 +45,10 @@
/* */
/* <Input> */
/* face :: A face object handle. */
- /* tag :: The searched tag. */
+ /* tag :: The searched tag. */
/* */
/* <Return> */
- /* pointer to table directory entry. 0 if not found.. */
+ /* A pointer to the table directory entry. 0 if not found. */
/* */
LOCAL_FUNC
TT_Table* TT_LookUp_Table( TT_Face face,
@@ -57,24 +57,28 @@
TT_Table* entry;
TT_Table* limit;
- FT_TRACE4(( "TT_LookUp_Table( %08p, %c%c%c%c )\n",
+
+ FT_TRACE3(( "TT_LookUp_Table: %08p, `%c%c%c%c' )\n",
face,
- (TT_Char)(tag >> 24),
- (TT_Char)(tag >> 16),
- (TT_Char)(tag >> 8),
- (TT_Char)(tag) ));
+ (TT_Char)( tag >> 24 ),
+ (TT_Char)( tag >> 16 ),
+ (TT_Char)( tag >> 8 ),
+ (TT_Char)( tag ) ));
entry = face->dir_tables;
limit = entry + face->num_tables;
+
for ( ; entry < limit; entry++ )
{
if ( entry->Tag == tag )
return entry;
}
- FT_TRACE4(( " Could not find table!\n" ));
+
+ FT_TRACE3(( " Could not find table!\n" ));
return 0;
}
+
/*************************************************************************/
/* */
/* <Function> */
@@ -84,26 +88,30 @@
/* Looks for a TrueType table by name, then seek a stream to it. */
/* */
/* <Input> */
- /* face :: a face object handle. */
- /* tag :: the searched tag. */
- /* stream :: the stream to seek when the table is found */
+ /* face :: A face object handle. */
+ /* tag :: The searched tag. */
+ /* stream :: The stream to seek when the table is found. */
+ /* */
+ /* <Output> */
+ /* length :: The length of the table if found, undefined otherwise. */
/* */
/* <Return> */
- /* pointer to table directory entry. 0 if not found.. */
+ /* TrueType error code. 0 means success. */
/* */
LOCAL_FUNC
- TT_Error TT_Goto_Table( TT_Face face,
- TT_ULong tag,
- FT_Stream stream,
- TT_ULong *length )
+ TT_Error TT_Goto_Table( TT_Face face,
+ TT_ULong tag,
+ FT_Stream stream,
+ TT_ULong* length )
{
TT_Table* table;
TT_Error error;
+
table = TT_LookUp_Table( face, tag );
- if (table)
+ if ( table )
{
- if (length)
+ if ( length )
*length = table->Length;
(void)FILE_Seek( table->Offset );
@@ -117,54 +125,61 @@
/*************************************************************************/
/* */
- /* <FuncType> */
+ /* <Function> */
/* TT_Load_SFNT_Header */
/* */
/* <Description> */
- /* Loads the header of a SFNT font file. Supports collections.. */
+ /* Loads the header of a SFNT font file. Supports collections. */
/* */
/* <Input> */
- /* face :: A handle to the target face object. */
- /* stream :: The input stream. */
+ /* face :: A handle to the target face object. */
+ /* stream :: The input stream. */
+ /* face_index :: If the font is a collection, the number of the font */
+ /* in the collection, ignored otherwise. */
/* */
/* <Output> */
- /* sfnt :: the sfnt header */
+ /* sfnt :: The SFNT header. */
/* */
/* <Return> */
/* TrueType error code. 0 means success. */
/* */
/* <Note> */
- /* The stream cursor must be at the font file's origin */
- /* This function recognizes fonts embedded in a "TrueType collection" */
+ /* The stream cursor must be at the font file's origin. */
/* */
- /* This function checks that the header is valid by looking at the */
- /* values of "search_range", "entry_selector" and "range_shift".. */
+ /* This function recognizes fonts embedded in a `TrueType collection' */
+ /* */
+ /* The header will be checked whether it is valid by looking at the */
+ /* values of `search_range', `entry_selector', and `range_shift'. */
/* */
LOCAL_FUNC
- TT_Error TT_Load_SFNT_Header( TT_Face face,
- FT_Stream stream,
- TT_Long face_index,
- SFNT_Header* sfnt )
+ TT_Error TT_Load_SFNT_Header( TT_Face face,
+ FT_Stream stream,
+ TT_Long face_index,
+ SFNT_Header* sfnt )
{
TT_Error error;
TT_ULong format_tag;
FT_Memory memory = stream->memory;
- const FT_Frame_Field sfnt_header_fields[] = {
- FT_FRAME_START(8),
- FT_FRAME_USHORT( SFNT_Header, num_tables ),
- FT_FRAME_USHORT( SFNT_Header, search_range ),
- FT_FRAME_USHORT( SFNT_Header, entry_selector ),
- FT_FRAME_USHORT( SFNT_Header, range_shift ),
- FT_FRAME_END };
+ const FT_Frame_Field sfnt_header_fields[] =
+ {
+ FT_FRAME_START( 8 ),
+ FT_FRAME_USHORT( SFNT_Header, num_tables ),
+ FT_FRAME_USHORT( SFNT_Header, search_range ),
+ FT_FRAME_USHORT( SFNT_Header, entry_selector ),
+ FT_FRAME_USHORT( SFNT_Header, range_shift ),
+ FT_FRAME_END
+ };
- const FT_Frame_Field ttc_header_fields[] = {
- FT_FRAME_START(8), /* frame of 8 bytes */
- FT_FRAME_LONG( TTC_Header, version ),
- FT_FRAME_LONG( TTC_Header, DirCount ),
- FT_FRAME_END };
+ const FT_Frame_Field ttc_header_fields[] =
+ {
+ FT_FRAME_START( 8 ),
+ FT_FRAME_LONG( TTC_Header, version ),
+ FT_FRAME_LONG( TTC_Header, DirCount ),
+ FT_FRAME_END };
- FT_TRACE2(( "TT_Load_SFNT_Header(%08p, %ld )\n",
+
+ FT_TRACE2(( "TT_Load_SFNT_Header: %08p, %ld\n",
face, face_index ));
face->ttc_header.Tag = 0;
@@ -173,25 +188,25 @@
face->num_tables = 0;
- /* first of all, read the first 4 bytes. If it's `ttcf', then the */
+ /* first of all, read the first 4 bytes. If it's `ttcf', then the */
/* file is a TrueType collection, otherwise it can be any other */
- /* kind of font.. */
- if ( READ_ULong(format_tag) ) goto Exit;
+ /* kind of font. */
+ if ( READ_ULong( format_tag ) )
+ goto Exit;
if ( format_tag == TTAG_ttcf )
{
TT_Int n;
- FT_TRACE4(( "TT_Load_SFNT_Header: file is a collection\n" ));
+
+ FT_TRACE3(( "TT_Load_SFNT_Header: file is a collection\n" ));
/* it's a TrueType collection, i.e. a file containing several */
- /* font files. Read the font directory now */
- /* */
+ /* font files. Read the font directory now */
if ( READ_Fields( ttc_header_fields, &face->ttc_header ) )
goto Exit;
- /* now read the offsets of each font in the file */
- /* */
+ /* now read the offsets of each font in the file */
if ( ALLOC_ARRAY( face->ttc_header.TableDirectory,
face->ttc_header.DirCount,
TT_ULong ) ||
@@ -204,7 +219,7 @@
FORGET_Frame();
/* check face index */
- if (face_index >= face->ttc_header.DirCount)
+ if ( face_index >= face->ttc_header.DirCount )
{
error = TT_Err_Bad_Argument;
goto Exit;
@@ -221,19 +236,20 @@
if ( READ_Fields( sfnt_header_fields, sfnt ) )
goto Exit;
- /* now, check the values of "num_tables", "seach_range", etc.. */
+ /* now, check the values of `num_tables', `seach_range', etc. */
{
TT_UInt num_tables = sfnt->num_tables;
TT_ULong entry_selector = 1L << sfnt->entry_selector;
- /* IMPORTANT: Many fonts have an incorrect "search_range" value, so */
- /* we only check the "entry_selector" correctness here.. */
- /* */
- if ( num_tables == 0 ||
- entry_selector > num_tables ||
- entry_selector*2 <= num_tables )
+
+ /* IMPORTANT: Many fonts have an incorrect `search_range' value, so */
+ /* we only check the `entry_selector' correctness here. */
+ /* */
+ if ( num_tables == 0 ||
+ entry_selector > num_tables ||
+ entry_selector * 2 <= num_tables )
{
- FT_TRACE2(( "TT_Load_SFNT_Header: file is not SFNT !\n" ));
+ FT_TRACE2(( "TT_Load_SFNT_Header: file is not SFNT!\n" ));
error = FT_Err_Unknown_File_Format;
}
}
@@ -243,7 +259,6 @@
}
-
/*************************************************************************/
/* */
/* <Function> */
@@ -252,16 +267,18 @@
/* <Description> */
/* Loads the table directory into a face object. */
/* */
+ /* <InOut> */
+ /* face :: A handle to the target face object. */
+ /* */
/* <Input> */
- /* face :: A handle to the target face object. */
- /* stream :: The input stream. */
- /* sfnt :: sfnt directory header */
+ /* stream :: The input stream. */
+ /* sfnt :: The SFNT directory header. */
/* */
/* <Return> */
/* TrueType error code. 0 means success. */
/* */
/* <Note> */
- /* The stream cursor must be at the font file's origin */
+ /* The stream cursor must be at the font file's origin. */
/* */
LOCAL_FUNC
TT_Error TT_Load_Directory( TT_Face face,
@@ -273,11 +290,11 @@
TT_Table *entry, *limit;
- FT_TRACE2(( "TT_Load_Directory( %08p )\n",
- face ));
- FT_TRACE2(( "-- Tables count : %12u\n", sfnt->num_tables ));
- FT_TRACE2(( "-- Format version : %08lx\n", sfnt->format_tag ));
+ FT_TRACE2(( "TT_Load_Directory: %08p\n", face ));
+
+ FT_TRACE2(( "-- Tables count: %12u\n", sfnt->num_tables ));
+ FT_TRACE2(( "-- Format version: %08lx\n", sfnt->format_tag ));
face->num_tables = sfnt->num_tables;
@@ -300,12 +317,12 @@
entry->Length = GET_Long();
FT_TRACE2(( " %c%c%c%c - %08lx - %08lx\n",
- (TT_Char)(entry->Tag >> 24),
- (TT_Char)(entry->Tag >> 16),
- (TT_Char)(entry->Tag >> 8 ),
- (TT_Char)(entry->Tag),
- entry->Offset,
- entry->Length ));
+ (TT_Char)( entry->Tag >> 24 ),
+ (TT_Char)( entry->Tag >> 16 ),
+ (TT_Char)( entry->Tag >> 8 ),
+ (TT_Char)( entry->Tag ),
+ entry->Offset,
+ entry->Length ));
}
FORGET_Frame();
@@ -329,7 +346,7 @@
/* <Input> */
/* face :: The face object to look for. */
/* */
- /* tag :: The tag of table to load. Use the value 0 if you want */
+ /* tag :: The tag of table to load. Use the value 0 if you want */
/* to access the whole font file, else set this parameter */
/* to a valid TrueType table tag that you can forge with */
/* the MAKE_TT_TAG macro. */
@@ -370,6 +387,7 @@
TT_Table* table;
TT_ULong size;
+
if ( tag != 0 )
{
/* look for tag in font directory */
@@ -384,14 +402,13 @@
size = table->Length;
}
else
- /* tag = 0 -- the use want to access the font file directly */
- {
+ /* tag == 0 -- the user wants to access the font file directly */
size = face->root.stream->size;
- }
if ( length && *length == 0 )
{
*length = size;
+
return TT_Err_Ok;
}
@@ -428,30 +445,33 @@
TT_Error error;
TT_Header* header;
- static const FT_Frame_Field header_fields[] = {
- FT_FRAME_START(54),
- FT_FRAME_ULONG( TT_Header, Table_Version ),
- FT_FRAME_ULONG( TT_Header, Font_Revision ),
- FT_FRAME_LONG( TT_Header, CheckSum_Adjust ),
- FT_FRAME_LONG( TT_Header, Magic_Number ),
- FT_FRAME_USHORT( TT_Header, Flags ),
- FT_FRAME_USHORT( TT_Header, Units_Per_EM ),
- FT_FRAME_LONG( TT_Header, Created[0] ),
- FT_FRAME_LONG( TT_Header, Created[1] ),
- FT_FRAME_LONG( TT_Header, Modified[0] ),
- FT_FRAME_LONG( TT_Header, Modified[1] ),
- FT_FRAME_SHORT( TT_Header, xMin ),
- FT_FRAME_SHORT( TT_Header, yMin ),
- FT_FRAME_SHORT( TT_Header, xMax ),
- FT_FRAME_SHORT( TT_Header, yMax ),
- FT_FRAME_USHORT( TT_Header, Mac_Style ),
- FT_FRAME_USHORT( TT_Header, Lowest_Rec_PPEM ),
- FT_FRAME_SHORT( TT_Header, Font_Direction ),
- FT_FRAME_SHORT( TT_Header, Index_To_Loc_Format ),
- FT_FRAME_SHORT( TT_Header, Glyph_Data_Format ),
- FT_FRAME_END };
+ static const FT_Frame_Field header_fields[] =
+ {
+ FT_FRAME_START( 54 ),
+ FT_FRAME_ULONG( TT_Header, Table_Version ),
+ FT_FRAME_ULONG( TT_Header, Font_Revision ),
+ FT_FRAME_LONG( TT_Header, CheckSum_Adjust ),
+ FT_FRAME_LONG( TT_Header, Magic_Number ),
+ FT_FRAME_USHORT( TT_Header, Flags ),
+ FT_FRAME_USHORT( TT_Header, Units_Per_EM ),
+ FT_FRAME_LONG( TT_Header, Created[0] ),
+ FT_FRAME_LONG( TT_Header, Created[1] ),
+ FT_FRAME_LONG( TT_Header, Modified[0] ),
+ FT_FRAME_LONG( TT_Header, Modified[1] ),
+ FT_FRAME_SHORT( TT_Header, xMin ),
+ FT_FRAME_SHORT( TT_Header, yMin ),
+ FT_FRAME_SHORT( TT_Header, xMax ),
+ FT_FRAME_SHORT( TT_Header, yMax ),
+ FT_FRAME_USHORT( TT_Header, Mac_Style ),
+ FT_FRAME_USHORT( TT_Header, Lowest_Rec_PPEM ),
+ FT_FRAME_SHORT( TT_Header, Font_Direction ),
+ FT_FRAME_SHORT( TT_Header, Index_To_Loc_Format ),
+ FT_FRAME_SHORT( TT_Header, Glyph_Data_Format ),
+ FT_FRAME_END
+ };
- FT_TRACE2(( "Load_TT_Header( %08p )\n", face ));
+
+ FT_TRACE2(( "Load_TT_Header: %08p\n", face ));
error = face->goto_table( face, TTAG_head, stream, 0 );
if ( error )
@@ -465,8 +485,8 @@
if ( READ_Fields( header_fields, header ) )
goto Exit;
- FT_TRACE2(( " Units per EM : %8u\n", header->Units_Per_EM ));
- FT_TRACE2(( " IndexToLoc : %8d\n", header->Index_To_Loc_Format ));
+ FT_TRACE2(( " Units per EM: %8u\n", header->Units_Per_EM ));
+ FT_TRACE2(( " IndexToLoc: %8d\n", header->Index_To_Loc_Format ));
FT_TRACE2(( "Font Header Loaded.\n" ));
Exit:
@@ -496,31 +516,35 @@
TT_Error error;
TT_MaxProfile* maxProfile = &face->max_profile;
- const FT_Frame_Field maxp_fields[] = {
- FT_FRAME_START(32),
- FT_FRAME_ULONG( TT_MaxProfile, version ),
- FT_FRAME_USHORT( TT_MaxProfile, numGlyphs ),
- FT_FRAME_USHORT( TT_MaxProfile, maxPoints ),
- FT_FRAME_USHORT( TT_MaxProfile, maxContours ),
- FT_FRAME_USHORT( TT_MaxProfile, maxCompositePoints ),
- FT_FRAME_USHORT( TT_MaxProfile, maxCompositeContours ),
- FT_FRAME_USHORT( TT_MaxProfile, maxZones ),
- FT_FRAME_USHORT( TT_MaxProfile, maxTwilightPoints ),
- FT_FRAME_USHORT( TT_MaxProfile, maxStorage ),
- FT_FRAME_USHORT( TT_MaxProfile, maxFunctionDefs ),
- FT_FRAME_USHORT( TT_MaxProfile, maxInstructionDefs ),
- FT_FRAME_USHORT( TT_MaxProfile, maxStackElements ),
- FT_FRAME_USHORT( TT_MaxProfile, maxSizeOfInstructions ),
- FT_FRAME_USHORT( TT_MaxProfile, maxComponentElements ),
- FT_FRAME_USHORT( TT_MaxProfile, maxComponentDepth ),
- FT_FRAME_END };
+ const FT_Frame_Field maxp_fields[] =
+ {
+ FT_FRAME_START( 32 ),
+ FT_FRAME_ULONG( TT_MaxProfile, version ),
+ FT_FRAME_USHORT( TT_MaxProfile, numGlyphs ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxPoints ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxContours ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxCompositePoints ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxCompositeContours ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxZones ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxTwilightPoints ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxStorage ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxFunctionDefs ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxInstructionDefs ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxStackElements ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxSizeOfInstructions ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxComponentElements ),
+ FT_FRAME_USHORT( TT_MaxProfile, maxComponentDepth ),
+ FT_FRAME_END };
- FT_TRACE2(( "Load_TT_MaxProfile( %08p )\n", face ));
+
+ FT_TRACE2(( "Load_TT_MaxProfile: %08p\n", face ));
error = face->goto_table( face, TTAG_maxp, stream, 0 );
- if (error) goto Exit;
+ if ( error )
+ goto Exit;
- if ( READ_Fields( maxp_fields, maxProfile ) ) goto Exit;
+ if ( READ_Fields( maxp_fields, maxProfile ) )
+ goto Exit;
/* XXX: an adjustment that is necessary to load certain */
/* broken fonts like `Keystrokes MT' :-( */
@@ -553,6 +577,7 @@
face->root.max_contours += 4;
FT_TRACE2(( "MAXP loaded.\n" ));
+
Exit:
return error;
}
@@ -588,8 +613,8 @@
TT_LongMetrics** longs;
TT_ShortMetrics** shorts;
- FT_TRACE2(( "TT_Load_%s_Metrics( %08p )\n",
- vertical ? "Vertical" : "Horizontal", face ));
+ FT_TRACE2(( "TT_Load_%s_Metrics: %08p\n",
+ vertical ? "Vertical" : "Horizontal", face ));
if ( vertical )
{
@@ -603,7 +628,7 @@
error = face->goto_table( face, TTAG_vmtx, stream, &table_len );
if ( error )
{
- /* Set the number_Of_VMetrics to 0! */
+ /* Set number_Of_VMetrics to 0! */
FT_TRACE2(( " no vertical header in file.\n" ));
face->vertical.number_Of_VMetrics = 0;
error = TT_Err_Ok;
@@ -617,7 +642,7 @@
else
{
error = face->goto_table( face, TTAG_hmtx, stream, &table_len );
- if (error)
+ if ( error )
{
FT_ERROR(( " no horizontal metrics in file!\n" ));
error = TT_Err_Hmtx_Table_Missing;
@@ -632,17 +657,18 @@
/* never trust derived values */
num_shorts = face->max_profile.numGlyphs - num_longs;
- num_shorts_checked = ( table_len - num_longs*4L )/2;
+ num_shorts_checked = ( table_len - num_longs * 4L ) / 2;
if ( num_shorts < 0 )
{
FT_ERROR(( "!! more metrics than glyphs!\n" ));
- error = ( vertical ? TT_Err_Invalid_Vert_Metrics
- : TT_Err_Invalid_Horiz_Metrics );
+
+ error = vertical ? TT_Err_Invalid_Vert_Metrics
+ : TT_Err_Invalid_Horiz_Metrics;
goto Exit;
}
- if ( ALLOC_ARRAY( *longs, num_longs, TT_LongMetrics ) ||
+ if ( ALLOC_ARRAY( *longs, num_longs, TT_LongMetrics ) ||
ALLOC_ARRAY( *shorts, num_shorts, TT_ShortMetrics ) )
goto Exit;
@@ -653,6 +679,7 @@
TT_LongMetrics* cur = *longs;
TT_LongMetrics* limit = cur + num_longs;
+
for ( ; cur < limit; cur++ )
{
cur->advance = GET_UShort();
@@ -660,20 +687,22 @@
}
}
- /* do we have an inconsistent number of metric values ? */
+ /* do we have an inconsistent number of metric values? */
{
TT_ShortMetrics* cur = *shorts;
TT_ShortMetrics* limit = cur + MIN( num_shorts, num_shorts_checked );
+
for ( ; cur < limit; cur++ )
*cur = GET_Short();
- /* we fill up the missing left side bearings with the */
- /* last valid value. Since this will occur for buggy CJK */
- /* fonts usually, nothing serious will happen */
+ /* we fill up the missing left side bearings with the */
+ /* last valid value. Since this will occur for buggy CJK */
+ /* fonts usually only, nothing serious will happen */
if ( num_shorts > num_shorts_checked && num_shorts_checked > 0 )
{
- TT_Short val = *(shorts)[num_shorts_checked-1];
+ TT_Short val = *(shorts)[num_shorts_checked - 1];
+
limit = *shorts + num_shorts;
for ( ; cur < limit; cur++ )
@@ -714,26 +743,29 @@
TT_Error error;
TT_HoriHeader* header;
- const FT_Frame_Field metrics_header_fields[] = {
- FT_FRAME_START(36),
- FT_FRAME_ULONG( TT_HoriHeader, Version ),
- FT_FRAME_SHORT( TT_HoriHeader, Ascender ),
- FT_FRAME_SHORT( TT_HoriHeader, Descender ),
- FT_FRAME_SHORT( TT_HoriHeader, Line_Gap ),
- FT_FRAME_USHORT( TT_HoriHeader, advance_Width_Max ),
- FT_FRAME_SHORT( TT_HoriHeader, min_Left_Side_Bearing ),
- FT_FRAME_SHORT( TT_HoriHeader, min_Right_Side_Bearing ),
- FT_FRAME_SHORT( TT_HoriHeader, xMax_Extent ),
- FT_FRAME_SHORT( TT_HoriHeader, caret_Slope_Rise ),
- FT_FRAME_SHORT( TT_HoriHeader, caret_Slope_Run ),
- FT_FRAME_SHORT( TT_HoriHeader, Reserved[0] ),
- FT_FRAME_SHORT( TT_HoriHeader, Reserved[1] ),
- FT_FRAME_SHORT( TT_HoriHeader, Reserved[2] ),
- FT_FRAME_SHORT( TT_HoriHeader, Reserved[3] ),
- FT_FRAME_SHORT( TT_HoriHeader, Reserved[4] ),
- FT_FRAME_SHORT( TT_HoriHeader, metric_Data_Format ),
- FT_FRAME_USHORT( TT_HoriHeader, number_Of_HMetrics ),
- FT_FRAME_END };
+ const FT_Frame_Field metrics_header_fields[] =
+ {
+ FT_FRAME_START( 36 ),
+ FT_FRAME_ULONG( TT_HoriHeader, Version ),
+ FT_FRAME_SHORT( TT_HoriHeader, Ascender ),
+ FT_FRAME_SHORT( TT_HoriHeader, Descender ),
+ FT_FRAME_SHORT( TT_HoriHeader, Line_Gap ),
+ FT_FRAME_USHORT( TT_HoriHeader, advance_Width_Max ),
+ FT_FRAME_SHORT( TT_HoriHeader, min_Left_Side_Bearing ),
+ FT_FRAME_SHORT( TT_HoriHeader, min_Right_Side_Bearing ),
+ FT_FRAME_SHORT( TT_HoriHeader, xMax_Extent ),
+ FT_FRAME_SHORT( TT_HoriHeader, caret_Slope_Rise ),
+ FT_FRAME_SHORT( TT_HoriHeader, caret_Slope_Run ),
+ FT_FRAME_SHORT( TT_HoriHeader, Reserved[0] ),
+ FT_FRAME_SHORT( TT_HoriHeader, Reserved[1] ),
+ FT_FRAME_SHORT( TT_HoriHeader, Reserved[2] ),
+ FT_FRAME_SHORT( TT_HoriHeader, Reserved[3] ),
+ FT_FRAME_SHORT( TT_HoriHeader, Reserved[4] ),
+ FT_FRAME_SHORT( TT_HoriHeader, metric_Data_Format ),
+ FT_FRAME_USHORT( TT_HoriHeader, number_Of_HMetrics ),
+ FT_FRAME_END
+ };
+
FT_TRACE2(( vertical ? "Vertical header " : "Horizontal header " ));
@@ -744,7 +776,7 @@
/* The vertical header table is optional, so return quietly if */
/* we don't find it. */
error = face->goto_table( face, TTAG_vhea, stream, 0 );
- if (error)
+ if ( error )
{
error = TT_Err_Ok;
goto Exit;
@@ -758,7 +790,7 @@
/* The horizontal header is mandatory, return an error if we */
/* don't find it. */
error = face->goto_table( face, TTAG_hhea, stream, 0 );
- if (error)
+ if ( error )
{
error = TT_Err_Horiz_Header_Missing;
goto Exit;
@@ -767,7 +799,8 @@
header = &face->horizontal;
}
- if ( READ_Fields( metrics_header_fields, header ) ) goto Exit;
+ if ( READ_Fields( metrics_header_fields, header ) )
+ goto Exit;
header->long_metrics = NULL;
header->short_metrics = NULL;
@@ -777,6 +810,7 @@
/* Now try to load the corresponding metrics */
error = TT_Load_Metrics( face, stream, vertical );
+
Exit:
return error;
}
@@ -798,7 +832,8 @@
/* TrueType error code. 0 means success. */
/* */
LOCAL_FUNC
- TT_Error TT_Load_Names( TT_Face face, FT_Stream stream )
+ TT_Error TT_Load_Names( TT_Face face,
+ FT_Stream stream )
{
TT_Error error;
FT_Memory memory = stream->memory;
@@ -808,27 +843,32 @@
TT_NameTable* names;
- const FT_Frame_Field name_table_fields[] = {
- FT_FRAME_START(6),
- FT_FRAME_USHORT( TT_NameTable, format ),
- FT_FRAME_USHORT( TT_NameTable, numNameRecords ),
- FT_FRAME_USHORT( TT_NameTable, storageOffset ),
- FT_FRAME_END };
+ const FT_Frame_Field name_table_fields[] =
+ {
+ FT_FRAME_START( 6 ),
+ FT_FRAME_USHORT( TT_NameTable, format ),
+ FT_FRAME_USHORT( TT_NameTable, numNameRecords ),
+ FT_FRAME_USHORT( TT_NameTable, storageOffset ),
+ FT_FRAME_END
+ };
- const FT_Frame_Field name_record_fields[] = {
- FT_FRAME_USHORT( TT_NameRec, platformID ),
- FT_FRAME_USHORT( TT_NameRec, encodingID ),
- FT_FRAME_USHORT( TT_NameRec, languageID ),
- FT_FRAME_USHORT( TT_NameRec, nameID ),
- FT_FRAME_USHORT( TT_NameRec, stringLength ),
- FT_FRAME_USHORT( TT_NameRec, stringOffset ),
- FT_FRAME_END };
+ const FT_Frame_Field name_record_fields[] =
+ {
+ /* no FT_FRAME_START */
+ FT_FRAME_USHORT( TT_NameRec, platformID ),
+ FT_FRAME_USHORT( TT_NameRec, encodingID ),
+ FT_FRAME_USHORT( TT_NameRec, languageID ),
+ FT_FRAME_USHORT( TT_NameRec, nameID ),
+ FT_FRAME_USHORT( TT_NameRec, stringLength ),
+ FT_FRAME_USHORT( TT_NameRec, stringOffset ),
+ FT_FRAME_END
+ };
FT_TRACE2(( "Names " ));
error = face->goto_table( face, TTAG_name, stream, &table_len );
- if (error)
+ if ( error )
{
/* The name table is required so indicate failure. */
FT_TRACE2(( "is missing!\n" ));
@@ -840,7 +880,8 @@
names = &face->name_table;
- if ( READ_Fields( name_table_fields, names ) ) goto Exit;
+ if ( READ_Fields( name_table_fields, names ) )
+ goto Exit;
/* Allocate the array of name records. */
if ( ALLOC_ARRAY( names->names,
@@ -852,8 +893,9 @@
/* Load the name records and determine how much storage is needed */
/* to hold the strings themselves. */
{
- TT_NameRec* cur = names->names;
- TT_NameRec* limit = cur + names->numNameRecords;
+ TT_NameRec* cur = names->names;
+ TT_NameRec* limit = cur + names->numNameRecords;
+
storageSize = 0;
@@ -861,19 +903,21 @@
{
TT_ULong upper;
+
(void)READ_Fields( name_record_fields, cur );
- upper = (TT_ULong)(cur->stringOffset + cur->stringLength);
- if ( upper > storageSize ) storageSize = upper;
+ upper = (TT_ULong)( cur->stringOffset + cur->stringLength );
+ if ( upper > storageSize )
+ storageSize = upper;
}
}
FORGET_Frame();
- if (storageSize > 0)
+ if ( storageSize > 0 )
{
/* allocate the name storage area in memory, then read it */
- if ( ALLOC( names->storage, storageSize ) ||
+ if ( ALLOC( names->storage, storageSize ) ||
FILE_Read_At( table_pos + names->storageOffset,
(void*)names->storage, storageSize ) )
goto Exit;
@@ -883,21 +927,25 @@
TT_NameRec* cur = names->names;
TT_NameRec* limit = cur + names->numNameRecords;
+
for ( ; cur < limit; cur++ )
cur->string = names->storage + cur->stringOffset;
}
#ifdef FT_DEBUG_LEVEL_TRACE
+
/* Print Name Record Table in case of debugging */
{
TT_NameRec* cur = names->names;
TT_NameRec* limit = cur + names->numNameRecords;
+
for ( ; cur < limit; cur++ )
{
TT_UInt j;
- FT_TRACE2(( "%d %d %x %d ",
+
+ FT_TRACE3(( "%d %d %x %d\n ",
cur->platformID,
cur->encodingID,
cur->languageID,
@@ -910,13 +958,16 @@
{
TT_Char c = *(cur->string + j);
+
if ( (TT_Byte)c < 128 )
- FT_TRACE2(( "%c", c ));
+ FT_TRACE3(( "%c", c ));
}
}
}
- FT_TRACE2(( "\n" ));
-#endif
+ FT_TRACE3(( "\n" ));
+
+#endif /* FT_DEBUG_LEVEL_TRACE */
+
}
FT_TRACE2(( "loaded\n" ));
@@ -965,8 +1016,8 @@
/* loaded on demand in the `ttcmap.c' module. */
/* */
/* <Input> */
- /* face :: A handle to the target face object. */
- /* stream :: A handle to the input stream. */
+ /* face :: A handle to the target face object. */
+ /* stream :: A handle to the input stream. */
/* */
/* <Return> */
/* TrueType error code. 0 means success. */
@@ -980,23 +1031,28 @@
TT_Long table_start;
TT_CMapDir cmap_dir;
- const FT_Frame_Field cmap_fields[] = {
- FT_FRAME_START(4),
- FT_FRAME_USHORT( TT_CMapDir, tableVersionNumber ),
- FT_FRAME_USHORT( TT_CMapDir, numCMaps ),
- FT_FRAME_END };
+ const FT_Frame_Field cmap_fields[] =
+ {
+ FT_FRAME_START( 4 ),
+ FT_FRAME_USHORT( TT_CMapDir, tableVersionNumber ),
+ FT_FRAME_USHORT( TT_CMapDir, numCMaps ),
+ FT_FRAME_END
+ };
- const FT_Frame_Field cmap_rec_fields[] = {
- FT_FRAME_START(6),
- FT_FRAME_USHORT( TT_CMapTable, format ),
- FT_FRAME_USHORT( TT_CMapTable, length ),
- FT_FRAME_USHORT( TT_CMapTable, version ),
- FT_FRAME_END };
+ const FT_Frame_Field cmap_rec_fields[] =
+ {
+ FT_FRAME_START( 6 ),
+ FT_FRAME_USHORT( TT_CMapTable, format ),
+ FT_FRAME_USHORT( TT_CMapTable, length ),
+ FT_FRAME_USHORT( TT_CMapTable, version ),
+ FT_FRAME_END
+ };
+
FT_TRACE2(( "CMaps " ));
error = face->goto_table( face, TTAG_cmap, stream, 0 );
- if (error)
+ if ( error )
{
error = TT_Err_CMap_Table_Missing;
goto Exit;
@@ -1004,7 +1060,8 @@
table_start = FILE_Pos();
- if ( READ_Fields( cmap_fields, &cmap_dir ) ) goto Exit;
+ if ( READ_Fields( cmap_fields, &cmap_dir ) )
+ goto Exit;
/* save space in face table for cmap tables */
if ( ALLOC_ARRAY( face->charmaps,
@@ -1017,12 +1074,16 @@
TT_CharMap charmap = face->charmaps;
TT_CharMap limit = charmap + face->num_charmaps;
+
/* read the header of each charmap first */
- if ( ACCESS_Frame( face->num_charmaps*8L ) ) goto Exit;
+ if ( ACCESS_Frame( face->num_charmaps * 8L ) )
+ goto Exit;
+
for ( ; charmap < limit; charmap++ )
{
TT_CMapTable* cmap;
+
charmap->root.face = (FT_Face)face;
cmap = &charmap->cmap;
@@ -1031,6 +1092,7 @@
cmap->platformEncodingID = GET_UShort();
cmap->offset = (TT_ULong)GET_Long();
}
+
FORGET_Frame();
/* now read the rest of each table */
@@ -1038,6 +1100,7 @@
{
TT_CMapTable* cmap = &charmap->cmap;
+
if ( FILE_Seek( table_start + (TT_Long)cmap->offset ) ||
READ_Fields( cmap_rec_fields, cmap ) )
goto Exit;
@@ -1047,6 +1110,7 @@
}
FT_TRACE2(( "loaded\n" ));
+
Exit:
return error;
}
@@ -1074,67 +1138,74 @@
TT_Error error;
TT_OS2* os2;
- const FT_Frame_Field os2_fields[] = {
- FT_FRAME_START(78),
- FT_FRAME_USHORT( TT_OS2, version ),
- FT_FRAME_SHORT( TT_OS2, xAvgCharWidth ),
- FT_FRAME_USHORT( TT_OS2, usWeightClass ),
- FT_FRAME_USHORT( TT_OS2, usWidthClass ),
- FT_FRAME_SHORT( TT_OS2, fsType ),
- FT_FRAME_SHORT( TT_OS2, ySubscriptXSize ),
- FT_FRAME_SHORT( TT_OS2, ySubscriptYSize ),
- FT_FRAME_SHORT( TT_OS2, ySubscriptXOffset ),
- FT_FRAME_SHORT( TT_OS2, ySubscriptYOffset ),
- FT_FRAME_SHORT( TT_OS2, ySuperscriptXSize ),
- FT_FRAME_SHORT( TT_OS2, ySuperscriptYSize ),
- FT_FRAME_SHORT( TT_OS2, ySuperscriptXOffset ),
- FT_FRAME_SHORT( TT_OS2, ySuperscriptYOffset ),
- FT_FRAME_SHORT( TT_OS2, yStrikeoutSize ),
- FT_FRAME_SHORT( TT_OS2, yStrikeoutPosition ),
- FT_FRAME_SHORT( TT_OS2, sFamilyClass ),
- FT_FRAME_BYTE( TT_OS2, panose[0] ),
- FT_FRAME_BYTE( TT_OS2, panose[1] ),
- FT_FRAME_BYTE( TT_OS2, panose[2] ),
- FT_FRAME_BYTE( TT_OS2, panose[3] ),
- FT_FRAME_BYTE( TT_OS2, panose[4] ),
- FT_FRAME_BYTE( TT_OS2, panose[5] ),
- FT_FRAME_BYTE( TT_OS2, panose[6] ),
- FT_FRAME_BYTE( TT_OS2, panose[7] ),
- FT_FRAME_BYTE( TT_OS2, panose[8] ),
- FT_FRAME_BYTE( TT_OS2, panose[9] ),
- FT_FRAME_ULONG( TT_OS2, ulUnicodeRange1 ),
- FT_FRAME_ULONG( TT_OS2, ulUnicodeRange2 ),
- FT_FRAME_ULONG( TT_OS2, ulUnicodeRange3 ),
- FT_FRAME_ULONG( TT_OS2, ulUnicodeRange4 ),
- FT_FRAME_BYTE( TT_OS2, achVendID[0] ),
- FT_FRAME_BYTE( TT_OS2, achVendID[1] ),
- FT_FRAME_BYTE( TT_OS2, achVendID[2] ),
- FT_FRAME_BYTE( TT_OS2, achVendID[3] ),
+ const FT_Frame_Field os2_fields[] =
+ {
+ FT_FRAME_START( 78 ),
+ FT_FRAME_USHORT( TT_OS2, version ),
+ FT_FRAME_SHORT( TT_OS2, xAvgCharWidth ),
+ FT_FRAME_USHORT( TT_OS2, usWeightClass ),
+ FT_FRAME_USHORT( TT_OS2, usWidthClass ),
+ FT_FRAME_SHORT( TT_OS2, fsType ),
+ FT_FRAME_SHORT( TT_OS2, ySubscriptXSize ),
+ FT_FRAME_SHORT( TT_OS2, ySubscriptYSize ),
+ FT_FRAME_SHORT( TT_OS2, ySubscriptXOffset ),
+ FT_FRAME_SHORT( TT_OS2, ySubscriptYOffset ),
+ FT_FRAME_SHORT( TT_OS2, ySuperscriptXSize ),
+ FT_FRAME_SHORT( TT_OS2, ySuperscriptYSize ),
+ FT_FRAME_SHORT( TT_OS2, ySuperscriptXOffset ),
+ FT_FRAME_SHORT( TT_OS2, ySuperscriptYOffset ),
+ FT_FRAME_SHORT( TT_OS2, yStrikeoutSize ),
+ FT_FRAME_SHORT( TT_OS2, yStrikeoutPosition ),
+ FT_FRAME_SHORT( TT_OS2, sFamilyClass ),
+ FT_FRAME_BYTE( TT_OS2, panose[0] ),
+ FT_FRAME_BYTE( TT_OS2, panose[1] ),
+ FT_FRAME_BYTE( TT_OS2, panose[2] ),
+ FT_FRAME_BYTE( TT_OS2, panose[3] ),
+ FT_FRAME_BYTE( TT_OS2, panose[4] ),
+ FT_FRAME_BYTE( TT_OS2, panose[5] ),
+ FT_FRAME_BYTE( TT_OS2, panose[6] ),
+ FT_FRAME_BYTE( TT_OS2, panose[7] ),
+ FT_FRAME_BYTE( TT_OS2, panose[8] ),
+ FT_FRAME_BYTE( TT_OS2, panose[9] ),
+ FT_FRAME_ULONG( TT_OS2, ulUnicodeRange1 ),
+ FT_FRAME_ULONG( TT_OS2, ulUnicodeRange2 ),
+ FT_FRAME_ULONG( TT_OS2, ulUnicodeRange3 ),
+ FT_FRAME_ULONG( TT_OS2, ulUnicodeRange4 ),
+ FT_FRAME_BYTE( TT_OS2, achVendID[0] ),
+ FT_FRAME_BYTE( TT_OS2, achVendID[1] ),
+ FT_FRAME_BYTE( TT_OS2, achVendID[2] ),
+ FT_FRAME_BYTE( TT_OS2, achVendID[3] ),
- FT_FRAME_USHORT( TT_OS2, fsSelection ),
- FT_FRAME_USHORT( TT_OS2, usFirstCharIndex ),
- FT_FRAME_USHORT( TT_OS2, usLastCharIndex ),
- FT_FRAME_SHORT( TT_OS2, sTypoAscender ),
- FT_FRAME_SHORT( TT_OS2, sTypoDescender ),
- FT_FRAME_SHORT( TT_OS2, sTypoLineGap ),
- FT_FRAME_USHORT( TT_OS2, usWinAscent ),
- FT_FRAME_USHORT( TT_OS2, usWinDescent ),
- FT_FRAME_END };
+ FT_FRAME_USHORT( TT_OS2, fsSelection ),
+ FT_FRAME_USHORT( TT_OS2, usFirstCharIndex ),
+ FT_FRAME_USHORT( TT_OS2, usLastCharIndex ),
+ FT_FRAME_SHORT( TT_OS2, sTypoAscender ),
+ FT_FRAME_SHORT( TT_OS2, sTypoDescender ),
+ FT_FRAME_SHORT( TT_OS2, sTypoLineGap ),
+ FT_FRAME_USHORT( TT_OS2, usWinAscent ),
+ FT_FRAME_USHORT( TT_OS2, usWinDescent ),
+ FT_FRAME_END
+ };
- const FT_Frame_Field os2_fields_extra[] = {
- FT_FRAME_START(8),
- FT_FRAME_ULONG( TT_OS2, ulCodePageRange1 ),
- FT_FRAME_ULONG( TT_OS2, ulCodePageRange2 ),
- FT_FRAME_END };
+ const FT_Frame_Field os2_fields_extra[] =
+ {
+ FT_FRAME_START( 8 ),
+ FT_FRAME_ULONG( TT_OS2, ulCodePageRange1 ),
+ FT_FRAME_ULONG( TT_OS2, ulCodePageRange2 ),
+ FT_FRAME_END
+ };
- const FT_Frame_Field os2_fields_extra2[] = {
- FT_FRAME_START(10),
- FT_FRAME_SHORT( TT_OS2, sxHeight ),
- FT_FRAME_SHORT( TT_OS2, sCapHeight ),
- FT_FRAME_USHORT( TT_OS2, usDefaultChar ),
- FT_FRAME_USHORT( TT_OS2, usBreakChar ),
- FT_FRAME_USHORT( TT_OS2, usMaxContext ),
- FT_FRAME_END };
+ const FT_Frame_Field os2_fields_extra2[] =
+ {
+ FT_FRAME_START( 10 ),
+ FT_FRAME_SHORT( TT_OS2, sxHeight ),
+ FT_FRAME_SHORT( TT_OS2, sCapHeight ),
+ FT_FRAME_USHORT( TT_OS2, usDefaultChar ),
+ FT_FRAME_USHORT( TT_OS2, usBreakChar ),
+ FT_FRAME_USHORT( TT_OS2, usMaxContext ),
+ FT_FRAME_END
+ };
+
FT_TRACE2(( "OS/2 Table " ));
@@ -1142,7 +1213,7 @@
/* exist. Simply put, we set the `version' field to 0xFFFF */
/* and test this value each time we need to access the table. */
error = face->goto_table( face, TTAG_OS2, stream, 0 );
- if (error)
+ if ( error )
{
FT_TRACE2(( "is missing\n!" ));
face->os2.version = 0xFFFF;
@@ -1152,7 +1223,8 @@
os2 = &face->os2;
- if ( READ_Fields( os2_fields, os2 ) ) goto Exit;
+ if ( READ_Fields( os2_fields, os2 ) )
+ goto Exit;
os2->ulCodePageRange1 = 0;
os2->ulCodePageRange2 = 0;
@@ -1160,12 +1232,14 @@
if ( os2->version >= 0x0001 )
{
/* only version 1 tables */
- if ( READ_Fields( os2_fields_extra, os2 ) ) goto Exit;
+ if ( READ_Fields( os2_fields_extra, os2 ) )
+ goto Exit;
if ( os2->version >= 0x0002 )
{
/* only version 2 tables */
- if ( READ_Fields( os2_fields_extra2, os2 ) ) goto Exit;
+ if ( READ_Fields( os2_fields_extra2, os2 ) )
+ goto Exit;
}
}
@@ -1198,26 +1272,30 @@
TT_Error error;
TT_Postscript* post = &face->postscript;
- static const FT_Frame_Field post_fields[] = {
- FT_FRAME_START(32),
- FT_FRAME_ULONG( TT_Postscript, FormatType ),
- FT_FRAME_ULONG( TT_Postscript, italicAngle ),
- FT_FRAME_SHORT( TT_Postscript, underlinePosition ),
- FT_FRAME_SHORT( TT_Postscript, underlineThickness ),
- FT_FRAME_ULONG( TT_Postscript, isFixedPitch ),
- FT_FRAME_ULONG( TT_Postscript, minMemType42 ),
- FT_FRAME_ULONG( TT_Postscript, maxMemType42 ),
- FT_FRAME_ULONG( TT_Postscript, minMemType1 ),
- FT_FRAME_ULONG( TT_Postscript, maxMemType1 ),
- FT_FRAME_END };
+ static const FT_Frame_Field post_fields[] =
+ {
+ FT_FRAME_START( 32 ),
+ FT_FRAME_ULONG( TT_Postscript, FormatType ),
+ FT_FRAME_ULONG( TT_Postscript, italicAngle ),
+ FT_FRAME_SHORT( TT_Postscript, underlinePosition ),
+ FT_FRAME_SHORT( TT_Postscript, underlineThickness ),
+ FT_FRAME_ULONG( TT_Postscript, isFixedPitch ),
+ FT_FRAME_ULONG( TT_Postscript, minMemType42 ),
+ FT_FRAME_ULONG( TT_Postscript, maxMemType42 ),
+ FT_FRAME_ULONG( TT_Postscript, minMemType1 ),
+ FT_FRAME_ULONG( TT_Postscript, maxMemType1 ),
+ FT_FRAME_END
+ };
+
FT_TRACE2(( "PostScript " ));
error = face->goto_table( face, TTAG_post, stream, 0 );
- if (error)
+ if ( error )
return TT_Err_Post_Table_Missing;
- if ( READ_Fields( post_fields, post ) ) return error;
+ if ( READ_Fields( post_fields, post ) )
+ return error;
/* we don't load the glyph names, we do that in another */
/* module (ttpost). */
@@ -1246,50 +1324,57 @@
TT_Error TT_Load_PCLT( TT_Face face,
FT_Stream stream )
{
- static const FT_Frame_Field pclt_fields[] = {
- FT_FRAME_START( 20 ),
- FT_FRAME_ULONG ( TT_PCLT, Version ),
- FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
- FT_FRAME_USHORT( TT_PCLT, Pitch ),
- FT_FRAME_USHORT( TT_PCLT, xHeight ),
- FT_FRAME_USHORT( TT_PCLT, Style ),
- FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
- FT_FRAME_USHORT( TT_PCLT, CapHeight ),
- FT_FRAME_END };
+ static const FT_Frame_Field pclt_fields[] =
+ {
+ FT_FRAME_START( 20 ),
+ FT_FRAME_ULONG ( TT_PCLT, Version ),
+ FT_FRAME_ULONG ( TT_PCLT, FontNumber ),
+ FT_FRAME_USHORT( TT_PCLT, Pitch ),
+ FT_FRAME_USHORT( TT_PCLT, xHeight ),
+ FT_FRAME_USHORT( TT_PCLT, Style ),
+ FT_FRAME_USHORT( TT_PCLT, TypeFamily ),
+ FT_FRAME_USHORT( TT_PCLT, CapHeight ),
+ FT_FRAME_END
+ };
- static const FT_Frame_Field pclt_fields2[] = {
- FT_FRAME_START( 4 ),
- FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
- FT_FRAME_CHAR( TT_PCLT, WidthType ),
- FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
- FT_FRAME_BYTE( TT_PCLT, Reserved ),
- FT_FRAME_END };
+ static const FT_Frame_Field pclt_fields2[] =
+ {
+ FT_FRAME_START( 4 ),
+ FT_FRAME_CHAR( TT_PCLT, StrokeWeight ),
+ FT_FRAME_CHAR( TT_PCLT, WidthType ),
+ FT_FRAME_BYTE( TT_PCLT, SerifStyle ),
+ FT_FRAME_BYTE( TT_PCLT, Reserved ),
+ FT_FRAME_END
+ };
- TT_Error error;
- TT_PCLT* pclt = &face->pclt;
-
+ TT_Error error;
+ TT_PCLT* pclt = &face->pclt;
+
+
FT_TRACE2(( "PCLT " ));
- /* optional table */
- error = face->goto_table( face, TTAG_PCLT, stream, 0 );
- if (error)
- {
- FT_TRACE2(( "missing (optional)\n" ));
- pclt->Version = 0;
- return 0;
- }
-
- if ( READ_Fields( pclt_fields, pclt ) ||
- FILE_Read ( pclt->TypeFace, 16 ) ||
- FILE_Read ( pclt->CharacterComplement, 8 ) ||
- FILE_Read ( pclt->FileName, 6 ) ||
- READ_Fields( pclt_fields2, pclt ) )
+ /* optional table */
+ error = face->goto_table( face, TTAG_PCLT, stream, 0 );
+ if ( error )
+ {
+ FT_TRACE2(( "missing (optional)\n" ));
+ pclt->Version = 0;
+ return TT_Err_Ok;
+ }
+
+ if ( READ_Fields( pclt_fields, pclt ) ||
+ FILE_Read ( pclt->TypeFace, 16 ) ||
+ FILE_Read ( pclt->CharacterComplement, 8 ) ||
+ FILE_Read ( pclt->FileName, 6 ) ||
+ READ_Fields( pclt_fields2, pclt ) )
goto Exit;
-
- FT_TRACE2(( "loaded\n" ));
- Exit:
- return error;
- }
+
+ FT_TRACE2(( "loaded\n" ));
+
+ Exit:
+ return error;
+ }
+
/*************************************************************************/
/* */
@@ -1317,11 +1402,12 @@
TT_GaspRange* gaspranges;
- FT_TRACE2(( "TT_Load_Gasp( %08p )\n", face ));
+ FT_TRACE2(( "TT_Load_Gasp: %08p\n", face ));
/* the gasp table is optional */
error = face->goto_table( face, TTAG_gasp, stream, 0 );
- if (error) return TT_Err_Ok;
+ if ( error )
+ return TT_Err_Ok;
if ( ACCESS_Frame( 4L ) )
goto Exit;
@@ -1335,7 +1421,7 @@
FT_TRACE3(( "number of ranges = %d\n", num_ranges ));
if ( ALLOC_ARRAY( gaspranges, num_ranges, TT_GaspRange ) ||
- ACCESS_Frame( num_ranges * 4L ) )
+ ACCESS_Frame( num_ranges * 4L ) )
goto Exit;
face->gasp.gaspRanges = gaspranges;
@@ -1346,8 +1432,8 @@
gaspranges[j].gaspFlag = GET_UShort();
FT_TRACE3(( " [max:%d flag:%d]",
- gaspranges[j].maxPPEM,
- gaspranges[j].gaspFlag ));
+ gaspranges[j].maxPPEM,
+ gaspranges[j].gaspFlag ));
}
FT_TRACE3(( "\n" ));
@@ -1386,11 +1472,14 @@
TT_UInt n, num_tables, version;
- /* the kern table is optional. exit silently if it's missing */
- error = face->goto_table( face, TTAG_kern, stream, 0 );
- if ( error ) return TT_Err_Ok;
- if ( ACCESS_Frame( 4L ) ) goto Exit;
+ /* the kern table is optional. exit silently if it is missing */
+ error = face->goto_table( face, TTAG_kern, stream, 0 );
+ if ( error )
+ return TT_Err_Ok;
+
+ if ( ACCESS_Frame( 4L ) )
+ goto Exit;
version = GET_UShort();
num_tables = GET_UShort();
@@ -1402,7 +1491,9 @@
TT_UInt coverage;
TT_UInt length;
- if ( ACCESS_Frame( 6L ) ) goto Exit;
+
+ if ( ACCESS_Frame( 6L ) )
+ goto Exit;
version = GET_UShort(); /* version */
length = GET_UShort() - 6; /* substract header length */
@@ -1416,11 +1507,13 @@
TT_Kern_0_Pair* pair;
TT_Kern_0_Pair* limit;
- /* found a horizontal format 0 kerning table ! */
- if ( ACCESS_Frame(8L) )
+
+ /* found a horizontal format 0 kerning table! */
+ if ( ACCESS_Frame( 8L ) )
goto Exit;
num_pairs = GET_UShort();
+
/* skip the rest */
FORGET_Frame();
@@ -1482,9 +1575,10 @@
TT_Error error;
FT_Memory memory = stream->memory;
- TT_Hdmx* hdmx = &face->hdmx;
- TT_Long num_glyphs;
- TT_Long record_size;
+ TT_Hdmx* hdmx = &face->hdmx;
+ TT_Long num_glyphs;
+ TT_Long record_size;
+
hdmx->version = 0;
hdmx->num_records = 0;
@@ -1492,9 +1586,11 @@
/* this table is optional */
error = face->goto_table( face, TTAG_hdmx, stream, 0 );
- if (error) return TT_Err_Ok;
+ if ( error )
+ return TT_Err_Ok;
- if ( ACCESS_Frame( 8L ) ) goto Exit;
+ if ( ACCESS_Frame( 8L ) )
+ goto Exit;
hdmx->version = GET_UShort();
hdmx->num_records = GET_Short();
@@ -1516,6 +1612,7 @@
TT_HdmxRec* cur = hdmx->records;
TT_HdmxRec* limit = cur + hdmx->num_records;
+
for ( ; cur < limit; cur++ )
{
/* read record */
@@ -1523,12 +1620,12 @@
READ_Byte( cur->max_width ) )
goto Exit;
- if ( ALLOC( cur->widths, num_glyphs ) ||
+ if ( ALLOC( cur->widths, num_glyphs ) ||
FILE_Read( cur->widths, num_glyphs ) )
goto Exit;
/* skip padding bytes */
- if ( record_size > 0 && FILE_Skip(record_size) )
+ if ( record_size > 0 && FILE_Skip( record_size ) )
goto Exit;
}
}
@@ -1557,6 +1654,7 @@
TT_Int n;
FT_Memory memory = face->root.driver->memory;
+
for ( n = 0; n < face->hdmx.num_records; n++ )
FREE( face->hdmx.records[n].widths );
diff --git a/src/sfnt/ttload.h b/src/sfnt/ttload.h
index 37efb41..02bf369 100644
--- a/src/sfnt/ttload.h
+++ b/src/sfnt/ttload.h
@@ -5,11 +5,11 @@
/* Load the basic TrueType tables, i.e., tables that can be either in */
/* TTF or OTF font (specification). */
/* */
-/* Copyright 1996-1999 by */
+/* Copyright 1996-2000 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 */
+/* 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. */
@@ -23,9 +23,10 @@
#include <freetype/internal/ftstream.h>
#include <freetype/internal/tttypes.h>
-/*
+
+#if 0
#include <ttobjs.h>
-*/
+#endif
#ifdef __cplusplus
extern "C" {
@@ -37,17 +38,17 @@
TT_ULong tag );
LOCAL_DEF
- TT_Error TT_Goto_Table( TT_Face face,
- TT_ULong tag,
- FT_Stream stream,
- TT_ULong *length );
+ TT_Error TT_Goto_Table( TT_Face face,
+ TT_ULong tag,
+ FT_Stream stream,
+ TT_ULong* length );
LOCAL_DEF
- TT_Error TT_Load_SFNT_Header( TT_Face face,
- FT_Stream stream,
- TT_Long face_index,
- SFNT_Header* sfnt );
+ TT_Error TT_Load_SFNT_Header( TT_Face face,
+ FT_Stream stream,
+ TT_Long face_index,
+ SFNT_Header* sfnt );
LOCAL_DEF
TT_Error TT_Load_Directory( TT_Face face,
FT_Stream stream,