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