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_KERN_H_ 6 #define OTS_KERN_H_ 7 8 #include <vector> 9 10 #include "ots.h" 11 12 namespace ots { 13 14 struct OpenTypeKERNFormat0Pair { 15 uint16_t left; 16 uint16_t right; 17 int16_t value; 18 }; 19 20 struct OpenTypeKERNFormat0 { 21 uint16_t version; 22 uint16_t coverage; 23 uint16_t search_range; 24 uint16_t entry_selector; 25 uint16_t range_shift; 26 std::vector<OpenTypeKERNFormat0Pair> pairs; 27 }; 28 29 // Format 2 is not supported. Since the format is not supported by Windows, 30 // WebFonts unlikely use it. I've checked thousands of proprietary fonts and 31 // free fonts, and found no font uses the format. 32 33 class OpenTypeKERN : public Table { 34 public: OpenTypeKERN(Font * font,uint32_t tag)35 explicit OpenTypeKERN(Font *font, uint32_t tag) 36 : Table(font, tag, tag) { } 37 38 bool Parse(const uint8_t *data, size_t length); 39 bool Serialize(OTSStream *out); 40 bool ShouldSerialize(); 41 42 private: 43 uint16_t version; 44 std::vector<OpenTypeKERNFormat0> subtables; 45 }; 46 47 } // namespace ots 48 49 #endif // OTS_KERN_H_ 50