Use inline constexpr in cmaps headers

Remove the need for spans and reduce the compile size increase [1] from
upgrading to a modern span implementation.

[1] https://ci.chromium.org/ui/p/chromium/builders/try/compile-size/150360/overview

Change-Id: I2f89f671b578ef303987afe14dac7a48120764b9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/131210
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/cmaps/BUILD.gn b/core/fpdfapi/cmaps/BUILD.gn
index 23079c8..a338f37 100644
--- a/core/fpdfapi/cmaps/BUILD.gn
+++ b/core/fpdfapi/cmaps/BUILD.gn
@@ -6,7 +6,6 @@
 
 source_set("cmaps") {
   sources = [
-    "CNS1/Adobe-CNS1-UCS2_5.cpp",
     "CNS1/B5pc-H_0.cpp",
     "CNS1/B5pc-V_0.cpp",
     "CNS1/CNS-EUC-H_0.cpp",
@@ -20,8 +19,7 @@
     "CNS1/UniCNS-UCS2-H_3.cpp",
     "CNS1/UniCNS-UCS2-V_3.cpp",
     "CNS1/UniCNS-UTF16-H_0.cpp",
-    "CNS1/cmaps_cns1.cpp",
-    "GB1/Adobe-GB1-UCS2_5.cpp",
+    "CNS1/cmaps_cns1.h",
     "GB1/GB-EUC-H_0.cpp",
     "GB1/GB-EUC-V_0.cpp",
     "GB1/GBK-EUC-H_2.cpp",
@@ -34,7 +32,7 @@
     "GB1/GBpc-EUC-V_0.cpp",
     "GB1/UniGB-UCS2-H_4.cpp",
     "GB1/UniGB-UCS2-V_4.cpp",
-    "GB1/cmaps_gb1.cpp",
+    "GB1/cmaps_gb1.h",
     "Japan1/83pv-RKSJ-H_1.cpp",
     "Japan1/90ms-RKSJ-H_2.cpp",
     "Japan1/90ms-RKSJ-V_2.cpp",
@@ -43,7 +41,6 @@
     "Japan1/90pv-RKSJ-H_1.cpp",
     "Japan1/Add-RKSJ-H_1.cpp",
     "Japan1/Add-RKSJ-V_1.cpp",
-    "Japan1/Adobe-Japan1-UCS2_4.cpp",
     "Japan1/EUC-H_1.cpp",
     "Japan1/EUC-V_1.cpp",
     "Japan1/Ext-RKSJ-H_2.cpp",
@@ -54,8 +51,7 @@
     "Japan1/UniJIS-UCS2-H_4.cpp",
     "Japan1/UniJIS-UCS2-V_4.cpp",
     "Japan1/V_1.cpp",
-    "Japan1/cmaps_japan1.cpp",
-    "Korea1/Adobe-Korea1-UCS2_2.cpp",
+    "Japan1/cmaps_japan1.h",
     "Korea1/KSC-EUC-H_0.cpp",
     "Korea1/KSC-EUC-V_0.cpp",
     "Korea1/KSCms-UHC-HW-H_1.cpp",
@@ -66,7 +62,7 @@
     "Korea1/UniKS-UCS2-H_1.cpp",
     "Korea1/UniKS-UCS2-V_1.cpp",
     "Korea1/UniKS-UTF16-H_0.cpp",
-    "Korea1/cmaps_korea1.cpp",
+    "Korea1/cmaps_korea1.h",
     "fpdf_cmaps.cpp",
     "fpdf_cmaps.h",
   ]
diff --git a/core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp b/core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.inc
similarity index 99%
rename from core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
rename to core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.inc
index d6991f6..0cf7f85 100644
--- a/core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.cpp
+++ b/core/fpdfapi/cmaps/CNS1/Adobe-CNS1-UCS2_5.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/CNS1/cmaps_cns1.h"
-
-namespace fxcmap {
-namespace {
-
-const uint16_t kCNS1CID2UnicodeData[] = {
+inline constexpr uint16_t kCNS1CID2Unicode_5[] = {
     0xFFFD, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
     0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030,
     0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
@@ -2132,9 +2127,3 @@
     0x0000, 0x0000, 0x456D, 0x38D4, 0x0000, 0x4561, 0x451B, 0x4D89, 0x4C7B,
     0x4D76, 0x45EA, 0x3FC8, 0x0000, 0x3661, 0x44DE, 0x44BD, 0x41ED,
 };
-
-}  // namespace
-
-const pdfium::span<const uint16_t> kCNS1CID2Unicode_5{kCNS1CID2UnicodeData};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/CNS1/cmaps_cns1.h b/core/fpdfapi/cmaps/CNS1/cmaps_cns1.h
index c5cfc1e..4ef43f7 100644
--- a/core/fpdfapi/cmaps/CNS1/cmaps_cns1.h
+++ b/core/fpdfapi/cmaps/CNS1/cmaps_cns1.h
@@ -10,7 +10,6 @@
 #include <stdint.h>
 
 #include "core/fpdfapi/cmaps/fpdf_cmaps.h"
-#include "core/fxcrt/span.h"
 
 namespace fxcmap {
 
@@ -30,8 +29,8 @@
 extern const uint16_t kUniCNS_UCS2_V_3[];
 extern const uint16_t kUniCNS_UTF16_H_0[];
 
-extern const pdfium::span<const uint16_t> kCNS1CID2Unicode_5;
-extern const pdfium::span<const CMap> kCNS1_cmaps_span;
+#include "Adobe-CNS1-UCS2_5.inc"
+#include "cmaps_cns1.inc"
 
 }  // namespace fxcmap
 
diff --git a/core/fpdfapi/cmaps/CNS1/cmaps_cns1.cpp b/core/fpdfapi/cmaps/CNS1/cmaps_cns1.inc
similarity index 85%
rename from core/fpdfapi/cmaps/CNS1/cmaps_cns1.cpp
rename to core/fpdfapi/cmaps/CNS1/cmaps_cns1.inc
index 13488fc..9e5ea18 100644
--- a/core/fpdfapi/cmaps/CNS1/cmaps_cns1.cpp
+++ b/core/fpdfapi/cmaps/CNS1/cmaps_cns1.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/CNS1/cmaps_cns1.h"
-
-namespace fxcmap {
-namespace {
-
-const CMap kCNS1_cmaps[] = {
+inline constexpr CMap kCNS1_cmaps[] = {
     {"B5pc-H", kB5pc_H_0, nullptr, 247, 0, CMap::Type::kRange, 0},
     {"B5pc-V", kB5pc_V_0, nullptr, 12, 0, CMap::Type::kRange, -1},
     {"HKscs-B5-H", kHKscs_B5_H_5, nullptr, 1210, 0, CMap::Type::kRange, 0},
@@ -30,9 +25,3 @@
     {"UniCNS-UTF16-V", kUniCNS_UCS2_V_3, nullptr, 13, 0, CMap::Type::kRange,
      -1},
 };
-
-}  // namespace
-
-const pdfium::span<const CMap> kCNS1_cmaps_span{kCNS1_cmaps};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.cpp b/core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.inc
similarity index 99%
rename from core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.cpp
rename to core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.inc
index c67cda1..2190fe2 100644
--- a/core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.cpp
+++ b/core/fpdfapi/cmaps/GB1/Adobe-GB1-UCS2_5.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/GB1/cmaps_gb1.h"
-
-namespace fxcmap {
-namespace {
-
-const uint16_t kGB1CID2UnicodeData[] = {
+inline constexpr uint16_t kGB1CID2Unicode_5[] = {
     0xFFFD, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
     0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030,
     0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
@@ -3376,9 +3371,3 @@
     0xA4B6, 0xA4B7, 0xA4B8, 0xA4B9, 0xA4BA, 0xA4BB, 0xA4BC, 0xA4BD, 0xA4BE,
     0xA4BF, 0xA4C0, 0xA4C1, 0xA4C2, 0xA4C3, 0xA4C4, 0xA4C5, 0xA4C6,
 };
-
-}  // namespace
-
-const pdfium::span<const uint16_t> kGB1CID2Unicode_5{kGB1CID2UnicodeData};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/GB1/cmaps_gb1.h b/core/fpdfapi/cmaps/GB1/cmaps_gb1.h
index 4618c97..7678d89 100644
--- a/core/fpdfapi/cmaps/GB1/cmaps_gb1.h
+++ b/core/fpdfapi/cmaps/GB1/cmaps_gb1.h
@@ -10,7 +10,6 @@
 #include <stdint.h>
 
 #include "core/fpdfapi/cmaps/fpdf_cmaps.h"
-#include "core/fxcrt/span.h"
 
 namespace fxcmap {
 
@@ -28,8 +27,8 @@
 extern const uint16_t kUniGB_UCS2_H_4[];
 extern const uint16_t kUniGB_UCS2_V_4[];
 
-extern const pdfium::span<const uint16_t> kGB1CID2Unicode_5;
-extern const pdfium::span<const CMap> kGB1_cmaps_span;
+#include "Adobe-GB1-UCS2_5.inc"
+#include "cmaps_gb1.inc"
 
 }  // namespace fxcmap
 
diff --git a/core/fpdfapi/cmaps/GB1/cmaps_gb1.cpp b/core/fpdfapi/cmaps/GB1/cmaps_gb1.inc
similarity index 85%
rename from core/fpdfapi/cmaps/GB1/cmaps_gb1.cpp
rename to core/fpdfapi/cmaps/GB1/cmaps_gb1.inc
index bc23333..cc56ab8 100644
--- a/core/fpdfapi/cmaps/GB1/cmaps_gb1.cpp
+++ b/core/fpdfapi/cmaps/GB1/cmaps_gb1.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/GB1/cmaps_gb1.h"
-
-namespace fxcmap {
-namespace {
-
-const CMap kGB1_cmaps[] = {
+inline constexpr CMap kGB1_cmaps[] = {
     {"GB-EUC-H", kGB_EUC_H_0, nullptr, 90, 0, CMap::Type::kRange, 0},
     {"GB-EUC-V", kGB_EUC_V_0, nullptr, 20, 0, CMap::Type::kRange, -1},
     {"GBpc-EUC-H", kGBpc_EUC_H_0, nullptr, 91, 0, CMap::Type::kRange, 0},
@@ -27,9 +22,3 @@
      0},
     {"UniGB-UTF16-V", kUniGB_UCS2_V_4, nullptr, 24, 0, CMap::Type::kRange, -1},
 };
-
-}  // namespace
-
-const pdfium::span<const CMap> kGB1_cmaps_span{kGB1_cmaps};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp b/core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.inc
similarity index 99%
rename from core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp
rename to core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.inc
index 4068bf1..daf9645 100644
--- a/core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.cpp
+++ b/core/fpdfapi/cmaps/Japan1/Adobe-Japan1-UCS2_4.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/Japan1/cmaps_japan1.h"
-
-namespace fxcmap {
-namespace {
-
-const uint16_t kJapan1CID2UnicodeData[] = {
+inline constexpr uint16_t kJapan1CID2Unicode_4[] = {
     0xFFFD, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
     0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030,
     0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
@@ -1727,9 +1722,3 @@
     0x440C, 0x3E8A, 0xFFFD, 0xFFFD, 0x4BE8, 0xFFFD, 0x3EDA, 0x3B22, 0xFFFD,
     0x457A, 0x4093, 0xFFFD, 0x4665, 0x4103, 0x4293, 0x46AE, 0x3488, 0xFFFD,
 };
-
-}  // namespace
-
-const pdfium::span<const uint16_t> kJapan1CID2Unicode_4{kJapan1CID2UnicodeData};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/Japan1/cmaps_japan1.h b/core/fpdfapi/cmaps/Japan1/cmaps_japan1.h
index 537612d..b9e8558 100644
--- a/core/fpdfapi/cmaps/Japan1/cmaps_japan1.h
+++ b/core/fpdfapi/cmaps/Japan1/cmaps_japan1.h
@@ -10,7 +10,6 @@
 #include <stdint.h>
 
 #include "core/fpdfapi/cmaps/fpdf_cmaps.h"
-#include "core/fxcrt/span.h"
 
 namespace fxcmap {
 
@@ -36,8 +35,8 @@
 extern const uint16_t kUniJIS_UTF16_H_0_DWord[];
 extern const uint16_t kUniJIS_UTF16_V_0[];
 
-extern const pdfium::span<const uint16_t> kJapan1CID2Unicode_4;
-extern const pdfium::span<const CMap> kJapan1_cmaps_span;
+#include "Adobe-Japan1-UCS2_4.inc"
+#include "cmaps_japan1.inc"
 
 }  // namespace fxcmap
 
diff --git a/core/fpdfapi/cmaps/Japan1/cmaps_japan1.cpp b/core/fpdfapi/cmaps/Japan1/cmaps_japan1.inc
similarity index 88%
rename from core/fpdfapi/cmaps/Japan1/cmaps_japan1.cpp
rename to core/fpdfapi/cmaps/Japan1/cmaps_japan1.inc
index 1624aad..0d54707 100644
--- a/core/fpdfapi/cmaps/Japan1/cmaps_japan1.cpp
+++ b/core/fpdfapi/cmaps/Japan1/cmaps_japan1.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/Japan1/cmaps_japan1.h"
-
-namespace fxcmap {
-namespace {
-
-const CMap kJapan1_cmaps[] = {
+inline constexpr CMap kJapan1_cmaps[] = {
     {"83pv-RKSJ-H", k83pv_RKSJ_H_1, nullptr, 222, 0, CMap::Type::kRange, 0},
     {"90ms-RKSJ-H", k90ms_RKSJ_H_2, nullptr, 171, 0, CMap::Type::kRange, 0},
     {"90ms-RKSJ-V", k90ms_RKSJ_V_2, nullptr, 78, 0, CMap::Type::kRange, -1},
@@ -37,9 +32,3 @@
     {"UniJIS-UTF16-V", kUniJIS_UCS2_V_4, nullptr, 251, 0, CMap::Type::kSingle,
      -1},
 };
-
-}  // namespace
-
-const pdfium::span<const CMap> kJapan1_cmaps_span{kJapan1_cmaps};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp b/core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.inc
similarity index 99%
rename from core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp
rename to core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.inc
index 7d035e0..a8b396c 100644
--- a/core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.cpp
+++ b/core/fpdfapi/cmaps/Korea1/Adobe-Korea1-UCS2_2.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/Korea1/cmaps_korea1.h"
-
-namespace fxcmap {
-namespace {
-
-const uint16_t kKorea1CID2UnicodeData[] = {
+inline constexpr uint16_t kKorea1CID2Unicode_2[] = {
     0xFFFD, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
     0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030,
     0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039,
@@ -2051,9 +2046,3 @@
     0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x203E, 0x007E,
     0x005C,
 };
-
-}  // namespace
-
-const pdfium::span<const uint16_t> kKorea1CID2Unicode_2{kKorea1CID2UnicodeData};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/cmaps/Korea1/cmaps_korea1.h b/core/fpdfapi/cmaps/Korea1/cmaps_korea1.h
index dcdfadc..487d233 100644
--- a/core/fpdfapi/cmaps/Korea1/cmaps_korea1.h
+++ b/core/fpdfapi/cmaps/Korea1/cmaps_korea1.h
@@ -10,7 +10,6 @@
 #include <stdint.h>
 
 #include "core/fpdfapi/cmaps/fpdf_cmaps.h"
-#include "core/fxcrt/span.h"
 
 namespace fxcmap {
 
@@ -25,8 +24,8 @@
 extern const uint16_t kUniKS_UCS2_V_1[];
 extern const uint16_t kUniKS_UTF16_H_0[];
 
-extern const pdfium::span<const uint16_t> kKorea1CID2Unicode_2;
-extern const pdfium::span<const CMap> kKorea1_cmaps_span;
+#include "Adobe-Korea1-UCS2_2.inc"
+#include "cmaps_korea1.inc"
 
 }  // namespace fxcmap
 
diff --git a/core/fpdfapi/cmaps/Korea1/cmaps_korea1.cpp b/core/fpdfapi/cmaps/Korea1/cmaps_korea1.inc
similarity index 82%
rename from core/fpdfapi/cmaps/Korea1/cmaps_korea1.cpp
rename to core/fpdfapi/cmaps/Korea1/cmaps_korea1.inc
index 8311d55..4d9506b 100644
--- a/core/fpdfapi/cmaps/Korea1/cmaps_korea1.cpp
+++ b/core/fpdfapi/cmaps/Korea1/cmaps_korea1.inc
@@ -4,12 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fpdfapi/cmaps/Korea1/cmaps_korea1.h"
-
-namespace fxcmap {
-namespace {
-
-const CMap kKorea1_cmaps[] = {
+inline constexpr CMap kKorea1_cmaps[] = {
     {"KSC-EUC-H", kKSC_EUC_H_0, nullptr, 467, 0, CMap::Type::kRange, 0},
     {"KSC-EUC-V", kKSC_EUC_V_0, nullptr, 16, 0, CMap::Type::kRange, -1},
     {"KSCms-UHC-H", kKSCms_UHC_H_1, nullptr, 675, 0, CMap::Type::kRange, -2},
@@ -25,9 +20,3 @@
      -2},
     {"UniKS-UTF16-V", kUniKS_UCS2_V_1, nullptr, 18, 0, CMap::Type::kRange, -1},
 };
-
-}  // namespace
-
-const pdfium::span<const CMap> kKorea1_cmaps_span{kKorea1_cmaps};
-
-}  // namespace fxcmap
diff --git a/core/fpdfapi/font/cpdf_fontglobals.cpp b/core/fpdfapi/font/cpdf_fontglobals.cpp
index 71c12f3..e87c1c6 100644
--- a/core/fpdfapi/font/cpdf_fontglobals.cpp
+++ b/core/fpdfapi/font/cpdf_fontglobals.cpp
@@ -93,22 +93,22 @@
 }
 
 void CPDF_FontGlobals::LoadEmbeddedGB1CMaps() {
-  SetEmbeddedCharset(CIDSET_GB1, fxcmap::kGB1_cmaps_span);
+  SetEmbeddedCharset(CIDSET_GB1, fxcmap::kGB1_cmaps);
   SetEmbeddedToUnicode(CIDSET_GB1, fxcmap::kGB1CID2Unicode_5);
 }
 
 void CPDF_FontGlobals::LoadEmbeddedCNS1CMaps() {
-  SetEmbeddedCharset(CIDSET_CNS1, fxcmap::kCNS1_cmaps_span);
+  SetEmbeddedCharset(CIDSET_CNS1, fxcmap::kCNS1_cmaps);
   SetEmbeddedToUnicode(CIDSET_CNS1, fxcmap::kCNS1CID2Unicode_5);
 }
 
 void CPDF_FontGlobals::LoadEmbeddedJapan1CMaps() {
-  SetEmbeddedCharset(CIDSET_JAPAN1, fxcmap::kJapan1_cmaps_span);
+  SetEmbeddedCharset(CIDSET_JAPAN1, fxcmap::kJapan1_cmaps);
   SetEmbeddedToUnicode(CIDSET_JAPAN1, fxcmap::kJapan1CID2Unicode_4);
 }
 
 void CPDF_FontGlobals::LoadEmbeddedKorea1CMaps() {
-  SetEmbeddedCharset(CIDSET_KOREA1, fxcmap::kKorea1_cmaps_span);
+  SetEmbeddedCharset(CIDSET_KOREA1, fxcmap::kKorea1_cmaps);
   SetEmbeddedToUnicode(CIDSET_KOREA1, fxcmap::kKorea1CID2Unicode_2);
 }