diff options
Diffstat (limited to 'ThirdParty/freetype/src/pcf')
-rw-r--r-- | ThirdParty/freetype/src/pcf/Jamfile | 32 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/README | 96 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/module.mk | 34 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcf.c | 36 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcf.h | 251 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfdrivr.c | 848 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfdrivr.h | 45 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcferror.h | 41 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfread.c | 1732 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfread.h | 45 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfutil.c | 104 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/pcfutil.h | 55 | ||||
-rw-r--r-- | ThirdParty/freetype/src/pcf/rules.mk | 82 |
13 files changed, 0 insertions, 3401 deletions
diff --git a/ThirdParty/freetype/src/pcf/Jamfile b/ThirdParty/freetype/src/pcf/Jamfile deleted file mode 100644 index fd17d53..0000000 --- a/ThirdParty/freetype/src/pcf/Jamfile +++ /dev/null @@ -1,32 +0,0 @@ -# FreeType 2 src/pcf Jamfile -# -# Copyright (C) 2001-2019 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. - -SubDir FT2_TOP $(FT2_SRC_DIR) pcf ; - -{ - local _sources ; - - if $(FT2_MULTI) - { - _sources = pcfdrivr - pcfread - pcfutil - ; - } - else - { - _sources = pcf ; - } - - Library $(FT2_LIB) : $(_sources).c ; -} - -# end of src/pcf Jamfile diff --git a/ThirdParty/freetype/src/pcf/README b/ThirdParty/freetype/src/pcf/README deleted file mode 100644 index 09ea970..0000000 --- a/ThirdParty/freetype/src/pcf/README +++ /dev/null @@ -1,96 +0,0 @@ - FreeType font driver for PCF fonts - - Francesco Zappa Nardelli - <francesco.zappa.nardelli@ens.fr> - - -Introduction -************ - -PCF (Portable Compiled Format) is a binary bitmap font format, largely used -in X world. This code implements a PCF driver for the FreeType library. -Glyph images are loaded into memory only on demand, thus leading to a small -memory footprint. - -Information on the PCF font format can only be worked out from -`pcfread.c', and `pcfwrite.c', to be found, for instance, in the XFree86 -(www.xfree86.org) source tree (xc/lib/font/bitmap/). - -Many good bitmap fonts in bdf format come with XFree86: they can be -compiled into the pcf format using the `bdftopcf' utility. - - -Supported hardware -****************** - -The driver has been tested on linux/x86 and sunos5.5/sparc. In both -cases the compiler was gcc. When back in Paris, I will test it also -on linux/alpha. - - -Encodings -********* - -Use `FT_Get_BDF_Charset_ID' to access the encoding and registry. - -The driver always exports `ft_encoding_none' as face->charmap.encoding. -FT_Get_Char_Index() behavior is unmodified, that is, it converts the ULong -value given as argument into the corresponding glyph number. - - -Known problems -************** - -- dealing explicitly with encodings breaks the uniformity of FreeType 2 - API. - -- except for encodings properties, client applications have no - visibility of the PCF_Face object. This means that applications - cannot directly access font tables and are obliged to trust - FreeType. - -- currently, glyph names and ink_metrics are ignored. - -I plan to give full visibility of the PCF_Face object in the next -release of the driver, thus implementing also glyph names and -ink_metrics. - -- height is defined as (ascent - descent). Is this correct? - -- if unable to read size information from the font, PCF_Init_Face - sets available_size->width and available_size->height to 12. - -- too many english grammar errors in the readme file :-( - - -License -******* - -Copyright (C) 2000 by Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Credits -******* - -Keith Packard wrote the pcf driver found in XFree86. His work is at -the same time the specification and the sample implementation of the -PCF format. Undoubtedly, this driver is inspired from his work. diff --git a/ThirdParty/freetype/src/pcf/module.mk b/ThirdParty/freetype/src/pcf/module.mk deleted file mode 100644 index df383ff..0000000 --- a/ThirdParty/freetype/src/pcf/module.mk +++ /dev/null @@ -1,34 +0,0 @@ -# -# FreeType 2 PCF module definition -# - -# Copyright 2000, 2006 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -FTMODULE_H_COMMANDS += PCF_DRIVER - -define PCF_DRIVER -$(OPEN_DRIVER) FT_Driver_ClassRec, pcf_driver_class $(CLOSE_DRIVER) -$(ECHO_DRIVER)pcf $(ECHO_DRIVER_DESC)pcf bitmap fonts$(ECHO_DRIVER_DONE) -endef - -# EOF diff --git a/ThirdParty/freetype/src/pcf/pcf.c b/ThirdParty/freetype/src/pcf/pcf.c deleted file mode 100644 index 8ffd6e2..0000000 --- a/ThirdParty/freetype/src/pcf/pcf.c +++ /dev/null @@ -1,36 +0,0 @@ -/* pcf.c - - FreeType font driver for pcf fonts - - Copyright 2000-2001, 2003 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#define FT_MAKE_OPTION_SINGLE_OBJECT -#include <ft2build.h> - -#include "pcfdrivr.c" -#include "pcfread.c" -#include "pcfutil.c" - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcf.h b/ThirdParty/freetype/src/pcf/pcf.h deleted file mode 100644 index 529dd3a..0000000 --- a/ThirdParty/freetype/src/pcf/pcf.h +++ /dev/null @@ -1,251 +0,0 @@ -/* pcf.h - - FreeType font driver for pcf fonts - - Copyright (C) 2000, 2001, 2002, 2003, 2006, 2010 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifndef PCF_H_ -#define PCF_H_ - - -#include <ft2build.h> -#include FT_INTERNAL_DRIVER_H -#include FT_INTERNAL_STREAM_H - - -FT_BEGIN_HEADER - - typedef struct PCF_TableRec_ - { - FT_ULong type; - FT_ULong format; - FT_ULong size; - FT_ULong offset; - - } PCF_TableRec, *PCF_Table; - - - typedef struct PCF_TocRec_ - { - FT_ULong version; - FT_ULong count; - PCF_Table tables; - - } PCF_TocRec, *PCF_Toc; - - - typedef struct PCF_ParsePropertyRec_ - { - FT_Long name; - FT_Byte isString; - FT_Long value; - - } PCF_ParsePropertyRec, *PCF_ParseProperty; - - - typedef struct PCF_PropertyRec_ - { - FT_String* name; - FT_Byte isString; - - union - { - FT_String* atom; - FT_Long l; - FT_ULong ul; - - } value; - - } PCF_PropertyRec, *PCF_Property; - - - typedef struct PCF_Compressed_MetricRec_ - { - FT_Byte leftSideBearing; - FT_Byte rightSideBearing; - FT_Byte characterWidth; - FT_Byte ascent; - FT_Byte descent; - - } PCF_Compressed_MetricRec, *PCF_Compressed_Metric; - - - typedef struct PCF_MetricRec_ - { - FT_Short leftSideBearing; - FT_Short rightSideBearing; - FT_Short characterWidth; - FT_Short ascent; - FT_Short descent; - FT_Short attributes; - FT_ULong bits; - - } PCF_MetricRec, *PCF_Metric; - - - typedef struct PCF_EncRec_ - { - FT_UShort firstCol; - FT_UShort lastCol; - FT_UShort firstRow; - FT_UShort lastRow; - FT_UShort defaultChar; - - FT_UShort* offset; - - } PCF_EncRec, *PCF_Enc; - - - typedef struct PCF_AccelRec_ - { - FT_Byte noOverlap; - FT_Byte constantMetrics; - FT_Byte terminalFont; - FT_Byte constantWidth; - FT_Byte inkInside; - FT_Byte inkMetrics; - FT_Byte drawDirection; - FT_Long fontAscent; - FT_Long fontDescent; - FT_Long maxOverlap; - PCF_MetricRec minbounds; - PCF_MetricRec maxbounds; - PCF_MetricRec ink_minbounds; - PCF_MetricRec ink_maxbounds; - - } PCF_AccelRec, *PCF_Accel; - - - /* - * This file uses X11 terminology for PCF data; an `encoding' in X11 speak - * is the same as a `character code' in FreeType speak. - */ - typedef struct PCF_FaceRec_ - { - FT_FaceRec root; - - FT_StreamRec comp_stream; - FT_Stream comp_source; - - char* charset_encoding; - char* charset_registry; - - PCF_TocRec toc; - PCF_AccelRec accel; - - int nprops; - PCF_Property properties; - - FT_ULong nmetrics; - PCF_Metric metrics; - - PCF_EncRec enc; - - FT_ULong bitmapsFormat; - - } PCF_FaceRec, *PCF_Face; - - - typedef struct PCF_DriverRec_ - { - FT_DriverRec root; - - FT_Bool no_long_family_names; - - } PCF_DriverRec, *PCF_Driver; - - - /* macros for pcf font format */ - -#define LSBFirst 0 -#define MSBFirst 1 - -#define PCF_FILE_VERSION ( ( 'p' << 24 ) | \ - ( 'c' << 16 ) | \ - ( 'f' << 8 ) | 1 ) -#define PCF_FORMAT_MASK 0xFFFFFF00UL - -#define PCF_DEFAULT_FORMAT 0x00000000UL -#define PCF_INKBOUNDS 0x00000200UL -#define PCF_ACCEL_W_INKBOUNDS 0x00000100UL -#define PCF_COMPRESSED_METRICS 0x00000100UL - -#define PCF_FORMAT_MATCH( a, b ) \ - ( ( (a) & PCF_FORMAT_MASK ) == ( (b) & PCF_FORMAT_MASK ) ) - -#define PCF_GLYPH_PAD_MASK ( 3 << 0 ) -#define PCF_BYTE_MASK ( 1 << 2 ) -#define PCF_BIT_MASK ( 1 << 3 ) -#define PCF_SCAN_UNIT_MASK ( 3 << 4 ) - -#define PCF_BYTE_ORDER( f ) \ - ( ( (f) & PCF_BYTE_MASK ) ? MSBFirst : LSBFirst ) -#define PCF_BIT_ORDER( f ) \ - ( ( (f) & PCF_BIT_MASK ) ? MSBFirst : LSBFirst ) -#define PCF_GLYPH_PAD_INDEX( f ) \ - ( (f) & PCF_GLYPH_PAD_MASK ) -#define PCF_GLYPH_PAD( f ) \ - ( 1 << PCF_GLYPH_PAD_INDEX( f ) ) -#define PCF_SCAN_UNIT_INDEX( f ) \ - ( ( (f) & PCF_SCAN_UNIT_MASK ) >> 4 ) -#define PCF_SCAN_UNIT( f ) \ - ( 1 << PCF_SCAN_UNIT_INDEX( f ) ) -#define PCF_FORMAT_BITS( f ) \ - ( (f) & ( PCF_GLYPH_PAD_MASK | \ - PCF_BYTE_MASK | \ - PCF_BIT_MASK | \ - PCF_SCAN_UNIT_MASK ) ) - -#define PCF_SIZE_TO_INDEX( s ) ( (s) == 4 ? 2 : (s) == 2 ? 1 : 0 ) -#define PCF_INDEX_TO_SIZE( b ) ( 1 << b ) - -#define PCF_FORMAT( bit, byte, glyph, scan ) \ - ( ( PCF_SIZE_TO_INDEX( scan ) << 4 ) | \ - ( ( (bit) == MSBFirst ? 1 : 0 ) << 3 ) | \ - ( ( (byte) == MSBFirst ? 1 : 0 ) << 2 ) | \ - ( PCF_SIZE_TO_INDEX( glyph ) << 0 ) ) - -#define PCF_PROPERTIES ( 1 << 0 ) -#define PCF_ACCELERATORS ( 1 << 1 ) -#define PCF_METRICS ( 1 << 2 ) -#define PCF_BITMAPS ( 1 << 3 ) -#define PCF_INK_METRICS ( 1 << 4 ) -#define PCF_BDF_ENCODINGS ( 1 << 5 ) -#define PCF_SWIDTHS ( 1 << 6 ) -#define PCF_GLYPH_NAMES ( 1 << 7 ) -#define PCF_BDF_ACCELERATORS ( 1 << 8 ) - -#define GLYPHPADOPTIONS 4 /* I'm not sure about this */ - - FT_LOCAL( FT_Error ) - pcf_load_font( FT_Stream stream, - PCF_Face face, - FT_Long face_index ); - -FT_END_HEADER - -#endif /* PCF_H_ */ - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfdrivr.c b/ThirdParty/freetype/src/pcf/pcfdrivr.c deleted file mode 100644 index 54bbb9d..0000000 --- a/ThirdParty/freetype/src/pcf/pcfdrivr.c +++ /dev/null @@ -1,848 +0,0 @@ -/* pcfdrivr.c - - FreeType font driver for pcf files - - Copyright (C) 2000-2004, 2006-2011, 2013, 2014 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#include <ft2build.h> - -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H -#include FT_GZIP_H -#include FT_LZW_H -#include FT_BZIP2_H -#include FT_ERRORS_H -#include FT_BDF_H -#include FT_TRUETYPE_IDS_H - -#include "pcf.h" -#include "pcfdrivr.h" -#include "pcfread.h" - -#include "pcferror.h" -#include "pcfutil.h" - -#undef FT_COMPONENT -#define FT_COMPONENT pcfread - -#include FT_SERVICE_BDF_H -#include FT_SERVICE_FONT_FORMAT_H -#include FT_SERVICE_PROPERTIES_H -#include FT_DRIVER_H - - - /************************************************************************** - * - * 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 pcfdriver - - - /* - * This file uses X11 terminology for PCF data; an `encoding' in X11 speak - * is the same as a `character code' in FreeType speak. - */ - typedef struct PCF_CMapRec_ - { - FT_CMapRec root; - PCF_Enc enc; - - } PCF_CMapRec, *PCF_CMap; - - - FT_CALLBACK_DEF( FT_Error ) - pcf_cmap_init( FT_CMap pcfcmap, /* PCF_CMap */ - FT_Pointer init_data ) - { - PCF_CMap cmap = (PCF_CMap)pcfcmap; - PCF_Face face = (PCF_Face)FT_CMAP_FACE( pcfcmap ); - - FT_UNUSED( init_data ); - - - cmap->enc = &face->enc; - - return FT_Err_Ok; - } - - - FT_CALLBACK_DEF( void ) - pcf_cmap_done( FT_CMap pcfcmap ) /* PCF_CMap */ - { - PCF_CMap cmap = (PCF_CMap)pcfcmap; - - - cmap->enc = NULL; - } - - - FT_CALLBACK_DEF( FT_UInt ) - pcf_cmap_char_index( FT_CMap pcfcmap, /* PCF_CMap */ - FT_UInt32 charcode ) - { - PCF_CMap cmap = (PCF_CMap)pcfcmap; - PCF_Enc enc = cmap->enc; - FT_UShort charcodeRow; - FT_UShort charcodeCol; - - - if ( charcode > (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) || - charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) ) - return 0; - - charcodeRow = (FT_UShort)( charcode >> 8 ); - charcodeCol = (FT_UShort)( charcode & 0xFF ); - - if ( charcodeCol < enc->firstCol || - charcodeCol > enc->lastCol ) - return 0; - - return (FT_UInt)enc->offset[ ( charcodeRow - enc->firstRow ) * - ( enc->lastCol - enc->firstCol + 1 ) + - charcodeCol - enc->firstCol ]; - } - - - FT_CALLBACK_DEF( FT_UInt ) - pcf_cmap_char_next( FT_CMap pcfcmap, /* PCF_CMap */ - FT_UInt32 *acharcode ) - { - PCF_CMap cmap = (PCF_CMap)pcfcmap; - PCF_Enc enc = cmap->enc; - FT_UInt32 charcode = *acharcode; - FT_UShort charcodeRow; - FT_UShort charcodeCol; - FT_Int result = 0; - - - while ( charcode < (FT_UInt32)( enc->lastRow * 256 + enc->lastCol ) ) - { - charcode++; - - if ( charcode < (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ) ) - charcode = (FT_UInt32)( enc->firstRow * 256 + enc->firstCol ); - - charcodeRow = (FT_UShort)( charcode >> 8 ); - charcodeCol = (FT_UShort)( charcode & 0xFF ); - - if ( charcodeCol < enc->firstCol ) - charcodeCol = enc->firstCol; - else if ( charcodeCol > enc->lastCol ) - { - charcodeRow++; - charcodeCol = enc->firstCol; - } - - charcode = (FT_UInt32)( charcodeRow * 256 + charcodeCol ); - - result = (FT_UInt)enc->offset[ ( charcodeRow - enc->firstRow ) * - ( enc->lastCol - enc->firstCol + 1 ) + - charcodeCol - enc->firstCol ]; - if ( result != 0xFFFFU ) - break; - } - - *acharcode = charcode; - - return result; - } - - - static - const FT_CMap_ClassRec pcf_cmap_class = - { - sizeof ( PCF_CMapRec ), - pcf_cmap_init, - pcf_cmap_done, - pcf_cmap_char_index, - pcf_cmap_char_next, - - NULL, NULL, NULL, NULL, NULL - }; - - - FT_CALLBACK_DEF( void ) - PCF_Face_Done( FT_Face pcfface ) /* PCF_Face */ - { - PCF_Face face = (PCF_Face)pcfface; - FT_Memory memory; - - - if ( !face ) - return; - - memory = FT_FACE_MEMORY( face ); - - FT_FREE( face->metrics ); - FT_FREE( face->enc.offset ); - - /* free properties */ - if ( face->properties ) - { - FT_Int i; - - - for ( i = 0; i < face->nprops; i++ ) - { - PCF_Property prop = &face->properties[i]; - - - if ( prop ) - { - FT_FREE( prop->name ); - if ( prop->isString ) - FT_FREE( prop->value.atom ); - } - } - - FT_FREE( face->properties ); - } - - FT_FREE( face->toc.tables ); - FT_FREE( pcfface->family_name ); - FT_FREE( pcfface->style_name ); - FT_FREE( pcfface->available_sizes ); - FT_FREE( face->charset_encoding ); - FT_FREE( face->charset_registry ); - - /* close compressed stream if any */ - if ( pcfface->stream == &face->comp_stream ) - { - FT_Stream_Close( &face->comp_stream ); - pcfface->stream = face->comp_source; - } - } - - - FT_CALLBACK_DEF( FT_Error ) - PCF_Face_Init( FT_Stream stream, - FT_Face pcfface, /* PCF_Face */ - FT_Int face_index, - FT_Int num_params, - FT_Parameter* params ) - { - PCF_Face face = (PCF_Face)pcfface; - FT_Error error; - - FT_UNUSED( num_params ); - FT_UNUSED( params ); - - - FT_TRACE2(( "PCF driver\n" )); - - error = pcf_load_font( stream, face, face_index ); - if ( error ) - { - PCF_Face_Done( pcfface ); - -#if defined( FT_CONFIG_OPTION_USE_ZLIB ) || \ - defined( FT_CONFIG_OPTION_USE_LZW ) || \ - defined( FT_CONFIG_OPTION_USE_BZIP2 ) - -#ifdef FT_CONFIG_OPTION_USE_ZLIB - { - FT_Error error2; - - - /* this didn't work, try gzip support! */ - FT_TRACE2(( " ... try gzip stream\n" )); - error2 = FT_Stream_OpenGzip( &face->comp_stream, stream ); - if ( FT_ERR_EQ( error2, Unimplemented_Feature ) ) - goto Fail; - - error = error2; - } -#endif /* FT_CONFIG_OPTION_USE_ZLIB */ - -#ifdef FT_CONFIG_OPTION_USE_LZW - if ( error ) - { - FT_Error error3; - - - /* this didn't work, try LZW support! */ - FT_TRACE2(( " ... try LZW stream\n" )); - error3 = FT_Stream_OpenLZW( &face->comp_stream, stream ); - if ( FT_ERR_EQ( error3, Unimplemented_Feature ) ) - goto Fail; - - error = error3; - } -#endif /* FT_CONFIG_OPTION_USE_LZW */ - -#ifdef FT_CONFIG_OPTION_USE_BZIP2 - if ( error ) - { - FT_Error error4; - - - /* this didn't work, try Bzip2 support! */ - FT_TRACE2(( " ... try Bzip2 stream\n" )); - error4 = FT_Stream_OpenBzip2( &face->comp_stream, stream ); - if ( FT_ERR_EQ( error4, Unimplemented_Feature ) ) - goto Fail; - - error = error4; - } -#endif /* FT_CONFIG_OPTION_USE_BZIP2 */ - - if ( error ) - goto Fail; - - face->comp_source = stream; - pcfface->stream = &face->comp_stream; - - stream = pcfface->stream; - - error = pcf_load_font( stream, face, face_index ); - if ( error ) - goto Fail; - -#else /* !(FT_CONFIG_OPTION_USE_ZLIB || - FT_CONFIG_OPTION_USE_LZW || - FT_CONFIG_OPTION_USE_BZIP2) */ - - goto Fail; - -#endif - } - - /* PCF cannot have multiple faces in a single font file. - * XXX: A non-zero face_index is already an invalid argument, but - * Type1, Type42 drivers have a convention to return - * an invalid argument error when the font could be - * opened by the specified driver. - */ - if ( face_index < 0 ) - goto Exit; - else if ( face_index > 0 && ( face_index & 0xFFFF ) > 0 ) - { - FT_ERROR(( "PCF_Face_Init: invalid face index\n" )); - PCF_Face_Done( pcfface ); - return FT_THROW( Invalid_Argument ); - } - - /* set up charmap */ - { - FT_String *charset_registry = face->charset_registry; - FT_String *charset_encoding = face->charset_encoding; - FT_Bool unicode_charmap = 0; - - - if ( charset_registry && charset_encoding ) - { - char* s = charset_registry; - - - /* Uh, oh, compare first letters manually to avoid dependency - on locales. */ - if ( ( s[0] == 'i' || s[0] == 'I' ) && - ( s[1] == 's' || s[1] == 'S' ) && - ( s[2] == 'o' || s[2] == 'O' ) ) - { - s += 3; - if ( !ft_strcmp( s, "10646" ) || - ( !ft_strcmp( s, "8859" ) && - !ft_strcmp( face->charset_encoding, "1" ) ) ) - unicode_charmap = 1; - /* another name for ASCII */ - else if ( !ft_strcmp( s, "646.1991" ) && - !ft_strcmp( face->charset_encoding, "IRV" ) ) - unicode_charmap = 1; - } - } - - { - FT_CharMapRec charmap; - - - charmap.face = FT_FACE( face ); - charmap.encoding = FT_ENCODING_NONE; - /* initial platform/encoding should indicate unset status? */ - charmap.platform_id = TT_PLATFORM_APPLE_UNICODE; - charmap.encoding_id = TT_APPLE_ID_DEFAULT; - - if ( unicode_charmap ) - { - charmap.encoding = FT_ENCODING_UNICODE; - charmap.platform_id = TT_PLATFORM_MICROSOFT; - charmap.encoding_id = TT_MS_ID_UNICODE_CS; - } - - error = FT_CMap_New( &pcf_cmap_class, NULL, &charmap, NULL ); - } - } - - Exit: - return error; - - Fail: - FT_TRACE2(( " not a PCF file\n" )); - PCF_Face_Done( pcfface ); - error = FT_THROW( Unknown_File_Format ); /* error */ - goto Exit; - } - - - FT_CALLBACK_DEF( FT_Error ) - PCF_Size_Select( FT_Size size, - FT_ULong strike_index ) - { - PCF_Accel accel = &( (PCF_Face)size->face )->accel; - - - FT_Select_Metrics( size->face, strike_index ); - - size->metrics.ascender = accel->fontAscent * 64; - size->metrics.descender = -accel->fontDescent * 64; - size->metrics.max_advance = accel->maxbounds.characterWidth * 64; - - return FT_Err_Ok; - } - - - FT_CALLBACK_DEF( FT_Error ) - PCF_Size_Request( FT_Size size, - FT_Size_Request req ) - { - PCF_Face face = (PCF_Face)size->face; - FT_Bitmap_Size* bsize = size->face->available_sizes; - FT_Error error = FT_ERR( Invalid_Pixel_Size ); - FT_Long height; - - - height = FT_REQUEST_HEIGHT( req ); - height = ( height + 32 ) >> 6; - - switch ( req->type ) - { - case FT_SIZE_REQUEST_TYPE_NOMINAL: - if ( height == ( ( bsize->y_ppem + 32 ) >> 6 ) ) - error = FT_Err_Ok; - break; - - case FT_SIZE_REQUEST_TYPE_REAL_DIM: - if ( height == ( face->accel.fontAscent + - face->accel.fontDescent ) ) - error = FT_Err_Ok; - break; - - default: - error = FT_THROW( Unimplemented_Feature ); - break; - } - - if ( error ) - return error; - else - return PCF_Size_Select( size, 0 ); - } - - - FT_CALLBACK_DEF( FT_Error ) - PCF_Glyph_Load( FT_GlyphSlot slot, - FT_Size size, - FT_UInt glyph_index, - FT_Int32 load_flags ) - { - PCF_Face face = (PCF_Face)FT_SIZE_FACE( size ); - FT_Stream stream; - FT_Error error = FT_Err_Ok; - FT_Bitmap* bitmap = &slot->bitmap; - PCF_Metric metric; - FT_ULong bytes; - - - FT_TRACE1(( "PCF_Glyph_Load: glyph index %d\n", glyph_index )); - - if ( !face ) - { - error = FT_THROW( Invalid_Face_Handle ); - goto Exit; - } - - if ( glyph_index >= (FT_UInt)face->root.num_glyphs ) - { - error = FT_THROW( Invalid_Argument ); - goto Exit; - } - - stream = face->root.stream; - - metric = face->metrics + glyph_index; - - bitmap->rows = (unsigned int)( metric->ascent + - metric->descent ); - bitmap->width = (unsigned int)( metric->rightSideBearing - - metric->leftSideBearing ); - bitmap->num_grays = 1; - bitmap->pixel_mode = FT_PIXEL_MODE_MONO; - - switch ( PCF_GLYPH_PAD( face->bitmapsFormat ) ) - { - case 1: - bitmap->pitch = (int)( ( bitmap->width + 7 ) >> 3 ); - break; - - case 2: - bitmap->pitch = (int)( ( ( bitmap->width + 15 ) >> 4 ) << 1 ); - break; - - case 4: - bitmap->pitch = (int)( ( ( bitmap->width + 31 ) >> 5 ) << 2 ); - break; - - case 8: - bitmap->pitch = (int)( ( ( bitmap->width + 63 ) >> 6 ) << 3 ); - break; - - default: - return FT_THROW( Invalid_File_Format ); - } - - slot->format = FT_GLYPH_FORMAT_BITMAP; - slot->bitmap_left = metric->leftSideBearing; - slot->bitmap_top = metric->ascent; - - slot->metrics.horiAdvance = (FT_Pos)( metric->characterWidth * 64 ); - slot->metrics.horiBearingX = (FT_Pos)( metric->leftSideBearing * 64 ); - slot->metrics.horiBearingY = (FT_Pos)( metric->ascent * 64 ); - slot->metrics.width = (FT_Pos)( ( metric->rightSideBearing - - metric->leftSideBearing ) * 64 ); - slot->metrics.height = (FT_Pos)( bitmap->rows * 64 ); - - ft_synthesize_vertical_metrics( &slot->metrics, - ( face->accel.fontAscent + - face->accel.fontDescent ) * 64 ); - - if ( load_flags & FT_LOAD_BITMAP_METRICS_ONLY ) - goto Exit; - - /* XXX: to do: are there cases that need repadding the bitmap? */ - bytes = (FT_ULong)bitmap->pitch * bitmap->rows; - - error = ft_glyphslot_alloc_bitmap( slot, (FT_ULong)bytes ); - if ( error ) - goto Exit; - - if ( FT_STREAM_SEEK( metric->bits ) || - FT_STREAM_READ( bitmap->buffer, bytes ) ) - goto Exit; - - if ( PCF_BIT_ORDER( face->bitmapsFormat ) != MSBFirst ) - BitOrderInvert( bitmap->buffer, bytes ); - - if ( ( PCF_BYTE_ORDER( face->bitmapsFormat ) != - PCF_BIT_ORDER( face->bitmapsFormat ) ) ) - { - switch ( PCF_SCAN_UNIT( face->bitmapsFormat ) ) - { - case 1: - break; - - case 2: - TwoByteSwap( bitmap->buffer, bytes ); - break; - - case 4: - FourByteSwap( bitmap->buffer, bytes ); - break; - } - } - - Exit: - return error; - } - - - /* - * - * BDF SERVICE - * - */ - - static FT_Error - pcf_get_bdf_property( PCF_Face face, - const char* prop_name, - BDF_PropertyRec *aproperty ) - { - PCF_Property prop; - - - prop = pcf_find_property( face, prop_name ); - if ( prop ) - { - if ( prop->isString ) - { - aproperty->type = BDF_PROPERTY_TYPE_ATOM; - aproperty->u.atom = prop->value.atom; - } - else - { - if ( prop->value.l > 0x7FFFFFFFL || - prop->value.l < ( -1 - 0x7FFFFFFFL ) ) - { - FT_TRACE1(( "pcf_get_bdf_property:" )); - FT_TRACE1(( " too large integer 0x%x is truncated\n" )); - } - - /* - * The PCF driver loads all properties as signed integers. - * This really doesn't seem to be a problem, because this is - * sufficient for any meaningful values. - */ - aproperty->type = BDF_PROPERTY_TYPE_INTEGER; - aproperty->u.integer = (FT_Int32)prop->value.l; - } - - return FT_Err_Ok; - } - - return FT_THROW( Invalid_Argument ); - } - - - static FT_Error - pcf_get_charset_id( PCF_Face face, - const char* *acharset_encoding, - const char* *acharset_registry ) - { - *acharset_encoding = face->charset_encoding; - *acharset_registry = face->charset_registry; - - return FT_Err_Ok; - } - - - static const FT_Service_BDFRec pcf_service_bdf = - { - (FT_BDF_GetCharsetIdFunc)pcf_get_charset_id, /* get_charset_id */ - (FT_BDF_GetPropertyFunc) pcf_get_bdf_property /* get_property */ - }; - - - /* - * PROPERTY SERVICE - * - */ - static FT_Error - pcf_property_set( FT_Module module, /* PCF_Driver */ - const char* property_name, - const void* value, - FT_Bool value_is_string ) - { -#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES - - FT_Error error = FT_Err_Ok; - PCF_Driver driver = (PCF_Driver)module; - -#ifndef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES - FT_UNUSED( value_is_string ); -#endif - - - if ( !ft_strcmp( property_name, "no-long-family-names" ) ) - { -#ifdef FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES - if ( value_is_string ) - { - const char* s = (const char*)value; - long lfn = ft_strtol( s, NULL, 10 ); - - - if ( lfn == 0 ) - driver->no_long_family_names = 0; - else if ( lfn == 1 ) - driver->no_long_family_names = 1; - else - return FT_THROW( Invalid_Argument ); - } - else -#endif - { - FT_Bool* no_long_family_names = (FT_Bool*)value; - - - driver->no_long_family_names = *no_long_family_names; - } - - return error; - } - -#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ - - FT_UNUSED( module ); - FT_UNUSED( value ); - FT_UNUSED( value_is_string ); -#ifndef FT_DEBUG_LEVEL_TRACE - FT_UNUSED( property_name ); -#endif - -#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ - - FT_TRACE0(( "pcf_property_set: missing property `%s'\n", - property_name )); - return FT_THROW( Missing_Property ); - } - - - static FT_Error - pcf_property_get( FT_Module module, /* PCF_Driver */ - const char* property_name, - const void* value ) - { -#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES - - FT_Error error = FT_Err_Ok; - PCF_Driver driver = (PCF_Driver)module; - - - if ( !ft_strcmp( property_name, "no-long-family-names" ) ) - { - FT_Bool no_long_family_names = driver->no_long_family_names; - FT_Bool* val = (FT_Bool*)value; - - - *val = no_long_family_names; - - return error; - } - -#else /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ - - FT_UNUSED( module ); - FT_UNUSED( value ); -#ifndef FT_DEBUG_LEVEL_TRACE - FT_UNUSED( property_name ); -#endif - -#endif /* !PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ - - FT_TRACE0(( "pcf_property_get: missing property `%s'\n", - property_name )); - return FT_THROW( Missing_Property ); - } - - - FT_DEFINE_SERVICE_PROPERTIESREC( - pcf_service_properties, - - (FT_Properties_SetFunc)pcf_property_set, /* set_property */ - (FT_Properties_GetFunc)pcf_property_get ) /* get_property */ - - - /* - * - * SERVICE LIST - * - */ - - static const FT_ServiceDescRec pcf_services[] = - { - { FT_SERVICE_ID_BDF, &pcf_service_bdf }, - { FT_SERVICE_ID_FONT_FORMAT, FT_FONT_FORMAT_PCF }, - { FT_SERVICE_ID_PROPERTIES, &pcf_service_properties }, - { NULL, NULL } - }; - - - FT_CALLBACK_DEF( FT_Module_Interface ) - pcf_driver_requester( FT_Module module, - const char* name ) - { - FT_UNUSED( module ); - - return ft_service_list_lookup( pcf_services, name ); - } - - - FT_CALLBACK_DEF( FT_Error ) - pcf_driver_init( FT_Module module ) /* PCF_Driver */ - { -#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES - PCF_Driver driver = (PCF_Driver)module; - - - driver->no_long_family_names = 0; -#else - FT_UNUSED( module ); -#endif - - return FT_Err_Ok; - } - - - FT_CALLBACK_DEF( void ) - pcf_driver_done( FT_Module module ) /* PCF_Driver */ - { - FT_UNUSED( module ); - } - - - FT_CALLBACK_TABLE_DEF - const FT_Driver_ClassRec pcf_driver_class = - { - { - FT_MODULE_FONT_DRIVER | - FT_MODULE_DRIVER_NO_OUTLINES, - - sizeof ( PCF_DriverRec ), - "pcf", - 0x10000L, - 0x20000L, - - NULL, /* module-specific interface */ - - pcf_driver_init, /* FT_Module_Constructor module_init */ - pcf_driver_done, /* FT_Module_Destructor module_done */ - pcf_driver_requester /* FT_Module_Requester get_interface */ - }, - - sizeof ( PCF_FaceRec ), - sizeof ( FT_SizeRec ), - sizeof ( FT_GlyphSlotRec ), - - PCF_Face_Init, /* FT_Face_InitFunc init_face */ - PCF_Face_Done, /* FT_Face_DoneFunc done_face */ - NULL, /* FT_Size_InitFunc init_size */ - NULL, /* FT_Size_DoneFunc done_size */ - NULL, /* FT_Slot_InitFunc init_slot */ - NULL, /* FT_Slot_DoneFunc done_slot */ - - PCF_Glyph_Load, /* FT_Slot_LoadFunc load_glyph */ - - NULL, /* FT_Face_GetKerningFunc get_kerning */ - NULL, /* FT_Face_AttachFunc attach_file */ - NULL, /* FT_Face_GetAdvancesFunc get_advances */ - - PCF_Size_Request, /* FT_Size_RequestFunc request_size */ - PCF_Size_Select /* FT_Size_SelectFunc select_size */ - }; - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfdrivr.h b/ThirdParty/freetype/src/pcf/pcfdrivr.h deleted file mode 100644 index 73db082..0000000 --- a/ThirdParty/freetype/src/pcf/pcfdrivr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* pcfdrivr.h - - FreeType font driver for pcf fonts - - Copyright 2000-2001, 2002 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifndef PCFDRIVR_H_ -#define PCFDRIVR_H_ - -#include <ft2build.h> -#include FT_INTERNAL_DRIVER_H - - -FT_BEGIN_HEADER - - FT_EXPORT_VAR( const FT_Driver_ClassRec ) pcf_driver_class; - -FT_END_HEADER - - -#endif /* PCFDRIVR_H_ */ - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcferror.h b/ThirdParty/freetype/src/pcf/pcferror.h deleted file mode 100644 index 2e69d1d..0000000 --- a/ThirdParty/freetype/src/pcf/pcferror.h +++ /dev/null @@ -1,41 +0,0 @@ -/**************************************************************************** - * - * pcferror.h - * - * PCF error codes (specification only). - * - * Copyright 2001, 2012 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. - * - */ - - - /************************************************************************** - * - * This file is used to define the PCF error enumeration constants. - * - */ - -#ifndef PCFERROR_H_ -#define PCFERROR_H_ - -#include FT_MODULE_ERRORS_H - -#undef FTERRORS_H_ - -#undef FT_ERR_PREFIX -#define FT_ERR_PREFIX PCF_Err_ -#define FT_ERR_BASE FT_Mod_Err_PCF - -#include FT_ERRORS_H - -#endif /* PCFERROR_H_ */ - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfread.c b/ThirdParty/freetype/src/pcf/pcfread.c deleted file mode 100644 index 71143ec..0000000 --- a/ThirdParty/freetype/src/pcf/pcfread.c +++ /dev/null @@ -1,1732 +0,0 @@ -/* pcfread.c - - FreeType font driver for pcf fonts - - Copyright 2000-2010, 2012-2014 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#include <ft2build.h> - -#include FT_INTERNAL_DEBUG_H -#include FT_INTERNAL_STREAM_H -#include FT_INTERNAL_OBJECTS_H - -#include "pcf.h" -#include "pcfread.h" - -#include "pcferror.h" - - - /************************************************************************** - * - * 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 pcfread - - -#ifdef FT_DEBUG_LEVEL_TRACE - static const char* const tableNames[] = - { - "properties", - "accelerators", - "metrics", - "bitmaps", - "ink metrics", - "encodings", - "swidths", - "glyph names", - "BDF accelerators" - }; -#endif - - - static - const FT_Frame_Field pcf_toc_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_TocRec - - FT_FRAME_START( 8 ), - FT_FRAME_ULONG_LE( version ), - FT_FRAME_ULONG_LE( count ), - FT_FRAME_END - }; - - - static - const FT_Frame_Field pcf_table_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_TableRec - - FT_FRAME_START( 16 ), - FT_FRAME_ULONG_LE( type ), - FT_FRAME_ULONG_LE( format ), - FT_FRAME_ULONG_LE( size ), /* rounded up to a multiple of 4 */ - FT_FRAME_ULONG_LE( offset ), - FT_FRAME_END - }; - - - static FT_Error - pcf_read_TOC( FT_Stream stream, - PCF_Face face ) - { - FT_Error error; - PCF_Toc toc = &face->toc; - PCF_Table tables; - - FT_Memory memory = FT_FACE( face )->memory; - FT_UInt n; - - FT_ULong size; - - - if ( FT_STREAM_SEEK( 0 ) || - FT_STREAM_READ_FIELDS( pcf_toc_header, toc ) ) - return FT_THROW( Cannot_Open_Resource ); - - if ( toc->version != PCF_FILE_VERSION || - toc->count == 0 ) - return FT_THROW( Invalid_File_Format ); - - if ( stream->size < 16 ) - return FT_THROW( Invalid_File_Format ); - - /* we need 16 bytes per TOC entry, */ - /* and there can be most 9 tables */ - if ( toc->count > ( stream->size >> 4 ) || - toc->count > 9 ) - { - FT_TRACE0(( "pcf_read_TOC: adjusting number of tables" - " (from %d to %d)\n", - toc->count, - FT_MIN( stream->size >> 4, 9 ) )); - toc->count = FT_MIN( stream->size >> 4, 9 ); - } - - if ( FT_NEW_ARRAY( face->toc.tables, toc->count ) ) - return error; - - tables = face->toc.tables; - for ( n = 0; n < toc->count; n++ ) - { - if ( FT_STREAM_READ_FIELDS( pcf_table_header, tables ) ) - goto Exit; - tables++; - } - - /* Sort tables and check for overlaps. Because they are almost */ - /* always ordered already, an in-place bubble sort with simultaneous */ - /* boundary checking seems appropriate. */ - tables = face->toc.tables; - - for ( n = 0; n < toc->count - 1; n++ ) - { - FT_UInt i, have_change; - - - have_change = 0; - - for ( i = 0; i < toc->count - 1 - n; i++ ) - { - PCF_TableRec tmp; - - - if ( tables[i].offset > tables[i + 1].offset ) - { - tmp = tables[i]; - tables[i] = tables[i + 1]; - tables[i + 1] = tmp; - - have_change = 1; - } - - if ( ( tables[i].size > tables[i + 1].offset ) || - ( tables[i].offset > tables[i + 1].offset - tables[i].size ) ) - { - error = FT_THROW( Invalid_Offset ); - goto Exit; - } - } - - if ( !have_change ) - break; - } - - /* - * We now check whether the `size' and `offset' values are reasonable: - * `offset' + `size' must not exceed the stream size. - * - * Note, however, that X11's `pcfWriteFont' routine (used by the - * `bdftopcf' program to create PCF font files) has two special - * features. - * - * - It always assigns the accelerator table a size of 100 bytes in the - * TOC, regardless of its real size, which can vary between 34 and 72 - * bytes. - * - * - Due to the way the routine is designed, it ships out the last font - * table with its real size, ignoring the TOC's size value. Since - * the TOC size values are always rounded up to a multiple of 4, the - * difference can be up to three bytes for all tables except the - * accelerator table, for which the difference can be as large as 66 - * bytes. - * - */ - - tables = face->toc.tables; - size = stream->size; - - for ( n = 0; n < toc->count - 1; n++ ) - { - /* we need two checks to avoid overflow */ - if ( ( tables->size > size ) || - ( tables->offset > size - tables->size ) ) - { - error = FT_THROW( Invalid_Table ); - goto Exit; - } - tables++; - } - - /* only check `tables->offset' for last table element ... */ - if ( ( tables->offset > size ) ) - { - error = FT_THROW( Invalid_Table ); - goto Exit; - } - /* ... and adjust `tables->size' to the real value if necessary */ - if ( tables->size > size - tables->offset ) - tables->size = size - tables->offset; - -#ifdef FT_DEBUG_LEVEL_TRACE - - { - FT_UInt i, j; - const char* name = "?"; - - - FT_TRACE4(( "pcf_read_TOC:\n" )); - - FT_TRACE4(( " number of tables: %ld\n", face->toc.count )); - - tables = face->toc.tables; - for ( i = 0; i < toc->count; i++ ) - { - for ( j = 0; j < sizeof ( tableNames ) / sizeof ( tableNames[0] ); - j++ ) - if ( tables[i].type == (FT_UInt)( 1 << j ) ) - name = tableNames[j]; - - FT_TRACE4(( " %d: type=%s, format=0x%X," - " size=%ld (0x%lX), offset=%ld (0x%lX)\n", - i, name, - tables[i].format, - tables[i].size, tables[i].size, - tables[i].offset, tables[i].offset )); - } - } - -#endif - - return FT_Err_Ok; - - Exit: - FT_FREE( face->toc.tables ); - return error; - } - - -#define PCF_METRIC_SIZE 12 - - static - const FT_Frame_Field pcf_metric_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_MetricRec - - FT_FRAME_START( PCF_METRIC_SIZE ), - FT_FRAME_SHORT_LE( leftSideBearing ), - FT_FRAME_SHORT_LE( rightSideBearing ), - FT_FRAME_SHORT_LE( characterWidth ), - FT_FRAME_SHORT_LE( ascent ), - FT_FRAME_SHORT_LE( descent ), - FT_FRAME_SHORT_LE( attributes ), - FT_FRAME_END - }; - - - static - const FT_Frame_Field pcf_metric_msb_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_MetricRec - - FT_FRAME_START( PCF_METRIC_SIZE ), - FT_FRAME_SHORT( leftSideBearing ), - FT_FRAME_SHORT( rightSideBearing ), - FT_FRAME_SHORT( characterWidth ), - FT_FRAME_SHORT( ascent ), - FT_FRAME_SHORT( descent ), - FT_FRAME_SHORT( attributes ), - FT_FRAME_END - }; - - -#define PCF_COMPRESSED_METRIC_SIZE 5 - - static - const FT_Frame_Field pcf_compressed_metric_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_Compressed_MetricRec - - FT_FRAME_START( PCF_COMPRESSED_METRIC_SIZE ), - FT_FRAME_BYTE( leftSideBearing ), - FT_FRAME_BYTE( rightSideBearing ), - FT_FRAME_BYTE( characterWidth ), - FT_FRAME_BYTE( ascent ), - FT_FRAME_BYTE( descent ), - FT_FRAME_END - }; - - - static FT_Error - pcf_get_metric( FT_Stream stream, - FT_ULong format, - PCF_Metric metric ) - { - FT_Error error = FT_Err_Ok; - - - if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) ) - { - const FT_Frame_Field* fields; - - - /* parsing normal metrics */ - fields = ( PCF_BYTE_ORDER( format ) == MSBFirst ) - ? pcf_metric_msb_header - : pcf_metric_header; - - /* the following sets `error' but doesn't return in case of failure */ - (void)FT_STREAM_READ_FIELDS( fields, metric ); - } - else - { - PCF_Compressed_MetricRec compr; - - - /* parsing compressed metrics */ - if ( FT_STREAM_READ_FIELDS( pcf_compressed_metric_header, &compr ) ) - goto Exit; - - metric->leftSideBearing = (FT_Short)( compr.leftSideBearing - 0x80 ); - metric->rightSideBearing = (FT_Short)( compr.rightSideBearing - 0x80 ); - metric->characterWidth = (FT_Short)( compr.characterWidth - 0x80 ); - metric->ascent = (FT_Short)( compr.ascent - 0x80 ); - metric->descent = (FT_Short)( compr.descent - 0x80 ); - metric->attributes = 0; - } - - FT_TRACE5(( " width=%d," - " lsb=%d, rsb=%d," - " ascent=%d, descent=%d," - " attributes=%d\n", - metric->characterWidth, - metric->leftSideBearing, - metric->rightSideBearing, - metric->ascent, - metric->descent, - metric->attributes )); - - Exit: - return error; - } - - - static FT_Error - pcf_seek_to_table_type( FT_Stream stream, - PCF_Table tables, - FT_ULong ntables, /* same as PCF_Toc->count */ - FT_ULong type, - FT_ULong *aformat, - FT_ULong *asize ) - { - FT_Error error = FT_ERR( Invalid_File_Format ); - FT_ULong i; - - - for ( i = 0; i < ntables; i++ ) - if ( tables[i].type == type ) - { - if ( stream->pos > tables[i].offset ) - { - error = FT_THROW( Invalid_Stream_Skip ); - goto Fail; - } - - if ( FT_STREAM_SKIP( tables[i].offset - stream->pos ) ) - { - error = FT_THROW( Invalid_Stream_Skip ); - goto Fail; - } - - *asize = tables[i].size; - *aformat = tables[i].format; - - return FT_Err_Ok; - } - - Fail: - *asize = 0; - return error; - } - - - static FT_Bool - pcf_has_table_type( PCF_Table tables, - FT_ULong ntables, /* same as PCF_Toc->count */ - FT_ULong type ) - { - FT_ULong i; - - - for ( i = 0; i < ntables; i++ ) - if ( tables[i].type == type ) - return TRUE; - - return FALSE; - } - - -#define PCF_PROPERTY_SIZE 9 - - static - const FT_Frame_Field pcf_property_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_ParsePropertyRec - - FT_FRAME_START( PCF_PROPERTY_SIZE ), - FT_FRAME_LONG_LE( name ), - FT_FRAME_BYTE ( isString ), - FT_FRAME_LONG_LE( value ), - FT_FRAME_END - }; - - - static - const FT_Frame_Field pcf_property_msb_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_ParsePropertyRec - - FT_FRAME_START( PCF_PROPERTY_SIZE ), - FT_FRAME_LONG( name ), - FT_FRAME_BYTE( isString ), - FT_FRAME_LONG( value ), - FT_FRAME_END - }; - - - FT_LOCAL_DEF( PCF_Property ) - pcf_find_property( PCF_Face face, - const FT_String* prop ) - { - PCF_Property properties = face->properties; - FT_Bool found = 0; - int i; - - - for ( i = 0; i < face->nprops && !found; i++ ) - { - if ( !ft_strcmp( properties[i].name, prop ) ) - found = 1; - } - - if ( found ) - return properties + i - 1; - else - return NULL; - } - - - static FT_Error - pcf_get_properties( FT_Stream stream, - PCF_Face face ) - { - PCF_ParseProperty props = NULL; - PCF_Property properties = NULL; - FT_ULong nprops, orig_nprops, i; - FT_ULong format, size; - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_ULong string_size; - FT_String* strings = NULL; - - - error = pcf_seek_to_table_type( stream, - face->toc.tables, - face->toc.count, - PCF_PROPERTIES, - &format, - &size ); - if ( error ) - goto Bail; - - if ( FT_READ_ULONG_LE( format ) ) - goto Bail; - - FT_TRACE4(( "pcf_get_properties:\n" - " format: 0x%lX (%s)\n", - format, - PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" )); - - if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) ) - goto Bail; - - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_ULONG( orig_nprops ); - else - (void)FT_READ_ULONG_LE( orig_nprops ); - if ( error ) - goto Bail; - - FT_TRACE4(( " number of properties: %ld\n", orig_nprops )); - - /* rough estimate */ - if ( orig_nprops > size / PCF_PROPERTY_SIZE ) - { - error = FT_THROW( Invalid_Table ); - goto Bail; - } - - /* as a heuristic limit to avoid excessive allocation in */ - /* gzip bombs (i.e., very small, invalid input data that */ - /* pretends to expand to an insanely large file) we only */ - /* load the first 256 properties */ - if ( orig_nprops > 256 ) - { - FT_TRACE0(( "pcf_get_properties:" - " only loading first 256 properties\n" )); - nprops = 256; - } - else - nprops = orig_nprops; - - face->nprops = (int)nprops; - - if ( FT_NEW_ARRAY( props, nprops ) ) - goto Bail; - - for ( i = 0; i < nprops; i++ ) - { - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - { - if ( FT_STREAM_READ_FIELDS( pcf_property_msb_header, props + i ) ) - goto Bail; - } - else - { - if ( FT_STREAM_READ_FIELDS( pcf_property_header, props + i ) ) - goto Bail; - } - } - - /* this skip will only work if we really have an extremely large */ - /* number of properties; it will fail for fake data, avoiding an */ - /* unnecessarily large allocation later on */ - if ( FT_STREAM_SKIP( ( orig_nprops - nprops ) * PCF_PROPERTY_SIZE ) ) - { - error = FT_THROW( Invalid_Stream_Skip ); - goto Bail; - } - - /* pad the property array */ - /* */ - /* clever here - nprops is the same as the number of odd-units read, */ - /* as only isStringProp are odd length (Keith Packard) */ - /* */ - if ( orig_nprops & 3 ) - { - i = 4 - ( orig_nprops & 3 ); - if ( FT_STREAM_SKIP( i ) ) - { - error = FT_THROW( Invalid_Stream_Skip ); - goto Bail; - } - } - - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_ULONG( string_size ); - else - (void)FT_READ_ULONG_LE( string_size ); - if ( error ) - goto Bail; - - FT_TRACE4(( " string size: %ld\n", string_size )); - - /* rough estimate */ - if ( string_size > size - orig_nprops * PCF_PROPERTY_SIZE ) - { - error = FT_THROW( Invalid_Table ); - goto Bail; - } - - /* the strings in the `strings' array are PostScript strings, */ - /* which can have a maximum length of 65536 characters each */ - if ( string_size > 16777472 ) /* 256 * (65536 + 1) */ - { - FT_TRACE0(( "pcf_get_properties:" - " loading only 16777472 bytes of strings array\n" )); - string_size = 16777472; - } - - /* allocate one more byte so that we have a final null byte */ - if ( FT_NEW_ARRAY( strings, string_size + 1 ) ) - goto Bail; - - error = FT_Stream_Read( stream, (FT_Byte*)strings, string_size ); - if ( error ) - goto Bail; - - if ( FT_NEW_ARRAY( properties, nprops ) ) - goto Bail; - - face->properties = properties; - - FT_TRACE4(( "\n" )); - for ( i = 0; i < nprops; i++ ) - { - FT_Long name_offset = props[i].name; - - - if ( ( name_offset < 0 ) || - ( (FT_ULong)name_offset > string_size ) ) - { - error = FT_THROW( Invalid_Offset ); - goto Bail; - } - - if ( FT_STRDUP( properties[i].name, strings + name_offset ) ) - goto Bail; - - FT_TRACE4(( " %s:", properties[i].name )); - - properties[i].isString = props[i].isString; - - if ( props[i].isString ) - { - FT_Long value_offset = props[i].value; - - - if ( ( value_offset < 0 ) || - ( (FT_ULong)value_offset > string_size ) ) - { - error = FT_THROW( Invalid_Offset ); - goto Bail; - } - - if ( FT_STRDUP( properties[i].value.atom, strings + value_offset ) ) - goto Bail; - - FT_TRACE4(( " `%s'\n", properties[i].value.atom )); - } - else - { - properties[i].value.l = props[i].value; - - FT_TRACE4(( " %d\n", properties[i].value.l )); - } - } - - error = FT_Err_Ok; - - Bail: - FT_FREE( props ); - FT_FREE( strings ); - - return error; - } - - - static FT_Error - pcf_get_metrics( FT_Stream stream, - PCF_Face face ) - { - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_ULong format, size; - PCF_Metric metrics = NULL; - FT_ULong nmetrics, orig_nmetrics, i; - - - error = pcf_seek_to_table_type( stream, - face->toc.tables, - face->toc.count, - PCF_METRICS, - &format, - &size ); - if ( error ) - return error; - - if ( FT_READ_ULONG_LE( format ) ) - goto Bail; - - FT_TRACE4(( "pcf_get_metrics:\n" - " format: 0x%lX (%s, %s)\n", - format, - PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB", - PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) ? - "compressed" : "uncompressed" )); - - if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) && - !PCF_FORMAT_MATCH( format, PCF_COMPRESSED_METRICS ) ) - return FT_THROW( Invalid_File_Format ); - - if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) ) - { - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_ULONG( orig_nmetrics ); - else - (void)FT_READ_ULONG_LE( orig_nmetrics ); - } - else - { - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_USHORT( orig_nmetrics ); - else - (void)FT_READ_USHORT_LE( orig_nmetrics ); - } - if ( error ) - return FT_THROW( Invalid_File_Format ); - - FT_TRACE4(( " number of metrics: %ld\n", orig_nmetrics )); - - /* rough estimate */ - if ( PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) ) - { - if ( orig_nmetrics > size / PCF_METRIC_SIZE ) - return FT_THROW( Invalid_Table ); - } - else - { - if ( orig_nmetrics > size / PCF_COMPRESSED_METRIC_SIZE ) - return FT_THROW( Invalid_Table ); - } - - if ( !orig_nmetrics ) - return FT_THROW( Invalid_Table ); - - /* PCF is a format from ancient times; Unicode was in its */ - /* infancy, and widely used two-byte character sets for CJK */ - /* scripts (Big 5, GB 2312, JIS X 0208, etc.) did have at most */ - /* 15000 characters. Even the more exotic CNS 11643 and CCCII */ - /* standards, which were essentially three-byte character sets, */ - /* provided less then 65536 assigned characters. */ - /* */ - /* While technically possible to have a larger number of glyphs */ - /* in PCF files, we thus limit the number to 65536. */ - if ( orig_nmetrics > 65536 ) - { - FT_TRACE0(( "pcf_get_metrics:" - " only loading first 65536 metrics\n" )); - nmetrics = 65536; - } - else - nmetrics = orig_nmetrics; - - face->nmetrics = nmetrics; - - if ( FT_NEW_ARRAY( face->metrics, nmetrics ) ) - return error; - - metrics = face->metrics; - - FT_TRACE4(( "\n" )); - for ( i = 0; i < nmetrics; i++, metrics++ ) - { - FT_TRACE5(( " idx %ld:", i )); - error = pcf_get_metric( stream, format, metrics ); - - metrics->bits = 0; - - if ( error ) - break; - - /* sanity checks -- those values are used in `PCF_Glyph_Load' to */ - /* compute a glyph's bitmap dimensions, thus setting them to zero in */ - /* case of an error disables this particular glyph only */ - if ( metrics->rightSideBearing < metrics->leftSideBearing || - metrics->ascent < -metrics->descent ) - { - metrics->characterWidth = 0; - metrics->leftSideBearing = 0; - metrics->rightSideBearing = 0; - metrics->ascent = 0; - metrics->descent = 0; - - FT_TRACE0(( "pcf_get_metrics:" - " invalid metrics for glyph %d\n", i )); - } - } - - if ( error ) - FT_FREE( face->metrics ); - - Bail: - return error; - } - - - static FT_Error - pcf_get_bitmaps( FT_Stream stream, - PCF_Face face ) - { - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_ULong* offsets = NULL; - FT_ULong bitmapSizes[GLYPHPADOPTIONS]; - FT_ULong format, size; - FT_ULong nbitmaps, orig_nbitmaps, i, sizebitmaps = 0; - - - error = pcf_seek_to_table_type( stream, - face->toc.tables, - face->toc.count, - PCF_BITMAPS, - &format, - &size ); - if ( error ) - return error; - - error = FT_Stream_EnterFrame( stream, 8 ); - if ( error ) - return error; - - format = FT_GET_ULONG_LE(); - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - orig_nbitmaps = FT_GET_ULONG(); - else - orig_nbitmaps = FT_GET_ULONG_LE(); - - FT_Stream_ExitFrame( stream ); - - FT_TRACE4(( "pcf_get_bitmaps:\n" - " format: 0x%lX\n" - " (%s, %s,\n" - " padding=%d bit%s, scanning=%d bit%s)\n", - format, - PCF_BYTE_ORDER( format ) == MSBFirst - ? "most significant byte first" - : "least significant byte first", - PCF_BIT_ORDER( format ) == MSBFirst - ? "most significant bit first" - : "least significant bit first", - 8 << PCF_GLYPH_PAD_INDEX( format ), - ( 8 << PCF_GLYPH_PAD_INDEX( format ) ) == 1 ? "" : "s", - 8 << PCF_SCAN_UNIT_INDEX( format ), - ( 8 << PCF_SCAN_UNIT_INDEX( format ) ) == 1 ? "" : "s" )); - - if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) ) - return FT_THROW( Invalid_File_Format ); - - FT_TRACE4(( " number of bitmaps: %ld\n", orig_nbitmaps )); - - /* see comment in `pcf_get_metrics' */ - if ( orig_nbitmaps > 65536 ) - { - FT_TRACE0(( "pcf_get_bitmaps:" - " only loading first 65536 bitmaps\n" )); - nbitmaps = 65536; - } - else - nbitmaps = orig_nbitmaps; - - if ( nbitmaps != face->nmetrics ) - return FT_THROW( Invalid_File_Format ); - - if ( FT_NEW_ARRAY( offsets, nbitmaps ) ) - return error; - - FT_TRACE5(( "\n" )); - for ( i = 0; i < nbitmaps; i++ ) - { - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_ULONG( offsets[i] ); - else - (void)FT_READ_ULONG_LE( offsets[i] ); - - FT_TRACE5(( " bitmap %lu: offset %lu (0x%lX)\n", - i, offsets[i], offsets[i] )); - } - if ( error ) - goto Bail; - - for ( i = 0; i < GLYPHPADOPTIONS; i++ ) - { - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - (void)FT_READ_ULONG( bitmapSizes[i] ); - else - (void)FT_READ_ULONG_LE( bitmapSizes[i] ); - if ( error ) - goto Bail; - - sizebitmaps = bitmapSizes[PCF_GLYPH_PAD_INDEX( format )]; - - FT_TRACE4(( " %ld-bit padding implies a size of %lu\n", - 8 << i, bitmapSizes[i] )); - } - - FT_TRACE4(( " %lu bitmaps, using %ld-bit padding\n", - nbitmaps, - 8 << PCF_GLYPH_PAD_INDEX( format ) )); - FT_TRACE4(( " bitmap size: %lu\n", sizebitmaps )); - - FT_UNUSED( sizebitmaps ); /* only used for debugging */ - - /* right now, we only check the bitmap offsets; */ - /* actual bitmaps are only loaded on demand */ - for ( i = 0; i < nbitmaps; i++ ) - { - /* rough estimate */ - if ( offsets[i] > size ) - { - FT_TRACE0(( "pcf_get_bitmaps:" - " invalid offset to bitmap data of glyph %lu\n", i )); - } - else - face->metrics[i].bits = stream->pos + offsets[i]; - } - - face->bitmapsFormat = format; - - Bail: - FT_FREE( offsets ); - return error; - } - - - /* - * This file uses X11 terminology for PCF data; an `encoding' in X11 speak - * is the same as a character code in FreeType speak. - */ -#define PCF_ENC_SIZE 10 - - static - const FT_Frame_Field pcf_enc_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_EncRec - - FT_FRAME_START( PCF_ENC_SIZE ), - FT_FRAME_USHORT_LE( firstCol ), - FT_FRAME_USHORT_LE( lastCol ), - FT_FRAME_USHORT_LE( firstRow ), - FT_FRAME_USHORT_LE( lastRow ), - FT_FRAME_USHORT_LE( defaultChar ), - FT_FRAME_END - }; - - - static - const FT_Frame_Field pcf_enc_msb_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_EncRec - - FT_FRAME_START( PCF_ENC_SIZE ), - FT_FRAME_USHORT( firstCol ), - FT_FRAME_USHORT( lastCol ), - FT_FRAME_USHORT( firstRow ), - FT_FRAME_USHORT( lastRow ), - FT_FRAME_USHORT( defaultChar ), - FT_FRAME_END - }; - - - static FT_Error - pcf_get_encodings( FT_Stream stream, - PCF_Face face ) - { - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_ULong format, size; - PCF_Enc enc = &face->enc; - FT_ULong nencoding; - FT_UShort* offset; - FT_UShort defaultCharRow, defaultCharCol; - FT_UShort encodingOffset, defaultCharEncodingOffset; - FT_UShort i, j; - FT_Byte* pos; - - - error = pcf_seek_to_table_type( stream, - face->toc.tables, - face->toc.count, - PCF_BDF_ENCODINGS, - &format, - &size ); - if ( error ) - goto Bail; - - if ( FT_READ_ULONG_LE( format ) ) - goto Bail; - - FT_TRACE4(( "pcf_get_encodings:\n" - " format: 0x%lX (%s)\n", - format, - PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB" )); - - if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) && - !PCF_FORMAT_MATCH( format, PCF_BDF_ENCODINGS ) ) - return FT_THROW( Invalid_File_Format ); - - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - { - if ( FT_STREAM_READ_FIELDS( pcf_enc_msb_header, enc ) ) - goto Bail; - } - else - { - if ( FT_STREAM_READ_FIELDS( pcf_enc_header, enc ) ) - goto Bail; - } - - FT_TRACE4(( " firstCol 0x%X, lastCol 0x%X\n" - " firstRow 0x%X, lastRow 0x%X\n" - " defaultChar 0x%X\n", - enc->firstCol, enc->lastCol, - enc->firstRow, enc->lastRow, - enc->defaultChar )); - - /* sanity checks; we limit numbers of rows and columns to 256 */ - if ( enc->firstCol > enc->lastCol || - enc->lastCol > 0xFF || - enc->firstRow > enc->lastRow || - enc->lastRow > 0xFF ) - return FT_THROW( Invalid_Table ); - - nencoding = (FT_ULong)( enc->lastCol - enc->firstCol + 1 ) * - (FT_ULong)( enc->lastRow - enc->firstRow + 1 ); - - if ( FT_NEW_ARRAY( enc->offset, nencoding ) ) - goto Bail; - - error = FT_Stream_EnterFrame( stream, 2 * nencoding ); - if ( error ) - goto Exit; - - FT_TRACE5(( "\n" )); - - defaultCharRow = enc->defaultChar >> 8; - defaultCharCol = enc->defaultChar & 0xFF; - - /* validate default character */ - if ( defaultCharRow < enc->firstRow || - defaultCharRow > enc->lastRow || - defaultCharCol < enc->firstCol || - defaultCharCol > enc->lastCol ) - { - enc->defaultChar = enc->firstRow * 256U + enc->firstCol; - FT_TRACE0(( "pcf_get_encodings:" - " Invalid default character set to %u\n", - enc->defaultChar )); - - defaultCharRow = enc->firstRow; - defaultCharCol = enc->firstCol; - } - - /* FreeType mandates that glyph index 0 is the `undefined glyph', */ - /* which PCF calls the `default character'. For this reason, we */ - /* swap the positions of glyph index 0 and the index corresponding */ - /* to `defaultChar' in case they are different. */ - - /* `stream->cursor' still points at the beginning of the frame; */ - /* we can thus easily get the offset to the default character */ - pos = stream->cursor + - 2 * ( ( defaultCharRow - enc->firstRow ) * - ( enc->lastCol - enc->firstCol + 1 ) + - defaultCharCol - enc->firstCol ); - - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - defaultCharEncodingOffset = FT_PEEK_USHORT( pos ); - else - defaultCharEncodingOffset = FT_PEEK_USHORT_LE( pos ); - - if ( defaultCharEncodingOffset >= face->nmetrics ) - { - FT_TRACE0(( "pcf_get_encodings:" - " Invalid glyph index for default character," - " setting to zero\n" )); - defaultCharEncodingOffset = 0; - } - - if ( defaultCharEncodingOffset ) - { - /* do the swapping */ - PCF_MetricRec tmp = face->metrics[defaultCharEncodingOffset]; - - - face->metrics[defaultCharEncodingOffset] = face->metrics[0]; - face->metrics[0] = tmp; - } - - offset = enc->offset; - for ( i = enc->firstRow; i <= enc->lastRow; i++ ) - { - for ( j = enc->firstCol; j <= enc->lastCol; j++ ) - { - /* X11's reference implementation uses the equivalent to */ - /* `FT_GET_SHORT', however PCF fonts with more than 32768 */ - /* characters (e.g., `unifont.pcf') clearly show that an */ - /* unsigned value is needed. */ - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - encodingOffset = FT_GET_USHORT(); - else - encodingOffset = FT_GET_USHORT_LE(); - - if ( encodingOffset != 0xFFFFU ) - { - if ( encodingOffset == defaultCharEncodingOffset ) - encodingOffset = 0; - else if ( encodingOffset == 0 ) - encodingOffset = defaultCharEncodingOffset; - } - - *offset++ = encodingOffset; - } - } - FT_Stream_ExitFrame( stream ); - - return error; - - Exit: - FT_FREE( enc->offset ); - - Bail: - return error; - } - - - static - const FT_Frame_Field pcf_accel_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_AccelRec - - FT_FRAME_START( 20 ), - FT_FRAME_BYTE ( noOverlap ), - FT_FRAME_BYTE ( constantMetrics ), - FT_FRAME_BYTE ( terminalFont ), - FT_FRAME_BYTE ( constantWidth ), - FT_FRAME_BYTE ( inkInside ), - FT_FRAME_BYTE ( inkMetrics ), - FT_FRAME_BYTE ( drawDirection ), - FT_FRAME_SKIP_BYTES( 1 ), - FT_FRAME_LONG_LE ( fontAscent ), - FT_FRAME_LONG_LE ( fontDescent ), - FT_FRAME_LONG_LE ( maxOverlap ), - FT_FRAME_END - }; - - - static - const FT_Frame_Field pcf_accel_msb_header[] = - { -#undef FT_STRUCTURE -#define FT_STRUCTURE PCF_AccelRec - - FT_FRAME_START( 20 ), - FT_FRAME_BYTE ( noOverlap ), - FT_FRAME_BYTE ( constantMetrics ), - FT_FRAME_BYTE ( terminalFont ), - FT_FRAME_BYTE ( constantWidth ), - FT_FRAME_BYTE ( inkInside ), - FT_FRAME_BYTE ( inkMetrics ), - FT_FRAME_BYTE ( drawDirection ), - FT_FRAME_SKIP_BYTES( 1 ), - FT_FRAME_LONG ( fontAscent ), - FT_FRAME_LONG ( fontDescent ), - FT_FRAME_LONG ( maxOverlap ), - FT_FRAME_END - }; - - - static FT_Error - pcf_get_accel( FT_Stream stream, - PCF_Face face, - FT_ULong type ) - { - FT_ULong format, size; - FT_Error error; - PCF_Accel accel = &face->accel; - - - error = pcf_seek_to_table_type( stream, - face->toc.tables, - face->toc.count, - type, - &format, - &size ); - if ( error ) - goto Bail; - - if ( FT_READ_ULONG_LE( format ) ) - goto Bail; - - FT_TRACE4(( "pcf_get_accel%s:\n" - " format: 0x%lX (%s, %s)\n", - type == PCF_BDF_ACCELERATORS ? " (getting BDF accelerators)" - : "", - format, - PCF_BYTE_ORDER( format ) == MSBFirst ? "MSB" : "LSB", - PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ? - "accelerated" : "not accelerated" )); - - if ( !PCF_FORMAT_MATCH( format, PCF_DEFAULT_FORMAT ) && - !PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ) - goto Bail; - - if ( PCF_BYTE_ORDER( format ) == MSBFirst ) - { - if ( FT_STREAM_READ_FIELDS( pcf_accel_msb_header, accel ) ) - goto Bail; - } - else - { - if ( FT_STREAM_READ_FIELDS( pcf_accel_header, accel ) ) - goto Bail; - } - - FT_TRACE5(( " noOverlap=%s, constantMetrics=%s," - " terminalFont=%s, constantWidth=%s\n" - " inkInside=%s, inkMetrics=%s, drawDirection=%s\n" - " fontAscent=%ld, fontDescent=%ld, maxOverlap=%ld\n", - accel->noOverlap ? "yes" : "no", - accel->constantMetrics ? "yes" : "no", - accel->terminalFont ? "yes" : "no", - accel->constantWidth ? "yes" : "no", - accel->inkInside ? "yes" : "no", - accel->inkMetrics ? "yes" : "no", - accel->drawDirection ? "RTL" : "LTR", - accel->fontAscent, - accel->fontDescent, - accel->maxOverlap )); - - /* sanity checks */ - if ( FT_ABS( accel->fontAscent ) > 0x7FFF ) - { - accel->fontAscent = accel->fontAscent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "pfc_get_accel: clamping font ascent to value %d\n", - accel->fontAscent )); - } - if ( FT_ABS( accel->fontDescent ) > 0x7FFF ) - { - accel->fontDescent = accel->fontDescent < 0 ? -0x7FFF : 0x7FFF; - FT_TRACE0(( "pfc_get_accel: clamping font descent to value %d\n", - accel->fontDescent )); - } - - FT_TRACE5(( " minbounds:" )); - error = pcf_get_metric( stream, - format & ( ~PCF_FORMAT_MASK ), - &(accel->minbounds) ); - if ( error ) - goto Bail; - - FT_TRACE5(( " maxbounds:" )); - error = pcf_get_metric( stream, - format & ( ~PCF_FORMAT_MASK ), - &(accel->maxbounds) ); - if ( error ) - goto Bail; - - if ( PCF_FORMAT_MATCH( format, PCF_ACCEL_W_INKBOUNDS ) ) - { - FT_TRACE5(( " ink minbounds:" )); - error = pcf_get_metric( stream, - format & ( ~PCF_FORMAT_MASK ), - &(accel->ink_minbounds) ); - if ( error ) - goto Bail; - - FT_TRACE5(( " ink maxbounds:" )); - error = pcf_get_metric( stream, - format & ( ~PCF_FORMAT_MASK ), - &(accel->ink_maxbounds) ); - if ( error ) - goto Bail; - } - else - { - accel->ink_minbounds = accel->minbounds; - accel->ink_maxbounds = accel->maxbounds; - } - - Bail: - return error; - } - - - static FT_Error - pcf_interpret_style( PCF_Face pcf ) - { - FT_Error error = FT_Err_Ok; - FT_Face face = FT_FACE( pcf ); - FT_Memory memory = face->memory; - - PCF_Property prop; - - size_t nn, len; - char* strings[4] = { NULL, NULL, NULL, NULL }; - size_t lengths[4]; - - - face->style_flags = 0; - - prop = pcf_find_property( pcf, "SLANT" ); - if ( prop && prop->isString && - ( *(prop->value.atom) == 'O' || *(prop->value.atom) == 'o' || - *(prop->value.atom) == 'I' || *(prop->value.atom) == 'i' ) ) - { - face->style_flags |= FT_STYLE_FLAG_ITALIC; - strings[2] = ( *(prop->value.atom) == 'O' || - *(prop->value.atom) == 'o' ) ? (char *)"Oblique" - : (char *)"Italic"; - } - - prop = pcf_find_property( pcf, "WEIGHT_NAME" ); - if ( prop && prop->isString && - ( *(prop->value.atom) == 'B' || *(prop->value.atom) == 'b' ) ) - { - face->style_flags |= FT_STYLE_FLAG_BOLD; - strings[1] = (char*)"Bold"; - } - - prop = pcf_find_property( pcf, "SETWIDTH_NAME" ); - if ( prop && prop->isString && - *(prop->value.atom) && - !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) ) - strings[3] = (char*)( prop->value.atom ); - - prop = pcf_find_property( pcf, "ADD_STYLE_NAME" ); - if ( prop && prop->isString && - *(prop->value.atom) && - !( *(prop->value.atom) == 'N' || *(prop->value.atom) == 'n' ) ) - strings[0] = (char*)( prop->value.atom ); - - for ( len = 0, nn = 0; nn < 4; nn++ ) - { - lengths[nn] = 0; - if ( strings[nn] ) - { - lengths[nn] = ft_strlen( strings[nn] ); - len += lengths[nn] + 1; - } - } - - if ( len == 0 ) - { - strings[0] = (char*)"Regular"; - lengths[0] = ft_strlen( strings[0] ); - len = lengths[0] + 1; - } - - { - char* s; - - - if ( FT_ALLOC( face->style_name, len ) ) - return error; - - s = face->style_name; - - for ( nn = 0; nn < 4; nn++ ) - { - char* src = strings[nn]; - - - len = lengths[nn]; - - if ( !src ) - continue; - - /* separate elements with a space */ - if ( s != face->style_name ) - *s++ = ' '; - - ft_memcpy( s, src, len ); - - /* need to convert spaces to dashes for */ - /* add_style_name and setwidth_name */ - if ( nn == 0 || nn == 3 ) - { - size_t mm; - - - for ( mm = 0; mm < len; mm++ ) - if ( s[mm] == ' ' ) - s[mm] = '-'; - } - - s += len; - } - *s = 0; - } - - return error; - } - - - FT_LOCAL_DEF( FT_Error ) - pcf_load_font( FT_Stream stream, - PCF_Face face, - FT_Long face_index ) - { - FT_Face root = FT_FACE( face ); - FT_Error error; - FT_Memory memory = FT_FACE( face )->memory; - FT_Bool hasBDFAccelerators; - - - error = pcf_read_TOC( stream, face ); - if ( error ) - goto Exit; - - root->num_faces = 1; - root->face_index = 0; - - /* If we are performing a simple font format check, exit immediately. */ - if ( face_index < 0 ) - return FT_Err_Ok; - - error = pcf_get_properties( stream, face ); - if ( error ) - goto Exit; - - /* Use the old accelerators if no BDF accelerators are in the file. */ - hasBDFAccelerators = pcf_has_table_type( face->toc.tables, - face->toc.count, - PCF_BDF_ACCELERATORS ); - if ( !hasBDFAccelerators ) - { - error = pcf_get_accel( stream, face, PCF_ACCELERATORS ); - if ( error ) - goto Exit; - } - - /* metrics */ - error = pcf_get_metrics( stream, face ); - if ( error ) - goto Exit; - - /* bitmaps */ - error = pcf_get_bitmaps( stream, face ); - if ( error ) - goto Exit; - - /* encodings */ - error = pcf_get_encodings( stream, face ); - if ( error ) - goto Exit; - - /* BDF style accelerators (i.e. bounds based on encoded glyphs) */ - if ( hasBDFAccelerators ) - { - error = pcf_get_accel( stream, face, PCF_BDF_ACCELERATORS ); - if ( error ) - goto Exit; - } - - /* XXX: TO DO: inkmetrics and glyph_names are missing */ - - /* now construct the face object */ - { - PCF_Property prop; - - - root->face_flags |= FT_FACE_FLAG_FIXED_SIZES | - FT_FACE_FLAG_HORIZONTAL; - - if ( face->accel.constantWidth ) - root->face_flags |= FT_FACE_FLAG_FIXED_WIDTH; - - if ( FT_SET_ERROR( pcf_interpret_style( face ) ) ) - goto Exit; - - prop = pcf_find_property( face, "FAMILY_NAME" ); - if ( prop && prop->isString ) - { - -#ifdef PCF_CONFIG_OPTION_LONG_FAMILY_NAMES - - PCF_Driver driver = (PCF_Driver)FT_FACE_DRIVER( face ); - - - if ( !driver->no_long_family_names ) - { - /* Prepend the foundry name plus a space to the family name. */ - /* There are many fonts just called `Fixed' which look */ - /* completely different, and which have nothing to do with each */ - /* other. When selecting `Fixed' in KDE or Gnome one gets */ - /* results that appear rather random, the style changes often if */ - /* one changes the size and one cannot select some fonts at all. */ - /* */ - /* We also check whether we have `wide' characters; all put */ - /* together, we get family names like `Sony Fixed' or `Misc */ - /* Fixed Wide'. */ - - PCF_Property foundry_prop, point_size_prop, average_width_prop; - - int l = ft_strlen( prop->value.atom ) + 1; - int wide = 0; - - - foundry_prop = pcf_find_property( face, "FOUNDRY" ); - point_size_prop = pcf_find_property( face, "POINT_SIZE" ); - average_width_prop = pcf_find_property( face, "AVERAGE_WIDTH" ); - - if ( point_size_prop && average_width_prop ) - { - if ( average_width_prop->value.l >= point_size_prop->value.l ) - { - /* This font is at least square shaped or even wider */ - wide = 1; - l += ft_strlen( " Wide" ); - } - } - - if ( foundry_prop && foundry_prop->isString ) - { - l += ft_strlen( foundry_prop->value.atom ) + 1; - - if ( FT_NEW_ARRAY( root->family_name, l ) ) - goto Exit; - - ft_strcpy( root->family_name, foundry_prop->value.atom ); - ft_strcat( root->family_name, " " ); - ft_strcat( root->family_name, prop->value.atom ); - } - else - { - if ( FT_NEW_ARRAY( root->family_name, l ) ) - goto Exit; - - ft_strcpy( root->family_name, prop->value.atom ); - } - - if ( wide ) - ft_strcat( root->family_name, " Wide" ); - } - else - -#endif /* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ - - { - if ( FT_STRDUP( root->family_name, prop->value.atom ) ) - goto Exit; - } - } - else - root->family_name = NULL; - - root->num_glyphs = (FT_Long)face->nmetrics; - - root->num_fixed_sizes = 1; - if ( FT_NEW_ARRAY( root->available_sizes, 1 ) ) - goto Exit; - - { - FT_Bitmap_Size* bsize = root->available_sizes; - FT_Short resolution_x = 0, resolution_y = 0; - - - FT_ZERO( bsize ); - - /* for simplicity, we take absolute values of integer properties */ - -#if 0 - bsize->height = face->accel.maxbounds.ascent << 6; -#endif - -#ifdef FT_DEBUG_LEVEL_TRACE - if ( face->accel.fontAscent + face->accel.fontDescent < 0 ) - FT_TRACE0(( "pcf_load_font: negative height\n" )); -#endif - if ( FT_ABS( face->accel.fontAscent + - face->accel.fontDescent ) > 0x7FFF ) - { - bsize->height = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping height to value %d\n", - bsize->height )); - } - else - bsize->height = FT_ABS( (FT_Short)( face->accel.fontAscent + - face->accel.fontDescent ) ); - - prop = pcf_find_property( face, "AVERAGE_WIDTH" ); - if ( prop ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( prop->value.l < 0 ) - FT_TRACE0(( "pcf_load_font: negative average width\n" )); -#endif - if ( ( FT_ABS( prop->value.l ) > 0x7FFFL * 10 - 5 ) ) - { - bsize->width = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping average width to value %d\n", - bsize->width )); - } - else - bsize->width = FT_ABS( (FT_Short)( ( prop->value.l + 5 ) / 10 ) ); - } - else - { - /* this is a heuristical value */ - bsize->width = (FT_Short)FT_MulDiv( bsize->height, 2, 3 ); - } - - prop = pcf_find_property( face, "POINT_SIZE" ); - if ( prop ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( prop->value.l < 0 ) - FT_TRACE0(( "pcf_load_font: negative point size\n" )); -#endif - /* convert from 722.7 decipoints to 72 points per inch */ - if ( FT_ABS( prop->value.l ) > 0x504C2L ) /* 0x7FFF * 72270/7200 */ - { - bsize->size = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping point size to value %d\n", - bsize->size )); - } - else - bsize->size = FT_MulDiv( FT_ABS( prop->value.l ), - 64 * 7200, - 72270L ); - } - - prop = pcf_find_property( face, "PIXEL_SIZE" ); - if ( prop ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( prop->value.l < 0 ) - FT_TRACE0(( "pcf_load_font: negative pixel size\n" )); -#endif - if ( FT_ABS( prop->value.l ) > 0x7FFF ) - { - bsize->y_ppem = 0x7FFF << 6; - FT_TRACE0(( "pcf_load_font: clamping pixel size to value %d\n", - bsize->y_ppem )); - } - else - bsize->y_ppem = FT_ABS( (FT_Short)prop->value.l ) << 6; - } - - prop = pcf_find_property( face, "RESOLUTION_X" ); - if ( prop ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( prop->value.l < 0 ) - FT_TRACE0(( "pcf_load_font: negative X resolution\n" )); -#endif - if ( FT_ABS( prop->value.l ) > 0x7FFF ) - { - resolution_x = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping X resolution to value %d\n", - resolution_x )); - } - else - resolution_x = FT_ABS( (FT_Short)prop->value.l ); - } - - prop = pcf_find_property( face, "RESOLUTION_Y" ); - if ( prop ) - { -#ifdef FT_DEBUG_LEVEL_TRACE - if ( prop->value.l < 0 ) - FT_TRACE0(( "pcf_load_font: negative Y resolution\n" )); -#endif - if ( FT_ABS( prop->value.l ) > 0x7FFF ) - { - resolution_y = 0x7FFF; - FT_TRACE0(( "pcf_load_font: clamping Y resolution to value %d\n", - resolution_y )); - } - else - resolution_y = FT_ABS( (FT_Short)prop->value.l ); - } - - if ( bsize->y_ppem == 0 ) - { - bsize->y_ppem = bsize->size; - if ( resolution_y ) - bsize->y_ppem = FT_MulDiv( bsize->y_ppem, resolution_y, 72 ); - } - if ( resolution_x && resolution_y ) - bsize->x_ppem = FT_MulDiv( bsize->y_ppem, - resolution_x, - resolution_y ); - else - bsize->x_ppem = bsize->y_ppem; - } - - /* set up charset */ - { - PCF_Property charset_registry, charset_encoding; - - - charset_registry = pcf_find_property( face, "CHARSET_REGISTRY" ); - charset_encoding = pcf_find_property( face, "CHARSET_ENCODING" ); - - if ( charset_registry && charset_registry->isString && - charset_encoding && charset_encoding->isString ) - { - if ( FT_STRDUP( face->charset_encoding, - charset_encoding->value.atom ) || - FT_STRDUP( face->charset_registry, - charset_registry->value.atom ) ) - goto Exit; - } - } - } - - Exit: - if ( error ) - { - /* This is done to respect the behaviour of the original */ - /* PCF font driver. */ - error = FT_THROW( Invalid_File_Format ); - } - - return error; - } - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfread.h b/ThirdParty/freetype/src/pcf/pcfread.h deleted file mode 100644 index bed30e5..0000000 --- a/ThirdParty/freetype/src/pcf/pcfread.h +++ /dev/null @@ -1,45 +0,0 @@ -/* pcfread.h - - FreeType font driver for pcf fonts - - Copyright 2003 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifndef PCFREAD_H_ -#define PCFREAD_H_ - - -#include <ft2build.h> - -FT_BEGIN_HEADER - - FT_LOCAL( PCF_Property ) - pcf_find_property( PCF_Face face, - const FT_String* prop ); - -FT_END_HEADER - -#endif /* PCFREAD_H_ */ - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfutil.c b/ThirdParty/freetype/src/pcf/pcfutil.c deleted file mode 100644 index 045c42d..0000000 --- a/ThirdParty/freetype/src/pcf/pcfutil.c +++ /dev/null @@ -1,104 +0,0 @@ -/* - -Copyright 1990, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - -*/ -/* $XFree86: xc/lib/font/util/utilbitmap.c,v 1.3 1999/08/22 08:58:58 dawes Exp $ */ - -/* - * Author: Keith Packard, MIT X Consortium - */ - -/* Modified for use with FreeType */ - - -#include <ft2build.h> -#include "pcfutil.h" - - - /* - * Invert bit order within each BYTE of an array. - */ - - FT_LOCAL_DEF( void ) - BitOrderInvert( unsigned char* buf, - size_t nbytes ) - { - for ( ; nbytes > 0; nbytes--, buf++ ) - { - unsigned int val = *buf; - - - val = ( ( val >> 1 ) & 0x55 ) | ( ( val << 1 ) & 0xAA ); - val = ( ( val >> 2 ) & 0x33 ) | ( ( val << 2 ) & 0xCC ); - val = ( ( val >> 4 ) & 0x0F ) | ( ( val << 4 ) & 0xF0 ); - - *buf = (unsigned char)val; - } - } - - - /* - * Invert byte order within each 16-bits of an array. - */ - - FT_LOCAL_DEF( void ) - TwoByteSwap( unsigned char* buf, - size_t nbytes ) - { - for ( ; nbytes >= 2; nbytes -= 2, buf += 2 ) - { - unsigned char c; - - - c = buf[0]; - buf[0] = buf[1]; - buf[1] = c; - } - } - - /* - * Invert byte order within each 32-bits of an array. - */ - - FT_LOCAL_DEF( void ) - FourByteSwap( unsigned char* buf, - size_t nbytes ) - { - for ( ; nbytes >= 4; nbytes -= 4, buf += 4 ) - { - unsigned char c; - - - c = buf[0]; - buf[0] = buf[3]; - buf[3] = c; - - c = buf[1]; - buf[1] = buf[2]; - buf[2] = c; - } - } - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/pcfutil.h b/ThirdParty/freetype/src/pcf/pcfutil.h deleted file mode 100644 index be986e7..0000000 --- a/ThirdParty/freetype/src/pcf/pcfutil.h +++ /dev/null @@ -1,55 +0,0 @@ -/* pcfutil.h - - FreeType font driver for pcf fonts - - Copyright 2000, 2001, 2004 by - Francesco Zappa Nardelli - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -*/ - - -#ifndef PCFUTIL_H_ -#define PCFUTIL_H_ - - -#include <ft2build.h> -#include FT_CONFIG_CONFIG_H - - -FT_BEGIN_HEADER - - FT_LOCAL( void ) - BitOrderInvert( unsigned char* buf, - size_t nbytes ); - - FT_LOCAL( void ) - TwoByteSwap( unsigned char* buf, - size_t nbytes ); - - FT_LOCAL( void ) - FourByteSwap( unsigned char* buf, - size_t nbytes ); - -FT_END_HEADER - -#endif /* PCFUTIL_H_ */ - - -/* END */ diff --git a/ThirdParty/freetype/src/pcf/rules.mk b/ThirdParty/freetype/src/pcf/rules.mk deleted file mode 100644 index 1b55daf..0000000 --- a/ThirdParty/freetype/src/pcf/rules.mk +++ /dev/null @@ -1,82 +0,0 @@ -# -# FreeType 2 pcf driver configuration rules -# - - -# Copyright (C) 2000, 2001, 2003, 2008 by -# Francesco Zappa Nardelli -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. - - -# pcf driver directory -# -PCF_DIR := $(SRC_DIR)/pcf - - -PCF_COMPILE := $(CC) $(ANSIFLAGS) \ - $I$(subst /,$(COMPILER_SEP),$(PCF_DIR)) \ - $(INCLUDE_FLAGS) \ - $(FT_CFLAGS) - - -# pcf driver sources (i.e., C files) -# -PCF_DRV_SRC := $(PCF_DIR)/pcfdrivr.c \ - $(PCF_DIR)/pcfread.c \ - $(PCF_DIR)/pcfutil.c - -# pcf driver headers -# -PCF_DRV_H := $(PCF_DRV_SRC:%.c=%.h) \ - $(PCF_DIR)/pcf.h \ - $(PCF_DIR)/pcferror.h - -# pcf driver object(s) -# -# PCF_DRV_OBJ_M is used during `multi' builds -# PCF_DRV_OBJ_S is used during `single' builds -# -PCF_DRV_OBJ_M := $(PCF_DRV_SRC:$(PCF_DIR)/%.c=$(OBJ_DIR)/%.$O) -PCF_DRV_OBJ_S := $(OBJ_DIR)/pcf.$O - -# pcf driver source file for single build -# -PCF_DRV_SRC_S := $(PCF_DIR)/pcf.c - - -# pcf driver - single object -# -$(PCF_DRV_OBJ_S): $(PCF_DRV_SRC_S) $(PCF_DRV_SRC) $(FREETYPE_H) $(PCF_DRV_H) - $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $(PCF_DRV_SRC_S)) - - -# pcf driver - multiple objects -# -$(OBJ_DIR)/%.$O: $(PCF_DIR)/%.c $(FREETYPE_H) $(PCF_DRV_H) - $(PCF_COMPILE) $T$(subst /,$(COMPILER_SEP),$@ $<) - - -# update main driver object lists -# -DRV_OBJS_S += $(PCF_DRV_OBJ_S) -DRV_OBJS_M += $(PCF_DRV_OBJ_M) - - -# EOF |