| Index: xfa/fxfa/parser/cxfa_occur.cpp
|
| diff --git a/xfa/fxfa/parser/cxfa_occur.cpp b/xfa/fxfa/parser/cxfa_occur.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6d105abec6c375064eea759eec1157dddbd4369e
|
| --- /dev/null
|
| +++ b/xfa/fxfa/parser/cxfa_occur.cpp
|
| @@ -0,0 +1,67 @@
|
| +// Copyright 2016 PDFium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
| +
|
| +#include "xfa/fxfa/parser/cxfa_occur.h"
|
| +
|
| +#include "xfa/fxfa/parser/xfa_object.h"
|
| +
|
| +CXFA_Occur::CXFA_Occur(CXFA_Node* pNode) : CXFA_Data(pNode) {}
|
| +
|
| +int32_t CXFA_Occur::GetMax() {
|
| + int32_t iMax = 1;
|
| + if (m_pNode) {
|
| + if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, TRUE))
|
| + iMax = GetMin();
|
| + }
|
| + return iMax;
|
| +}
|
| +
|
| +int32_t CXFA_Occur::GetMin() {
|
| + int32_t iMin = 1;
|
| + if (m_pNode) {
|
| + if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, TRUE) || iMin < 0)
|
| + iMin = 1;
|
| + }
|
| + return iMin;
|
| +}
|
| +
|
| +FX_BOOL CXFA_Occur::GetOccurInfo(int32_t& iMin, int32_t& iMax, int32_t& iInit) {
|
| + if (!m_pNode)
|
| + return FALSE;
|
| + if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Min, iMin, FALSE) || iMin < 0)
|
| + iMin = 1;
|
| + if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Max, iMax, FALSE)) {
|
| + if (iMin == 0)
|
| + iMax = 1;
|
| + else
|
| + iMax = iMin;
|
| + }
|
| + if (!m_pNode->TryInteger(XFA_ATTRIBUTE_Initial, iInit, FALSE) ||
|
| + iInit < iMin) {
|
| + iInit = iMin;
|
| + }
|
| + return TRUE;
|
| +}
|
| +
|
| +void CXFA_Occur::SetMax(int32_t iMax) {
|
| + iMax = (iMax != -1 && iMax < 1) ? 1 : iMax;
|
| + m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE);
|
| + int32_t iMin = GetMin();
|
| + if (iMax != -1 && iMax < iMin) {
|
| + iMin = iMax;
|
| + m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE);
|
| + }
|
| +}
|
| +
|
| +void CXFA_Occur::SetMin(int32_t iMin) {
|
| + iMin = (iMin < 0) ? 1 : iMin;
|
| + m_pNode->SetInteger(XFA_ATTRIBUTE_Min, iMin, FALSE);
|
| + int32_t iMax = GetMax();
|
| + if (iMax > 0 && iMax < iMin) {
|
| + iMax = iMin;
|
| + m_pNode->SetInteger(XFA_ATTRIBUTE_Max, iMax, FALSE);
|
| + }
|
| +}
|
|
|