From bfeca4ebb33bfb459142afaaae384c32fb490906 Mon Sep 17 00:00:00 2001 From: Rodrigo Tobar Date: Sat, 7 Jan 2023 12:26:59 +0800 Subject: [PATCH] LibPDF: Record base font name read from document This will be useful for debugging, or if we later on want to show all the fonts found in the document in an organised manner. --- Userland/Libraries/LibPDF/Fonts/PDFFont.cpp | 6 +++--- Userland/Libraries/LibPDF/Fonts/PDFFont.h | 2 ++ Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h | 1 + Userland/Libraries/LibPDF/Fonts/Type0Font.h | 1 + Userland/Libraries/LibPDF/Fonts/Type1Font.h | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Userland/Libraries/LibPDF/Fonts/PDFFont.cpp b/Userland/Libraries/LibPDF/Fonts/PDFFont.cpp index 3be8446a7b..0ec44dbdcb 100644 --- a/Userland/Libraries/LibPDF/Fonts/PDFFont.cpp +++ b/Userland/Libraries/LibPDF/Fonts/PDFFont.cpp @@ -33,9 +33,9 @@ static bool is_standard_latin_font(DeprecatedFlyString const& font) PDFErrorOr PDFFont::CommonData::load_from_dict(Document* document, NonnullRefPtr dict, float font_size) { - auto base_font = TRY(dict->get_name(document, CommonNames::BaseFont))->name(); - if ((is_standard_font = is_standard_latin_font(base_font))) { - auto replacement = replacement_for_standard_latin_font(base_font.to_lowercase()); + base_font_name = TRY(dict->get_name(document, CommonNames::BaseFont))->name(); + if ((is_standard_font = is_standard_latin_font(base_font_name))) { + auto replacement = replacement_for_standard_latin_font(base_font_name.to_lowercase()); font = Gfx::FontDatabase::the().get(replacement.get<0>(), replacement.get<1>(), font_size); VERIFY(font); } diff --git a/Userland/Libraries/LibPDF/Fonts/PDFFont.h b/Userland/Libraries/LibPDF/Fonts/PDFFont.h index 555701230d..49f0933f77 100644 --- a/Userland/Libraries/LibPDF/Fonts/PDFFont.h +++ b/Userland/Libraries/LibPDF/Fonts/PDFFont.h @@ -24,6 +24,7 @@ public: // This is used both by Type 1 and TrueType fonts. struct CommonData { + DeprecatedFlyString base_font_name; RefPtr font; RefPtr to_unicode; RefPtr encoding; @@ -45,6 +46,7 @@ public: virtual bool is_standard_font() const { return m_is_standard_font; } virtual Type type() const = 0; + virtual DeprecatedFlyString base_font_name() const = 0; protected: static Tuple replacement_for_standard_latin_font(StringView); diff --git a/Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h b/Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h index b03a614a44..c38b630e4b 100644 --- a/Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h +++ b/Userland/Libraries/LibPDF/Fonts/TrueTypeFont.h @@ -27,6 +27,7 @@ public: void draw_glyph(Gfx::Painter&, Gfx::FloatPoint, float, u32, Color) override; Type type() const override { return PDFFont::Type::TrueType; } + DeprecatedFlyString base_font_name() const override { return m_data.base_font_name; } private: PDFFont::CommonData m_data; diff --git a/Userland/Libraries/LibPDF/Fonts/Type0Font.h b/Userland/Libraries/LibPDF/Fonts/Type0Font.h index f74751b956..0d286de18b 100644 --- a/Userland/Libraries/LibPDF/Fonts/Type0Font.h +++ b/Userland/Libraries/LibPDF/Fonts/Type0Font.h @@ -30,6 +30,7 @@ public: void draw_glyph(Gfx::Painter&, Gfx::FloatPoint, float, u32, Color) override {}; Type type() const override { return PDFFont::Type::Type0; } + DeprecatedFlyString base_font_name() const override { return ""; } private: CIDSystemInfo m_system_info; diff --git a/Userland/Libraries/LibPDF/Fonts/Type1Font.h b/Userland/Libraries/LibPDF/Fonts/Type1Font.h index 104d4ad954..a8cd4057a1 100644 --- a/Userland/Libraries/LibPDF/Fonts/Type1Font.h +++ b/Userland/Libraries/LibPDF/Fonts/Type1Font.h @@ -31,6 +31,7 @@ public: void draw_glyph(Gfx::Painter& painter, Gfx::FloatPoint point, float width, u32 char_code, Color color) override; Type type() const override { return PDFFont::Type::Type1; } + DeprecatedFlyString base_font_name() const override { return m_data.base_font_name; }; private: Data m_data;