Index: core/src/fpdfdoc/doc_basic.cpp |
diff --git a/core/src/fpdfdoc/doc_basic.cpp b/core/src/fpdfdoc/doc_basic.cpp |
index 3ba109b016999cce78a02247f8cc5faeec31b62b..39b5788c86c0543bf46a881e0d1777ce603ed0a3 100644 |
--- a/core/src/fpdfdoc/doc_basic.cpp |
+++ b/core/src/fpdfdoc/doc_basic.cpp |
@@ -6,566 +6,558 @@ |
#include "../../include/fpdfdoc/fpdf_doc.h" |
const int nMaxRecursion = 32; |
-int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) |
-{ |
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
- return 0; |
- } |
- CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0); |
- if (pPage == NULL) { |
- return 0; |
- } |
- if (pPage->GetType() == PDFOBJ_NUMBER) { |
- return pPage->GetInteger(); |
- } |
- if (pPage->GetType() != PDFOBJ_DICTIONARY) { |
- return 0; |
- } |
- return pDoc->GetPageIndex(pPage->GetObjNum()); |
+int CPDF_Dest::GetPageIndex(CPDF_Document* pDoc) { |
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
+ return 0; |
+ } |
+ CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0); |
+ if (pPage == NULL) { |
+ return 0; |
+ } |
+ if (pPage->GetType() == PDFOBJ_NUMBER) { |
+ return pPage->GetInteger(); |
+ } |
+ if (pPage->GetType() != PDFOBJ_DICTIONARY) { |
+ return 0; |
+ } |
+ return pDoc->GetPageIndex(pPage->GetObjNum()); |
} |
-FX_DWORD CPDF_Dest::GetPageObjNum() |
-{ |
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
- return 0; |
- } |
- CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0); |
- if (pPage == NULL) { |
- return 0; |
- } |
- if (pPage->GetType() == PDFOBJ_NUMBER) { |
- return pPage->GetInteger(); |
- } |
- if (pPage->GetType() == PDFOBJ_DICTIONARY) { |
- return pPage->GetObjNum(); |
- } |
+FX_DWORD CPDF_Dest::GetPageObjNum() { |
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
+ return 0; |
+ } |
+ CPDF_Object* pPage = ((CPDF_Array*)m_pObj)->GetElementValue(0); |
+ if (pPage == NULL) { |
return 0; |
+ } |
+ if (pPage->GetType() == PDFOBJ_NUMBER) { |
+ return pPage->GetInteger(); |
+ } |
+ if (pPage->GetType() == PDFOBJ_DICTIONARY) { |
+ return pPage->GetObjNum(); |
+ } |
+ return 0; |
} |
-const FX_CHAR* g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR", "FitB", "FitBH", "FitBV", ""}; |
-int CPDF_Dest::GetZoomMode() |
-{ |
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
- return 0; |
- } |
- CFX_ByteString mode; |
- CPDF_Object* pObj = ((CPDF_Array*)m_pObj)->GetElementValue(1); |
- mode = pObj ? pObj->GetString() : CFX_ByteString(); |
- int i = 0; |
- while (g_sZoomModes[i][0] != '\0') { |
- if (mode == g_sZoomModes[i]) { |
- return i + 1; |
- } |
- i ++; |
- } |
+const FX_CHAR* g_sZoomModes[] = {"XYZ", "Fit", "FitH", "FitV", "FitR", |
+ "FitB", "FitBH", "FitBV", ""}; |
+int CPDF_Dest::GetZoomMode() { |
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
return 0; |
+ } |
+ CFX_ByteString mode; |
+ CPDF_Object* pObj = ((CPDF_Array*)m_pObj)->GetElementValue(1); |
+ mode = pObj ? pObj->GetString() : CFX_ByteString(); |
+ int i = 0; |
+ while (g_sZoomModes[i][0] != '\0') { |
+ if (mode == g_sZoomModes[i]) { |
+ return i + 1; |
+ } |
+ i++; |
+ } |
+ return 0; |
} |
-FX_FLOAT CPDF_Dest::GetParam(int index) |
-{ |
- if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
- return 0; |
- } |
- return ((CPDF_Array*)m_pObj)->GetNumber(2 + index); |
+FX_FLOAT CPDF_Dest::GetParam(int index) { |
+ if (m_pObj == NULL || m_pObj->GetType() != PDFOBJ_ARRAY) { |
+ return 0; |
+ } |
+ return ((CPDF_Array*)m_pObj)->GetNumber(2 + index); |
} |
-CFX_ByteString CPDF_Dest::GetRemoteName() |
-{ |
- if (m_pObj == NULL) { |
- return CFX_ByteString(); |
- } |
- return m_pObj->GetString(); |
+CFX_ByteString CPDF_Dest::GetRemoteName() { |
+ if (m_pObj == NULL) { |
+ return CFX_ByteString(); |
+ } |
+ return m_pObj->GetString(); |
} |
-CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc, const CFX_ByteStringC& category) |
-{ |
- if (pDoc->GetRoot() && pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))) |
- m_pRoot = pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))->GetDict(category); |
- else |
- m_pRoot = NULL; |
+CPDF_NameTree::CPDF_NameTree(CPDF_Document* pDoc, |
+ const CFX_ByteStringC& category) { |
+ if (pDoc->GetRoot() && pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))) |
+ m_pRoot = pDoc->GetRoot()->GetDict(FX_BSTRC("Names"))->GetDict(category); |
+ else |
+ m_pRoot = NULL; |
} |
-static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, const CFX_ByteString& csName, |
- int& nIndex, CPDF_Array** ppFind, int nLevel = 0) |
-{ |
- if (nLevel > nMaxRecursion) { |
- return NULL; |
- } |
- CPDF_Array* pLimits = pNode->GetArray(FX_BSTRC("Limits")); |
- if (pLimits != NULL) { |
- CFX_ByteString csLeft = pLimits->GetString(0); |
- CFX_ByteString csRight = pLimits->GetString(1); |
- if (csLeft.Compare(csRight) > 0) { |
- CFX_ByteString csTmp = csRight; |
- csRight = csLeft; |
- csLeft = csTmp; |
- } |
- if (csName.Compare(csLeft) < 0 || csName.Compare(csRight) > 0) { |
- return NULL; |
- } |
- } |
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
- if (pNames) { |
- FX_DWORD dwCount = pNames->GetCount() / 2; |
- for (FX_DWORD i = 0; i < dwCount; i ++) { |
- CFX_ByteString csValue = pNames->GetString(i * 2); |
- int32_t iCompare = csValue.Compare(csName); |
- if (iCompare <= 0) { |
- if (ppFind != NULL) { |
- *ppFind = pNames; |
- } |
- if (iCompare < 0) { |
- continue; |
- } |
- } else { |
- break; |
- } |
- nIndex += i; |
- return pNames->GetElementValue(i * 2 + 1); |
- } |
- nIndex += dwCount; |
- return NULL; |
- } |
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
- if (pKids == NULL) { |
- return NULL; |
- } |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary* pKid = pKids->GetDict(i); |
- if (pKid == NULL) { |
- continue; |
- } |
- CPDF_Object* pFound = SearchNameNode(pKid, csName, nIndex, ppFind, nLevel + 1); |
- if (pFound) { |
- return pFound; |
- } |
- } |
+static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, |
+ const CFX_ByteString& csName, |
+ int& nIndex, |
+ CPDF_Array** ppFind, |
+ int nLevel = 0) { |
+ if (nLevel > nMaxRecursion) { |
return NULL; |
-} |
-static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, int nIndex, int& nCurIndex, |
- CFX_ByteString& csName, CPDF_Array** ppFind, int nLevel = 0) |
-{ |
- if (nLevel > nMaxRecursion) { |
- return NULL; |
- } |
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
- if (pNames) { |
- int nCount = pNames->GetCount() / 2; |
- if (nIndex >= nCurIndex + nCount) { |
- nCurIndex += nCount; |
- return NULL; |
- } |
+ } |
+ CPDF_Array* pLimits = pNode->GetArray(FX_BSTRC("Limits")); |
+ if (pLimits != NULL) { |
+ CFX_ByteString csLeft = pLimits->GetString(0); |
+ CFX_ByteString csRight = pLimits->GetString(1); |
+ if (csLeft.Compare(csRight) > 0) { |
+ CFX_ByteString csTmp = csRight; |
+ csRight = csLeft; |
+ csLeft = csTmp; |
+ } |
+ if (csName.Compare(csLeft) < 0 || csName.Compare(csRight) > 0) { |
+ return NULL; |
+ } |
+ } |
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
+ if (pNames) { |
+ FX_DWORD dwCount = pNames->GetCount() / 2; |
+ for (FX_DWORD i = 0; i < dwCount; i++) { |
+ CFX_ByteString csValue = pNames->GetString(i * 2); |
+ int32_t iCompare = csValue.Compare(csName); |
+ if (iCompare <= 0) { |
if (ppFind != NULL) { |
- *ppFind = pNames; |
+ *ppFind = pNames; |
} |
- csName = pNames->GetString((nIndex - nCurIndex) * 2); |
- return pNames->GetElementValue((nIndex - nCurIndex) * 2 + 1); |
- } |
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
- if (pKids == NULL) { |
- return NULL; |
- } |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary* pKid = pKids->GetDict(i); |
- if (pKid == NULL) { |
- continue; |
- } |
- CPDF_Object* pFound = SearchNameNode(pKid, nIndex, nCurIndex, csName, ppFind, nLevel + 1); |
- if (pFound) { |
- return pFound; |
+ if (iCompare < 0) { |
+ continue; |
} |
+ } else { |
+ break; |
+ } |
+ nIndex += i; |
+ return pNames->GetElementValue(i * 2 + 1); |
} |
+ nIndex += dwCount; |
+ return NULL; |
+ } |
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
+ if (pKids == NULL) { |
return NULL; |
+ } |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pKid = pKids->GetDict(i); |
+ if (pKid == NULL) { |
+ continue; |
+ } |
+ CPDF_Object* pFound = |
+ SearchNameNode(pKid, csName, nIndex, ppFind, nLevel + 1); |
+ if (pFound) { |
+ return pFound; |
+ } |
+ } |
+ return NULL; |
} |
-static int CountNames(CPDF_Dictionary* pNode, int nLevel = 0) |
-{ |
- if (nLevel > nMaxRecursion) { |
- return 0; |
- } |
- CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
- if (pNames) { |
- return pNames->GetCount() / 2; |
- } |
- CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
- if (pKids == NULL) { |
- return 0; |
- } |
- int nCount = 0; |
- for (FX_DWORD i = 0; i < pKids->GetCount(); i ++) { |
- CPDF_Dictionary* pKid = pKids->GetDict(i); |
- if (pKid == NULL) { |
- continue; |
- } |
- nCount += CountNames(pKid, nLevel + 1); |
- } |
- return nCount; |
+static CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode, |
+ int nIndex, |
+ int& nCurIndex, |
+ CFX_ByteString& csName, |
+ CPDF_Array** ppFind, |
+ int nLevel = 0) { |
+ if (nLevel > nMaxRecursion) { |
+ return NULL; |
+ } |
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
+ if (pNames) { |
+ int nCount = pNames->GetCount() / 2; |
+ if (nIndex >= nCurIndex + nCount) { |
+ nCurIndex += nCount; |
+ return NULL; |
+ } |
+ if (ppFind != NULL) { |
+ *ppFind = pNames; |
+ } |
+ csName = pNames->GetString((nIndex - nCurIndex) * 2); |
+ return pNames->GetElementValue((nIndex - nCurIndex) * 2 + 1); |
+ } |
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
+ if (pKids == NULL) { |
+ return NULL; |
+ } |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pKid = pKids->GetDict(i); |
+ if (pKid == NULL) { |
+ continue; |
+ } |
+ CPDF_Object* pFound = |
+ SearchNameNode(pKid, nIndex, nCurIndex, csName, ppFind, nLevel + 1); |
+ if (pFound) { |
+ return pFound; |
+ } |
+ } |
+ return NULL; |
} |
-int CPDF_NameTree::GetCount() const |
-{ |
- if (m_pRoot == NULL) { |
- return 0; |
- } |
- return ::CountNames(m_pRoot); |
+static int CountNames(CPDF_Dictionary* pNode, int nLevel = 0) { |
+ if (nLevel > nMaxRecursion) { |
+ return 0; |
+ } |
+ CPDF_Array* pNames = pNode->GetArray(FX_BSTRC("Names")); |
+ if (pNames) { |
+ return pNames->GetCount() / 2; |
+ } |
+ CPDF_Array* pKids = pNode->GetArray(FX_BSTRC("Kids")); |
+ if (pKids == NULL) { |
+ return 0; |
+ } |
+ int nCount = 0; |
+ for (FX_DWORD i = 0; i < pKids->GetCount(); i++) { |
+ CPDF_Dictionary* pKid = pKids->GetDict(i); |
+ if (pKid == NULL) { |
+ continue; |
+ } |
+ nCount += CountNames(pKid, nLevel + 1); |
+ } |
+ return nCount; |
} |
-int CPDF_NameTree::GetIndex(const CFX_ByteString& csName) const |
-{ |
- if (m_pRoot == NULL) { |
- return -1; |
- } |
- int nIndex = 0; |
- if (SearchNameNode(m_pRoot, csName, nIndex, NULL) == NULL) { |
- return -1; |
- } |
- return nIndex; |
+int CPDF_NameTree::GetCount() const { |
+ if (m_pRoot == NULL) { |
+ return 0; |
+ } |
+ return ::CountNames(m_pRoot); |
} |
-CPDF_Object* CPDF_NameTree::LookupValue(int nIndex, CFX_ByteString& csName) const |
-{ |
- if (m_pRoot == NULL) { |
- return NULL; |
- } |
- int nCurIndex = 0; |
- return SearchNameNode(m_pRoot, nIndex, nCurIndex, csName, NULL); |
+int CPDF_NameTree::GetIndex(const CFX_ByteString& csName) const { |
+ if (m_pRoot == NULL) { |
+ return -1; |
+ } |
+ int nIndex = 0; |
+ if (SearchNameNode(m_pRoot, csName, nIndex, NULL) == NULL) { |
+ return -1; |
+ } |
+ return nIndex; |
} |
-CPDF_Object* CPDF_NameTree::LookupValue(const CFX_ByteString& csName) const |
-{ |
- if (m_pRoot == NULL) { |
- return NULL; |
- } |
- int nIndex = 0; |
- return SearchNameNode(m_pRoot, csName, nIndex, NULL); |
+CPDF_Object* CPDF_NameTree::LookupValue(int nIndex, |
+ CFX_ByteString& csName) const { |
+ if (m_pRoot == NULL) { |
+ return NULL; |
+ } |
+ int nCurIndex = 0; |
+ return SearchNameNode(m_pRoot, nIndex, nCurIndex, csName, NULL); |
} |
-CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, const CFX_ByteStringC& sName) |
-{ |
- CPDF_Object* pValue = LookupValue(sName); |
- if (pValue == NULL) { |
- CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDict(FX_BSTRC("Dests")); |
- if (pDests == NULL) { |
- return NULL; |
- } |
- pValue = pDests->GetElementValue(sName); |
- } |
- if (pValue == NULL) { |
- return NULL; |
- } |
- if (pValue->GetType() == PDFOBJ_ARRAY) { |
- return (CPDF_Array*)pValue; |
- } |
- if (pValue->GetType() == PDFOBJ_DICTIONARY) { |
- return ((CPDF_Dictionary*)pValue)->GetArray(FX_BSTRC("D")); |
- } |
+CPDF_Object* CPDF_NameTree::LookupValue(const CFX_ByteString& csName) const { |
+ if (m_pRoot == NULL) { |
return NULL; |
+ } |
+ int nIndex = 0; |
+ return SearchNameNode(m_pRoot, csName, nIndex, NULL); |
} |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
-static CFX_WideString ChangeSlashToPlatform(const FX_WCHAR* str) |
-{ |
- CFX_WideString result; |
- while (*str) { |
- if (*str == '/') { |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- result += ':'; |
+CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc, |
+ const CFX_ByteStringC& sName) { |
+ CPDF_Object* pValue = LookupValue(sName); |
+ if (pValue == NULL) { |
+ CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDict(FX_BSTRC("Dests")); |
+ if (pDests == NULL) { |
+ return NULL; |
+ } |
+ pValue = pDests->GetElementValue(sName); |
+ } |
+ if (pValue == NULL) { |
+ return NULL; |
+ } |
+ if (pValue->GetType() == PDFOBJ_ARRAY) { |
+ return (CPDF_Array*)pValue; |
+ } |
+ if (pValue->GetType() == PDFOBJ_DICTIONARY) { |
+ return ((CPDF_Dictionary*)pValue)->GetArray(FX_BSTRC("D")); |
+ } |
+ return NULL; |
+} |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \ |
+ _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+static CFX_WideString ChangeSlashToPlatform(const FX_WCHAR* str) { |
+ CFX_WideString result; |
+ while (*str) { |
+ if (*str == '/') { |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
+ result += ':'; |
#else |
- result += '\\'; |
+ result += '\\'; |
#endif |
- } else { |
- result += *str; |
- } |
- str++; |
+ } else { |
+ result += *str; |
} |
- return result; |
+ str++; |
+ } |
+ return result; |
} |
-static CFX_WideString ChangeSlashToPDF(const FX_WCHAR* str) |
-{ |
- CFX_WideString result; |
- while (*str) { |
- if (*str == '\\' || *str == ':') { |
- result += '/'; |
- } else { |
- result += *str; |
- } |
- str++; |
+static CFX_WideString ChangeSlashToPDF(const FX_WCHAR* str) { |
+ CFX_WideString result; |
+ while (*str) { |
+ if (*str == '\\' || *str == ':') { |
+ result += '/'; |
+ } else { |
+ result += *str; |
} |
- return result; |
+ str++; |
+ } |
+ return result; |
} |
#endif |
-static CFX_WideString FILESPEC_DecodeFileName(const CFX_WideStringC& filepath) |
-{ |
- if (filepath.GetLength() <= 1) { |
- return CFX_WideString(); |
- } |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- if (filepath.Left(sizeof("/Mac") - 1) == CFX_WideStringC(L"/Mac")) { |
- return ChangeSlashToPlatform(filepath.GetPtr() + 1); |
- } |
+static CFX_WideString FILESPEC_DecodeFileName(const CFX_WideStringC& filepath) { |
+ if (filepath.GetLength() <= 1) { |
+ return CFX_WideString(); |
+ } |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
+ if (filepath.Left(sizeof("/Mac") - 1) == CFX_WideStringC(L"/Mac")) { |
+ return ChangeSlashToPlatform(filepath.GetPtr() + 1); |
+ } |
+ return ChangeSlashToPlatform(filepath.GetPtr()); |
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+ if (filepath.GetAt(0) != '/') { |
return ChangeSlashToPlatform(filepath.GetPtr()); |
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- if (filepath.GetAt(0) != '/') { |
- return ChangeSlashToPlatform(filepath.GetPtr()); |
- } |
- if (filepath.GetAt(1) == '/') { |
- return ChangeSlashToPlatform(filepath.GetPtr() + 1); |
- } |
- if (filepath.GetAt(2) == '/') { |
- CFX_WideString result; |
- result += filepath.GetAt(1); |
- result += ':'; |
- result += ChangeSlashToPlatform(filepath.GetPtr() + 2); |
- return result; |
- } |
+ } |
+ if (filepath.GetAt(1) == '/') { |
+ return ChangeSlashToPlatform(filepath.GetPtr() + 1); |
+ } |
+ if (filepath.GetAt(2) == '/') { |
CFX_WideString result; |
- result += '\\'; |
- result += ChangeSlashToPlatform(filepath.GetPtr()); |
+ result += filepath.GetAt(1); |
+ result += ':'; |
+ result += ChangeSlashToPlatform(filepath.GetPtr() + 2); |
return result; |
+ } |
+ CFX_WideString result; |
+ result += '\\'; |
+ result += ChangeSlashToPlatform(filepath.GetPtr()); |
+ return result; |
#else |
- return filepath; |
+ return filepath; |
#endif |
} |
-FX_BOOL CPDF_FileSpec::GetFileName(CFX_WideString &csFileName) const |
-{ |
- if (m_pObj == NULL) { |
+FX_BOOL CPDF_FileSpec::GetFileName(CFX_WideString& csFileName) const { |
+ if (m_pObj == NULL) { |
+ return FALSE; |
+ } |
+ if (m_pObj->GetType() == PDFOBJ_DICTIONARY) { |
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_pObj; |
+ csFileName = pDict->GetUnicodeText(FX_BSTRC("UF")); |
+ if (csFileName.IsEmpty()) { |
+ csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F"))); |
+ } |
+ if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) { |
+ return TRUE; |
+ } |
+ if (csFileName.IsEmpty()) { |
+ if (pDict->KeyExist(FX_BSTRC("DOS"))) { |
+ csFileName = |
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS"))); |
+ } else if (pDict->KeyExist(FX_BSTRC("Mac"))) { |
+ csFileName = |
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Mac"))); |
+ } else if (pDict->KeyExist(FX_BSTRC("Unix"))) { |
+ csFileName = |
+ CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Unix"))); |
+ } else { |
return FALSE; |
+ } |
} |
- if (m_pObj->GetType() == PDFOBJ_DICTIONARY) { |
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)m_pObj; |
- csFileName = pDict->GetUnicodeText(FX_BSTRC("UF")); |
- if (csFileName.IsEmpty()) { |
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("F"))); |
- } |
- if (pDict->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL")) { |
- return TRUE; |
- } |
- if (csFileName.IsEmpty()) { |
- if (pDict->KeyExist(FX_BSTRC("DOS"))) { |
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("DOS"))); |
- } else if (pDict->KeyExist(FX_BSTRC("Mac"))) { |
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Mac"))); |
- } else if (pDict->KeyExist(FX_BSTRC("Unix"))) { |
- csFileName = CFX_WideString::FromLocal(pDict->GetString(FX_BSTRC("Unix"))); |
- } else { |
- return FALSE; |
- } |
- } |
- } else { |
- csFileName = CFX_WideString::FromLocal(m_pObj->GetString()); |
- } |
- csFileName = FILESPEC_DecodeFileName(csFileName); |
- return TRUE; |
+ } else { |
+ csFileName = CFX_WideString::FromLocal(m_pObj->GetString()); |
+ } |
+ csFileName = FILESPEC_DecodeFileName(csFileName); |
+ return TRUE; |
} |
-CPDF_FileSpec::CPDF_FileSpec() |
-{ |
- m_pObj = CPDF_Dictionary::Create(); |
- if (m_pObj != NULL) { |
- ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Filespec")); |
- } |
+CPDF_FileSpec::CPDF_FileSpec() { |
+ m_pObj = CPDF_Dictionary::Create(); |
+ if (m_pObj != NULL) { |
+ ((CPDF_Dictionary*)m_pObj) |
+ ->SetAtName(FX_BSTRC("Type"), FX_BSTRC("Filespec")); |
+ } |
} |
-FX_BOOL CPDF_FileSpec::IsURL() const |
-{ |
- if (m_pObj == NULL) { |
- return FALSE; |
- } |
- if (m_pObj->GetType() != PDFOBJ_DICTIONARY) { |
- return FALSE; |
- } |
- return ((CPDF_Dictionary*)m_pObj)->GetString(FX_BSTRC("FS")) == FX_BSTRC("URL"); |
+FX_BOOL CPDF_FileSpec::IsURL() const { |
+ if (m_pObj == NULL) { |
+ return FALSE; |
+ } |
+ if (m_pObj->GetType() != PDFOBJ_DICTIONARY) { |
+ return FALSE; |
+ } |
+ return ((CPDF_Dictionary*)m_pObj)->GetString(FX_BSTRC("FS")) == |
+ FX_BSTRC("URL"); |
} |
-CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath) |
-{ |
- if (filepath.GetLength() <= 1) { |
- return CFX_WideString(); |
- } |
-#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
- if (filepath.GetAt(1) == ':') { |
- CFX_WideString result; |
- result = '/'; |
- result += filepath.GetAt(0); |
- if (filepath.GetAt(2) != '\\') { |
- result += '/'; |
- } |
- result += ChangeSlashToPDF(filepath.GetPtr() + 2); |
- return result; |
- } |
- if (filepath.GetAt(0) == '\\' && filepath.GetAt(1) == '\\') { |
- return ChangeSlashToPDF(filepath.GetPtr() + 1); |
- } |
- if (filepath.GetAt(0) == '\\') { |
- CFX_WideString result; |
- result = '/'; |
- result += ChangeSlashToPDF(filepath.GetPtr()); |
- return result; |
- } |
- return ChangeSlashToPDF(filepath.GetPtr()); |
-#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
- if (filepath.Left(sizeof("Mac") - 1) == FX_WSTRC(L"Mac")) { |
- CFX_WideString result; |
- result = '/'; |
- result += ChangeSlashToPDF(filepath.GetPtr()); |
- return result; |
+CFX_WideString FILESPEC_EncodeFileName(const CFX_WideStringC& filepath) { |
+ if (filepath.GetLength() <= 1) { |
+ return CFX_WideString(); |
+ } |
+#if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
+ if (filepath.GetAt(1) == ':') { |
+ CFX_WideString result; |
+ result = '/'; |
+ result += filepath.GetAt(0); |
+ if (filepath.GetAt(2) != '\\') { |
+ result += '/'; |
} |
- return ChangeSlashToPDF(filepath.GetPtr()); |
+ result += ChangeSlashToPDF(filepath.GetPtr() + 2); |
+ return result; |
+ } |
+ if (filepath.GetAt(0) == '\\' && filepath.GetAt(1) == '\\') { |
+ return ChangeSlashToPDF(filepath.GetPtr() + 1); |
+ } |
+ if (filepath.GetAt(0) == '\\') { |
+ CFX_WideString result; |
+ result = '/'; |
+ result += ChangeSlashToPDF(filepath.GetPtr()); |
+ return result; |
+ } |
+ return ChangeSlashToPDF(filepath.GetPtr()); |
+#elif _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ |
+ if (filepath.Left(sizeof("Mac") - 1) == FX_WSTRC(L"Mac")) { |
+ CFX_WideString result; |
+ result = '/'; |
+ result += ChangeSlashToPDF(filepath.GetPtr()); |
+ return result; |
+ } |
+ return ChangeSlashToPDF(filepath.GetPtr()); |
#else |
- return filepath; |
+ return filepath; |
#endif |
} |
-CPDF_Stream* CPDF_FileSpec::GetFileStream() const |
-{ |
- if (m_pObj == NULL) { |
- return NULL; |
- } |
- int32_t iType = m_pObj->GetType(); |
- if (iType == PDFOBJ_STREAM) { |
- return (CPDF_Stream*)m_pObj; |
- } else if (iType == PDFOBJ_DICTIONARY) { |
- CPDF_Dictionary *pEF = ((CPDF_Dictionary*)m_pObj)->GetDict(FX_BSTRC("EF")); |
- if (pEF == NULL) { |
- return NULL; |
- } |
- return pEF->GetStream(FX_BSTRC("F")); |
- } |
+CPDF_Stream* CPDF_FileSpec::GetFileStream() const { |
+ if (m_pObj == NULL) { |
return NULL; |
+ } |
+ int32_t iType = m_pObj->GetType(); |
+ if (iType == PDFOBJ_STREAM) { |
+ return (CPDF_Stream*)m_pObj; |
+ } else if (iType == PDFOBJ_DICTIONARY) { |
+ CPDF_Dictionary* pEF = ((CPDF_Dictionary*)m_pObj)->GetDict(FX_BSTRC("EF")); |
+ if (pEF == NULL) { |
+ return NULL; |
+ } |
+ return pEF->GetStream(FX_BSTRC("F")); |
+ } |
+ return NULL; |
} |
-static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object *pObj, const CFX_WideStringC& wsFileName, FX_BOOL bURL) |
-{ |
- ASSERT(pObj != NULL); |
- CFX_WideString wsStr; |
- if (bURL) { |
- wsStr = wsFileName; |
- } else { |
- wsStr = FILESPEC_EncodeFileName(wsFileName); |
- } |
- int32_t iType = pObj->GetType(); |
- if (iType == PDFOBJ_STRING) { |
- pObj->SetString(CFX_ByteString::FromUnicode(wsStr)); |
- } else if (iType == PDFOBJ_DICTIONARY) { |
- CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; |
- pDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsStr)); |
- pDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsStr)); |
- } |
+static void FPDFDOC_FILESPEC_SetFileName(CPDF_Object* pObj, |
+ const CFX_WideStringC& wsFileName, |
+ FX_BOOL bURL) { |
+ ASSERT(pObj != NULL); |
+ CFX_WideString wsStr; |
+ if (bURL) { |
+ wsStr = wsFileName; |
+ } else { |
+ wsStr = FILESPEC_EncodeFileName(wsFileName); |
+ } |
+ int32_t iType = pObj->GetType(); |
+ if (iType == PDFOBJ_STRING) { |
+ pObj->SetString(CFX_ByteString::FromUnicode(wsStr)); |
+ } else if (iType == PDFOBJ_DICTIONARY) { |
+ CPDF_Dictionary* pDict = (CPDF_Dictionary*)pObj; |
+ pDict->SetAtString(FX_BSTRC("F"), CFX_ByteString::FromUnicode(wsStr)); |
+ pDict->SetAtString(FX_BSTRC("UF"), PDF_EncodeText(wsStr)); |
+ } |
} |
-void CPDF_FileSpec::SetFileName(const CFX_WideStringC& wsFileName, FX_BOOL bURL) |
-{ |
- ASSERT(m_pObj != NULL); |
- if (m_pObj->GetType() == PDFOBJ_DICTIONARY && bURL) { |
- ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("FS"), "URL"); |
- } |
- FPDFDOC_FILESPEC_SetFileName(m_pObj, wsFileName, bURL); |
+void CPDF_FileSpec::SetFileName(const CFX_WideStringC& wsFileName, |
+ FX_BOOL bURL) { |
+ ASSERT(m_pObj != NULL); |
+ if (m_pObj->GetType() == PDFOBJ_DICTIONARY && bURL) { |
+ ((CPDF_Dictionary*)m_pObj)->SetAtName(FX_BSTRC("FS"), "URL"); |
+ } |
+ FPDFDOC_FILESPEC_SetFileName(m_pObj, wsFileName, bURL); |
} |
-static CFX_WideString _MakeRoman(int num) |
-{ |
- const int arabic[] = { |
- 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 |
- }; |
- const CFX_WideString roman[] = { |
- L"m", L"cm", L"d", L"cd", L"c", L"xc", L"l", L"xl", L"x", L"ix", L"v", L"iv", L"i" |
- }; |
- const int nMaxNum = 1000000; |
- num %= nMaxNum; |
- int i = 0; |
- CFX_WideString wsRomanNumber; |
- while (num > 0) { |
- while (num >= arabic[i]) { |
- num = num - arabic[i]; |
- wsRomanNumber += roman[i]; |
- } |
- i = i + 1; |
- } |
- return wsRomanNumber; |
+static CFX_WideString _MakeRoman(int num) { |
+ const int arabic[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; |
+ const CFX_WideString roman[] = {L"m", L"cm", L"d", L"cd", L"c", |
+ L"xc", L"l", L"xl", L"x", L"ix", |
+ L"v", L"iv", L"i"}; |
+ const int nMaxNum = 1000000; |
+ num %= nMaxNum; |
+ int i = 0; |
+ CFX_WideString wsRomanNumber; |
+ while (num > 0) { |
+ while (num >= arabic[i]) { |
+ num = num - arabic[i]; |
+ wsRomanNumber += roman[i]; |
+ } |
+ i = i + 1; |
+ } |
+ return wsRomanNumber; |
} |
-static CFX_WideString _MakeLetters(int num) |
-{ |
- if (num == 0) { |
- return CFX_WideString(); |
- } |
- CFX_WideString wsLetters; |
- const int nMaxCount = 1000; |
- const int nLetterCount = 26; |
- num -= 1; |
- int count = num / nLetterCount + 1; |
- count %= nMaxCount; |
- FX_WCHAR ch = L'a' + num % nLetterCount; |
- for (int i = 0; i < count; i++) { |
- wsLetters += ch; |
- } |
- return wsLetters; |
+static CFX_WideString _MakeLetters(int num) { |
+ if (num == 0) { |
+ return CFX_WideString(); |
+ } |
+ CFX_WideString wsLetters; |
+ const int nMaxCount = 1000; |
+ const int nLetterCount = 26; |
+ num -= 1; |
+ int count = num / nLetterCount + 1; |
+ count %= nMaxCount; |
+ FX_WCHAR ch = L'a' + num % nLetterCount; |
+ for (int i = 0; i < count; i++) { |
+ wsLetters += ch; |
+ } |
+ return wsLetters; |
} |
-static CFX_WideString _GetLabelNumPortion(int num, const CFX_ByteString& bsStyle) |
-{ |
- CFX_WideString wsNumPortion; |
- if (bsStyle.IsEmpty()) { |
- return wsNumPortion; |
- } |
- if (bsStyle == "D") { |
- wsNumPortion.Format(L"%d", num); |
- } else if (bsStyle == "R") { |
- wsNumPortion = _MakeRoman(num); |
- wsNumPortion.MakeUpper(); |
- } else if (bsStyle == "r") { |
- wsNumPortion = _MakeRoman(num); |
- } else if (bsStyle == "A") { |
- wsNumPortion = _MakeLetters(num); |
- wsNumPortion.MakeUpper(); |
- } else if (bsStyle == "a") { |
- wsNumPortion = _MakeLetters(num); |
- } |
+static CFX_WideString _GetLabelNumPortion(int num, |
+ const CFX_ByteString& bsStyle) { |
+ CFX_WideString wsNumPortion; |
+ if (bsStyle.IsEmpty()) { |
return wsNumPortion; |
+ } |
+ if (bsStyle == "D") { |
+ wsNumPortion.Format(L"%d", num); |
+ } else if (bsStyle == "R") { |
+ wsNumPortion = _MakeRoman(num); |
+ wsNumPortion.MakeUpper(); |
+ } else if (bsStyle == "r") { |
+ wsNumPortion = _MakeRoman(num); |
+ } else if (bsStyle == "A") { |
+ wsNumPortion = _MakeLetters(num); |
+ wsNumPortion.MakeUpper(); |
+ } else if (bsStyle == "a") { |
+ wsNumPortion = _MakeLetters(num); |
+ } |
+ return wsNumPortion; |
} |
-CFX_WideString CPDF_PageLabel::GetLabel(int nPage) const |
-{ |
- CFX_WideString wsLabel; |
- if (m_pDocument == NULL) { |
- return wsLabel; |
- } |
- CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot(); |
- if (pPDFRoot == NULL) { |
- return wsLabel; |
- } |
- CPDF_Dictionary* pLabels = pPDFRoot->GetDict(FX_BSTRC("PageLabels")); |
- CPDF_NumberTree numberTree(pLabels); |
- CPDF_Object* pValue = NULL; |
- int n = nPage; |
- while (n >= 0) { |
- pValue = numberTree.LookupValue(n); |
- if (pValue != NULL) { |
- break; |
- } |
- n--; |
- } |
+CFX_WideString CPDF_PageLabel::GetLabel(int nPage) const { |
+ CFX_WideString wsLabel; |
+ if (m_pDocument == NULL) { |
+ return wsLabel; |
+ } |
+ CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot(); |
+ if (pPDFRoot == NULL) { |
+ return wsLabel; |
+ } |
+ CPDF_Dictionary* pLabels = pPDFRoot->GetDict(FX_BSTRC("PageLabels")); |
+ CPDF_NumberTree numberTree(pLabels); |
+ CPDF_Object* pValue = NULL; |
+ int n = nPage; |
+ while (n >= 0) { |
+ pValue = numberTree.LookupValue(n); |
if (pValue != NULL) { |
- pValue = pValue->GetDirect(); |
- if (pValue->GetType() == PDFOBJ_DICTIONARY) { |
- CPDF_Dictionary* pLabel = (CPDF_Dictionary*)pValue; |
- if (pLabel->KeyExist(FX_BSTRC("P"))) { |
- wsLabel += pLabel->GetUnicodeText(FX_BSTRC("P")); |
- } |
- CFX_ByteString bsNumberingStyle = pLabel->GetString(FX_BSTRC("S"), NULL); |
- int nLabelNum = nPage - n + pLabel->GetInteger(FX_BSTRC("St"), 1); |
- CFX_WideString wsNumPortion = _GetLabelNumPortion(nLabelNum, bsNumberingStyle); |
- wsLabel += wsNumPortion; |
- return wsLabel; |
- } |
+ break; |
} |
- wsLabel.Format(L"%d", nPage + 1); |
- return wsLabel; |
+ n--; |
+ } |
+ if (pValue != NULL) { |
+ pValue = pValue->GetDirect(); |
+ if (pValue->GetType() == PDFOBJ_DICTIONARY) { |
+ CPDF_Dictionary* pLabel = (CPDF_Dictionary*)pValue; |
+ if (pLabel->KeyExist(FX_BSTRC("P"))) { |
+ wsLabel += pLabel->GetUnicodeText(FX_BSTRC("P")); |
+ } |
+ CFX_ByteString bsNumberingStyle = pLabel->GetString(FX_BSTRC("S"), NULL); |
+ int nLabelNum = nPage - n + pLabel->GetInteger(FX_BSTRC("St"), 1); |
+ CFX_WideString wsNumPortion = |
+ _GetLabelNumPortion(nLabelNum, bsNumberingStyle); |
+ wsLabel += wsNumPortion; |
+ return wsLabel; |
+ } |
+ } |
+ wsLabel.Format(L"%d", nPage + 1); |
+ return wsLabel; |
} |
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const |
-{ |
- if (m_pDocument == NULL) { |
- return -1; |
- } |
- CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot(); |
- if (pPDFRoot == NULL) { |
- return -1; |
- } |
- int nPages = m_pDocument->GetPageCount(); |
- CFX_ByteString bsLbl; |
- CFX_ByteString bsOrig = bsLabel; |
- for (int i = 0; i < nPages; i++) { |
- bsLbl = PDF_EncodeText(GetLabel(i)); |
- if (!bsLbl.Compare(bsOrig)) { |
- return i; |
- } |
- } |
- bsLbl = bsOrig; |
- int nPage = FXSYS_atoi(bsLbl); |
- if (nPage > 0 && nPage <= nPages) { |
- return nPage; |
- } |
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const { |
+ if (m_pDocument == NULL) { |
+ return -1; |
+ } |
+ CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot(); |
+ if (pPDFRoot == NULL) { |
return -1; |
+ } |
+ int nPages = m_pDocument->GetPageCount(); |
+ CFX_ByteString bsLbl; |
+ CFX_ByteString bsOrig = bsLabel; |
+ for (int i = 0; i < nPages; i++) { |
+ bsLbl = PDF_EncodeText(GetLabel(i)); |
+ if (!bsLbl.Compare(bsOrig)) { |
+ return i; |
+ } |
+ } |
+ bsLbl = bsOrig; |
+ int nPage = FXSYS_atoi(bsLbl); |
+ if (nPage > 0 && nPage <= nPages) { |
+ return nPage; |
+ } |
+ return -1; |
} |
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const |
-{ |
- CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr()); |
- return GetPageByLabel(bsLabel); |
+int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const { |
+ CFX_ByteString bsLabel = PDF_EncodeText(wsLabel.GetPtr()); |
+ return GetPageByLabel(bsLabel); |
} |