summaryrefslogtreecommitdiff
path: root/xfa/fxfa/parser/xfa_utils_imp.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/parser/xfa_utils_imp.cpp')
-rw-r--r--xfa/fxfa/parser/xfa_utils_imp.cpp316
1 files changed, 89 insertions, 227 deletions
diff --git a/xfa/fxfa/parser/xfa_utils_imp.cpp b/xfa/fxfa/parser/xfa_utils_imp.cpp
index f5da036498..5a7c2d1104 100644
--- a/xfa/fxfa/parser/xfa_utils_imp.cpp
+++ b/xfa/fxfa/parser/xfa_utils_imp.cpp
@@ -16,133 +16,107 @@
#include "xfa/fxfa/parser/xfa_parser.h"
#include "xfa/fxfa/parser/xfa_script.h"
-CXFA_Node* XFA_CreateUIChild(CXFA_Node* pNode, XFA_Element& eWidgetType) {
- XFA_Element eType = pNode->GetElementType();
- eWidgetType = eType;
- if (eType != XFA_Element::Field && eType != XFA_Element::Draw) {
- return nullptr;
+namespace {
+
+const FX_DOUBLE fraction_scales[] = {0.1,
+ 0.01,
+ 0.001,
+ 0.0001,
+ 0.00001,
+ 0.000001,
+ 0.0000001,
+ 0.00000001,
+ 0.000000001,
+ 0.0000000001,
+ 0.00000000001,
+ 0.000000000001,
+ 0.0000000000001,
+ 0.00000000000001,
+ 0.000000000000001,
+ 0.0000000000000001};
+
+FX_DOUBLE WideStringToDouble(const CFX_WideString& wsStringVal) {
+ CFX_WideString wsValue = wsStringVal;
+ wsValue.TrimLeft();
+ wsValue.TrimRight();
+ int64_t nIntegral = 0;
+ uint32_t dwFractional = 0;
+ int32_t nExponent = 0;
+ int32_t cc = 0;
+ bool bNegative = false;
+ bool bExpSign = false;
+ const FX_WCHAR* str = wsValue.c_str();
+ int32_t len = wsValue.GetLength();
+ if (str[0] == '+') {
+ cc++;
+ } else if (str[0] == '-') {
+ bNegative = true;
+ cc++;
}
- eWidgetType = XFA_Element::Unknown;
- XFA_Element eUIType = XFA_Element::Unknown;
- CXFA_Value defValue(pNode->GetProperty(0, XFA_Element::Value, TRUE));
- XFA_Element eValueType = defValue.GetChildValueClassID();
- switch (eValueType) {
- case XFA_Element::Boolean:
- eUIType = XFA_Element::CheckButton;
- break;
- case XFA_Element::Integer:
- case XFA_Element::Decimal:
- case XFA_Element::Float:
- eUIType = XFA_Element::NumericEdit;
- break;
- case XFA_Element::ExData:
- case XFA_Element::Text:
- eUIType = XFA_Element::TextEdit;
- eWidgetType = XFA_Element::Text;
- break;
- case XFA_Element::Date:
- case XFA_Element::Time:
- case XFA_Element::DateTime:
- eUIType = XFA_Element::DateTimeEdit;
- break;
- case XFA_Element::Image:
- eUIType = XFA_Element::ImageEdit;
- eWidgetType = XFA_Element::Image;
- break;
- case XFA_Element::Arc:
- case XFA_Element::Line:
- case XFA_Element::Rectangle:
- eUIType = XFA_Element::DefaultUi;
- eWidgetType = eValueType;
- break;
- default:
+ int32_t nIntegralLen = 0;
+ while (cc < len) {
+ if (str[cc] == '.' || str[cc] == 'E' || str[cc] == 'e' ||
+ nIntegralLen > 17) {
break;
- }
- CXFA_Node* pUIChild = nullptr;
- CXFA_Node* pUI = pNode->GetProperty(0, XFA_Element::Ui, TRUE);
- CXFA_Node* pChild = pUI->GetNodeItem(XFA_NODEITEM_FirstChild);
- for (; pChild; pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling)) {
- XFA_Element eChildType = pChild->GetElementType();
- if (eChildType == XFA_Element::Extras ||
- eChildType == XFA_Element::Picture) {
- continue;
}
- const XFA_PROPERTY* pProperty = XFA_GetPropertyOfElement(
- XFA_Element::Ui, eChildType, XFA_XDPPACKET_Form);
- if (pProperty && (pProperty->uFlags & XFA_PROPERTYFLAG_OneOf)) {
- pUIChild = pChild;
- break;
+ if (!FXSYS_isDecimalDigit(str[cc])) {
+ return 0;
}
+ nIntegral = nIntegral * 10 + str[cc] - '0';
+ cc++;
+ nIntegralLen++;
}
- if (eType == XFA_Element::Draw) {
- XFA_Element eDraw =
- pUIChild ? pUIChild->GetElementType() : XFA_Element::Unknown;
- switch (eDraw) {
- case XFA_Element::TextEdit:
- eWidgetType = XFA_Element::Text;
- break;
- case XFA_Element::ImageEdit:
- eWidgetType = XFA_Element::Image;
+ nIntegral = bNegative ? -nIntegral : nIntegral;
+ int32_t scale = 0;
+ FX_DOUBLE fraction = 0.0;
+ if (cc < len && str[cc] == '.') {
+ cc++;
+ while (cc < len) {
+ fraction += fraction_scales[scale] * (str[cc] - '0');
+ scale++;
+ cc++;
+ if (cc == len) {
break;
- default:
- eWidgetType = eWidgetType == XFA_Element::Unknown ? XFA_Element::Text
- : eWidgetType;
+ }
+ if (scale == sizeof(fraction_scales) / sizeof(FX_DOUBLE) ||
+ str[cc] == 'E' || str[cc] == 'e') {
break;
+ }
+ if (!FXSYS_isDecimalDigit(str[cc])) {
+ return 0;
+ }
}
- } else {
- if (pUIChild && pUIChild->GetElementType() == XFA_Element::DefaultUi) {
- eWidgetType = XFA_Element::TextEdit;
- } else {
- eWidgetType =
- pUIChild ? pUIChild->GetElementType()
- : (eUIType == XFA_Element::Unknown ? XFA_Element::TextEdit
- : eUIType);
- }
+ dwFractional = (uint32_t)(fraction * 4294967296.0);
}
- if (!pUIChild) {
- if (eUIType == XFA_Element::Unknown) {
- eUIType = XFA_Element::TextEdit;
- defValue.GetNode()->GetProperty(0, XFA_Element::Text, TRUE);
+ if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) {
+ cc++;
+ if (cc < len) {
+ if (str[cc] == '+') {
+ cc++;
+ } else if (str[cc] == '-') {
+ bExpSign = true;
+ cc++;
+ }
}
- pUIChild = pUI->GetProperty(0, eUIType, TRUE);
- } else if (eUIType == XFA_Element::Unknown) {
- switch (pUIChild->GetElementType()) {
- case XFA_Element::CheckButton: {
- eValueType = XFA_Element::Text;
- if (CXFA_Node* pItems = pNode->GetChild(0, XFA_Element::Items)) {
- if (CXFA_Node* pItem = pItems->GetChild(0, XFA_Element::Unknown)) {
- eValueType = pItem->GetElementType();
- }
- }
- } break;
- case XFA_Element::DateTimeEdit:
- eValueType = XFA_Element::DateTime;
- break;
- case XFA_Element::ImageEdit:
- eValueType = XFA_Element::Image;
- break;
- case XFA_Element::NumericEdit:
- eValueType = XFA_Element::Float;
- break;
- case XFA_Element::ChoiceList: {
- eValueType = (pUIChild->GetEnum(XFA_ATTRIBUTE_Open) ==
- XFA_ATTRIBUTEENUM_MultiSelect)
- ? XFA_Element::ExData
- : XFA_Element::Text;
- } break;
- case XFA_Element::Barcode:
- case XFA_Element::Button:
- case XFA_Element::PasswordEdit:
- case XFA_Element::Signature:
- case XFA_Element::TextEdit:
- default:
- eValueType = XFA_Element::Text;
- break;
+ while (cc < len) {
+ if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) {
+ return 0;
+ }
+ nExponent = nExponent * 10 + str[cc] - '0';
+ cc++;
}
- defValue.GetNode()->GetProperty(0, eValueType, TRUE);
+ nExponent = bExpSign ? -nExponent : nExponent;
}
- return pUIChild;
+ FX_DOUBLE dValue = (dwFractional / 4294967296.0);
+ dValue = nIntegral + (nIntegral >= 0 ? dValue : -dValue);
+ if (nExponent != 0) {
+ dValue *= FXSYS_pow(10, (FX_FLOAT)nExponent);
+ }
+ return dValue;
}
+
+} // namespace
+
CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData) {
CXFA_Node* pNodeValue =
pWidgetData->GetNode()->GetChild(0, XFA_Element::Value);
@@ -246,122 +220,10 @@ FX_BOOL XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode) {
}
return bRet;
}
-FX_BOOL XFA_IsLayoutElement(XFA_Element eElement, FX_BOOL bLayoutContainer) {
- switch (eElement) {
- case XFA_Element::Draw:
- case XFA_Element::Field:
- case XFA_Element::InstanceManager:
- return !bLayoutContainer;
- case XFA_Element::Area:
- case XFA_Element::Subform:
- case XFA_Element::ExclGroup:
- case XFA_Element::SubformSet:
- case XFA_Element::PageArea:
- case XFA_Element::Form:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static const FX_DOUBLE fraction_scales[] = {0.1,
- 0.01,
- 0.001,
- 0.0001,
- 0.00001,
- 0.000001,
- 0.0000001,
- 0.00000001,
- 0.000000001,
- 0.0000000001,
- 0.00000000001,
- 0.000000000001,
- 0.0000000000001,
- 0.00000000000001,
- 0.000000000000001,
- 0.0000000000000001};
-FX_DOUBLE XFA_WideStringToDouble(const CFX_WideString& wsStringVal) {
- CFX_WideString wsValue = wsStringVal;
- wsValue.TrimLeft();
- wsValue.TrimRight();
- int64_t nIntegral = 0;
- uint32_t dwFractional = 0;
- int32_t nExponent = 0;
- int32_t cc = 0;
- FX_BOOL bNegative = FALSE, bExpSign = FALSE;
- const FX_WCHAR* str = wsValue.c_str();
- int32_t len = wsValue.GetLength();
- if (str[0] == '+') {
- cc++;
- } else if (str[0] == '-') {
- bNegative = TRUE;
- cc++;
- }
- int32_t nIntegralLen = 0;
- while (cc < len) {
- if (str[cc] == '.' || str[cc] == 'E' || str[cc] == 'e' ||
- nIntegralLen > 17) {
- break;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
- return 0;
- }
- nIntegral = nIntegral * 10 + str[cc] - '0';
- cc++;
- nIntegralLen++;
- }
- nIntegral = bNegative ? -nIntegral : nIntegral;
- int32_t scale = 0;
- FX_DOUBLE fraction = 0.0;
- if (cc < len && str[cc] == '.') {
- cc++;
- while (cc < len) {
- fraction += fraction_scales[scale] * (str[cc] - '0');
- scale++;
- cc++;
- if (cc == len) {
- break;
- }
- if (scale == sizeof(fraction_scales) / sizeof(FX_DOUBLE) ||
- str[cc] == 'E' || str[cc] == 'e') {
- break;
- }
- if (!FXSYS_isDecimalDigit(str[cc])) {
- return 0;
- }
- }
- dwFractional = (uint32_t)(fraction * 4294967296.0);
- }
- if (cc < len && (str[cc] == 'E' || str[cc] == 'e')) {
- cc++;
- if (cc < len) {
- if (str[cc] == '+') {
- cc++;
- } else if (str[cc] == '-') {
- bExpSign = TRUE;
- cc++;
- }
- }
- while (cc < len) {
- if (str[cc] == '.' || !FXSYS_isDecimalDigit(str[cc])) {
- return 0;
- }
- nExponent = nExponent * 10 + str[cc] - '0';
- cc++;
- }
- nExponent = bExpSign ? -nExponent : nExponent;
- }
- FX_DOUBLE dValue = (dwFractional / 4294967296.0);
- dValue = nIntegral + (nIntegral >= 0 ? dValue : -dValue);
- if (nExponent != 0) {
- dValue *= FXSYS_pow(10, (FX_FLOAT)nExponent);
- }
- return dValue;
-}
FX_DOUBLE XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal) {
CFX_WideString wsValue = CFX_WideString::FromUTF8(szStringVal);
- return XFA_WideStringToDouble(wsValue);
+ return WideStringToDouble(wsValue);
}
int32_t XFA_MapRotation(int32_t nRotation) {