OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #ifndef CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 7 #ifndef CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
8 #define CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 8 #define CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
9 | 9 |
10 #include <map> | 10 #include <map> |
11 | 11 |
12 #include "../../../../third_party/base/nonstd_unique_ptr.h" | 12 #include "../../../../third_party/base/nonstd_unique_ptr.h" |
13 #include "../../../include/fpdfapi/fpdf_pageobj.h" | 13 #include "../../../include/fpdfapi/fpdf_pageobj.h" |
14 | 14 |
15 #define PARSE_STEP_LIMIT» » 100 | 15 #define PARSE_STEP_LIMIT 100 |
16 | 16 |
17 class CPDF_StreamParser | 17 class CPDF_StreamParser { |
18 { | 18 public: |
19 public: | 19 CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize); |
20 | 20 ~CPDF_StreamParser(); |
21 CPDF_StreamParser(const uint8_t* pData, FX_DWORD dwSize); | 21 |
22 ~CPDF_StreamParser(); | 22 CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc, |
23 | 23 CPDF_Dictionary* pDict, |
24 CPDF_Stream*» » ReadInlineStream(CPDF_Document* pDoc, CPDF_Dicti
onary* pDict, CPDF_Object* pCSObj, FX_BOOL bDecode); | 24 CPDF_Object* pCSObj, |
25 typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType; | 25 FX_BOOL bDecode); |
26 | 26 typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType; |
27 SyntaxType» » » ParseNextElement(); | 27 |
28 uint8_t*» » » GetWordBuf() | 28 SyntaxType ParseNextElement(); |
29 { | 29 uint8_t* GetWordBuf() { return m_WordBuffer; } |
30 return m_WordBuffer; | 30 FX_DWORD GetWordSize() { return m_WordSize; } |
31 } | 31 CPDF_Object* GetObject() { |
32 FX_DWORD» » » GetWordSize() | 32 CPDF_Object* pObj = m_pLastObj; |
33 { | 33 m_pLastObj = NULL; |
34 return m_WordSize; | 34 return pObj; |
35 } | 35 } |
36 CPDF_Object*» » GetObject() | 36 FX_DWORD GetPos() { return m_Pos; } |
37 { | 37 void SetPos(FX_DWORD pos) { m_Pos = pos; } |
38 CPDF_Object* pObj = m_pLastObj; | 38 |
39 m_pLastObj = NULL; | 39 CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE, |
40 return pObj; | 40 FX_BOOL bInArray = FALSE); |
41 } | 41 void SkipPathObject(); |
42 FX_DWORD» » » GetPos() | 42 |
43 { | 43 protected: |
44 return m_Pos; | 44 void GetNextWord(FX_BOOL& bIsNumber); |
45 } | 45 CFX_ByteString ReadString(); |
46 void» » » » SetPos(FX_DWORD pos) | 46 CFX_ByteString ReadHexString(); |
47 { | 47 const uint8_t* m_pBuf; |
48 m_Pos = pos; | 48 FX_DWORD m_Size; |
49 } | 49 FX_DWORD m_Pos; |
50 | 50 uint8_t m_WordBuffer[256]; |
51 CPDF_Object*» » ReadNextObject(FX_BOOL bAllowNestedArray = FALSE
, FX_BOOL bInArray = FALSE); | 51 FX_DWORD m_WordSize; |
52 void» » » » SkipPathObject(); | 52 CPDF_Object* m_pLastObj; |
53 protected: | |
54 void» » » » GetNextWord(FX_BOOL& bIsNumber); | |
55 CFX_ByteString» » ReadString(); | |
56 CFX_ByteString» » ReadHexString(); | |
57 const uint8_t*» » m_pBuf; | |
58 FX_DWORD» » » m_Size; | |
59 FX_DWORD» » » m_Pos; | |
60 uint8_t» » » » m_WordBuffer[256]; | |
61 FX_DWORD» » » m_WordSize; | |
62 CPDF_Object*» » m_pLastObj; | |
63 }; | 53 }; |
64 typedef enum { | 54 typedef enum { |
65 PDFOP_CloseFillStrokePath = 0, PDFOP_FillStrokePath, | 55 PDFOP_CloseFillStrokePath = 0, |
66 PDFOP_CloseEOFillStrokePath, PDFOP_EOFillStrokePath, | 56 PDFOP_FillStrokePath, |
67 PDFOP_BeginMarkedContent_Dictionary, PDFOP_BeginImage, | 57 PDFOP_CloseEOFillStrokePath, |
68 PDFOP_BeginMarkedContent, PDFOP_BeginText, | 58 PDFOP_EOFillStrokePath, |
69 PDFOP_BeginSectionUndefined, PDFOP_CurveTo_123, | 59 PDFOP_BeginMarkedContent_Dictionary, |
70 PDFOP_ConcatMatrix, PDFOP_SetColorSpace_Fill, | 60 PDFOP_BeginImage, |
71 PDFOP_SetColorSpace_Stroke, PDFOP_SetDash, | 61 PDFOP_BeginMarkedContent, |
72 PDFOP_SetCharWidth, PDFOP_SetCachedDevice, | 62 PDFOP_BeginText, |
73 PDFOP_ExecuteXObject, PDFOP_MarkPlace_Dictionary, | 63 PDFOP_BeginSectionUndefined, |
74 PDFOP_EndImage, PDFOP_EndMarkedContent, | 64 PDFOP_CurveTo_123, |
75 PDFOP_EndText, PDFOP_EndSectionUndefined, | 65 PDFOP_ConcatMatrix, |
76 PDFOP_FillPath, PDFOP_FillPathOld, | 66 PDFOP_SetColorSpace_Fill, |
77 PDFOP_EOFillPath, PDFOP_SetGray_Fill, | 67 PDFOP_SetColorSpace_Stroke, |
78 PDFOP_SetGray_Stroke, PDFOP_SetExtendGraphState, | 68 PDFOP_SetDash, |
79 PDFOP_ClosePath, PDFOP_SetFlat, | 69 PDFOP_SetCharWidth, |
80 PDFOP_BeginImageData, PDFOP_SetLineJoin, | 70 PDFOP_SetCachedDevice, |
81 PDFOP_SetLineCap, PDFOP_SetCMYKColor_Fill, | 71 PDFOP_ExecuteXObject, |
82 PDFOP_SetCMYKColor_Stroke, PDFOP_LineTo, | 72 PDFOP_MarkPlace_Dictionary, |
83 PDFOP_MoveTo, PDFOP_SetMiterLimit, | 73 PDFOP_EndImage, |
84 PDFOP_MarkPlace, PDFOP_EndPath, | 74 PDFOP_EndMarkedContent, |
85 PDFOP_SaveGraphState, PDFOP_RestoreGraphState, | 75 PDFOP_EndText, |
86 PDFOP_Rectangle, PDFOP_SetRGBColor_Fill, | 76 PDFOP_EndSectionUndefined, |
87 PDFOP_SetRGBColor_Stroke, PDFOP_SetRenderIntent, | 77 PDFOP_FillPath, |
88 PDFOP_CloseStrokePath, PDFOP_StrokePath, | 78 PDFOP_FillPathOld, |
89 PDFOP_SetColor_Fill, PDFOP_SetColor_Stroke, | 79 PDFOP_EOFillPath, |
90 PDFOP_SetColorPS_Fill, PDFOP_SetColorPS_Stroke, | 80 PDFOP_SetGray_Fill, |
91 PDFOP_ShadeFill, PDFOP_SetCharSpace, | 81 PDFOP_SetGray_Stroke, |
92 PDFOP_MoveTextPoint, PDFOP_MoveTextPoint_SetLeading, | 82 PDFOP_SetExtendGraphState, |
93 PDFOP_SetFont, PDFOP_ShowText, | 83 PDFOP_ClosePath, |
94 PDFOP_ShowText_Positioning, PDFOP_SetTextLeading, | 84 PDFOP_SetFlat, |
95 PDFOP_SetTextMatrix, PDFOP_SetTextRenderMode, | 85 PDFOP_BeginImageData, |
96 PDFOP_SetTextRise, PDFOP_SetWordSpace, | 86 PDFOP_SetLineJoin, |
97 PDFOP_SetHorzScale, PDFOP_MoveToNextLine, | 87 PDFOP_SetLineCap, |
98 PDFOP_CurveTo_23, PDFOP_SetLineWidth, | 88 PDFOP_SetCMYKColor_Fill, |
99 PDFOP_Clip, PDFOP_EOClip, | 89 PDFOP_SetCMYKColor_Stroke, |
100 PDFOP_CurveTo_13, PDFOP_NextLineShowText, | 90 PDFOP_LineTo, |
101 PDFOP_NextLineShowText_Space, PDFOP_Invalid | 91 PDFOP_MoveTo, |
| 92 PDFOP_SetMiterLimit, |
| 93 PDFOP_MarkPlace, |
| 94 PDFOP_EndPath, |
| 95 PDFOP_SaveGraphState, |
| 96 PDFOP_RestoreGraphState, |
| 97 PDFOP_Rectangle, |
| 98 PDFOP_SetRGBColor_Fill, |
| 99 PDFOP_SetRGBColor_Stroke, |
| 100 PDFOP_SetRenderIntent, |
| 101 PDFOP_CloseStrokePath, |
| 102 PDFOP_StrokePath, |
| 103 PDFOP_SetColor_Fill, |
| 104 PDFOP_SetColor_Stroke, |
| 105 PDFOP_SetColorPS_Fill, |
| 106 PDFOP_SetColorPS_Stroke, |
| 107 PDFOP_ShadeFill, |
| 108 PDFOP_SetCharSpace, |
| 109 PDFOP_MoveTextPoint, |
| 110 PDFOP_MoveTextPoint_SetLeading, |
| 111 PDFOP_SetFont, |
| 112 PDFOP_ShowText, |
| 113 PDFOP_ShowText_Positioning, |
| 114 PDFOP_SetTextLeading, |
| 115 PDFOP_SetTextMatrix, |
| 116 PDFOP_SetTextRenderMode, |
| 117 PDFOP_SetTextRise, |
| 118 PDFOP_SetWordSpace, |
| 119 PDFOP_SetHorzScale, |
| 120 PDFOP_MoveToNextLine, |
| 121 PDFOP_CurveTo_23, |
| 122 PDFOP_SetLineWidth, |
| 123 PDFOP_Clip, |
| 124 PDFOP_EOClip, |
| 125 PDFOP_CurveTo_13, |
| 126 PDFOP_NextLineShowText, |
| 127 PDFOP_NextLineShowText_Space, |
| 128 PDFOP_Invalid |
102 } PDFOP; | 129 } PDFOP; |
103 #define PARAM_BUF_SIZE» 16 | 130 #define PARAM_BUF_SIZE 16 |
104 typedef struct { | 131 typedef struct { |
105 int»» » m_Type; | 132 int m_Type; |
106 union { | 133 union { |
107 struct { | 134 struct { |
108 FX_BOOL» » m_bInteger; | 135 FX_BOOL m_bInteger; |
109 union { | 136 union { |
110 int» » m_Integer; | 137 int m_Integer; |
111 FX_FLOAT m_Float; | 138 FX_FLOAT m_Float; |
112 }; | 139 }; |
113 } m_Number; | 140 } m_Number; |
114 CPDF_Object*» m_pObject; | 141 CPDF_Object* m_pObject; |
115 struct { | 142 struct { |
116 int»» » m_Len; | 143 int m_Len; |
117 char» » m_Buffer[32]; | 144 char m_Buffer[32]; |
118 } m_Name; | 145 } m_Name; |
119 }; | 146 }; |
120 } _ContentParam; | 147 } _ContentParam; |
121 #define _FPDF_MAX_FORM_LEVEL_» » 30 | 148 #define _FPDF_MAX_FORM_LEVEL_ 30 |
122 #define _FPDF_MAX_TYPE3_FORM_LEVEL_» 4 | 149 #define _FPDF_MAX_TYPE3_FORM_LEVEL_ 4 |
123 #define _FPDF_MAX_OBJECT_STACK_SIZE_ 512 | 150 #define _FPDF_MAX_OBJECT_STACK_SIZE_ 512 |
124 class CPDF_StreamContentParser | 151 class CPDF_StreamContentParser { |
125 { | 152 public: |
126 public: | 153 CPDF_StreamContentParser(CPDF_Document* pDoc, |
127 CPDF_StreamContentParser( | 154 CPDF_Dictionary* pPageResources, |
128 CPDF_Document* pDoc, | 155 CPDF_Dictionary* pParentResources, |
129 CPDF_Dictionary* pPageResources, | 156 CFX_AffineMatrix* pmtContentToUser, |
130 CPDF_Dictionary* pParentResources, | 157 CPDF_PageObjects* pObjList, |
131 CFX_AffineMatrix* pmtContentToUser, | 158 CPDF_Dictionary* pResources, |
132 CPDF_PageObjects* pObjList, | 159 CFX_FloatRect* pBBox, |
133 CPDF_Dictionary* pResources, | 160 CPDF_ParseOptions* pOptions, |
134 CFX_FloatRect* pBBox, | 161 CPDF_AllStates* pAllStates, |
135 CPDF_ParseOptions* pOptions, | 162 int level); |
136 CPDF_AllStates* pAllStates, | 163 ~CPDF_StreamContentParser(); |
137 int level); | 164 |
138 ~CPDF_StreamContentParser(); | 165 FX_BOOL ShouldAbort() const { return m_bAbort; } |
139 | 166 CPDF_PageObjects* GetObjectList() const { return m_pObjectList; } |
140 FX_BOOL ShouldAbort() const { return m_bAbort; } | 167 CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); } |
141 CPDF_PageObjects* GetObjectList() const { return m_pObjectList; } | 168 FX_BOOL IsColored() const { return m_bColored; } |
142 CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); } | 169 const FX_FLOAT* GetType3Data() const { return m_Type3Data; } |
143 FX_BOOL IsColored() const { return m_bColored; } | 170 |
144 const FX_FLOAT* GetType3Data() const { return m_Type3Data; } | 171 void AddNumberParam(const FX_CHAR* str, int len); |
145 | 172 void AddObjectParam(CPDF_Object* pObj); |
146 void AddNumberParam(const FX_CHAR* str, int l
en); | 173 void AddNameParam(const FX_CHAR* name, int size); |
147 void AddObjectParam(CPDF_Object* pObj); | 174 int GetNextParamPos(); |
148 void AddNameParam(const FX_CHAR* name, int si
ze); | 175 void ClearAllParams(); |
149 int GetNextParamPos(); | 176 CPDF_Object* GetObject(FX_DWORD index); |
150 void ClearAllParams(); | 177 CFX_ByteString GetString(FX_DWORD index); |
151 CPDF_Object* GetObject(FX_DWORD index); | 178 FX_FLOAT GetNumber(FX_DWORD index); |
152 CFX_ByteString GetString(FX_DWORD index); | 179 FX_FLOAT GetNumber16(FX_DWORD index); |
153 FX_FLOAT GetNumber(FX_DWORD index); | 180 int GetInteger(FX_DWORD index) { return (int32_t)(GetNumber(index)); } |
154 FX_FLOAT GetNumber16(FX_DWORD index); | 181 FX_BOOL OnOperator(const FX_CHAR* op); |
155 int GetInteger(FX_DWORD index) | 182 void BigCaseCaller(int index); |
156 { | 183 FX_DWORD GetParsePos() { return m_pSyntax->GetPos(); } |
157 return (int32_t)(GetNumber(index)); | 184 void AddTextObject(CFX_ByteString* pText, |
158 } | 185 FX_FLOAT fInitKerning, |
159 FX_BOOL OnOperator(const FX_CHAR* op); | 186 FX_FLOAT* pKerning, |
160 void BigCaseCaller(int index); | 187 int count); |
161 FX_DWORD GetParsePos() | 188 |
162 { | 189 void ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y); |
163 return m_pSyntax->GetPos(); | 190 void ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y); |
164 } | 191 void OnChangeTextMatrix(); |
165 void AddTextObject(CFX_ByteString* pText, FX_
FLOAT fInitKerning, FX_FLOAT* pKerning, int count); | 192 FX_DWORD Parse(const uint8_t* pData, FX_DWORD dwSize, FX_DWORD max_cost); |
166 | 193 void ParsePathObject(); |
167 void ConvertUserSpace(FX_FLOAT& x, FX_FLOAT&
y); | 194 void AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag); |
168 void ConvertTextSpace(FX_FLOAT& x, FX_FLOAT&
y); | 195 void AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_FLOAT w, FX_FLOAT h); |
169 void OnChangeTextMatrix(); | 196 void AddPathObject(int FillType, FX_BOOL bStroke); |
170 FX_DWORD Parse(const uint8_t* pData, FX_DWORD dwSize, FX_
DWORD max_cost); | 197 CPDF_ImageObject* AddImage(CPDF_Stream* pStream, |
171 void ParsePathObject(); | 198 CPDF_Image* pImage, |
172 void AddPathPoint(FX_FLOAT x, FX_FLOAT y, int
flag); | 199 FX_BOOL bInline); |
173 void AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_F
LOAT w, FX_FLOAT h); | 200 void AddDuplicateImage(); |
174 void AddPathObject(int FillType, FX_BOOL bStr
oke); | 201 void AddForm(CPDF_Stream*); |
175 CPDF_ImageObject* AddImage(CPDF_Stream* pStream, CPDF_Image* pImage, FX_BO
OL bInline); | 202 void SetGraphicStates(CPDF_PageObject* pObj, |
176 void AddDuplicateImage(); | 203 FX_BOOL bColor, |
177 void AddForm(CPDF_Stream*); | 204 FX_BOOL bText, |
178 void SetGraphicStates(CPDF_PageObject* pObj,
FX_BOOL bColor, FX_BOOL bText, FX_BOOL bGraph); | 205 FX_BOOL bGraph); |
179 void SaveStates(CPDF_AllStates*); | 206 void SaveStates(CPDF_AllStates*); |
180 void RestoreStates(CPDF_AllStates*); | 207 void RestoreStates(CPDF_AllStates*); |
181 CPDF_Font* FindFont(const CFX_ByteString& name); | 208 CPDF_Font* FindFont(const CFX_ByteString& name); |
182 CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name); | 209 CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name); |
183 CPDF_Pattern* FindPattern(const CFX_ByteString& name, FX_BOOL
bShading); | 210 CPDF_Pattern* FindPattern(const CFX_ByteString& name, FX_BOOL bShading); |
184 CPDF_Object* FindResourceObj(const CFX_ByteStringC& type, con
st CFX_ByteString& name); | 211 CPDF_Object* FindResourceObj(const CFX_ByteStringC& type, |
185 | 212 const CFX_ByteString& name); |
186 protected: | 213 |
187 struct OpCode { | 214 protected: |
188 FX_DWORD m_OpId; | 215 struct OpCode { |
189 void (CPDF_StreamContentParser::*m_OpHandler)(); | 216 FX_DWORD m_OpId; |
190 }; | 217 void (CPDF_StreamContentParser::*m_OpHandler)(); |
191 static const OpCode g_OpCodes[]; | 218 }; |
192 | 219 static const OpCode g_OpCodes[]; |
193 void Handle_CloseFillStrokePath(); | 220 |
194 void Handle_FillStrokePath(); | 221 void Handle_CloseFillStrokePath(); |
195 void Handle_CloseEOFillStrokePath(); | 222 void Handle_FillStrokePath(); |
196 void Handle_EOFillStrokePath(); | 223 void Handle_CloseEOFillStrokePath(); |
197 void Handle_BeginMarkedContent_Dictionary(); | 224 void Handle_EOFillStrokePath(); |
198 void Handle_BeginImage(); | 225 void Handle_BeginMarkedContent_Dictionary(); |
199 void Handle_BeginMarkedContent(); | 226 void Handle_BeginImage(); |
200 void Handle_BeginText(); | 227 void Handle_BeginMarkedContent(); |
201 void Handle_BeginSectionUndefined(); | 228 void Handle_BeginText(); |
202 void Handle_CurveTo_123(); | 229 void Handle_BeginSectionUndefined(); |
203 void Handle_ConcatMatrix(); | 230 void Handle_CurveTo_123(); |
204 void Handle_SetColorSpace_Fill(); | 231 void Handle_ConcatMatrix(); |
205 void Handle_SetColorSpace_Stroke(); | 232 void Handle_SetColorSpace_Fill(); |
206 void Handle_SetDash(); | 233 void Handle_SetColorSpace_Stroke(); |
207 void Handle_SetCharWidth(); | 234 void Handle_SetDash(); |
208 void Handle_SetCachedDevice(); | 235 void Handle_SetCharWidth(); |
209 void Handle_ExecuteXObject(); | 236 void Handle_SetCachedDevice(); |
210 void Handle_MarkPlace_Dictionary(); | 237 void Handle_ExecuteXObject(); |
211 void Handle_EndImage(); | 238 void Handle_MarkPlace_Dictionary(); |
212 void Handle_EndMarkedContent(); | 239 void Handle_EndImage(); |
213 void Handle_EndText(); | 240 void Handle_EndMarkedContent(); |
214 void Handle_EndSectionUndefined(); | 241 void Handle_EndText(); |
215 void Handle_FillPath(); | 242 void Handle_EndSectionUndefined(); |
216 void Handle_FillPathOld(); | 243 void Handle_FillPath(); |
217 void Handle_EOFillPath(); | 244 void Handle_FillPathOld(); |
218 void Handle_SetGray_Fill(); | 245 void Handle_EOFillPath(); |
219 void Handle_SetGray_Stroke(); | 246 void Handle_SetGray_Fill(); |
220 void Handle_SetExtendGraphState(); | 247 void Handle_SetGray_Stroke(); |
221 void Handle_ClosePath(); | 248 void Handle_SetExtendGraphState(); |
222 void Handle_SetFlat(); | 249 void Handle_ClosePath(); |
223 void Handle_BeginImageData(); | 250 void Handle_SetFlat(); |
224 void Handle_SetLineJoin(); | 251 void Handle_BeginImageData(); |
225 void Handle_SetLineCap(); | 252 void Handle_SetLineJoin(); |
226 void Handle_SetCMYKColor_Fill(); | 253 void Handle_SetLineCap(); |
227 void Handle_SetCMYKColor_Stroke(); | 254 void Handle_SetCMYKColor_Fill(); |
228 void Handle_LineTo(); | 255 void Handle_SetCMYKColor_Stroke(); |
229 void Handle_MoveTo(); | 256 void Handle_LineTo(); |
230 void Handle_SetMiterLimit(); | 257 void Handle_MoveTo(); |
231 void Handle_MarkPlace(); | 258 void Handle_SetMiterLimit(); |
232 void Handle_EndPath(); | 259 void Handle_MarkPlace(); |
233 void Handle_SaveGraphState(); | 260 void Handle_EndPath(); |
234 void Handle_RestoreGraphState(); | 261 void Handle_SaveGraphState(); |
235 void Handle_Rectangle(); | 262 void Handle_RestoreGraphState(); |
236 void Handle_SetRGBColor_Fill(); | 263 void Handle_Rectangle(); |
237 void Handle_SetRGBColor_Stroke(); | 264 void Handle_SetRGBColor_Fill(); |
238 void Handle_SetRenderIntent(); | 265 void Handle_SetRGBColor_Stroke(); |
239 void Handle_CloseStrokePath(); | 266 void Handle_SetRenderIntent(); |
240 void Handle_StrokePath(); | 267 void Handle_CloseStrokePath(); |
241 void Handle_SetColor_Fill(); | 268 void Handle_StrokePath(); |
242 void Handle_SetColor_Stroke(); | 269 void Handle_SetColor_Fill(); |
243 void Handle_SetColorPS_Fill(); | 270 void Handle_SetColor_Stroke(); |
244 void Handle_SetColorPS_Stroke(); | 271 void Handle_SetColorPS_Fill(); |
245 void Handle_ShadeFill(); | 272 void Handle_SetColorPS_Stroke(); |
246 void Handle_SetCharSpace(); | 273 void Handle_ShadeFill(); |
247 void Handle_MoveTextPoint(); | 274 void Handle_SetCharSpace(); |
248 void Handle_MoveTextPoint_SetLeading(); | 275 void Handle_MoveTextPoint(); |
249 void Handle_SetFont(); | 276 void Handle_MoveTextPoint_SetLeading(); |
250 void Handle_ShowText(); | 277 void Handle_SetFont(); |
251 void Handle_ShowText_Positioning(); | 278 void Handle_ShowText(); |
252 void Handle_SetTextLeading(); | 279 void Handle_ShowText_Positioning(); |
253 void Handle_SetTextMatrix(); | 280 void Handle_SetTextLeading(); |
254 void Handle_SetTextRenderMode(); | 281 void Handle_SetTextMatrix(); |
255 void Handle_SetTextRise(); | 282 void Handle_SetTextRenderMode(); |
256 void Handle_SetWordSpace(); | 283 void Handle_SetTextRise(); |
257 void Handle_SetHorzScale(); | 284 void Handle_SetWordSpace(); |
258 void Handle_MoveToNextLine(); | 285 void Handle_SetHorzScale(); |
259 void Handle_CurveTo_23(); | 286 void Handle_MoveToNextLine(); |
260 void Handle_SetLineWidth(); | 287 void Handle_CurveTo_23(); |
261 void Handle_Clip(); | 288 void Handle_SetLineWidth(); |
262 void Handle_EOClip(); | 289 void Handle_Clip(); |
263 void Handle_CurveTo_13(); | 290 void Handle_EOClip(); |
264 void Handle_NextLineShowText(); | 291 void Handle_CurveTo_13(); |
265 void Handle_NextLineShowText_Space(); | 292 void Handle_NextLineShowText(); |
266 void Handle_Invalid(); | 293 void Handle_NextLineShowText_Space(); |
267 | 294 void Handle_Invalid(); |
268 CPDF_Document* const m_pDocument; | 295 |
269 CPDF_Dictionary* m_pPageResources; | 296 CPDF_Document* const m_pDocument; |
270 CPDF_Dictionary* m_pParentResources; | 297 CPDF_Dictionary* m_pPageResources; |
271 CPDF_Dictionary* m_pResources; | 298 CPDF_Dictionary* m_pParentResources; |
272 CPDF_PageObjects* m_pObjectList; | 299 CPDF_Dictionary* m_pResources; |
273 int m_Level; | 300 CPDF_PageObjects* m_pObjectList; |
274 CFX_AffineMatrix m_mtContentToUser; | 301 int m_Level; |
275 CFX_FloatRect m_BBox; | 302 CFX_AffineMatrix m_mtContentToUser; |
276 CPDF_ParseOptions m_Options; | 303 CFX_FloatRect m_BBox; |
277 _ContentParam m_ParamBuf1[PARAM_BUF_SIZE]; | 304 CPDF_ParseOptions m_Options; |
278 FX_DWORD m_ParamStartPos; | 305 _ContentParam m_ParamBuf1[PARAM_BUF_SIZE]; |
279 FX_DWORD m_ParamCount; | 306 FX_DWORD m_ParamStartPos; |
280 FX_BOOL m_bAbort; | 307 FX_DWORD m_ParamCount; |
281 CPDF_StreamParser* m_pSyntax; | 308 FX_BOOL m_bAbort; |
282 nonstd::unique_ptr<CPDF_AllStates> m_pCurStates; | 309 CPDF_StreamParser* m_pSyntax; |
283 CPDF_ContentMark m_CurContentMark; | 310 nonstd::unique_ptr<CPDF_AllStates> m_pCurStates; |
284 CFX_PtrArray m_ClipTextList; | 311 CPDF_ContentMark m_CurContentMark; |
285 CPDF_TextObject* m_pLastTextObject; | 312 CFX_PtrArray m_ClipTextList; |
286 FX_FLOAT m_DefFontSize; | 313 CPDF_TextObject* m_pLastTextObject; |
287 int m_CompatCount; | 314 FX_FLOAT m_DefFontSize; |
288 FX_PATHPOINT* m_pPathPoints; | 315 int m_CompatCount; |
289 int m_PathPointCount; | 316 FX_PATHPOINT* m_pPathPoints; |
290 int m_PathAllocSize; | 317 int m_PathPointCount; |
291 FX_FLOAT m_PathStartX; | 318 int m_PathAllocSize; |
292 FX_FLOAT m_PathStartY; | 319 FX_FLOAT m_PathStartX; |
293 FX_FLOAT m_PathCurrentX; | 320 FX_FLOAT m_PathStartY; |
294 FX_FLOAT m_PathCurrentY; | 321 FX_FLOAT m_PathCurrentX; |
295 int m_PathClipType; | 322 FX_FLOAT m_PathCurrentY; |
296 CFX_ByteString m_LastImageName; | 323 int m_PathClipType; |
297 CPDF_Image* m_pLastImage; | 324 CFX_ByteString m_LastImageName; |
298 CFX_BinaryBuf m_LastImageDict; | 325 CPDF_Image* m_pLastImage; |
299 CFX_BinaryBuf m_LastImageData; | 326 CFX_BinaryBuf m_LastImageDict; |
300 CPDF_Dictionary* m_pLastImageDict; | 327 CFX_BinaryBuf m_LastImageData; |
301 CPDF_Dictionary* m_pLastCloneImageDict; | 328 CPDF_Dictionary* m_pLastImageDict; |
302 FX_BOOL m_bReleaseLastDict; | 329 CPDF_Dictionary* m_pLastCloneImageDict; |
303 FX_BOOL m_bSameLastDict; | 330 FX_BOOL m_bReleaseLastDict; |
304 FX_BOOL m_bColored; | 331 FX_BOOL m_bSameLastDict; |
305 FX_FLOAT m_Type3Data[6]; | 332 FX_BOOL m_bColored; |
306 FX_BOOL m_bResourceMissing; | 333 FX_FLOAT m_Type3Data[6]; |
307 CFX_PtrArray m_StateStack; | 334 FX_BOOL m_bResourceMissing; |
308 }; | 335 CFX_PtrArray m_StateStack; |
309 class CPDF_ContentParser | 336 }; |
310 { | 337 class CPDF_ContentParser { |
311 public: | 338 public: |
312 enum ParseStatus { | 339 enum ParseStatus { Ready, ToBeContinued, Done }; |
313 Ready, | 340 |
314 ToBeContinued, | 341 CPDF_ContentParser(); |
315 Done | 342 ~CPDF_ContentParser(); |
316 }; | 343 |
317 | 344 ParseStatus GetStatus() { return m_Status; } |
318 CPDF_ContentParser(); | 345 void Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions); |
319 ~CPDF_ContentParser(); | 346 void Start(CPDF_Form* pForm, |
320 | 347 CPDF_AllStates* pGraphicStates, |
321 ParseStatus GetStatus() | 348 CFX_AffineMatrix* pParentMatrix, |
322 { | 349 CPDF_Type3Char* pType3Char, |
323 return m_Status; | 350 CPDF_ParseOptions* pOptions, |
324 } | 351 int level); |
325 void Start(CPDF_Page* pPage, CPDF_ParseOption
s* pOptions); | 352 void Continue(IFX_Pause* pPause); |
326 void Start(CPDF_Form* pForm, CPDF_AllStates*
pGraphicStates, CFX_AffineMatrix* pParentMatrix, | 353 |
327 CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOp
tions, int level); | 354 protected: |
328 void Continue(IFX_Pause* pPause); | 355 void Clear(); |
329 | 356 ParseStatus m_Status; |
330 protected: | 357 CPDF_PageObjects* m_pObjects; |
331 void Clear(); | 358 FX_BOOL m_bForm; |
332 ParseStatus m_Status; | 359 CPDF_ParseOptions m_Options; |
333 CPDF_PageObjects* m_pObjects; | 360 CPDF_Type3Char* m_pType3Char; |
334 FX_BOOL m_bForm; | 361 int m_InternalStage; |
335 CPDF_ParseOptions m_Options; | 362 CPDF_StreamAcc* m_pSingleStream; |
336 CPDF_Type3Char* m_pType3Char; | 363 CPDF_StreamAcc** m_pStreamArray; |
337 int m_InternalStage; | 364 FX_DWORD m_nStreams; |
338 CPDF_StreamAcc* m_pSingleStream; | 365 uint8_t* m_pData; |
339 CPDF_StreamAcc** m_pStreamArray; | 366 FX_DWORD m_Size; |
340 FX_DWORD m_nStreams; | 367 class CPDF_StreamContentParser* m_pParser; |
341 uint8_t* m_pData; | 368 FX_DWORD m_CurrentOffset; |
342 FX_DWORD m_Size; | 369 CPDF_StreamFilter* m_pStreamFilter; |
343 class CPDF_StreamContentParser* m_pParser; | 370 }; |
344 FX_DWORD m_CurrentOffset; | 371 class CPDF_AllStates : public CPDF_GraphicStates { |
345 CPDF_StreamFilter* m_pStreamFilter; | 372 public: |
346 }; | 373 CPDF_AllStates(); |
347 class CPDF_AllStates : public CPDF_GraphicStates | 374 ~CPDF_AllStates(); |
348 { | 375 void Copy(const CPDF_AllStates& src); |
349 public: | 376 void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser); |
350 CPDF_AllStates(); | 377 void SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale); |
351 ~CPDF_AllStates(); | 378 CFX_AffineMatrix m_TextMatrix, m_CTM, m_ParentMatrix; |
352 void Copy(const CPDF_AllStates& src); | 379 FX_FLOAT m_TextX, m_TextY, m_TextLineX, m_TextLineY; |
353 void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pPa
rser); | 380 FX_FLOAT m_TextLeading, m_TextRise, m_TextHorzScale; |
354 void SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale); | 381 }; |
355 CFX_AffineMatrix m_TextMatrix, m_CTM, m_ParentMatrix; | 382 |
356 FX_FLOAT m_TextX, m_TextY, m_TextLineX, m_TextLin
eY; | 383 class CPDF_DocPageData { |
357 FX_FLOAT m_TextLeading, m_TextRise, m_TextHorzSca
le; | 384 public: |
358 }; | 385 explicit CPDF_DocPageData(CPDF_Document* pPDFDoc); |
359 | 386 ~CPDF_DocPageData(); |
360 class CPDF_DocPageData | 387 |
361 { | 388 void Clear(FX_BOOL bRelease = FALSE); |
362 public: | 389 CPDF_Font* GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly); |
363 explicit CPDF_DocPageData(CPDF_Document *pPDFDoc); | 390 CPDF_Font* GetStandardFont(const CFX_ByteStringC& fontName, |
364 ~CPDF_DocPageData(); | 391 CPDF_FontEncoding* pEncoding); |
365 | 392 void ReleaseFont(CPDF_Dictionary* pFontDict); |
366 void Clear(FX_BOOL bRelease = FALSE); | 393 CPDF_ColorSpace* GetColorSpace(CPDF_Object* pCSObj, |
367 CPDF_Font* GetFont(CPDF_Dictionary* pFontDict, FX_BOOL find
Only); | 394 CPDF_Dictionary* pResources); |
368 CPDF_Font* GetStandardFont(const CFX_ByteStringC& fontName,
CPDF_FontEncoding* pEncoding); | 395 CPDF_ColorSpace* GetCopiedColorSpace(CPDF_Object* pCSObj); |
369 void ReleaseFont(CPDF_Dictionary* pFontDict); | 396 void ReleaseColorSpace(CPDF_Object* pColorSpace); |
370 CPDF_ColorSpace* GetColorSpace(CPDF_Object* pCSObj, CPDF_Dictiona
ry* pResources); | 397 CPDF_Pattern* GetPattern(CPDF_Object* pPatternObj, |
371 CPDF_ColorSpace* GetCopiedColorSpace(CPDF_Object* pCSObj); | 398 FX_BOOL bShading, |
372 void ReleaseColorSpace(CPDF_Object* pColorSpace); | 399 const CFX_AffineMatrix* matrix); |
373 CPDF_Pattern* GetPattern(CPDF_Object* pPatternObj, FX_BOOL bSh
ading, const CFX_AffineMatrix* matrix); | 400 void ReleasePattern(CPDF_Object* pPatternObj); |
374 void ReleasePattern(CPDF_Object* pPatternObj); | 401 CPDF_Image* GetImage(CPDF_Object* pImageStream); |
375 CPDF_Image* GetImage(CPDF_Object* pImageStream); | 402 void ReleaseImage(CPDF_Object* pImageStream); |
376 void ReleaseImage(CPDF_Object* pImageStream); | 403 CPDF_IccProfile* GetIccProfile(CPDF_Stream* pIccProfileStream); |
377 CPDF_IccProfile* GetIccProfile(CPDF_Stream* pIccProfileStream); | 404 void ReleaseIccProfile(CPDF_IccProfile* pIccProfile); |
378 void ReleaseIccProfile(CPDF_IccProfile* pIccProfile); | 405 CPDF_StreamAcc* GetFontFileStreamAcc(CPDF_Stream* pFontStream); |
379 CPDF_StreamAcc* GetFontFileStreamAcc(CPDF_Stream* pFontStream); | 406 void ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream, |
380 void ReleaseFontFileStreamAcc(CPDF_Stream* pFontStrea
m, FX_BOOL bForce = FALSE); | 407 FX_BOOL bForce = FALSE); |
381 FX_BOOL IsForceClear() const {return m_bForceClear;} | 408 FX_BOOL IsForceClear() const { return m_bForceClear; } |
382 CPDF_CountedColorSpace* FindColorSpacePtr(CPDF_Object* pCSObj) const; | 409 CPDF_CountedColorSpace* FindColorSpacePtr(CPDF_Object* pCSObj) const; |
383 CPDF_CountedPattern* FindPatternPtr(CPDF_Object* pPatternObj) const; | 410 CPDF_CountedPattern* FindPatternPtr(CPDF_Object* pPatternObj) const; |
384 | 411 |
385 private: | 412 private: |
386 using CPDF_CountedFont = CPDF_CountedObject<CPDF_Font>; | 413 using CPDF_CountedFont = CPDF_CountedObject<CPDF_Font>; |
387 using CPDF_CountedIccProfile = CPDF_CountedObject<CPDF_IccProfile>; | 414 using CPDF_CountedIccProfile = CPDF_CountedObject<CPDF_IccProfile>; |
388 using CPDF_CountedImage = CPDF_CountedObject<CPDF_Image>; | 415 using CPDF_CountedImage = CPDF_CountedObject<CPDF_Image>; |
389 using CPDF_CountedStreamAcc = CPDF_CountedObject<CPDF_StreamAcc>; | 416 using CPDF_CountedStreamAcc = CPDF_CountedObject<CPDF_StreamAcc>; |
390 | 417 |
391 using CPDF_ColorSpaceMap = std::map<CPDF_Object*, CPDF_CountedColorSpace*>; | 418 using CPDF_ColorSpaceMap = std::map<CPDF_Object*, CPDF_CountedColorSpace*>; |
392 using CPDF_FontFileMap = std::map<CPDF_Stream*, CPDF_CountedStreamAcc*>; | 419 using CPDF_FontFileMap = std::map<CPDF_Stream*, CPDF_CountedStreamAcc*>; |
393 using CPDF_FontMap = std::map<CPDF_Dictionary*, CPDF_CountedFont*>; | 420 using CPDF_FontMap = std::map<CPDF_Dictionary*, CPDF_CountedFont*>; |
394 using CPDF_IccProfileMap = std::map<CPDF_Stream*, CPDF_CountedIccProfile*>; | 421 using CPDF_IccProfileMap = std::map<CPDF_Stream*, CPDF_CountedIccProfile*>; |
395 using CPDF_ImageMap = std::map<FX_DWORD, CPDF_CountedImage*>; | 422 using CPDF_ImageMap = std::map<FX_DWORD, CPDF_CountedImage*>; |
396 using CPDF_PatternMap = std::map<CPDF_Object*, CPDF_CountedPattern*>; | 423 using CPDF_PatternMap = std::map<CPDF_Object*, CPDF_CountedPattern*>; |
397 | 424 |
398 CPDF_Document* const m_pPDFDoc; | 425 CPDF_Document* const m_pPDFDoc; |
399 CFX_MapByteStringToPtr m_HashProfileMap; | 426 CFX_MapByteStringToPtr m_HashProfileMap; |
400 FX_BOOL m_bForceClear; | 427 FX_BOOL m_bForceClear; |
401 | 428 |
402 CPDF_ColorSpaceMap m_ColorSpaceMap; | 429 CPDF_ColorSpaceMap m_ColorSpaceMap; |
403 CPDF_FontFileMap m_FontFileMap; | 430 CPDF_FontFileMap m_FontFileMap; |
404 CPDF_FontMap m_FontMap; | 431 CPDF_FontMap m_FontMap; |
405 CPDF_IccProfileMap m_IccProfileMap; | 432 CPDF_IccProfileMap m_IccProfileMap; |
406 CPDF_ImageMap m_ImageMap; | 433 CPDF_ImageMap m_ImageMap; |
407 CPDF_PatternMap m_PatternMap; | 434 CPDF_PatternMap m_PatternMap; |
408 }; | 435 }; |
409 | 436 |
410 class CPDF_Function | 437 class CPDF_Function { |
411 { | 438 public: |
412 public: | 439 static CPDF_Function* Load(CPDF_Object* pFuncObj); |
413 static CPDF_Function* Load(CPDF_Object* pFuncObj); | 440 virtual ~CPDF_Function(); |
414 virtual ~CPDF_Function(); | 441 FX_BOOL Call(FX_FLOAT* inputs, |
415 FX_BOOL Call(FX_FLOAT* inputs, int ninputs, FX_FLOAT* results, i
nt& nresults) const; | 442 int ninputs, |
416 int CountInputs() | 443 FX_FLOAT* results, |
417 { | 444 int& nresults) const; |
418 return m_nInputs; | 445 int CountInputs() { return m_nInputs; } |
419 } | 446 int CountOutputs() { return m_nOutputs; } |
420 int CountOutputs() | 447 |
421 { | 448 protected: |
422 return m_nOutputs; | 449 CPDF_Function(); |
423 } | 450 int m_nInputs, m_nOutputs; |
424 protected: | 451 FX_FLOAT* m_pDomains; |
425 CPDF_Function(); | 452 FX_FLOAT* m_pRanges; |
426 int m_nInputs, m_nOutputs; | 453 FX_BOOL Init(CPDF_Object* pObj); |
427 FX_FLOAT* m_pDomains; | 454 virtual FX_BOOL v_Init(CPDF_Object* pObj) = 0; |
428 FX_FLOAT* m_pRanges; | 455 virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0; |
429 FX_BOOL Init(CPDF_Object* pObj); | 456 }; |
430 virtual FX_BOOL v_Init(CPDF_Object* pObj) = 0; | 457 class CPDF_IccProfile { |
431 virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0; | 458 public: |
432 }; | 459 CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize); |
433 class CPDF_IccProfile | 460 ~CPDF_IccProfile(); |
434 { | 461 int32_t GetComponents() const { return m_nSrcComponents; } |
435 public: | 462 FX_BOOL m_bsRGB; |
436 CPDF_IccProfile(const uint8_t* pData, FX_DWORD dwSize); | 463 void* m_pTransform; |
437 ~CPDF_IccProfile(); | 464 |
438 int32_t GetComponents() const { return m_nSrcComponents; } | 465 private: |
439 FX_BOOL m_bsRGB; | 466 int32_t m_nSrcComponents; |
440 void* m_pTransform; | 467 }; |
441 private: | 468 |
442 int32_t m_nSrcComponents; | 469 class CPDF_DeviceCS : public CPDF_ColorSpace { |
443 }; | 470 public: |
444 | 471 CPDF_DeviceCS(CPDF_Document* pDoc, int family); |
445 class CPDF_DeviceCS : public CPDF_ColorSpace | 472 |
446 { | 473 FX_BOOL GetRGB(FX_FLOAT* pBuf, |
447 public: | 474 FX_FLOAT& R, |
448 CPDF_DeviceCS(CPDF_Document* pDoc, int family); | 475 FX_FLOAT& G, |
449 | 476 FX_FLOAT& B) const override; |
450 FX_BOOL GetRGB(FX_FLOAT* pBuf, | 477 FX_BOOL SetRGB(FX_FLOAT* pBuf, |
451 FX_FLOAT& R, | 478 FX_FLOAT R, |
452 FX_FLOAT& G, | 479 FX_FLOAT G, |
453 FX_FLOAT& B) const override; | 480 FX_FLOAT B) const override; |
454 FX_BOOL SetRGB(FX_FLOAT* pBuf, | 481 FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, |
455 FX_FLOAT R, | 482 FX_FLOAT& c, |
456 FX_FLOAT G, | 483 FX_FLOAT& m, |
457 FX_FLOAT B) const override; | 484 FX_FLOAT& y, |
458 FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, | 485 FX_FLOAT& k) const override; |
459 FX_FLOAT& c, | 486 FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, |
460 FX_FLOAT& m, | 487 FX_FLOAT c, |
461 FX_FLOAT& y, | 488 FX_FLOAT m, |
462 FX_FLOAT& k) const override; | 489 FX_FLOAT y, |
463 FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, | 490 FX_FLOAT k) const override; |
464 FX_FLOAT c, | 491 void TranslateImageLine(uint8_t* pDestBuf, |
465 FX_FLOAT m, | 492 const uint8_t* pSrcBuf, |
466 FX_FLOAT y, | 493 int pixels, |
467 FX_FLOAT k) const override; | 494 int image_width, |
468 void TranslateImageLine(uint8_t* pDestBuf, | 495 int image_height, |
469 const uint8_t* pSrcBuf, | 496 FX_BOOL bTransMask = FALSE) const override; |
470 int pixels, | 497 }; |
471 int image_width, | 498 |
472 int image_height, | 499 class CPDF_PatternCS : public CPDF_ColorSpace { |
473 FX_BOOL bTransMask = FALSE) const override; | 500 public: |
474 }; | 501 explicit CPDF_PatternCS(CPDF_Document* pDoc) |
475 | 502 : CPDF_ColorSpace(pDoc, PDFCS_PATTERN, 1), |
476 class CPDF_PatternCS : public CPDF_ColorSpace | 503 m_pBaseCS(nullptr), |
477 { | 504 m_pCountedBaseCS(nullptr) {} |
478 public: | 505 ~CPDF_PatternCS() override; |
479 explicit CPDF_PatternCS(CPDF_Document* pDoc) | 506 FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override; |
480 : CPDF_ColorSpace(pDoc, PDFCS_PATTERN, 1), | 507 FX_BOOL GetRGB(FX_FLOAT* pBuf, |
481 m_pBaseCS(nullptr), | 508 FX_FLOAT& R, |
482 m_pCountedBaseCS(nullptr) { | 509 FX_FLOAT& G, |
483 } | 510 FX_FLOAT& B) const override; |
484 ~CPDF_PatternCS() override; | 511 CPDF_ColorSpace* GetBaseCS() const override; |
485 FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray) override; | 512 |
486 FX_BOOL GetRGB(FX_FLOAT* pBuf, | 513 private: |
487 FX_FLOAT& R, | 514 CPDF_ColorSpace* m_pBaseCS; |
488 FX_FLOAT& G, | 515 CPDF_CountedColorSpace* m_pCountedBaseCS; |
489 FX_FLOAT& B) const override; | |
490 CPDF_ColorSpace* GetBaseCS() const override; | |
491 | |
492 private: | |
493 CPDF_ColorSpace* m_pBaseCS; | |
494 CPDF_CountedColorSpace* m_pCountedBaseCS; | |
495 }; | 516 }; |
496 | 517 |
497 #endif // CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ | 518 #endif // CORE_SRC_FPDFAPI_FPDF_PAGE_PAGEINT_H_ |
OLD | NEW |