20 std::optional<URL> url;
28 uint16_t OS2_x_height = 0;
29 uint16_t OS2_cap_height = 0;
34 uint16_t numberOfHMetrics;
41 parse_font_directory();
46 ++global_counter<
"ttf:map">;
48 parse_font_directory();
52 ++global_counter<
"ttf:unmap">;
55 throw parse_error(std::format(
"{}: Could not parse font directory.\n{}", to_string(url), e.
what()));
66 [[nodiscard]]
bool loaded() const noexcept
override
68 return static_cast<bool>(view);
74 [[nodiscard]] hi::glyph_id
find_glyph(
char32_t c)
const noexcept override;
94 const noexcept override;
96 [[nodiscard]]
vector2 get_kerning(hi::glyph_id current_glyph, hi::glyph_id next_glyph)
const noexcept override;
99 const noexcept override
104 mutable std::span<std::byte const> _cmap_table_bytes;
105 mutable std::span<std::byte const> _cmap_bytes;
106 mutable std::span<std::byte const> _loca_table_bytes;
107 mutable std::span<std::byte const> _glyf_table_bytes;
108 mutable std::span<std::byte const> _hmtx_table_bytes;
109 mutable std::span<std::byte const> _kern_table_bytes;
110 mutable std::span<std::byte const> _GSUB_table_bytes;
111 bool _loca_table_is_offset32;
113 void cache_tables() const noexcept
115 _cmap_table_bytes = get_table_bytes(
"cmap");
116 _cmap_bytes = parse_cmap_table_directory();
117 _loca_table_bytes = get_table_bytes(
"loca");
118 _glyf_table_bytes = get_table_bytes(
"glyf");
119 _hmtx_table_bytes = get_table_bytes(
"hmtx");
122 _kern_table_bytes = get_table_bytes(
"kern");
123 _GSUB_table_bytes = get_table_bytes(
"GSUB");
126 void load_view() const noexcept
133 view = url->loadView();
134 ++global_counter<
"ttf:map">;
142 [[nodiscard]] std::span<std::byte const> get_table_bytes(
char const *table_name)
const;
149 void parse_font_directory();
151 void parse_head_table(std::span<std::byte const> headTableBytes);
152 void parse_hhea_table(std::span<std::byte const> bytes);
153 void parse_name_table(std::span<std::byte const> bytes);
154 void parse_OS2_table(std::span<std::byte const> bytes);
155 void parse_maxp_table(std::span<std::byte const> bytes);
157 [[nodiscard]] std::span<std::byte const> parse_cmap_table_directory()
const;
161 [[nodiscard]] hi::unicode_mask parse_cmap_table_mask()
const;
166 bool get_glyf_bytes(hi::glyph_id glyph_id, std::span<std::byte const> &bytes)
const noexcept;
171 bool update_glyph_metrics(
172 hi::glyph_id glyph_id,
173 glyph_metrics &metrics,
174 hi::glyph_id kern_glyph1_id = hi::glyph_id{},
175 hi::glyph_id kern_glyph2_id = hi::glyph_id{})
const noexcept;
177 bool load_simple_glyph(std::span<std::byte const> bytes, graphic_path &glyph)
const noexcept;
188 load_compound_glyph(std::span<std::byte const> bytes, graphic_path &glyph, hi::glyph_id &metrics_glyph_id)
const noexcept;
197 bool load_compound_glyph_metrics(std::span<std::byte const> bytes, hi::glyph_id &metrics_glyph_id)
const noexcept;
205 [[nodiscard]]
std::ptrdiff_t get_coverage_index(std::span<std::byte const> bytes, hi::glyph_id glyph)
noexcept;
bool load_glyph_metrics(hi::glyph_id glyph_id, glyph_metrics &metrics, hi::glyph_id lookahead_glyph_id=hi::glyph_id{}) const noexcept override
Load a glyphMetrics into a path.
virtual void substitution_and_kerning(iso_639 language, iso_15924 script, std::vector< substitution_and_kerning_type > &word) const noexcept override
Substitute and kern a run of glyphs.
Definition true_type_font.hpp:98