blob: d0af43d5c73ef5bb18c7ce231d1139acb540cc74 [file] [log] [blame]
bashi@google.com00b790a2011-01-27 06:35:42 +00001// 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
13namespace ots {
14
bashi@chromium.orgced71122011-02-17 10:23:47 +000015
16struct 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;
bashi@google.com78a8baa2011-02-07 06:21:25 +000028};
29
30bool ParseScriptListTable(const uint8_t *data, const size_t length,
31 const uint16_t num_features);
32
33bool ParseFeatureListTable(const uint8_t *data, const size_t length,
34 const uint16_t num_lookups,
bashi@chromium.orga5748662011-03-18 17:48:29 +000035 uint16_t *num_features);
bashi@google.com78a8baa2011-02-07 06:21:25 +000036
37bool ParseLookupListTable(OpenTypeFile *file, const uint8_t *data,
bashi@chromium.orgced71122011-02-17 10:23:47 +000038 const size_t length,
39 const LookupSubtableParser* parser,
40 uint16_t* num_lookups);
bashi@google.com78a8baa2011-02-07 06:21:25 +000041
bashi@google.com00b790a2011-01-27 06:35:42 +000042bool ParseClassDefTable(const uint8_t *data, size_t length,
43 const uint16_t num_glyphs,
44 const uint16_t num_classes);
45
46bool ParseCoverageTable(const uint8_t *data, size_t length,
ksakamoto@chromium.orgeea48362014-01-20 02:15:37 +000047 const uint16_t num_glyphs,
48 const uint16_t expected_num_glyphs = 0);
bashi@google.com00b790a2011-01-27 06:35:42 +000049
bashi@google.com78a8baa2011-02-07 06:21:25 +000050bool ParseDeviceTable(const uint8_t *data, size_t length);
51
bashi@chromium.orgced71122011-02-17 10:23:47 +000052// Parser for 'Contextual' subtable shared by GSUB/GPOS tables.
53bool 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.
58bool ParseChainingContextSubtable(const uint8_t *data, const size_t length,
59 const uint16_t num_glyphs,
60 const uint16_t num_lookups);
61
62bool ParseExtensionSubtable(const OpenTypeFile *file,
63 const uint8_t *data, const size_t length,
64 const LookupSubtableParser* parser);
65
bashi@google.com00b790a2011-01-27 06:35:42 +000066} // namespace ots
67
68#endif // OTS_LAYOUT_H_
69