ref: 8c90c22dbe0b89970f0fb878117c3c2a5e2e214c
parent: 5a2f39e8ed1708c9a75b1462e4a037751bd95d8a
author: Werner Lemberg <[email protected]>
date: Sat Jun 8 02:47:18 EDT 2002
* src/cache/ftccache.c (ftc_node_hash_unlink, ftc_node_hash_link) [FTC_CACHE_USE_LINEAR_HASHING]: Fix returned error code. Fix debugging messages. * src/type42/t42error.h: New file. * src/type42/t42drivr.c, src/type42/t42objs.c, src/type42/t42parse.c: Use t42 error codes. * src/type42/rules.mk: Updated. * src/base/ftnames.c: Include FT_INTERNAL_STREAM_H. Formatting, adding copyright messages.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,27 +1,113 @@
+2002-06-08 Werner Lemberg <[email protected]>
+
+ * src/cache/ftccache.c (ftc_node_hash_unlink, ftc_node_hash_link)
+ [FTC_CACHE_USE_LINEAR_HASHING]: Fix returned error code.
+ Fix debugging messages.
+
+ * src/type42/t42error.h: New file.
+ * src/type42/t42drivr.c, src/type42/t42objs.c,
+ src/type42/t42parse.c: Use t42 error codes.
+ * src/type42/rules.mk: Updated.
+
+ * src/base/ftnames.c: Include FT_INTERNAL_STREAM_H.
+
+2002-06-08 David Turner <[email protected]>
+
+ * src/cache/ftccmap.c: GEN_CACHE_FAMILY_COMPARE,
+ GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
+ New macros.
+ (ftc_cmap_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
+ ftc_cache_lookup.
+ (FTC_CMapCache_Lookup): Updated.
+
2002-06-07 Graham Asher <[email protected]>
- * include/freetype/cache/ftccache.h, src/cache/ftccache.c,
- src/cache/ftccache.i, src/cache/ftcsbits.c: adding various
- experimental optimisations to the cache manager
+ Adding various experimental optimizations to the cache manager.
- * src/type42/t42parse.c: removing duplicate function
+ * include/freetype/cache/ftccache.h (FTC_CACHE_USE_INLINE,
+ FTC_CACHE_USE_LINEAR_HASHING): New options.
+ (FTC_CacheRec) [FTC_CACHE_USE_LINEAR_HASHING]: New elements `p',
+ `mask', and `slack'.
- * src/base/ftobjs.c (FT_Render_Glyph_Internal): changed definition
- from FT_EXPORT_DEF to FT_BASE_DEF
+ * src/cache/ftccache.c (FTC_HASH_MAX_LOAD, FTC_HASH_MIN_LOAD,
+ FTC_HASH_SUB_LOAD) [FTC_CACHE_USE_LINEAR_HASHING,
+ FTC_HASH_INITIAL_SIZE]: New macros.
+ (ftc_node_mru_link, ftc_node_mru_up): Optimized.
+ (ftc_node_hash_unlink, ftc_node_hash_link)
+ [FTC_CACHE_USE_LINEAR_HASHING]: New variants.
+ (FTC_PRIMES_MIN, FTC_PRIMES_MAX, ftc_primes, ftc_prime_closest,
+ FTC_CACHE_RESIZE_TEST, ftc_cache_resize)
+ [!FTC_CACHE_USE_LINEAR_HASHING]: Define it conditionally.
+ (ftc_cache_init, ftc_cache_clear) [FTC_CACHE_USE_LINEAR_HASHING]:
+ Updated.
+ (ftc_cache_lookup) [FTC_CACHE_USE_LINEAR_HASHING]: Implement it.
-2002-06-07 David Turner <[email protected]>
+ * src/cache/ftccache.i: New file.
- * src/type42/t42drivr.c, src/type42/t42drivr.h, src/type42/t42parse.c,
- src/type42/t42parse.h, src/type42/t42objs.h, src/type42/t42objs.c,
- src/type42/type42.c:
+ * src/cache/ftcsbits.c (GEN_CACHE_FAMILY_COMPARE,
+ GEN_CACHE_NODE_COMPARE, GEN_CACHE_LOOKUP) [FTC_CACHE_USE_INLINE]:
+ New macros.
+ (ftc_sbit_cache_lookup) [!FTC_CACHE_USE_INLINE]: Typedef to
+ ftc_cache_lookup.
+ (FTC_SBitCache_Lookup): Updated.
- updated the Type42 driver by splitting it into several files since
- it makes the code easier to read and maintain. Also fixed the bug
- that prevented the correct display of fonts with "ftview"
+ * src/type42/t42parse.c: Removing duplicate function.
+ * src/base/ftobjs.c (FT_Render_Glyph_Internal): Changed definition
+ from FT_EXPORT_DEF to FT_BASE_DEF.
+
+2002-06-07 David Turner <[email protected]>
+
+ Fixed the bug that prevented the correct display of fonts with
+ "ftview".
+
+ * src/type42/t42drivr.c: Split into...
+ * src/type42/t42drivr.h, src/type42/t42parse.c,
+ src/type42/t42parse.h, src/type42/t42objs.h, src/type42/t42objs.c,
+ src/type42/type42.c: New files.
+
+ (t42_get_glyph_name, t42_get_ps_name, t42_get_name_index): Use
+ `face->type1'.
+
+ (Get_Interface): Renamed to...
+ (T42_Get_Interface): This.
+ Updated.
+ (T42_Open_Face, T42_Face_Done): Updated.
+ (T42_Face_Init): Add new cmap support.
+ Updated.
+ (T42_Driver_Init, T42_Driver_Done, T42_Size_Init, T42_Size_Done,
+ T42_GlyphSlot_Init, T42_GlyphSlot_Done): Updated.
+ (Get_Char_Index, Get_Next_Char): Renamed to...
+ (T42_CMap_CharIndex, T42_CMap_CharNext): This.
+ Updated.
+ (T42_Char_Size, T42_Pixel_Size): Renamed to...
+ (T42_Size_SetChars, T42_Size_SetPixels): This.
+ (T42_Load_Glyph): Renamed to...
+ (T42_GlyphSlot_Load): This.
+
+ (t42_init_loader, t42_done_loader): Renamed to...
+ (t42_loader_init, t42_loader_done): This.
+ (T42_New_Parser, T42_Finalize_Parser): Renamed to...
+ (t42_parser_init, t42_parser_done): This.
+ (parse_dict): Renamed to...
+ (t42_parse_dict): This.
+ (is_alpha, is_space, hexval): Renamed to...
+ (t42_is_alpha, t42_is_space, t42_hexval): This.
+ (parse_font_name, parse_font_bbox, parse_font_matrix,
+ parse_encoding, parse_sfnts, parse_charstrings, parse_dict):
+ Renamed to...
+ (t42_parse_font_name, t42_parse_font_bbox, t42_parse_font_matrix,
+ t42_parse_encoding, t42_parse_sfnts, t42_parse_charstrings,
+ t42_parse_dict): This.
+ Updated.
+
+ (t42_keywords): Updated.
+
+ * src/type42/Jamfile, src/type42/descrip.mms: Updated.
+
2002-06-03 Werner Lemberg <[email protected]>
- Add 8bpp support.
+ Add 8bpp support to BDF driver.
* src/bdf/bdflib.c (_bdf_parse_start): Handle 8bpp.
* src/bdf/bdfdrivr.c (BDF_Glyph_Load): Ditto.
--- a/include/freetype/cache/ftccache.h
+++ b/include/freetype/cache/ftccache.h
@@ -4,7 +4,7 @@
/* */
/* FreeType internal cache interface (specification). */
/* */
-/* Copyright 2000-2001 by */
+/* Copyright 2000-2001, 2002 by */
/* David Turner, Robert Wilhelm, and Werner Lemberg. */
/* */
/* This file is part of the FreeType project, and may only be used, */
@@ -25,6 +25,7 @@
/* define to use linear hash table */
#define FTC_CACHE_USE_LINEAR_HASHING
+
FT_BEGIN_HEADER
--- a/src/base/ftnames.c
+++ b/src/base/ftnames.c
@@ -22,6 +22,7 @@
#include <ft2build.h>
#include FT_SFNT_NAMES_H
#include FT_INTERNAL_TRUETYPE_TYPES_H
+#include FT_INTERNAL_STREAM_H
#ifdef TT_CONFIG_OPTION_SFNT_NAMES
--- a/src/cache/ftccache.c
+++ b/src/cache/ftccache.c
@@ -26,12 +26,12 @@
#ifdef FTC_CACHE_USE_LINEAR_HASHING
-#define FTC_HASH_MAX_LOAD 2
-#define FTC_HASH_MIN_LOAD 1
-#define FTC_HASH_SUB_LOAD (FTC_HASH_MAX_LOAD-FTC_HASH_MIN_LOAD)
+#define FTC_HASH_MAX_LOAD 2
+#define FTC_HASH_MIN_LOAD 1
+#define FTC_HASH_SUB_LOAD ( FTC_HASH_MAX_LOAD - FTC_HASH_MIN_LOAD )
-/* this one _must_ be a power of 2 !! */
-#define FTC_HASH_INITIAL_SIZE 8
+/* this one _must_ be a power of 2! */
+#define FTC_HASH_INITIAL_SIZE 8
#endif /* FTC_CACHE_USE_LINEAR_HASHING */
@@ -72,6 +72,7 @@
{
FTC_Node last = first->mru_prev;
+
FT_ASSERT( last->mru_next == first );
node->mru_prev = last;
@@ -102,6 +103,7 @@
FTC_Node prev = node->mru_prev;
FTC_Node next = node->mru_next;
+
FT_ASSERT( first != NULL && manager->num_nodes > 0 );
FT_ASSERT( next->mru_prev == node );
FT_ASSERT( prev->mru_next == node );
@@ -111,6 +113,7 @@
if ( node == first )
{
+ /* this is the last node in the list; update its head pointer */
if ( node == next )
manager->nodes_list = NULL;
else
@@ -137,6 +140,7 @@
FTC_Node next = node->mru_next;
FTC_Node last;
+
prev->mru_next = next;
next->mru_prev = prev;
@@ -162,9 +166,10 @@
FTC_Node *pnode;
FT_UInt index, num_buckets;
+
index = (FT_UInt)( node->hash & cache->mask );
if ( index < cache->p )
- index = (FT_UInt)( node->hash & (2*cache->mask+1) );
+ index = (FT_UInt)( node->hash & ( 2 * cache->mask + 1 ) );
pnode = cache->buckets + index;
@@ -172,8 +177,8 @@
{
if ( *pnode == NULL )
{
- FT_ERROR(( "FreeType.cache.hash_unlink: unknown node!\n" ));
- return 0;
+ FT_ERROR(( "ftc_node_hash_unlink: unknown node!\n" ));
+ return FT_Err_Ok;
}
if ( *pnode == node )
@@ -186,9 +191,9 @@
pnode = &(*pnode)->link;
}
- num_buckets = ( cache->p + cache->mask + 1) ;
+ num_buckets = ( cache->p + cache->mask + 1 );
- if ( ++ cache->slack > (FT_Long)num_buckets*FTC_HASH_SUB_LOAD )
+ if ( ++cache->slack > (FT_Long)num_buckets * FTC_HASH_SUB_LOAD )
{
FT_UInt p = cache->p;
FT_UInt mask = cache->mask;
@@ -195,6 +200,7 @@
FT_UInt old_index = p + mask;
FTC_Node* pold;
+
FT_ASSERT( old_index >= FTC_HASH_INITIAL_SIZE );
if ( p == 0 )
@@ -205,9 +211,9 @@
cache->mask >>= 1;
p = cache->mask;
- if ( FT_RENEW_ARRAY( cache->buckets, (mask+1)*2, (mask) ) )
+ if ( FT_RENEW_ARRAY( cache->buckets, ( mask + 1 ) * 2, mask ) )
{
- FT_ERROR(( "FreeType.cache.hash_unlink: couldn't shunk buckets !\n" ));
+ FT_ERROR(( "ftc_node_hash_unlink: couldn't shunk buckets!\n" ));
goto Exit;
}
}
@@ -239,6 +245,7 @@
{
FTC_Node *pnode = cache->buckets + ( node->hash % cache->size );
+
for (;;)
{
if ( *pnode == NULL )
@@ -274,9 +281,10 @@
FT_UInt index;
FT_Error error = 0;
+
index = (FT_UInt)( node->hash & cache->mask );
if ( index < cache->p )
- index = (FT_UInt)( node->hash & (2*cache->mask+1) );
+ index = (FT_UInt)( node->hash & (2 * cache->mask + 1 ) );
pnode = cache->buckets + index;
@@ -289,9 +297,11 @@
FT_UInt mask = cache->mask;
FTC_Node new_list;
+
/* split a single bucket */
new_list = NULL;
pnode = cache->buckets + p;
+
for (;;)
{
node = *pnode;
@@ -298,7 +308,7 @@
if ( node == NULL )
break;
- if ( node->hash & (mask+1) )
+ if ( node->hash & ( mask + 1 ) )
{
*pnode = node->link;
node->link = new_list;
@@ -308,7 +318,7 @@
pnode = &node->link;
}
- cache->buckets[ p + mask + 1 ] = new_list;
+ cache->buckets[p + mask + 1] = new_list;
cache->slack += FTC_HASH_MAX_LOAD;
@@ -317,13 +327,14 @@
FT_Memory memory = cache->memory;
- if ( FT_RENEW_ARRAY( cache->buckets, (mask+1)*2, (mask+1)*4 ) )
+ if ( FT_RENEW_ARRAY( cache->buckets,
+ ( mask + 1 ) * 2, ( mask + 1 ) * 4 ) )
{
- FT_ERROR(( "FreeType.cache.hash_unlink: couldn't expand buckets !\n" ));
+ FT_ERROR(( "ftc_node_hash_link: couldn't expand buckets!\n" ));
goto Exit;
}
- cache->mask = 2*mask + 1;
+ cache->mask = 2 * mask + 1;
cache->p = 0;
}
else
@@ -343,6 +354,7 @@
{
FTC_Node *pnode = cache->buckets + ( node->hash % cache->size );
+
node->link = *pnode;
*pnode = node;
@@ -466,6 +478,7 @@
#ifdef FTC_CACHE_USE_LINEAR_HASHING
+ /* nothing */
#else /* !FTC_CACHE_USE_LINEAR_HASHING */
@@ -583,6 +596,7 @@
#endif /* !FTC_CACHE_USE_LINEAR_HASHING */
+
FT_EXPORT_DEF( FT_Error )
ftc_cache_init( FTC_Cache cache )
{
@@ -594,13 +608,14 @@
#ifdef FTC_CACHE_USE_LINEAR_HASHING
cache->p = 0;
- cache->mask = FTC_HASH_INITIAL_SIZE-1;
- cache->slack = FTC_HASH_INITIAL_SIZE*FTC_HASH_MAX_LOAD;
+ cache->mask = FTC_HASH_INITIAL_SIZE - 1;
+ cache->slack = FTC_HASH_INITIAL_SIZE * FTC_HASH_MAX_LOAD;
- if ( FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE*2 ) )
+ if ( FT_NEW_ARRAY( cache->buckets, FTC_HASH_INITIAL_SIZE * 2 ) )
goto Exit;
#else /* !FTC_CACHE_USE_LINEAR_HASHING */
+
cache->nodes = 0;
cache->size = FTC_PRIMES_MIN;
@@ -728,7 +743,7 @@
FTC_Query query,
FTC_Node *anode )
{
- FT_Error error = 0;
+ FT_Error error = FT_Err_Ok;
FT_LruNode lru;
@@ -740,11 +755,12 @@
query->hash = 0;
query->family = NULL;
- /* XXX: we break encapsulation for the sake of speed !! */
#if 1
+
+ /* XXX: we break encapsulation for the sake of speed! */
{
/* first of all, find the relevant family */
- FT_LruList list = cache->families;
+ FT_LruList list = cache->families;
FT_LruNode fam, *pfam;
FT_LruNode_CompareFunc compare = list->clazz->node_compare;
@@ -780,10 +796,14 @@
lru = fam;
Skip:
+ ;
}
+
#else
+
error = FT_LruList_Lookup( cache->families, query, &lru );
if ( !error )
+
#endif
{
FTC_Family family = (FTC_Family) lru;
@@ -790,17 +810,21 @@
FT_UFast hash = query->hash;
FTC_Node* bucket;
-
#ifdef FTC_CACHE_USE_LINEAR_HASHING
+
FT_UInt index;
+
index = hash & cache->mask;
if ( index < cache->p )
- index = hash & (cache->mask*2+1);
+ index = hash & ( cache->mask * 2 + 1 );
bucket = cache->buckets + index;
+
#else
+
bucket = cache->buckets + (hash % cache->size);
+
#endif
--- a/src/cache/ftccache.i
+++ b/src/cache/ftccache.i
@@ -1,11 +1,30 @@
+/***************************************************************************/
+/* */
+/* ftccache.i */
+/* */
+/* FreeType template for generic cache. */
+/* */
+/* Copyright 2002 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. */
+/* */
+/***************************************************************************/
+
+
#ifndef GEN_CACHE_FAMILY_COMPARE
-#error "GEN_CACHE_FAMILY_COMPARE not defined in template instanciation"
+#error "GEN_CACHE_FAMILY_COMPARE not defined in template instantiation"
#endif
#ifndef GEN_CACHE_NODE_COMPARE
-#error "GEN_CACHE_NODE_COMPARE not defined in template instanciation"
+#error "GEN_CACHE_NODE_COMPARE not defined in template instantiation"
#endif
+
static FT_Error
GEN_CACHE_LOOKUP( FTC_Cache cache,
FTC_Query query,
@@ -17,12 +36,13 @@
query->hash = 0;
query->family = NULL;
- /* XXX: we break encapsulation for the sake of speed !! */
+ /* XXX: we break encapsulation for the sake of speed! */
{
/* first of all, find the relevant family */
- FT_LruList list = cache->families;
- FT_LruNode fam, *pfam;
+ FT_LruList list = cache->families;
+ FT_LruNode fam, *pfam;
+
pfam = &list->nodes;
for (;;)
{
@@ -51,7 +71,7 @@
{
FTC_Family family = (FTC_Family) lru;
- FT_UFast hash = query->hash;
+ FT_UFast hash = query->hash;
FTC_Node node, *pnode, *bucket;
@@ -58,13 +78,14 @@
#ifdef FTC_CACHE_USE_LINEAR_HASHING
FT_UInt index;
+
index = hash & cache->mask;
if ( index < cache->p )
- index = hash & (cache->mask*2+1);
+ index = hash & ( cache->mask * 2 + 1 );
bucket = cache->buckets + index;
#else
- bucket = cache->buckets + (hash % cache->size);
+ bucket = cache->buckets + ( hash % cache->size );
#endif
#ifdef FT_DEBUG_LEVEL_ERROR
@@ -119,6 +140,7 @@
FTC_Node next = node->mru_next;
FTC_Node last;
+
prev->mru_next = next;
next->mru_prev = prev;
@@ -139,3 +161,6 @@
#undef GEN_CACHE_NODE_COMPARE
#undef GEN_CACHE_FAMILY_COMPARE
#undef GEN_CACHE_LOOKUP
+
+
+/* END */
--- a/src/cache/ftccmap.c
+++ b/src/cache/ftccmap.c
@@ -320,20 +320,22 @@
#ifdef FTC_CACHE_USE_INLINE
-# define GEN_CACHE_FAMILY_COMPARE(f,q,c) \
- ftc_cmap_family_compare( (FTC_CMapFamily)(f), (FTC_CMapQuery)(q) )
+#define GEN_CACHE_FAMILY_COMPARE( f, q, c ) \
+ ftc_cmap_family_compare( (FTC_CMapFamily)(f), (FTC_CMapQuery)(q) )
-# define GEN_CACHE_NODE_COMPARE(n,q,c) \
- ftc_cmap_node_compare( (FTC_CMapNode)(n), (FTC_CMapQuery)(q) )
+#define GEN_CACHE_NODE_COMPARE( n, q, c ) \
+ ftc_cmap_node_compare( (FTC_CMapNode)(n), (FTC_CMapQuery)(q) )
-# define GEN_CACHE_LOOKUP ftc_cmap_cache_lookup
-# include "ftccache.i"
+#define GEN_CACHE_LOOKUP ftc_cmap_cache_lookup
+#include "ftccache.i"
+
#else /* !FTC_CACHE_USE_INLINE */
-# define ftc_cmap_cache_lookup ftc_cache_lookup
+#define ftc_cmap_cache_lookup ftc_cache_lookup
#endif /* !FTC_CACHE_USE_INLINE */
+
/* documentation is in ftccmap.h */
--- a/src/cache/ftcsbits.c
+++ b/src/cache/ftcsbits.c
@@ -464,18 +464,18 @@
#ifdef FTC_CACHE_USE_INLINE
-# define GEN_CACHE_FAMILY_COMPARE(f,q,c) \
- ftc_sbit_family_compare( (FTC_SBitFamily)(f), (FTC_SBitQuery)(q) )
+#define GEN_CACHE_FAMILY_COMPARE( f, q, c ) \
+ ftc_sbit_family_compare( (FTC_SBitFamily)(f), (FTC_SBitQuery)(q) )
-# define GEN_CACHE_NODE_COMPARE(n,q,c) \
- ftc_sbit_node_compare( (FTC_SBitNode)(n), (FTC_SBitQuery)(q), c )
+#define GEN_CACHE_NODE_COMPARE( n, q, c ) \
+ ftc_sbit_node_compare( (FTC_SBitNode)(n), (FTC_SBitQuery)(q), c )
-# define GEN_CACHE_LOOKUP ftc_sbit_cache_lookup
-# include "ftccache.i"
+#define GEN_CACHE_LOOKUP ftc_sbit_cache_lookup
+#include "ftccache.i"
#else /* !FTC_CACHE_USE_INLINE */
-# define ftc_sbit_cache_lookup ftc_cache_lookup
+#define ftc_sbit_cache_lookup ftc_cache_lookup
#endif /* !FTC_CACHE_USE_INLINE */
--- a/src/type42/rules.mk
+++ b/src/type42/rules.mk
@@ -32,7 +32,8 @@
# Type42 driver headers
#
-T42_DRV_H := $(T42_DRV_SRC:%.c=%.h)
+T42_DRV_H := $(T42_DRV_SRC:%.c=%.h) \
+ $(T42_DIR_)t42error.h
# Type42 driver object(s)
--- a/src/type42/t42drivr.c
+++ b/src/type42/t42drivr.c
@@ -1,10 +1,30 @@
+/***************************************************************************/
+/* */
+/* t42drivr.c */
+/* */
+/* High-level Type 42 driver interface (body). */
+/* */
+/* Copyright 2002 by Roberto Alameda. */
+/* */
+/* 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 "t42drivr.h"
#include "t42objs.h"
+#include "t42error.h"
#include FT_INTERNAL_DEBUG_H
+
#undef FT_COMPONENT
#define FT_COMPONENT trace_t42
+
static FT_Error
t42_get_glyph_name( T42_Face face,
FT_UInt glyph_index,
@@ -28,7 +48,7 @@
((FT_Byte*)buffer)[len] = 0;
}
- return FT_Err_Ok;
+ return T42_Err_Ok;
}
@@ -127,3 +147,5 @@
(FT_CharMap_CharNextFunc) T42_CMap_CharNext,
};
+
+/* END */
--- a/src/type42/t42drivr.h
+++ b/src/type42/t42drivr.h
@@ -4,8 +4,7 @@
/* */
/* High-level Type 42 driver interface (specification). */
/* */
-/* Copyright 1996-2001, 2002 by */
-/* David Turner, Robert Wilhelm, and Werner Lemberg. */
+/* Copyright 2002 by Roberto Alameda. */
/* */
/* This file is part of the FreeType project, and may only be used, */
/* modified, and distributed under the terms of the FreeType project */
@@ -16,8 +15,8 @@
/***************************************************************************/
-#ifndef __T42DRIVER_H__
-#define __T42DRIVER_H__
+#ifndef __T42DRIVR_H__
+#define __T42DRIVR_H__
#include <ft2build.h>
@@ -32,7 +31,8 @@
FT_END_HEADER
-#endif /* __T42DRIVER_H__ */
+
+#endif /* __T42DRIVR_H__ */
/* END */
--- a/src/type42/t42objs.c
+++ b/src/type42/t42objs.c
@@ -1,9 +1,28 @@
+/***************************************************************************/
+/* */
+/* t42objs.c */
+/* */
+/* Type 42 objects manager (body). */
+/* */
+/* Copyright 2002 by Roberto Alameda. */
+/* */
+/* 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 "t42objs.h"
#include "t42parse.h"
+#include "t42error.h"
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_LIST_H
+
#undef FT_COMPONENT
#define FT_COMPONENT trace_t42
@@ -38,7 +57,7 @@
if ( type1->font_type != 42 )
{
- error = FT_Err_Unknown_File_Format;
+ error = T42_Err_Unknown_File_Format;
goto Exit;
}
@@ -48,10 +67,10 @@
if ( !loader.charstrings.init ) {
FT_ERROR(( "T42_Open_Face: no charstrings array in face!\n" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
}
- loader.charstrings.init = 0;
+ loader.charstrings.init = 0;
type1->charstrings_block = loader.charstrings.block;
type1->charstrings = loader.charstrings.elements;
type1->charstrings_len = loader.charstrings.lengths;
@@ -58,8 +77,8 @@
/* we copy the glyph names `block' and `elements' fields; */
/* the `lengths' field must be released later */
- type1->glyph_names_block = loader.glyph_names.block;
- type1->glyph_names = (FT_String**)loader.glyph_names.elements;
+ type1->glyph_names_block = loader.glyph_names.block;
+ type1->glyph_names = (FT_String**)loader.glyph_names.elements;
loader.glyph_names.block = 0;
loader.glyph_names.elements = 0;
@@ -165,7 +184,7 @@
if ( face_index != 0 )
{
FT_ERROR(( "T42_Face_Init: invalid face index\n" ));
- error = FT_Err_Invalid_Argument;
+ error = T42_Err_Invalid_Argument;
goto Exit;
}
@@ -176,7 +195,7 @@
root->num_glyphs = face->type1.num_glyphs;
root->num_charmaps = 0;
- root->face_index = face_index;
+ root->face_index = face_index;
root->face_flags = FT_FACE_FLAG_SCALABLE;
root->face_flags |= FT_FACE_FLAG_HORIZONTAL;
@@ -242,7 +261,7 @@
root->descender = face->ttf_face->descender;
root->height = face->ttf_face->height;
- root->max_advance_width = face->ttf_face->max_advance_width;
+ root->max_advance_width = face->ttf_face->max_advance_width;
root->max_advance_height = face->ttf_face->max_advance_height;
root->underline_position = face->type1.font_info.underline_position;
@@ -318,9 +337,9 @@
if ( clazz )
FT_CMap_New( clazz, NULL, &charmap, NULL );
- /* Select default charmap */
- if (root->num_charmaps)
- root->charmap = root->charmaps[0];
+ /* Select default charmap */
+ if (root->num_charmaps)
+ root->charmap = root->charmaps[0];
}
}
@@ -328,31 +347,32 @@
/* charmap support -- synthetize unicode charmap if possible */
{
- FT_CharMap charmap = face->charmaprecs;
+ FT_CharMap charmap = face->charmaprecs;
+
/* synthesize a Unicode charmap if there is support in the `PSNames' */
/* module */
if ( psnames && psnames->unicode_value )
{
- error = psnames->build_unicodes( root->memory,
- face->type1.num_glyphs,
- (const char**)face->type1.glyph_names,
- &face->unicode_map );
- if ( !error )
- {
- root->charmap = charmap;
- charmap->face = (FT_Face)face;
- charmap->encoding = ft_encoding_unicode;
- charmap->platform_id = 3;
- charmap->encoding_id = 1;
- charmap++;
- }
-
- /* XXX: Is the following code correct? It is used in t1objs.c */
-
- /* simply clear the error in case of failure (which really) */
- /* means that out of memory or no unicode glyph names */
- error = FT_Err_Ok;
+ error = psnames->build_unicodes( root->memory,
+ face->type1.num_glyphs,
+ (const char**)face->type1.glyph_names,
+ &face->unicode_map );
+ if ( !error )
+ {
+ root->charmap = charmap;
+ charmap->face = (FT_Face)face;
+ charmap->encoding = ft_encoding_unicode;
+ charmap->platform_id = 3;
+ charmap->encoding_id = 1;
+ charmap++;
+ }
+
+ /* XXX: Is the following code correct? It is used in t1objs.c */
+
+ /* simply clear the error in case of failure (which really) */
+ /* means that out of memory or no unicode glyph names */
+ error = T42_Err_Ok;
}
/* now, support either the standard, expert, or custom encoding */
@@ -362,29 +382,29 @@
switch ( face->type1.encoding_type )
{
case T1_ENCODING_TYPE_STANDARD:
- charmap->encoding = ft_encoding_adobe_standard;
- charmap->encoding_id = 0;
- break;
-
+ charmap->encoding = ft_encoding_adobe_standard;
+ charmap->encoding_id = 0;
+ break;
+
case T1_ENCODING_TYPE_EXPERT:
- charmap->encoding = ft_encoding_adobe_expert;
- charmap->encoding_id = 1;
- break;
-
+ charmap->encoding = ft_encoding_adobe_expert;
+ charmap->encoding_id = 1;
+ break;
+
case T1_ENCODING_TYPE_ARRAY:
- charmap->encoding = ft_encoding_adobe_custom;
- charmap->encoding_id = 2;
- break;
-
+ charmap->encoding = ft_encoding_adobe_custom;
+ charmap->encoding_id = 2;
+ break;
+
case T1_ENCODING_TYPE_ISOLATIN1:
- charmap->encoding = ft_encoding_latin_1;
- charmap->encoding_id = 3;
- break;
-
+ charmap->encoding = ft_encoding_latin_1;
+ charmap->encoding_id = 3;
+ break;
+
default:
- FT_ERROR(( "T42_Face_Init: invalid encoding\n" ));
- error = FT_Err_Invalid_File_Format;
- goto Exit;
+ FT_ERROR(( "T42_Face_Init: invalid encoding\n" ));
+ error = T42_Err_Invalid_File_Format;
+ goto Exit;
}
root->charmaps = face->charmaps;
@@ -410,7 +430,7 @@
if ( face )
{
- type1 = &face->type1;
+ type1 = &face->type1;
info = &type1->font_info;
memory = face->root.memory;
@@ -454,6 +474,7 @@
}
}
+
/*************************************************************************/
/* */
/* <Function> */
@@ -477,7 +498,7 @@
ttmodule = FT_Get_Module( FT_MODULE(driver)->library, "truetype" );
driver->ttclazz = (FT_Driver_Class)ttmodule->clazz;
- return FT_Err_Ok;
+ return T42_Err_Ok;
}
@@ -608,7 +629,7 @@
FT_Face face = size->root.face;
T42_Face t42face = (T42_Face)face;
FT_Size ttsize;
- FT_Error error = FT_Err_Ok;
+ FT_Error error = T42_Err_Ok;
error = FT_New_Size( t42face->ttf_face, &ttsize );
@@ -641,7 +662,7 @@
FT_Face face = slot->root.face;
T42_Face t42face = (T42_Face)face;
FT_GlyphSlot ttslot;
- FT_Error error = FT_Err_Ok;
+ FT_Error error = T42_Err_Ok;
if ( face->glyph == NULL )
@@ -879,3 +900,5 @@
return 0;
}
+
+/* END */
--- a/src/type42/t42objs.h
+++ b/src/type42/t42objs.h
@@ -1,6 +1,23 @@
-#ifndef __TYPE42_OBJS_H__
-#define __TYPE42_OBJS_H__
+/***************************************************************************/
+/* */
+/* t42objs.h */
+/* */
+/* Type 42 objects manager (specification). */
+/* */
+/* Copyright 2002 by Roberto Alameda. */
+/* */
+/* 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __T42OBJS_H__
+#define __T42OBJS_H__
+
#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_TYPE1_TABLES_H
@@ -10,9 +27,10 @@
#include FT_INTERNAL_POSTSCRIPT_NAMES_H
#include FT_INTERNAL_POSTSCRIPT_HINTS_H
+
FT_BEGIN_HEADER
- /* Type42 face */
+ /* Type42 face */
typedef struct T42_FaceRec_
{
FT_FaceRec root;
@@ -32,8 +50,7 @@
} T42_FaceRec, *T42_Face;
-
- /* Type42 size */
+ /* Type42 size */
typedef struct T42_SizeRec_
{
FT_SizeRec root;
@@ -42,7 +59,7 @@
} T42_SizeRec, *T42_Size;
- /* Type42 slot */
+ /* Type42 slot */
typedef struct T42_GlyphSlotRec_
{
FT_GlyphSlotRec root;
@@ -51,7 +68,7 @@
} T42_GlyphSlotRec, *T42_GlyphSlot;
- /* Type 42 driver */
+ /* Type 42 driver */
typedef struct T42_DriverRec_
{
FT_DriverRec root;
@@ -60,8 +77,10 @@
} T42_DriverRec, *T42_Driver;
- /* */
+ /* */
+
+
FT_LOCAL( FT_Error )
T42_Face_Init( FT_Stream stream,
T42_Face face,
@@ -127,4 +146,8 @@
FT_END_HEADER
-#endif /* __TYPE42_OBJS_H__ */
+
+#endif /* __T42OBJS_H__ */
+
+
+/* END */
--- a/src/type42/t42parse.c
+++ b/src/type42/t42parse.c
@@ -1,9 +1,28 @@
+/***************************************************************************/
+/* */
+/* t42parse.c */
+/* */
+/* Type 42 font parser (body). */
+/* */
+/* Copyright 2002 by Roberto Alameda. */
+/* */
+/* 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 "t42parse.h"
+#include "t42error.h"
#include FT_INTERNAL_DEBUG_H
#include FT_INTERNAL_STREAM_H
#include FT_LIST_H
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
/*************************************************************************/
/* */
/* The macro FT_COMPONENT is used in trace mode. It is an implicit */
@@ -13,6 +32,7 @@
#undef FT_COMPONENT
#define FT_COMPONENT trace_t42
+
static void
t42_parse_font_name( T42_Face face,
T42_Loader loader );
@@ -118,7 +138,7 @@
FT_Memory memory,
PSAux_Service psaux )
{
- FT_Error error = FT_Err_Ok;
+ FT_Error error = T42_Err_Ok;
FT_Long size;
@@ -165,8 +185,8 @@
else
{
/* read segment in memory */
- if ( FT_ALLOC( parser->base_dict, size ) ||
- FT_STREAM_READ( parser->base_dict, size ) )
+ if ( FT_ALLOC( parser->base_dict, size ) ||
+ FT_STREAM_READ( parser->base_dict, size ) )
goto Exit;
parser->base_len = size;
@@ -176,7 +196,7 @@
if (size <= 17 ||
( ft_strncmp( (const char*)parser->base_dict,
"%!PS-TrueTypeFont", 17) ) )
- error = FT_Err_Unknown_File_Format;
+ error = T42_Err_Unknown_File_Format;
else
{
parser->root.base = parser->base_dict;
@@ -346,7 +366,7 @@
if ( cur >= limit )
{
FT_ERROR(( "t42_parse_encoding: out of bounds!\n" ));
- parser->root.error = FT_Err_Invalid_File_Format;
+ parser->root.error = T42_Err_Invalid_File_Format;
return;
}
}
@@ -485,7 +505,7 @@
else {
FT_ERROR(( "t42_parse_encoding: invalid token!\n" ));
- parser->root.error = FT_Err_Invalid_File_Format;
+ parser->root.error = T42_Err_Invalid_File_Format;
}
}
}
@@ -549,7 +569,7 @@
else
{
FT_ERROR(( "t42_parse_sfnts: can't find begin of sfnts vector!\n" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
goto Fail;
}
@@ -574,7 +594,7 @@
if ( !in_string )
{
FT_ERROR(( "t42_parse_sfnts: found unpaired `>'!\n" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
goto Fail;
}
@@ -597,7 +617,7 @@
else
{
FT_ERROR(( "t42_parse_sfnts: found `%' in string!\n" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
goto Fail;
}
@@ -605,7 +625,7 @@
if ( !ft_xdigit( *cur ) || !ft_xdigit( *(cur + 1) ) )
{
FT_ERROR(( "t42_parse_sfnts: found non-hex characters in string" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
goto Fail;
}
@@ -670,7 +690,7 @@
}
/* If control reaches this point, the format was not valid */
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
Fail:
parser->root.error = error;
@@ -780,7 +800,7 @@
if ( ft_strcmp( (char *)name_table->elements[0], ".notdef" ) )
{
FT_ERROR(( "t42_parse_charstrings: Index 0 is not `.notdef'!\n" ));
- error = FT_Err_Invalid_File_Format;
+ error = T42_Err_Invalid_File_Format;
goto Fail;
}
@@ -970,3 +990,4 @@
}
+/* END */
--- a/src/type42/t42parse.h
+++ b/src/type42/t42parse.h
@@ -1,9 +1,28 @@
-#ifndef __TYPE42_PARSE_H__
-#define __TYPE42_PARSE_H__
+/***************************************************************************/
+/* */
+/* t42parse.h */
+/* */
+/* Type 42 font parser (specification). */
+/* */
+/* Copyright 2002 by Roberto Alameda. */
+/* */
+/* 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. */
+/* */
+/***************************************************************************/
+
+#ifndef __T42PARSE_H__
+#define __T42PARSE_H__
+
+
#include "t42objs.h"
#include FT_INTERNAL_POSTSCRIPT_AUX_H
+
FT_BEGIN_HEADER
typedef struct T42_ParserRec_
@@ -63,4 +82,8 @@
FT_END_HEADER
-#endif /* __TYPE42_PARSE_H__ */
+
+#endif /* __T42PARSE_H__ */
+
+
+/* END */
--- a/src/type42/type42.c
+++ b/src/type42/type42.c
@@ -1,11 +1,19 @@
/***************************************************************************/
/* */
-/* type42c */
+/* type42.c */
/* */
-/* FreeType Type 42 driver component */
+/* FreeType Type 42 driver component. */
/* */
+/* Copyright 2002 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