summaryrefslogtreecommitdiff
path: root/xfa/fxfa/parser
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/parser')
-rw-r--r--xfa/fxfa/parser/cxfa_captiondata.cpp14
-rw-r--r--xfa/fxfa/parser/cxfa_captiondata.h5
-rw-r--r--xfa/fxfa/parser/cxfa_eventdata.cpp2
-rw-r--r--xfa/fxfa/parser/cxfa_eventdata.h2
-rw-r--r--xfa/fxfa/parser/cxfa_node.cpp44
-rw-r--r--xfa/fxfa/parser/cxfa_widgetdata.cpp532
-rw-r--r--xfa/fxfa/parser/cxfa_widgetdata.h87
-rw-r--r--xfa/fxfa/parser/xfa_document_datamerger_imp.cpp52
8 files changed, 337 insertions, 401 deletions
diff --git a/xfa/fxfa/parser/cxfa_captiondata.cpp b/xfa/fxfa/parser/cxfa_captiondata.cpp
index 1553a50e00..61bcbcefa1 100644
--- a/xfa/fxfa/parser/cxfa_captiondata.cpp
+++ b/xfa/fxfa/parser/cxfa_captiondata.cpp
@@ -11,13 +11,19 @@
CXFA_CaptionData::CXFA_CaptionData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
-int32_t CXFA_CaptionData::GetPresence() const {
+bool CXFA_CaptionData::IsVisible() const {
return m_pNode->JSNode()
- ->TryEnum(XFA_Attribute::Presence, true)
- .value_or(XFA_ATTRIBUTEENUM_Visible);
+ ->TryEnum(XFA_Attribute::Presence, true)
+ .value_or(XFA_ATTRIBUTEENUM_Visible) == XFA_ATTRIBUTEENUM_Visible;
}
-int32_t CXFA_CaptionData::GetPlacementType() const {
+bool CXFA_CaptionData::IsHidden() const {
+ return m_pNode->JSNode()
+ ->TryEnum(XFA_Attribute::Presence, true)
+ .value_or(XFA_ATTRIBUTEENUM_Visible) == XFA_ATTRIBUTEENUM_Hidden;
+}
+
+XFA_ATTRIBUTEENUM CXFA_CaptionData::GetPlacementType() const {
return m_pNode->JSNode()
->TryEnum(XFA_Attribute::Placement, true)
.value_or(XFA_ATTRIBUTEENUM_Left);
diff --git a/xfa/fxfa/parser/cxfa_captiondata.h b/xfa/fxfa/parser/cxfa_captiondata.h
index ade938bebb..1a0d61fb8e 100644
--- a/xfa/fxfa/parser/cxfa_captiondata.h
+++ b/xfa/fxfa/parser/cxfa_captiondata.h
@@ -18,8 +18,9 @@ class CXFA_CaptionData : public CXFA_DataData {
public:
explicit CXFA_CaptionData(CXFA_Node* pNode);
- int32_t GetPresence() const;
- int32_t GetPlacementType() const;
+ bool IsVisible() const;
+ bool IsHidden() const;
+ XFA_ATTRIBUTEENUM GetPlacementType() const;
float GetReserve() const;
CXFA_MarginData GetMarginData() const;
CXFA_FontData GetFontData() const;
diff --git a/xfa/fxfa/parser/cxfa_eventdata.cpp b/xfa/fxfa/parser/cxfa_eventdata.cpp
index 1485d8e0f5..3c9720d1fd 100644
--- a/xfa/fxfa/parser/cxfa_eventdata.cpp
+++ b/xfa/fxfa/parser/cxfa_eventdata.cpp
@@ -10,7 +10,7 @@
CXFA_EventData::CXFA_EventData(CXFA_Node* pNode) : CXFA_DataData(pNode) {}
-int32_t CXFA_EventData::GetActivity() {
+XFA_ATTRIBUTEENUM CXFA_EventData::GetActivity() {
return m_pNode->JSNode()->GetEnum(XFA_Attribute::Activity);
}
diff --git a/xfa/fxfa/parser/cxfa_eventdata.h b/xfa/fxfa/parser/cxfa_eventdata.h
index a93d04352c..89ed63e269 100644
--- a/xfa/fxfa/parser/cxfa_eventdata.h
+++ b/xfa/fxfa/parser/cxfa_eventdata.h
@@ -20,7 +20,7 @@ class CXFA_EventData : public CXFA_DataData {
public:
explicit CXFA_EventData(CXFA_Node* pNode);
- int32_t GetActivity();
+ XFA_ATTRIBUTEENUM GetActivity();
XFA_Element GetEventType() const;
CXFA_ScriptData GetScriptData() const;
CXFA_SubmitData GetSubmitData() const;
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 185b2a935a..a947374814 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -465,38 +465,36 @@ CXFA_WidgetData* CXFA_Node::GetContainerWidgetData() {
if (eType == XFA_Element::Field) {
CXFA_WidgetData* pFieldWidgetData = GetWidgetData();
- if (pFieldWidgetData &&
- pFieldWidgetData->GetChoiceListOpen() ==
- XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (pFieldWidgetData && pFieldWidgetData->IsChoiceListMultiSelect())
return nullptr;
- } else {
- WideString wsPicture;
+
+ WideString wsPicture;
+ if (pFieldWidgetData) {
+ wsPicture =
+ pFieldWidgetData->GetPictureContent(XFA_VALUEPICTURE_DataBind);
+ }
+ if (!wsPicture.IsEmpty())
+ return pFieldWidgetData;
+
+ CXFA_Node* pDataNode = GetBindData();
+ if (!pDataNode)
+ return nullptr;
+ pFieldWidgetData = nullptr;
+ for (const auto& pFormNode : *(pDataNode->GetBindItems())) {
+ if (!pFormNode || pFormNode->HasRemovedChildren())
+ continue;
+ pFieldWidgetData = pFormNode->GetWidgetData();
if (pFieldWidgetData) {
wsPicture =
pFieldWidgetData->GetPictureContent(XFA_VALUEPICTURE_DataBind);
}
if (!wsPicture.IsEmpty())
- return pFieldWidgetData;
-
- CXFA_Node* pDataNode = GetBindData();
- if (!pDataNode)
- return nullptr;
+ break;
pFieldWidgetData = nullptr;
- for (const auto& pFormNode : *(pDataNode->GetBindItems())) {
- if (!pFormNode || pFormNode->HasRemovedChildren())
- continue;
- pFieldWidgetData = pFormNode->GetWidgetData();
- if (pFieldWidgetData) {
- wsPicture =
- pFieldWidgetData->GetPictureContent(XFA_VALUEPICTURE_DataBind);
- }
- if (!wsPicture.IsEmpty())
- break;
- pFieldWidgetData = nullptr;
- }
- return pFieldWidgetData;
}
+ return pFieldWidgetData;
}
+
CXFA_Node* pGrandNode =
pParentNode ? pParentNode->GetNodeItem(XFA_NODEITEM_Parent) : nullptr;
CXFA_Node* pValueNode =
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index 9b0bbccde8..19a82542ea 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -8,7 +8,6 @@
#include "core/fxcrt/cfx_decimal.h"
#include "core/fxcrt/fx_extension.h"
-#include "fxbarcode/BC_Library.h"
#include "third_party/base/stl_util.h"
#include "xfa/fxfa/cxfa_ffnotify.h"
#include "xfa/fxfa/parser/cxfa_document.h"
@@ -234,7 +233,7 @@ bool CXFA_WidgetData::IsOpenAccess() const {
return true;
}
-int32_t CXFA_WidgetData::GetRotate() {
+int32_t CXFA_WidgetData::GetRotate() const {
pdfium::Optional<CXFA_Measurement> measure =
m_pNode->JSNode()->TryMeasure(XFA_Attribute::Rotate, false);
if (!measure)
@@ -274,8 +273,9 @@ std::vector<CXFA_Node*> CXFA_WidgetData::GetEventList() {
return m_pNode->GetNodeList(0, XFA_Element::Event);
}
-std::vector<CXFA_Node*> CXFA_WidgetData::GetEventByActivity(int32_t iActivity,
- bool bIsFormReady) {
+std::vector<CXFA_Node*> CXFA_WidgetData::GetEventByActivity(
+ XFA_ATTRIBUTEENUM iActivity,
+ bool bIsFormReady) {
std::vector<CXFA_Node*> events;
for (CXFA_Node* pNode : GetEventList()) {
CXFA_EventData eventData(pNode);
@@ -401,42 +401,38 @@ XFA_ATTRIBUTEENUM CXFA_WidgetData::GetButtonHighlight() {
return XFA_ATTRIBUTEENUM_Inverted;
}
-bool CXFA_WidgetData::GetButtonRollover(WideString& wsRollover,
- bool& bRichText) {
- if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items, false)) {
- CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
- while (pText) {
- if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"rollover") {
- wsRollover = pText->JSNode()->GetContent(false);
- bRichText = pText->GetElementType() == XFA_Element::ExData;
- return !wsRollover.IsEmpty();
- }
- pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling);
- }
+bool CXFA_WidgetData::HasButtonRollover() const {
+ CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items, false);
+ if (!pItems)
+ return false;
+
+ for (CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); pText;
+ pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+ if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"rollover")
+ return !pText->JSNode()->GetContent(false).IsEmpty();
}
return false;
}
-bool CXFA_WidgetData::GetButtonDown(WideString& wsDown, bool& bRichText) {
- if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items, false)) {
- CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
- while (pText) {
- if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"down") {
- wsDown = pText->JSNode()->GetContent(false);
- bRichText = pText->GetElementType() == XFA_Element::ExData;
- return !wsDown.IsEmpty();
- }
- pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling);
- }
+bool CXFA_WidgetData::HasButtonDown() const {
+ CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items, false);
+ if (!pItems)
+ return false;
+
+ for (CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild); pText;
+ pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+ if (pText->JSNode()->GetCData(XFA_Attribute::Name) == L"down")
+ return !pText->JSNode()->GetContent(false).IsEmpty();
}
return false;
}
-XFA_ATTRIBUTEENUM CXFA_WidgetData::GetCheckButtonShape() {
+bool CXFA_WidgetData::IsCheckButtonRound() {
CXFA_Node* pUIChild = GetUIChild();
if (pUIChild)
- return pUIChild->JSNode()->GetEnum(XFA_Attribute::Shape);
- return XFA_ATTRIBUTEENUM_Square;
+ return pUIChild->JSNode()->GetEnum(XFA_Attribute::Shape) ==
+ XFA_ATTRIBUTEENUM_Round;
+ return false;
}
XFA_ATTRIBUTEENUM CXFA_WidgetData::GetCheckButtonMark() {
@@ -649,11 +645,13 @@ CXFA_Node* CXFA_WidgetData::GetExclGroupNextMember(CXFA_Node* pNode) {
return nullptr;
}
-XFA_ATTRIBUTEENUM CXFA_WidgetData::GetChoiceListCommitOn() {
+bool CXFA_WidgetData::IsChoiceListCommitOnSelect() {
CXFA_Node* pUIChild = GetUIChild();
- if (pUIChild)
- return pUIChild->JSNode()->GetEnum(XFA_Attribute::CommitOn);
- return XFA_ATTRIBUTEENUM_Select;
+ if (pUIChild) {
+ return pUIChild->JSNode()->GetEnum(XFA_Attribute::CommitOn) ==
+ XFA_ATTRIBUTEENUM_Select;
+ }
+ return true;
}
bool CXFA_WidgetData::IsChoiceListAllowTextEntry() {
@@ -661,17 +659,23 @@ bool CXFA_WidgetData::IsChoiceListAllowTextEntry() {
return pUIChild && pUIChild->JSNode()->GetBoolean(XFA_Attribute::TextEntry);
}
-XFA_ATTRIBUTEENUM CXFA_WidgetData::GetChoiceListOpen() {
+bool CXFA_WidgetData::IsChoiceListMultiSelect() {
CXFA_Node* pUIChild = GetUIChild();
- if (pUIChild)
- return pUIChild->JSNode()->GetEnum(XFA_Attribute::Open);
- return XFA_ATTRIBUTEENUM_UserControl;
+ if (pUIChild) {
+ return pUIChild->JSNode()->GetEnum(XFA_Attribute::Open) ==
+ XFA_ATTRIBUTEENUM_MultiSelect;
+ }
+ return false;
}
bool CXFA_WidgetData::IsListBox() {
- int32_t iOpenMode = GetChoiceListOpen();
- return iOpenMode == XFA_ATTRIBUTEENUM_Always ||
- iOpenMode == XFA_ATTRIBUTEENUM_MultiSelect;
+ CXFA_Node* pUIChild = GetUIChild();
+ if (!pUIChild)
+ return false;
+
+ XFA_ATTRIBUTEENUM attr = pUIChild->JSNode()->GetEnum(XFA_Attribute::Open);
+ return attr == XFA_ATTRIBUTEENUM_Always ||
+ attr == XFA_ATTRIBUTEENUM_MultiSelect;
}
int32_t CXFA_WidgetData::CountChoiceListItems(bool bSaveValue) {
@@ -699,26 +703,25 @@ int32_t CXFA_WidgetData::CountChoiceListItems(bool bSaveValue) {
return pItem->CountChildren(XFA_Element::Unknown, false);
}
-bool CXFA_WidgetData::GetChoiceListItem(WideString& wsText,
- int32_t nIndex,
- bool bSaveValue) {
- wsText.clear();
+pdfium::Optional<WideString> CXFA_WidgetData::GetChoiceListItem(
+ int32_t nIndex,
+ bool bSaveValue) {
std::vector<CXFA_Node*> pItemsArray;
- CXFA_Node* pItems = nullptr;
int32_t iCount = 0;
- CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
- for (; pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
+ for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
+ pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
if (pNode->GetElementType() != XFA_Element::Items)
continue;
- iCount++;
+
+ ++iCount;
pItemsArray.push_back(pNode);
if (iCount == 2)
break;
}
if (iCount == 0)
- return false;
+ return {};
- pItems = pItemsArray[0];
+ CXFA_Node* pItems = pItemsArray[0];
if (iCount > 1) {
bool bItemOneHasSave =
pItemsArray[0]->JSNode()->GetBoolean(XFA_Attribute::Save);
@@ -727,14 +730,13 @@ bool CXFA_WidgetData::GetChoiceListItem(WideString& wsText,
if (bItemOneHasSave != bItemTwoHasSave && bSaveValue == bItemTwoHasSave)
pItems = pItemsArray[1];
}
- if (pItems) {
- CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_Element::Unknown, false);
- if (pItem) {
- wsText = pItem->JSNode()->GetContent(false);
- return true;
- }
- }
- return false;
+ if (!pItems)
+ return {};
+
+ CXFA_Node* pItem = pItems->GetChild(nIndex, XFA_Element::Unknown, false);
+ if (pItem)
+ return {pItem->JSNode()->GetContent(false)};
+ return {};
}
std::vector<WideString> CXFA_WidgetData::GetChoiceListItems(bool bSaveValue) {
@@ -804,7 +806,7 @@ std::vector<int32_t> CXFA_WidgetData::GetSelectedItems() {
std::vector<WideString> CXFA_WidgetData::GetSelectedItemsValue() {
std::vector<WideString> wsSelTextArray;
WideString wsValue = GetRawValue();
- if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (IsChoiceListMultiSelect()) {
if (!wsValue.IsEmpty()) {
size_t iStart = 0;
size_t iLength = wsValue.GetLength();
@@ -849,7 +851,7 @@ void CXFA_WidgetData::SetItemState(int32_t nIndex,
if (it != wsValueArray.end())
iSel = it - wsValueArray.begin();
- if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (IsChoiceListMultiSelect()) {
if (bSelected) {
if (iSel < 0) {
WideString wsValue = GetRawValue();
@@ -871,9 +873,8 @@ void CXFA_WidgetData::SetItemState(int32_t nIndex,
if (bSelected) {
if (iSel < 0) {
WideString wsSaveText = wsSaveTextArray[nIndex];
- WideString wsFormatText(wsSaveText);
- GetFormatDataValue(wsSaveText, wsFormatText);
- m_pNode->JSNode()->SetContent(wsSaveText, wsFormatText, bNotify,
+ m_pNode->JSNode()->SetContent(wsSaveText,
+ GetFormatDataValue(wsSaveText), bNotify,
bScriptModify, bSyncData);
}
} else if (iSel >= 0) {
@@ -899,8 +900,8 @@ void CXFA_WidgetData::SetSelectedItems(const std::vector<int32_t>& iSelArray,
}
}
WideString wsFormat(wsValue);
- if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect)
- GetFormatDataValue(wsValue, wsFormat);
+ if (!IsChoiceListMultiSelect())
+ wsFormat = GetFormatDataValue(wsValue);
m_pNode->JSNode()->SetContent(wsValue, wsFormat, bNotify, bScriptModify,
bSyncData);
@@ -908,7 +909,7 @@ void CXFA_WidgetData::SetSelectedItems(const std::vector<int32_t>& iSelArray,
void CXFA_WidgetData::ClearAllSelections() {
CXFA_Node* pBind = m_pNode->GetBindData();
- if (!pBind || GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (!pBind || !IsChoiceListMultiSelect()) {
SyncValue(WideString(), false);
return;
}
@@ -1023,8 +1024,7 @@ void CXFA_WidgetData::GetItemLabel(const WideStringView& wsValue,
wsLabel = pText->JSNode()->GetContent(false);
}
-void CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel,
- WideString& wsValue) {
+WideString CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel) {
int32_t iCount = 0;
std::vector<CXFA_Node*> listitems;
for (CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -1034,10 +1034,8 @@ void CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel,
iCount++;
listitems.push_back(pItems);
}
- if (iCount <= 1) {
- wsValue = wsLabel;
- return;
- }
+ if (iCount <= 1)
+ return WideString(wsLabel);
CXFA_Node* pLabelItems = listitems[0];
bool bSave = pLabelItems->JSNode()->GetBoolean(XFA_Attribute::Save);
@@ -1062,11 +1060,10 @@ void CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel,
iCount++;
}
if (iSearch < 0)
- return;
+ return L"";
CXFA_Node* pText = pSaveItems->GetChild(iSearch, XFA_Element::Unknown, false);
- if (pText)
- wsValue = pText->JSNode()->GetContent(false);
+ return pText ? pText->JSNode()->GetContent(false) : L"";
}
bool CXFA_WidgetData::DeleteItem(int32_t nIndex,
@@ -1104,20 +1101,31 @@ bool CXFA_WidgetData::DeleteItem(int32_t nIndex,
return true;
}
-int32_t CXFA_WidgetData::GetHorizontalScrollPolicy() {
+bool CXFA_WidgetData::IsHorizontalScrollPolicyOff() {
CXFA_Node* pUIChild = GetUIChild();
- if (pUIChild)
- return pUIChild->JSNode()->GetEnum(XFA_Attribute::HScrollPolicy);
- return XFA_ATTRIBUTEENUM_Auto;
+ if (pUIChild) {
+ return pUIChild->JSNode()->GetEnum(XFA_Attribute::HScrollPolicy) ==
+ XFA_ATTRIBUTEENUM_Off;
+ }
+ return false;
}
-int32_t CXFA_WidgetData::GetNumberOfCells() {
+bool CXFA_WidgetData::IsVerticalScrollPolicyOff() {
+ CXFA_Node* pUIChild = GetUIChild();
+ if (pUIChild) {
+ return pUIChild->JSNode()->GetEnum(XFA_Attribute::VScrollPolicy) ==
+ XFA_ATTRIBUTEENUM_Off;
+ }
+ return false;
+}
+
+pdfium::Optional<int32_t> CXFA_WidgetData::GetNumberOfCells() {
CXFA_Node* pUIChild = GetUIChild();
if (!pUIChild)
- return -1;
+ return {};
if (CXFA_Node* pNode = pUIChild->GetChild(0, XFA_Element::Comb, false))
- return pNode->JSNode()->GetInteger(XFA_Attribute::NumberOfCells);
- return -1;
+ return {pNode->JSNode()->GetInteger(XFA_Attribute::NumberOfCells)};
+ return {};
}
WideString CXFA_WidgetData::GetBarcodeType() {
@@ -1127,183 +1135,151 @@ WideString CXFA_WidgetData::GetBarcodeType() {
: WideString();
}
-bool CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t* val) {
+pdfium::Optional<BC_CHAR_ENCODING>
+CXFA_WidgetData::GetBarcodeAttribute_CharEncoding() {
pdfium::Optional<WideString> wsCharEncoding =
GetUIChild()->JSNode()->TryCData(XFA_Attribute::CharEncoding, true);
if (!wsCharEncoding)
- return false;
- if (wsCharEncoding->CompareNoCase(L"UTF-16")) {
- *val = CHAR_ENCODING_UNICODE;
- return true;
- }
- if (wsCharEncoding->CompareNoCase(L"UTF-8")) {
- *val = CHAR_ENCODING_UTF8;
- return true;
- }
- return false;
+ return {};
+ if (wsCharEncoding->CompareNoCase(L"UTF-16"))
+ return {CHAR_ENCODING_UNICODE};
+ if (wsCharEncoding->CompareNoCase(L"UTF-8"))
+ return {CHAR_ENCODING_UTF8};
+ return {};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_Checksum(bool* val) {
+pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_Checksum() {
pdfium::Optional<XFA_ATTRIBUTEENUM> checksum =
GetUIChild()->JSNode()->TryEnum(XFA_Attribute::Checksum, true);
if (!checksum)
- return false;
+ return {};
switch (*checksum) {
case XFA_ATTRIBUTEENUM_None:
- *val = false;
- return true;
+ return {false};
case XFA_ATTRIBUTEENUM_Auto:
- *val = true;
- return true;
+ return {true};
case XFA_ATTRIBUTEENUM_1mod10:
case XFA_ATTRIBUTEENUM_1mod10_1mod11:
case XFA_ATTRIBUTEENUM_2mod10:
default:
break;
}
- return false;
+ return {};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t* val) {
+pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_DataLength() {
pdfium::Optional<WideString> wsDataLength =
GetUIChild()->JSNode()->TryCData(XFA_Attribute::DataLength, true);
if (!wsDataLength)
- return false;
+ return {};
- *val = FXSYS_wtoi(wsDataLength->c_str());
- return true;
+ return {FXSYS_wtoi(wsDataLength->c_str())};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_StartChar(char* val) {
+pdfium::Optional<char> CXFA_WidgetData::GetBarcodeAttribute_StartChar() {
pdfium::Optional<WideString> wsStartEndChar =
GetUIChild()->JSNode()->TryCData(XFA_Attribute::StartChar, true);
if (!wsStartEndChar || wsStartEndChar->IsEmpty())
- return false;
+ return {};
- *val = static_cast<char>((*wsStartEndChar)[0]);
- return true;
+ return {static_cast<char>((*wsStartEndChar)[0])};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_EndChar(char* val) {
+pdfium::Optional<char> CXFA_WidgetData::GetBarcodeAttribute_EndChar() {
pdfium::Optional<WideString> wsStartEndChar =
GetUIChild()->JSNode()->TryCData(XFA_Attribute::EndChar, true);
if (!wsStartEndChar || wsStartEndChar->IsEmpty())
- return false;
+ return {};
- *val = static_cast<char>((*wsStartEndChar)[0]);
- return true;
+ return {static_cast<char>((*wsStartEndChar)[0])};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t* val) {
+pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ECLevel() {
pdfium::Optional<WideString> wsECLevel = GetUIChild()->JSNode()->TryCData(
XFA_Attribute::ErrorCorrectionLevel, true);
if (!wsECLevel)
- return false;
-
- *val = FXSYS_wtoi(wsECLevel->c_str());
- return true;
+ return {};
+ return {FXSYS_wtoi(wsECLevel->c_str())};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth(int32_t* val) {
+pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ModuleWidth() {
pdfium::Optional<CXFA_Measurement> moduleWidthHeight =
GetUIChild()->JSNode()->TryMeasure(XFA_Attribute::ModuleWidth, true);
if (!moduleWidthHeight)
- return false;
+ return {};
- *val = static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt));
- return true;
+ return {static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt))};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight(int32_t* val) {
+pdfium::Optional<int32_t> CXFA_WidgetData::GetBarcodeAttribute_ModuleHeight() {
pdfium::Optional<CXFA_Measurement> moduleWidthHeight =
GetUIChild()->JSNode()->TryMeasure(XFA_Attribute::ModuleHeight, true);
if (!moduleWidthHeight)
- return false;
+ return {};
- *val = static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt));
- return true;
+ return {static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt))};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum(bool* val) {
- pdfium::Optional<bool> printCheckDigit =
- GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::PrintCheckDigit, true);
- if (printCheckDigit) {
- *val = *printCheckDigit;
- return true;
- }
- return false;
+pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_PrintChecksum() {
+ return GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::PrintCheckDigit,
+ true);
}
-bool CXFA_WidgetData::GetBarcodeAttribute_TextLocation(int32_t* val) {
+pdfium::Optional<BC_TEXT_LOC>
+CXFA_WidgetData::GetBarcodeAttribute_TextLocation() {
pdfium::Optional<XFA_ATTRIBUTEENUM> textLocation =
GetUIChild()->JSNode()->TryEnum(XFA_Attribute::TextLocation, true);
if (!textLocation)
- return false;
+ return {};
switch (*textLocation) {
case XFA_ATTRIBUTEENUM_None:
- *val = BC_TEXT_LOC_NONE;
- return true;
+ return {BC_TEXT_LOC_NONE};
case XFA_ATTRIBUTEENUM_Above:
- *val = BC_TEXT_LOC_ABOVE;
- return true;
+ return {BC_TEXT_LOC_ABOVE};
case XFA_ATTRIBUTEENUM_Below:
- *val = BC_TEXT_LOC_BELOW;
- return true;
+ return {BC_TEXT_LOC_BELOW};
case XFA_ATTRIBUTEENUM_AboveEmbedded:
- *val = BC_TEXT_LOC_ABOVEEMBED;
- return true;
+ return {BC_TEXT_LOC_ABOVEEMBED};
case XFA_ATTRIBUTEENUM_BelowEmbedded:
- *val = BC_TEXT_LOC_BELOWEMBED;
- return true;
+ return {BC_TEXT_LOC_BELOWEMBED};
default:
break;
}
- return false;
+ return {};
}
-bool CXFA_WidgetData::GetBarcodeAttribute_Truncate(bool* val) {
- pdfium::Optional<bool> truncate =
- GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::Truncate, true);
- if (!truncate)
- return false;
-
- *val = *truncate;
- return true;
+pdfium::Optional<bool> CXFA_WidgetData::GetBarcodeAttribute_Truncate() {
+ return GetUIChild()->JSNode()->TryBoolean(XFA_Attribute::Truncate, true);
}
-bool CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(float* val) {
+pdfium::Optional<int8_t>
+CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio() {
pdfium::Optional<WideString> wsWideNarrowRatio =
GetUIChild()->JSNode()->TryCData(XFA_Attribute::WideNarrowRatio, true);
if (!wsWideNarrowRatio)
- return false;
+ return {};
pdfium::Optional<size_t> ptPos = wsWideNarrowRatio->Find(':');
- if (!ptPos) {
- *val = static_cast<float>(FXSYS_wtoi(wsWideNarrowRatio->c_str()));
- return true;
- }
+ if (!ptPos)
+ return {static_cast<int8_t>(FXSYS_wtoi(wsWideNarrowRatio->c_str()))};
- *val = 0.0f;
int32_t fB = FXSYS_wtoi(
wsWideNarrowRatio->Right(wsWideNarrowRatio->GetLength() - (*ptPos + 1))
.c_str());
if (!fB)
- return true;
+ return {0};
int32_t fA = FXSYS_wtoi(wsWideNarrowRatio->Left(*ptPos).c_str());
- *val = static_cast<float>(fA) / static_cast<float>(fB);
- return true;
+ float result = static_cast<float>(fA) / static_cast<float>(fB);
+ return {static_cast<int8_t>(result)};
}
-void CXFA_WidgetData::GetPasswordChar(WideString& wsPassWord) {
+WideString CXFA_WidgetData::GetPasswordChar() {
CXFA_Node* pUIChild = GetUIChild();
- if (!pUIChild) {
- wsPassWord = L"*";
- return;
- }
- wsPassWord = pUIChild->JSNode()->GetCData(XFA_Attribute::PasswordChar);
+ return pUIChild ? pUIChild->JSNode()->GetCData(XFA_Attribute::PasswordChar)
+ : L"*";
}
bool CXFA_WidgetData::IsMultiLine() {
@@ -1311,79 +1287,60 @@ bool CXFA_WidgetData::IsMultiLine() {
return pUIChild && pUIChild->JSNode()->GetBoolean(XFA_Attribute::MultiLine);
}
-XFA_ATTRIBUTEENUM CXFA_WidgetData::GetVerticalScrollPolicy() {
- CXFA_Node* pUIChild = GetUIChild();
- if (pUIChild)
- return pUIChild->JSNode()->GetEnum(XFA_Attribute::VScrollPolicy);
- return XFA_ATTRIBUTEENUM_Auto;
-}
-
-int32_t CXFA_WidgetData::GetMaxChars(XFA_Element& eType) {
+std::pair<XFA_Element, int32_t> CXFA_WidgetData::GetMaxChars() {
if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Value, false)) {
if (CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild)) {
switch (pChild->GetElementType()) {
case XFA_Element::Text:
- eType = XFA_Element::Text;
- return pChild->JSNode()->GetInteger(XFA_Attribute::MaxChars);
+ return {XFA_Element::Text,
+ pChild->JSNode()->GetInteger(XFA_Attribute::MaxChars)};
case XFA_Element::ExData: {
- eType = XFA_Element::ExData;
int32_t iMax = pChild->JSNode()->GetInteger(XFA_Attribute::MaxLength);
- return iMax < 0 ? 0 : iMax;
+ return {XFA_Element::ExData, iMax < 0 ? 0 : iMax};
}
default:
break;
}
}
}
- return 0;
+ return {XFA_Element::Unknown, 0};
}
-bool CXFA_WidgetData::GetFracDigits(int32_t& iFracDigits) {
- iFracDigits = -1;
-
+int32_t CXFA_WidgetData::GetFracDigits() {
CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Value, false);
if (!pNode)
- return false;
+ return -1;
CXFA_Node* pChild = pNode->GetChild(0, XFA_Element::Decimal, false);
if (!pChild)
- return false;
-
- pdfium::Optional<int32_t> ret =
- pChild->JSNode()->TryInteger(XFA_Attribute::FracDigits, true);
- if (!ret)
- return false;
+ return -1;
- iFracDigits = *ret;
- return true;
+ return pChild->JSNode()
+ ->TryInteger(XFA_Attribute::FracDigits, true)
+ .value_or(-1);
}
-bool CXFA_WidgetData::GetLeadDigits(int32_t& iLeadDigits) {
- iLeadDigits = -1;
-
+int32_t CXFA_WidgetData::GetLeadDigits() {
CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Value, false);
if (!pNode)
- return false;
+ return -1;
CXFA_Node* pChild = pNode->GetChild(0, XFA_Element::Decimal, false);
if (!pChild)
- return false;
-
- pdfium::Optional<int32_t> ret =
- pChild->JSNode()->TryInteger(XFA_Attribute::LeadDigits, true);
- if (!ret)
- return false;
+ return -1;
- iLeadDigits = *ret;
- return true;
+ return pChild->JSNode()
+ ->TryInteger(XFA_Attribute::LeadDigits, true)
+ .value_or(-1);
}
-bool CXFA_WidgetData::SetValue(const WideString& wsValue,
- XFA_VALUEPICTURE eValueType) {
+bool CXFA_WidgetData::SetValue(XFA_VALUEPICTURE eValueType,
+ const WideString& wsValue) {
if (wsValue.IsEmpty()) {
SyncValue(wsValue, true);
return true;
}
+
m_bPreNull = m_bIsNull;
m_bIsNull = false;
WideString wsNewText(wsValue);
@@ -1397,7 +1354,7 @@ bool CXFA_WidgetData::SetValue(const WideString& wsValue,
XFA_Element eType = pNode->GetElementType();
if (!wsPicture.IsEmpty()) {
CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr();
- IFX_Locale* pLocale = GetLocal();
+ IFX_Locale* pLocale = GetLocale();
CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
bValidate =
widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture);
@@ -1405,24 +1362,16 @@ bool CXFA_WidgetData::SetValue(const WideString& wsValue,
widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNewText,
wsPicture, pLocale, pLocalMgr);
wsNewText = widgetValue.GetValue();
- if (eType == XFA_Element::NumericEdit) {
- int32_t iLeadDigits = 0;
- int32_t iFracDigits = 0;
- GetLeadDigits(iLeadDigits);
- GetFracDigits(iFracDigits);
- wsNewText = NumericLimit(wsNewText, iLeadDigits, iFracDigits);
- }
+ if (eType == XFA_Element::NumericEdit)
+ wsNewText = NumericLimit(wsNewText, GetLeadDigits(), GetFracDigits());
+
bSyncData = true;
}
} else {
if (eType == XFA_Element::NumericEdit) {
- if (wsNewText != L"0") {
- int32_t iLeadDigits = 0;
- int32_t iFracDigits = 0;
- GetLeadDigits(iLeadDigits);
- GetFracDigits(iFracDigits);
- wsNewText = NumericLimit(wsNewText, iLeadDigits, iFracDigits);
- }
+ if (wsNewText != L"0")
+ wsNewText = NumericLimit(wsNewText, GetLeadDigits(), GetFracDigits());
+
bSyncData = true;
}
}
@@ -1450,7 +1399,7 @@ WideString CXFA_WidgetData::GetPictureContent(XFA_VALUEPICTURE ePicture) {
}
}
- IFX_Locale* pLocale = GetLocal();
+ IFX_Locale* pLocale = GetLocale();
if (!pLocale)
return L"";
@@ -1482,7 +1431,7 @@ WideString CXFA_WidgetData::GetPictureContent(XFA_VALUEPICTURE ePicture) {
}
}
- IFX_Locale* pLocale = GetLocal();
+ IFX_Locale* pLocale = GetLocale();
if (!pLocale)
return L"";
@@ -1512,7 +1461,7 @@ WideString CXFA_WidgetData::GetPictureContent(XFA_VALUEPICTURE ePicture) {
return L"";
}
-IFX_Locale* CXFA_WidgetData::GetLocal() {
+IFX_Locale* CXFA_WidgetData::GetLocale() {
if (!m_pNode)
return nullptr;
@@ -1524,9 +1473,8 @@ IFX_Locale* CXFA_WidgetData::GetLocal() {
return m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName(wsLocaleName);
}
-bool CXFA_WidgetData::GetValue(WideString& wsValue,
- XFA_VALUEPICTURE eValueType) {
- wsValue = m_pNode->JSNode()->GetContent(false);
+WideString CXFA_WidgetData::GetValue(XFA_VALUEPICTURE eValueType) {
+ WideString wsValue = m_pNode->JSNode()->GetContent(false);
if (eValueType == XFA_VALUEPICTURE_Display)
GetItemLabel(wsValue.AsStringView(), wsValue);
@@ -1534,36 +1482,32 @@ bool CXFA_WidgetData::GetValue(WideString& wsValue,
WideString wsPicture = GetPictureContent(eValueType);
CXFA_Node* pNode = GetUIChild();
if (!pNode)
- return true;
+ return wsValue;
switch (GetUIChild()->GetElementType()) {
case XFA_Element::ChoiceList: {
if (eValueType == XFA_VALUEPICTURE_Display) {
int32_t iSelItemIndex = GetSelectedItem(0);
if (iSelItemIndex >= 0) {
- GetChoiceListItem(wsValue, iSelItemIndex, false);
+ wsValue = GetChoiceListItem(iSelItemIndex, false).value_or(L"");
wsPicture.clear();
}
}
} break;
case XFA_Element::NumericEdit:
if (eValueType != XFA_VALUEPICTURE_Raw && wsPicture.IsEmpty()) {
- IFX_Locale* pLocale = GetLocal();
- if (eValueType == XFA_VALUEPICTURE_Display && pLocale) {
- WideString wsOutput;
- NormalizeNumStr(wsValue, wsOutput);
- FormatNumStr(wsOutput, pLocale, wsOutput);
- wsValue = wsOutput;
- }
+ IFX_Locale* pLocale = GetLocale();
+ if (eValueType == XFA_VALUEPICTURE_Display && pLocale)
+ wsValue = FormatNumStr(NormalizeNumStr(wsValue), pLocale);
}
break;
default:
break;
}
if (wsPicture.IsEmpty())
- return true;
+ return wsValue;
- if (IFX_Locale* pLocale = GetLocal()) {
+ if (IFX_Locale* pLocale = GetLocale()) {
CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr();
switch (widgetValue.GetType()) {
@@ -1572,7 +1516,7 @@ bool CXFA_WidgetData::GetValue(WideString& wsValue,
if (SplitDateTime(wsValue, wsDate, wsTime)) {
CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr);
if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType))
- return true;
+ return wsValue;
}
break;
}
@@ -1581,7 +1525,7 @@ bool CXFA_WidgetData::GetValue(WideString& wsValue,
if (SplitDateTime(wsValue, wsDate, wsTime)) {
CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr);
if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType))
- return true;
+ return wsValue;
}
break;
}
@@ -1590,51 +1534,47 @@ bool CXFA_WidgetData::GetValue(WideString& wsValue,
}
widgetValue.FormatPatterns(wsValue, wsPicture, pLocale, eValueType);
}
- return true;
+ return wsValue;
}
-bool CXFA_WidgetData::GetNormalizeDataValue(const WideString& wsValue,
- WideString& wsNormalizeValue) {
- wsNormalizeValue = wsValue;
+WideString CXFA_WidgetData::GetNormalizeDataValue(const WideString& wsValue) {
if (wsValue.IsEmpty())
- return true;
+ return L"";
WideString wsPicture = GetPictureContent(XFA_VALUEPICTURE_DataBind);
if (wsPicture.IsEmpty())
- return true;
+ return wsValue;
ASSERT(GetNode());
CXFA_LocaleMgr* pLocalMgr = GetNode()->GetDocument()->GetLocalMgr();
- IFX_Locale* pLocale = GetLocal();
+ IFX_Locale* pLocale = GetLocale();
CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(this);
if (widgetValue.ValidateValue(wsValue, wsPicture, pLocale, &wsPicture)) {
- widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsNormalizeValue,
- wsPicture, pLocale, pLocalMgr);
- wsNormalizeValue = widgetValue.GetValue();
- return true;
+ widgetValue = CXFA_LocaleValue(widgetValue.GetType(), wsValue, wsPicture,
+ pLocale, pLocalMgr);
+ return widgetValue.GetValue();
}
- return false;
+ return wsValue;
}
-bool CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue,
- WideString& wsFormattedValue) {
- wsFormattedValue = wsValue;
+WideString CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue) {
if (wsValue.IsEmpty())
- return true;
+ return L"";
WideString wsPicture = GetPictureContent(XFA_VALUEPICTURE_DataBind);
if (wsPicture.IsEmpty())
- return true;
+ return wsValue;
- if (IFX_Locale* pLocale = GetLocal()) {
+ WideString wsFormattedValue = wsValue;
+ if (IFX_Locale* pLocale = GetLocale()) {
ASSERT(GetNode());
CXFA_Node* pNodeValue = GetNode()->GetChild(0, XFA_Element::Value, false);
if (!pNodeValue)
- return false;
+ return wsValue;
CXFA_Node* pValueChild = pNodeValue->GetNodeItem(XFA_NODEITEM_FirstChild);
if (!pValueChild)
- return false;
+ return wsValue;
int32_t iVTType = XFA_VT_NULL;
switch (pValueChild->GetElementType()) {
@@ -1675,7 +1615,7 @@ bool CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue,
CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr);
if (date.FormatPatterns(wsFormattedValue, wsPicture, pLocale,
XFA_VALUEPICTURE_DataBind)) {
- return true;
+ return wsFormattedValue;
}
}
break;
@@ -1686,7 +1626,7 @@ bool CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue,
CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr);
if (time.FormatPatterns(wsFormattedValue, wsPicture, pLocale,
XFA_VALUEPICTURE_DataBind)) {
- return true;
+ return wsFormattedValue;
}
}
break;
@@ -1697,31 +1637,30 @@ bool CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue,
widgetValue.FormatPatterns(wsFormattedValue, wsPicture, pLocale,
XFA_VALUEPICTURE_DataBind);
}
- return false;
+ return wsFormattedValue;
}
-void CXFA_WidgetData::NormalizeNumStr(const WideString& wsValue,
- WideString& wsOutput) {
+WideString CXFA_WidgetData::NormalizeNumStr(const WideString& wsValue) {
if (wsValue.IsEmpty())
- return;
+ return L"";
- wsOutput = wsValue;
+ WideString wsOutput = wsValue;
wsOutput.TrimLeft('0');
- int32_t iFracDigits = 0;
- if (!wsOutput.IsEmpty() && wsOutput.Contains('.') &&
- (!GetFracDigits(iFracDigits) || iFracDigits != -1)) {
+
+ if (!wsOutput.IsEmpty() && wsOutput.Contains('.') && GetFracDigits() != -1) {
wsOutput.TrimRight(L"0");
wsOutput.TrimRight(L".");
}
if (wsOutput.IsEmpty() || wsOutput[0] == '.')
wsOutput.InsertAtFront('0');
+
+ return wsOutput;
}
-void CXFA_WidgetData::FormatNumStr(const WideString& wsValue,
- IFX_Locale* pLocale,
- WideString& wsOutput) {
+WideString CXFA_WidgetData::FormatNumStr(const WideString& wsValue,
+ IFX_Locale* pLocale) {
if (wsValue.IsEmpty())
- return;
+ return L"";
WideString wsSrcNum = wsValue;
WideString wsGroupSymbol =
@@ -1735,24 +1674,25 @@ void CXFA_WidgetData::FormatNumStr(const WideString& wsValue,
auto dot_index = wsSrcNum.Find('.');
dot_index = !dot_index.has_value() ? wsSrcNum.GetLength() : dot_index;
- if (dot_index.value() >= 1) {
- size_t nPos = dot_index.value() % 3;
- wsOutput.clear();
- for (size_t i = 0; i < dot_index.value(); i++) {
- if (i % 3 == nPos && i != 0)
- wsOutput += wsGroupSymbol;
+ if (dot_index.value() < 1)
+ return L"";
- wsOutput += wsSrcNum[i];
- }
- if (dot_index.value() < wsSrcNum.GetLength()) {
- wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
- wsOutput += wsSrcNum.Right(wsSrcNum.GetLength() - dot_index.value() - 1);
- }
- if (bNeg) {
- wsOutput =
- pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
- }
+ size_t nPos = dot_index.value() % 3;
+ WideString wsOutput;
+ for (size_t i = 0; i < dot_index.value(); i++) {
+ if (i % 3 == nPos && i != 0)
+ wsOutput += wsGroupSymbol;
+
+ wsOutput += wsSrcNum[i];
}
+ if (dot_index.value() < wsSrcNum.GetLength()) {
+ wsOutput += pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
+ wsOutput += wsSrcNum.Right(wsSrcNum.GetLength() - dot_index.value() - 1);
+ }
+ if (bNeg)
+ return pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus) + wsOutput;
+
+ return wsOutput;
}
void CXFA_WidgetData::SyncValue(const WideString& wsValue, bool bNotify) {
@@ -1762,7 +1702,7 @@ void CXFA_WidgetData::SyncValue(const WideString& wsValue, bool bNotify) {
WideString wsFormatValue(wsValue);
CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData();
if (pContainerWidgetData)
- pContainerWidgetData->GetFormatDataValue(wsValue, wsFormatValue);
+ wsFormatValue = pContainerWidgetData->GetFormatDataValue(wsValue);
m_pNode->JSNode()->SetContent(wsValue, wsFormatValue, bNotify, false, true);
}
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.h b/xfa/fxfa/parser/cxfa_widgetdata.h
index c6f07e2f2a..7e17323ec8 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.h
+++ b/xfa/fxfa/parser/cxfa_widgetdata.h
@@ -7,11 +7,13 @@
#ifndef XFA_FXFA_PARSER_CXFA_WIDGETDATA_H_
#define XFA_FXFA_PARSER_CXFA_WIDGETDATA_H_
+#include <utility>
#include <vector>
#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/fx_string.h"
#include "core/fxcrt/fx_system.h"
+#include "fxbarcode/BC_Library.h"
#include "xfa/fxfa/parser/cxfa_binddata.h"
#include "xfa/fxfa/parser/cxfa_borderdata.h"
#include "xfa/fxfa/parser/cxfa_calculatedata.h"
@@ -47,7 +49,7 @@ class CXFA_WidgetData : public CXFA_DataData {
CFX_RectF GetUIMargin();
WideString GetRawValue() const;
- int32_t GetRotate();
+ int32_t GetRotate() const;
bool IsOpenAccess() const;
bool IsListBox();
@@ -67,7 +69,7 @@ class CXFA_WidgetData : public CXFA_DataData {
CXFA_ValidateData GetValidateData(bool bModified);
CXFA_BorderData GetUIBorderData();
- std::vector<CXFA_Node*> GetEventByActivity(int32_t iActivity,
+ std::vector<CXFA_Node*> GetEventByActivity(XFA_ATTRIBUTEENUM iActivity,
bool bIsFormReady);
pdfium::Optional<float> TryWidth();
@@ -78,10 +80,10 @@ class CXFA_WidgetData : public CXFA_DataData {
pdfium::Optional<float> TryMaxHeight();
XFA_ATTRIBUTEENUM GetButtonHighlight();
- bool GetButtonRollover(WideString& wsRollover, bool& bRichText);
- bool GetButtonDown(WideString& wsDown, bool& bRichText);
+ bool HasButtonRollover() const;
+ bool HasButtonDown() const;
- XFA_ATTRIBUTEENUM GetCheckButtonShape();
+ bool IsCheckButtonRound();
XFA_ATTRIBUTEENUM GetCheckButtonMark();
float GetCheckButtonSize();
@@ -99,9 +101,10 @@ class CXFA_WidgetData : public CXFA_DataData {
CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode);
int32_t CountChoiceListItems(bool bSaveValue);
- bool GetChoiceListItem(WideString& wsText, int32_t nIndex, bool bSaveValue);
- XFA_ATTRIBUTEENUM GetChoiceListOpen();
- XFA_ATTRIBUTEENUM GetChoiceListCommitOn();
+ pdfium::Optional<WideString> GetChoiceListItem(int32_t nIndex,
+ bool bSaveValue);
+ bool IsChoiceListMultiSelect();
+ bool IsChoiceListCommitOnSelect();
std::vector<WideString> GetChoiceListItems(bool bSaveValue);
int32_t CountSelectedItems();
@@ -125,49 +128,49 @@ class CXFA_WidgetData : public CXFA_DataData {
bool bScriptModify,
bool bSyncData);
- void GetItemValue(const WideStringView& wsLabel, WideString& wsValue);
+ WideString GetItemValue(const WideStringView& wsLabel);
- int32_t GetHorizontalScrollPolicy();
- XFA_ATTRIBUTEENUM GetVerticalScrollPolicy();
- int32_t GetNumberOfCells();
+ bool IsHorizontalScrollPolicyOff();
+ bool IsVerticalScrollPolicyOff();
+ pdfium::Optional<int32_t> GetNumberOfCells();
- bool SetValue(const WideString& wsValue, XFA_VALUEPICTURE eValueType);
- bool GetValue(WideString& wsValue, XFA_VALUEPICTURE eValueType);
+ bool SetValue(XFA_VALUEPICTURE eValueType, const WideString& wsValue);
+ WideString GetValue(XFA_VALUEPICTURE eValueType);
WideString GetPictureContent(XFA_VALUEPICTURE ePicture);
- IFX_Locale* GetLocal();
+ IFX_Locale* GetLocale();
- bool GetNormalizeDataValue(const WideString& wsValue,
- WideString& wsNormalizeValue);
- bool GetFormatDataValue(const WideString& wsValue,
- WideString& wsFormattedValue);
- void NormalizeNumStr(const WideString& wsValue, WideString& wsOutput);
+ WideString GetNormalizeDataValue(const WideString& wsValue);
+ WideString GetFormatDataValue(const WideString& wsValue);
+ WideString NormalizeNumStr(const WideString& wsValue);
WideString GetBarcodeType();
- bool GetBarcodeAttribute_CharEncoding(int32_t* val);
- bool GetBarcodeAttribute_Checksum(bool* val);
- bool GetBarcodeAttribute_DataLength(int32_t* val);
- bool GetBarcodeAttribute_StartChar(char* val);
- bool GetBarcodeAttribute_EndChar(char* val);
- bool GetBarcodeAttribute_ECLevel(int32_t* val);
- bool GetBarcodeAttribute_ModuleWidth(int32_t* val);
- bool GetBarcodeAttribute_ModuleHeight(int32_t* val);
- bool GetBarcodeAttribute_PrintChecksum(bool* val);
- bool GetBarcodeAttribute_TextLocation(int32_t* val);
- bool GetBarcodeAttribute_Truncate(bool* val);
- bool GetBarcodeAttribute_WideNarrowRatio(float* val);
- void GetPasswordChar(WideString& wsPassWord);
-
- int32_t GetMaxChars(XFA_Element& eType);
- bool GetFracDigits(int32_t& iFracDigits);
- bool GetLeadDigits(int32_t& iLeadDigits);
+ pdfium::Optional<BC_CHAR_ENCODING> GetBarcodeAttribute_CharEncoding();
+ pdfium::Optional<bool> GetBarcodeAttribute_Checksum();
+ pdfium::Optional<int32_t> GetBarcodeAttribute_DataLength();
+ pdfium::Optional<char> GetBarcodeAttribute_StartChar();
+ pdfium::Optional<char> GetBarcodeAttribute_EndChar();
+ pdfium::Optional<int32_t> GetBarcodeAttribute_ECLevel();
+ pdfium::Optional<int32_t> GetBarcodeAttribute_ModuleWidth();
+ pdfium::Optional<int32_t> GetBarcodeAttribute_ModuleHeight();
+ pdfium::Optional<bool> GetBarcodeAttribute_PrintChecksum();
+ pdfium::Optional<BC_TEXT_LOC> GetBarcodeAttribute_TextLocation();
+ pdfium::Optional<bool> GetBarcodeAttribute_Truncate();
+ pdfium::Optional<int8_t> GetBarcodeAttribute_WideNarrowRatio();
+
+ WideString GetPasswordChar();
+ std::pair<XFA_Element, int32_t> GetMaxChars();
+ int32_t GetFracDigits();
+ int32_t GetLeadDigits();
WideString NumericLimit(const WideString& wsValue,
int32_t iLead,
int32_t iTread) const;
- bool m_bIsNull;
- bool m_bPreNull;
+ bool IsPreNull() const { return m_bPreNull; }
+ void SetPreNull(bool val) { m_bPreNull = val; }
+ bool IsNull() const { return m_bIsNull; }
+ void SetIsNull(bool val) { m_bIsNull = val; }
private:
CXFA_BindData GetBindData();
@@ -175,13 +178,13 @@ class CXFA_WidgetData : public CXFA_DataData {
void InsertListTextItem(CXFA_Node* pItems,
const WideString& wsText,
int32_t nIndex);
- void FormatNumStr(const WideString& wsValue,
- IFX_Locale* pLocale,
- WideString& wsOutput);
+ WideString FormatNumStr(const WideString& wsValue, IFX_Locale* pLocale);
CXFA_Node* GetExclGroupNode();
void GetItemLabel(const WideStringView& wsValue, WideString& wsLabel);
std::vector<CXFA_Node*> GetEventList();
+ bool m_bIsNull;
+ bool m_bPreNull;
CXFA_Node* m_pUiChildNode;
XFA_Element m_eUIType;
};
diff --git a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
index 2a3494f276..b2df645ebc 100644
--- a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
+++ b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
@@ -127,7 +127,6 @@ void CreateDataBinding(CXFA_Node* pFormNode,
pFormNode->JSNode()->GetProperty(0, XFA_Element::Value, true));
if (!bDataToForm) {
WideString wsValue;
- WideString wsFormattedValue;
switch (eUIType) {
case XFA_Element::ImageEdit: {
CXFA_ImageData imageData = defValueData.GetImageData();
@@ -141,9 +140,9 @@ void CreateDataBinding(CXFA_Node* pFormNode,
CFX_XMLElement* pXMLDataElement =
static_cast<CFX_XMLElement*>(pDataNode->GetXMLMappingNode());
ASSERT(pXMLDataElement);
- pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue, false,
- false);
+
+ pDataNode->JSNode()->SetAttributeValue(
+ wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
pDataNode->JSNode()->SetCData(XFA_Attribute::ContentType, wsContentType,
false, false);
if (!wsHref.IsEmpty())
@@ -153,7 +152,7 @@ void CreateDataBinding(CXFA_Node* pFormNode,
}
case XFA_Element::ChoiceList:
wsValue = defValueData.GetChildValueContent();
- if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (pWidgetData->IsChoiceListMultiSelect()) {
std::vector<WideString> wsSelTextArray =
pWidgetData->GetSelectedItemsValue();
if (!wsSelTextArray.empty()) {
@@ -174,9 +173,8 @@ void CreateDataBinding(CXFA_Node* pFormNode,
L"dataGroup");
}
} else if (!wsValue.IsEmpty()) {
- pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue,
- false, false);
+ pDataNode->JSNode()->SetAttributeValue(
+ wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
}
break;
case XFA_Element::CheckButton:
@@ -184,9 +182,8 @@ void CreateDataBinding(CXFA_Node* pFormNode,
if (wsValue.IsEmpty())
break;
- pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue, false,
- false);
+ pDataNode->JSNode()->SetAttributeValue(
+ wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
break;
case XFA_Element::ExclGroup: {
CXFA_Node* pChecked = nullptr;
@@ -214,9 +211,8 @@ void CreateDataBinding(CXFA_Node* pFormNode,
WideString wsContent = pText->JSNode()->GetContent(false);
if (wsContent == wsValue) {
pChecked = pChild;
- wsFormattedValue = wsValue;
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue,
- false, false);
+ pDataNode->JSNode()->SetAttributeValue(wsValue, wsValue, false,
+ false);
pFormNode->JSNode()->SetCData(XFA_Attribute::Value, wsContent,
false, false);
break;
@@ -253,12 +249,9 @@ void CreateDataBinding(CXFA_Node* pFormNode,
if (wsValue.IsEmpty())
break;
- WideString wsOutput;
- pWidgetData->NormalizeNumStr(wsValue, wsOutput);
- wsValue = wsOutput;
- pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue, false,
- false);
+ wsValue = pWidgetData->NormalizeNumStr(wsValue);
+ pDataNode->JSNode()->SetAttributeValue(
+ wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
CXFA_Node* pValue =
pFormNode->JSNode()->GetProperty(0, XFA_Element::Value, true);
FormValueNode_SetChildContent(pValue, wsValue, XFA_Element::Float);
@@ -269,18 +262,15 @@ void CreateDataBinding(CXFA_Node* pFormNode,
if (wsValue.IsEmpty())
break;
- pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
- pDataNode->JSNode()->SetAttributeValue(wsValue, wsFormattedValue, false,
- false);
+ pDataNode->JSNode()->SetAttributeValue(
+ wsValue, pWidgetData->GetFormatDataValue(wsValue), false, false);
break;
}
return;
}
WideString wsXMLValue = pDataNode->JSNode()->GetContent(false);
-
- WideString wsNormalizeValue;
- pWidgetData->GetNormalizeDataValue(wsXMLValue, wsNormalizeValue);
+ WideString wsNormalizeValue = pWidgetData->GetNormalizeDataValue(wsXMLValue);
pDataNode->JSNode()->SetAttributeValue(wsNormalizeValue, wsXMLValue, false,
false);
@@ -309,7 +299,7 @@ void CreateDataBinding(CXFA_Node* pFormNode,
break;
}
case XFA_Element::ChoiceList:
- if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
+ if (pWidgetData->IsChoiceListMultiSelect()) {
std::vector<CXFA_Node*> items = pDataNode->GetNodeList(
XFA_NODEFILTER_Children | XFA_NODEFILTER_Properties,
XFA_Element::Unknown);
@@ -352,11 +342,9 @@ void CreateDataBinding(CXFA_Node* pFormNode,
case XFA_Element::NumericEdit: {
WideString wsPicture =
pWidgetData->GetPictureContent(XFA_VALUEPICTURE_DataBind);
- if (wsPicture.IsEmpty()) {
- WideString wsOutput;
- pWidgetData->NormalizeNumStr(wsNormalizeValue, wsOutput);
- wsNormalizeValue = wsOutput;
- }
+ if (wsPicture.IsEmpty())
+ wsNormalizeValue = pWidgetData->NormalizeNumStr(wsNormalizeValue);
+
FormValueNode_SetChildContent(defValueData.GetNode(), wsNormalizeValue,
XFA_Element::Float);
break;