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                         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