| Index: core/src/fpdfdoc/doc_tagged.cpp
|
| diff --git a/core/src/fpdfdoc/doc_tagged.cpp b/core/src/fpdfdoc/doc_tagged.cpp
|
| index ac29d901186b4eb3468407479be81fe7addfd1ec..2b20e07bb8241d3a96be98652e9ddd2eb033bfdf 100644
|
| --- a/core/src/fpdfdoc/doc_tagged.cpp
|
| +++ b/core/src/fpdfdoc/doc_tagged.cpp
|
| @@ -46,48 +46,47 @@ CPDF_StructTreeImpl::~CPDF_StructTreeImpl() {
|
| }
|
| }
|
| void CPDF_StructTreeImpl::LoadDocTree() {
|
| - m_pPage = NULL;
|
| - if (m_pTreeRoot == NULL) {
|
| + m_pPage = nullptr;
|
| + if (!m_pTreeRoot)
|
| return;
|
| - }
|
| +
|
| CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
|
| - if (pKids == NULL) {
|
| + if (!pKids)
|
| return;
|
| - }
|
| if (CPDF_Dictionary* pDict = pKids->AsDictionary()) {
|
| CPDF_StructElementImpl* pStructElementImpl =
|
| - new CPDF_StructElementImpl(this, NULL, pDict);
|
| + new CPDF_StructElementImpl(this, nullptr, pDict);
|
| m_Kids.Add(pStructElementImpl);
|
| return;
|
| }
|
| - if (pKids->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = pKids->AsArray();
|
| + if (!pArray)
|
| return;
|
| - }
|
| - CPDF_Array* pArray = (CPDF_Array*)pKids;
|
| +
|
| for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
|
| CPDF_Dictionary* pKid = pArray->GetDict(i);
|
| CPDF_StructElementImpl* pStructElementImpl =
|
| - new CPDF_StructElementImpl(this, NULL, pKid);
|
| + new CPDF_StructElementImpl(this, nullptr, pKid);
|
| m_Kids.Add(pStructElementImpl);
|
| }
|
| }
|
| void CPDF_StructTreeImpl::LoadPageTree(const CPDF_Dictionary* pPageDict) {
|
| m_pPage = pPageDict;
|
| - if (m_pTreeRoot == NULL) {
|
| + if (!m_pTreeRoot)
|
| return;
|
| - }
|
| +
|
| CPDF_Object* pKids = m_pTreeRoot->GetElementValue(FX_BSTRC("K"));
|
| - if (pKids == NULL) {
|
| + if (!pKids)
|
| return;
|
| - }
|
| +
|
| FX_DWORD dwKids = 0;
|
| - if (pKids->IsDictionary()) {
|
| + if (pKids->IsDictionary())
|
| dwKids = 1;
|
| - } else if (pKids->GetType() == PDFOBJ_ARRAY) {
|
| - dwKids = ((CPDF_Array*)pKids)->GetCount();
|
| - } else {
|
| + else if (CPDF_Array* pArray = pKids->AsArray())
|
| + dwKids = pArray->GetCount();
|
| + else
|
| return;
|
| - }
|
| +
|
| FX_DWORD i;
|
| m_Kids.SetSize(dwKids);
|
| for (i = 0; i < dwKids; i++) {
|
| @@ -101,11 +100,10 @@ void CPDF_StructTreeImpl::LoadPageTree(const CPDF_Dictionary* pPageDict) {
|
| CPDF_NumberTree parent_tree(pParentTree);
|
| int parents_id = pPageDict->GetInteger(FX_BSTRC("StructParents"), -1);
|
| if (parents_id >= 0) {
|
| - CPDF_Object* pParents = parent_tree.LookupValue(parents_id);
|
| - if (pParents == NULL || pParents->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pParentArray = ToArray(parent_tree.LookupValue(parents_id));
|
| + if (!pParentArray)
|
| return;
|
| - }
|
| - CPDF_Array* pParentArray = (CPDF_Array*)pParents;
|
| +
|
| for (i = 0; i < pParentArray->GetCount(); i++) {
|
| CPDF_Dictionary* pParent = pParentArray->GetDict(i);
|
| if (pParent == NULL) {
|
| @@ -171,27 +169,23 @@ FX_BOOL CPDF_StructTreeImpl::AddTopLevelNode(CPDF_Dictionary* pDict,
|
| return FALSE;
|
| }
|
| }
|
| - if (pObj->GetType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pTopKids = (CPDF_Array*)pObj;
|
| + if (CPDF_Array* pTopKids = pObj->AsArray()) {
|
| FX_DWORD i;
|
| FX_BOOL bSave = FALSE;
|
| for (i = 0; i < pTopKids->GetCount(); i++) {
|
| CPDF_Object* pKidRef = pTopKids->GetElement(i);
|
| - if (pKidRef == NULL || pKidRef->GetType() != PDFOBJ_REFERENCE) {
|
| + if (!pKidRef || pKidRef->GetType() != PDFOBJ_REFERENCE)
|
| continue;
|
| - }
|
| - if (((CPDF_Reference*)pKidRef)->GetRefObjNum() != pDict->GetObjNum()) {
|
| + if (((CPDF_Reference*)pKidRef)->GetRefObjNum() != pDict->GetObjNum())
|
| continue;
|
| - }
|
| - if (m_Kids[i]) {
|
| +
|
| + if (m_Kids[i])
|
| m_Kids[i]->Release();
|
| - }
|
| m_Kids[i] = pElement->Retain();
|
| bSave = TRUE;
|
| }
|
| - if (!bSave) {
|
| + if (!bSave)
|
| return FALSE;
|
| - }
|
| }
|
| return TRUE;
|
| }
|
| @@ -231,15 +225,14 @@ void CPDF_StructElementImpl::Release() {
|
| void CPDF_StructElementImpl::LoadKids(CPDF_Dictionary* pDict) {
|
| CPDF_Object* pObj = pDict->GetElement(FX_BSTRC("Pg"));
|
| FX_DWORD PageObjNum = 0;
|
| - if (pObj && pObj->GetType() == PDFOBJ_REFERENCE) {
|
| + if (pObj && pObj->GetType() == PDFOBJ_REFERENCE)
|
| PageObjNum = ((CPDF_Reference*)pObj)->GetRefObjNum();
|
| - }
|
| +
|
| CPDF_Object* pKids = pDict->GetElementValue(FX_BSTRC("K"));
|
| - if (pKids == NULL) {
|
| + if (!pKids)
|
| return;
|
| - }
|
| - if (pKids->GetType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pArray = (CPDF_Array*)pKids;
|
| +
|
| + if (CPDF_Array* pArray = pKids->AsArray()) {
|
| m_Kids.SetSize(pArray->GetCount());
|
| for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
|
| CPDF_Object* pKid = pArray->GetElementValue(i);
|
| @@ -316,25 +309,22 @@ void CPDF_StructElementImpl::LoadKid(FX_DWORD PageObjNum,
|
| static CPDF_Dictionary* FindAttrDict(CPDF_Object* pAttrs,
|
| const CFX_ByteStringC& owner,
|
| FX_FLOAT nLevel = 0.0F) {
|
| - if (nLevel > nMaxRecursion) {
|
| - return NULL;
|
| - }
|
| - if (pAttrs == NULL) {
|
| - return NULL;
|
| - }
|
| - CPDF_Dictionary* pDict = NULL;
|
| + if (nLevel > nMaxRecursion)
|
| + return nullptr;
|
| + if (!pAttrs)
|
| + return nullptr;
|
| +
|
| + CPDF_Dictionary* pDict = nullptr;
|
| if (pAttrs->IsDictionary()) {
|
| pDict = pAttrs->AsDictionary();
|
| } else if (pAttrs->GetType() == PDFOBJ_STREAM) {
|
| pDict = ((CPDF_Stream*)pAttrs)->GetDict();
|
| - } else if (pAttrs->GetType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pArray = (CPDF_Array*)pAttrs;
|
| + } else if (CPDF_Array* pArray = pAttrs->AsArray()) {
|
| for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
|
| CPDF_Object* pElement = pArray->GetElementValue(i);
|
| pDict = FindAttrDict(pElement, owner, nLevel + 1);
|
| - if (pDict) {
|
| + if (pDict)
|
| return pDict;
|
| - }
|
| }
|
| }
|
| if (pDict && pDict->GetString(FX_BSTRC("O")) == owner) {
|
| @@ -370,44 +360,40 @@ CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner,
|
| }
|
| }
|
| CPDF_Object* pC = m_pDict->GetElementValue(FX_BSTRC("C"));
|
| - if (pC == NULL) {
|
| - return NULL;
|
| - }
|
| + if (!pC)
|
| + return nullptr;
|
| +
|
| CPDF_Dictionary* pClassMap =
|
| m_pTree->m_pTreeRoot->GetDict(FX_BSTRC("ClassMap"));
|
| - if (pClassMap == NULL) {
|
| - return NULL;
|
| - }
|
| - if (pC->GetType() == PDFOBJ_ARRAY) {
|
| - CPDF_Array* pArray = (CPDF_Array*)pC;
|
| + if (!pClassMap)
|
| + return nullptr;
|
| +
|
| + if (CPDF_Array* pArray = pC->AsArray()) {
|
| for (FX_DWORD i = 0; i < pArray->GetCount(); i++) {
|
| CFX_ByteString class_name = pArray->GetString(i);
|
| CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
|
| - if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
|
| + if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner)
|
| return pClassDict->GetElementValue(name);
|
| - }
|
| }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| CFX_ByteString class_name = pC->GetString();
|
| CPDF_Dictionary* pClassDict = pClassMap->GetDict(class_name);
|
| - if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner) {
|
| + if (pClassDict && pClassDict->GetString(FX_BSTRC("O")) == owner)
|
| return pClassDict->GetElementValue(name);
|
| - }
|
| - return NULL;
|
| + return nullptr;
|
| }
|
| CPDF_Object* CPDF_StructElementImpl::GetAttr(const CFX_ByteStringC& owner,
|
| const CFX_ByteStringC& name,
|
| FX_BOOL bInheritable,
|
| int subindex) {
|
| CPDF_Object* pAttr = GetAttr(owner, name, bInheritable);
|
| - if (pAttr == NULL || subindex == -1 || pAttr->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = ToArray(pAttr);
|
| + if (!pArray || subindex == -1)
|
| return pAttr;
|
| - }
|
| - CPDF_Array* pArray = (CPDF_Array*)pAttr;
|
| - if (subindex >= (int)pArray->GetCount()) {
|
| +
|
| + if (subindex >= static_cast<int>(pArray->GetCount()))
|
| return pAttr;
|
| - }
|
| return pArray->GetElementValue(subindex);
|
| }
|
| CFX_ByteString CPDF_StructElementImpl::GetName(
|
| @@ -427,11 +413,9 @@ FX_ARGB CPDF_StructElementImpl::GetColor(const CFX_ByteStringC& owner,
|
| FX_ARGB default_value,
|
| FX_BOOL bInheritable,
|
| int subindex) {
|
| - CPDF_Object* pAttr = GetAttr(owner, name, bInheritable, subindex);
|
| - if (pAttr == NULL || pAttr->GetType() != PDFOBJ_ARRAY) {
|
| + CPDF_Array* pArray = ToArray(GetAttr(owner, name, bInheritable, subindex));
|
| + if (!pArray)
|
| return default_value;
|
| - }
|
| - CPDF_Array* pArray = (CPDF_Array*)pAttr;
|
| return 0xff000000 | ((int)(pArray->GetNumber(0) * 255) << 16) |
|
| ((int)(pArray->GetNumber(1) * 255) << 8) |
|
| (int)(pArray->GetNumber(2) * 255);
|
|
|