Move CPDF_CIDFont::LoadMetricsArray() into an anonymous namespace.
LoadMetricsArray() doesn't depend on CPDF_CIDFont.
Change-Id: I5db6c9ebb4c97017eaa96c7bf80cd7ae8c0af6c6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/72211
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index 221c438..f9b1e7a 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -205,6 +205,58 @@
return pEntry[0] <= cid && pEntry[1] >= cid;
}
+void LoadMetricsArray(const CPDF_Array* pArray,
+ std::vector<uint32_t>* result,
+ int nElements) {
+ int width_status = 0;
+ int iCurElement = 0;
+ uint32_t first_code = 0;
+ uint32_t last_code = 0;
+ for (size_t i = 0; i < pArray->size(); i++) {
+ const CPDF_Object* pObj = pArray->GetDirectObjectAt(i);
+ if (!pObj)
+ continue;
+
+ const CPDF_Array* pObjArray = pObj->AsArray();
+ if (pObjArray) {
+ if (width_status != 1)
+ return;
+ if (first_code >
+ std::numeric_limits<uint32_t>::max() - pObjArray->size()) {
+ width_status = 0;
+ continue;
+ }
+
+ for (size_t j = 0; j < pObjArray->size(); j += nElements) {
+ result->push_back(first_code);
+ result->push_back(first_code);
+ for (int k = 0; k < nElements; k++)
+ result->push_back(pObjArray->GetIntegerAt(j + k));
+ first_code++;
+ }
+ width_status = 0;
+ } else {
+ if (width_status == 0) {
+ first_code = pObj->GetInteger();
+ width_status = 1;
+ } else if (width_status == 1) {
+ last_code = pObj->GetInteger();
+ width_status = 2;
+ iCurElement = 0;
+ } else {
+ if (!iCurElement) {
+ result->push_back(first_code);
+ result->push_back(last_code);
+ }
+ result->push_back(pObj->GetInteger());
+ iCurElement++;
+ if (iCurElement == nElements)
+ width_status = 0;
+ }
+ }
+ }
+}
+
} // namespace
CPDF_CIDFont::CPDF_CIDFont(CPDF_Document* pDocument, CPDF_Dictionary* pFontDict)
@@ -763,58 +815,6 @@
g_CharsetCPs[m_Charset], IsVertWriting());
}
-void CPDF_CIDFont::LoadMetricsArray(const CPDF_Array* pArray,
- std::vector<uint32_t>* result,
- int nElements) {
- int width_status = 0;
- int iCurElement = 0;
- uint32_t first_code = 0;
- uint32_t last_code = 0;
- for (size_t i = 0; i < pArray->size(); i++) {
- const CPDF_Object* pObj = pArray->GetDirectObjectAt(i);
- if (!pObj)
- continue;
-
- const CPDF_Array* pObjArray = pObj->AsArray();
- if (pObjArray) {
- if (width_status != 1)
- return;
- if (first_code >
- std::numeric_limits<uint32_t>::max() - pObjArray->size()) {
- width_status = 0;
- continue;
- }
-
- for (size_t j = 0; j < pObjArray->size(); j += nElements) {
- result->push_back(first_code);
- result->push_back(first_code);
- for (int k = 0; k < nElements; k++)
- result->push_back(pObjArray->GetIntegerAt(j + k));
- first_code++;
- }
- width_status = 0;
- } else {
- if (width_status == 0) {
- first_code = pObj->GetInteger();
- width_status = 1;
- } else if (width_status == 1) {
- last_code = pObj->GetInteger();
- width_status = 2;
- iCurElement = 0;
- } else {
- if (!iCurElement) {
- result->push_back(first_code);
- result->push_back(last_code);
- }
- result->push_back(pObj->GetInteger());
- iCurElement++;
- if (iCurElement == nElements)
- width_status = 0;
- }
- }
- }
-}
-
// static
float CPDF_CIDFont::CIDTransformToFloat(uint8_t ch) {
return (ch < 128 ? ch : ch - 255) * (1.0f / 127);
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 8cb065c..7935999 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -68,9 +68,6 @@
void LoadGB2312();
int GetGlyphIndex(uint32_t unicodeb, bool* pVertGlyph);
int GetVerticalGlyph(int index, bool* pVertGlyph);
- void LoadMetricsArray(const CPDF_Array* pArray,
- std::vector<uint32_t>* result,
- int nElements);
void LoadSubstFont();
wchar_t GetUnicodeFromCharCode(uint32_t charcode) const;