vdmx.h (1094B)
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_VDMX_H_ 6 #define OTS_VDMX_H_ 7 8 #include <vector> 9 10 #include "ots.h" 11 12 namespace ots { 13 14 struct OpenTypeVDMXRatioRecord { 15 uint8_t charset; 16 uint8_t x_ratio; 17 uint8_t y_start_ratio; 18 uint8_t y_end_ratio; 19 }; 20 21 struct OpenTypeVDMXVTable { 22 uint16_t y_pel_height; 23 int16_t y_max; 24 int16_t y_min; 25 }; 26 27 struct OpenTypeVDMXGroup { 28 uint16_t recs; 29 uint8_t startsz; 30 uint8_t endsz; 31 std::vector<OpenTypeVDMXVTable> entries; 32 }; 33 34 class OpenTypeVDMX : public Table { 35 public: 36 explicit OpenTypeVDMX(Font *font, uint32_t tag) 37 : Table(font, tag, tag) { } 38 39 bool Parse(const uint8_t *data, size_t length); 40 bool Serialize(OTSStream *out); 41 bool ShouldSerialize(); 42 43 private: 44 uint16_t version; 45 uint16_t num_recs; 46 uint16_t num_ratios; 47 std::vector<OpenTypeVDMXRatioRecord> rat_ranges; 48 std::vector<uint16_t> offsets; 49 std::vector<OpenTypeVDMXGroup> groups; 50 }; 51 52 } // namespace ots 53 54 #endif // OTS_VDMX_H_