Use named commands in CPWL_AppStream.

This Cl converts the individual letters to an enum named commands to
make it easier to determine what each code chunk is doing.

Change-Id: I1d23d17ea3ac9bf54b5ecfcc164ad921774d9197
Reviewed-on: https://pdfium-review.googlesource.com/8430
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/fpdfsdk/pdfwindow/cpwl_appstream.cpp b/fpdfsdk/pdfwindow/cpwl_appstream.cpp
index 9ac08fa..23ebf4f 100644
--- a/fpdfsdk/pdfwindow/cpwl_appstream.cpp
+++ b/fpdfsdk/pdfwindow/cpwl_appstream.cpp
@@ -43,6 +43,39 @@
   kLabelOverIcon
 };
 
+const char kAppendRectOperator[] = "re";
+const char kConcatMatrixOperator[] = "cm";
+const char kCurveToOperator[] = "c";
+const char kEndPathNoFillOrStrokeOperator[] = "n";
+const char kFillOperator[] = "f";
+const char kFillEvenOddOperator[] = "f*";
+const char kInvokeNamedXObjectOperator[] = "Do";
+const char kLineToOperator[] = "l";
+const char kMarkedSequenceBeginOperator[] = "BMC";
+const char kMarkedSequenceEndOperator[] = "EMC";
+const char kMoveTextPositionOperator[] = "Td";
+const char kMoveToOperator[] = "m";
+const char kSetCharacterSpacingOperator[] = "Tc";
+const char kSetCMYKOperator[] = "k";
+const char kSetCMKYStrokedOperator[] = "K";
+const char kSetDashOperator[] = "d";
+const char kSetGrayOperator[] = "g";
+const char kSetGrayStrokedOperator[] = "G";
+const char kSetLineCapStyleOperator[] = "J";
+const char kSetLineJoinStyleOperator[] = "j";
+const char kSetLineWidthOperator[] = "w";
+const char kSetNonZeroWindingClipOperator[] = "W";
+const char kSetRGBOperator[] = "rg";
+const char kSetRGBStrokedOperator[] = "RG";
+const char kSetTextFontAndSizeOperator[] = "Tf";
+const char kSetTextScaleHorizontalOperator[] = "Tz";
+const char kShowTextOperator[] = "Tj";
+const char kStateRestoreOperator[] = "Q";
+const char kStateSaveOperator[] = "q";
+const char kStrokeOperator[] = "S";
+const char kTextBeginOperator[] = "BT";
+const char kTextEndOperator[] = "ET";
+
 class AutoClosedCommand {
  public:
   AutoClosedCommand(std::ostringstream* stream,
@@ -62,7 +95,7 @@
 class AutoClosedQCommand : public AutoClosedCommand {
  public:
   explicit AutoClosedQCommand(std::ostringstream* stream)
-      : AutoClosedCommand(stream, "q", "Q") {}
+      : AutoClosedCommand(stream, kStateSaveOperator, kStateRestoreOperator) {}
   ~AutoClosedQCommand() override {}
 };
 
@@ -73,17 +106,22 @@
   switch (color.nColorType) {
     case COLORTYPE_RGB:
       sColorStream << color.fColor1 << " " << color.fColor2 << " "
-                   << color.fColor3 << " " << (bFillOrStroke ? "rg" : "RG")
+                   << color.fColor3 << " "
+                   << (bFillOrStroke ? kSetRGBOperator : kSetRGBStrokedOperator)
                    << "\n";
       break;
     case COLORTYPE_GRAY:
-      sColorStream << color.fColor1 << " " << (bFillOrStroke ? "g" : "G")
+      sColorStream << color.fColor1 << " "
+                   << (bFillOrStroke ? kSetGrayOperator
+                                     : kSetGrayStrokedOperator)
                    << "\n";
       break;
     case COLORTYPE_CMYK:
       sColorStream << color.fColor1 << " " << color.fColor2 << " "
                    << color.fColor3 << " " << color.fColor4 << " "
-                   << (bFillOrStroke ? "k" : "K") << "\n";
+                   << (bFillOrStroke ? kSetCMYKOperator
+                                     : kSetCMKYStrokedOperator)
+                   << "\n";
       break;
   }
 
@@ -119,7 +157,7 @@
   }
 
   std::ostringstream csAP;
-  csAP << pts[0][0].x << " " << pts[0][0].y << " m\n";
+  csAP << pts[0][0].x << " " << pts[0][0].y << " " << kMoveToOperator << "\n";
 
   for (size_t i = 0; i < FX_ArraySize(pts); ++i) {
     size_t nNext = i < FX_ArraySize(pts) - 1 ? i + 1 : 0;
@@ -133,7 +171,7 @@
          << pts[i][0].y + py1 * FX_BEZIER << " "
          << pts[nNext][0].x + px2 * FX_BEZIER << " "
          << pts[nNext][0].y + py2 * FX_BEZIER << " " << pts[nNext][0].x << " "
-         << pts[nNext][0].y << " c\n";
+         << pts[nNext][0].y << " " << kCurveToOperator << "\n";
   }
 
   return CFX_ByteString(csAP);
@@ -150,33 +188,35 @@
   CFX_PointF pt3(crBBox.right, crBBox.bottom + fHeight / 2);
   CFX_PointF pt4(crBBox.left + fWidth / 2, crBBox.bottom);
 
-  csAP << pt1.x << " " << pt1.y << " m\n";
+  csAP << pt1.x << " " << pt1.y << " " << kMoveToOperator << "\n";
 
   float px = pt2.x - pt1.x;
   float py = pt2.y - pt1.y;
 
   csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " "
        << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y
-       << " c\n";
+       << " " << kCurveToOperator << "\n";
 
   px = pt3.x - pt2.x;
   py = pt2.y - pt3.y;
 
   csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " "
-       << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
+       << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " "
+       << kCurveToOperator << "\n";
 
   px = pt3.x - pt4.x;
   py = pt3.y - pt4.y;
 
   csAP << pt3.x << " " << pt3.y - py * FX_BEZIER << " "
        << pt4.x + px * FX_BEZIER << " " << pt4.y << " " << pt4.x << " " << pt4.y
-       << " c\n";
+       << " " << kCurveToOperator << "\n";
 
   px = pt4.x - pt1.x;
   py = pt1.y - pt4.y;
 
   csAP << pt4.x - px * FX_BEZIER << " " << pt4.y << " " << pt1.x << " "
-       << pt1.y - py * FX_BEZIER << " " << pt1.x << " " << pt1.y << " c\n";
+       << pt1.y - py * FX_BEZIER << " " << pt1.x << " " << pt1.y << " "
+       << kCurveToOperator << "\n";
 
   return CFX_ByteString(csAP);
 }
@@ -184,10 +224,11 @@
 CFX_ByteString GetAP_Cross(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
-  csAP << crBBox.left << " " << crBBox.top << " m\n";
-  csAP << crBBox.right << " " << crBBox.bottom << " l\n";
-  csAP << crBBox.left << " " << crBBox.bottom << " m\n";
-  csAP << crBBox.right << " " << crBBox.top << " l\n";
+  csAP << crBBox.left << " " << crBBox.top << " " << kMoveToOperator << "\n";
+  csAP << crBBox.right << " " << crBBox.bottom << " " << kLineToOperator
+       << "\n";
+  csAP << crBBox.left << " " << crBBox.bottom << " " << kMoveToOperator << "\n";
+  csAP << crBBox.right << " " << crBBox.top << " " << kLineToOperator << "\n";
 
   return CFX_ByteString(csAP);
 }
@@ -203,11 +244,11 @@
   CFX_PointF pt3(crBBox.right, crBBox.bottom + fHeight / 2);
   CFX_PointF pt4(crBBox.left + fWidth / 2, crBBox.bottom);
 
-  csAP << pt1.x << " " << pt1.y << " m\n";
-  csAP << pt2.x << " " << pt2.y << " l\n";
-  csAP << pt3.x << " " << pt3.y << " l\n";
-  csAP << pt4.x << " " << pt4.y << " l\n";
-  csAP << pt1.x << " " << pt1.y << " l\n";
+  csAP << pt1.x << " " << pt1.y << " " << kMoveToOperator << "\n";
+  csAP << pt2.x << " " << pt2.y << " " << kLineToOperator << "\n";
+  csAP << pt3.x << " " << pt3.y << " " << kLineToOperator << "\n";
+  csAP << pt4.x << " " << pt4.y << " " << kLineToOperator << "\n";
+  csAP << pt1.x << " " << pt1.y << " " << kLineToOperator << "\n";
 
   return CFX_ByteString(csAP);
 }
@@ -215,11 +256,12 @@
 CFX_ByteString GetAP_Square(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
-  csAP << crBBox.left << " " << crBBox.top << " m\n";
-  csAP << crBBox.right << " " << crBBox.top << " l\n";
-  csAP << crBBox.right << " " << crBBox.bottom << " l\n";
-  csAP << crBBox.left << " " << crBBox.bottom << " l\n";
-  csAP << crBBox.left << " " << crBBox.top << " l\n";
+  csAP << crBBox.left << " " << crBBox.top << " " << kMoveToOperator << "\n";
+  csAP << crBBox.right << " " << crBBox.top << " " << kLineToOperator << "\n";
+  csAP << crBBox.right << " " << crBBox.bottom << " " << kLineToOperator
+       << "\n";
+  csAP << crBBox.left << " " << crBBox.bottom << " " << kLineToOperator << "\n";
+  csAP << crBBox.left << " " << crBBox.top << " " << kLineToOperator << "\n";
 
   return CFX_ByteString(csAP);
 }
@@ -240,14 +282,14 @@
     fAngel += FX_PI * 2 / 5.0f;
   }
 
-  csAP << px[0] << " " << py[0] << " m\n";
+  csAP << px[0] << " " << py[0] << " " << kMoveToOperator << "\n";
 
   int32_t nNext = 0;
   for (int32_t j = 0; j < 5; j++) {
     nNext += 2;
     if (nNext >= 5)
       nNext -= 5;
-    csAP << px[nNext] << " " << py[nNext] << " l\n";
+    csAP << px[nNext] << " " << py[nNext] << " " << kLineToOperator << "\n";
   }
 
   return CFX_ByteString(csAP);
@@ -268,22 +310,23 @@
 
   csAP << cos(fRotate) << " " << sin(fRotate) << " " << -sin(fRotate) << " "
        << cos(fRotate) << " " << crBBox.left + fWidth / 2 << " "
-       << crBBox.bottom + fHeight / 2 << " cm\n";
+       << crBBox.bottom + fHeight / 2 << " " << kConcatMatrixOperator << "\n";
 
-  csAP << pt1.x << " " << pt1.y << " m\n";
+  csAP << pt1.x << " " << pt1.y << " " << kMoveToOperator << "\n";
 
   px = pt2.x - pt1.x;
   py = pt2.y - pt1.y;
 
   csAP << pt1.x << " " << pt1.y + py * FX_BEZIER << " "
        << pt2.x - px * FX_BEZIER << " " << pt2.y << " " << pt2.x << " " << pt2.y
-       << " c\n";
+       << " " << kCurveToOperator << "\n";
 
   px = pt3.x - pt2.x;
   py = pt2.y - pt3.y;
 
   csAP << pt2.x + px * FX_BEZIER << " " << pt2.y << " " << pt3.x << " "
-       << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " c\n";
+       << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " "
+       << kCurveToOperator << "\n";
 
   return CFX_ByteString(csAP);
 }
@@ -293,7 +336,8 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << GetColorAppStream(crText, true) << GetAP_Check(rcBBox) << "f\n";
+    sAP << GetColorAppStream(crText, true) << GetAP_Check(rcBBox)
+        << kFillOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -303,7 +347,8 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << GetColorAppStream(crText, true) << GetAP_Circle(rcBBox) << "f\n";
+    sAP << GetColorAppStream(crText, true) << GetAP_Circle(rcBBox)
+        << kFillOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -313,7 +358,8 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << GetColorAppStream(crText, false) << GetAP_Cross(rcBBox) << "S\n";
+    sAP << GetColorAppStream(crText, false) << GetAP_Cross(rcBBox)
+        << kStrokeOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -323,8 +369,9 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << "1 w\n"
-        << GetColorAppStream(crText, true) << GetAP_Diamond(rcBBox) << "f\n";
+    sAP << "1 " << kSetLineWidthOperator << "\n"
+        << GetColorAppStream(crText, true) << GetAP_Diamond(rcBBox)
+        << kFillOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -334,7 +381,8 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << GetColorAppStream(crText, true) << GetAP_Square(rcBBox) << "f\n";
+    sAP << GetColorAppStream(crText, true) << GetAP_Square(rcBBox)
+        << kFillOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -344,7 +392,8 @@
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
-    sAP << GetColorAppStream(crText, true) << GetAP_Star(rcBBox) << "f\n";
+    sAP << GetColorAppStream(crText, true) << GetAP_Star(rcBBox)
+        << kFillOperator << "\n";
   }
   return CFX_ByteString(sAP);
 }
@@ -355,7 +404,7 @@
   CFX_ByteString sColor = GetColorAppStream(color, true);
   if (sColor.GetLength() > 0) {
     AutoClosedQCommand q(&sAppStream);
-    sAppStream << sColor << GetAP_Circle(rect) << "f\n";
+    sAppStream << sColor << GetAP_Circle(rect) << kFillOperator << "\n";
   }
   return CFX_ByteString(sAppStream);
 }
@@ -385,66 +434,70 @@
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fWidth << " w\n"
-                     << sColor << GetAP_Circle(rect_by_2) << " S\n";
+          sAppStream << fWidth << " " << kSetLineWidthOperator << "\n"
+                     << sColor << GetAP_Circle(rect_by_2) << " "
+                     << kStrokeOperator << "\n";
         }
       } break;
       case BorderStyle::DASH: {
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fWidth << " w\n"
+          sAppStream << fWidth << " " << kSetLineWidthOperator << "\n"
                      << "[" << dash.nDash << " " << dash.nGap << "] "
-                     << dash.nPhase << " d\n"
-                     << sColor << GetAP_Circle(rect_by_2) << " S\n";
+                     << dash.nPhase << " " << kSetDashOperator << "\n"
+                     << sColor << GetAP_Circle(rect_by_2) << " "
+                     << kStrokeOperator << "\n";
         }
       } break;
       case BorderStyle::BEVELED: {
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
-                     << sColor << GetAP_Circle(rect) << " S\n";
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
+                     << sColor << GetAP_Circle(rect) << " " << kStrokeOperator
+                     << "\n";
         }
 
         sColor = GetColorAppStream(crLeftTop, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
                      << sColor << GetAP_HalfCircle(rect_by_75, FX_PI / 4.0f)
-                     << " S\n";
+                     << " " << kStrokeOperator << "\n";
         }
 
         sColor = GetColorAppStream(crRightBottom, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
                      << sColor << GetAP_HalfCircle(rect_by_75, FX_PI * 5 / 4.0f)
-                     << " S\n";
+                     << " " << kStrokeOperator << "\n";
         }
       } break;
       case BorderStyle::INSET: {
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
-                     << sColor << GetAP_Circle(rect) << " S\n";
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
+                     << sColor << GetAP_Circle(rect) << " " << kStrokeOperator
+                     << "\n";
         }
 
         sColor = GetColorAppStream(crLeftTop, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
                      << sColor << GetAP_HalfCircle(rect_by_75, FX_PI / 4.0f)
-                     << " S\n";
+                     << " " << kStrokeOperator << "\n";
         }
 
         sColor = GetColorAppStream(crRightBottom, false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q2(&sAppStream);
-          sAppStream << fHalfWidth << " w\n"
+          sAppStream << fHalfWidth << " " << kSetLineWidthOperator << "\n"
                      << sColor << GetAP_HalfCircle(rect_by_75, FX_PI * 5 / 4.0f)
-                     << " S\n";
+                     << " " << kStrokeOperator << "\n";
         }
       } break;
     }
@@ -513,13 +566,15 @@
     return CFX_ByteString();
 
   std::ostringstream sRet;
-  sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
+  sRet << "/" << sFontAlias << " " << fFontSize << " "
+       << kSetTextFontAndSizeOperator << "\n";
   return CFX_ByteString(sRet);
 }
 
 CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
-  if (strWords.GetLength() > 0)
-    return PDF_EncodeString(strWords, false) + " Tj\n";
+  if (strWords.GetLength() > 0) {
+    return PDF_EncodeString(strWords, false) + " " + kShowTextOperator + "\n";
+  }
   return CFX_ByteString();
 }
 
@@ -558,8 +613,8 @@
         }
 
         if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                      << " Td\n";
+          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " "
+                      << kMoveTextPositionOperator << "\n";
 
           ptOld = ptNew;
         }
@@ -588,8 +643,8 @@
             CFX_PointF(word.ptWord.x + ptOffset.x, word.ptWord.y + ptOffset.y);
 
         if (ptNew.x != ptOld.x || ptNew.y != ptOld.y) {
-          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y
-                      << " Td\n";
+          sEditStream << ptNew.x - ptOld.x << " " << ptNew.y - ptOld.y << " "
+                      << kMoveTextPositionOperator << "\n";
           ptOld = ptNew;
         }
 
@@ -614,12 +669,13 @@
   if (sEditStream.tellp() > 0) {
     int32_t nHorzScale = pEdit->GetHorzScale();
     if (nHorzScale != 100) {
-      sAppStream << nHorzScale << " Tz\n";
+      sAppStream << nHorzScale << " " << kSetTextScaleHorizontalOperator
+                 << "\n";
     }
 
     float fCharSpace = pEdit->GetCharSpace();
     if (!IsFloatZero(fCharSpace)) {
-      sAppStream << fCharSpace << " Tc\n";
+      sAppStream << fCharSpace << " " << kSetCharacterSpacingOperator << "\n";
     }
 
     sAppStream << sEditStream.str();
@@ -662,14 +718,17 @@
     AutoClosedQCommand q(&str);
     str << rcPlate.left << " " << rcPlate.bottom << " "
         << rcPlate.right - rcPlate.left << " " << rcPlate.top - rcPlate.bottom
-        << " re W n\n";
+        << " " << kAppendRectOperator << " " << kSetNonZeroWindingClipOperator
+        << " " << kEndPathNoFillOrStrokeOperator << "\n";
 
     str << fHScale << " 0 0 " << fVScale << " " << rcPlate.left + fx << " "
-        << rcPlate.bottom + fy << " cm\n";
+        << rcPlate.bottom + fy << " " << kConcatMatrixOperator << "\n";
     str << mt.a << " " << mt.b << " " << mt.c << " " << mt.d << " " << mt.e
-        << " " << mt.f << " cm\n";
+        << " " << mt.f << " " << kConcatMatrixOperator << "\n";
 
-    str << "0 g 0 G 1 w /" << sAlias << " Do\n";
+    str << "0 " << kSetGrayOperator << " 0 " << kSetGrayStrokedOperator << " 1 "
+        << kSetLineWidthOperator << " /" << sAlias << " "
+        << kInvokeNamedXObjectOperator << "\n";
   }
   icon.Destroy();
 
@@ -846,7 +905,7 @@
     CFX_ByteString sEdit =
         GetEditAppStream(pEdit.get(), CFX_PointF(0.0f, 0.0f), true, 0);
     if (sEdit.GetLength() > 0) {
-      AutoClosedCommand bt(&sTemp, "BT", "ET");
+      AutoClosedCommand bt(&sTemp, kTextBeginOperator, kTextEndOperator);
       sTemp << GetColorAppStream(crText, true) << sEdit;
     }
   }
@@ -859,7 +918,9 @@
     AutoClosedQCommand q(&sAppStream);
     sAppStream << rcBBox.left << " " << rcBBox.bottom << " "
                << rcBBox.right - rcBBox.left << " "
-               << rcBBox.top - rcBBox.bottom << " re W n\n";
+               << rcBBox.top - rcBBox.bottom << " " << kAppendRectOperator
+               << " " << kSetNonZeroWindingClipOperator << " "
+               << kEndPathNoFillOrStrokeOperator << "\n";
     sAppStream << sTemp.str().c_str();
   }
   return CFX_ByteString(sAppStream);
@@ -891,30 +952,31 @@
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
           sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
-                     << fTop - fBottom << " re\n";
+                     << fTop - fBottom << " " << kAppendRectOperator << "\n";
           sAppStream << fLeft + fWidth << " " << fBottom + fWidth << " "
                      << fRight - fLeft - fWidth * 2 << " "
-                     << fTop - fBottom - fWidth * 2 << " re\n";
-          sAppStream << "f*\n";
+                     << fTop - fBottom - fWidth * 2 << " "
+                     << kAppendRectOperator << "\n";
+          sAppStream << kFillEvenOddOperator << "\n";
         }
         break;
       case BorderStyle::DASH:
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
-          sAppStream << fWidth << " w"
-                     << " [" << dash.nDash << " " << dash.nGap << "] "
-                     << dash.nPhase << " d\n";
-          sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
-                     << " m\n";
-          sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2
-                     << " l\n";
-          sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2
-                     << " l\n";
+          sAppStream << fWidth << " " << kSetLineWidthOperator << " ["
+                     << dash.nDash << " " << dash.nGap << "] " << dash.nPhase
+                     << " " << kSetDashOperator << "\n";
+          sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " "
+                     << kMoveToOperator << "\n";
+          sAppStream << fLeft + fWidth / 2 << " " << fTop - fWidth / 2 << " "
+                     << kLineToOperator << "\n";
+          sAppStream << fRight - fWidth / 2 << " " << fTop - fWidth / 2 << " "
+                     << kLineToOperator << "\n";
           sAppStream << fRight - fWidth / 2 << " " << fBottom + fWidth / 2
-                     << " l\n";
-          sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2
-                     << " l S\n";
+                     << " " << kLineToOperator << "\n";
+          sAppStream << fLeft + fWidth / 2 << " " << fBottom + fWidth / 2 << " "
+                     << kLineToOperator << " " << kStrokeOperator << "\n";
         }
         break;
       case BorderStyle::BEVELED:
@@ -922,54 +984,61 @@
         sColor = GetColorAppStream(crLeftTop, true);
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
-          sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
-                     << " m\n";
-          sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth
-                     << " l\n";
-          sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
-                     << " l\n";
+          sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
+                     << kMoveToOperator << "\n";
+          sAppStream << fLeft + fHalfWidth << " " << fTop - fHalfWidth << " "
+                     << kLineToOperator << "\n";
+          sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " "
+                     << kLineToOperator << "\n";
           sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
-                     << " l\n";
+                     << " " << kLineToOperator << "\n";
           sAppStream << fLeft + fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
-                     << " l\n";
+                     << " " << kLineToOperator << "\n";
           sAppStream << fLeft + fHalfWidth * 2 << " "
-                     << fBottom + fHalfWidth * 2 << " l f\n";
+                     << fBottom + fHalfWidth * 2 << " " << kLineToOperator
+                     << " " << kFillOperator << "\n";
         }
 
         sColor = GetColorAppStream(crRightBottom, true);
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
-          sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth
-                     << " m\n";
+          sAppStream << fRight - fHalfWidth << " " << fTop - fHalfWidth << " "
+                     << kMoveToOperator << "\n";
           sAppStream << fRight - fHalfWidth << " " << fBottom + fHalfWidth
-                     << " l\n";
-          sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth
-                     << " l\n";
+                     << " " << kLineToOperator << "\n";
+          sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
+                     << kLineToOperator << "\n";
           sAppStream << fLeft + fHalfWidth * 2 << " "
-                     << fBottom + fHalfWidth * 2 << " l\n";
+                     << fBottom + fHalfWidth * 2 << " " << kLineToOperator
+                     << "\n";
           sAppStream << fRight - fHalfWidth * 2 << " "
-                     << fBottom + fHalfWidth * 2 << " l\n";
+                     << fBottom + fHalfWidth * 2 << " " << kLineToOperator
+                     << "\n";
           sAppStream << fRight - fHalfWidth * 2 << " " << fTop - fHalfWidth * 2
-                     << " l f\n";
+                     << " " << kLineToOperator << " " << kFillOperator << "\n";
         }
 
         sColor = GetColorAppStream(color, true);
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
           sAppStream << fLeft << " " << fBottom << " " << fRight - fLeft << " "
-                     << fTop - fBottom << " re\n";
+                     << fTop - fBottom << " " << kAppendRectOperator << "\n";
           sAppStream << fLeft + fHalfWidth << " " << fBottom + fHalfWidth << " "
                      << fRight - fLeft - fHalfWidth * 2 << " "
-                     << fTop - fBottom - fHalfWidth * 2 << " re f*\n";
+                     << fTop - fBottom - fHalfWidth * 2 << " "
+                     << kAppendRectOperator << " " << kFillEvenOddOperator
+                     << "\n";
         }
         break;
       case BorderStyle::UNDERLINE:
         sColor = GetColorAppStream(color, false);
         if (sColor.GetLength() > 0) {
           sAppStream << sColor;
-          sAppStream << fWidth << " w\n";
-          sAppStream << fLeft << " " << fBottom + fWidth / 2 << " m\n";
-          sAppStream << fRight << " " << fBottom + fWidth / 2 << " l S\n";
+          sAppStream << fWidth << " " << kSetLineWidthOperator << "\n";
+          sAppStream << fLeft << " " << fBottom + fWidth / 2 << " "
+                     << kMoveToOperator << "\n";
+          sAppStream << fRight << " " << fBottom + fWidth / 2 << " "
+                     << kLineToOperator << " " << kStrokeOperator << "\n";
         }
         break;
     }
@@ -990,7 +1059,8 @@
                                     true)
                << rcBBox.left << " " << rcBBox.bottom << " "
                << rcBBox.right - rcBBox.left << " "
-               << rcBBox.top - rcBBox.bottom << " re f\n";
+               << rcBBox.top - rcBBox.bottom << " " << kAppendRectOperator
+               << " " << kFillOperator << "\n";
   }
 
   {
@@ -1006,11 +1076,15 @@
   if (IsFloatBigger(rcBBox.right - rcBBox.left, 6) &&
       IsFloatBigger(rcBBox.top - rcBBox.bottom, 6)) {
     AutoClosedQCommand q(&sAppStream);
-    sAppStream << " 0 g\n"
-               << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " m\n"
-               << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " l\n"
-               << ptCenter.x << " " << ptCenter.y - 1.5f << " l\n"
-               << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " l f\n";
+    sAppStream << " 0 " << kSetGrayOperator << "\n"
+               << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " "
+               << kMoveToOperator << "\n"
+               << ptCenter.x + 3 << " " << ptCenter.y + 1.5f << " "
+               << kLineToOperator << "\n"
+               << ptCenter.x << " " << ptCenter.y - 1.5f << " "
+               << kLineToOperator << "\n"
+               << ptCenter.x - 3 << " " << ptCenter.y + 1.5f << " "
+               << kLineToOperator << " " << kFillOperator << "\n";
   }
 
   return CFX_ByteString(sAppStream);
@@ -1023,8 +1097,8 @@
   if (sColor.GetLength() > 0) {
     AutoClosedQCommand q(&sAppStream);
     sAppStream << sColor << rect.left << " " << rect.bottom << " "
-               << rect.right - rect.left << " " << rect.top - rect.bottom
-               << " re f\n";
+               << rect.right - rect.left << " " << rect.top - rect.bottom << " "
+               << kAppendRectOperator << " " << kFillOperator << "\n";
   }
 
   return CFX_ByteString(sAppStream);
@@ -1552,17 +1626,20 @@
   CFX_ByteString sEdit = GetEditAppStream(pEdit.get(), CFX_PointF(), true, 0);
   if (sEdit.GetLength() > 0) {
     sBody << "/Tx ";
-    AutoClosedCommand bmc(&sBody, "BMC", "EMC");
+    AutoClosedCommand bmc(&sBody, kMarkedSequenceBeginOperator,
+                          kMarkedSequenceEndOperator);
     AutoClosedQCommand q(&sBody);
 
     if (rcContent.Width() > rcEdit.Width() ||
         rcContent.Height() > rcEdit.Height()) {
       sBody << rcEdit.left << " " << rcEdit.bottom << " " << rcEdit.Width()
-            << " " << rcEdit.Height() << " re\nW\nn\n";
+            << " " << rcEdit.Height() << " " << kAppendRectOperator << "\n"
+            << kSetNonZeroWindingClipOperator << "\n"
+            << kEndPathNoFillOrStrokeOperator << "\n";
     }
 
     CFX_Color crText = widget_->GetTextPWLColor();
-    AutoClosedCommand bt(&sBody, "BT", "ET");
+    AutoClosedCommand bt(&sBody, kTextBeginOperator, kTextEndOperator);
     sBody << GetColorAppStream(crText, true) << sEdit;
   }
 
@@ -1621,16 +1698,17 @@
                                              113.0f / 255.0f),
                                    true)
               << rcItem.left << " " << rcItem.bottom << " " << rcItem.Width()
-              << " " << rcItem.Height() << " re f\n";
+              << " " << rcItem.Height() << " " << kAppendRectOperator << " "
+              << kFillOperator << "\n";
       }
 
-      AutoClosedCommand bt(&sList, "BT", "ET");
+      AutoClosedCommand bt(&sList, kTextBeginOperator, kTextEndOperator);
       sList << GetColorAppStream(CFX_Color(COLORTYPE_GRAY, 1), true)
             << GetEditAppStream(pEdit.get(), CFX_PointF(0.0f, fy), true, 0);
     } else {
       CFX_Color crText = widget_->GetTextPWLColor();
 
-      AutoClosedCommand bt(&sList, "BT", "ET");
+      AutoClosedCommand bt(&sList, kTextBeginOperator, kTextEndOperator);
       sList << GetColorAppStream(crText, true)
             << GetEditAppStream(pEdit.get(), CFX_PointF(0.0f, fy), true, 0);
     }
@@ -1640,11 +1718,14 @@
 
   if (sList.tellp() > 0) {
     sBody << "/Tx ";
-    AutoClosedCommand bmc(&sBody, "BMC", "EMC");
+    AutoClosedCommand bmc(&sBody, kMarkedSequenceBeginOperator,
+                          kMarkedSequenceEndOperator);
     AutoClosedQCommand q(&sBody);
 
     sBody << rcClient.left << " " << rcClient.bottom << " " << rcClient.Width()
-          << " " << rcClient.Height() << " re\nW\nn\n"
+          << " " << rcClient.Height() << " " << kAppendRectOperator << "\n"
+          << kSetNonZeroWindingClipOperator << "\n"
+          << kEndPathNoFillOrStrokeOperator << "\n"
           << sList.str();
   }
   Write("N",
@@ -1726,17 +1807,21 @@
 
   if (sEdit.GetLength() > 0) {
     sBody << "/Tx ";
-    AutoClosedCommand bmc(&sBody, "BMC", "EMC");
+    AutoClosedCommand bmc(&sBody, kMarkedSequenceBeginOperator,
+                          kMarkedSequenceEndOperator);
     AutoClosedQCommand q(&sBody);
 
     if (rcContent.Width() > rcClient.Width() ||
         rcContent.Height() > rcClient.Height()) {
       sBody << rcClient.left << " " << rcClient.bottom << " "
-            << rcClient.Width() << " " << rcClient.Height() << " re\nW\nn\n";
+            << rcClient.Width() << " " << rcClient.Height() << " "
+            << kAppendRectOperator << "\n"
+            << kSetNonZeroWindingClipOperator << "\n"
+            << kEndPathNoFillOrStrokeOperator << "\n";
     }
     CFX_Color crText = widget_->GetTextPWLColor();
 
-    AutoClosedCommand bt(&sBody, "BT", "ET");
+    AutoClosedCommand bt(&sBody, kTextBeginOperator, kTextEndOperator);
     sBody << GetColorAppStream(crText, true) << sEdit;
   }
 
@@ -1747,17 +1832,20 @@
             GetColorAppStream(widget_->GetBorderPWLColor(), false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q(&sLines);
-          sLines << widget_->GetBorderWidth() << " w\n"
+          sLines << widget_->GetBorderWidth() << " " << kSetLineWidthOperator
+                 << "\n"
                  << GetColorAppStream(widget_->GetBorderPWLColor(), false)
-                 << " 2 J 0 j\n";
+                 << " 2 " << kSetLineCapStyleOperator << " 0 "
+                 << kSetLineJoinStyleOperator << "\n";
 
           for (int32_t i = 1; i < nMaxLen; ++i) {
             sLines << rcClient.left +
                           ((rcClient.right - rcClient.left) / nMaxLen) * i
-                   << " " << rcClient.bottom << " m\n"
+                   << " " << rcClient.bottom << " " << kMoveToOperator << "\n"
                    << rcClient.left +
                           ((rcClient.right - rcClient.left) / nMaxLen) * i
-                   << " " << rcClient.top << " l S\n";
+                   << " " << rcClient.top << " " << kLineToOperator << " "
+                   << kStrokeOperator << "\n";
           }
         }
         break;
@@ -1768,18 +1856,20 @@
         if (sColor.GetLength() > 0) {
           CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
           AutoClosedQCommand q(&sLines);
-          sLines << widget_->GetBorderWidth() << " w\n"
+          sLines << widget_->GetBorderWidth() << " " << kSetLineWidthOperator
+                 << "\n"
                  << GetColorAppStream(widget_->GetBorderPWLColor(), false)
                  << "[" << dsBorder.nDash << " " << dsBorder.nGap << "] "
-                 << dsBorder.nPhase << " d\n";
+                 << dsBorder.nPhase << " " << kSetDashOperator << "\n";
 
           for (int32_t i = 1; i < nMaxLen; ++i) {
             sLines << rcClient.left +
                           ((rcClient.right - rcClient.left) / nMaxLen) * i
-                   << " " << rcClient.bottom << " m\n"
+                   << " " << rcClient.bottom << " " << kMoveToOperator << "\n"
                    << rcClient.left +
                           ((rcClient.right - rcClient.left) / nMaxLen) * i
-                   << " " << rcClient.top << " l S\n";
+                   << " " << rcClient.top << " " << kLineToOperator << " "
+                   << kStrokeOperator << "\n";
           }
         }
         break;