| Index: xfa/fxfa/parser/xfa_utils_imp.cpp
|
| diff --git a/xfa/fxfa/parser/xfa_utils_imp.cpp b/xfa/fxfa/parser/xfa_utils_imp.cpp
|
| index f5da036498dbe07bc741168521d91cf193bce4c5..5a7c2d1104051042a643616d7c8943ab5468a318 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) {
|
|
|