diff --git a/Userland/Libraries/LibPDF/Fonts/CFF.cpp b/Userland/Libraries/LibPDF/Fonts/CFF.cpp index 71985fa7a5..a58ce77bc1 100644 --- a/Userland/Libraries/LibPDF/Fonts/CFF.cpp +++ b/Userland/Libraries/LibPDF/Fonts/CFF.cpp @@ -267,10 +267,13 @@ PDFErrorOr> CFF::create(ReadonlyBytes const& cff_bytes, RefPt for (SID sid : s_predefined_charset_expert_subset) TRY(charset_names.try_append(resolve_sid(sid, strings))); break; - default: - charset_names = TRY(parse_charset(Reader { cff_bytes.slice(charset_offset) }, glyphs.size(), strings)); + default: { + auto charset = TRY(parse_charset(Reader { cff_bytes.slice(charset_offset) }, glyphs.size())); + for (SID sid : charset) + TRY(charset_names.try_append(resolve_sid(sid, strings))); break; } + } // Adjust glyphs' widths as they are deltas from nominalWidthX for (auto& glyph : glyphs) { @@ -734,17 +737,17 @@ DeprecatedFlyString CFF::resolve_sid(SID sid, Vector const& strings) return DeprecatedFlyString("space"); } -PDFErrorOr> CFF::parse_charset(Reader&& reader, size_t glyph_count, Vector const& strings) +PDFErrorOr> CFF::parse_charset(Reader&& reader, size_t glyph_count) { // CFF spec, "13 Charsets" - Vector names; + Vector names; auto format = TRY(reader.try_read()); if (format == 0) { // CFF spec, "Table 17 Format 0" dbgln_if(CFF_DEBUG, "CFF charset format 0"); for (size_t i = 0; i < glyph_count - 1; i++) { SID sid = TRY(reader.try_read>()); - TRY(names.try_append(resolve_sid(sid, strings))); + TRY(names.try_append(sid)); } } else if (format == 1) { // CFF spec, "Table 18 Format 1" @@ -754,7 +757,7 @@ PDFErrorOr> CFF::parse_charset(Reader&& reader, size auto first_sid = TRY(reader.try_read>()); int left = TRY(reader.try_read()); for (SID sid = first_sid; left >= 0 && names.size() < glyph_count - 1; left--, sid++) - TRY(names.try_append(resolve_sid(sid, strings))); + TRY(names.try_append(sid)); } } else if (format == 2) { // CFF spec, "Table 20 Format 2" @@ -765,7 +768,7 @@ PDFErrorOr> CFF::parse_charset(Reader&& reader, size auto first_sid = TRY(reader.try_read>()); int left = TRY(reader.try_read>()); for (SID sid = first_sid; left >= 0 && names.size() < glyph_count - 1; left--, sid++) - TRY(names.try_append(resolve_sid(sid, strings))); + TRY(names.try_append(sid)); } } else { dbgln("CFF: Unknown charset format {}", format); diff --git a/Userland/Libraries/LibPDF/Fonts/CFF.h b/Userland/Libraries/LibPDF/Fonts/CFF.h index 50ff7fb4eb..3b160f80f9 100644 --- a/Userland/Libraries/LibPDF/Fonts/CFF.h +++ b/Userland/Libraries/LibPDF/Fonts/CFF.h @@ -97,7 +97,7 @@ public: static PDFErrorOr> parse_charstrings(Reader&&, Vector const& local_subroutines, Vector const& global_subroutines); static DeprecatedFlyString resolve_sid(SID, Vector const&); - static PDFErrorOr> parse_charset(Reader&&, size_t, Vector const&); + static PDFErrorOr> parse_charset(Reader&&, size_t); static PDFErrorOr> parse_encoding(Reader&&, HashMap& supplemental); };