1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* svpscmap.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* The FreeType PostScript charmap service (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 2003, 2006, 2009, 2012 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __SVPSCMAP_H__ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __SVPSCMAP_H__ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../ftobjs.h" 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_SERVICE_ID_POSTSCRIPT_CMAPS "postscript-cmaps" 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Adobe glyph name to unicode value. 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt32 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Unicode_ValueFunc)( const char* glyph_name ); 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Macintosh name id to glyph name. NULL if invalid index. 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef const char* 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Macintosh_NameFunc)( FT_UInt name_index ); 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Adobe standard string ID to glyph name. NULL if invalid index. 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef const char* 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Adobe_Std_StringsFunc)( FT_UInt string_index ); 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * Simple unicode -> glyph index charmap built from font glyph names 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * table. 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_UniMap_ 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 unicode; /* bit 31 set: is glyph variant */ 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyph_index; 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_UniMap; 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_UnicodesRec_* PS_Unicodes; 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct PS_UnicodesRec_ 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_CMapRec cmap; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_maps; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_UniMap* maps; 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } PS_UnicodesRec; 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A function which returns a glyph name for a given index. Returns 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * NULL if invalid index. 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef const char* 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_GetGlyphNameFunc)( FT_Pointer data, 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt string_index ); 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * A function used to release the glyph name returned by 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * PS_GetGlyphNameFunc, when needed 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_FreeGlyphNameFunc)( FT_Pointer data, 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* name ); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_Error 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Unicodes_InitFunc)( FT_Memory memory, 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Unicodes unicodes, 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_glyphs, 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_GetGlyphNameFunc get_glyph_name, 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_FreeGlyphNameFunc free_glyph_name, 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pointer glyph_data ); 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Unicodes_CharIndexFunc)( PS_Unicodes unicodes, 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 unicode ); 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_UInt32 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*PS_Unicodes_CharNextFunc)( PS_Unicodes unicodes, 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 *unicode ); 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_DEFINE_SERVICE( PsCMaps ) 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Unicode_ValueFunc unicode_value; 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Unicodes_InitFunc unicodes_init; 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Unicodes_CharIndexFunc unicodes_char_index; 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Unicodes_CharNextFunc unicodes_char_next; 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Macintosh_NameFunc macintosh_name; 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov PS_Adobe_Std_StringsFunc adobe_std_strings; 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const unsigned short* adobe_std_encoding; 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const unsigned short* adobe_expert_encoding; 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef FT_CONFIG_OPTION_PIC 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \ 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicode_value_, \ 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_init_, \ 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_char_index_, \ 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_char_next_, \ 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov macintosh_name_, \ 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_std_strings_, \ 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_std_encoding_, \ 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_expert_encoding_ ) \ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static const FT_Service_PsCMapsRec class_ = \ 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicode_value_, unicodes_init_, \ 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_char_index_, unicodes_char_next_, macintosh_name_, \ 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_std_strings_, adobe_std_encoding_, adobe_expert_encoding_ \ 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov }; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* FT_CONFIG_OPTION_PIC */ 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_DEFINE_SERVICE_PSCMAPSREC( class_, \ 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicode_value_, \ 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_init_, \ 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_char_index_, \ 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov unicodes_char_next_, \ 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov macintosh_name_, \ 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_std_strings_, \ 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_std_encoding_, \ 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov adobe_expert_encoding_ ) \ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void \ 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Init_Class_ ## class_( FT_Library library, \ 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Service_PsCMapsRec* clazz ) \ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { \ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UNUSED( library ); \ 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov \ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->unicode_value = unicode_value_; \ 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->unicodes_init = unicodes_init_; \ 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->unicodes_char_index = unicodes_char_index_; \ 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->unicodes_char_next = unicodes_char_next_; \ 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->macintosh_name = macintosh_name_; \ 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->adobe_std_strings = adobe_std_strings_; \ 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->adobe_std_encoding = adobe_std_encoding_; \ 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov clazz->adobe_expert_encoding = adobe_expert_encoding_; \ 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* FT_CONFIG_OPTION_PIC */ 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __SVPSCMAP_H__ */ 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 178