100b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com// Copyright (c) 2011 The Chromium Authors. All rights reserved. 200b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com// Use of this source code is governed by a BSD-style license that can be 300b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com// found in the LICENSE file. 400b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 500b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com#ifndef OTS_LAYOUT_H_ 600b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com#define OTS_LAYOUT_H_ 700b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 800b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com#include "ots.h" 900b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 1000b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com// Utility functions for OpenType layout common table formats. 1100b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com// http://www.microsoft.com/typography/otspec/chapter2.htm 1200b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 1300b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.comnamespace ots { 1400b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 15ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org 16ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.orgstruct LookupSubtableParser { 17ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org struct TypeParser { 18ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org uint16_t type; 19ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org bool (*parse)(const OpenTypeFile *file, const uint8_t *data, 20ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const size_t length); 21ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org }; 22ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org size_t num_types; 23ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org uint16_t extension_type; 24ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const TypeParser *parsers; 25ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org 26ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org bool Parse(const OpenTypeFile *file, const uint8_t *data, 27ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const size_t length, const uint16_t lookup_type) const; 2878a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com}; 2978a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com 3078a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.combool ParseScriptListTable(const uint8_t *data, const size_t length, 3178a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com const uint16_t num_features); 3278a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com 3378a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.combool ParseFeatureListTable(const uint8_t *data, const size_t length, 3478a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com const uint16_t num_lookups, 35a574866c0e4b1539098e64422f59d01c80cea6cfbashi@chromium.org uint16_t *num_features); 3678a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com 3778a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.combool ParseLookupListTable(OpenTypeFile *file, const uint8_t *data, 38ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const size_t length, 39ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const LookupSubtableParser* parser, 40ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org uint16_t* num_lookups); 4178a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com 4200b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.combool ParseClassDefTable(const uint8_t *data, size_t length, 4300b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com const uint16_t num_glyphs, 4400b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com const uint16_t num_classes); 4500b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 4600b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.combool ParseCoverageTable(const uint8_t *data, size_t length, 4700b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com const uint16_t num_glyphs); 4800b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 4978a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.combool ParseDeviceTable(const uint8_t *data, size_t length); 5078a8baafff49244c7f9427ad72115ff1ad28e310bashi@google.com 51ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org// Parser for 'Contextual' subtable shared by GSUB/GPOS tables. 52ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.orgbool ParseContextSubtable(const uint8_t *data, const size_t length, 53ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const uint16_t num_glyphs, 54ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const uint16_t num_lookups); 55ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org 56ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org// Parser for 'Chaining Contextual' subtable shared by GSUB/GPOS tables. 57ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.orgbool ParseChainingContextSubtable(const uint8_t *data, const size_t length, 58ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const uint16_t num_glyphs, 59ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const uint16_t num_lookups); 60ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org 61ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.orgbool ParseExtensionSubtable(const OpenTypeFile *file, 62ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const uint8_t *data, const size_t length, 63ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org const LookupSubtableParser* parser); 64ced7112cb41d09cd344bbe4b20459049d6039491bashi@chromium.org 6500b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com} // namespace ots 6600b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 6700b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com#endif // OTS_LAYOUT_H_ 6800b790a7ad0d65b066a61760f58e7dbfc055cd2dbashi@google.com 69