• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium 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 
16 struct LookupSubtableParser {
17   struct TypeParser {
18     uint16_t type;
19     bool (*parse)(const OpenTypeFile *file, const uint8_t *data,
20                   const size_t length);
21   };
22   size_t num_types;
23   uint16_t extension_type;
24   const TypeParser *parsers;
25 
26   bool Parse(const OpenTypeFile *file, const uint8_t *data,
27              const size_t length, const uint16_t lookup_type) const;
28 };
29 
30 bool ParseScriptListTable(const uint8_t *data, const size_t length,
31                           const uint16_t num_features);
32 
33 bool ParseFeatureListTable(const uint8_t *data, const size_t length,
34                            const uint16_t num_lookups,
35                            uint16_t *num_features);
36 
37 bool ParseLookupListTable(OpenTypeFile *file, const uint8_t *data,
38                           const size_t length,
39                           const LookupSubtableParser* parser,
40                           uint16_t* num_lookups);
41 
42 bool ParseClassDefTable(const uint8_t *data, size_t length,
43                         const uint16_t num_glyphs,
44                         const uint16_t num_classes);
45 
46 bool ParseCoverageTable(const uint8_t *data, size_t length,
47                         const uint16_t num_glyphs,
48                         const uint16_t expected_num_glyphs = 0);
49 
50 bool ParseDeviceTable(const uint8_t *data, size_t length);
51 
52 // Parser for 'Contextual' subtable shared by GSUB/GPOS tables.
53 bool ParseContextSubtable(const uint8_t *data, const size_t length,
54                           const uint16_t num_glyphs,
55                           const uint16_t num_lookups);
56 
57 // Parser for 'Chaining Contextual' subtable shared by GSUB/GPOS tables.
58 bool ParseChainingContextSubtable(const uint8_t *data, const size_t length,
59                                   const uint16_t num_glyphs,
60                                   const uint16_t num_lookups);
61 
62 bool ParseExtensionSubtable(const OpenTypeFile *file,
63                             const uint8_t *data, const size_t length,
64                             const LookupSubtableParser* parser);
65 
66 }  // namespace ots
67 
68 #endif  // OTS_LAYOUT_H_
69 
70