Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2009-2017 The OTS Authors. All rights reserved. |
2 | | // Use of this source code is governed by a BSD-style license that can be |
3 | | // found in the LICENSE file. |
4 | | |
5 | | #ifndef OTS_FEAT_H_ |
6 | | #define OTS_FEAT_H_ |
7 | | |
8 | | #include <vector> |
9 | | #include <unordered_set> |
10 | | |
11 | | #include "ots.h" |
12 | | #include "graphite.h" |
13 | | |
14 | | namespace ots { |
15 | | |
16 | | class OpenTypeFEAT : public Table { |
17 | | public: |
18 | | explicit OpenTypeFEAT(Font* font, uint32_t tag) |
19 | 2.35k | : Table(font, tag, tag) { } |
20 | | |
21 | | bool Parse(const uint8_t* data, size_t length); |
22 | | bool Serialize(OTSStream* out); |
23 | | bool IsValidFeatureId(uint32_t id) const; |
24 | | |
25 | | private: |
26 | | struct FeatureDefn : public TablePart<OpenTypeFEAT> { |
27 | | explicit FeatureDefn(OpenTypeFEAT* parent) |
28 | 9.95k | : TablePart<OpenTypeFEAT>(parent) { } |
29 | | bool ParsePart(Buffer& table); |
30 | | bool SerializePart(OTSStream* out) const; |
31 | | uint32_t id; |
32 | | uint16_t numSettings; |
33 | | uint16_t reserved; |
34 | | uint32_t offset; |
35 | | uint16_t flags; |
36 | | static const uint16_t HAS_DEFAULT_SETTING = 0x4000; |
37 | | static const uint16_t RESERVED = 0x3700; |
38 | | static const uint16_t DEFAULT_SETTING = 0x00FF; |
39 | | uint16_t label; |
40 | | }; |
41 | | struct FeatureSettingDefn : public TablePart<OpenTypeFEAT> { |
42 | | explicit FeatureSettingDefn(OpenTypeFEAT* parent) |
43 | 119k | : TablePart<OpenTypeFEAT>(parent) { } |
44 | 0 | bool ParsePart(Buffer& table) { return ParsePart(table, true); } |
45 | | bool ParsePart(Buffer& table, bool used); |
46 | | bool SerializePart(OTSStream* out) const; |
47 | | int16_t value; |
48 | | uint16_t label; |
49 | | }; |
50 | | uint32_t version; |
51 | | uint16_t numFeat; |
52 | | uint16_t reserved; |
53 | | uint32_t reserved2; |
54 | | std::vector<FeatureDefn> features; |
55 | | std::vector<FeatureSettingDefn> featSettings; |
56 | | std::unordered_set<uint32_t> feature_ids; |
57 | | }; |
58 | | |
59 | | } // namespace ots |
60 | | |
61 | | #endif // OTS_FEAT_H_ |