Add constants for appearance characteristics.

Bug: pdfium:1049
Change-Id: Ie46593f3b15dd0d9e50ccc7da1e3581ad59bba4a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81632
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@chromium.org>
diff --git a/constants/BUILD.gn b/constants/BUILD.gn
index 3b3ae2d..87fc747 100644
--- a/constants/BUILD.gn
+++ b/constants/BUILD.gn
@@ -10,6 +10,8 @@
     "annotation_common.cpp",
     "annotation_common.h",
     "annotation_flags.h",
+    "appearance.cpp",
+    "appearance.h",
     "form_fields.cpp",
     "form_fields.h",
     "form_flags.h",
diff --git a/constants/appearance.cpp b/constants/appearance.cpp
new file mode 100644
index 0000000..7a73cd4
--- /dev/null
+++ b/constants/appearance.cpp
@@ -0,0 +1,23 @@
+// Copyright 2021 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "constants/appearance.h"
+
+namespace pdfium {
+namespace appearance {
+
+// ISO 32000 spec, table 189.
+// Entries in an appearance characteristics dictionary.
+const char kR[] = "R";
+const char kBC[] = "BC";
+const char kBG[] = "BG";
+const char kCA[] = "CA";
+const char kRC[] = "RC";
+const char kAC[] = "AC";
+const char kI[] = "I";
+const char kRI[] = "RI";
+const char kIX[] = "IX";
+
+}  // namespace appearance
+}  // namespace pdfium
diff --git a/constants/appearance.h b/constants/appearance.h
new file mode 100644
index 0000000..a3ba044
--- /dev/null
+++ b/constants/appearance.h
@@ -0,0 +1,24 @@
+// Copyright 2021 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONSTANTS_APPEARANCE_H_
+#define CONSTANTS_APPEARANCE_H_
+
+namespace pdfium {
+namespace appearance {
+
+extern const char kR[];
+extern const char kBC[];
+extern const char kBG[];
+extern const char kCA[];
+extern const char kRC[];
+extern const char kAC[];
+extern const char kI[];
+extern const char kRI[];
+extern const char kIX[];
+
+}  // namespace appearance
+}  // namespace pdfium
+
+#endif  // CONSTANTS_APPEARANCE_H_
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index a9c1706..d20c944 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -7,6 +7,7 @@
 #ifndef CORE_FPDFDOC_CPDF_FORMCONTROL_H_
 #define CORE_FPDFDOC_CPDF_FORMCONTROL_H_
 
+#include "constants/appearance.h"
 #include "core/fpdfdoc/cpdf_aaction.h"
 #include "core/fpdfdoc/cpdf_action.h"
 #include "core/fpdfdoc/cpdf_annot.h"
@@ -54,29 +55,43 @@
   bool HasMKEntry(const ByteString& csEntry) const;
   int GetRotation() const;
 
-  CFX_Color::TypeAndARGB GetBorderColorARGB() { return GetColorARGB("BC"); }
+  CFX_Color::TypeAndARGB GetBorderColorARGB() {
+    return GetColorARGB(pdfium::appearance::kBC);
+  }
 
   float GetOriginalBorderColorComponent(int index) {
-    return GetOriginalColorComponent(index, "BC");
+    return GetOriginalColorComponent(index, pdfium::appearance::kBC);
   }
 
-  CFX_Color GetOriginalBorderColor() { return GetOriginalColor("BC"); }
+  CFX_Color GetOriginalBorderColor() {
+    return GetOriginalColor(pdfium::appearance::kBC);
+  }
 
-  CFX_Color::TypeAndARGB GetBackgroundColor() { return GetColorARGB("BG"); }
+  CFX_Color::TypeAndARGB GetBackgroundColor() {
+    return GetColorARGB(pdfium::appearance::kBG);
+  }
 
   float GetOriginalBackgroundColorComponent(int index) {
-    return GetOriginalColorComponent(index, "BG");
+    return GetOriginalColorComponent(index, pdfium::appearance::kBG);
   }
 
-  CFX_Color GetOriginalBackgroundColor() { return GetOriginalColor("BG"); }
+  CFX_Color GetOriginalBackgroundColor() {
+    return GetOriginalColor(pdfium::appearance::kBG);
+  }
 
-  WideString GetNormalCaption() const { return GetCaption("CA"); }
-  WideString GetRolloverCaption() const { return GetCaption("RC"); }
-  WideString GetDownCaption() const { return GetCaption("AC"); }
+  WideString GetNormalCaption() const {
+    return GetCaption(pdfium::appearance::kCA);
+  }
+  WideString GetRolloverCaption() const {
+    return GetCaption(pdfium::appearance::kRC);
+  }
+  WideString GetDownCaption() const {
+    return GetCaption(pdfium::appearance::kAC);
+  }
 
-  CPDF_Stream* GetNormalIcon() { return GetIcon("I"); }
-  CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); }
-  CPDF_Stream* GetDownIcon() { return GetIcon("IX"); }
+  CPDF_Stream* GetNormalIcon() { return GetIcon(pdfium::appearance::kI); }
+  CPDF_Stream* GetRolloverIcon() { return GetIcon(pdfium::appearance::kRI); }
+  CPDF_Stream* GetDownIcon() { return GetIcon(pdfium::appearance::kIX); }
   CPDF_IconFit GetIconFit() const;
 
   int GetTextPosition() const;
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 0b06dcc..667c66c 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -12,6 +12,7 @@
 #include <utility>
 
 #include "constants/annotation_common.h"
+#include "constants/appearance.h"
 #include "constants/form_fields.h"
 #include "core/fpdfapi/font/cpdf_font.h"
 #include "core/fpdfapi/page/cpdf_docpagedata.h"
@@ -968,7 +969,8 @@
 
   CFX_FloatRect rcAnnot = pAnnotDict->GetRectFor(pdfium::annotation::kRect);
   CPDF_Dictionary* pMKDict = pAnnotDict->GetDictFor("MK");
-  int32_t nRotate = pMKDict ? pMKDict->GetIntegerFor("R") : 0;
+  int32_t nRotate =
+      pMKDict ? pMKDict->GetIntegerFor(pdfium::appearance::kR) : 0;
 
   CFX_FloatRect rcBBox;
   CFX_Matrix matrix;
@@ -1037,10 +1039,11 @@
   CFX_Color crBorder;
   CFX_Color crBG;
   if (pMKDict) {
-    if (CPDF_Array* pArray = pMKDict->GetArrayFor("BC"))
+    CPDF_Array* pArray = pMKDict->GetArrayFor(pdfium::appearance::kBC);
+    if (pArray)
       crBorder = fpdfdoc::CFXColorFromArray(*pArray);
-    if (CPDF_Array* pArray = pMKDict->GetArrayFor("BG"))
-      crBG = fpdfdoc::CFXColorFromArray(*pArray);
+    pArray = pMKDict->GetArrayFor(pdfium::appearance::kBG);
+    crBG = fpdfdoc::CFXColorFromArray(*pArray);
   }
   std::ostringstream sAppStream;
   ByteString sBG = GenerateColorAP(crBG, PaintOperation::kFill);
diff --git a/fpdfsdk/cpdfsdk_appstream.cpp b/fpdfsdk/cpdfsdk_appstream.cpp
index 2c3c198..74de5ac 100644
--- a/fpdfsdk/cpdfsdk_appstream.cpp
+++ b/fpdfsdk/cpdfsdk_appstream.cpp
@@ -10,6 +10,7 @@
 #include <sstream>
 #include <utility>
 
+#include "constants/appearance.h"
 #include "constants/form_flags.h"
 #include "core/fpdfapi/font/cpdf_font.h"
 #include "core/fpdfapi/parser/cpdf_dictionary.h"
@@ -1216,25 +1217,25 @@
   WideString csNormalCaption;
   WideString csRolloverCaption;
   WideString csDownCaption;
-  if (pControl->HasMKEntry("CA"))
+  if (pControl->HasMKEntry(pdfium::appearance::kCA))
     csNormalCaption = pControl->GetNormalCaption();
 
-  if (pControl->HasMKEntry("RC"))
+  if (pControl->HasMKEntry(pdfium::appearance::kRC))
     csRolloverCaption = pControl->GetRolloverCaption();
 
-  if (pControl->HasMKEntry("AC"))
+  if (pControl->HasMKEntry(pdfium::appearance::kAC))
     csDownCaption = pControl->GetDownCaption();
 
   CPDF_Stream* pNormalIcon = nullptr;
   CPDF_Stream* pRolloverIcon = nullptr;
   CPDF_Stream* pDownIcon = nullptr;
-  if (pControl->HasMKEntry("I"))
+  if (pControl->HasMKEntry(pdfium::appearance::kI))
     pNormalIcon = pControl->GetNormalIcon();
 
-  if (pControl->HasMKEntry("RI"))
+  if (pControl->HasMKEntry(pdfium::appearance::kRI))
     pRolloverIcon = pControl->GetRolloverIcon();
 
-  if (pControl->HasMKEntry("IX"))
+  if (pControl->HasMKEntry(pdfium::appearance::kIX))
     pDownIcon = pControl->GetDownIcon();
 
   SetDefaultIconName(pNormalIcon, "ImgA");