layout.h (2345B)
1 // Copyright (c) 2011-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_LAYOUT_H_ 6 #define OTS_LAYOUT_H_ 7 8 #include "ots.h" 9 10 // Utility functions for OpenType layout common table formats. 11 // http://www.microsoft.com/typography/otspec/chapter2.htm 12 13 namespace ots { 14 15 // The maximum number of class value. 16 const uint16_t kMaxClassDefValue = 0xFFFF; 17 18 class OpenTypeLayoutTable : public Table { 19 public: 20 explicit OpenTypeLayoutTable(Font *font, uint32_t tag, uint32_t type) 21 : Table(font, tag, type) { } 22 23 bool Parse(const uint8_t *data, size_t length); 24 bool Serialize(OTSStream *out); 25 26 protected: 27 bool ParseContextSubtable(const uint8_t *data, const size_t length); 28 bool ParseChainingContextSubtable(const uint8_t *data, const size_t length); 29 bool ParseExtensionSubtable(const uint8_t *data, const size_t length); 30 31 private: 32 bool ParseScriptListTable(const uint8_t *data, const size_t length); 33 bool ParseFeatureListTable(const uint8_t *data, const size_t length); 34 bool ParseLookupListTable(const uint8_t *data, const size_t length); 35 bool ParseFeatureVariationsTable(const uint8_t *data, const size_t length); 36 bool ParseLookupTable(const uint8_t *data, const size_t length); 37 38 virtual bool ValidLookupSubtableType(const uint16_t lookup_type, 39 bool extension = false) const = 0; 40 virtual bool ParseLookupSubtable(const uint8_t *data, const size_t length, 41 const uint16_t lookup_type) = 0; 42 43 const uint8_t *m_data = nullptr; 44 size_t m_length = 0; 45 uint16_t m_num_features = 0; 46 uint16_t m_num_lookups = 0; 47 }; 48 49 bool ParseClassDefTable(const ots::Font *font, 50 const uint8_t *data, size_t length, 51 const uint16_t num_glyphs, 52 const uint16_t num_classes); 53 54 bool ParseCoverageTable(const ots::Font *font, 55 const uint8_t *data, size_t length, 56 const uint16_t num_glyphs, 57 const uint16_t expected_num_glyphs = 0); 58 59 bool ParseDeviceTable(const ots::Font *font, 60 const uint8_t *data, size_t length); 61 62 } // namespace ots 63 64 #endif // OTS_LAYOUT_H_