|
1 /* |
|
2 * Copyright 2012 Google Inc. |
|
3 * |
|
4 * Use of this source code is governed by a BSD-style license that can be |
|
5 * found in the LICENSE file. |
|
6 */ |
|
7 |
|
8 #ifndef SkSFNTHeader_DEFINED |
|
9 #define SkSFNTHeader_DEFINED |
|
10 |
|
11 #include "SkEndian.h" |
|
12 #include "SkOTTableTypes.h" |
|
13 |
|
14 //All SK_SFNT_ prefixed types should be considered as big endian. |
|
15 typedef uint16_t SK_SFNT_USHORT; |
|
16 typedef uint32_t SK_SFNT_ULONG; |
|
17 |
|
18 #pragma pack(push, 1) |
|
19 |
|
20 struct SkSFNTHeader { |
|
21 SK_SFNT_ULONG fontType; |
|
22 struct fontType_WindowsTrueType { |
|
23 static const SK_OT_CHAR TAG0 = 0; |
|
24 static const SK_OT_CHAR TAG1 = 1; |
|
25 static const SK_OT_CHAR TAG2 = 0; |
|
26 static const SK_OT_CHAR TAG3 = 0; |
|
27 static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_WindowsTrueType>::value; |
|
28 }; |
|
29 struct fontType_MacTrueType { |
|
30 static const SK_OT_CHAR TAG0 = 't'; |
|
31 static const SK_OT_CHAR TAG1 = 'r'; |
|
32 static const SK_OT_CHAR TAG2 = 'u'; |
|
33 static const SK_OT_CHAR TAG3 = 'e'; |
|
34 static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_MacTrueType>::value; |
|
35 }; |
|
36 struct fontType_PostScript { |
|
37 static const SK_OT_CHAR TAG0 = 't'; |
|
38 static const SK_OT_CHAR TAG1 = 'y'; |
|
39 static const SK_OT_CHAR TAG2 = 'p'; |
|
40 static const SK_OT_CHAR TAG3 = '1'; |
|
41 static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_PostScript>::value; |
|
42 }; |
|
43 struct fontType_OpenTypeCFF { |
|
44 static const SK_OT_CHAR TAG0 = 'O'; |
|
45 static const SK_OT_CHAR TAG1 = 'T'; |
|
46 static const SK_OT_CHAR TAG2 = 'T'; |
|
47 static const SK_OT_CHAR TAG3 = 'O'; |
|
48 static const SK_OT_ULONG TAG = SkOTTableTAG<fontType_OpenTypeCFF>::value; |
|
49 }; |
|
50 |
|
51 SK_SFNT_USHORT numTables; |
|
52 SK_SFNT_USHORT searchRange; |
|
53 SK_SFNT_USHORT entrySelector; |
|
54 SK_SFNT_USHORT rangeShift; |
|
55 |
|
56 struct TableDirectoryEntry { |
|
57 SK_SFNT_ULONG tag; |
|
58 SK_SFNT_ULONG checksum; |
|
59 SK_SFNT_ULONG offset; //From beginning of header. |
|
60 SK_SFNT_ULONG logicalLength; |
|
61 }; //tableDirectoryEntries[numTables] |
|
62 }; |
|
63 |
|
64 #pragma pack(pop) |
|
65 |
|
66 |
|
67 SK_COMPILE_ASSERT(sizeof(SkSFNTHeader) == 12, sizeof_SkSFNTHeader_not_12); |
|
68 SK_COMPILE_ASSERT(sizeof(SkSFNTHeader::TableDirectoryEntry) == 16, sizeof_SkSFNTHeader_TableDirectoryEntry_not_16); |
|
69 |
|
70 #endif |