summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/fpdfdoc/cpdf_pagelabel.cpp27
-rw-r--r--core/fpdfdoc/cpdf_pagelabel.h3
-rw-r--r--fpdfsdk/fpdfdoc.cpp8
3 files changed, 20 insertions, 18 deletions
diff --git a/core/fpdfdoc/cpdf_pagelabel.cpp b/core/fpdfdoc/cpdf_pagelabel.cpp
index d0693086ab..f06e4018bb 100644
--- a/core/fpdfdoc/cpdf_pagelabel.cpp
+++ b/core/fpdfdoc/cpdf_pagelabel.cpp
@@ -78,20 +78,20 @@ CPDF_PageLabel::CPDF_PageLabel(CPDF_Document* pDocument)
CPDF_PageLabel::~CPDF_PageLabel() {}
-bool CPDF_PageLabel::GetLabel(int nPage, WideString* wsLabel) const {
+Optional<WideString> CPDF_PageLabel::GetLabel(int nPage) const {
if (!m_pDocument)
- return false;
+ return {};
if (nPage < 0 || nPage >= m_pDocument->GetPageCount())
- return false;
+ return {};
const CPDF_Dictionary* pPDFRoot = m_pDocument->GetRoot();
if (!pPDFRoot)
- return false;
+ return {};
CPDF_Dictionary* pLabels = pPDFRoot->GetDictFor("PageLabels");
if (!pLabels)
- return false;
+ return {};
CPDF_NumberTree numberTree(pLabels);
CPDF_Object* pValue = nullptr;
@@ -103,21 +103,22 @@ bool CPDF_PageLabel::GetLabel(int nPage, WideString* wsLabel) const {
n--;
}
+ WideString label;
if (pValue) {
pValue = pValue->GetDirect();
if (CPDF_Dictionary* pLabel = pValue->AsDictionary()) {
if (pLabel->KeyExist("P"))
- *wsLabel += pLabel->GetUnicodeTextFor("P");
+ label += pLabel->GetUnicodeTextFor("P");
ByteString bsNumberingStyle = pLabel->GetStringFor("S", "");
int nLabelNum = nPage - n + pLabel->GetIntegerFor("St", 1);
WideString wsNumPortion = GetLabelNumPortion(nLabelNum, bsNumberingStyle);
- *wsLabel += wsNumPortion;
- return true;
+ label += wsNumPortion;
+ return {label};
}
}
- *wsLabel = WideString::Format(L"%d", nPage + 1);
- return true;
+ label = WideString::Format(L"%d", nPage + 1);
+ return {label};
}
int32_t CPDF_PageLabel::GetPageByLabel(const ByteStringView& bsLabel) const {
@@ -130,10 +131,10 @@ int32_t CPDF_PageLabel::GetPageByLabel(const ByteStringView& bsLabel) const {
int nPages = m_pDocument->GetPageCount();
for (int i = 0; i < nPages; i++) {
- WideString str;
- if (!GetLabel(i, &str))
+ Optional<WideString> str = GetLabel(i);
+ if (!str.has_value())
continue;
- if (PDF_EncodeText(str).Compare(bsLabel))
+ if (PDF_EncodeText(str.value()).Compare(bsLabel))
return i;
}
diff --git a/core/fpdfdoc/cpdf_pagelabel.h b/core/fpdfdoc/cpdf_pagelabel.h
index 8a7a33d16a..4570e97b7a 100644
--- a/core/fpdfdoc/cpdf_pagelabel.h
+++ b/core/fpdfdoc/cpdf_pagelabel.h
@@ -8,6 +8,7 @@
#define CORE_FPDFDOC_CPDF_PAGELABEL_H_
#include "core/fxcrt/fx_string.h"
+#include "third_party/base/optional.h"
class CPDF_Document;
@@ -16,7 +17,7 @@ class CPDF_PageLabel {
explicit CPDF_PageLabel(CPDF_Document* pDocument);
~CPDF_PageLabel();
- bool GetLabel(int nPage, WideString* wsLabel) const;
+ Optional<WideString> GetLabel(int nPage) const;
int32_t GetPageByLabel(const ByteStringView& bsLabel) const;
int32_t GetPageByLabel(const WideStringView& wsLabel) const;
diff --git a/fpdfsdk/fpdfdoc.cpp b/fpdfsdk/fpdfdoc.cpp
index 51a1c61e77..14e4361483 100644
--- a/fpdfsdk/fpdfdoc.cpp
+++ b/fpdfsdk/fpdfdoc.cpp
@@ -424,8 +424,8 @@ FPDF_GetPageLabel(FPDF_DOCUMENT document,
// CPDF_PageLabel can deal with NULL |document|.
CPDF_PageLabel label(CPDFDocumentFromFPDFDocument(document));
- WideString str;
- if (!label.GetLabel(page_index, &str))
- return 0;
- return Utf16EncodeMaybeCopyAndReturnLength(str, buffer, buflen);
+ Optional<WideString> str = label.GetLabel(page_index);
+ return str.has_value()
+ ? Utf16EncodeMaybeCopyAndReturnLength(str.value(), buffer, buflen)
+ : 0;
}