| Index: core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
|
| diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
|
| index c0f45c5379da63d5fa76af816066b01afef58489..0d7bdd83795cfb4670d0c28de064904451fa8f6c 100644
|
| --- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
|
| +++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_document.cpp
|
| @@ -7,363 +7,355 @@
|
| #include "../../../include/fpdfapi/fpdf_parser.h"
|
| #include "../../../include/fpdfapi/fpdf_module.h"
|
|
|
| -CPDF_Document::CPDF_Document(CPDF_Parser* pParser) : CPDF_IndirectObjects(pParser)
|
| -{
|
| - ASSERT(pParser != NULL);
|
| - m_pRootDict = NULL;
|
| - m_pInfoDict = NULL;
|
| - m_bLinearized = FALSE;
|
| - m_dwFirstPageNo = 0;
|
| - m_dwFirstPageObjNum = 0;
|
| - m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
|
| - m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
|
| +CPDF_Document::CPDF_Document(CPDF_Parser* pParser)
|
| + : CPDF_IndirectObjects(pParser) {
|
| + ASSERT(pParser != NULL);
|
| + m_pRootDict = NULL;
|
| + m_pInfoDict = NULL;
|
| + m_bLinearized = FALSE;
|
| + m_dwFirstPageNo = 0;
|
| + m_dwFirstPageObjNum = 0;
|
| + m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
|
| + m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
|
| }
|
| -CPDF_DocPageData* CPDF_Document::GetValidatePageData()
|
| -{
|
| - if (m_pDocPage) {
|
| - return m_pDocPage;
|
| - }
|
| - m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
|
| +CPDF_DocPageData* CPDF_Document::GetValidatePageData() {
|
| + if (m_pDocPage) {
|
| return m_pDocPage;
|
| + }
|
| + m_pDocPage = CPDF_ModuleMgr::Get()->GetPageModule()->CreateDocData(this);
|
| + return m_pDocPage;
|
| }
|
| -CPDF_DocRenderData* CPDF_Document::GetValidateRenderData()
|
| -{
|
| - if (m_pDocRender) {
|
| - return m_pDocRender;
|
| - }
|
| - m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
|
| +CPDF_DocRenderData* CPDF_Document::GetValidateRenderData() {
|
| + if (m_pDocRender) {
|
| return m_pDocRender;
|
| + }
|
| + m_pDocRender = CPDF_ModuleMgr::Get()->GetRenderModule()->CreateDocData(this);
|
| + return m_pDocRender;
|
| }
|
| -void CPDF_Document::LoadDoc()
|
| -{
|
| - m_LastObjNum = m_pParser->GetLastObjNum();
|
| - CPDF_Object* pRootObj = GetIndirectObject(m_pParser->GetRootObjNum());
|
| - if (pRootObj == NULL) {
|
| - return;
|
| - }
|
| - m_pRootDict = pRootObj->GetDict();
|
| - if (m_pRootDict == NULL) {
|
| - return;
|
| - }
|
| - CPDF_Object* pInfoObj = GetIndirectObject(m_pParser->GetInfoObjNum());
|
| - if (pInfoObj) {
|
| - m_pInfoDict = pInfoObj->GetDict();
|
| - }
|
| - CPDF_Array* pIDArray = m_pParser->GetIDArray();
|
| - if (pIDArray) {
|
| - m_ID1 = pIDArray->GetString(0);
|
| - m_ID2 = pIDArray->GetString(1);
|
| - }
|
| - m_PageList.SetSize(_GetPageCount());
|
| +void CPDF_Document::LoadDoc() {
|
| + m_LastObjNum = m_pParser->GetLastObjNum();
|
| + CPDF_Object* pRootObj = GetIndirectObject(m_pParser->GetRootObjNum());
|
| + if (pRootObj == NULL) {
|
| + return;
|
| + }
|
| + m_pRootDict = pRootObj->GetDict();
|
| + if (m_pRootDict == NULL) {
|
| + return;
|
| + }
|
| + CPDF_Object* pInfoObj = GetIndirectObject(m_pParser->GetInfoObjNum());
|
| + if (pInfoObj) {
|
| + m_pInfoDict = pInfoObj->GetDict();
|
| + }
|
| + CPDF_Array* pIDArray = m_pParser->GetIDArray();
|
| + if (pIDArray) {
|
| + m_ID1 = pIDArray->GetString(0);
|
| + m_ID2 = pIDArray->GetString(1);
|
| + }
|
| + m_PageList.SetSize(_GetPageCount());
|
| }
|
| -void CPDF_Document::LoadAsynDoc(CPDF_Dictionary *pLinearized)
|
| -{
|
| - m_bLinearized = TRUE;
|
| - m_LastObjNum = m_pParser->GetLastObjNum();
|
| - CPDF_Object* indirectObj = GetIndirectObject(m_pParser->GetRootObjNum());
|
| - m_pRootDict = indirectObj ? indirectObj->GetDict() : NULL;
|
| - if (m_pRootDict == NULL) {
|
| - return;
|
| - }
|
| - indirectObj = GetIndirectObject(m_pParser->GetInfoObjNum());
|
| - m_pInfoDict = indirectObj ? indirectObj->GetDict() : NULL;
|
| - CPDF_Array* pIDArray = m_pParser->GetIDArray();
|
| - if (pIDArray) {
|
| - m_ID1 = pIDArray->GetString(0);
|
| - m_ID2 = pIDArray->GetString(1);
|
| - }
|
| - FX_DWORD dwPageCount = 0;
|
| - CPDF_Object *pCount = pLinearized->GetElement(FX_BSTRC("N"));
|
| - if (pCount && pCount->GetType() == PDFOBJ_NUMBER) {
|
| - dwPageCount = pCount->GetInteger();
|
| - }
|
| - m_PageList.SetSize(dwPageCount);
|
| - CPDF_Object *pNo = pLinearized->GetElement(FX_BSTRC("P"));
|
| - if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
|
| - m_dwFirstPageNo = pNo->GetInteger();
|
| - }
|
| - CPDF_Object *pObjNum = pLinearized->GetElement(FX_BSTRC("O"));
|
| - if (pObjNum && pObjNum->GetType() == PDFOBJ_NUMBER) {
|
| - m_dwFirstPageObjNum = pObjNum->GetInteger();
|
| - }
|
| +void CPDF_Document::LoadAsynDoc(CPDF_Dictionary* pLinearized) {
|
| + m_bLinearized = TRUE;
|
| + m_LastObjNum = m_pParser->GetLastObjNum();
|
| + CPDF_Object* indirectObj = GetIndirectObject(m_pParser->GetRootObjNum());
|
| + m_pRootDict = indirectObj ? indirectObj->GetDict() : NULL;
|
| + if (m_pRootDict == NULL) {
|
| + return;
|
| + }
|
| + indirectObj = GetIndirectObject(m_pParser->GetInfoObjNum());
|
| + m_pInfoDict = indirectObj ? indirectObj->GetDict() : NULL;
|
| + CPDF_Array* pIDArray = m_pParser->GetIDArray();
|
| + if (pIDArray) {
|
| + m_ID1 = pIDArray->GetString(0);
|
| + m_ID2 = pIDArray->GetString(1);
|
| + }
|
| + FX_DWORD dwPageCount = 0;
|
| + CPDF_Object* pCount = pLinearized->GetElement(FX_BSTRC("N"));
|
| + if (pCount && pCount->GetType() == PDFOBJ_NUMBER) {
|
| + dwPageCount = pCount->GetInteger();
|
| + }
|
| + m_PageList.SetSize(dwPageCount);
|
| + CPDF_Object* pNo = pLinearized->GetElement(FX_BSTRC("P"));
|
| + if (pNo && pNo->GetType() == PDFOBJ_NUMBER) {
|
| + m_dwFirstPageNo = pNo->GetInteger();
|
| + }
|
| + CPDF_Object* pObjNum = pLinearized->GetElement(FX_BSTRC("O"));
|
| + if (pObjNum && pObjNum->GetType() == PDFOBJ_NUMBER) {
|
| + m_dwFirstPageObjNum = pObjNum->GetInteger();
|
| + }
|
| }
|
| -void CPDF_Document::LoadPages()
|
| -{
|
| - m_PageList.SetSize(_GetPageCount());
|
| +void CPDF_Document::LoadPages() {
|
| + m_PageList.SetSize(_GetPageCount());
|
| }
|
| extern void FPDF_TTFaceMapper_ReleaseDoc(CPDF_Document*);
|
| -CPDF_Document::~CPDF_Document()
|
| -{
|
| - if (m_pDocPage) {
|
| - CPDF_ModuleMgr::Get()->GetPageModule()->ReleaseDoc(this);
|
| - CPDF_ModuleMgr::Get()->GetPageModule()->ClearStockFont(this);
|
| - }
|
| - if (m_pDocRender) {
|
| - CPDF_ModuleMgr::Get()->GetRenderModule()->DestroyDocData(m_pDocRender);
|
| - }
|
| +CPDF_Document::~CPDF_Document() {
|
| + if (m_pDocPage) {
|
| + CPDF_ModuleMgr::Get()->GetPageModule()->ReleaseDoc(this);
|
| + CPDF_ModuleMgr::Get()->GetPageModule()->ClearStockFont(this);
|
| + }
|
| + if (m_pDocRender) {
|
| + CPDF_ModuleMgr::Get()->GetRenderModule()->DestroyDocData(m_pDocRender);
|
| + }
|
| }
|
| -#define FX_MAX_PAGE_LEVEL 1024
|
| -CPDF_Dictionary* CPDF_Document::_FindPDFPage(CPDF_Dictionary* pPages, int iPage, int nPagesToGo, int level)
|
| -{
|
| - CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
|
| - if (pKidList == NULL) {
|
| - if (nPagesToGo == 0) {
|
| - return pPages;
|
| - }
|
| - return NULL;
|
| - }
|
| - if (level >= FX_MAX_PAGE_LEVEL) {
|
| - return NULL;
|
| - }
|
| - int nKids = pKidList->GetCount();
|
| - for (int i = 0; i < nKids; i ++) {
|
| - CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| - if (pKid == NULL) {
|
| - nPagesToGo --;
|
| - continue;
|
| - }
|
| - if (pKid == pPages) {
|
| - continue;
|
| - }
|
| - if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
|
| - if (nPagesToGo == 0) {
|
| - return pKid;
|
| - }
|
| - m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum());
|
| - nPagesToGo --;
|
| - } else {
|
| - int nPages = pKid->GetInteger(FX_BSTRC("Count"));
|
| - if (nPagesToGo < nPages) {
|
| - return _FindPDFPage(pKid, iPage, nPagesToGo, level + 1);
|
| - }
|
| - nPagesToGo -= nPages;
|
| - }
|
| +#define FX_MAX_PAGE_LEVEL 1024
|
| +CPDF_Dictionary* CPDF_Document::_FindPDFPage(CPDF_Dictionary* pPages,
|
| + int iPage,
|
| + int nPagesToGo,
|
| + int level) {
|
| + CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
|
| + if (pKidList == NULL) {
|
| + if (nPagesToGo == 0) {
|
| + return pPages;
|
| }
|
| return NULL;
|
| + }
|
| + if (level >= FX_MAX_PAGE_LEVEL) {
|
| + return NULL;
|
| + }
|
| + int nKids = pKidList->GetCount();
|
| + for (int i = 0; i < nKids; i++) {
|
| + CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| + if (pKid == NULL) {
|
| + nPagesToGo--;
|
| + continue;
|
| + }
|
| + if (pKid == pPages) {
|
| + continue;
|
| + }
|
| + if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
|
| + if (nPagesToGo == 0) {
|
| + return pKid;
|
| + }
|
| + m_PageList.SetAt(iPage - nPagesToGo, pKid->GetObjNum());
|
| + nPagesToGo--;
|
| + } else {
|
| + int nPages = pKid->GetInteger(FX_BSTRC("Count"));
|
| + if (nPagesToGo < nPages) {
|
| + return _FindPDFPage(pKid, iPage, nPagesToGo, level + 1);
|
| + }
|
| + nPagesToGo -= nPages;
|
| + }
|
| + }
|
| + return NULL;
|
| +}
|
| +CPDF_Dictionary* CPDF_Document::GetPage(int iPage) {
|
| + if (iPage < 0 || iPage >= m_PageList.GetSize()) {
|
| + return NULL;
|
| + }
|
| + if (m_bLinearized && (iPage == (int)m_dwFirstPageNo)) {
|
| + CPDF_Object* pObj = GetIndirectObject(m_dwFirstPageObjNum);
|
| + if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
|
| + return (CPDF_Dictionary*)pObj;
|
| + }
|
| + }
|
| + int objnum = m_PageList.GetAt(iPage);
|
| + if (objnum) {
|
| + CPDF_Object* pObj = GetIndirectObject(objnum);
|
| + ASSERT(pObj->GetType() == PDFOBJ_DICTIONARY);
|
| + return (CPDF_Dictionary*)pObj;
|
| + }
|
| + CPDF_Dictionary* pRoot = GetRoot();
|
| + if (pRoot == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| + if (pPages == NULL) {
|
| + return NULL;
|
| + }
|
| + CPDF_Dictionary* pPage = _FindPDFPage(pPages, iPage, iPage, 0);
|
| + if (pPage == NULL) {
|
| + return NULL;
|
| + }
|
| + m_PageList.SetAt(iPage, pPage->GetObjNum());
|
| + return pPage;
|
| }
|
| -CPDF_Dictionary* CPDF_Document::GetPage(int iPage)
|
| -{
|
| - if (iPage < 0 || iPage >= m_PageList.GetSize()) {
|
| - return NULL;
|
| +int CPDF_Document::_FindPageIndex(CPDF_Dictionary* pNode,
|
| + FX_DWORD& skip_count,
|
| + FX_DWORD objnum,
|
| + int& index,
|
| + int level) {
|
| + if (pNode->KeyExist(FX_BSTRC("Kids"))) {
|
| + CPDF_Array* pKidList = pNode->GetArray(FX_BSTRC("Kids"));
|
| + if (pKidList == NULL) {
|
| + return -1;
|
| }
|
| - if (m_bLinearized && (iPage == (int)m_dwFirstPageNo)) {
|
| - CPDF_Object* pObj = GetIndirectObject(m_dwFirstPageObjNum);
|
| - if (pObj && pObj->GetType() == PDFOBJ_DICTIONARY) {
|
| - return (CPDF_Dictionary*)pObj;
|
| + if (level >= FX_MAX_PAGE_LEVEL) {
|
| + return -1;
|
| + }
|
| + FX_DWORD count = pNode->GetInteger(FX_BSTRC("Count"));
|
| + if (count <= skip_count) {
|
| + skip_count -= count;
|
| + index += count;
|
| + return -1;
|
| + }
|
| + if (count && count == pKidList->GetCount()) {
|
| + for (FX_DWORD i = 0; i < count; i++) {
|
| + CPDF_Object* pKid = pKidList->GetElement(i);
|
| + if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
|
| + if (((CPDF_Reference*)pKid)->GetRefObjNum() == objnum) {
|
| + m_PageList.SetAt(index + i, objnum);
|
| + return index + i;
|
| + }
|
| }
|
| - }
|
| - int objnum = m_PageList.GetAt(iPage);
|
| - if (objnum) {
|
| - CPDF_Object* pObj = GetIndirectObject(objnum);
|
| - ASSERT(pObj->GetType() == PDFOBJ_DICTIONARY);
|
| - return (CPDF_Dictionary*)pObj;
|
| - }
|
| - CPDF_Dictionary* pRoot = GetRoot();
|
| - if (pRoot == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| - if (pPages == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pPage = _FindPDFPage(pPages, iPage, iPage, 0);
|
| - if (pPage == NULL) {
|
| - return NULL;
|
| - }
|
| - m_PageList.SetAt(iPage, pPage->GetObjNum());
|
| - return pPage;
|
| + }
|
| + }
|
| + for (FX_DWORD i = 0; i < pKidList->GetCount(); i++) {
|
| + CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| + if (pKid == NULL) {
|
| + continue;
|
| + }
|
| + if (pKid == pNode) {
|
| + continue;
|
| + }
|
| + int found_index =
|
| + _FindPageIndex(pKid, skip_count, objnum, index, level + 1);
|
| + if (found_index >= 0) {
|
| + return found_index;
|
| + }
|
| + }
|
| + } else {
|
| + if (objnum == pNode->GetObjNum()) {
|
| + return index;
|
| + }
|
| + if (skip_count) {
|
| + skip_count--;
|
| + }
|
| + index++;
|
| + }
|
| + return -1;
|
| }
|
| -int CPDF_Document::_FindPageIndex(CPDF_Dictionary* pNode, FX_DWORD& skip_count, FX_DWORD objnum, int& index, int level)
|
| -{
|
| - if (pNode->KeyExist(FX_BSTRC("Kids"))) {
|
| - CPDF_Array* pKidList = pNode->GetArray(FX_BSTRC("Kids"));
|
| - if (pKidList == NULL) {
|
| - return -1;
|
| - }
|
| - if (level >= FX_MAX_PAGE_LEVEL) {
|
| - return -1;
|
| - }
|
| - FX_DWORD count = pNode->GetInteger(FX_BSTRC("Count"));
|
| - if (count <= skip_count) {
|
| - skip_count -= count;
|
| - index += count;
|
| - return -1;
|
| - }
|
| - if (count && count == pKidList->GetCount()) {
|
| - for (FX_DWORD i = 0; i < count; i ++) {
|
| - CPDF_Object* pKid = pKidList->GetElement(i);
|
| - if (pKid && pKid->GetType() == PDFOBJ_REFERENCE) {
|
| - if (((CPDF_Reference*) pKid)->GetRefObjNum() == objnum) {
|
| - m_PageList.SetAt(index + i, objnum);
|
| - return index + i;
|
| - }
|
| - }
|
| - }
|
| - }
|
| - for (FX_DWORD i = 0; i < pKidList->GetCount(); i ++) {
|
| - CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| - if (pKid == NULL) {
|
| - continue;
|
| - }
|
| - if (pKid == pNode) {
|
| - continue;
|
| - }
|
| - int found_index = _FindPageIndex(pKid, skip_count, objnum, index, level + 1);
|
| - if (found_index >= 0) {
|
| - return found_index;
|
| - }
|
| - }
|
| - } else {
|
| - if (objnum == pNode->GetObjNum()) {
|
| - return index;
|
| - }
|
| - if (skip_count) {
|
| - skip_count--;
|
| - }
|
| - index ++;
|
| - }
|
| +int CPDF_Document::GetPageIndex(FX_DWORD objnum) {
|
| + FX_DWORD nPages = m_PageList.GetSize();
|
| + FX_DWORD skip_count = 0;
|
| + FX_BOOL bSkipped = FALSE;
|
| + for (FX_DWORD i = 0; i < nPages; i++) {
|
| + FX_DWORD objnum1 = m_PageList.GetAt(i);
|
| + if (objnum1 == objnum) {
|
| + return i;
|
| + }
|
| + if (!bSkipped && objnum1 == 0) {
|
| + skip_count = i;
|
| + bSkipped = TRUE;
|
| + }
|
| + }
|
| + CPDF_Dictionary* pRoot = GetRoot();
|
| + if (pRoot == NULL) {
|
| return -1;
|
| + }
|
| + CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| + if (pPages == NULL) {
|
| + return -1;
|
| + }
|
| + int index = 0;
|
| + return _FindPageIndex(pPages, skip_count, objnum, index);
|
| }
|
| -int CPDF_Document::GetPageIndex(FX_DWORD objnum)
|
| -{
|
| - FX_DWORD nPages = m_PageList.GetSize();
|
| - FX_DWORD skip_count = 0;
|
| - FX_BOOL bSkipped = FALSE;
|
| - for (FX_DWORD i = 0; i < nPages; i ++) {
|
| - FX_DWORD objnum1 = m_PageList.GetAt(i);
|
| - if (objnum1 == objnum) {
|
| - return i;
|
| - }
|
| - if (!bSkipped && objnum1 == 0) {
|
| - skip_count = i;
|
| - bSkipped = TRUE;
|
| - }
|
| - }
|
| - CPDF_Dictionary* pRoot = GetRoot();
|
| - if (pRoot == NULL) {
|
| - return -1;
|
| - }
|
| - CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| - if (pPages == NULL) {
|
| - return -1;
|
| - }
|
| - int index = 0;
|
| - return _FindPageIndex(pPages, skip_count, objnum, index);
|
| -}
|
| -int CPDF_Document::GetPageCount() const
|
| -{
|
| - return m_PageList.GetSize();
|
| +int CPDF_Document::GetPageCount() const {
|
| + return m_PageList.GetSize();
|
| }
|
| -static int _CountPages(CPDF_Dictionary* pPages, int level)
|
| -{
|
| - if (level > 128) {
|
| - return 0;
|
| - }
|
| - int count = pPages->GetInteger(FX_BSTRC("Count"));
|
| - if (count > 0 && count < FPDF_PAGE_MAX_NUM) {
|
| - return count;
|
| - }
|
| - CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
|
| - if (pKidList == NULL) {
|
| - return 0;
|
| - }
|
| - count = 0;
|
| - for (FX_DWORD i = 0; i < pKidList->GetCount(); i ++) {
|
| - CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| - if (pKid == NULL) {
|
| - continue;
|
| - }
|
| - if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
|
| - count ++;
|
| - } else {
|
| - count += _CountPages(pKid, level + 1);
|
| - }
|
| - }
|
| - pPages->SetAtInteger(FX_BSTRC("Count"), count);
|
| +static int _CountPages(CPDF_Dictionary* pPages, int level) {
|
| + if (level > 128) {
|
| + return 0;
|
| + }
|
| + int count = pPages->GetInteger(FX_BSTRC("Count"));
|
| + if (count > 0 && count < FPDF_PAGE_MAX_NUM) {
|
| return count;
|
| -}
|
| -int CPDF_Document::_GetPageCount() const
|
| -{
|
| - CPDF_Dictionary* pRoot = GetRoot();
|
| - if (pRoot == NULL) {
|
| - return 0;
|
| - }
|
| - CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| - if (pPages == NULL) {
|
| - return 0;
|
| - }
|
| - if (!pPages->KeyExist(FX_BSTRC("Kids"))) {
|
| - return 1;
|
| + }
|
| + CPDF_Array* pKidList = pPages->GetArray(FX_BSTRC("Kids"));
|
| + if (pKidList == NULL) {
|
| + return 0;
|
| + }
|
| + count = 0;
|
| + for (FX_DWORD i = 0; i < pKidList->GetCount(); i++) {
|
| + CPDF_Dictionary* pKid = pKidList->GetDict(i);
|
| + if (pKid == NULL) {
|
| + continue;
|
| + }
|
| + if (!pKid->KeyExist(FX_BSTRC("Kids"))) {
|
| + count++;
|
| + } else {
|
| + count += _CountPages(pKid, level + 1);
|
| }
|
| - return _CountPages(pPages, 0);
|
| + }
|
| + pPages->SetAtInteger(FX_BSTRC("Count"), count);
|
| + return count;
|
| }
|
| -FX_BOOL CPDF_Document::IsContentUsedElsewhere(FX_DWORD objnum, CPDF_Dictionary* pThisPageDict)
|
| -{
|
| - for (int i = 0; i < m_PageList.GetSize(); i ++) {
|
| - CPDF_Dictionary* pPageDict = GetPage(i);
|
| - if (pPageDict == pThisPageDict) {
|
| - continue;
|
| - }
|
| - CPDF_Object* pContents = pPageDict ? pPageDict->GetElement(FX_BSTRC("Contents")) : NULL;
|
| - if (pContents == NULL) {
|
| - continue;
|
| +int CPDF_Document::_GetPageCount() const {
|
| + CPDF_Dictionary* pRoot = GetRoot();
|
| + if (pRoot == NULL) {
|
| + return 0;
|
| + }
|
| + CPDF_Dictionary* pPages = pRoot->GetDict(FX_BSTRC("Pages"));
|
| + if (pPages == NULL) {
|
| + return 0;
|
| + }
|
| + if (!pPages->KeyExist(FX_BSTRC("Kids"))) {
|
| + return 1;
|
| + }
|
| + return _CountPages(pPages, 0);
|
| +}
|
| +FX_BOOL CPDF_Document::IsContentUsedElsewhere(FX_DWORD objnum,
|
| + CPDF_Dictionary* pThisPageDict) {
|
| + for (int i = 0; i < m_PageList.GetSize(); i++) {
|
| + CPDF_Dictionary* pPageDict = GetPage(i);
|
| + if (pPageDict == pThisPageDict) {
|
| + continue;
|
| + }
|
| + CPDF_Object* pContents =
|
| + pPageDict ? pPageDict->GetElement(FX_BSTRC("Contents")) : NULL;
|
| + if (pContents == NULL) {
|
| + continue;
|
| + }
|
| + if (pContents->GetDirectType() == PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = (CPDF_Array*)pContents->GetDirect();
|
| + for (FX_DWORD j = 0; j < pArray->GetCount(); j++) {
|
| + CPDF_Object* pRef = pArray->GetElement(j);
|
| + if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
|
| + continue;
|
| }
|
| - if (pContents->GetDirectType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pArray = (CPDF_Array*)pContents->GetDirect();
|
| - for (FX_DWORD j = 0; j < pArray->GetCount(); j ++) {
|
| - CPDF_Object* pRef = pArray->GetElement(j);
|
| - if (pRef == NULL || pRef->GetType() != PDFOBJ_REFERENCE) {
|
| - continue;
|
| - }
|
| - if (((CPDF_Reference*) pRef)->GetRefObjNum() == objnum) {
|
| - return TRUE;
|
| - }
|
| - }
|
| - } else if (pContents->GetObjNum() == objnum) {
|
| - return TRUE;
|
| + if (((CPDF_Reference*)pRef)->GetRefObjNum() == objnum) {
|
| + return TRUE;
|
| }
|
| + }
|
| + } else if (pContents->GetObjNum() == objnum) {
|
| + return TRUE;
|
| }
|
| - return FALSE;
|
| + }
|
| + return FALSE;
|
| }
|
| -FX_DWORD CPDF_Document::GetUserPermissions(FX_BOOL bCheckRevision) const
|
| -{
|
| - if (m_pParser == NULL) {
|
| - return (FX_DWORD) - 1;
|
| - }
|
| - return m_pParser->GetPermissions(bCheckRevision);
|
| +FX_DWORD CPDF_Document::GetUserPermissions(FX_BOOL bCheckRevision) const {
|
| + if (m_pParser == NULL) {
|
| + return (FX_DWORD)-1;
|
| + }
|
| + return m_pParser->GetPermissions(bCheckRevision);
|
| }
|
| -FX_BOOL CPDF_Document::IsOwner() const
|
| -{
|
| - if (m_pParser == NULL) {
|
| - return TRUE;
|
| - }
|
| - return m_pParser->IsOwner();
|
| +FX_BOOL CPDF_Document::IsOwner() const {
|
| + if (m_pParser == NULL) {
|
| + return TRUE;
|
| + }
|
| + return m_pParser->IsOwner();
|
| }
|
| -FX_BOOL CPDF_Document::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const
|
| -{
|
| - {
|
| - CPDF_Object* pObj;
|
| - if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj)) {
|
| - bForm = pObj->GetType() == PDFOBJ_STREAM &&
|
| - ((CPDF_Stream*)pObj)->GetDict()->GetString(FX_BSTRC("Subtype")) == FX_BSTRC("Form");
|
| - return TRUE;
|
| - }
|
| - }
|
| - if (m_pParser == NULL) {
|
| - bForm = FALSE;
|
| - return TRUE;
|
| - }
|
| - return m_pParser->IsFormStream(objnum, bForm);
|
| +FX_BOOL CPDF_Document::IsFormStream(FX_DWORD objnum, FX_BOOL& bForm) const {
|
| + {
|
| + CPDF_Object* pObj;
|
| + if (m_IndirectObjs.Lookup((void*)(uintptr_t)objnum, (void*&)pObj)) {
|
| + bForm = pObj->GetType() == PDFOBJ_STREAM &&
|
| + ((CPDF_Stream*)pObj)->GetDict()->GetString(FX_BSTRC("Subtype")) ==
|
| + FX_BSTRC("Form");
|
| + return TRUE;
|
| + }
|
| + }
|
| + if (m_pParser == NULL) {
|
| + bForm = FALSE;
|
| + return TRUE;
|
| + }
|
| + return m_pParser->IsFormStream(objnum, bForm);
|
| }
|
| -void CPDF_Document::ClearPageData()
|
| -{
|
| - if (m_pDocPage) {
|
| - CPDF_ModuleMgr::Get()->GetPageModule()->ClearDoc(this);
|
| - }
|
| +void CPDF_Document::ClearPageData() {
|
| + if (m_pDocPage) {
|
| + CPDF_ModuleMgr::Get()->GetPageModule()->ClearDoc(this);
|
| + }
|
| }
|
| -void CPDF_Document::ClearRenderData()
|
| -{
|
| - if (m_pDocRender) {
|
| - CPDF_ModuleMgr::Get()->GetRenderModule()->ClearDocData(m_pDocRender);
|
| - }
|
| +void CPDF_Document::ClearRenderData() {
|
| + if (m_pDocRender) {
|
| + CPDF_ModuleMgr::Get()->GetRenderModule()->ClearDocData(m_pDocRender);
|
| + }
|
| }
|
|
|