160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/***************************************************************************/ 260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* */ 360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* cfftypes.h */ 460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* */ 560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* Basic OpenType/CFF type definitions and interface (specification */ 660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* only). */ 760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* */ 860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* Copyright 1996-2003, 2006-2008, 2010-2011, 2013 by */ 960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 1060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* */ 1160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* This file is part of the FreeType project, and may only be used, */ 1260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* modified, and distributed under the terms of the FreeType project */ 1360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 1460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* this file you indicate that you have read the license and */ 1560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* understand and accept it fully. */ 1660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/* */ 1760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson/***************************************************************************/ 18a27a886892fe3ec5edbc63c0b58e0a988623011aRoboErik 19a27a886892fe3ec5edbc63c0b58e0a988623011aRoboErik 2098c8add7f42469d797bf77e145e5fd091e5539dfIsaac Katzenelson#ifndef __CFFTYPES_H__ 2160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson#define __CFFTYPES_H__ 2260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 2360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 2460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson#include "../../include/ft2build.h" 2560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson#include "../../include/freetype/freetype.h" 2660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson#include "../../include/freetype/t1tables.h" 270ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson#include "../../include/freetype/internal/ftserv.h" 284afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung#include "../../include/freetype/internal/services/svpscmap.h" 2960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson#include "../../include/freetype/internal/pshints.h" 3060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 314afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 324afba187f8990ae2b3afaf8fcdb6039f231f4914James KungFT_BEGIN_HEADER 336bcafcf4f28c2d1053547694bd60b3dd9c7fbaa1Isaac Katzenelson 3460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 3547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson /*************************************************************************/ 3647f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson /* */ 3794a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein /* <Struct> */ 3894a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein /* CFF_IndexRec */ 3994a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein /* */ 4047f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson /* <Description> */ 4160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* A structure used to model a CFF Index table. */ 4260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* */ 4360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* <Fields> */ 4460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* stream :: The source input stream. */ 4560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* */ 4660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* start :: The position of the first index byte in the */ 4760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* input stream. */ 4860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* */ 4960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* count :: The number of elements in the index. */ 5060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* */ 514afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* off_size :: The size in bytes of object offsets in index. */ 524afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* */ 534afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* data_offset :: The position of first data byte in the index's */ 544afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* bytes. */ 554afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* */ 564afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* data_size :: The size of the data table in this index. */ 574afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* */ 584afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* offsets :: A table of element offsets in the index. Must be */ 594afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* loaded explicitly. */ 604afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* */ 614afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* bytes :: If the index is loaded in memory, its bytes. */ 624afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung /* */ 634afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung typedef struct CFF_IndexRec_ 644afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung { 654afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung FT_Stream stream; 664afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung FT_ULong start; 674afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung FT_UInt count; 6860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte off_size; 6960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong data_offset; 7060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong data_size; 7160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 7260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong* offsets; 7360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte* bytes; 7460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 7547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson } CFF_IndexRec, *CFF_Index; 7660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 7794a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein 7860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson typedef struct CFF_EncodingRec_ 7960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson { 8060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt format; 8160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong offset; 8260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 8360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt count; 8460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UShort sids [256]; /* avoid dynamic allocations */ 8594a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein FT_UShort codes[256]; 8694a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein 8760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson } CFF_EncodingRec, *CFF_Encoding; 88a27a886892fe3ec5edbc63c0b58e0a988623011aRoboErik 89a27a886892fe3ec5edbc63c0b58e0a988623011aRoboErik 9098c8add7f42469d797bf77e145e5fd091e5539dfIsaac Katzenelson typedef struct CFF_CharsetRec_ 916bcafcf4f28c2d1053547694bd60b3dd9c7fbaa1Isaac Katzenelson { 9260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 9360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt format; 9460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong offset; 9547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson 9647f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UShort* sids; 9747f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UShort* cids; /* the inverse mapping of `sids'; only needed */ 9847f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson /* for CID-keyed fonts */ 9947f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt max_cid; 10047f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt num_glyphs; 10147f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson 10247f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson } CFF_CharsetRec, *CFF_Charset; 10347f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson 10447f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson 10547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson typedef struct CFF_FontRecDictRec_ 10647f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson { 10747f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt version; 10860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt notice; 10947f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt copyright; 11047f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt full_name; 11147f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt family_name; 11247f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_UInt weight; 11347f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Bool is_fixed_pitch; 11447f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Fixed italic_angle; 11547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Fixed underline_position; 11647f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Fixed underline_thickness; 11760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Int paint_type; 11860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Int charstring_type; 11960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Matrix font_matrix; 12060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Bool has_font_matrix; 12147f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_ULong units_per_em; /* temporarily used as scaling value also */ 12247f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Vector font_offset; 12347f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_ULong unique_id; 12447f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_BBox font_bbox; 12547f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_Pos stroke_width; 12647f6cc6909665e4f6f8d85f29bfd588688463c66Isaac Katzenelson FT_ULong charset_offset; 1270ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson FT_ULong encoding_offset; 1280ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson FT_ULong charstrings_offset; 1290ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson FT_ULong private_offset; 1300ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson FT_ULong private_size; 1310ef732f240516f9f8b8add982f82244e01ec509bIsaac Katzenelson FT_Long synthetic_base; 132ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_UInt embedded_postscript; 1336bcafcf4f28c2d1053547694bd60b3dd9c7fbaa1Isaac Katzenelson 134ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn /* these should only be used for the top-level font dictionary */ 135ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_UInt cid_registry; 136ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_UInt cid_ordering; 137ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_Long cid_supplement; 138ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn 139ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_Long cid_font_version; 140ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_Long cid_font_revision; 141ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_Long cid_font_type; 142ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_ULong cid_count; 143ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_ULong cid_uid_base; 144ea032a06284975291cfe747c90e57bdf413c3776Andrew Flynn FT_ULong cid_fd_array_offset; 14553aad911d4d901d19afba320cc626da2dab68025Isaac Katzenelson FT_ULong cid_fd_select_offset; 14653aad911d4d901d19afba320cc626da2dab68025Isaac Katzenelson FT_UInt cid_font_name; 14753aad911d4d901d19afba320cc626da2dab68025Isaac Katzenelson 14815b4dcc873336ceb35fa335410b467aed3a834eaRoboErik } CFF_FontRecDictRec, *CFF_FontRecDict; 14953aad911d4d901d19afba320cc626da2dab68025Isaac Katzenelson 15053aad911d4d901d19afba320cc626da2dab68025Isaac Katzenelson 15160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson typedef struct CFF_PrivateRec_ 15260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson { 15360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte num_blue_values; 15460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte num_other_blues; 15560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte num_family_blues; 15694a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein FT_Byte num_family_other_blues; 1577ef2981ab9ad32a6818b36cefbd39f070ba708edIsaac Katzenelson 15894a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein FT_Pos blue_values[14]; 15994a1f1a1020f0e06df42ffe6edc315106cb45ecdSam Blitzstein FT_Pos other_blues[10]; 16081d45a9c5f53a44aa2e2bfb22ba99e8e8d34dc00Michael Chan FT_Pos family_blues[14]; 16160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos family_other_blues[10]; 16260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 16360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Fixed blue_scale; 16460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos blue_shift; 16560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos blue_fuzz; 16660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos standard_width; 16760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos standard_height; 16860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 16960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte num_snap_widths; 17060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte num_snap_heights; 17160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos snap_widths[13]; 17260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos snap_heights[13]; 17360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Bool force_bold; 17460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Fixed force_bold_threshold; 17560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Int lenIV; 17660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Int language_group; 17760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Fixed expansion_factor; 17860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Long initial_random_seed; 17960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_ULong local_subrs_offset; 18060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos default_width; 18160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Pos nominal_width; 18260f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 18360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson } CFF_PrivateRec, *CFF_Private; 18460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 1854afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung 1864afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung typedef struct CFF_FDSelectRec_ 18760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson { 18860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte format; 18960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt range_count; 19060f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 19160f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* that's the table, taken from the file `as is' */ 1924afba187f8990ae2b3afaf8fcdb6039f231f4914James Kung FT_Byte* data; 19360f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt data_size; 19460f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 19560f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson /* small cache for format 3 only */ 19660f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt cache_first; 19760f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_UInt cache_count; 19860f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson FT_Byte cache_fd; 19960f01c23282284e691fcd24918ea67087540f95dIsaac Katzenelson 200 } CFF_FDSelectRec, *CFF_FDSelect; 201 202 203 /* A SubFont packs a font dict and a private dict together. They are */ 204 /* needed to support CID-keyed CFF fonts. */ 205 typedef struct CFF_SubFontRec_ 206 { 207 CFF_FontRecDictRec font_dict; 208 CFF_PrivateRec private_dict; 209 210 CFF_IndexRec local_subrs_index; 211 FT_Byte** local_subrs; /* array of pointers into Local Subrs INDEX data */ 212 213 } CFF_SubFontRec, *CFF_SubFont; 214 215 216#define CFF_MAX_CID_FONTS 256 217 218 219 typedef struct CFF_FontRec_ 220 { 221 FT_Stream stream; 222 FT_Memory memory; 223 FT_UInt num_faces; 224 FT_UInt num_glyphs; 225 226 FT_Byte version_major; 227 FT_Byte version_minor; 228 FT_Byte header_size; 229 FT_Byte absolute_offsize; 230 231 232 CFF_IndexRec name_index; 233 CFF_IndexRec top_dict_index; 234 CFF_IndexRec global_subrs_index; 235 236 CFF_EncodingRec encoding; 237 CFF_CharsetRec charset; 238 239 CFF_IndexRec charstrings_index; 240 CFF_IndexRec font_dict_index; 241 CFF_IndexRec private_index; 242 CFF_IndexRec local_subrs_index; 243 244 FT_String* font_name; 245 246 /* array of pointers into Global Subrs INDEX data */ 247 FT_Byte** global_subrs; 248 249 /* array of pointers into String INDEX data stored at string_pool */ 250 FT_UInt num_strings; 251 FT_Byte** strings; 252 FT_Byte* string_pool; 253 254 CFF_SubFontRec top_font; 255 FT_UInt num_subfonts; 256 CFF_SubFont subfonts[CFF_MAX_CID_FONTS]; 257 258 CFF_FDSelectRec fd_select; 259 260 /* interface to PostScript hinter */ 261 PSHinter_Service pshinter; 262 263 /* interface to Postscript Names service */ 264 FT_Service_PsCMaps psnames; 265 266 /* since version 2.3.0 */ 267 PS_FontInfoRec* font_info; /* font info dictionary */ 268 269 /* since version 2.3.6 */ 270 FT_String* registry; 271 FT_String* ordering; 272 273 /* since version 2.4.12 */ 274 FT_Generic cf2_instance; 275 276 } CFF_FontRec, *CFF_Font; 277 278 279FT_END_HEADER 280 281#endif /* __CFFTYPES_H__ */ 282 283 284/* END */ 285