diff options
Diffstat (limited to 'xfa/fxfa/parser')
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.cpp | 156 | ||||
-rw-r--r-- | xfa/fxfa/parser/cxfa_node.h | 16 |
2 files changed, 172 insertions, 0 deletions
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index 8c8f0c69f2..1da6f56781 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -2054,3 +2054,159 @@ std::pair<int32_t, bool> CXFA_Node::ExecuteBoolScript( return {iRet, pTmpRetValue->IsBoolean() ? pTmpRetValue->ToBoolean() : false}; } + +WideString CXFA_Node::GetBarcodeType() { + CXFA_Node* pUIChild = GetWidgetAcc()->GetUIChild(); + return pUIChild + ? WideString(pUIChild->JSObject()->GetCData(XFA_Attribute::Type)) + : WideString(); +} + +Optional<BC_CHAR_ENCODING> CXFA_Node::GetBarcodeAttribute_CharEncoding() { + Optional<WideString> wsCharEncoding = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData( + XFA_Attribute::CharEncoding, true); + if (!wsCharEncoding) + return {}; + if (wsCharEncoding->CompareNoCase(L"UTF-16")) + return {CHAR_ENCODING_UNICODE}; + if (wsCharEncoding->CompareNoCase(L"UTF-8")) + return {CHAR_ENCODING_UTF8}; + return {}; +} + +Optional<bool> CXFA_Node::GetBarcodeAttribute_Checksum() { + Optional<XFA_AttributeEnum> checksum = + GetWidgetAcc()->GetUIChild()->JSObject()->TryEnum(XFA_Attribute::Checksum, + true); + if (!checksum) + return {}; + + switch (*checksum) { + case XFA_AttributeEnum::None: + return {false}; + case XFA_AttributeEnum::Auto: + return {true}; + case XFA_AttributeEnum::Checksum_1mod10: + case XFA_AttributeEnum::Checksum_1mod10_1mod11: + case XFA_AttributeEnum::Checksum_2mod10: + default: + break; + } + return {}; +} + +Optional<int32_t> CXFA_Node::GetBarcodeAttribute_DataLength() { + Optional<WideString> wsDataLength = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData( + XFA_Attribute::DataLength, true); + if (!wsDataLength) + return {}; + + return {FXSYS_wtoi(wsDataLength->c_str())}; +} + +Optional<char> CXFA_Node::GetBarcodeAttribute_StartChar() { + Optional<WideString> wsStartEndChar = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData( + XFA_Attribute::StartChar, true); + if (!wsStartEndChar || wsStartEndChar->IsEmpty()) + return {}; + + return {static_cast<char>((*wsStartEndChar)[0])}; +} + +Optional<char> CXFA_Node::GetBarcodeAttribute_EndChar() { + Optional<WideString> wsStartEndChar = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData(XFA_Attribute::EndChar, + true); + if (!wsStartEndChar || wsStartEndChar->IsEmpty()) + return {}; + + return {static_cast<char>((*wsStartEndChar)[0])}; +} + +Optional<int32_t> CXFA_Node::GetBarcodeAttribute_ECLevel() { + Optional<WideString> wsECLevel = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData( + XFA_Attribute::ErrorCorrectionLevel, true); + if (!wsECLevel) + return {}; + return {FXSYS_wtoi(wsECLevel->c_str())}; +} + +Optional<int32_t> CXFA_Node::GetBarcodeAttribute_ModuleWidth() { + Optional<CXFA_Measurement> moduleWidthHeight = + GetWidgetAcc()->GetUIChild()->JSObject()->TryMeasure( + XFA_Attribute::ModuleWidth, true); + if (!moduleWidthHeight) + return {}; + + return {static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt))}; +} + +Optional<int32_t> CXFA_Node::GetBarcodeAttribute_ModuleHeight() { + Optional<CXFA_Measurement> moduleWidthHeight = + GetWidgetAcc()->GetUIChild()->JSObject()->TryMeasure( + XFA_Attribute::ModuleHeight, true); + if (!moduleWidthHeight) + return {}; + + return {static_cast<int32_t>(moduleWidthHeight->ToUnit(XFA_Unit::Pt))}; +} + +Optional<bool> CXFA_Node::GetBarcodeAttribute_PrintChecksum() { + return GetWidgetAcc()->GetUIChild()->JSObject()->TryBoolean( + XFA_Attribute::PrintCheckDigit, true); +} + +Optional<BC_TEXT_LOC> CXFA_Node::GetBarcodeAttribute_TextLocation() { + Optional<XFA_AttributeEnum> textLocation = + GetWidgetAcc()->GetUIChild()->JSObject()->TryEnum( + XFA_Attribute::TextLocation, true); + if (!textLocation) + return {}; + + switch (*textLocation) { + case XFA_AttributeEnum::None: + return {BC_TEXT_LOC_NONE}; + case XFA_AttributeEnum::Above: + return {BC_TEXT_LOC_ABOVE}; + case XFA_AttributeEnum::Below: + return {BC_TEXT_LOC_BELOW}; + case XFA_AttributeEnum::AboveEmbedded: + return {BC_TEXT_LOC_ABOVEEMBED}; + case XFA_AttributeEnum::BelowEmbedded: + return {BC_TEXT_LOC_BELOWEMBED}; + default: + break; + } + return {}; +} + +Optional<bool> CXFA_Node::GetBarcodeAttribute_Truncate() { + return GetWidgetAcc()->GetUIChild()->JSObject()->TryBoolean( + XFA_Attribute::Truncate, true); +} + +Optional<int8_t> CXFA_Node::GetBarcodeAttribute_WideNarrowRatio() { + Optional<WideString> wsWideNarrowRatio = + GetWidgetAcc()->GetUIChild()->JSObject()->TryCData( + XFA_Attribute::WideNarrowRatio, true); + if (!wsWideNarrowRatio) + return {}; + + Optional<size_t> ptPos = wsWideNarrowRatio->Find(':'); + if (!ptPos) + return {static_cast<int8_t>(FXSYS_wtoi(wsWideNarrowRatio->c_str()))}; + + int32_t fB = FXSYS_wtoi( + wsWideNarrowRatio->Right(wsWideNarrowRatio->GetLength() - (*ptPos + 1)) + .c_str()); + if (!fB) + return {0}; + + int32_t fA = FXSYS_wtoi(wsWideNarrowRatio->Left(*ptPos).c_str()); + float result = static_cast<float>(fA) / static_cast<float>(fB); + return {static_cast<int8_t>(result)}; +} diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h index 7bf0654b58..1f11a2372f 100644 --- a/xfa/fxfa/parser/cxfa_node.h +++ b/xfa/fxfa/parser/cxfa_node.h @@ -15,6 +15,7 @@ #include "core/fxcrt/fx_string.h" #include "core/fxcrt/ifx_locale.h" #include "core/fxge/fx_dib.h" +#include "fxbarcode/BC_Library.h" #include "fxjs/xfa/cjx_node.h" #include "third_party/base/optional.h" #include "xfa/fxfa/parser/cxfa_object.h" @@ -279,6 +280,21 @@ class CXFA_Node : public CXFA_Object { CXFA_Script* script, CXFA_EventParam* pEventParam); + // TODO(dsinclair): Figure out how to move this to cxfa_barcode. + WideString GetBarcodeType(); + Optional<BC_CHAR_ENCODING> GetBarcodeAttribute_CharEncoding(); + Optional<bool> GetBarcodeAttribute_Checksum(); + Optional<int32_t> GetBarcodeAttribute_DataLength(); + Optional<char> GetBarcodeAttribute_StartChar(); + Optional<char> GetBarcodeAttribute_EndChar(); + Optional<int32_t> GetBarcodeAttribute_ECLevel(); + Optional<int32_t> GetBarcodeAttribute_ModuleWidth(); + Optional<int32_t> GetBarcodeAttribute_ModuleHeight(); + Optional<bool> GetBarcodeAttribute_PrintChecksum(); + Optional<BC_TEXT_LOC> GetBarcodeAttribute_TextLocation(); + Optional<bool> GetBarcodeAttribute_Truncate(); + Optional<int8_t> GetBarcodeAttribute_WideNarrowRatio(); + protected: CXFA_Node(CXFA_Document* pDoc, XFA_PacketType ePacket, |