Clean up CBA_FontMap.
- Move CBA_FontMap_Foo structs into CBA_FontMap.
- Inline a method with only 1 caller.
- Make a public method private.
- Remove checks for nullptr in |m_Data|. This cannot happen.
Change-Id: I17b9cba2cf50a9881787bee314caad358329f60c
Reviewed-on: https://pdfium-review.googlesource.com/c/47171
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp
index 841468e..923548e 100644
--- a/fpdfsdk/formfiller/cba_fontmap.cpp
+++ b/fpdfsdk/formfiller/cba_fontmap.cpp
@@ -42,16 +42,14 @@
}
CPDF_Font* CBA_FontMap::GetPDFFont(int32_t nFontIndex) {
- if (pdfium::IndexInBounds(m_Data, nFontIndex) && m_Data[nFontIndex])
+ if (pdfium::IndexInBounds(m_Data, nFontIndex))
return m_Data[nFontIndex]->pFont;
-
return nullptr;
}
ByteString CBA_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
- if (pdfium::IndexInBounds(m_Data, nFontIndex) && m_Data[nFontIndex])
+ if (pdfium::IndexInBounds(m_Data, nFontIndex))
return m_Data[nFontIndex]->sFontName;
-
return ByteString();
}
@@ -62,7 +60,8 @@
if (KnowWord(nFontIndex, word))
return nFontIndex;
} else {
- if (const CBA_FontMap_Data* pData = GetFontMapData(0)) {
+ if (!m_Data.empty()) {
+ const Data* pData = m_Data.front().get();
if (nCharset == FX_CHARSET_Default ||
pData->nCharset == FX_CHARSET_Symbol || nCharset == pData->nCharset) {
if (KnowWord(0, word))
@@ -90,8 +89,8 @@
if (!pdfium::IndexInBounds(m_Data, nFontIndex))
return -1;
- CBA_FontMap_Data* pData = m_Data[nFontIndex].get();
- if (!pData || !pData->pFont)
+ Data* pData = m_Data[nFontIndex].get();
+ if (!pData->pFont)
return -1;
if (pData->pFont->IsUnicodeCompatible())
@@ -112,31 +111,10 @@
return CFX_Font::GetCharSetFromUnicode(word);
}
-const CBA_FontMap_Data* CBA_FontMap::GetFontMapData(int32_t nIndex) const {
- return pdfium::IndexInBounds(m_Data, nIndex) ? m_Data[nIndex].get() : nullptr;
-}
-
int32_t CBA_FontMap::GetNativeCharset() {
return FX_GetCharsetFromCodePage(FXSYS_GetACP());
}
-ByteString CBA_FontMap::GetNativeFontName(int32_t nCharset) {
- for (const auto& pData : m_NativeFont) {
- if (pData && pData->nCharset == nCharset)
- return pData->sFontName;
- }
-
- ByteString sNew = GetNativeFont(nCharset);
- if (sNew.IsEmpty())
- return ByteString();
-
- auto pNewData = pdfium::MakeUnique<CBA_FontMap_Native>();
- pNewData->nCharset = nCharset;
- pNewData->sFontName = sNew;
- m_NativeFont.push_back(std::move(pNewData));
- return sNew;
-}
-
void CBA_FontMap::Reset() {
Empty();
m_pDefaultFont = nullptr;
@@ -341,7 +319,7 @@
}
bool CBA_FontMap::KnowWord(int32_t nFontIndex, uint16_t word) {
- return pdfium::IndexInBounds(m_Data, nFontIndex) && m_Data[nFontIndex] &&
+ return pdfium::IndexInBounds(m_Data, nFontIndex) &&
CharCodeFromUnicode(nFontIndex, word) >= 0;
}
@@ -371,7 +349,7 @@
int32_t CBA_FontMap::AddFontData(CPDF_Font* pFont,
const ByteString& sFontAlias,
int32_t nCharset) {
- auto pNewData = pdfium::MakeUnique<CBA_FontMap_Data>();
+ auto pNewData = pdfium::MakeUnique<Data>();
pNewData->pFont = pFont;
pNewData->sFontName = sFontAlias;
pNewData->nCharset = nCharset;
@@ -393,8 +371,7 @@
int32_t CBA_FontMap::FindFont(const ByteString& sFontName, int32_t nCharset) {
int32_t i = 0;
for (const auto& pData : m_Data) {
- if (pData &&
- (nCharset == FX_CHARSET_Default || nCharset == pData->nCharset) &&
+ if ((nCharset == FX_CHARSET_Default || nCharset == pData->nCharset) &&
(sFontName.IsEmpty() || pData->sFontName == sFontName)) {
return i;
}
@@ -414,6 +391,23 @@
return sFontName;
}
+ByteString CBA_FontMap::GetNativeFontName(int32_t nCharset) {
+ for (const auto& pData : m_NativeFont) {
+ if (pData && pData->nCharset == nCharset)
+ return pData->sFontName;
+ }
+
+ ByteString sNew = GetNativeFont(nCharset);
+ if (sNew.IsEmpty())
+ return ByteString();
+
+ auto pNewData = pdfium::MakeUnique<Native>();
+ pNewData->nCharset = nCharset;
+ pNewData->sFontName = sNew;
+ m_NativeFont.push_back(std::move(pNewData));
+ return sNew;
+}
+
CPDF_Font* CBA_FontMap::AddFontToDocument(CPDF_Document* pDoc,
ByteString& sFontName,
uint8_t nCharset) {
diff --git a/fpdfsdk/formfiller/cba_fontmap.h b/fpdfsdk/formfiller/cba_fontmap.h
index bd14c31..6ae7d7d 100644
--- a/fpdfsdk/formfiller/cba_fontmap.h
+++ b/fpdfsdk/formfiller/cba_fontmap.h
@@ -20,17 +20,6 @@
class CPDF_Dictionary;
class CPDF_Document;
-struct CBA_FontMap_Data {
- CPDF_Font* pFont;
- int32_t nCharset;
- ByteString sFontName;
-};
-
-struct CBA_FontMap_Native {
- int32_t nCharset;
- ByteString sFontName;
-};
-
class CBA_FontMap final : public IPVT_FontMap {
public:
CBA_FontMap(CPDFSDK_Annot* pAnnot, CFX_SystemHandler* pSystemHandler);
@@ -45,15 +34,24 @@
int32_t CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) override;
int32_t CharSetFromUnicode(uint16_t word, int32_t nOldCharset) override;
- const CBA_FontMap_Data* GetFontMapData(int32_t nIndex) const;
static int32_t GetNativeCharset();
- ByteString GetNativeFontName(int32_t nCharset);
void Reset();
void SetDefaultFont(CPDF_Font* pFont, const ByteString& sFontName);
void SetAPType(const ByteString& sAPType);
private:
+ struct Data {
+ CPDF_Font* pFont;
+ int32_t nCharset;
+ ByteString sFontName;
+ };
+
+ struct Native {
+ int32_t nCharset;
+ ByteString sFontName;
+ };
+
void Initialize();
CPDF_Font* FindFontSameCharset(ByteString* sFontAlias, int32_t nCharset);
@@ -78,6 +76,7 @@
int32_t FindFont(const ByteString& sFontName, int32_t nCharset);
ByteString GetNativeFont(int32_t nCharset);
+ ByteString GetNativeFontName(int32_t nCharset);
CPDF_Font* AddFontToDocument(CPDF_Document* pDoc,
ByteString& sFontName,
uint8_t nCharset);
@@ -87,8 +86,8 @@
ByteString& sFontName,
uint8_t nCharset);
- std::vector<std::unique_ptr<CBA_FontMap_Data>> m_Data;
- std::vector<std::unique_ptr<CBA_FontMap_Native>> m_NativeFont;
+ std::vector<std::unique_ptr<Data>> m_Data;
+ std::vector<std::unique_ptr<Native>> m_NativeFont;
UnownedPtr<CFX_SystemHandler> const m_pSystemHandler;
UnownedPtr<CPDF_Document> const m_pDocument;
UnownedPtr<CPDF_Dictionary> const m_pAnnotDict;