31 struct FeatureRecord {
35 uint32_t feature_tag = 0;
36 DataVector<uint16_t> lookup_list_indices;
44 uint16_t start_coverage_index = 0;
54 SubTable(
const SubTable& that) =
delete;
55 SubTable& operator=(
const SubTable& that) =
delete;
56 SubTable(SubTable&& that)
noexcept;
57 SubTable& operator=(SubTable&& that)
noexcept;
60 CoverageFormat coverage;
63 absl::variant<absl::monostate, int16_t, DataVector<uint16_t>> table_data;
67 using SubTables = std::vector<SubTable>;
70 Lookup(
const Lookup& that) =
delete;
71 Lookup& operator=(
const Lookup& that) =
delete;
72 Lookup(Lookup&& that)
noexcept;
73 Lookup& operator=(Lookup&& that)
noexcept;
76 uint16_t lookup_type = 0;
80 bool LoadGSUBTable(pdfium::span<
const uint8_t> gsub);
81 void Parse(pdfium::span<
const uint8_t> scriptlist,
82 pdfium::span<
const uint8_t> featurelist,
83 pdfium::span<
const uint8_t> lookuplist);
84 void ParseScriptList(pdfium::span<
const uint8_t> raw);
85 ScriptRecord ParseScript(pdfium::span<
const uint8_t> raw);
86 FeatureIndices ParseLangSys(pdfium::span<
const uint8_t> raw);
87 void ParseFeatureList(pdfium::span<
const uint8_t> raw);
88 DataVector<uint16_t> ParseFeatureLookupListIndices(
89 pdfium::span<
const uint8_t> raw);
90 void ParseLookupList(pdfium::span<
const uint8_t> raw);
91 Lookup ParseLookup(pdfium::span<
const uint8_t> raw);
92 CoverageFormat ParseCoverage(pdfium::span<
const uint8_t> raw);
93 SubTable ParseSingleSubst(pdfium::span<
const uint8_t> raw);
95 std::optional<uint32_t> GetVerticalGlyphSub(
const FeatureRecord& feature,
96 uint32_t glyphnum)
const;
97 std::optional<uint32_t> GetVerticalGlyphSub2(
const Lookup& lookup,
98 uint32_t glyphnum)
const;
99 int GetCoverageIndex(
const CoverageFormat& coverage, uint32_t g)
const;
101 uint8_t GetUInt8(pdfium::span<
const uint8_t>& p)
const;
102 int16_t GetInt16(pdfium::span<
const uint8_t>& p)
const;
103 uint16_t GetUInt16(pdfium::span<
const uint8_t>& p)
const;
104 int32_t GetInt32(pdfium::span<
const uint8_t>& p)
const;
105 uint32_t GetUInt32(pdfium::span<
const uint8_t>& p)
const;
107 std::set<uint32_t> feature_set_;
108 std::vector<ScriptRecord> script_list_;
109 std::vector<FeatureRecord> feature_list_;
110 std::vector<Lookup> lookup_list_;