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 #include "../../../include/fpdfapi/fpdf_pageobj.h" | 7 #include "../../../include/fpdfapi/fpdf_pageobj.h" |
8 #define PARSE_STEP_LIMIT» » 100 | 8 #define PARSE_STEP_LIMIT 100 |
9 #define STREAM_PARSE_BUFSIZE» 20480 | 9 #define STREAM_PARSE_BUFSIZE 20480 |
10 class CPDF_QuickFontCache; | 10 class CPDF_QuickFontCache; |
11 #ifndef _FPDFAPI_MINI_ | 11 #ifndef _FPDFAPI_MINI_ |
12 class CPDF_StreamParser : public CFX_Object | 12 class CPDF_StreamParser : public CFX_Object { |
13 { | 13 public: |
14 public: | 14 CPDF_StreamParser(const FX_BYTE* pData, FX_DWORD dwSize); |
15 | 15 ~CPDF_StreamParser(); |
16 CPDF_StreamParser(const FX_BYTE* pData, FX_DWORD dwSize); | 16 |
17 ~CPDF_StreamParser(); | 17 CPDF_Stream* ReadInlineStream(CPDF_Document* pDoc, |
18 | 18 CPDF_Dictionary* pDict, |
19 CPDF_Stream*» » ReadInlineStream(CPDF_Document* pDoc, CPDF_Dicti
onary* pDict, CPDF_Object* pCSObj, FX_BOOL bDecode); | 19 CPDF_Object* pCSObj, |
20 typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType; | 20 FX_BOOL bDecode); |
21 | 21 typedef enum { EndOfData, Number, Keyword, Name, Others } SyntaxType; |
22 SyntaxType» » » ParseNextElement(); | 22 |
23 FX_LPBYTE» » » GetWordBuf() | 23 SyntaxType ParseNextElement(); |
24 { | 24 FX_LPBYTE GetWordBuf() { return m_WordBuffer; } |
25 return m_WordBuffer; | 25 FX_DWORD GetWordSize() { return m_WordSize; } |
26 } | 26 CPDF_Object* GetObject() { |
27 FX_DWORD» » » GetWordSize() | 27 CPDF_Object* pObj = m_pLastObj; |
28 { | 28 m_pLastObj = NULL; |
29 return m_WordSize; | 29 return pObj; |
30 } | 30 } |
31 CPDF_Object*» » GetObject() | 31 FX_DWORD GetPos() { return m_Pos; } |
32 { | 32 void SetPos(FX_DWORD pos) { m_Pos = pos; } |
33 CPDF_Object* pObj = m_pLastObj; | 33 |
34 m_pLastObj = NULL; | 34 CPDF_Object* ReadNextObject(FX_BOOL bAllowNestedArray = FALSE, |
35 return pObj; | 35 FX_BOOL bInArray = FALSE); |
36 } | 36 void SkipPathObject(); |
37 FX_DWORD» » » GetPos() | 37 |
38 { | 38 protected: |
39 return m_Pos; | 39 void GetNextWord(FX_BOOL& bIsNumber); |
40 } | 40 CFX_ByteString ReadString(); |
41 void» » » » SetPos(FX_DWORD pos) | 41 CFX_ByteString ReadHexString(); |
42 { | 42 const FX_BYTE* m_pBuf; |
43 m_Pos = pos; | 43 FX_DWORD m_Size; |
44 } | 44 FX_DWORD m_Pos; |
45 | 45 FX_BYTE m_WordBuffer[256]; |
46 CPDF_Object*» » ReadNextObject(FX_BOOL bAllowNestedArray = FALSE
, FX_BOOL bInArray = FALSE); | 46 FX_DWORD m_WordSize; |
47 void» » » » SkipPathObject(); | 47 CPDF_Object* m_pLastObj; |
48 protected: | |
49 void» » » » GetNextWord(FX_BOOL& bIsNumber); | |
50 CFX_ByteString» » ReadString(); | |
51 CFX_ByteString» » ReadHexString(); | |
52 const FX_BYTE*» » m_pBuf; | |
53 FX_DWORD» » » m_Size; | |
54 FX_DWORD» » » m_Pos; | |
55 FX_BYTE» » » » m_WordBuffer[256]; | |
56 FX_DWORD» » » m_WordSize; | |
57 CPDF_Object*» » m_pLastObj; | |
58 }; | 48 }; |
59 #endif | 49 #endif |
60 typedef enum { | 50 typedef enum { |
61 PDFOP_CloseFillStrokePath = 0, PDFOP_FillStrokePath, | 51 PDFOP_CloseFillStrokePath = 0, |
62 PDFOP_CloseEOFillStrokePath, PDFOP_EOFillStrokePath, | 52 PDFOP_FillStrokePath, |
63 PDFOP_BeginMarkedContent_Dictionary, PDFOP_BeginImage, | 53 PDFOP_CloseEOFillStrokePath, |
64 PDFOP_BeginMarkedContent, PDFOP_BeginText, | 54 PDFOP_EOFillStrokePath, |
65 PDFOP_BeginSectionUndefined, PDFOP_CurveTo_123, | 55 PDFOP_BeginMarkedContent_Dictionary, |
66 PDFOP_ConcatMatrix, PDFOP_SetColorSpace_Fill, | 56 PDFOP_BeginImage, |
67 PDFOP_SetColorSpace_Stroke, PDFOP_SetDash, | 57 PDFOP_BeginMarkedContent, |
68 PDFOP_SetCharWidth, PDFOP_SetCachedDevice, | 58 PDFOP_BeginText, |
69 PDFOP_ExecuteXObject, PDFOP_MarkPlace_Dictionary, | 59 PDFOP_BeginSectionUndefined, |
70 PDFOP_EndImage, PDFOP_EndMarkedContent, | 60 PDFOP_CurveTo_123, |
71 PDFOP_EndText, PDFOP_EndSectionUndefined, | 61 PDFOP_ConcatMatrix, |
72 PDFOP_FillPath, PDFOP_FillPathOld, | 62 PDFOP_SetColorSpace_Fill, |
73 PDFOP_EOFillPath, PDFOP_SetGray_Fill, | 63 PDFOP_SetColorSpace_Stroke, |
74 PDFOP_SetGray_Stroke, PDFOP_SetExtendGraphState, | 64 PDFOP_SetDash, |
75 PDFOP_ClosePath, PDFOP_SetFlat, | 65 PDFOP_SetCharWidth, |
76 PDFOP_BeginImageData, PDFOP_SetLineJoin, | 66 PDFOP_SetCachedDevice, |
77 PDFOP_SetLineCap, PDFOP_SetCMYKColor_Fill, | 67 PDFOP_ExecuteXObject, |
78 PDFOP_SetCMYKColor_Stroke, PDFOP_LineTo, | 68 PDFOP_MarkPlace_Dictionary, |
79 PDFOP_MoveTo, PDFOP_SetMiterLimit, | 69 PDFOP_EndImage, |
80 PDFOP_MarkPlace, PDFOP_EndPath, | 70 PDFOP_EndMarkedContent, |
81 PDFOP_SaveGraphState, PDFOP_RestoreGraphState, | 71 PDFOP_EndText, |
82 PDFOP_Rectangle, PDFOP_SetRGBColor_Fill, | 72 PDFOP_EndSectionUndefined, |
83 PDFOP_SetRGBColor_Stroke, PDFOP_SetRenderIntent, | 73 PDFOP_FillPath, |
84 PDFOP_CloseStrokePath, PDFOP_StrokePath, | 74 PDFOP_FillPathOld, |
85 PDFOP_SetColor_Fill, PDFOP_SetColor_Stroke, | 75 PDFOP_EOFillPath, |
86 PDFOP_SetColorPS_Fill, PDFOP_SetColorPS_Stroke, | 76 PDFOP_SetGray_Fill, |
87 PDFOP_ShadeFill, PDFOP_SetCharSpace, | 77 PDFOP_SetGray_Stroke, |
88 PDFOP_MoveTextPoint, PDFOP_MoveTextPoint_SetLeading, | 78 PDFOP_SetExtendGraphState, |
89 PDFOP_SetFont, PDFOP_ShowText, | 79 PDFOP_ClosePath, |
90 PDFOP_ShowText_Positioning, PDFOP_SetTextLeading, | 80 PDFOP_SetFlat, |
91 PDFOP_SetTextMatrix, PDFOP_SetTextRenderMode, | 81 PDFOP_BeginImageData, |
92 PDFOP_SetTextRise, PDFOP_SetWordSpace, | 82 PDFOP_SetLineJoin, |
93 PDFOP_SetHorzScale, PDFOP_MoveToNextLine, | 83 PDFOP_SetLineCap, |
94 PDFOP_CurveTo_23, PDFOP_SetLineWidth, | 84 PDFOP_SetCMYKColor_Fill, |
95 PDFOP_Clip, PDFOP_EOClip, | 85 PDFOP_SetCMYKColor_Stroke, |
96 PDFOP_CurveTo_13, PDFOP_NextLineShowText, | 86 PDFOP_LineTo, |
97 PDFOP_NextLineShowText_Space, PDFOP_Invalid | 87 PDFOP_MoveTo, |
| 88 PDFOP_SetMiterLimit, |
| 89 PDFOP_MarkPlace, |
| 90 PDFOP_EndPath, |
| 91 PDFOP_SaveGraphState, |
| 92 PDFOP_RestoreGraphState, |
| 93 PDFOP_Rectangle, |
| 94 PDFOP_SetRGBColor_Fill, |
| 95 PDFOP_SetRGBColor_Stroke, |
| 96 PDFOP_SetRenderIntent, |
| 97 PDFOP_CloseStrokePath, |
| 98 PDFOP_StrokePath, |
| 99 PDFOP_SetColor_Fill, |
| 100 PDFOP_SetColor_Stroke, |
| 101 PDFOP_SetColorPS_Fill, |
| 102 PDFOP_SetColorPS_Stroke, |
| 103 PDFOP_ShadeFill, |
| 104 PDFOP_SetCharSpace, |
| 105 PDFOP_MoveTextPoint, |
| 106 PDFOP_MoveTextPoint_SetLeading, |
| 107 PDFOP_SetFont, |
| 108 PDFOP_ShowText, |
| 109 PDFOP_ShowText_Positioning, |
| 110 PDFOP_SetTextLeading, |
| 111 PDFOP_SetTextMatrix, |
| 112 PDFOP_SetTextRenderMode, |
| 113 PDFOP_SetTextRise, |
| 114 PDFOP_SetWordSpace, |
| 115 PDFOP_SetHorzScale, |
| 116 PDFOP_MoveToNextLine, |
| 117 PDFOP_CurveTo_23, |
| 118 PDFOP_SetLineWidth, |
| 119 PDFOP_Clip, |
| 120 PDFOP_EOClip, |
| 121 PDFOP_CurveTo_13, |
| 122 PDFOP_NextLineShowText, |
| 123 PDFOP_NextLineShowText_Space, |
| 124 PDFOP_Invalid |
98 } PDFOP; | 125 } PDFOP; |
99 #define PARAM_BUF_SIZE» 16 | 126 #define PARAM_BUF_SIZE 16 |
100 typedef struct { | 127 typedef struct { |
101 int»» » m_Type; | 128 int m_Type; |
102 union { | 129 union { |
103 struct { | 130 struct { |
104 FX_BOOL» » m_bInteger; | 131 FX_BOOL m_bInteger; |
105 union { | 132 union { |
106 int» » m_Integer; | 133 int m_Integer; |
107 FX_FLOAT m_Float; | 134 FX_FLOAT m_Float; |
108 }; | 135 }; |
109 } m_Number; | 136 } m_Number; |
110 CPDF_Object*» m_pObject; | 137 CPDF_Object* m_pObject; |
111 struct { | 138 struct { |
112 int»» » m_Len; | 139 int m_Len; |
113 char» » m_Buffer[32]; | 140 char m_Buffer[32]; |
114 } m_Name; | 141 } m_Name; |
115 }; | 142 }; |
116 } _ContentParam; | 143 } _ContentParam; |
117 #if defined(_FPDFAPI_MINI_) | 144 #if defined(_FPDFAPI_MINI_) |
118 #define _FPDF_MAX_FORM_LEVEL_» » 17 | 145 #define _FPDF_MAX_FORM_LEVEL_ 17 |
119 #else | 146 #else |
120 #define _FPDF_MAX_FORM_LEVEL_» » 30 | 147 #define _FPDF_MAX_FORM_LEVEL_ 30 |
121 #endif | 148 #endif |
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 : public CFX_Object | 151 class CPDF_StreamContentParser : public CFX_Object { |
125 { | 152 public: |
126 public: | 153 CPDF_StreamContentParser(); |
127 CPDF_StreamContentParser(); | 154 ~CPDF_StreamContentParser(); |
128 ~CPDF_StreamContentParser(); | 155 FX_BOOL Initialize(); |
129 FX_BOOL Initialize(); | 156 void PrepareParse(CPDF_Document* pDoc, |
130 void PrepareParse(CPDF_Document* pDoc, CPDF_Dictionary* pPageResource
s, CPDF_Dictionary* pParentResources, | 157 CPDF_Dictionary* pPageResources, |
131 CFX_AffineMatrix* pmtContentToUser, | 158 CPDF_Dictionary* pParentResources, |
132 CPDF_PageObjects* pObjList, CPDF_Dictionary* pResources
, | 159 CFX_AffineMatrix* pmtContentToUser, |
133 CFX_FloatRect* pBBox, CPDF_ParseOptions* pOptions, | 160 CPDF_PageObjects* pObjList, |
134 CPDF_AllStates* pAllStates, int level); | 161 CPDF_Dictionary* pResources, |
135 CPDF_Document* m_pDocument; | 162 CFX_FloatRect* pBBox, |
136 CPDF_Dictionary* m_pPageResources; | 163 CPDF_ParseOptions* pOptions, |
137 CPDF_Dictionary* m_pParentResources; | 164 CPDF_AllStates* pAllStates, |
138 CPDF_PageObjects* m_pObjectList; | 165 int level); |
139 CPDF_Dictionary* m_pResources; | 166 CPDF_Document* m_pDocument; |
140 int m_Level; | 167 CPDF_Dictionary* m_pPageResources; |
141 CFX_AffineMatrix m_mtContentToUser; | 168 CPDF_Dictionary* m_pParentResources; |
142 CFX_FloatRect m_BBox; | 169 CPDF_PageObjects* m_pObjectList; |
143 CPDF_ParseOptions m_Options; | 170 CPDF_Dictionary* m_pResources; |
144 _ContentParam m_ParamBuf1[PARAM_BUF_SIZE]; | 171 int m_Level; |
145 FX_DWORD m_ParamStartPos; | 172 CFX_AffineMatrix m_mtContentToUser; |
146 FX_DWORD m_ParamCount; | 173 CFX_FloatRect m_BBox; |
147 void AddNumberParam(FX_LPCSTR str, int len); | 174 CPDF_ParseOptions m_Options; |
148 void AddObjectParam(CPDF_Object* pObj); | 175 _ContentParam m_ParamBuf1[PARAM_BUF_SIZE]; |
149 void AddNameParam(FX_LPCSTR name, int size); | 176 FX_DWORD m_ParamStartPos; |
150 int GetNextParamPos(); | 177 FX_DWORD m_ParamCount; |
151 void ClearAllParams(); | 178 void AddNumberParam(FX_LPCSTR str, int len); |
152 CPDF_Object* GetObject(FX_DWORD index); | 179 void AddObjectParam(CPDF_Object* pObj); |
153 CFX_ByteString GetString(FX_DWORD index); | 180 void AddNameParam(FX_LPCSTR name, int size); |
154 FX_FLOAT GetNumber(FX_DWORD index); | 181 int GetNextParamPos(); |
155 FX_FLOAT GetNumber16(FX_DWORD index); | 182 void ClearAllParams(); |
156 int GetInteger(FX_DWORD index) | 183 CPDF_Object* GetObject(FX_DWORD index); |
157 { | 184 CFX_ByteString GetString(FX_DWORD index); |
158 return (FX_INT32)(GetNumber(index)); | 185 FX_FLOAT GetNumber(FX_DWORD index); |
| 186 FX_FLOAT GetNumber16(FX_DWORD index); |
| 187 int GetInteger(FX_DWORD index) { return (FX_INT32)(GetNumber(index)); } |
| 188 FX_BOOL OnOperator(FX_LPCSTR op); |
| 189 void BigCaseCaller(int index); |
| 190 FX_BOOL m_bAbort; |
| 191 #ifndef _FPDFAPI_MINI_ |
| 192 CPDF_StreamParser* m_pSyntax; |
| 193 FX_DWORD GetParsePos() { return m_pSyntax->GetPos(); } |
| 194 #else |
| 195 int m_WordState; |
| 196 void InputData(FX_LPCBYTE src_buf, FX_DWORD src_size); |
| 197 void Finish(); |
| 198 void StartArray(); |
| 199 void EndArray(); |
| 200 void StartDict(); |
| 201 void EndDict(); |
| 202 void EndName(); |
| 203 void EndNumber(); |
| 204 void EndKeyword(); |
| 205 void EndHexString(); |
| 206 void EndString(); |
| 207 void EndImageDict(); |
| 208 void EndInlineImage(); |
| 209 FX_LPBYTE m_pWordBuf; |
| 210 FX_DWORD m_WordSize; |
| 211 CFX_BinaryBuf m_StringBuf; |
| 212 int m_StringLevel, m_StringState, m_EscCode; |
| 213 void AddContainer(CPDF_Object* pObject); |
| 214 FX_BOOL SetToCurObj(CPDF_Object* pObject); |
| 215 FX_LPBYTE m_pDictName; |
| 216 FX_BOOL m_bDictName; |
| 217 CPDF_Object** m_pObjectStack; |
| 218 FX_BOOL* m_pObjectState; |
| 219 FX_DWORD m_ObjectSize; |
| 220 int m_InlineImageState; |
| 221 FX_BYTE m_InlineWhiteChar; |
| 222 CFX_BinaryBuf m_ImageSrcBuf; |
| 223 FX_LPBYTE m_pStreamBuf; |
| 224 #endif |
| 225 CPDF_AllStates* m_pCurStates; |
| 226 CPDF_ContentMark m_CurContentMark; |
| 227 CFX_PtrArray m_ClipTextList; |
| 228 CPDF_TextObject* m_pLastTextObject; |
| 229 FX_FLOAT m_DefFontSize; |
| 230 void AddTextObject(CFX_ByteString* pText, |
| 231 FX_FLOAT fInitKerning, |
| 232 FX_FLOAT* pKerning, |
| 233 int count); |
| 234 |
| 235 void ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y); |
| 236 void ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y); |
| 237 void OnChangeTextMatrix(); |
| 238 #ifndef _FPDFAPI_MINI_ |
| 239 FX_DWORD Parse(FX_LPCBYTE pData, FX_DWORD dwSize, FX_DWORD max_cost); |
| 240 void ParsePathObject(); |
| 241 #endif |
| 242 int m_CompatCount; |
| 243 FX_PATHPOINT* m_pPathPoints; |
| 244 int m_PathPointCount; |
| 245 int m_PathAllocSize; |
| 246 FX_FLOAT m_PathStartX, m_PathStartY; |
| 247 FX_FLOAT m_PathCurrentX, m_PathCurrentY; |
| 248 int m_PathClipType; |
| 249 void AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag); |
| 250 void AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_FLOAT w, FX_FLOAT h); |
| 251 void AddPathObject(int FillType, FX_BOOL bStroke); |
| 252 CPDF_ImageObject* AddImage(CPDF_Stream* pStream, |
| 253 CPDF_Image* pImage, |
| 254 FX_BOOL bInline); |
| 255 void AddDuplicateImage(); |
| 256 void AddForm(CPDF_Stream*); |
| 257 CFX_ByteString m_LastImageName; |
| 258 CPDF_Image* m_pLastImage; |
| 259 CFX_BinaryBuf m_LastImageDict, m_LastImageData; |
| 260 CPDF_Dictionary* m_pLastImageDict; |
| 261 CPDF_Dictionary* m_pLastCloneImageDict; |
| 262 FX_BOOL m_bReleaseLastDict; |
| 263 FX_BOOL m_bSameLastDict; |
| 264 void SetGraphicStates(CPDF_PageObject* pObj, |
| 265 FX_BOOL bColor, |
| 266 FX_BOOL bText, |
| 267 FX_BOOL bGraph); |
| 268 FX_BOOL m_bColored; |
| 269 FX_FLOAT m_Type3Data[6]; |
| 270 FX_BOOL m_bResourceMissing; |
| 271 CFX_PtrArray m_StateStack; |
| 272 void SaveStates(CPDF_AllStates*); |
| 273 void RestoreStates(CPDF_AllStates*); |
| 274 CPDF_Font* FindFont(const CFX_ByteString& name); |
| 275 CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name); |
| 276 CPDF_Pattern* FindPattern(const CFX_ByteString& name, FX_BOOL bShading); |
| 277 CPDF_Object* FindResourceObj(FX_BSTR type, const CFX_ByteString& name); |
| 278 void Handle_CloseFillStrokePath(); |
| 279 void Handle_FillStrokePath(); |
| 280 void Handle_CloseEOFillStrokePath(); |
| 281 void Handle_EOFillStrokePath(); |
| 282 void Handle_BeginMarkedContent_Dictionary(); |
| 283 void Handle_BeginImage(); |
| 284 void Handle_BeginMarkedContent(); |
| 285 void Handle_BeginText(); |
| 286 void Handle_BeginSectionUndefined(); |
| 287 void Handle_CurveTo_123(); |
| 288 void Handle_ConcatMatrix(); |
| 289 void Handle_SetColorSpace_Fill(); |
| 290 void Handle_SetColorSpace_Stroke(); |
| 291 void Handle_SetDash(); |
| 292 void Handle_SetCharWidth(); |
| 293 void Handle_SetCachedDevice(); |
| 294 void Handle_ExecuteXObject(); |
| 295 void Handle_MarkPlace_Dictionary(); |
| 296 void Handle_EndImage(); |
| 297 void Handle_EndMarkedContent(); |
| 298 void Handle_EndText(); |
| 299 void Handle_EndSectionUndefined(); |
| 300 void Handle_FillPath(); |
| 301 void Handle_FillPathOld(); |
| 302 void Handle_EOFillPath(); |
| 303 void Handle_SetGray_Fill(); |
| 304 void Handle_SetGray_Stroke(); |
| 305 void Handle_SetExtendGraphState(); |
| 306 void Handle_ClosePath(); |
| 307 void Handle_SetFlat(); |
| 308 void Handle_BeginImageData(); |
| 309 void Handle_SetLineJoin(); |
| 310 void Handle_SetLineCap(); |
| 311 void Handle_SetCMYKColor_Fill(); |
| 312 void Handle_SetCMYKColor_Stroke(); |
| 313 void Handle_LineTo(); |
| 314 void Handle_MoveTo(); |
| 315 void Handle_SetMiterLimit(); |
| 316 void Handle_MarkPlace(); |
| 317 void Handle_EndPath(); |
| 318 void Handle_SaveGraphState(); |
| 319 void Handle_RestoreGraphState(); |
| 320 void Handle_Rectangle(); |
| 321 void Handle_SetRGBColor_Fill(); |
| 322 void Handle_SetRGBColor_Stroke(); |
| 323 void Handle_SetRenderIntent(); |
| 324 void Handle_CloseStrokePath(); |
| 325 void Handle_StrokePath(); |
| 326 void Handle_SetColor_Fill(); |
| 327 void Handle_SetColor_Stroke(); |
| 328 void Handle_SetColorPS_Fill(); |
| 329 void Handle_SetColorPS_Stroke(); |
| 330 void Handle_ShadeFill(); |
| 331 void Handle_SetCharSpace(); |
| 332 void Handle_MoveTextPoint(); |
| 333 void Handle_MoveTextPoint_SetLeading(); |
| 334 void Handle_SetFont(); |
| 335 void Handle_ShowText(); |
| 336 void Handle_ShowText_Positioning(); |
| 337 void Handle_SetTextLeading(); |
| 338 void Handle_SetTextMatrix(); |
| 339 void Handle_SetTextRenderMode(); |
| 340 void Handle_SetTextRise(); |
| 341 void Handle_SetWordSpace(); |
| 342 void Handle_SetHorzScale(); |
| 343 void Handle_MoveToNextLine(); |
| 344 void Handle_CurveTo_23(); |
| 345 void Handle_SetLineWidth(); |
| 346 void Handle_Clip(); |
| 347 void Handle_EOClip(); |
| 348 void Handle_CurveTo_13(); |
| 349 void Handle_NextLineShowText(); |
| 350 void Handle_NextLineShowText_Space(); |
| 351 void Handle_Invalid(); |
| 352 }; |
| 353 class CPDF_ContentParser : public CFX_Object { |
| 354 public: |
| 355 CPDF_ContentParser(); |
| 356 ~CPDF_ContentParser(); |
| 357 typedef enum { Ready, ToBeContinued, Done } ParseStatus; |
| 358 ParseStatus GetStatus() { return m_Status; } |
| 359 void Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions); |
| 360 void Start(CPDF_Form* pForm, |
| 361 CPDF_AllStates* pGraphicStates, |
| 362 CFX_AffineMatrix* pParentMatrix, |
| 363 CPDF_Type3Char* pType3Char, |
| 364 CPDF_ParseOptions* pOptions, |
| 365 int level); |
| 366 void Continue(IFX_Pause* pPause); |
| 367 int EstimateProgress(); |
| 368 |
| 369 protected: |
| 370 void Clear(); |
| 371 ParseStatus m_Status; |
| 372 CPDF_PageObjects* m_pObjects; |
| 373 FX_BOOL m_bForm; |
| 374 CPDF_ParseOptions m_Options; |
| 375 CPDF_Type3Char* m_pType3Char; |
| 376 int m_InternalStage; |
| 377 CPDF_StreamAcc* m_pSingleStream; |
| 378 CPDF_StreamAcc** m_pStreamArray; |
| 379 FX_DWORD m_nStreams; |
| 380 FX_LPBYTE m_pData; |
| 381 FX_DWORD m_Size; |
| 382 class CPDF_StreamContentParser* m_pParser; |
| 383 FX_DWORD m_CurrentOffset; |
| 384 CPDF_StreamFilter* m_pStreamFilter; |
| 385 }; |
| 386 class CPDF_AllStates : public CPDF_GraphicStates { |
| 387 public: |
| 388 CPDF_AllStates(); |
| 389 ~CPDF_AllStates(); |
| 390 void Copy(const CPDF_AllStates& src); |
| 391 void ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pParser); |
| 392 void SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale); |
| 393 CFX_AffineMatrix m_TextMatrix, m_CTM, m_ParentMatrix; |
| 394 FX_FLOAT m_TextX, m_TextY, m_TextLineX, m_TextLineY; |
| 395 FX_FLOAT m_TextLeading, m_TextRise, m_TextHorzScale; |
| 396 }; |
| 397 template <class ObjClass> |
| 398 class CPDF_CountedObject : public CFX_Object { |
| 399 public: |
| 400 ObjClass m_Obj; |
| 401 FX_DWORD m_nCount; |
| 402 }; |
| 403 typedef CFX_MapPtrTemplate<CPDF_Dictionary*, CPDF_CountedObject<CPDF_Font*>*> |
| 404 CPDF_FontMap; |
| 405 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_ColorSpace*>*> |
| 406 CPDF_ColorSpaceMap; |
| 407 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_Pattern*>*> |
| 408 CPDF_PatternMap; |
| 409 typedef CFX_MapPtrTemplate<FX_DWORD, CPDF_CountedObject<CPDF_Image*>*> |
| 410 CPDF_ImageMap; |
| 411 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedObject<CPDF_IccProfile*>*> |
| 412 CPDF_IccProfileMap; |
| 413 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedObject<CPDF_StreamAcc*>*> |
| 414 CPDF_FontFileMap; |
| 415 template <class KeyType, class ValueType> |
| 416 KeyType PDF_DocPageData_FindValue( |
| 417 const CFX_MapPtrTemplate<KeyType, CPDF_CountedObject<ValueType>*>& map, |
| 418 ValueType findValue, |
| 419 CPDF_CountedObject<ValueType>*& findData) { |
| 420 FX_POSITION pos = map.GetStartPosition(); |
| 421 while (pos) { |
| 422 KeyType findKey; |
| 423 map.GetNextAssoc(pos, findKey, findData); |
| 424 if (findData->m_Obj == findValue) { |
| 425 return findKey; |
159 } | 426 } |
160 FX_BOOL» » » » OnOperator(FX_LPCSTR op); | 427 } |
161 void» » » » BigCaseCaller(int index); | 428 findData = NULL; |
162 FX_BOOL» » » » m_bAbort; | 429 return (KeyType)(FX_UINTPTR) NULL; |
163 #ifndef _FPDFAPI_MINI_ | |
164 CPDF_StreamParser*» m_pSyntax; | |
165 FX_DWORD» » » GetParsePos() | |
166 { | |
167 return m_pSyntax->GetPos(); | |
168 } | |
169 #else | |
170 int»» » » » m_WordState; | |
171 void» » » » InputData(FX_LPCBYTE src_buf, FX_DWORD s
rc_size); | |
172 void» » » » Finish(); | |
173 void» » » » StartArray(); | |
174 void» » » » EndArray(); | |
175 void» » » » StartDict(); | |
176 void» » » » EndDict(); | |
177 void» » » » EndName(); | |
178 void» » » » EndNumber(); | |
179 void» » » » EndKeyword(); | |
180 void» » » » EndHexString(); | |
181 void» » » » EndString(); | |
182 void» » » » EndImageDict(); | |
183 void» » » » EndInlineImage(); | |
184 FX_LPBYTE» » » m_pWordBuf; | |
185 FX_DWORD» » » m_WordSize; | |
186 CFX_BinaryBuf» » m_StringBuf; | |
187 int»» » » » m_StringLevel, m_StringState, m_EscCode; | |
188 void» » » » AddContainer(CPDF_Object* pObject); | |
189 FX_BOOL» » » » SetToCurObj(CPDF_Object* pObject); | |
190 FX_LPBYTE» » » m_pDictName; | |
191 FX_BOOL» » » » m_bDictName; | |
192 CPDF_Object**» » m_pObjectStack; | |
193 FX_BOOL*» » » m_pObjectState; | |
194 FX_DWORD» » » m_ObjectSize; | |
195 int»» » » » m_InlineImageState; | |
196 FX_BYTE» » » » m_InlineWhiteChar; | |
197 CFX_BinaryBuf» » m_ImageSrcBuf; | |
198 FX_LPBYTE» » » m_pStreamBuf; | |
199 #endif | |
200 CPDF_AllStates*» » m_pCurStates; | |
201 CPDF_ContentMark» m_CurContentMark; | |
202 CFX_PtrArray» » m_ClipTextList; | |
203 CPDF_TextObject*» m_pLastTextObject; | |
204 FX_FLOAT» » » m_DefFontSize; | |
205 void» » » » AddTextObject(CFX_ByteString* pText, FX_
FLOAT fInitKerning, FX_FLOAT* pKerning, int count); | |
206 | |
207 void» » » » ConvertUserSpace(FX_FLOAT& x, FX_FLOAT&
y); | |
208 void» » » » ConvertTextSpace(FX_FLOAT& x, FX_FLOAT&
y); | |
209 void» » » » OnChangeTextMatrix(); | |
210 #ifndef _FPDFAPI_MINI_ | |
211 FX_DWORD» » » Parse(FX_LPCBYTE pData, FX_DWORD dwSize, FX_DWOR
D max_cost); | |
212 void» » » » ParsePathObject(); | |
213 #endif | |
214 int»» » » » m_CompatCount; | |
215 FX_PATHPOINT*» » m_pPathPoints; | |
216 int»» » » » m_PathPointCount; | |
217 int»» » » » m_PathAllocSize; | |
218 FX_FLOAT» » » m_PathStartX, m_PathStartY; | |
219 FX_FLOAT» » » m_PathCurrentX, m_PathCurrentY; | |
220 int»» » » » m_PathClipType; | |
221 void» » » » AddPathPoint(FX_FLOAT x, FX_FLOAT y, int
flag); | |
222 void» » » » AddPathRect(FX_FLOAT x, FX_FLOAT y, FX_F
LOAT w, FX_FLOAT h); | |
223 void» » » » AddPathObject(int FillType, FX_BOOL bStr
oke); | |
224 CPDF_ImageObject*» AddImage(CPDF_Stream* pStream, CPDF_Image* pImage, FX_BO
OL bInline); | |
225 void» » » » AddDuplicateImage(); | |
226 void» » » » AddForm(CPDF_Stream*); | |
227 CFX_ByteString» » m_LastImageName; | |
228 CPDF_Image*»» » m_pLastImage; | |
229 CFX_BinaryBuf» » m_LastImageDict, m_LastImageData; | |
230 CPDF_Dictionary*» m_pLastImageDict; | |
231 CPDF_Dictionary* m_pLastCloneImageDict; | |
232 FX_BOOL» » » » m_bReleaseLastDict; | |
233 FX_BOOL» » » » m_bSameLastDict; | |
234 void» » » » SetGraphicStates(CPDF_PageObject* pObj,
FX_BOOL bColor, FX_BOOL bText, FX_BOOL bGraph); | |
235 FX_BOOL» » » » m_bColored; | |
236 FX_FLOAT» » » m_Type3Data[6]; | |
237 FX_BOOL» » » » m_bResourceMissing; | |
238 CFX_PtrArray» » m_StateStack; | |
239 void» » » » SaveStates(CPDF_AllStates*); | |
240 void» » » » RestoreStates(CPDF_AllStates*); | |
241 CPDF_Font*» » » FindFont(const CFX_ByteString& name); | |
242 CPDF_ColorSpace*» FindColorSpace(const CFX_ByteString& name); | |
243 CPDF_Pattern*» » FindPattern(const CFX_ByteString& name, FX_BOOL
bShading); | |
244 CPDF_Object*» » FindResourceObj(FX_BSTR type, const CFX_ByteStri
ng& name); | |
245 void Handle_CloseFillStrokePath(); | |
246 void Handle_FillStrokePath(); | |
247 void Handle_CloseEOFillStrokePath(); | |
248 void Handle_EOFillStrokePath(); | |
249 void Handle_BeginMarkedContent_Dictionary(); | |
250 void Handle_BeginImage(); | |
251 void Handle_BeginMarkedContent(); | |
252 void Handle_BeginText(); | |
253 void Handle_BeginSectionUndefined(); | |
254 void Handle_CurveTo_123(); | |
255 void Handle_ConcatMatrix(); | |
256 void Handle_SetColorSpace_Fill(); | |
257 void Handle_SetColorSpace_Stroke(); | |
258 void Handle_SetDash(); | |
259 void Handle_SetCharWidth(); | |
260 void Handle_SetCachedDevice(); | |
261 void Handle_ExecuteXObject(); | |
262 void Handle_MarkPlace_Dictionary(); | |
263 void Handle_EndImage(); | |
264 void Handle_EndMarkedContent(); | |
265 void Handle_EndText(); | |
266 void Handle_EndSectionUndefined(); | |
267 void Handle_FillPath(); | |
268 void Handle_FillPathOld(); | |
269 void Handle_EOFillPath(); | |
270 void Handle_SetGray_Fill(); | |
271 void Handle_SetGray_Stroke(); | |
272 void Handle_SetExtendGraphState(); | |
273 void Handle_ClosePath(); | |
274 void Handle_SetFlat(); | |
275 void Handle_BeginImageData(); | |
276 void Handle_SetLineJoin(); | |
277 void Handle_SetLineCap(); | |
278 void Handle_SetCMYKColor_Fill(); | |
279 void Handle_SetCMYKColor_Stroke(); | |
280 void Handle_LineTo(); | |
281 void Handle_MoveTo(); | |
282 void Handle_SetMiterLimit(); | |
283 void Handle_MarkPlace(); | |
284 void Handle_EndPath(); | |
285 void Handle_SaveGraphState(); | |
286 void Handle_RestoreGraphState(); | |
287 void Handle_Rectangle(); | |
288 void Handle_SetRGBColor_Fill(); | |
289 void Handle_SetRGBColor_Stroke(); | |
290 void Handle_SetRenderIntent(); | |
291 void Handle_CloseStrokePath(); | |
292 void Handle_StrokePath(); | |
293 void Handle_SetColor_Fill(); | |
294 void Handle_SetColor_Stroke(); | |
295 void Handle_SetColorPS_Fill(); | |
296 void Handle_SetColorPS_Stroke(); | |
297 void Handle_ShadeFill(); | |
298 void Handle_SetCharSpace(); | |
299 void Handle_MoveTextPoint(); | |
300 void Handle_MoveTextPoint_SetLeading(); | |
301 void Handle_SetFont(); | |
302 void Handle_ShowText(); | |
303 void Handle_ShowText_Positioning(); | |
304 void Handle_SetTextLeading(); | |
305 void Handle_SetTextMatrix(); | |
306 void Handle_SetTextRenderMode(); | |
307 void Handle_SetTextRise(); | |
308 void Handle_SetWordSpace(); | |
309 void Handle_SetHorzScale(); | |
310 void Handle_MoveToNextLine(); | |
311 void Handle_CurveTo_23(); | |
312 void Handle_SetLineWidth(); | |
313 void Handle_Clip(); | |
314 void Handle_EOClip(); | |
315 void Handle_CurveTo_13(); | |
316 void Handle_NextLineShowText(); | |
317 void Handle_NextLineShowText_Space(); | |
318 void Handle_Invalid(); | |
319 }; | |
320 class CPDF_ContentParser : public CFX_Object | |
321 { | |
322 public: | |
323 CPDF_ContentParser(); | |
324 ~CPDF_ContentParser(); | |
325 typedef enum { Ready, ToBeContinued, Done } ParseStatus; | |
326 ParseStatus»» » GetStatus() | |
327 { | |
328 return m_Status; | |
329 } | |
330 void» » » » Start(CPDF_Page* pPage, CPDF_ParseOption
s* pOptions); | |
331 void» » » » Start(CPDF_Form* pForm, CPDF_AllStates*
pGraphicStates, CFX_AffineMatrix* pParentMatrix, | |
332 CPDF_Type3Char* pType3Char, CPDF_ParseOptions* pOp
tions, int level); | |
333 void» » » » Continue(IFX_Pause* pPause); | |
334 int»» » » » EstimateProgress(); | |
335 protected: | |
336 void» » » » Clear(); | |
337 ParseStatus»» » m_Status; | |
338 CPDF_PageObjects*» m_pObjects; | |
339 FX_BOOL» » » » m_bForm; | |
340 CPDF_ParseOptions» m_Options; | |
341 CPDF_Type3Char*» » m_pType3Char; | |
342 int»» » » » m_InternalStage; | |
343 CPDF_StreamAcc*» » m_pSingleStream; | |
344 CPDF_StreamAcc**» m_pStreamArray; | |
345 FX_DWORD» » » m_nStreams; | |
346 FX_LPBYTE» » » m_pData; | |
347 FX_DWORD» » » m_Size; | |
348 class CPDF_StreamContentParser*» m_pParser; | |
349 FX_DWORD» » » m_CurrentOffset; | |
350 CPDF_StreamFilter*» m_pStreamFilter; | |
351 }; | |
352 class CPDF_AllStates : public CPDF_GraphicStates | |
353 { | |
354 public: | |
355 CPDF_AllStates(); | |
356 ~CPDF_AllStates(); | |
357 void» Copy(const CPDF_AllStates& src); | |
358 void» ProcessExtGS(CPDF_Dictionary* pGS, CPDF_StreamContentParser* pPa
rser); | |
359 void» SetLineDash(CPDF_Array*, FX_FLOAT, FX_FLOAT scale); | |
360 CFX_AffineMatrix» » m_TextMatrix, m_CTM, m_ParentMatrix; | |
361 FX_FLOAT» » » » m_TextX, m_TextY, m_TextLineX, m_TextLin
eY; | |
362 FX_FLOAT» » » » m_TextLeading, m_TextRise, m_TextHorzSca
le; | |
363 }; | |
364 template <class ObjClass> class CPDF_CountedObject : public CFX_Object | |
365 { | |
366 public: | |
367 ObjClass» m_Obj; | |
368 FX_DWORD» m_nCount; | |
369 }; | |
370 typedef CFX_MapPtrTemplate<CPDF_Dictionary*, CPDF_CountedObject<CPDF_Font*>*>»
» CPDF_FontMap; | |
371 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_ColorSpace*>*>»
» CPDF_ColorSpaceMap; | |
372 typedef CFX_MapPtrTemplate<CPDF_Object*, CPDF_CountedObject<CPDF_Pattern*>*>»
» CPDF_PatternMap; | |
373 typedef CFX_MapPtrTemplate<FX_DWORD, CPDF_CountedObject<CPDF_Image*>*>» »
» » CPDF_ImageMap; | |
374 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedObject<CPDF_IccProfile*>*>»
» CPDF_IccProfileMap; | |
375 typedef CFX_MapPtrTemplate<CPDF_Stream*, CPDF_CountedObject<CPDF_StreamAcc*>*>»
» CPDF_FontFileMap; | |
376 template <class KeyType, class ValueType> | |
377 KeyType PDF_DocPageData_FindValue(const CFX_MapPtrTemplate<KeyType, CPDF_Counted
Object<ValueType>*> &map, ValueType findValue, CPDF_CountedObject<ValueType>*& f
indData) | |
378 { | |
379 FX_POSITION pos = map.GetStartPosition(); | |
380 while (pos) { | |
381 KeyType findKey; | |
382 map.GetNextAssoc(pos, findKey, findData); | |
383 if (findData->m_Obj == findValue) { | |
384 return findKey; | |
385 } | |
386 } | |
387 findData = NULL; | |
388 return (KeyType)(FX_UINTPTR)NULL; | |
389 } | 430 } |
390 template <class KeyType, class ValueType> | 431 template <class KeyType, class ValueType> |
391 FX_BOOL PDF_DocPageData_Release(CFX_MapPtrTemplate<KeyType, CPDF_CountedObject<V
alueType>*> &map, KeyType findKey, ValueType findValue, FX_BOOL bForce = FALSE) | 432 FX_BOOL PDF_DocPageData_Release( |
392 { | 433 CFX_MapPtrTemplate<KeyType, CPDF_CountedObject<ValueType>*>& map, |
393 if (!findKey && !findValue) { | 434 KeyType findKey, |
394 return FALSE; | 435 ValueType findValue, |
395 } | 436 FX_BOOL bForce = FALSE) { |
396 CPDF_CountedObject<ValueType>* findData = NULL; | 437 if (!findKey && !findValue) { |
397 if (!findKey) { | |
398 findKey = PDF_DocPageData_FindValue<KeyType, ValueType>(map, findValue,
findData); | |
399 } else if (!map.Lookup(findKey, findData)) { | |
400 return FALSE; | |
401 } | |
402 if (findData && ((-- findData->m_nCount) == 0 || bForce)) { | |
403 delete findData->m_Obj; | |
404 delete findData; | |
405 map.RemoveKey(findKey); | |
406 return TRUE; | |
407 } | |
408 return FALSE; | 438 return FALSE; |
| 439 } |
| 440 CPDF_CountedObject<ValueType>* findData = NULL; |
| 441 if (!findKey) { |
| 442 findKey = |
| 443 PDF_DocPageData_FindValue<KeyType, ValueType>(map, findValue, findData); |
| 444 } else if (!map.Lookup(findKey, findData)) { |
| 445 return FALSE; |
| 446 } |
| 447 if (findData && ((--findData->m_nCount) == 0 || bForce)) { |
| 448 delete findData->m_Obj; |
| 449 delete findData; |
| 450 map.RemoveKey(findKey); |
| 451 return TRUE; |
| 452 } |
| 453 return FALSE; |
409 } | 454 } |
410 class CPDF_DocPageData : public CFX_Object | 455 class CPDF_DocPageData : public CFX_Object { |
411 { | 456 public: |
412 public: | 457 CPDF_DocPageData(CPDF_Document* pPDFDoc); |
413 CPDF_DocPageData(CPDF_Document *pPDFDoc); | 458 ~CPDF_DocPageData(); |
414 ~CPDF_DocPageData(); | 459 void Clear(FX_BOOL bRelease = FALSE); |
415 void» » » » » Clear(FX_BOOL bRelease = FALSE); | 460 CPDF_Font* GetFont(CPDF_Dictionary* pFontDict, FX_BOOL findOnly); |
416 CPDF_Font*» » » » GetFont(CPDF_Dictionary* pFontDict, FX_B
OOL findOnly); | 461 CPDF_Font* GetStandardFont(FX_BSTR fontName, CPDF_FontEncoding* pEncoding); |
417 CPDF_Font*» » » » GetStandardFont(FX_BSTR fontName, CPDF_F
ontEncoding* pEncoding); | 462 void ReleaseFont(CPDF_Dictionary* pFontDict); |
418 void» » » » » ReleaseFont(CPDF_Dictionary* pFo
ntDict); | 463 CPDF_ColorSpace* GetColorSpace(CPDF_Object* pCSObj, |
419 CPDF_ColorSpace*» » GetColorSpace(CPDF_Object* pCSObj, CPDF_Dictiona
ry* pResources); | 464 CPDF_Dictionary* pResources); |
420 CPDF_ColorSpace*» » GetCopiedColorSpace(CPDF_Object* pCSObj); | 465 CPDF_ColorSpace* GetCopiedColorSpace(CPDF_Object* pCSObj); |
421 void» » » » » ReleaseColorSpace(CPDF_Object* p
ColorSpace); | 466 void ReleaseColorSpace(CPDF_Object* pColorSpace); |
422 CPDF_Pattern*» » » GetPattern(CPDF_Object* pPatternObj, FX_
BOOL bShading, const CFX_AffineMatrix* matrix); | 467 CPDF_Pattern* GetPattern(CPDF_Object* pPatternObj, |
423 void» » » » » ReleasePattern(CPDF_Object* pPat
ternObj); | 468 FX_BOOL bShading, |
424 CPDF_Image*»» » » GetImage(CPDF_Object* pImageStream); | 469 const CFX_AffineMatrix* matrix); |
425 void» » » » » ReleaseImage(CPDF_Object* pImage
Stream); | 470 void ReleasePattern(CPDF_Object* pPatternObj); |
426 CPDF_IccProfile*» » GetIccProfile(CPDF_Stream* pIccProfileStream, FX
_INT32 nComponents); | 471 CPDF_Image* GetImage(CPDF_Object* pImageStream); |
427 void» » » » » ReleaseIccProfile(CPDF_Stream* p
IccProfileStream, CPDF_IccProfile* pIccProfile); | 472 void ReleaseImage(CPDF_Object* pImageStream); |
428 CPDF_StreamAcc*» » » GetFontFileStreamAcc(CPDF_Stream* pFontS
tream); | 473 CPDF_IccProfile* GetIccProfile(CPDF_Stream* pIccProfileStream, |
429 void» » » » » ReleaseFontFileStreamAcc(CPDF_St
ream* pFontStream, FX_BOOL bForce = FALSE); | 474 FX_INT32 nComponents); |
430 CPDF_Document*» » » m_pPDFDoc; | 475 void ReleaseIccProfile(CPDF_Stream* pIccProfileStream, |
431 CPDF_FontMap» » » m_FontMap; | 476 CPDF_IccProfile* pIccProfile); |
432 CPDF_ColorSpaceMap» » m_ColorSpaceMap; | 477 CPDF_StreamAcc* GetFontFileStreamAcc(CPDF_Stream* pFontStream); |
433 CPDF_PatternMap» » » m_PatternMap; | 478 void ReleaseFontFileStreamAcc(CPDF_Stream* pFontStream, |
434 CPDF_ImageMap» » » m_ImageMap; | 479 FX_BOOL bForce = FALSE); |
435 CPDF_IccProfileMap» » m_IccProfileMap; | 480 CPDF_Document* m_pPDFDoc; |
436 CFX_MapByteStringToPtr» m_HashProfileMap; | 481 CPDF_FontMap m_FontMap; |
437 CPDF_FontFileMap» » m_FontFileMap; | 482 CPDF_ColorSpaceMap m_ColorSpaceMap; |
438 }; | 483 CPDF_PatternMap m_PatternMap; |
439 class CPDF_Function : public CFX_Object | 484 CPDF_ImageMap m_ImageMap; |
440 { | 485 CPDF_IccProfileMap m_IccProfileMap; |
441 public: | 486 CFX_MapByteStringToPtr m_HashProfileMap; |
442 static CPDF_Function*» Load(CPDF_Object* pFuncObj); | 487 CPDF_FontFileMap m_FontFileMap; |
443 virtual ~CPDF_Function(); | 488 }; |
444 FX_BOOL» » Call(FX_FLOAT* inputs, int ninputs, FX_FLOAT* results, i
nt& nresults) const; | 489 class CPDF_Function : public CFX_Object { |
445 int»» » CountInputs() | 490 public: |
446 { | 491 static CPDF_Function* Load(CPDF_Object* pFuncObj); |
447 return m_nInputs; | 492 virtual ~CPDF_Function(); |
448 } | 493 FX_BOOL Call(FX_FLOAT* inputs, |
449 int»» » CountOutputs() | 494 int ninputs, |
450 { | 495 FX_FLOAT* results, |
451 return m_nOutputs; | 496 int& nresults) const; |
452 } | 497 int CountInputs() { return m_nInputs; } |
453 protected: | 498 int CountOutputs() { return m_nOutputs; } |
454 CPDF_Function(); | 499 |
455 int»» » m_nInputs, m_nOutputs; | 500 protected: |
456 FX_FLOAT*» m_pDomains; | 501 CPDF_Function(); |
457 FX_FLOAT*» m_pRanges; | 502 int m_nInputs, m_nOutputs; |
458 FX_BOOL» » Init(CPDF_Object* pObj); | 503 FX_FLOAT* m_pDomains; |
459 virtual FX_BOOL» v_Init(CPDF_Object* pObj) = 0; | 504 FX_FLOAT* m_pRanges; |
460 virtual FX_BOOL» v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0; | 505 FX_BOOL Init(CPDF_Object* pObj); |
461 }; | 506 virtual FX_BOOL v_Init(CPDF_Object* pObj) = 0; |
462 class CPDF_IccProfile : public CFX_Object | 507 virtual FX_BOOL v_Call(FX_FLOAT* inputs, FX_FLOAT* results) const = 0; |
463 { | 508 }; |
464 public: | 509 class CPDF_IccProfile : public CFX_Object { |
465 CPDF_IccProfile(FX_LPCBYTE pData, FX_DWORD dwSize, int nComponents); | 510 public: |
466 ~CPDF_IccProfile(); | 511 CPDF_IccProfile(FX_LPCBYTE pData, FX_DWORD dwSize, int nComponents); |
467 FX_BOOL» » » » » m_bsRGB; | 512 ~CPDF_IccProfile(); |
468 FX_LPVOID» » » » m_pTransform; | 513 FX_BOOL m_bsRGB; |
469 }; | 514 FX_LPVOID m_pTransform; |
470 class CPDF_DeviceCS : public CPDF_ColorSpace | 515 }; |
471 { | 516 class CPDF_DeviceCS : public CPDF_ColorSpace { |
472 public: | 517 public: |
473 CPDF_DeviceCS(int family); | 518 CPDF_DeviceCS(int family); |
474 virtual FX_BOOL» GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G, FX_FLOA
T& B) const; | 519 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, |
475 FX_BOOL» SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const
; | 520 FX_FLOAT& R, |
476 FX_BOOL» v_GetCMYK(FX_FLOAT* pBuf, FX_FLOAT& c, FX_FLOAT& m, FX_FLOAT& y,
FX_FLOAT& k) const; | 521 FX_FLOAT& G, |
477 FX_BOOL» v_SetCMYK(FX_FLOAT* pBuf, FX_FLOAT c, FX_FLOAT m, FX_FLOAT y, FX
_FLOAT k) const; | 522 FX_FLOAT& B) const; |
478 virtual void» TranslateImageLine(FX_LPBYTE pDestBuf, FX_LPCBYTE pSrcBu
f, int pixels, int image_width, int image_height, FX_BOOL bTransMask = FALSE) co
nst; | 523 FX_BOOL SetRGB(FX_FLOAT* pBuf, FX_FLOAT R, FX_FLOAT G, FX_FLOAT B) const; |
479 }; | 524 FX_BOOL v_GetCMYK(FX_FLOAT* pBuf, |
480 class CPDF_PatternCS : public CPDF_ColorSpace | 525 FX_FLOAT& c, |
481 { | 526 FX_FLOAT& m, |
482 public: | 527 FX_FLOAT& y, |
483 CPDF_PatternCS(); | 528 FX_FLOAT& k) const; |
484 ~CPDF_PatternCS(); | 529 FX_BOOL v_SetCMYK(FX_FLOAT* pBuf, |
485 virtual FX_BOOL» » v_Load(CPDF_Document* pDoc, CPDF_Array* pArray); | 530 FX_FLOAT c, |
486 virtual FX_BOOL» » GetRGB(FX_FLOAT* pBuf, FX_FLOAT& R, FX_FLOAT& G,
FX_FLOAT& B) const; | 531 FX_FLOAT m, |
487 virtual CPDF_ColorSpace*» GetBaseCS() const | 532 FX_FLOAT y, |
488 { | 533 FX_FLOAT k) const; |
489 return m_pBaseCS; | 534 virtual void TranslateImageLine(FX_LPBYTE pDestBuf, |
490 } | 535 FX_LPCBYTE pSrcBuf, |
491 CPDF_ColorSpace*» m_pBaseCS; | 536 int pixels, |
492 }; | 537 int image_width, |
493 #define»MAX_PAGE_OBJECTS_UNIFY_NAMING» » » » 4096 | 538 int image_height, |
494 class CPDF_ResourceNaming : public CFX_Object | 539 FX_BOOL bTransMask = FALSE) const; |
495 { | 540 }; |
496 public: | 541 class CPDF_PatternCS : public CPDF_ColorSpace { |
497 struct _NamingState : public CFX_Object { | 542 public: |
498 CFX_ByteString» m_Prefix; | 543 CPDF_PatternCS(); |
499 int» » » » m_nIndex; | 544 ~CPDF_PatternCS(); |
500 }; | 545 virtual FX_BOOL v_Load(CPDF_Document* pDoc, CPDF_Array* pArray); |
501 ~CPDF_ResourceNaming(); | 546 virtual FX_BOOL GetRGB(FX_FLOAT* pBuf, |
502 CFX_ByteString» » GetName(const CPDF_Dictionary* pResList, FX_LPCS
TR szType); | 547 FX_FLOAT& R, |
503 protected: | 548 FX_FLOAT& G, |
504 CFX_MapByteStringToPtr» m_NamingCache; | 549 FX_FLOAT& B) const; |
505 }; | 550 virtual CPDF_ColorSpace* GetBaseCS() const { return m_pBaseCS; } |
| 551 CPDF_ColorSpace* m_pBaseCS; |
| 552 }; |
| 553 #define MAX_PAGE_OBJECTS_UNIFY_NAMING 4096 |
| 554 class CPDF_ResourceNaming : public CFX_Object { |
| 555 public: |
| 556 struct _NamingState : public CFX_Object { |
| 557 CFX_ByteString m_Prefix; |
| 558 int m_nIndex; |
| 559 }; |
| 560 ~CPDF_ResourceNaming(); |
| 561 CFX_ByteString GetName(const CPDF_Dictionary* pResList, FX_LPCSTR szType); |
| 562 |
| 563 protected: |
| 564 CFX_MapByteStringToPtr m_NamingCache; |
| 565 }; |
OLD | NEW |