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;
 
