tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

layout.h (2345B)


      1 // Copyright (c) 2011-2017 The OTS 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 // The maximum number of class value.
     16 const uint16_t kMaxClassDefValue = 0xFFFF;
     17 
     18 class OpenTypeLayoutTable : public Table {
     19  public:
     20    explicit OpenTypeLayoutTable(Font *font, uint32_t tag, uint32_t type)
     21      : Table(font, tag, type) { }
     22 
     23    bool Parse(const uint8_t *data, size_t length);
     24    bool Serialize(OTSStream *out);
     25 
     26  protected:
     27    bool ParseContextSubtable(const uint8_t *data, const size_t length);
     28    bool ParseChainingContextSubtable(const uint8_t *data, const size_t length);
     29    bool ParseExtensionSubtable(const uint8_t *data, const size_t length);
     30 
     31  private:
     32    bool ParseScriptListTable(const uint8_t *data, const size_t length);
     33    bool ParseFeatureListTable(const uint8_t *data, const size_t length);
     34    bool ParseLookupListTable(const uint8_t *data, const size_t length);
     35    bool ParseFeatureVariationsTable(const uint8_t *data, const size_t length);
     36    bool ParseLookupTable(const uint8_t *data, const size_t length);
     37 
     38    virtual bool ValidLookupSubtableType(const uint16_t lookup_type,
     39                                         bool extension = false) const = 0;
     40    virtual bool ParseLookupSubtable(const uint8_t *data, const size_t length,
     41                                     const uint16_t lookup_type) = 0;
     42 
     43    const uint8_t *m_data = nullptr;
     44    size_t m_length = 0;
     45    uint16_t m_num_features = 0;
     46    uint16_t m_num_lookups = 0;
     47 };
     48 
     49 bool ParseClassDefTable(const ots::Font *font,
     50                        const uint8_t *data, size_t length,
     51                        const uint16_t num_glyphs,
     52                        const uint16_t num_classes);
     53 
     54 bool ParseCoverageTable(const ots::Font *font,
     55                        const uint8_t *data, size_t length,
     56                        const uint16_t num_glyphs,
     57                        const uint16_t expected_num_glyphs = 0);
     58 
     59 bool ParseDeviceTable(const ots::Font *font,
     60                      const uint8_t *data, size_t length);
     61 
     62 }  // namespace ots
     63 
     64 #endif  // OTS_LAYOUT_H_