1 /****************************************************************************\ 2 Part of the XeTeX typesetting system 3 Copyright (c) 1994-2008 by SIL International 4 Copyright (c) 2009, 2011 by Jonathan Kew 5 Copyright (c) 2012, 2013 by Jiang Jiang 6 Copyright (c) 2012-2015 by Khaled Hosny 7 8 SIL Author(s): Jonathan Kew 9 10 Permission is hereby granted, free of charge, to any person obtaining 11 a copy of this software and associated documentation files (the 12 "Software"), to deal in the Software without restriction, including 13 without limitation the rights to use, copy, modify, merge, publish, 14 distribute, sublicense, and/or sell copies of the Software, and to 15 permit persons to whom the Software is furnished to do so, subject to 16 the following conditions: 17 18 The above copyright notice and this permission notice shall be 19 included in all copies or substantial portions of the Software. 20 21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 22 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 23 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 24 NONINFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE 25 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 26 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 27 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28 29 Except as contained in this notice, the name of the copyright holders 30 shall not be used in advertising or otherwise to promote the sale, 31 use or other dealings in this Software without prior written 32 authorization from the copyright holders. 33 \****************************************************************************/ 34 35 #ifndef __XETEXEXT_H 36 #define __XETEXEXT_H 37 38 #include <unicode/utypes.h> 39 40 #ifndef XETEX_UNICODE_FILE_DEFINED 41 typedef struct UFILE* unicodefile; 42 #endif 43 44 #define AAT_FONT_FLAG 0xFFFFU 45 #define OTGR_FONT_FLAG 0xFFFEU 46 47 #define FONT_FLAGS_COLORED 0x01 48 #define FONT_FLAGS_VERTICAL 0x02 49 50 /* some typedefs that XeTeX uses - on Mac OS, we get these from Apple headers, 51 but otherwise we'll need these substitute definitions */ 52 53 #ifdef XETEX_MAC 54 #include <CoreFoundation/CoreFoundation.h> 55 #include <ApplicationServices/ApplicationServices.h> 56 #else 57 typedef int32_t Fixed; 58 typedef struct { 59 Fixed x; 60 Fixed y; 61 } FixedPoint; 62 #endif 63 64 typedef uint32_t OTTag; 65 typedef uint16_t GlyphID; 66 typedef struct { 67 float x; 68 float y; 69 } FloatPoint; 70 71 72 /* these are also in xetex.web and must correspond! */ 73 74 #define pdfbox_crop 1 75 #define pdfbox_media 2 76 #define pdfbox_bleed 3 77 #define pdfbox_trim 4 78 #define pdfbox_art 5 79 80 81 #define XeTeX_count_glyphs 1 82 83 #define XeTeX_count_features 8 84 #define XeTeX_feature_code 9 85 #define XeTeX_find_feature_by_name 10 86 #define XeTeX_is_exclusive_feature 11 87 #define XeTeX_count_selectors 12 88 #define XeTeX_selector_code 13 89 #define XeTeX_find_selector_by_name 14 90 #define XeTeX_is_default_selector 15 91 92 #define XeTeX_OT_count_scripts 16 93 #define XeTeX_OT_count_languages 17 94 #define XeTeX_OT_count_features 18 95 #define XeTeX_OT_script_code 19 96 #define XeTeX_OT_language_code 20 97 #define XeTeX_OT_feature_code 21 98 99 #define XeTeX_map_char_to_glyph_code 22 100 101 #define XeTeX_feature_name 8 102 #define XeTeX_selector_name 9 103 104 105 /* definitions used to access info in a native_word_node; must correspond with defines in xetex.web */ 106 #define width_offset 1 107 #define depth_offset 2 108 #define height_offset 3 109 #define native_info_offset 4 110 #define native_glyph_info_offset 5 111 112 #define node_width(node) node[width_offset].cint 113 #define node_depth(node) node[depth_offset].cint 114 #define node_height(node) node[height_offset].cint 115 #define native_length(node) node[native_info_offset].qqqq.b2 116 #define native_font(node) node[native_info_offset].qqqq.b1 117 #define native_glyph_count(node) node[native_info_offset].qqqq.b3 118 #define native_glyph_info_ptr(node) node[native_glyph_info_offset].ptr 119 #define native_glyph_info_size 10 /* info for each glyph is location (FixedPoint) + glyph ID (uint16_t) */ 120 121 #define native_glyph(p) native_length(p) /* glyph ID field in a glyph_node */ 122 123 /* OT-related constants we need */ 124 #define kGSUB HB_TAG('G','S','U','B') 125 #define kGPOS HB_TAG('G','P','O','S') 126 127 typedef struct 128 { 129 float xMin; 130 float yMin; 131 float xMax; 132 float yMax; 133 } GlyphBBox; 134 135 136 /* For Unicode encoding form interpretation... */ 137 extern const uint32_t offsetsFromUTF8[6]; 138 extern const uint8_t bytesFromUTF8[256]; 139 extern const uint8_t firstByteMark[7]; 140 141 extern const int halfShift; 142 extern const uint32_t halfBase; 143 extern const uint32_t halfMask; 144 extern const uint32_t kSurrogateHighStart; 145 extern const uint32_t kSurrogateHighEnd; 146 extern const uint32_t kSurrogateLowStart; 147 extern const uint32_t kSurrogateLowEnd; 148 extern const uint32_t byteMask; 149 extern const uint32_t byteMark; 150 151 extern const char *papersize; 152 extern const char *outputdriver; 153 154 /* gFreeTypeLibrary is defined in XeTeXFontInst_FT2.cpp, 155 * also used in XeTeXFontMgr_FC.cpp and XeTeX_ext.c. */ 156 #include <ft2build.h> 157 #include FT_FREETYPE_H 158 #ifdef __cplusplus 159 extern "C" { 160 #endif 161 extern FT_Library gFreeTypeLibrary; 162 #ifdef __cplusplus 163 } 164 #endif 165 166 #include <stdio.h> /* for FILE */ 167 168 #ifdef WIN32 169 #undef fputs 170 #undef putc 171 #define fputs win32_fputs 172 #define putc win32_putc 173 #endif 174 175 #include "trans.h" 176 177 #ifdef HAVE_STDBOOL_H 178 # include <stdbool.h> 179 #else 180 /* boolean is an enum type from kpathsea/types.h loaded in 181 kpathsea/kpathsea.h, use it as fallback */ 182 #ifndef __cplusplus 183 # define bool boolean 184 #endif 185 #endif 186 187 #include "XeTeXLayoutInterface.h" 188 189 #ifdef XETEX_MAC 190 extern const CFStringRef kXeTeXEmboldenAttributeName; 191 #endif 192 193 #ifdef __cplusplus 194 extern "C" { 195 #endif 196 void initversionstring(char **versions); 197 198 void setinputfileencoding(unicodefile f, integer mode, integer encodingData); 199 void uclose(unicodefile f); 200 void linebreakstart(int f, integer localeStrNum, const uint16_t* text, integer textLength); 201 int linebreaknext(); 202 int getencodingmodeandinfo(integer* info); 203 void printutf8str(const unsigned char* str, int len); 204 void printchars(const unsigned short* str, int len); 205 void* findnativefont(unsigned char* name, integer scaled_size); 206 void releasefontengine(void* engine, int type_flag); 207 int readCommonFeatures(const char* feat, const char* end, float* extend, float* slant, float* embolden, float* letterspace, uint32_t* rgbValue); 208 209 /* the metrics params here are really TeX 'scaled' values, but that typedef isn't available every place this is included */ 210 void otgetfontmetrics(void* engine, integer* ascent, integer* descent, integer* xheight, integer* capheight, integer* slant); 211 void getnativecharheightdepth(integer font, integer ch, integer* height, integer* depth); 212 void getnativecharsidebearings(integer font, integer ch, integer* lsb, integer* rsb); 213 214 /* single-purpose metrics accessors */ 215 integer getnativecharwd(integer font, integer ch); 216 integer getnativecharht(integer font, integer ch); 217 integer getnativechardp(integer font, integer ch); 218 integer getnativecharic(integer font, integer ch); 219 220 integer getglyphbounds(integer font, integer edge, integer gid); 221 222 integer otfontget(integer what, void* engine); 223 integer otfontget1(integer what, void* engine, integer param); 224 integer otfontget2(integer what, void* engine, integer param1, integer param2); 225 integer otfontget3(integer what, void* engine, integer param1, integer param2, integer param3); 226 int makeXDVGlyphArrayData(void* p); 227 int makefontdef(integer f); 228 int applymapping(void* cnv, const uint16_t* txtPtr, int txtLen); 229 void store_justified_native_glyphs(void* node); 230 void measure_native_node(void* node, int use_glyph_metrics); 231 Fixed get_native_italic_correction(void* node); 232 Fixed get_native_glyph_italic_correction(void* node); 233 integer get_native_word_cp(void* node, int side); 234 void measure_native_glyph(void* node, int use_glyph_metrics); 235 integer mapchartoglyph(integer font, integer ch); 236 integer mapglyphtoindex(integer font); 237 integer getfontcharrange(integer font, int first); 238 void printglyphname(integer font, integer gid); 239 uint16_t get_native_glyph(void* pNode, unsigned index); 240 241 void grprintfontname(integer what, void* pEngine, integer param1, integer param2); 242 integer grfontgetnamed(integer what, void* pEngine); 243 integer grfontgetnamed1(integer what, void* pEngine, integer param); 244 245 double read_double(const char** s); 246 unsigned int read_rgb_a(const char** cp); 247 248 int countpdffilepages(); 249 int find_pic_file(char** path, realrect* bounds, int pdfBoxType, int page); 250 int u_open_in(unicodefile* f, integer filefmt, const char* fopen_mode, integer mode, integer encodingData); 251 int open_dvi_output(FILE** fptr); 252 int dviclose(FILE* fptr); 253 int get_uni_c(UFILE* f); 254 int input_line(UFILE* f); 255 void makeutf16name(); 256 257 void terminatefontmanager(); 258 int maketexstring(const char* s); 259 260 void checkfortfmfontmapping(); 261 void* loadtfmfontmapping(); 262 int applytfmfontmapping(void* mapping, int c); 263 264 #ifndef XETEX_MAC 265 typedef void* CFDictionaryRef; /* dummy declaration just so the stubs can compile */ 266 #endif 267 268 int aatfontget(int what, CFDictionaryRef attrs); 269 int aatfontget1(int what, CFDictionaryRef attrs, int param); 270 int aatfontget2(int what, CFDictionaryRef attrs, int param1, int param2); 271 int aatfontgetnamed(int what, CFDictionaryRef attrs); 272 int aatfontgetnamed1(int what, CFDictionaryRef attrs, int param); 273 void aatprintfontname(int what, CFDictionaryRef attrs, int param1, int param2); 274 /* the metrics params here are really TeX 'scaled' (or MacOS 'Fixed') values, but that typedef isn't available every place this is included */ 275 void aatgetfontmetrics(CFDictionaryRef attrs, integer* ascent, integer* descent, integer* xheight, integer* capheight, integer* slant); 276 277 void set_cp_code(int fontNum, unsigned int code, int side, int value); 278 int get_cp_code(int fontNum, unsigned int code, int side); 279 280 #ifdef XETEX_MAC 281 282 /* functions in XeTeX_mac.c */ 283 void* loadAATfont(CTFontDescriptorRef descriptor, integer scaled_size, const char* cp1); 284 void DoAATLayout(void* node, int justify); 285 void GetGlyphBBox_AAT(CFDictionaryRef fontAttrs, uint16_t gid, GlyphBBox* bbox); 286 double GetGlyphWidth_AAT(CFDictionaryRef fontAttrs, uint16_t gid); 287 void GetGlyphHeightDepth_AAT(CFDictionaryRef fontAttrs, uint16_t gid, float* ht, float* dp); 288 void GetGlyphSidebearings_AAT(CFDictionaryRef fontAttrs, uint16_t gid, float* lsb, float* rsb); 289 double GetGlyphItalCorr_AAT(CFDictionaryRef fontAttrs, uint16_t gid); 290 int MapCharToGlyph_AAT(CFDictionaryRef fontAttrs, UInt32 ch); 291 int MapGlyphToIndex_AAT(CFDictionaryRef attributes, const char* glyphName); 292 char* GetGlyphNameFromCTFont(CTFontRef ctFontRef, uint16_t gid, int* len); 293 CFDictionaryRef findDictionaryInArray(CFArrayRef array, const void* nameKey, const char* name, int nameLength); 294 CFDictionaryRef findDictionaryInArrayWithIdentifier(CFArrayRef array, const void* identifierKey, int identifier); 295 CFNumberRef findSelectorByName(CFDictionaryRef feature, const char* name, int nameLength); 296 char* getNameFromCTFont(CTFontRef ctFontRef, CFStringRef nameKey); 297 char* getFileNameFromCTFont(CTFontRef ctFontRef, uint32_t* index); 298 int GetFontCharRange_AAT(CFDictionaryRef fontAttrs, int reqFirst); 299 CTFontRef fontFromAttributes(CFDictionaryRef fontAttrs); 300 CTFontRef fontFromInteger(integer font); 301 #endif 302 #ifdef __cplusplus 303 }; 304 #endif 305 306 #ifdef __cplusplus 307 extern "C" { 308 #endif 309 double Fix2D(Fixed f); 310 Fixed D2Fix(double d); 311 #ifdef __cplusplus 312 }; 313 #endif 314 315 // copied from xetex.web 316 #define LEFT_SIDE 0 317 #define RIGHT_SIDE 1 318 319 #endif /* __XETEX_EXT_H */ 320