Home | History | Annotate | Download | only in src
      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 
     49 bool ParseDeviceTable(const uint8_t *data, size_t length);
     50 
     51 // Parser for 'Contextual' subtable shared by GSUB/GPOS tables.
     52 bool ParseContextSubtable(const uint8_t *data, const size_t length,
     53                           const uint16_t num_glyphs,
     54                           const uint16_t num_lookups);
     55 
     56 // Parser for 'Chaining Contextual' subtable shared by GSUB/GPOS tables.
     57 bool ParseChainingContextSubtable(const uint8_t *data, const size_t length,
     58                                   const uint16_t num_glyphs,
     59                                   const uint16_t num_lookups);
     60 
     61 bool ParseExtensionSubtable(const OpenTypeFile *file,
     62                             const uint8_t *data, const size_t length,
     63                             const LookupSubtableParser* parser);
     64 
     65 }  // namespace ots
     66 
     67 #endif  // OTS_LAYOUT_H_
     68 
     69