OLD | NEW |
| (Empty) |
1 // Copyright 2016 PDFium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | |
6 | |
7 #ifndef CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ | |
8 #define CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ | |
9 | |
10 #include <memory> | |
11 #include <vector> | |
12 | |
13 #include "core/fxcrt/fx_system.h" | |
14 | |
15 class CPDF_PSEngine; | |
16 class CPDF_PSOP; | |
17 class CPDF_SimpleParser; | |
18 | |
19 enum PDF_PSOP { | |
20 PSOP_ADD, | |
21 PSOP_SUB, | |
22 PSOP_MUL, | |
23 PSOP_DIV, | |
24 PSOP_IDIV, | |
25 PSOP_MOD, | |
26 PSOP_NEG, | |
27 PSOP_ABS, | |
28 PSOP_CEILING, | |
29 PSOP_FLOOR, | |
30 PSOP_ROUND, | |
31 PSOP_TRUNCATE, | |
32 PSOP_SQRT, | |
33 PSOP_SIN, | |
34 PSOP_COS, | |
35 PSOP_ATAN, | |
36 PSOP_EXP, | |
37 PSOP_LN, | |
38 PSOP_LOG, | |
39 PSOP_CVI, | |
40 PSOP_CVR, | |
41 PSOP_EQ, | |
42 PSOP_NE, | |
43 PSOP_GT, | |
44 PSOP_GE, | |
45 PSOP_LT, | |
46 PSOP_LE, | |
47 PSOP_AND, | |
48 PSOP_OR, | |
49 PSOP_XOR, | |
50 PSOP_NOT, | |
51 PSOP_BITSHIFT, | |
52 PSOP_TRUE, | |
53 PSOP_FALSE, | |
54 PSOP_IF, | |
55 PSOP_IFELSE, | |
56 PSOP_POP, | |
57 PSOP_EXCH, | |
58 PSOP_DUP, | |
59 PSOP_COPY, | |
60 PSOP_INDEX, | |
61 PSOP_ROLL, | |
62 PSOP_PROC, | |
63 PSOP_CONST | |
64 }; | |
65 | |
66 constexpr uint32_t PSENGINE_STACKSIZE = 100; | |
67 | |
68 class CPDF_PSProc { | |
69 public: | |
70 CPDF_PSProc(); | |
71 ~CPDF_PSProc(); | |
72 | |
73 FX_BOOL Parse(CPDF_SimpleParser* parser, int depth); | |
74 FX_BOOL Execute(CPDF_PSEngine* pEngine); | |
75 | |
76 private: | |
77 static const int kMaxDepth = 128; | |
78 std::vector<std::unique_ptr<CPDF_PSOP>> m_Operators; | |
79 }; | |
80 | |
81 class CPDF_PSEngine { | |
82 public: | |
83 CPDF_PSEngine(); | |
84 ~CPDF_PSEngine(); | |
85 | |
86 FX_BOOL Parse(const FX_CHAR* str, int size); | |
87 FX_BOOL Execute(); | |
88 FX_BOOL DoOperator(PDF_PSOP op); | |
89 void Reset() { m_StackCount = 0; } | |
90 void Push(FX_FLOAT value); | |
91 void Push(int value) { Push((FX_FLOAT)value); } | |
92 FX_FLOAT Pop(); | |
93 uint32_t GetStackSize() const { return m_StackCount; } | |
94 | |
95 private: | |
96 FX_FLOAT m_Stack[PSENGINE_STACKSIZE]; | |
97 uint32_t m_StackCount; | |
98 CPDF_PSProc m_MainProc; | |
99 }; | |
100 | |
101 #endif // CORE_FPDFAPI_FPDF_PAGE_CPDF_PSENGINE_H_ | |
OLD | NEW |