1 /*************************************************************************** 2 * 3 * Copyright (C) 1998-2008, International Business Machines 4 * Corporation and others. All Rights Reserved. 5 * 6 ************************************************************************/ 7 8 #ifndef __SFNT_H 9 #define __SFNT_H 10 11 #include "LETypes.h" 12 13 U_NAMESPACE_USE 14 15 #ifndef ANY_NUMBER 16 #define ANY_NUMBER 1 17 #endif 18 19 struct DirectoryEntry 20 { 21 le_uint32 tag; 22 le_uint32 checksum; 23 le_uint32 offset; 24 le_uint32 length; 25 }; 26 27 #ifndef XP_CPLUSPLUS 28 typedef struct DirectoryEntry DirectoryEntry; 29 #endif 30 31 struct SFNTDirectory 32 { 33 le_uint32 scalerType; 34 le_uint16 numTables; 35 le_uint16 searchRange; 36 le_uint16 entrySelector; 37 le_uint16 rangeShift; 38 DirectoryEntry tableDirectory[ANY_NUMBER]; 39 }; 40 41 #ifndef XP_CPLUSPLUS 42 typedef struct SFNTDirectory SFNTDirectory; 43 #endif 44 45 46 struct CMAPEncodingSubtableHeader 47 { 48 le_uint16 platformID; 49 le_uint16 platformSpecificID; 50 le_uint32 encodingOffset; 51 }; 52 53 #ifndef XP_CPLUSPLUS 54 typedef struct CMAPEncodingSubtableHeader CMAPEncodingSubtableHeader; 55 #endif 56 57 struct CMAPTable 58 { 59 le_uint16 version; 60 le_uint16 numberSubtables; 61 CMAPEncodingSubtableHeader encodingSubtableHeaders[ANY_NUMBER]; 62 }; 63 64 #ifndef XP_CPLUSPLUS 65 typedef struct CMAPTable CMAPTable; 66 #endif 67 68 struct CMAPEncodingSubtable 69 { 70 le_uint16 format; 71 le_uint16 length; 72 le_uint16 language; 73 }; 74 75 #ifndef XP_CPLUSPLUS 76 typedef struct CMAPEncodingSubtable CMAPEncodingSubtable; 77 #endif 78 79 #ifdef XP_CPLUSPLUS 80 struct CMAPFormat0Encoding : CMAPEncodingSubtable 81 { 82 le_uint8 glyphIndexArray[256]; 83 }; 84 #else 85 struct CMAPFormat0Encoding 86 { 87 CMAPEncodingSubtable base; 88 89 le_uint8 glyphIndexArray[256]; 90 }; 91 92 typedef struct CMAPFormat0Encoding CMAPFormat0Encoding; 93 #endif 94 95 struct CMAPFormat2Subheader 96 { 97 le_uint16 firstCode; 98 le_uint16 entryCount; 99 le_int16 idDelta; 100 le_uint16 idRangeOffset; 101 }; 102 103 #ifndef XP_CPLUSPLUS 104 typedef struct CMAPFormat2Subheader CMAPFormat2Subheader; 105 #endif 106 107 #ifdef XP_CPLUSPLUS 108 struct CMAPFormat2Encoding : CMAPEncodingSubtable 109 { 110 le_uint16 subHeadKeys[256]; 111 CMAPFormat2Subheader subheaders[ANY_NUMBER]; 112 }; 113 #else 114 struct CMAPFormat2Encoding 115 { 116 CMAPEncodingSubtable base; 117 118 le_uint16 subHeadKeys[256]; 119 CMAPFormat2Subheader subheaders[ANY_NUMBER]; 120 }; 121 122 typedef struct CMAPFormat2Encoding CMAPFormat2Encoding; 123 #endif 124 125 #ifdef XP_CPLUSPLUS 126 struct CMAPFormat4Encoding : CMAPEncodingSubtable 127 { 128 le_uint16 segCountX2; 129 le_uint16 searchRange; 130 le_uint16 entrySelector; 131 le_uint16 rangeShift; 132 le_uint16 endCodes[ANY_NUMBER]; 133 /* 134 le_uint16 reservedPad; 135 le_uint16 startCodes[ANY_NUMBER]; 136 le_uint16 idDelta[ANY_NUMBER]; 137 le_uint16 idRangeOffset[ANY_NUMBER]; 138 le_uint16 glyphIndexArray[ANY_NUMBER]; 139 */ 140 }; 141 #else 142 struct CMAPFormat4Encoding 143 { 144 CMAPEncodingSubtable base; 145 146 le_uint16 segCountX2; 147 le_uint16 searchRange; 148 le_uint16 entrySelector; 149 le_uint16 rangeShift; 150 le_uint16 endCodes[ANY_NUMBER]; 151 /* 152 // le_uint16 reservedPad; 153 // le_uint16 startCodes[ANY_NUMBER]; 154 // le_uint16 idDelta[ANY_NUMBER]; 155 // le_uint16 idRangeOffset[ANY_NUMBER]; 156 // le_uint16 glyphIndexArray[ANY_NUMBER]; 157 */ 158 }; 159 160 typedef struct CMAPFormat4Encoding CMAPFormat4Encoding; 161 #endif 162 163 #ifdef XP_CPLUSPLUS 164 struct CMAPFormat6Encoding : CMAPEncodingSubtable 165 { 166 le_uint16 firstCode; 167 le_uint16 entryCount; 168 le_uint16 glyphIndexArray[ANY_NUMBER]; 169 }; 170 #else 171 struct CMAPFormat6Encoding 172 { 173 CMAPEncodingSubtable base; 174 175 le_uint16 firstCode; 176 le_uint16 entryCount; 177 le_uint16 glyphIndexArray[ANY_NUMBER]; 178 }; 179 180 typedef struct CMAPFormat6Encoding CMAPFormat6Encoding; 181 #endif 182 183 struct CMAPEncodingSubtable32 184 { 185 le_uint32 format; 186 le_uint32 length; 187 le_uint32 language; 188 }; 189 190 #ifndef XP_CPLUSPLUS 191 typedef struct CMAPEncodingSubtable32 CMAPEncodingSubtable32; 192 #endif 193 194 struct CMAPGroup 195 { 196 le_uint32 startCharCode; 197 le_uint32 endCharCode; 198 le_uint32 startGlyphCode; 199 }; 200 201 #ifndef XP_CPLUSPLUS 202 typedef struct CMAPGroup CMAPGroup; 203 #endif 204 205 #ifdef XP_CPLUSPLUS 206 struct CMAPFormat8Encoding : CMAPEncodingSubtable32 207 { 208 le_uint32 is32[65536/32]; 209 le_uint32 nGroups; 210 CMAPGroup groups[ANY_NUMBER]; 211 }; 212 #else 213 struct CMAPFormat8Encoding 214 { 215 CMAPEncodingSubtable32 base; 216 217 le_uint32 is32[65536/32]; 218 le_uint32 nGroups; 219 CMAPGroup groups[ANY_NUMBER]; 220 }; 221 222 typedef struct CMAPFormat8Encoding CMAPFormat8Encoding; 223 #endif 224 225 #ifdef XP_CPLUSPLUS 226 struct CMAPFormat10Encoding : CMAPEncodingSubtable32 227 { 228 le_uint32 startCharCode; 229 le_uint32 numCharCodes; 230 le_uint16 glyphs[ANY_NUMBER]; 231 }; 232 #else 233 struct CMAPFormat10Encoding 234 { 235 CMAPEncodingSubtable32 base; 236 237 le_uint32 startCharCode; 238 le_uint32 numCharCodes; 239 le_uint16 glyphs[ANY_NUMBER]; 240 }; 241 242 typedef struct CMAPFormat10Encoding CMAPFormat10Encoding; 243 #endif 244 245 #ifdef XP_CPLUSPLUS 246 struct CMAPFormat12Encoding : CMAPEncodingSubtable32 247 { 248 le_uint32 nGroups; 249 CMAPGroup groups[ANY_NUMBER]; 250 }; 251 #else 252 struct CMAPFormat12Encoding 253 { 254 CMAPEncodingSubtable32 base; 255 256 le_uint32 nGroups; 257 CMAPGroup groups[ANY_NUMBER]; 258 }; 259 260 typedef struct CMAPFormat12Encoding CMAPFormat12Encoding; 261 #endif 262 263 typedef le_int32 fixed; 264 265 struct BigDate 266 { 267 le_uint32 bc; 268 le_uint32 ad; 269 }; 270 271 #ifndef XP_CPLUSPLUS 272 typedef struct BigDate BigDate; 273 #endif 274 275 struct HEADTable 276 { 277 fixed version; 278 fixed fontRevision; 279 le_uint32 checksumAdjustment; 280 le_uint32 magicNumber; 281 le_uint16 flags; 282 le_uint16 unitsPerEm; 283 BigDate created; 284 BigDate modified; 285 le_int16 xMin; 286 le_int16 yMin; 287 le_int16 xMax; 288 le_int16 yMax; 289 le_int16 lowestRecPPEM; 290 le_int16 fontDirectionHint; 291 le_int16 indexToLocFormat; 292 le_int16 glyphDataFormat; 293 }; 294 295 #ifndef XP_CPLUSPLUS 296 typedef struct HEADTable HEADTable; 297 #endif 298 299 struct MAXPTable 300 { 301 fixed version; 302 le_uint16 numGlyphs; 303 le_uint16 maxPoints; 304 le_uint16 maxContours; 305 le_uint16 maxComponentPoints; 306 le_uint16 maxComponentContours; 307 le_uint16 maxZones; 308 le_uint16 maxTwilightPoints; 309 le_uint16 maxStorage; 310 le_uint16 maxFunctionDefs; 311 le_uint16 maxInstructionDefs; 312 le_uint16 maxStackElements; 313 le_uint16 maxSizeOfInstructions; 314 le_uint16 maxComponentElements; 315 le_uint16 maxComponentDepth; 316 }; 317 318 #ifndef XP_CPLUSPLUS 319 typedef struct MAXPTable MAXPTable; 320 #endif 321 322 struct HHEATable 323 { 324 fixed version; 325 le_int16 ascent; 326 le_int16 descent; 327 le_int16 lineGap; 328 le_uint16 advanceWidthMax; 329 le_int16 minLeftSideBearing; 330 le_int16 minRightSideBearing; 331 le_int16 xMaxExtent; 332 le_int16 caretSlopeRise; 333 le_int16 caretSlopeRun; 334 le_int16 caretOffset; 335 le_int16 reserved1; 336 le_int16 reserved2; 337 le_int16 reserved3; 338 le_int16 reserved4; 339 le_int16 metricDataFormat; 340 le_uint16 numOfLongHorMetrics; 341 }; 342 343 #ifndef XP_CPLUSPLUS 344 typedef struct HHEATable HHEATable; 345 #endif 346 347 struct LongHorMetric 348 { 349 le_uint16 advanceWidth; 350 le_int16 leftSideBearing; 351 }; 352 353 #ifndef XP_CPLUSPLUS 354 typedef struct LongHorMetric LongHorMetric; 355 #endif 356 357 struct HMTXTable 358 { 359 LongHorMetric hMetrics[ANY_NUMBER]; /* ANY_NUMBER = numOfLongHorMetrics from hhea table */ 360 /* le_int16 leftSideBearing[ANY_NUMBER]; ANY_NUMBER = numGlyphs - numOfLongHorMetrics */ 361 }; 362 363 #ifndef XP_CPLUSPLUS 364 typedef struct HMTXTable HMTXTable; 365 #endif 366 367 enum PlatformID 368 { 369 PLATFORM_UNICODE = 0, 370 PLATFORM_MACINTOSH = 1, 371 PLATFORM_ISO = 2, 372 PLATFORM_MICROSOFT = 3, 373 PLATFORM_CUSTOM = 4 374 }; 375 376 enum MacintoshEncodingID 377 { 378 MACINTOSH_ROMAN = 0 379 }; 380 381 enum MacintoshLanguageID 382 { 383 MACINTOSH_ENGLISH = 0 384 }; 385 386 enum MicrosoftEncodingID 387 { 388 MICROSOFT_UNICODE_BMP = 1, 389 MICROSOFT_UNICODE_FULL = 10 390 }; 391 392 enum MicrosoftLanguageID 393 { 394 MICROSOFT_ENGLISH = 0x409 395 }; 396 397 enum NameID 398 { 399 NAME_COPYRIGHT_NOTICE = 0, 400 NAME_FONT_FAMILY = 1, 401 NAME_FONT_SUB_FAMILY = 2, 402 NAME_UNIQUE_FONT_ID = 3, 403 NAME_FULL_FONT_NAME = 4, 404 NAME_VERSION_STRING = 5, 405 NAME_POSTSCRIPT_NAME = 6, 406 NAME_TRADEMARK = 7, 407 NAME_MANUFACTURER = 8, 408 NAME_DESIGNER = 9, 409 NAME_DESCRIPTION = 10, 410 NAME_VENDOR_URL = 11, 411 NAME_DESIGNER_URL = 12, 412 NAME_LICENSE_DESCRIPTION = 13, 413 NAME_LICENSE_URL = 14, 414 NAME_RESERVED = 15, 415 NAME_PREFERRED_FAMILY = 16, 416 NAME_PREFERRED_SUB_FAMILY = 17, 417 NAME_COMPATIBLE_FULL = 18, 418 NAME_SAMPLE_TEXT = 19, 419 NAME_POSTSCRIPT_CID = 20 420 }; 421 422 struct NameRecord 423 { 424 le_uint16 platformID; 425 le_uint16 encodingID; 426 le_uint16 languageID; 427 le_uint16 nameID; 428 le_uint16 length; 429 le_uint16 offset; 430 }; 431 432 #ifndef XP_CPLUSPLUS 433 typedef struct NameRecord NameRecord; 434 #endif 435 436 struct NAMETable 437 { 438 le_uint16 version; 439 le_uint16 count; 440 le_uint16 stringOffset; 441 NameRecord nameRecords[ANY_NUMBER]; 442 }; 443 444 #ifndef XP_CPLUSPLUS 445 typedef struct NAMETable NAMETable; 446 #endif 447 448 #endif 449 450