Chromium Code Reviews| 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..2d021c103a43a9afc9dc0bb448d7dc5ff3f252fb |
| --- /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 <vector> |
|
Lei Zhang
2016/08/18 06:21:39
alphabetical order
Tom Sepez
2016/08/18 21:23:07
Done.
|
| +#include <memory> |
| + |
| +#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_ |