1e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved. 2e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Use of this source code is governed by a BSD-style license that can be 3e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/src/fpdfapi/fpdf_page/pageint.h" 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_module.h" 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_page.h" 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "core/include/fpdfapi/fpdf_serial.h" 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannnamespace { 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct _FX_BSTR { 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_CHAR* m_Ptr; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int m_Size; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define _FX_BSTRC(str) \ 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann { str, sizeof(str) - 1 } 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct PDF_AbbrPairs { 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _FX_BSTR full_name; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann _FX_BSTR abbr; 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst PDF_AbbrPairs PDF_InlineKeyAbbr[] = { 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("BitsPerComponent"), _FX_BSTRC("BPC")}, 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("ColorSpace"), _FX_BSTRC("CS")}, 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Decode"), _FX_BSTRC("D")}, 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("DecodeParms"), _FX_BSTRC("DP")}, 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Filter"), _FX_BSTRC("F")}, 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Height"), _FX_BSTRC("H")}, 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("ImageMask"), _FX_BSTRC("IM")}, 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Interpolate"), _FX_BSTRC("I")}, 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Width"), _FX_BSTRC("W")}, 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst PDF_AbbrPairs PDF_InlineValueAbbr[] = { 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("DeviceGray"), _FX_BSTRC("G")}, 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("DeviceRGB"), _FX_BSTRC("RGB")}, 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("DeviceCMYK"), _FX_BSTRC("CMYK")}, 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("Indexed"), _FX_BSTRC("I")}, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("ASCIIHexDecode"), _FX_BSTRC("AHx")}, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("ASCII85Decode"), _FX_BSTRC("A85")}, 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("LZWDecode"), _FX_BSTRC("LZW")}, 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("FlateDecode"), _FX_BSTRC("Fl")}, 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("RunLengthDecode"), _FX_BSTRC("RL")}, 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("CCITTFaxDecode"), _FX_BSTRC("CCF")}, 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {_FX_BSTRC("DCTDecode"), _FX_BSTRC("DCT")}, 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct AbbrReplacementOp { 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool is_replace_key; 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString key; 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteStringC replacement; 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteStringC PDF_FindFullName(const PDF_AbbrPairs* table, 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann size_t count, 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& abbr) { 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t i = 0; i < count; ++i) { 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (abbr.GetLength() != table[i].abbr.m_Size) 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (memcmp(abbr.GetPtr(), table[i].abbr.m_Ptr, abbr.GetLength())) 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_ByteStringC(table[i].full_name.m_Ptr, table[i].full_name.m_Size); 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_ByteStringC(); 70e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} // namespace 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_StreamContentParser::CPDF_StreamContentParser( 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Document* pDocument, 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pPageResources, 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pParentResources, 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix* pmtContentToUser, 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_PageObjects* pObjList, 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pResources, 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Rect* pBBox, 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ParseOptions* pOptions, 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_AllStates* pStates, 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int level) 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : m_pDocument(pDocument), 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPageResources(pPageResources), 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pParentResources(pParentResources), 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pResources(pResources), 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList(pObjList), 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Level(level), 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamStartPos(0), 92ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamCount(0), 93ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates(new CPDF_AllStates), 94ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastTextObject(nullptr), 95ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_DefFontSize(0), 96ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints(nullptr), 97ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathPointCount(0), 98ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathAllocSize(0), 99ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathCurrentX(0.0f), 100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathCurrentY(0.0f), 101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathClipType(0), 102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastImage(nullptr), 103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastImageDict(nullptr), 104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastCloneImageDict(nullptr), 105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bReleaseLastDict(TRUE), 106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bColored(FALSE), 107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing(FALSE) { 108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pmtContentToUser) { 109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mtContentToUser = *pmtContentToUser; 110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pOptions) { 112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Options = *pOptions; 113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pResources) { 115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pResources = m_pParentResources; 116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pResources) { 118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pResources = m_pPageResources; 119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pBBox) { 121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_BBox = *pBBox; 122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pStates) { 124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->Copy(*pStates); 125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GeneralState.New(); 127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GraphState.New(); 128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.New(); 129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.New(); 130ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (size_t i = 0; i < FX_ArraySize(m_Type3Data); ++i) { 132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type3Data[i] = 0.0; 133ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 135ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_StreamContentParser::~CPDF_StreamContentParser() { 137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClearAllParams(); 138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pPathPoints); 139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pLastImageDict) { 140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastImageDict->Release(); 141ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pLastCloneImageDict) { 143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastCloneImageDict->Release(); 144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 145ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannint CPDF_StreamContentParser::GetNextParamPos() { 147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount == PARAM_BUF_SIZE) { 148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamStartPos++; 149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamStartPos == PARAM_BUF_SIZE) { 150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamStartPos = 0; 151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamBuf1[m_ParamStartPos].m_Type == 0) { 153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Object* pObject = m_ParamBuf1[m_ParamStartPos].m_pObject) 154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObject->Release(); 155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_ParamStartPos; 157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = m_ParamStartPos + m_ParamCount; 159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index >= PARAM_BUF_SIZE) { 160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index -= PARAM_BUF_SIZE; 161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamCount++; 163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return index; 164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddNameParam(const FX_CHAR* name, int len) { 166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = GetNextParamPos(); 167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (len > 32) { 168e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov m_ParamBuf1[index].m_Type = 0; 169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_pObject = 170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann new CPDF_Name(PDF_NameDecode(CFX_ByteStringC(name, len))); 171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_Type = PDFOBJ_NAME; 173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!FXSYS_memchr(name, '#', len)) { 174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, name, len); 175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_Name.m_Len = len; 176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString str = PDF_NameDecode(CFX_ByteStringC(name, len)); 178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(m_ParamBuf1[index].m_Name.m_Buffer, str.c_str(), 179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann str.GetLength()); 180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_Name.m_Len = str.GetLength(); 181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddNumberParam(const FX_CHAR* str, int len) { 185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = GetNextParamPos(); 186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_Type = PDFOBJ_NUMBER; 187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_atonum(CFX_ByteStringC(str, len), m_ParamBuf1[index].m_Number.m_bInteger, 188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &m_ParamBuf1[index].m_Number.m_Integer); 189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddObjectParam(CPDF_Object* pObj) { 191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int index = GetNextParamPos(); 192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_Type = 0; 193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamBuf1[index].m_pObject = pObj; 194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::ClearAllParams() { 196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD index = m_ParamStartPos; 197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < m_ParamCount; i++) { 198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamBuf1[index].m_Type == 0) { 199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Object* pObject = m_ParamBuf1[index].m_pObject) 200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObject->Release(); 201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index++; 203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index == PARAM_BUF_SIZE) { 204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann index = 0; 205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamStartPos = 0; 208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ParamCount = 0; 209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Object* CPDF_StreamContentParser::GetObject(FX_DWORD index) { 211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index >= m_ParamCount) { 212e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return NULL; 213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int real_index = m_ParamStartPos + m_ParamCount - index - 1; 215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (real_index >= PARAM_BUF_SIZE) { 216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann real_index -= PARAM_BUF_SIZE; 217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ContentParam& param = m_ParamBuf1[real_index]; 219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == PDFOBJ_NUMBER) { 220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Number* pNumber = param.m_Number.m_bInteger 221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? new CPDF_Number(param.m_Number.m_Integer) 222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : new CPDF_Number(param.m_Number.m_Float); 223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann param.m_Type = 0; 225ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann param.m_pObject = pNumber; 226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pNumber; 227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == PDFOBJ_NAME) { 229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Name* pName = new CPDF_Name( 230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len)); 231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann param.m_Type = 0; 232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann param.m_pObject = pName; 233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pName; 234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == 0) { 236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return param.m_pObject; 237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ASSERT(FALSE); 239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_ByteString CPDF_StreamContentParser::GetString(FX_DWORD index) { 242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index >= m_ParamCount) { 243e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return CFX_ByteString(); 244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int real_index = m_ParamStartPos + m_ParamCount - index - 1; 246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (real_index >= PARAM_BUF_SIZE) { 247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann real_index -= PARAM_BUF_SIZE; 248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ContentParam& param = m_ParamBuf1[real_index]; 250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == PDFOBJ_NAME) { 251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len); 252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == 0 && param.m_pObject) { 254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return param.m_pObject->GetString(); 255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CFX_ByteString(); 257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPDF_StreamContentParser::GetNumber(FX_DWORD index) { 259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (index >= m_ParamCount) { 260e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return 0; 261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int real_index = m_ParamStartPos + m_ParamCount - index - 1; 263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (real_index >= PARAM_BUF_SIZE) { 264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann real_index -= PARAM_BUF_SIZE; 265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ContentParam& param = m_ParamBuf1[real_index]; 267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == PDFOBJ_NUMBER) { 268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return param.m_Number.m_bInteger ? (FX_FLOAT)param.m_Number.m_Integer 269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : param.m_Number.m_Float; 270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (param.m_Type == 0 && param.m_pObject) { 272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return param.m_pObject->GetNumber(); 273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return 0; 275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_FLOAT CPDF_StreamContentParser::GetNumber16(FX_DWORD index) { 277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return GetNumber(index); 278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::SetGraphicStates(CPDF_PageObject* pObj, 280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bColor, 281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bText, 282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bGraph) { 283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_GeneralState = m_pCurStates->m_GeneralState; 284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_ClipPath = m_pCurStates->m_ClipPath; 285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_ContentMark = m_CurContentMark; 286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bColor) { 287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_ColorState = m_pCurStates->m_ColorState; 288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bGraph) { 290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_GraphState = m_pCurStates->m_GraphState; 291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bText) { 293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_TextState = m_pCurStates->m_TextState; 294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 295e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannconst CPDF_StreamContentParser::OpCode CPDF_StreamContentParser::g_OpCodes[] = { 298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('"', 0, 0, 0), 299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_NextLineShowText_Space}, 300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('\'', 0, 0, 0), 301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_NextLineShowText}, 302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillStrokePath}, 303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', '*', 0, 0), 304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_EOFillStrokePath}, 305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 'D', 'C', 0), 306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary}, 307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 'I', 0, 0), &CPDF_StreamContentParser::Handle_BeginImage}, 308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 'M', 'C', 0), 309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_BeginMarkedContent}, 310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 'T', 0, 0), &CPDF_StreamContentParser::Handle_BeginText}, 311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('B', 'X', 0, 0), 312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_BeginSectionUndefined}, 313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('C', 'S', 0, 0), 314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColorSpace_Stroke}, 315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('D', 'P', 0, 0), 316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_MarkPlace_Dictionary}, 317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('D', 'o', 0, 0), 318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_ExecuteXObject}, 319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('E', 'I', 0, 0), &CPDF_StreamContentParser::Handle_EndImage}, 320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('E', 'M', 'C', 0), 321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_EndMarkedContent}, 322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('E', 'T', 0, 0), &CPDF_StreamContentParser::Handle_EndText}, 323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('E', 'X', 0, 0), 324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_EndSectionUndefined}, 325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('F', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPathOld}, 326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('G', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Stroke}, 327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('I', 'D', 0, 0), 328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_BeginImageData}, 329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('J', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineCap}, 330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('K', 0, 0, 0), 331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke}, 332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('M', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetMiterLimit}, 333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('M', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace}, 334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('Q', 0, 0, 0), 335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_RestoreGraphState}, 336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('R', 'G', 0, 0), 337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetRGBColor_Stroke}, 338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('S', 0, 0, 0), &CPDF_StreamContentParser::Handle_StrokePath}, 339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('S', 'C', 0, 0), 340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColor_Stroke}, 341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('S', 'C', 'N', 0), 342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColorPS_Stroke}, 343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', '*', 0, 0), 344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_MoveToNextLine}, 345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'D', 0, 0), 346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading}, 347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'J', 0, 0), 348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_ShowText_Positioning}, 349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'L', 0, 0), 350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetTextLeading}, 351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'c', 0, 0), &CPDF_StreamContentParser::Handle_SetCharSpace}, 352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'd', 0, 0), 353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_MoveTextPoint}, 354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'f', 0, 0), &CPDF_StreamContentParser::Handle_SetFont}, 355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'j', 0, 0), &CPDF_StreamContentParser::Handle_ShowText}, 356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'm', 0, 0), 357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetTextMatrix}, 358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'r', 0, 0), 359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetTextRenderMode}, 360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetTextRise}, 361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'w', 0, 0), &CPDF_StreamContentParser::Handle_SetWordSpace}, 362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('T', 'z', 0, 0), &CPDF_StreamContentParser::Handle_SetHorzScale}, 363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('W', 0, 0, 0), &CPDF_StreamContentParser::Handle_Clip}, 364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('W', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOClip}, 365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('b', 0, 0, 0), 366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_CloseFillStrokePath}, 367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('b', '*', 0, 0), 368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_CloseEOFillStrokePath}, 369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('c', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_123}, 370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('c', 'm', 0, 0), &CPDF_StreamContentParser::Handle_ConcatMatrix}, 371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('c', 's', 0, 0), 372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColorSpace_Fill}, 373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('d', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetDash}, 374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('d', '0', 0, 0), &CPDF_StreamContentParser::Handle_SetCharWidth}, 375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('d', '1', 0, 0), 376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetCachedDevice}, 377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('f', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPath}, 378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('f', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillPath}, 379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('g', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Fill}, 380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('g', 's', 0, 0), 381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetExtendGraphState}, 382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('h', 0, 0, 0), &CPDF_StreamContentParser::Handle_ClosePath}, 383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('i', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetFlat}, 384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('j', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineJoin}, 385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('k', 0, 0, 0), 386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetCMYKColor_Fill}, 387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('l', 0, 0, 0), &CPDF_StreamContentParser::Handle_LineTo}, 388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('m', 0, 0, 0), &CPDF_StreamContentParser::Handle_MoveTo}, 389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('n', 0, 0, 0), &CPDF_StreamContentParser::Handle_EndPath}, 390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('q', 0, 0, 0), &CPDF_StreamContentParser::Handle_SaveGraphState}, 391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('r', 'e', 0, 0), &CPDF_StreamContentParser::Handle_Rectangle}, 392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('r', 'g', 0, 0), 393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetRGBColor_Fill}, 394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('r', 'i', 0, 0), 395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetRenderIntent}, 396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('s', 0, 0, 0), 397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_CloseStrokePath}, 398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('s', 'c', 0, 0), 399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColor_Fill}, 400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('s', 'c', 'n', 0), 401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &CPDF_StreamContentParser::Handle_SetColorPS_Fill}, 402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('s', 'h', 0, 0), &CPDF_StreamContentParser::Handle_ShadeFill}, 403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('v', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_23}, 404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('w', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineWidth}, 405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann {FXBSTR_ID('y', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_13}, 406e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov}; 407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannFX_BOOL CPDF_StreamContentParser::OnOperator(const FX_CHAR* op) { 408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int i = 0; 409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_DWORD opid = 0; 410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (i < 4 && op[i]) { 411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann opid = (opid << 8) + op[i]; 412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann i++; 413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (i < 4) { 415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann opid <<= 8; 416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann i++; 417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int low = 0, high = sizeof g_OpCodes / sizeof(OpCode) - 1; 419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann while (low <= high) { 420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int middle = (low + high) / 2; 421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int compare = opid - g_OpCodes[middle].m_OpId; 422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (compare == 0) { 423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (this->*g_OpCodes[middle].m_OpHandler)(); 424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return TRUE; 425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (compare < 0) { 427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann high = middle - 1; 428e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann low = middle + 1; 430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_CompatCount != 0; 433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CloseFillStrokePath() { 435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_ClosePath(); 439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_WINDING, TRUE); 440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_FillStrokePath() { 442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_WINDING, TRUE); 446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CloseEOFillStrokePath() { 448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE); 452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_ALTERNATE, TRUE); 453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EOFillStrokePath() { 455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_ALTERNATE, TRUE); 459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() { 461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Options.m_bMarkedContent) { 462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString tag = GetString(1); 465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pProperty = GetObject(0); 466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pProperty) { 467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bDirect = TRUE; 470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pProperty->IsName()) { 471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pProperty = FindResourceObj("Properties", pProperty->GetString()); 472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pProperty) 473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bDirect = FALSE; 475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (CPDF_Dictionary* pDict = pProperty->AsDictionary()) { 477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CurContentMark.GetModify()->AddMark(tag, pDict, bDirect); 478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_BeginMarkedContent() { 481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Options.m_bMarkedContent) { 482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString tag = GetString(0); 485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CurContentMark.GetModify()->AddMark(tag, NULL, FALSE); 486e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 488ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid PDF_ReplaceAbbr(CPDF_Object* pObj) { 489ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann switch (pObj->GetType()) { 490ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PDFOBJ_DICTIONARY: { 491ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pDict = pObj->AsDictionary(); 492ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::vector<AbbrReplacementOp> replacements; 493ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& it : *pDict) { 494ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString key = it.first; 495ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* value = it.second; 496ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteStringC fullname = PDF_FindFullName( 497ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PDF_InlineKeyAbbr, FX_ArraySize(PDF_InlineKeyAbbr), key); 498ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!fullname.IsEmpty()) { 499ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AbbrReplacementOp op; 500ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.is_replace_key = true; 501ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.key = key; 502ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.replacement = fullname; 503ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann replacements.push_back(op); 504ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann key = fullname; 505e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 506ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 507ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (value->IsName()) { 508ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString name = value->GetString(); 509ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fullname = PDF_FindFullName(PDF_InlineValueAbbr, 510ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_ArraySize(PDF_InlineValueAbbr), name); 511ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!fullname.IsEmpty()) { 512ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AbbrReplacementOp op; 513ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.is_replace_key = false; 514ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.key = key; 515ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann op.replacement = fullname; 516ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann replacements.push_back(op); 517ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 518ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 519ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PDF_ReplaceAbbr(value); 520e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 521ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 522ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (const auto& op : replacements) { 523ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (op.is_replace_key) 524ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDict->ReplaceKey(op.key, op.replacement); 525ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann else 526ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pDict->SetAtName(op.key, op.replacement); 527ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 528ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 529ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 530ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann case PDFOBJ_ARRAY: { 531ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = pObj->AsArray(); 532ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (FX_DWORD i = 0; i < pArray->GetCount(); i++) { 533ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pElement = pArray->GetElement(i); 534ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pElement->IsName()) { 535ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString name = pElement->GetString(); 536ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteStringC fullname = PDF_FindFullName( 537ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PDF_InlineValueAbbr, FX_ArraySize(PDF_InlineValueAbbr), name); 538ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!fullname.IsEmpty()) { 539ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pArray->SetAt(i, new CPDF_Name(fullname)); 540ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 541ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 542ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PDF_ReplaceAbbr(pElement); 543e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 544ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 545ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann break; 546e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 547ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 548e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 549ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 550ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_BeginText() { 551ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextMatrix.Set(1.0f, 0, 0, 1.0f, 0, 0); 552ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnChangeTextMatrix(); 553ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX = 0; 554ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY = 0; 555ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineX = 0; 556ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineY = 0; 557ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 558ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_BeginSectionUndefined() { 559ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CompatCount++; 560ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 561ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CurveTo_123() { 562ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 563ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 564ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 565ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(5), GetNumber(4), FXPT_BEZIERTO); 566ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 567ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 568ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 569ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ConcatMatrix() { 570ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT a2 = GetNumber16(5), b2 = GetNumber16(4), c2 = GetNumber16(3), 571ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann d2 = GetNumber16(2); 572ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT e2 = GetNumber(1), f2 = GetNumber(0); 573ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix new_matrix(a2, b2, c2, d2, e2, f2); 574ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann new_matrix.Concat(m_pCurStates->m_CTM); 575ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_CTM = new_matrix; 576ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnChangeTextMatrix(); 577ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 578ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColorSpace_Fill() { 579ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 580ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 581ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 582ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csname = GetString(0); 583ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = FindColorSpace(csname); 584ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCS) { 585ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 586ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 587ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.GetModify()->m_FillColor.SetColorSpace(pCS); 588ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 589ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColorSpace_Stroke() { 590ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 591ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 592ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 593ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString csname = GetString(0); 594ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = FindColorSpace(csname); 595ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCS) { 596ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 597ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 598ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.GetModify()->m_StrokeColor.SetColorSpace(pCS); 599ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 600ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetDash() { 601ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 602ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 603ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 604ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = GetObject(1) ? GetObject(1)->GetArray() : NULL; 605ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 606ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 607ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 608ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->SetLineDash(pArray, GetNumber(0), 1.0f); 609ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 610ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetCharWidth() { 611ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type3Data[0] = GetNumber(1); 612ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type3Data[1] = GetNumber(0); 613ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bColored = TRUE; 614ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 615ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetCachedDevice() { 616ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 6; i++) { 617ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Type3Data[i] = GetNumber(5 - i); 618ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 619ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bColored = FALSE; 620ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 621ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ExecuteXObject() { 622ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString name = GetString(0); 623ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (name == m_LastImageName && m_pLastImage && m_pLastImage->GetStream() && 624ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastImage->GetStream()->GetObjNum()) { 625ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddImage(nullptr, m_pLastImage, FALSE); 626ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 627ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 628ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 629ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 630ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pResources) 631ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 632ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 633ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pList = m_pResources->GetDict("XObject"); 634ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pList && m_pPageResources && m_pResources != m_pPageResources) 635ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pList = m_pPageResources->GetDict("XObject"); 636ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pList) 637ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 638ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Reference* pRes = ToReference(pList->GetElement(name)); 639ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pRes) 640ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 641ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 642ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bForm; 643ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pDocument->IsFormStream(pRes->GetRefObjNum(), bForm) && !bForm) 644ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 645ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 646ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 647ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Stream* pXObject = ToStream(FindResourceObj("XObject", name)); 648ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pXObject) { 649ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing = TRUE; 650ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 651ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 652ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 653ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteStringC type = pXObject->GetDict() 654ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ? pXObject->GetDict()->GetConstString("Subtype") 655ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann : CFX_ByteStringC(); 656ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (type == "Image") { 657e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov if (m_Options.m_bTextOnly) { 658ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 659ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 660ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ImageObject* pObj = AddImage(pXObject, NULL, FALSE); 661ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_LastImageName = name; 662ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastImage = pObj->m_pImage; 663ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pObjectList->m_bHasImageMask) 664ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_bHasImageMask = m_pLastImage->IsMask(); 665ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (type == "Form") { 666ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddForm(pXObject); 667ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 668ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 669ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 670ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 671ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) { 672ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Options.m_bSeparateForm) { 673ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pResources = pStream->GetDict()->GetDict("Resources"); 674ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix form_matrix = pStream->GetDict()->GetMatrix("Matrix"); 675ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann form_matrix.Concat(m_pCurStates->m_CTM); 676ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pBBox = pStream->GetDict()->GetArray("BBox"); 677ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_FloatRect form_bbox; 678ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Path ClipPath; 679ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pBBox) { 680ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann form_bbox = pStream->GetDict()->GetRect("BBox"); 681ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClipPath.New(); 682ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClipPath.AppendRect(form_bbox.left, form_bbox.bottom, form_bbox.right, 683ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann form_bbox.top); 684ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ClipPath.Transform(&form_matrix); 685ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann form_bbox.Transform(&form_matrix); 686ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 687ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamContentParser parser(m_pDocument, m_pPageResources, m_pResources, 688ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &m_mtContentToUser, m_pObjectList, 689ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pResources, &form_bbox, &m_Options, 690ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates.get(), m_Level + 1); 691ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.m_pCurStates->m_CTM = form_matrix; 692ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (ClipPath.NotNull()) { 693ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.m_pCurStates->m_ClipPath.AppendPath(ClipPath, FXFILL_WINDING, 694ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann TRUE); 695ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 696ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_StreamAcc stream; 697ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann stream.LoadAllData(pStream, FALSE); 698ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (stream.GetSize() == 0) { 699ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 700ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 701ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann parser.Parse(stream.GetData(), stream.GetSize(), 0); 702ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 703ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 704ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_FormObject* pFormObj = new CPDF_FormObject; 705ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->m_pForm = 706ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann new CPDF_Form(m_pDocument, m_pPageResources, pStream, m_pResources); 707ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->m_FormMatrix = m_pCurStates->m_CTM; 708ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->m_FormMatrix.Concat(m_mtContentToUser); 709ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_AllStates status; 710ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann status.m_GeneralState = m_pCurStates->m_GeneralState; 711ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann status.m_GraphState = m_pCurStates->m_GraphState; 712ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann status.m_ColorState = m_pCurStates->m_ColorState; 713ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann status.m_TextState = m_pCurStates->m_TextState; 714ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->m_pForm->ParseContent(&status, NULL, NULL, &m_Options, m_Level + 1); 715ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pObjectList->m_bBackgroundAlphaNeeded && 716ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->m_pForm->m_bBackgroundAlphaNeeded) { 717ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_bBackgroundAlphaNeeded = TRUE; 718ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 719ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFormObj->CalcBoundingBox(); 720ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetGraphicStates(pFormObj, TRUE, TRUE, TRUE); 721ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_ObjectList.AddTail(pFormObj); 722ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 723ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_ImageObject* CPDF_StreamContentParser::AddImage(CPDF_Stream* pStream, 724ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Image* pImage, 725ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bInline) { 726ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pStream && !pImage) { 727ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 728ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 729ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix ImageMatrix; 730ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ImageMatrix.Copy(m_pCurStates->m_CTM); 731ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ImageMatrix.Concat(m_mtContentToUser); 732ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ImageObject* pImageObj = new CPDF_ImageObject; 733ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pImage) { 734ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->m_pImage = 735ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pDocument->GetPageData()->GetImage(pImage->GetStream()); 736ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (pStream->GetObjNum()) { 737ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->m_pImage = m_pDocument->LoadImageF(pStream); 738ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 739ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->m_pImage = new CPDF_Image(m_pDocument); 740ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->m_pImage->LoadImageF(pStream, bInline); 741ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 742ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetGraphicStates(pImageObj, pImageObj->m_pImage->IsMask(), FALSE, FALSE); 743ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->m_Matrix = ImageMatrix; 744ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pImageObj->CalcBoundingBox(); 745ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_ObjectList.AddTail(pImageObj); 746ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pImageObj; 747ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 748ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MarkPlace_Dictionary() {} 749ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EndImage() {} 750ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EndMarkedContent() { 751ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_Options.m_bMarkedContent) { 752ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 753ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 754ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CurContentMark.IsNull()) { 755ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 756ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 757ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count = m_CurContentMark.GetObject()->CountItems(); 758ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (count == 1) { 759ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CurContentMark.SetNull(); 760ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 761ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 762ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CurContentMark.GetModify()->DeleteLastMark(); 763ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 764ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EndText() { 765ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int count = m_ClipTextList.GetSize(); 766ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (count == 0) { 767ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 768ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 769ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pCurStates->m_TextState.GetObject()->m_TextMode < 4) { 770ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < count; i++) { 771ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete m_ClipTextList.GetAt(i); 772ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 773ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 774ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ClipPath.AppendTexts(m_ClipTextList.GetData(), count); 775ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 776ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ClipTextList.RemoveAll(); 777ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 778ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EndSectionUndefined() { 779ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_CompatCount) { 780ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_CompatCount--; 781ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 782ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 783ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_FillPath() { 784ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 785ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 786ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 787ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_WINDING, FALSE); 788ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 789ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_FillPathOld() { 790ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 791ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 792ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 793ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_WINDING, FALSE); 794ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 795ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EOFillPath() { 796ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 797ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 798ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 799ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(FXFILL_ALTERNATE, FALSE); 800ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 801ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetGray_Fill() { 802ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT value = GetNumber(0); 803ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY); 804ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillColor(pCS, &value, 1); 805ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 806ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetGray_Stroke() { 807ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT value = GetNumber(0); 808ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY); 809ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokeColor(pCS, &value, 1); 810ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 811ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetExtendGraphState() { 812ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString name = GetString(0); 813ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pGS = ToDictionary(FindResourceObj("ExtGState", name)); 814ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pGS) { 815ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing = TRUE; 816ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 817ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 818ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->ProcessExtGS(pGS, this); 819ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 820ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ClosePath() { 821ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 822ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 823ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 824ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PathPointCount == 0) { 825ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 826ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 827ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PathStartX != m_PathCurrentX || m_PathStartY != m_PathCurrentY) { 828ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(m_PathStartX, m_PathStartY, FXPT_LINETO | FXPT_CLOSEFIGURE); 829ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_pPathPoints[m_PathPointCount - 1].m_Flag != FXPT_MOVETO) { 830ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_Flag |= FXPT_CLOSEFIGURE; 831ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 832e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 833ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetFlat() { 834ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GeneralState.GetModify()->m_Flatness = GetNumber(0); 835e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 836ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_BeginImageData() {} 837ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetLineJoin() { 838ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GraphState.GetModify()->m_LineJoin = 839ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (CFX_GraphStateData::LineJoin)GetInteger(0); 840e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 841ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetLineCap() { 842ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GraphState.GetModify()->m_LineCap = 843ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann (CFX_GraphStateData::LineCap)GetInteger(0); 844e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 845ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetCMYKColor_Fill() { 846ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 4) 847ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 848ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 849ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[4]; 850ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 4; i++) { 851ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(3 - i); 852ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 853ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); 854ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillColor(pCS, values, 4); 855ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 856ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke() { 857ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 4) 858ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 859ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 860ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[4]; 861ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 4; i++) { 862ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(3 - i); 863ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 864ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); 865ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 4); 866ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 867ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_LineTo() { 868ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 2) 869ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 870ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 871ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 872ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 873ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 874ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_LINETO); 875ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 876ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MoveTo() { 877ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 2) 878ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 879ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 880ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 881ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pSyntax->SkipPathObject(); 882ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 883ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 884ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_MOVETO); 885ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ParsePathObject(); 886ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 887ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetMiterLimit() { 888ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GraphState.GetModify()->m_MiterLimit = GetNumber(0); 889ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 890ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MarkPlace() {} 891ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EndPath() { 892ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 893ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 894ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 895ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(0, FALSE); 896ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 897ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SaveGraphState() { 898ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::unique_ptr<CPDF_AllStates> pStates(new CPDF_AllStates); 899ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pStates->Copy(*m_pCurStates); 900ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_StateStack.push_back(std::move(pStates)); 901ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 902ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_RestoreGraphState() { 903ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_StateStack.empty()) 904ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 905ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::unique_ptr<CPDF_AllStates> pStates = std::move(m_StateStack.back()); 906ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_StateStack.pop_back(); 907ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->Copy(*pStates); 908ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 909ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_Rectangle() { 910ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 911ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 912ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 913ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT x = GetNumber(3), y = GetNumber(2); 914ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT w = GetNumber(1), h = GetNumber(0); 915ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathRect(x, y, w, h); 916ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 917ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddPathRect(FX_FLOAT x, 918ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT y, 919ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT w, 920ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT h) { 921ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(x, y, FXPT_MOVETO); 922ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(x + w, y, FXPT_LINETO); 923ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(x + w, y + h, FXPT_LINETO); 924ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(x, y + h, FXPT_LINETO); 925ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(x, y, FXPT_LINETO | FXPT_CLOSEFIGURE); 926ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 927ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetRGBColor_Fill() { 928ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 3) 929ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 930ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 931ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[3]; 932ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 3; i++) { 933ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(2 - i); 934ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 935ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); 936ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillColor(pCS, values, 3); 937ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 938ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetRGBColor_Stroke() { 939ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 3) 940ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 941ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 942ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[3]; 943ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < 3; i++) { 944ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(2 - i); 945ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 946ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS = CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); 947ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokeColor(pCS, values, 3); 948ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 949ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetRenderIntent() {} 950ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CloseStrokePath() { 951ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 952ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 953ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 954ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_ClosePath(); 955ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(0, TRUE); 956ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 957ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_StrokePath() { 958ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 959ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 960ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 961ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathObject(0, TRUE); 962ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 963ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColor_Fill() { 964ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 965ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 966ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 967ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[4]; 968ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nargs = m_ParamCount; 969ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nargs > 4) { 970ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nargs = 4; 971ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 972ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nargs; i++) { 973ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(nargs - i - 1); 974ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 975ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillColor(NULL, values, nargs); 976ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 977ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColor_Stroke() { 978ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 979ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 980ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 981ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT values[4]; 982ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nargs = m_ParamCount; 983ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nargs > 4) { 984ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nargs = 4; 985ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 986ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nargs; i++) { 987ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(nargs - i - 1); 988ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 989ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nargs); 990ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 991ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColorPS_Fill() { 992ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 993ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 994ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 995ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pLastParam = GetObject(0); 996ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pLastParam) { 997ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 998ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 999ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nargs = m_ParamCount; 1000ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nvalues = nargs; 1001ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pLastParam->IsName()) { 1002ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nvalues--; 1003ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1004ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* values = NULL; 1005ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nvalues) { 1006ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values = FX_Alloc(FX_FLOAT, nvalues); 1007ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nvalues; i++) { 1008ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(nargs - i - 1); 1009ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1010ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1011ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nvalues != nargs) { 1012ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); 1013ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPattern) { 1014ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillPattern(pPattern, values, nvalues); 1015ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1016ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1017ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetFillColor(NULL, values, nvalues); 1018ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1019ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(values); 1020ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1021ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetColorPS_Stroke() { 1022ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 1023ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1024ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1025ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pLastParam = GetObject(0); 1026ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pLastParam) { 1027ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1028ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1029ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nargs = m_ParamCount; 1030ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nvalues = nargs; 1031ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pLastParam->IsName()) 1032ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nvalues--; 1033ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1034ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* values = NULL; 1035ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nvalues) { 1036ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values = FX_Alloc(FX_FLOAT, nvalues); 1037ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < nvalues; i++) { 1038ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann values[i] = GetNumber(nargs - i - 1); 1039ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1040ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1041ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nvalues != nargs) { 1042ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Pattern* pPattern = FindPattern(GetString(0), FALSE); 1043ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPattern) { 1044ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokePattern(pPattern, values, nvalues); 1045ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1046ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1047ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ColorState.SetStrokeColor(NULL, values, nvalues); 1048ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1049ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(values); 1050ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1051ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCFX_FloatRect GetShadingBBox(CPDF_Stream* pStream, 1052ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ShadingType type, 1053ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_Matrix* pMatrix, 1054ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Function** pFuncs, 1055ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nFuncs, 1056ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ColorSpace* pCS); 1057ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1058ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ShadeFill() { 1059ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 1060ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1061ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1062ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Pattern* pPattern = FindPattern(GetString(0), TRUE); 1063ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pPattern) { 1064ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1065ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1066ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pPattern->m_PatternType != CPDF_Pattern::SHADING) { 1067ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1068ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1069ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ShadingPattern* pShading = static_cast<CPDF_ShadingPattern*>(pPattern); 1070ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pShading->m_bShadingObj) { 1071ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1072ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1073ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pShading->Load()) { 1074ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1075ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1076ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_ShadingObject* pObj = new CPDF_ShadingObject; 1077ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_pShading = pShading; 1078ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetGraphicStates(pObj, FALSE, FALSE, FALSE); 1079ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Matrix = m_pCurStates->m_CTM; 1080ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Matrix.Concat(m_mtContentToUser); 1081ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_FloatRect bbox; 1082ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pObj->m_ClipPath.IsNull()) { 1083ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bbox = pObj->m_ClipPath.GetClipBox(); 1084ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1085ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bbox = m_BBox; 1086ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1087ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pShading->IsMeshShading()) { 1088ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bbox.Intersect(GetShadingBBox(ToStream(pShading->m_pShadingObj), 1089ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pShading->m_ShadingType, &pObj->m_Matrix, 1090ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pShading->m_pFunctions, pShading->m_nFuncs, 1091ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pShading->m_pCS)); 1092ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1093ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Left = bbox.left; 1094ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Right = bbox.right; 1095ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Top = bbox.top; 1096ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pObj->m_Bottom = bbox.bottom; 1097ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_ObjectList.AddTail(pObj); 1098ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1099ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetCharSpace() { 1100ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(0); 1101ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1102ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MoveTextPoint() { 1103ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineX += GetNumber(1); 1104ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineY += GetNumber(0); 1105ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX = m_pCurStates->m_TextLineX; 1106ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY = m_pCurStates->m_TextLineY; 1107ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1108ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading() { 1109ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_MoveTextPoint(); 1110ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLeading = -GetNumber(0); 1111ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1112ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetFont() { 1113ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fs = GetNumber(0); 1114ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fs == 0) { 1115ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fs = m_DefFontSize; 1116ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1117ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_FontSize = fs; 1118ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = FindFont(GetString(1)); 1119ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont) { 1120ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.SetFont(pFont); 1121ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1122ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1123ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Object* CPDF_StreamContentParser::FindResourceObj( 1124ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteStringC& type, 1125ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& name) { 1126ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pResources) { 1127ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1128ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1129ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_pResources == m_pPageResources) { 1130e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Dictionary* pList = m_pResources->GetDict(type); 1131ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pList) { 1132ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1133e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1134e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov CPDF_Object* pRes = pList->GetElementValue(name); 1135e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov return pRes; 1136ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1137ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pList = m_pResources->GetDict(type); 1138ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pList) { 1139ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!m_pPageResources) { 1140ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1141e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1142ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pList = m_pPageResources->GetDict(type); 1143ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pList) { 1144ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1145e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } 1146ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pRes = pList->GetElementValue(name); 1147ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pRes; 1148ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1149ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pRes = pList->GetElementValue(name); 1150ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pRes; 1151ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1152ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Font* CPDF_StreamContentParser::FindFont(const CFX_ByteString& name) { 1153ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Dictionary* pFontDict = ToDictionary(FindResourceObj("Font", name)); 1154ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFontDict) { 1155ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing = TRUE; 1156ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPDF_Font::GetStockFont(m_pDocument, "Helvetica"); 1157ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1158ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1159ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = m_pDocument->LoadFont(pFontDict); 1160ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont && pFont->GetType3Font()) { 1161ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont->GetType3Font()->SetPageResources(m_pResources); 1162ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pFont->GetType3Font()->CheckType3FontMetrics(); 1163ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1164ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return pFont; 1165ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1166ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_ColorSpace* CPDF_StreamContentParser::FindColorSpace( 1167ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& name) { 1168ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (name == "Pattern") { 1169ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN); 1170ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1171ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (name == "DeviceGray" || name == "DeviceCMYK" || name == "DeviceRGB") { 1172ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString defname = "Default"; 1173ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann defname += name.Mid(7); 1174ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pDefObj = FindResourceObj("ColorSpace", defname); 1175ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pDefObj) { 1176ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (name == "DeviceGray") { 1177ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICEGRAY); 1178ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1179ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (name == "DeviceRGB") { 1180ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB); 1181ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1182ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICECMYK); 1183ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1184ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pDocument->LoadColorSpace(pDefObj); 1185ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1186ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pCSObj = FindResourceObj("ColorSpace", name); 1187ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pCSObj) { 1188ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing = TRUE; 1189ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1190ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1191ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pDocument->LoadColorSpace(pCSObj); 1192ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1193ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. MoltmannCPDF_Pattern* CPDF_StreamContentParser::FindPattern(const CFX_ByteString& name, 1194ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL bShading) { 1195ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pPattern = 1196ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FindResourceObj(bShading ? "Shading" : "Pattern", name); 1197ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pPattern || (!pPattern->IsDictionary() && !pPattern->IsStream())) { 1198ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_bResourceMissing = TRUE; 1199ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return NULL; 1200ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1201ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return m_pDocument->LoadPattern(pPattern, bShading, 1202ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann &m_pCurStates->m_ParentMatrix); 1203ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1204ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::ConvertTextSpace(FX_FLOAT& x, FX_FLOAT& y) { 1205ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextMatrix.Transform(x, y, x, y); 1206ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ConvertUserSpace(x, y); 1207ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1208ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::ConvertUserSpace(FX_FLOAT& x, FX_FLOAT& y) { 1209ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_CTM.Transform(x, y, x, y); 1210ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_mtContentToUser.Transform(x, y, x, y); 1211ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1212ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddTextObject(CFX_ByteString* pStrs, 1213ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fInitKerning, 1214ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* pKerning, 1215ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nsegs) { 1216ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Font* pFont = m_pCurStates->m_TextState.GetFont(); 1217ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont) { 1218ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1219ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1220ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (fInitKerning != 0) { 1221ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont->IsVertWriting()) { 1222ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX -= 1223ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) / 1224ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1000; 1225e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov } else { 1226ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY -= 1227ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_Mul(fInitKerning, m_pCurStates->m_TextState.GetFontSize()) / 1228ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1000; 1229ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1230ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1231ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nsegs == 0) { 1232ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1233ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1234ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int textmode; 1235ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pFont->GetFontType() == PDFFONT_TYPE3) { 1236ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann textmode = 0; 1237ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1238ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann textmode = m_pCurStates->m_TextState.GetObject()->m_TextMode; 1239ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1240ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_TextObject* pText = new CPDF_TextObject; 1241ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pLastTextObject = pText; 1242ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetGraphicStates(pText, TRUE, TRUE, TRUE); 1243ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (textmode && textmode != 3 && textmode != 4 && textmode != 7) { 1244ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* pCTM = pText->m_TextState.GetModify()->m_CTM; 1245ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCTM[0] = m_pCurStates->m_CTM.a; 1246ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCTM[1] = m_pCurStates->m_CTM.c; 1247ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCTM[2] = m_pCurStates->m_CTM.b; 1248ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCTM[3] = m_pCurStates->m_CTM.d; 1249ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1250ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pText->SetSegments(pStrs, pKerning, nsegs); 1251ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pText->m_PosX = m_pCurStates->m_TextX; 1252ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pText->m_PosY = m_pCurStates->m_TextY + m_pCurStates->m_TextRise; 1253ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ConvertTextSpace(pText->m_PosX, pText->m_PosY); 1254ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT x_advance, y_advance; 1255ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pText->CalcPositionData(&x_advance, &y_advance, m_pCurStates->m_TextHorzScale, 1256ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_Level); 1257ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX += x_advance; 1258ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY += y_advance; 1259ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (textmode > 3) { 1260ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_TextObject* pCopy = new CPDF_TextObject; 1261ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pCopy->Copy(pText); 1262ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_ClipTextList.Add(pCopy); 1263ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1264ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_ObjectList.AddTail(pText); 1265ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pKerning && pKerning[nsegs - 1] != 0) { 1266ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pFont->IsVertWriting()) { 1267ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX -= 1268ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_Mul(pKerning[nsegs - 1], 1269ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetFontSize()) / 1270ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1000; 1271ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1272ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY -= 1273ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_Mul(pKerning[nsegs - 1], 1274ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetFontSize()) / 1275ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1000; 1276ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1277ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1278ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1279ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ShowText() { 1280ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString str = GetString(0); 1281ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (str.IsEmpty()) { 1282ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1283ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1284ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddTextObject(&str, 0, NULL, 1); 1285ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1286ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_ShowText_Positioning() { 1287ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Array* pArray = GetObject(0) ? GetObject(0)->GetArray() : NULL; 1288ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!pArray) { 1289ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1290ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1291ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int n = pArray->GetCount(); 1292ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nsegs = 0; 1293ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < n; i++) { 1294ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pArray->GetElementValue(i)->IsString()) 1295ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nsegs++; 1296ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1297ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (nsegs == 0) { 1298ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < n; i++) { 1299ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX -= 1300ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_Mul(pArray->GetNumber(i), 1301ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetFontSize()) / 1302ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 1000; 1303ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1304ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1305ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1306ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString* pStrs = new CFX_ByteString[nsegs]; 1307ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* pKerning = FX_Alloc(FX_FLOAT, nsegs); 1308ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int iSegment = 0; 1309ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT fInitKerning = 0; 1310ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann for (int i = 0; i < n; i++) { 1311ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Object* pObj = pArray->GetElementValue(i); 1312ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (pObj->IsString()) { 1313ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString str = pObj->GetString(); 1314ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (str.IsEmpty()) { 1315ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann continue; 1316ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1317ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pStrs[iSegment] = str; 1318ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pKerning[iSegment++] = 0; 1319ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1320ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT num = pObj ? pObj->GetNumber() : 0; 1321ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (iSegment == 0) { 1322ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann fInitKerning += num; 1323ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else { 1324ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pKerning[iSegment - 1] += num; 1325ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1326ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1327ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1328ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddTextObject(pStrs, fInitKerning, pKerning, iSegment); 1329ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann delete[] pStrs; 1330ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(pKerning); 1331ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1332ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetTextLeading() { 1333ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLeading = GetNumber(0); 1334ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1335ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetTextMatrix() { 1336ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextMatrix.Set(GetNumber16(5), GetNumber16(4), GetNumber16(3), 1337ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann GetNumber16(2), GetNumber(1), GetNumber(0)); 1338ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnChangeTextMatrix(); 1339ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX = 0; 1340ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY = 0; 1341ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineX = 0; 1342ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineY = 0; 1343ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1344ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::OnChangeTextMatrix() { 1345ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix text_matrix(m_pCurStates->m_TextHorzScale, 0.0f, 0.0f, 1.0f, 0.0f, 1346ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 0.0f); 1347ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann text_matrix.Concat(m_pCurStates->m_TextMatrix); 1348ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann text_matrix.Concat(m_pCurStates->m_CTM); 1349ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann text_matrix.Concat(m_mtContentToUser); 1350ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT* pTextMatrix = m_pCurStates->m_TextState.GetModify()->m_Matrix; 1351ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pTextMatrix[0] = text_matrix.a; 1352ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pTextMatrix[1] = text_matrix.c; 1353ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pTextMatrix[2] = text_matrix.b; 1354ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pTextMatrix[3] = text_matrix.d; 1355ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1356ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetTextRenderMode() { 1357ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int mode = GetInteger(0); 1358ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (mode < 0 || mode > 7) { 1359ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1360ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1361ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_TextMode = mode; 1362ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1363ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetTextRise() { 1364ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextRise = GetNumber(0); 1365ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1366ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetWordSpace() { 1367ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(0); 1368ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1369ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetHorzScale() { 1370ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_ParamCount != 1) { 1371ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1372ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1373ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextHorzScale = GetNumber(0) / 100; 1374ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann OnChangeTextMatrix(); 1375ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1376ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_MoveToNextLine() { 1377ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextLineY -= m_pCurStates->m_TextLeading; 1378ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextX = m_pCurStates->m_TextLineX; 1379ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextY = m_pCurStates->m_TextLineY; 1380ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1381ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CurveTo_23() { 1382ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 1383ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1384ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1385ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(m_PathCurrentX, m_PathCurrentY, FXPT_BEZIERTO); 1386ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 1387ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1388ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1389ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_SetLineWidth() { 1390ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_FLOAT width = GetNumber(0); 1391ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_GraphState.GetModify()->m_LineWidth = width; 1392ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1393ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_Clip() { 1394ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathClipType = FXFILL_WINDING; 1395ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1396ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_EOClip() { 1397ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathClipType = FXFILL_ALTERNATE; 1398ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1399ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_CurveTo_13() { 1400ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_Options.m_bTextOnly) { 1401ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1402ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1403ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(3), GetNumber(2), FXPT_BEZIERTO); 1404ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1405ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann AddPathPoint(GetNumber(1), GetNumber(0), FXPT_BEZIERTO); 1406ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1407ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_NextLineShowText() { 1408ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_MoveToNextLine(); 1409ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_ShowText(); 1410ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1411ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_NextLineShowText_Space() { 1412ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_WordSpace = GetNumber(2); 1413ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_TextState.GetModify()->m_CharSpace = GetNumber(1); 1414ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Handle_NextLineShowText(); 1415ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1416ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::Handle_Invalid() {} 1417ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddPathPoint(FX_FLOAT x, FX_FLOAT y, int flag) { 1418ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathCurrentX = x; 1419ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathCurrentY = y; 1420ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (flag == FXPT_MOVETO) { 1421ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathStartX = x; 1422ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathStartY = y; 1423ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PathPointCount && 1424ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_Flag == FXPT_MOVETO) { 1425ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_PointX = x; 1426ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_PointY = y; 1427ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1428ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1429ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } else if (m_PathPointCount == 0) { 1430ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1431ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1432ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathPointCount++; 1433ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PathPointCount > m_PathAllocSize) { 1434ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int newsize = m_PathPointCount + 256; 1435ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_PATHPOINT* pNewPoints = FX_Alloc(FX_PATHPOINT, newsize); 1436ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (m_PathAllocSize) { 1437ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(pNewPoints, m_pPathPoints, 1438ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathAllocSize * sizeof(FX_PATHPOINT)); 1439ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_Free(m_pPathPoints); 1440ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1441ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints = pNewPoints; 1442ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathAllocSize = newsize; 1443ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1444ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_Flag = flag; 1445ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_PointX = x; 1446ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[m_PathPointCount - 1].m_PointY = y; 1447ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann} 1448ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannvoid CPDF_StreamContentParser::AddPathObject(int FillType, FX_BOOL bStroke) { 1449ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int PathPointCount = m_PathPointCount, PathClipType = m_PathClipType; 1450ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathPointCount = 0; 1451ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_PathClipType = 0; 1452ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PathPointCount <= 1) { 1453ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PathPointCount && PathClipType) { 1454ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Path path; 1455ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann path.New()->AppendRect(0, 0, 0, 0); 1456ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ClipPath.AppendPath(path, FXFILL_WINDING, TRUE); 1457ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1458ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann return; 1459ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1460ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PathPointCount && 1461ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pPathPoints[PathPointCount - 1].m_Flag == FXPT_MOVETO) { 1462ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann PathPointCount--; 1463ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1464ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_Path Path; 1465ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_PathData* pPathData = Path.New(); 1466ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathData->SetPointCount(PathPointCount); 1467ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FXSYS_memcpy(pPathData->GetPoints(), m_pPathPoints, 1468ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sizeof(FX_PATHPOINT) * PathPointCount); 1469ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_Matrix matrix = m_pCurStates->m_CTM; 1470ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann matrix.Concat(m_mtContentToUser); 1471ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (bStroke || FillType) { 1472ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDF_PathObject* pPathObj = new CPDF_PathObject; 1473ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathObj->m_bStroke = bStroke; 1474ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathObj->m_FillType = FillType; 1475ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathObj->m_Path = Path; 1476ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathObj->m_Matrix = matrix; 1477ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann SetGraphicStates(pPathObj, TRUE, FALSE, TRUE); 1478ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann pPathObj->CalcBoundingBox(); 1479ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pObjectList->m_ObjectList.AddTail(pPathObj); 1480ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1481ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (PathClipType) { 1482ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann if (!matrix.IsIdentity()) { 1483ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann Path.Transform(&matrix); 1484ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann matrix.SetIdentity(); 1485ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1486ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann m_pCurStates->m_ClipPath.AppendPath(Path, PathClipType, TRUE); 1487ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 1488e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov} 1489