From 5cc24654fb345189140acb4711ff981e1c720951 Mon Sep 17 00:00:00 2001 From: thestig Date: Tue, 26 Apr 2016 11:46:02 -0700 Subject: Clean up CPDF_Page. - Merge CPDF_Page::Load() into ctor. - Remove always nullptr param for CPDF_Page::ParseContent(). - Remove unneeded indirection in IPDF_RenderModule. - Delete CPDF_ParseOptions. - Fix up CPDF_Pattern. Review URL: https://codereview.chromium.org/1918113002 --- core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp | 126 +++++------------------- 1 file changed, 27 insertions(+), 99 deletions(-) (limited to 'core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp') diff --git a/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp b/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp index cf29aa2684..dff4bb6182 100644 --- a/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp +++ b/core/fpdfapi/fpdf_page/fpdf_page_parser_old.cpp @@ -124,8 +124,7 @@ uint32_t PDF_DecodeInlineStream(const uint8_t* src_buf, CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc, CPDF_Dictionary* pDict, - CPDF_Object* pCSObj, - FX_BOOL bDecode) { + CPDF_Object* pCSObj) { if (m_Pos == m_Size) return nullptr; @@ -199,48 +198,33 @@ CPDF_Stream* CPDF_StreamParser::ReadInlineStream(CPDF_Document* pDoc, dwStreamSize = PDF_DecodeInlineStream(m_pBuf + m_Pos, m_Size - m_Pos, width, height, Decoder, pParam, pData, dwDestSize); - if ((int)dwStreamSize < 0) { - FX_Free(pData); + FX_Free(pData); + if ((int)dwStreamSize < 0) return NULL; - } - if (bDecode) { - m_Pos += dwStreamSize; - dwStreamSize = dwDestSize; - if (CPDF_Array* pArray = pFilter->AsArray()) { - pArray->RemoveAt(0); - CPDF_Array* pParams = pDict->GetArrayBy("DecodeParms"); - if (pParams) - pParams->RemoveAt(0); - } else { - pDict->RemoveAt("Filter"); - pDict->RemoveAt("DecodeParms"); - } - } else { - FX_Free(pData); - uint32_t dwSavePos = m_Pos; - m_Pos += dwStreamSize; - while (1) { - uint32_t dwPrevPos = m_Pos; - CPDF_StreamParser::SyntaxType type = ParseNextElement(); - if (type == CPDF_StreamParser::EndOfData) { - break; - } - if (type != CPDF_StreamParser::Keyword) { - dwStreamSize += m_Pos - dwPrevPos; - continue; - } - if (GetWordSize() == 2 && GetWordBuf()[0] == 'E' && - GetWordBuf()[1] == 'I') { - m_Pos = dwPrevPos; - break; - } + + uint32_t dwSavePos = m_Pos; + m_Pos += dwStreamSize; + while (1) { + uint32_t dwPrevPos = m_Pos; + CPDF_StreamParser::SyntaxType type = ParseNextElement(); + if (type == CPDF_StreamParser::EndOfData) + break; + + if (type != CPDF_StreamParser::Keyword) { dwStreamSize += m_Pos - dwPrevPos; + continue; + } + if (GetWordSize() == 2 && GetWordBuf()[0] == 'E' && + GetWordBuf()[1] == 'I') { + m_Pos = dwPrevPos; + break; } - m_Pos = dwSavePos; - pData = FX_Alloc(uint8_t, dwStreamSize); - FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); - m_Pos += dwStreamSize; + dwStreamSize += m_Pos - dwPrevPos; } + m_Pos = dwSavePos; + pData = FX_Alloc(uint8_t, dwStreamSize); + FXSYS_memcpy(pData, m_pBuf + m_Pos, dwStreamSize); + m_Pos += dwStreamSize; } pDict->SetAtInteger("Length", (int)dwStreamSize); return new CPDF_Stream(pData, dwStreamSize, pDict); @@ -331,57 +315,6 @@ CPDF_StreamParser::SyntaxType CPDF_StreamParser::ParseNextElement() { return Keyword; } -void CPDF_StreamParser::SkipPathObject() { - uint32_t command_startpos = m_Pos; - if (!PositionIsInBounds()) - return; - - int ch = m_pBuf[m_Pos++]; - while (1) { - while (PDFCharIsWhitespace(ch)) { - if (!PositionIsInBounds()) - return; - ch = m_pBuf[m_Pos++]; - } - - if (!PDFCharIsNumeric(ch)) { - m_Pos = command_startpos; - return; - } - - while (1) { - while (!PDFCharIsWhitespace(ch)) { - if (!PositionIsInBounds()) - return; - ch = m_pBuf[m_Pos++]; - } - - while (PDFCharIsWhitespace(ch)) { - if (!PositionIsInBounds()) - return; - ch = m_pBuf[m_Pos++]; - } - - if (PDFCharIsNumeric(ch)) - continue; - - uint32_t op_startpos = m_Pos - 1; - while (!PDFCharIsWhitespace(ch) && !PDFCharIsDelimiter(ch)) { - if (!PositionIsInBounds()) - return; - ch = m_pBuf[m_Pos++]; - } - - if (IsPathOperator(&m_pBuf[op_startpos], m_Pos - 1 - op_startpos)) { - command_startpos = m_Pos; - break; - } - m_Pos = command_startpos; - return; - } - } -} - CPDF_Object* CPDF_StreamParser::ReadNextObject(FX_BOOL bAllowNestedArray, FX_BOOL bInArray) { FX_BOOL bIsNumber; @@ -697,7 +630,7 @@ CPDF_ContentParser::~CPDF_ContentParser() { FX_Free(m_pData); } -void CPDF_ContentParser::Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions) { +void CPDF_ContentParser::Start(CPDF_Page* pPage) { if (m_Status != Ready || !pPage || !pPage->m_pDocument || !pPage->m_pFormDict) { m_Status = Done; @@ -705,9 +638,6 @@ void CPDF_ContentParser::Start(CPDF_Page* pPage, CPDF_ParseOptions* pOptions) { } m_pObjectHolder = pPage; m_bForm = FALSE; - if (pOptions) { - m_Options = *pOptions; - } m_Status = ToBeContinued; m_InternalStage = STAGE_GETCONTENT; m_CurrentOffset = 0; @@ -736,7 +666,6 @@ void CPDF_ContentParser::Start(CPDF_Form* pForm, CPDF_AllStates* pGraphicStates, CFX_Matrix* pParentMatrix, CPDF_Type3Char* pType3Char, - CPDF_ParseOptions* pOptions, int level) { m_pType3Char = pType3Char; m_pObjectHolder = pForm; @@ -765,8 +694,7 @@ void CPDF_ContentParser::Start(CPDF_Form* pForm, CPDF_Dictionary* pResources = pForm->m_pFormDict->GetDictBy("Resources"); m_pParser.reset(new CPDF_StreamContentParser( pForm->m_pDocument, pForm->m_pPageResources, pForm->m_pResources, - pParentMatrix, pForm, pResources, &form_bbox, pOptions, pGraphicStates, - level)); + pParentMatrix, pForm, pResources, &form_bbox, pGraphicStates, level)); m_pParser->GetCurStates()->m_CTM = form_matrix; m_pParser->GetCurStates()->m_ParentMatrix = form_matrix; if (ClipPath.NotNull()) { @@ -836,7 +764,7 @@ void CPDF_ContentParser::Continue(IFX_Pause* pPause) { m_pParser.reset(new CPDF_StreamContentParser( m_pObjectHolder->m_pDocument, m_pObjectHolder->m_pPageResources, nullptr, nullptr, m_pObjectHolder, m_pObjectHolder->m_pResources, - &m_pObjectHolder->m_BBox, &m_Options, nullptr, 0)); + &m_pObjectHolder->m_BBox, nullptr, 0)); m_pParser->GetCurStates()->m_ColorState.GetModify()->Default(); } if (m_CurrentOffset >= m_Size) { -- cgit v1.2.3