Index: core/fpdfapi/fpdf_page/cpdf_psengine.h |
diff --git a/core/fpdfapi/fpdf_page/cpdf_psengine.h b/core/fpdfapi/fpdf_page/cpdf_psengine.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fc8badbe6d82e552097727e12452c4f1ff380409 |
--- /dev/null |
+++ b/core/fpdfapi/fpdf_page/cpdf_psengine.h |
@@ -0,0 +1,100 @@ |
+// Copyright 2016 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. |
+ |
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
+ |
+#ifndef CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ |
+#define CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ |
+ |
+#include <memory> |
+#include <vector> |
+ |
+#include "core/fxcrt/include/fx_system.h" |
+ |
+class CPDF_PSEngine; |
+class CPDF_PSOP; |
+class CPDF_SimpleParser; |
+ |
+enum PDF_PSOP { |
+ PSOP_ADD, |
+ PSOP_SUB, |
+ PSOP_MUL, |
+ PSOP_DIV, |
+ PSOP_IDIV, |
+ PSOP_MOD, |
+ PSOP_NEG, |
+ PSOP_ABS, |
+ PSOP_CEILING, |
+ PSOP_FLOOR, |
+ PSOP_ROUND, |
+ PSOP_TRUNCATE, |
+ PSOP_SQRT, |
+ PSOP_SIN, |
+ PSOP_COS, |
+ PSOP_ATAN, |
+ PSOP_EXP, |
+ PSOP_LN, |
+ PSOP_LOG, |
+ PSOP_CVI, |
+ PSOP_CVR, |
+ PSOP_EQ, |
+ PSOP_NE, |
+ PSOP_GT, |
+ PSOP_GE, |
+ PSOP_LT, |
+ PSOP_LE, |
+ PSOP_AND, |
+ PSOP_OR, |
+ PSOP_XOR, |
+ PSOP_NOT, |
+ PSOP_BITSHIFT, |
+ PSOP_TRUE, |
+ PSOP_FALSE, |
+ PSOP_IF, |
+ PSOP_IFELSE, |
+ PSOP_POP, |
+ PSOP_EXCH, |
+ PSOP_DUP, |
+ PSOP_COPY, |
+ PSOP_INDEX, |
+ PSOP_ROLL, |
+ PSOP_PROC, |
+ PSOP_CONST |
+}; |
+ |
+constexpr uint32_t PSENGINE_STACKSIZE = 100; |
+ |
+class CPDF_PSProc { |
+ public: |
+ CPDF_PSProc(); |
+ ~CPDF_PSProc(); |
+ |
+ FX_BOOL Parse(CPDF_SimpleParser* parser); |
+ FX_BOOL Execute(CPDF_PSEngine* pEngine); |
+ |
+ private: |
+ std::vector<std::unique_ptr<CPDF_PSOP>> m_Operators; |
+}; |
+ |
+class CPDF_PSEngine { |
+ public: |
+ CPDF_PSEngine(); |
+ ~CPDF_PSEngine(); |
+ |
+ FX_BOOL Parse(const FX_CHAR* str, int size); |
+ FX_BOOL Execute(); |
+ FX_BOOL DoOperator(PDF_PSOP op); |
+ void Reset() { m_StackCount = 0; } |
+ void Push(FX_FLOAT value); |
+ void Push(int value) { Push((FX_FLOAT)value); } |
+ FX_FLOAT Pop(); |
+ uint32_t GetStackSize() const { return m_StackCount; } |
+ |
+ private: |
+ FX_FLOAT m_Stack[PSENGINE_STACKSIZE]; |
+ uint32_t m_StackCount; |
+ CPDF_PSProc m_MainProc; |
+}; |
+ |
+#endif // CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ |