poppler/Form.cc | 6 ++++++
1 file changed, 6 insertions(+)
New commits:
commit 1f1823045d71cc2f00ef43320cd181adf68a9d9f
Author: Sune Vuorela <[email protected]>
Date: Tue Jul 18 10:07:50 2023 +0200
Don't look up same glyph multiple times
When iterating over the unicode codepoints, no need to check the fonts
if they still contains the same glyph as we already checked.
diff --git a/poppler/Form.cc b/poppler/Form.cc
index 54ab05b1..b30bfc7e 100644
--- a/poppler/Form.cc
+++ b/poppler/Form.cc
@@ -80,6 +80,7 @@
#include <ft2build.h>
#include FT_FREETYPE_H
+#include <unordered_set>
// helper for using std::visit to get a dependent false for static_asserts
// to help get compile errors if one ever extends variants
@@ -3022,6 +3023,7 @@ std::vector<Form::AddFontResult>
Form::ensureFontsForAllCharacters(const GooStri
std::vector<AddFontResult> newFonts;
// If the text has some characters that are not available in the font, try
adding a font for those
+ std::unordered_set<Unicode> seen;
for (int i = 2; i < unicodeText->getLength(); i += 2) {
Unicode uChar = (unsigned char)(unicodeText->getChar(i)) << 8;
uChar += (unsigned char)(unicodeText->getChar(i + 1));
@@ -3029,6 +3031,10 @@ std::vector<Form::AddFontResult>
Form::ensureFontsForAllCharacters(const GooStri
if (uChar < 128 && !std::isprint(static_cast<unsigned char>(uChar))) {
continue;
}
+ if (seen.find(uChar) != seen.end()) {
+ continue;
+ }
+ seen.insert(uChar);
CharCode c;
bool addFont = false;