glib/poppler-structure-element.cc | 10 +++-- poppler/FontInfo.cc | 8 +--- poppler/GfxFont.cc | 70 +++++++++++++++++--------------------- poppler/GfxFont.h | 10 ++--- poppler/GlobalParams.cc | 20 +++++----- poppler/GlobalParamsWin.cc | 6 +-- poppler/PSOutputDev.cc | 12 +++--- poppler/TextOutputDev.cc | 2 - utils/HtmlFonts.cc | 6 +-- 9 files changed, 70 insertions(+), 74 deletions(-)
New commits: commit 404edfd151b814c7c4e771eda5826e65ee7c5f84 Author: Albert Astals Cid <[email protected]> Date: Sun Mar 27 22:37:15 2022 +0200 Change GfxFont name into an optional std::string diff --git a/glib/poppler-structure-element.cc b/glib/poppler-structure-element.cc index 8b5e37c7..600fe956 100644 --- a/glib/poppler-structure-element.cc +++ b/glib/poppler-structure-element.cc @@ -794,11 +794,15 @@ static PopplerTextSpan *text_span_poppler_text_span(const TextSpan &span) // GfxFont sometimes does not have a family name but there // is always a font name that can be used as fallback. const GooString *font_name = span.getFont()->getFamily(); - if (font_name == nullptr) { - font_name = span.getFont()->getName(); + if (font_name) { + new_span->font_name = _poppler_goo_string_to_utf8(font_name); + } else if (span.getFont()->getName()) { + const GooString aux(*span.getFont()->getName()); + new_span->font_name = _poppler_goo_string_to_utf8(&aux); + } else { + new_span->font_name = nullptr; } - new_span->font_name = _poppler_goo_string_to_utf8(font_name); if (span.getFont()->isFixedWidth()) { new_span->flags |= POPPLER_TEXT_SPAN_FIXED_WIDTH; } diff --git a/poppler/FontInfo.cc b/poppler/FontInfo.cc index 4381509c..23425f61 100644 --- a/poppler/FontInfo.cc +++ b/poppler/FontInfo.cc @@ -162,14 +162,12 @@ void FontInfoScanner::scanFonts(XRef *xrefA, Dict *resDict, std::vector<FontInfo FontInfo::FontInfo(GfxFont *font, XRef *xref) { - const GooString *origName; - fontRef = *font->getID(); // font name - origName = font->getName(); - if (origName != nullptr) { - name = font->getName()->toStr(); + const std::optional<std::string> &origName = font->getName(); + if (origName) { + name = *font->getName(); } // font type diff --git a/poppler/GfxFont.cc b/poppler/GfxFont.cc index 16a62c43..b0d0d610 100644 --- a/poppler/GfxFont.cc +++ b/poppler/GfxFont.cc @@ -199,15 +199,14 @@ const GooString *GfxFontLoc::pathAsGooString() const std::unique_ptr<GfxFont> GfxFont::makeFont(XRef *xref, const char *tagA, Ref idA, Dict *fontDict) { - GooString *nameA; + std::optional<std::string> name; Ref embFontIDA; GfxFontType typeA; // get base font name - nameA = nullptr; Object obj1 = fontDict->lookup("BaseFont"); if (obj1.isName()) { - nameA = new GooString(obj1.getName()); + name = obj1.getName(); } // get embedded font ID and font type @@ -216,18 +215,17 @@ std::unique_ptr<GfxFont> GfxFont::makeFont(XRef *xref, const char *tagA, Ref idA // create the font object GfxFont *font; if (typeA < fontCIDType0) { - font = new Gfx8BitFont(xref, tagA, idA, nameA, typeA, embFontIDA, fontDict); + font = new Gfx8BitFont(xref, tagA, idA, std::move(name), typeA, embFontIDA, fontDict); } else { - font = new GfxCIDFont(xref, tagA, idA, nameA, typeA, embFontIDA, fontDict); + font = new GfxCIDFont(xref, tagA, idA, std::move(name), typeA, embFontIDA, fontDict); } return std::unique_ptr<GfxFont>(font); } -GfxFont::GfxFont(const char *tagA, Ref idA, const GooString *nameA, GfxFontType typeA, Ref embFontIDA) : tag(tagA), id(idA), type(typeA) +GfxFont::GfxFont(const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA) : tag(tagA), id(idA), name(std::move(nameA)), type(typeA) { ok = false; - name = nameA; embFontID = embFontIDA; embFontName = nullptr; family = nullptr; @@ -239,9 +237,6 @@ GfxFont::GfxFont(const char *tagA, Ref idA, const GooString *nameA, GfxFontType GfxFont::~GfxFont() { delete family; - if (name) { - delete name; - } if (embFontName) { delete embFontName; } @@ -250,13 +245,13 @@ GfxFont::~GfxFont() bool GfxFont::isSubset() const { if (name) { - int i; - for (i = 0; i < name->getLength(); ++i) { - if (name->getChar(i) < 'A' || name->getChar(i) > 'Z') { + unsigned int i; + for (i = 0; i < name->size(); ++i) { + if ((*name)[i] < 'A' || (*name)[i] > 'Z') { break; } } - return i == 6 && name->getLength() > 7 && name->getChar(6) == '+'; + return i == 6 && name->size() > 7 && (*name)[6] == '+'; } return false; } @@ -268,10 +263,10 @@ std::string GfxFont::getNameWithoutSubsetTag() const } if (!isSubset()) { - return name->toStr(); + return *name; } - return name->toStr().substr(7); + return name->substr(7); } // This function extracts three pieces of information: @@ -672,7 +667,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps) GfxFontLoc fontLoc; fontLoc.locType = gfxFontLocResident; fontLoc.fontType = fontType1; - fontLoc.setPath(name->copy()); + fontLoc.path = *name; return std::move(fontLoc); // std::move only required to please g++-7 } @@ -686,7 +681,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps) } //----- external font file (fontFile, fontDir) - if (name && (path = globalParams->findFontFile(name->toStr()))) { + if (name && (path = globalParams->findFontFile(*name))) { if (std::optional<GfxFontLoc> fontLoc = getExternalFont(path, isCIDFont())) { return fontLoc; } @@ -760,7 +755,7 @@ std::optional<GfxFontLoc> GfxFont::locateFont(XRef *xref, PSOutputDev *ps) if (path) { if (std::optional<GfxFontLoc> fontLoc = getExternalFont(path, false)) { error(errSyntaxWarning, -1, "Substituting font '{0:s}' for '{1:s}'", base14SubstFonts[substIdx], name ? name->c_str() : ""); - name = new GooString(base14SubstFonts[substIdx]); + name = base14SubstFonts[substIdx]; fontLoc->substIdx = substIdx; return fontLoc; } @@ -947,9 +942,8 @@ static bool testForNumericNames(Dict *fontDict, bool hex) return numeric; } -Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, nameA, typeA, embFontIDA) +Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) { - GooString *name2; const BuiltinFont *builtinFont; const char **baseEnc; bool baseEncFromFontFile; @@ -965,7 +959,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA int firstChar, lastChar; unsigned short w; Object obj1; - int n, i, a, b, m; + int n, a, b, m; ctu = nullptr; @@ -973,11 +967,11 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA // names base14 = nullptr; if (name) { - name2 = name->copy(); - i = 0; - while (i < name2->getLength()) { - if (name2->getChar(i) == ' ') { - name2->del(i); + std::string name2 = *name; + size_t i = 0; + while (i < name2.size()) { + if (name2[i] == ' ') { + name2.erase(i, 1); } else { ++i; } @@ -987,16 +981,15 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA // invariant: base14FontMap[a].altName <= name2 < base14FontMap[b].altName while (b - a > 1) { m = (a + b) / 2; - if (name2->cmp(base14FontMap[m].altName) >= 0) { + if (name2.compare(base14FontMap[m].altName) >= 0) { a = m; } else { b = m; } } - if (!name2->cmp(base14FontMap[a].altName)) { + if (name2 == base14FontMap[a].altName) { base14 = &base14FontMap[a]; } - delete name2; } // is it a built-in font? @@ -1043,7 +1036,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA fontMat[1] = fontMat[2] = fontMat[4] = fontMat[5] = 0; obj1 = fontDict->lookup("FontMatrix"); if (obj1.isArray()) { - for (i = 0; i < 6 && i < obj1.arrayGetLength(); ++i) { + for (int i = 0; i < 6 && i < obj1.arrayGetLength(); ++i) { Object obj2 = obj1.arrayGet(i); if (obj2.isNum()) { fontMat[i] = obj2.getNum(); @@ -1055,7 +1048,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA if (type == fontType3) { obj1 = fontDict->lookup("FontBBox"); if (obj1.isArray()) { - for (i = 0; i < 4 && i < obj1.arrayGetLength(); ++i) { + for (int i = 0; i < 4 && i < obj1.arrayGetLength(); ++i) { Object obj2 = obj1.arrayGet(i); if (obj2.isNum()) { fontBBox[i] = obj2.getNum(); @@ -1186,7 +1179,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA } // copy the base encoding - for (i = 0; i < 256; ++i) { + for (int i = 0; i < 256; ++i) { enc[i] = (char *)baseEnc[i]; if ((encFree[i] = baseEncFromFontFile) && enc[i]) { enc[i] = copyString(baseEnc[i]); @@ -1198,7 +1191,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA // the accents in the encoding), so we fill in any gaps from // StandardEncoding if (type == fontType1C && embFontID != Ref::INVALID() && baseEncFromFontFile) { - for (i = 0; i < 256; ++i) { + for (int i = 0; i < 256; ++i) { if (!enc[i] && standardEncoding[i]) { enc[i] = (char *)standardEncoding[i]; encFree[i] = false; @@ -1213,7 +1206,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA encodingName = "Custom"; hasEncoding = true; int code = 0; - for (i = 0; i < obj2.arrayGetLength(); ++i) { + for (int i = 0; i < obj2.arrayGetLength(); ++i) { Object obj3 = obj2.arrayGet(i); if (obj3.isInt()) { code = obj3.getInt(); @@ -1239,7 +1232,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA // pass 1: use the name-to-Unicode mapping table missing = hex = false; - bool isZapfDingbats = name && name->endsWith("ZapfDingbats"); + bool isZapfDingbats = name && GooString::endsWith(*name, "ZapfDingbats"); for (int code = 0; code < 256; ++code) { if ((charName = enc[code])) { if (isZapfDingbats) { @@ -1372,6 +1365,7 @@ Gfx8BitFont::Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA // this is technically an error -- the Widths entry is required // for all but the Base-14 fonts -- but certain PDF generators // apparently don't include widths for Arial and TimesNewRoman + int i; if (isFixedWidth()) { i = 0; } else if (isSerif()) { @@ -1713,7 +1707,7 @@ struct cmpWidthExcepVFunctor bool operator()(const GfxFontCIDWidthExcepV &w1, const GfxFontCIDWidthExcepV &w2) { return w1.first < w2.first; } }; -GfxCIDFont::GfxCIDFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, nameA, typeA, embFontIDA) +GfxCIDFont::GfxCIDFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict) : GfxFont(tagA, idA, std::move(nameA), typeA, embFontIDA) { Dict *desFontDict; Object desFontDictObj; @@ -2225,7 +2219,7 @@ int *GfxCIDFont::getCodeToGIDMap(FoFiTrueType *ff, int *codeToGIDLen) ff->setupGSUB(lp->scriptTag, lp->languageTag); } else { if (getCollection()->cmp("Adobe-Identity") == 0) { - error(errSyntaxError, -1, "non-embedded font using identity encoding: {0:t}", getName()); + error(errSyntaxError, -1, "non-embedded font using identity encoding: {0:s}", name ? name->c_str() : "(null)"); } else { error(errSyntaxError, -1, "Unknown character collection {0:t}\n", getCollection()); } diff --git a/poppler/GfxFont.h b/poppler/GfxFont.h index 61aa09ae..7c955e3c 100644 --- a/poppler/GfxFont.h +++ b/poppler/GfxFont.h @@ -216,7 +216,7 @@ public: // Get the original font name (ignornig any munging that might have // been done to map to a canonical Base-14 font name). - const GooString *getName() const { return name; } + const std::optional<std::string> &getName() const { return name; } bool isSubset() const; @@ -301,7 +301,7 @@ public: static const char *getAlternateName(const char *name); protected: - GfxFont(const char *tagA, Ref idA, const GooString *nameA, GfxFontType typeA, Ref embFontIDA); + GfxFont(const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA); static GfxFontType getFontType(XRef *xref, Dict *fontDict, Ref *embID); void readFontDescriptor(XRef *xref, Dict *fontDict); @@ -310,7 +310,7 @@ protected: const std::string tag; // PDF font tag const Ref id; // reference (used as unique ID) - const GooString *name; // font name + std::optional<std::string> name; // font name GooString *family; // font family Stretch stretch; // font stretch Weight weight; // font weight @@ -335,7 +335,7 @@ protected: class POPPLER_PRIVATE_EXPORT Gfx8BitFont : public GfxFont { public: - Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); + Gfx8BitFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); int getNextChar(const char *s, int len, CharCode *code, Unicode const **u, int *uLen, double *dx, double *dy, double *ox, double *oy) const override; @@ -395,7 +395,7 @@ private: class POPPLER_PRIVATE_EXPORT GfxCIDFont : public GfxFont { public: - GfxCIDFont(XRef *xref, const char *tagA, Ref idA, GooString *nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); + GfxCIDFont(XRef *xref, const char *tagA, Ref idA, std::optional<std::string> &&nameA, GfxFontType typeA, Ref embFontIDA, Dict *fontDict); bool isCIDFont() const override { return true; } diff --git a/poppler/GlobalParams.cc b/poppler/GlobalParams.cc index 36caf37a..f70870ac 100644 --- a/poppler/GlobalParams.cc +++ b/poppler/GlobalParams.cc @@ -250,7 +250,7 @@ public: ~SysFontList(); SysFontList(const SysFontList &) = delete; SysFontList &operator=(const SysFontList &) = delete; - const SysFontInfo *find(const GooString *name, bool isFixedWidth, bool exact); + const SysFontInfo *find(const std::string &name, bool isFixedWidth, bool exact); #ifdef _WIN32 void scanWindowsFonts(GooString *winFontDir); @@ -275,13 +275,13 @@ SysFontList::~SysFontList() } } -const SysFontInfo *SysFontList::find(const GooString *name, bool fixedWidth, bool exact) +const SysFontInfo *SysFontList::find(const std::string &name, bool fixedWidth, bool exact) { GooString *name2; bool bold, italic, oblique; int n; - name2 = name->copy(); + name2 = new GooString(name); // remove space, comma, dash chars { @@ -909,7 +909,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty const SysFontInfo *fi = nullptr; FcPattern *p = nullptr; GooString *path = nullptr; - const GooString *fontName = font->getName(); + const std::optional<std::string> &fontName = font->getName(); GooString substituteName; if (!fontName) { return nullptr; @@ -917,7 +917,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty globalParamsLocker(); - if ((fi = sysFonts->find(fontName, font->isFixedWidth(), true))) { + if ((fi = sysFonts->find(*fontName, font->isFixedWidth(), true))) { path = fi->path->copy(); *type = fi->type; *fontNum = fi->fontNum; @@ -1010,7 +1010,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty *fontNum = 0; *type = (!strncasecmp(ext, ".ttc", 4)) ? sysFontTTC : sysFontTTF; FcPatternGetInteger(set->fonts[i], FC_INDEX, 0, fontNum); - SysFontInfo *sfi = new SysFontInfo(fontName->copy(), bold, italic, oblique, font->isFixedWidth(), new GooString((char *)s), *type, *fontNum, substituteName.copy()); + SysFontInfo *sfi = new SysFontInfo(new GooString(*fontName), bold, italic, oblique, font->isFixedWidth(), new GooString((char *)s), *type, *fontNum, substituteName.copy()); sysFonts->addFcFont(sfi); fi = sfi; path = new GooString((char *)s); @@ -1033,7 +1033,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty *fontNum = 0; *type = (!strncasecmp(ext, ".pfa", 4)) ? sysFontPFA : sysFontPFB; FcPatternGetInteger(set->fonts[i], FC_INDEX, 0, fontNum); - SysFontInfo *sfi = new SysFontInfo(fontName->copy(), bold, italic, oblique, font->isFixedWidth(), new GooString((char *)s), *type, *fontNum, substituteName.copy()); + SysFontInfo *sfi = new SysFontInfo(new GooString(*fontName), bold, italic, oblique, font->isFixedWidth(), new GooString((char *)s), *type, *fontNum, substituteName.copy()); sysFonts->addFcFont(sfi); fi = sfi; path = new GooString((char *)s); @@ -1052,7 +1052,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty } FcFontSetDestroy(set); } - if (path == nullptr && (fi = sysFonts->find(fontName, font->isFixedWidth(), false))) { + if (path == nullptr && (fi = sysFonts->find(*fontName, font->isFixedWidth(), false))) { path = fi->path->copy(); *type = fi->type; *fontNum = fi->fontNum; @@ -1149,13 +1149,13 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty const SysFontInfo *fi; GooString *path; - const GooString *fontName = font->getName(); + const std::optional<std::string> &fontName = font->getName(); if (!fontName) return nullptr; path = nullptr; globalParamsLocker(); - if ((fi = sysFonts->find(fontName, font->isFixedWidth(), false))) { + if ((fi = sysFonts->find(*fontName, font->isFixedWidth(), false))) { path = fi->path->copy(); *type = fi->type; *fontNum = fi->fontNum; diff --git a/poppler/GlobalParamsWin.cc b/poppler/GlobalParamsWin.cc index f686cb62..bd453862 100644 --- a/poppler/GlobalParamsWin.cc +++ b/poppler/GlobalParamsWin.cc @@ -500,7 +500,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty { const SysFontInfo *fi; GooString *path = nullptr; - const GooString *fontName = font->getName(); + const std::optional<std::string> &fontName = font->getName(); if (!fontName) return nullptr; const std::scoped_lock locker(mutex); @@ -510,7 +510,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty // In the system using FontConfig, findSystemFontFile() uses // base14Name only for the creation of query pattern. - if ((fi = sysFonts->find(fontName, false, false))) { + if ((fi = sysFonts->find(*fontName, false, false))) { path = fi->path->copy(); *type = fi->type; *fontNum = fi->fontNum; @@ -518,7 +518,7 @@ GooString *GlobalParams::findSystemFontFile(const GfxFont *font, SysFontType *ty substituteFontName->Set(fi->substituteName->c_str()); } else { GooString *substFontName = new GooString(findSubstituteName(font, fontFiles, substFiles, fontName->c_str())); - error(errSyntaxError, -1, "Couldn't find a font for '{0:t}', subst is '{1:t}'", fontName, substFontName); + error(errSyntaxError, -1, "Couldn't find a font for '{0:s}', subst is '{1:t}'", fontName->c_str(), substFontName); const auto fontFile = fontFiles.find(substFontName->toStr()); if (fontFile != fontFiles.end()) { path = new GooString(fontFile->second.c_str()); diff --git a/poppler/PSOutputDev.cc b/poppler/PSOutputDev.cc index 7bfb2a00..111b4728 100644 --- a/poppler/PSOutputDev.cc +++ b/poppler/PSOutputDev.cc @@ -2511,7 +2511,7 @@ void PSOutputDev::setupExternalTrueTypeFont(GfxFont *font, const GooString *file void PSOutputDev::updateFontMaxValidGlyph(GfxFont *font, int maxValidGlyph) { if (maxValidGlyph >= 0 && font->getName()) { - auto &fontMaxValidGlyph = perFontMaxValidGlyph[font->getName()->toStr()]; + auto &fontMaxValidGlyph = perFontMaxValidGlyph[*font->getName()]; if (fontMaxValidGlyph < maxValidGlyph) { fontMaxValidGlyph = maxValidGlyph; } @@ -2789,8 +2789,8 @@ GooString *PSOutputDev::makePSFontName(GfxFont *font, const Ref *id) } delete psName; } - if ((s = font->getName())) { - psName = filterPSName(s->toStr()); + if (font->getName()) { + psName = filterPSName(*font->getName()); if (fontNames.emplace(psName->toStr()).second) { return psName; } @@ -2801,8 +2801,8 @@ GooString *PSOutputDev::makePSFontName(GfxFont *font, const Ref *id) s = filterPSName(s->toStr()); psName->append('_')->append(s); delete s; - } else if ((s = font->getName())) { - s = filterPSName(s->toStr()); + } else if (font->getName()) { + s = filterPSName(*font->getName()); psName->append('_')->append(s); delete s; } @@ -5045,7 +5045,7 @@ void PSOutputDev::drawString(GfxState *state, const GooString *s) if (!(font = state->getFont())) { return; } - maxGlyphInt = (font->getName() ? perFontMaxValidGlyph[font->getName()->toStr()] : 0); + maxGlyphInt = (font->getName() ? perFontMaxValidGlyph[*font->getName()] : 0); if (maxGlyphInt < 0) { maxGlyphInt = 0; } diff --git a/poppler/TextOutputDev.cc b/poppler/TextOutputDev.cc index 9e838650..439143c7 100644 --- a/poppler/TextOutputDev.cc +++ b/poppler/TextOutputDev.cc @@ -365,7 +365,7 @@ TextFontInfo::TextFontInfo(const GfxState *state) { gfxFont = state->getFont(); #ifdef TEXTOUT_WORD_LIST - fontName = (gfxFont && gfxFont->getName()) ? gfxFont->getName()->copy() : nullptr; + fontName = (gfxFont && gfxFont->getName()) ? new GooString(*gfxFont->getName()) : nullptr; flags = gfxFont ? gfxFont->getFlags() : 0; #endif } diff --git a/utils/HtmlFonts.cc b/utils/HtmlFonts.cc index 7ee459d0..ca7d4a49 100644 --- a/utils/HtmlFonts.cc +++ b/utils/HtmlFonts.cc @@ -142,10 +142,10 @@ HtmlFont::HtmlFont(const GfxFont &font, int _size, GfxRGB rgb, double opacity) italic = true; } - if (const GooString *fontname = font.getName()) { - FontName = new GooString(fontname); + if (const std::optional<std::string> &fontname = font.getName()) { + FontName = new GooString(*fontname); - GooString fontnameLower(fontname); + GooString fontnameLower(*fontname); fontnameLower.lowerCase(); if (!bold && strstr(fontnameLower.c_str(), "bold")) {
