Index: fpdfsdk/pdfwindow/PWL_FontMap.cpp |
diff --git a/fpdfsdk/pdfwindow/PWL_FontMap.cpp b/fpdfsdk/pdfwindow/PWL_FontMap.cpp |
index 15fbbeebf6de88071b004ac4a89b2ce0265e38c1..9a2962cd5675cbab62de16864130354b148dedda 100644 |
--- a/fpdfsdk/pdfwindow/PWL_FontMap.cpp |
+++ b/fpdfsdk/pdfwindow/PWL_FontMap.cpp |
@@ -6,6 +6,8 @@ |
#include "fpdfsdk/pdfwindow/PWL_FontMap.h" |
+#include <utility> |
+ |
#include "core/fpdfapi/cpdf_modulemgr.h" |
#include "core/fpdfapi/font/cpdf_font.h" |
#include "core/fpdfapi/font/cpdf_fontencoding.h" |
@@ -14,6 +16,7 @@ |
#include "core/fpdfdoc/ipvt_fontmap.h" |
#include "fpdfsdk/pdfwindow/PWL_Wnd.h" |
#include "third_party/base/ptr_util.h" |
+#include "third_party/base/stl_util.h" |
namespace { |
@@ -57,32 +60,26 @@ CPDF_Document* CPWL_FontMap::GetDocument() { |
} |
CPDF_Font* CPWL_FontMap::GetPDFFont(int32_t nFontIndex) { |
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { |
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { |
- return pData->pFont; |
- } |
+ if (nFontIndex >= 0 && nFontIndex < pdfium::CollectionSize<int32_t>(m_Data)) { |
+ if (m_Data[nFontIndex]) |
+ return m_Data[nFontIndex]->pFont; |
} |
- |
return nullptr; |
} |
CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) { |
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { |
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex)) { |
- return pData->sFontName; |
- } |
+ if (nFontIndex >= 0 && nFontIndex < pdfium::CollectionSize<int32_t>(m_Data)) { |
+ if (m_Data[nFontIndex]) |
+ return m_Data[nFontIndex]->sFontName; |
} |
- |
- return ""; |
+ return CFX_ByteString(); |
} |
bool CPWL_FontMap::KnowWord(int32_t nFontIndex, uint16_t word) { |
- if (nFontIndex >= 0 && nFontIndex < m_aData.GetSize()) { |
- if (m_aData.GetAt(nFontIndex)) { |
+ if (nFontIndex >= 0 && nFontIndex < pdfium::CollectionSize<int32_t>(m_Data)) { |
+ if (m_Data[nFontIndex]) |
return CharCodeFromUnicode(nFontIndex, word) >= 0; |
- } |
} |
- |
return false; |
} |
@@ -119,11 +116,11 @@ int32_t CPWL_FontMap::GetWordFontIndex(uint16_t word, |
} |
int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) { |
- CPWL_FontMap_Data* pData = m_aData.GetAt(nFontIndex); |
- if (!pData) |
+ if (nFontIndex < 0 || nFontIndex >= pdfium::CollectionSize<int32_t>(m_Data)) |
return -1; |
- if (!pData->pFont) |
+ CPWL_FontMap_Data* pData = m_Data[nFontIndex].get(); |
+ if (!pData || !pData->pFont) |
return -1; |
if (pData->pFont->IsUnicodeCompatible()) |
@@ -133,40 +130,25 @@ int32_t CPWL_FontMap::CharCodeFromUnicode(int32_t nFontIndex, uint16_t word) { |
} |
CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) { |
- // searching native font is slow, so we must save time |
- for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++) { |
- if (CPWL_FontMap_Native* pData = m_aNativeFont.GetAt(i)) { |
- if (pData->nCharset == nCharset) |
- return pData->sFontName; |
- } |
+ for (const auto& pData : m_NativeFont) { |
+ if (pData && pData->nCharset == nCharset) |
+ return pData->sFontName; |
} |
CFX_ByteString sNew = GetNativeFont(nCharset); |
+ if (sNew.IsEmpty()) |
+ return CFX_ByteString(); |
- if (!sNew.IsEmpty()) { |
- CPWL_FontMap_Native* pNewData = new CPWL_FontMap_Native; |
- pNewData->nCharset = nCharset; |
- pNewData->sFontName = sNew; |
- |
- m_aNativeFont.Add(pNewData); |
- } |
- |
+ auto pNewData = pdfium::MakeUnique<CPWL_FontMap_Native>(); |
+ pNewData->nCharset = nCharset; |
+ pNewData->sFontName = sNew; |
+ m_NativeFont.push_back(std::move(pNewData)); |
return sNew; |
} |
void CPWL_FontMap::Empty() { |
- { |
- for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) |
- delete m_aData.GetAt(i); |
- |
- m_aData.RemoveAll(); |
- } |
- { |
- for (int32_t i = 0, sz = m_aNativeFont.GetSize(); i < sz; i++) |
- delete m_aNativeFont.GetAt(i); |
- |
- m_aNativeFont.RemoveAll(); |
- } |
+ m_Data.clear(); |
+ m_NativeFont.clear(); |
} |
void CPWL_FontMap::Initialize() { |
@@ -184,15 +166,15 @@ bool CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) { |
int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName, |
int32_t nCharset) { |
- for (int32_t i = 0, sz = m_aData.GetSize(); i < sz; i++) { |
- if (CPWL_FontMap_Data* pData = m_aData.GetAt(i)) { |
- if (nCharset == FXFONT_DEFAULT_CHARSET || nCharset == pData->nCharset) { |
- if (sFontName.IsEmpty() || pData->sFontName == sFontName) |
- return i; |
- } |
+ int32_t i = 0; |
+ for (const auto& pData : m_Data) { |
+ if (pData && |
+ (nCharset == FXFONT_DEFAULT_CHARSET || nCharset == pData->nCharset) && |
+ (sFontName.IsEmpty() || pData->sFontName == sFontName)) { |
+ return i; |
} |
+ ++i; |
} |
- |
return -1; |
} |
@@ -225,14 +207,12 @@ CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString& sFontAlias, |
int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont, |
const CFX_ByteString& sFontAlias, |
int32_t nCharset) { |
- CPWL_FontMap_Data* pNewData = new CPWL_FontMap_Data; |
+ auto pNewData = pdfium::MakeUnique<CPWL_FontMap_Data>(); |
pNewData->pFont = pFont; |
pNewData->sFontName = sFontAlias; |
pNewData->nCharset = nCharset; |
- |
- m_aData.Add(pNewData); |
- |
- return m_aData.GetSize() - 1; |
+ m_Data.push_back(std::move(pNewData)); |
+ return pdfium::CollectionSize<int32_t>(m_Data) - 1; |
} |
void CPWL_FontMap::AddedFont(CPDF_Font* pFont, |
@@ -243,10 +223,9 @@ CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) { |
nCharset = GetNativeCharset(); |
CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset); |
- if (m_pSystemHandler->FindNativeTrueTypeFont(sFontName)) |
- return sFontName; |
+ if (!m_pSystemHandler->FindNativeTrueTypeFont(sFontName)) |
+ return CFX_ByteString(); |
- sFontName.clear(); |
return sFontName; |
} |
@@ -305,11 +284,10 @@ CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) { |
} |
const CPWL_FontMap_Data* CPWL_FontMap::GetFontMapData(int32_t nIndex) const { |
- if (nIndex >= 0 && nIndex < m_aData.GetSize()) { |
- return m_aData.GetAt(nIndex); |
- } |
+ if (nIndex < 0 || nIndex >= pdfium::CollectionSize<int32_t>(m_Data)) |
+ return nullptr; |
- return nullptr; |
+ return m_Data[nIndex].get(); |
} |
int32_t CPWL_FontMap::GetNativeCharset() { |