18ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com/* 28ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * Copyright 2012 Google Inc. 38ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * 48ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * Use of this source code is governed by a BSD-style license that can be 58ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com * found in the LICENSE file. 68ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com */ 78ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 88ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#ifndef SkSFNTHeader_DEFINED 98ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#define SkSFNTHeader_DEFINED 108ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 118ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#include "SkEndian.h" 12a550199c6f37e1b05a386ea57eee4c40cc91d84dbungeman@google.com#include "SkOTTableTypes.h" 138ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 148ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com//All SK_SFNT_ prefixed types should be considered as big endian. 158ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.comtypedef uint16_t SK_SFNT_USHORT; 168ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.comtypedef uint32_t SK_SFNT_ULONG; 178ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 188ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#pragma pack(push, 1) 198ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 208ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.comstruct SkSFNTHeader { 218ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SFNT_ULONG fontType; 22ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com struct fontType_WindowsTrueType { 23ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG0 = 0; 24ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG1 = 1; 25ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG2 = 0; 26ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG3 = 0; 27ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_WindowsTrueType>::value; 28ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com }; 29ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com struct fontType_MacTrueType { 30ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG0 = 't'; 31ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG1 = 'r'; 32ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG2 = 'u'; 33ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG3 = 'e'; 34ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_MacTrueType>::value; 35ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com }; 36ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com struct fontType_PostScript { 37ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG0 = 't'; 38ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG1 = 'y'; 39ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG2 = 'p'; 40ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG3 = '1'; 41ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_PostScript>::value; 42ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com }; 43ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com struct fontType_OpenTypeCFF { 44ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG0 = 'O'; 45ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG1 = 'T'; 46ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG2 = 'T'; 47ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_CHAR TAG3 = 'O'; 48ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_OpenTypeCFF>::value; 49ec95a4ae45e9bff1a92627372fd771b389813fecbungeman@google.com }; 508ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 518ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SFNT_USHORT numTables; 528ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SFNT_USHORT searchRange; 538ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SFNT_USHORT entrySelector; 548ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com SK_SFNT_USHORT rangeShift; 55b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com 56a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com struct TableDirectoryEntry { 57a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com SK_SFNT_ULONG tag; 58a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com SK_SFNT_ULONG checksum; 59a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com SK_SFNT_ULONG offset; //From beginning of header. 60a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com SK_SFNT_ULONG logicalLength; 61a544f29496758de6ed2ebf5a53558574019c9da1bungeman@google.com }; //tableDirectoryEntries[numTables] 628ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com}; 638ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 648ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#pragma pack(pop) 658ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 668ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 672880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonstatic_assert(sizeof(SkSFNTHeader) == 12, "sizeof_SkSFNTHeader_not_12"); 682880df2609eba09b555ca37be04b6ad89290c765Tom Hudsonstatic_assert(sizeof(SkSFNTHeader::TableDirectoryEntry) == 16, "sizeof_SkSFNTHeader_TableDirectoryEntry_not_16"); 698ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com 708ec9956bdfc173132de52acf1aa03746fabca287bungeman@google.com#endif 71