21 std::filesystem::path _path;
27 mutable file_view _view;
29 uint16_t OS2_x_height = 0;
30 uint16_t OS2_cap_height = 0;
35 uint16_t numberOfHMetrics;
40 true_type_font(std::filesystem::path
const& path) : _path(path), _view(file_view{path})
42 ++global_counter<
"ttf:map">;
44 parse_font_directory();
48 ++global_counter<
"ttf:unmap">;
51 throw parse_error(std::format(
"{}: Could not parse font directory.\n{}", path.string(), e.
what()));
62 [[nodiscard]]
bool loaded() const noexcept
override
64 return to_bool(_view);
70 [[nodiscard]] hi::glyph_id
find_glyph(
char32_t c)
const noexcept override;
90 const noexcept override;
92 [[nodiscard]]
vector2 get_kerning(hi::glyph_id current_glyph, hi::glyph_id next_glyph)
const noexcept override;
95 const noexcept override
100 mutable std::span<std::byte const> _cmap_table_bytes;
101 mutable std::span<std::byte const> _cmap_bytes;
102 mutable std::span<std::byte const> _loca_table_bytes;
103 mutable std::span<std::byte const> _glyf_table_bytes;
104 mutable std::span<std::byte const> _hmtx_table_bytes;
105 mutable std::span<std::byte const> _kern_table_bytes;
106 mutable std::span<std::byte const> _GSUB_table_bytes;
107 bool _loca_table_is_offset32;
109 void cache_tables() const noexcept
111 _cmap_table_bytes = get_table_bytes(
"cmap");
112 _cmap_bytes = parse_cmap_table_directory();
113 _loca_table_bytes = get_table_bytes(
"loca");
114 _glyf_table_bytes = get_table_bytes(
"glyf");
115 _hmtx_table_bytes = get_table_bytes(
"hmtx");
118 _kern_table_bytes = get_table_bytes(
"kern");
119 _GSUB_table_bytes = get_table_bytes(
"GSUB");
122 void load_view() const noexcept
128 _view = file_view{_path};
129 ++global_counter<
"ttf:map">;
137 [[nodiscard]] std::span<std::byte const> get_table_bytes(
char const *table_name)
const;
144 void parse_font_directory();
146 void parse_head_table(std::span<std::byte const> headTableBytes);
147 void parse_hhea_table(std::span<std::byte const> bytes);
148 void parse_name_table(std::span<std::byte const> bytes);
149 void parse_OS2_table(std::span<std::byte const> bytes);
150 void parse_maxp_table(std::span<std::byte const> bytes);
152 [[nodiscard]] std::span<std::byte const> parse_cmap_table_directory()
const;
156 [[nodiscard]] hi::unicode_mask parse_cmap_table_mask()
const;
161 bool get_glyf_bytes(hi::glyph_id glyph_id, std::span<std::byte const> &bytes)
const noexcept;
166 bool update_glyph_metrics(
167 hi::glyph_id glyph_id,
168 glyph_metrics &metrics,
169 hi::glyph_id kern_glyph1_id = hi::glyph_id{},
170 hi::glyph_id kern_glyph2_id = hi::glyph_id{})
const noexcept;
172 bool load_simple_glyph(std::span<std::byte const> bytes, graphic_path &glyph)
const noexcept;
183 load_compound_glyph(std::span<std::byte const> bytes, graphic_path &glyph, hi::glyph_id &metrics_glyph_id)
const noexcept;
192 bool load_compound_glyph_metrics(std::span<std::byte const> bytes, hi::glyph_id &metrics_glyph_id)
const noexcept;
200 [[nodiscard]]
std::ptrdiff_t get_coverage_index(std::span<std::byte const> bytes, hi::glyph_id glyph)
noexcept;
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:94