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 13namespace ots { 14 15 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; 28}; 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, 35 uint16_t *num_features); 36 37bool ParseLookupListTable(OpenTypeFile *file, const uint8_t *data, 38 const size_t length, 39 const LookupSubtableParser* parser, 40 uint16_t* num_lookups); 41 42bool 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, 47 const uint16_t num_glyphs, 48 const uint16_t expected_num_glyphs = 0); 49 50bool ParseDeviceTable(const uint8_t *data, size_t length); 51 52// 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 66} // namespace ots 67 68#endif // OTS_LAYOUT_H_ 69 70