| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "xfa/fxfa/parser/xfa_basic_imp.h" | 7 #include "xfa/fxfa/parser/xfa_basic_imp.h" |
| 8 | 8 |
| 9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
| 10 #include "xfa/fgas/crt/fgas_algorithm.h" | 10 #include "xfa/fgas/crt/fgas_algorithm.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 return pInfo; | 35 return pInfo; |
| 36 } else if (uHash < pInfo->uHash) { | 36 } else if (uHash < pInfo->uHash) { |
| 37 iEnd = iMid - 1; | 37 iEnd = iMid - 1; |
| 38 } else { | 38 } else { |
| 39 iStart = iMid + 1; | 39 iStart = iMid + 1; |
| 40 } | 40 } |
| 41 } while (iStart <= iEnd); | 41 } while (iStart <= iEnd); |
| 42 return NULL; | 42 return NULL; |
| 43 } | 43 } |
| 44 | 44 |
| 45 const XFA_PACKETINFO* XFA_GetPacketByID(FX_DWORD dwPacket) { | 45 const XFA_PACKETINFO* XFA_GetPacketByID(uint32_t dwPacket) { |
| 46 int32_t iStart = 0, iEnd = g_iXFAPacketCount - 1; | 46 int32_t iStart = 0, iEnd = g_iXFAPacketCount - 1; |
| 47 do { | 47 do { |
| 48 int32_t iMid = (iStart + iEnd) / 2; | 48 int32_t iMid = (iStart + iEnd) / 2; |
| 49 FX_DWORD dwFind = (g_XFAPacketData + iMid)->eName; | 49 uint32_t dwFind = (g_XFAPacketData + iMid)->eName; |
| 50 if (dwPacket == dwFind) { | 50 if (dwPacket == dwFind) { |
| 51 return g_XFAPacketData + iMid; | 51 return g_XFAPacketData + iMid; |
| 52 } else if (dwPacket < dwFind) { | 52 } else if (dwPacket < dwFind) { |
| 53 iEnd = iMid - 1; | 53 iEnd = iMid - 1; |
| 54 } else { | 54 } else { |
| 55 iStart = iMid + 1; | 55 iStart = iMid + 1; |
| 56 } | 56 } |
| 57 } while (iStart <= iEnd); | 57 } while (iStart <= iEnd); |
| 58 return NULL; | 58 return NULL; |
| 59 } | 59 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 109 } while (iStart <= iEnd); | 109 } while (iStart <= iEnd); |
| 110 return NULL; | 110 return NULL; |
| 111 } | 111 } |
| 112 const XFA_ATTRIBUTEINFO* XFA_GetAttributeByID(XFA_ATTRIBUTE eName) { | 112 const XFA_ATTRIBUTEINFO* XFA_GetAttributeByID(XFA_ATTRIBUTE eName) { |
| 113 return (eName < g_iXFAAttributeCount) ? (g_XFAAttributeData + eName) : NULL; | 113 return (eName < g_iXFAAttributeCount) ? (g_XFAAttributeData + eName) : NULL; |
| 114 } | 114 } |
| 115 FX_BOOL XFA_GetAttributeDefaultValue(void*& pValue, | 115 FX_BOOL XFA_GetAttributeDefaultValue(void*& pValue, |
| 116 XFA_ELEMENT eElement, | 116 XFA_ELEMENT eElement, |
| 117 XFA_ATTRIBUTE eAttribute, | 117 XFA_ATTRIBUTE eAttribute, |
| 118 XFA_ATTRIBUTETYPE eType, | 118 XFA_ATTRIBUTETYPE eType, |
| 119 FX_DWORD dwPacket) { | 119 uint32_t dwPacket) { |
| 120 const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); | 120 const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); |
| 121 if (pInfo == NULL) { | 121 if (pInfo == NULL) { |
| 122 return FALSE; | 122 return FALSE; |
| 123 } | 123 } |
| 124 if (dwPacket && (dwPacket & pInfo->dwPackets) == 0) { | 124 if (dwPacket && (dwPacket & pInfo->dwPackets) == 0) { |
| 125 return FALSE; | 125 return FALSE; |
| 126 } | 126 } |
| 127 if (pInfo->eType == eType) { | 127 if (pInfo->eType == eType) { |
| 128 pValue = pInfo->pDefValue; | 128 pValue = pInfo->pDefValue; |
| 129 return TRUE; | 129 return TRUE; |
| 130 } else if (pInfo->eType == XFA_ATTRIBUTETYPE_NOTSURE) { | 130 } else if (pInfo->eType == XFA_ATTRIBUTETYPE_NOTSURE) { |
| 131 const XFA_NOTSUREATTRIBUTE* pAttr = | 131 const XFA_NOTSUREATTRIBUTE* pAttr = |
| 132 XFA_GetNotsureAttribute(eElement, eAttribute, eType); | 132 XFA_GetNotsureAttribute(eElement, eAttribute, eType); |
| 133 if (pAttr) { | 133 if (pAttr) { |
| 134 pValue = pAttr->pValue; | 134 pValue = pAttr->pValue; |
| 135 return TRUE; | 135 return TRUE; |
| 136 } | 136 } |
| 137 } | 137 } |
| 138 return FALSE; | 138 return FALSE; |
| 139 } | 139 } |
| 140 XFA_ATTRIBUTEENUM XFA_GetAttributeDefaultValue_Enum(XFA_ELEMENT eElement, | 140 XFA_ATTRIBUTEENUM XFA_GetAttributeDefaultValue_Enum(XFA_ELEMENT eElement, |
| 141 XFA_ATTRIBUTE eAttribute, | 141 XFA_ATTRIBUTE eAttribute, |
| 142 FX_DWORD dwPacket) { | 142 uint32_t dwPacket) { |
| 143 void* pValue; | 143 void* pValue; |
| 144 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, | 144 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, |
| 145 XFA_ATTRIBUTETYPE_Enum, dwPacket)) { | 145 XFA_ATTRIBUTETYPE_Enum, dwPacket)) { |
| 146 return (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; | 146 return (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; |
| 147 } | 147 } |
| 148 return XFA_ATTRIBUTEENUM_Unknown; | 148 return XFA_ATTRIBUTEENUM_Unknown; |
| 149 } | 149 } |
| 150 CFX_WideStringC XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT eElement, | 150 CFX_WideStringC XFA_GetAttributeDefaultValue_Cdata(XFA_ELEMENT eElement, |
| 151 XFA_ATTRIBUTE eAttribute, | 151 XFA_ATTRIBUTE eAttribute, |
| 152 FX_DWORD dwPacket) { | 152 uint32_t dwPacket) { |
| 153 void* pValue; | 153 void* pValue; |
| 154 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, | 154 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, |
| 155 XFA_ATTRIBUTETYPE_Cdata, dwPacket)) { | 155 XFA_ATTRIBUTETYPE_Cdata, dwPacket)) { |
| 156 return (const FX_WCHAR*)pValue; | 156 return (const FX_WCHAR*)pValue; |
| 157 } | 157 } |
| 158 return NULL; | 158 return NULL; |
| 159 } | 159 } |
| 160 FX_BOOL XFA_GetAttributeDefaultValue_Boolean(XFA_ELEMENT eElement, | 160 FX_BOOL XFA_GetAttributeDefaultValue_Boolean(XFA_ELEMENT eElement, |
| 161 XFA_ATTRIBUTE eAttribute, | 161 XFA_ATTRIBUTE eAttribute, |
| 162 FX_DWORD dwPacket) { | 162 uint32_t dwPacket) { |
| 163 void* pValue; | 163 void* pValue; |
| 164 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, | 164 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, |
| 165 XFA_ATTRIBUTETYPE_Boolean, dwPacket)) { | 165 XFA_ATTRIBUTETYPE_Boolean, dwPacket)) { |
| 166 return (FX_BOOL)(uintptr_t)pValue; | 166 return (FX_BOOL)(uintptr_t)pValue; |
| 167 } | 167 } |
| 168 return FALSE; | 168 return FALSE; |
| 169 } | 169 } |
| 170 int32_t XFA_GetAttributeDefaultValue_Integer(XFA_ELEMENT eElement, | 170 int32_t XFA_GetAttributeDefaultValue_Integer(XFA_ELEMENT eElement, |
| 171 XFA_ATTRIBUTE eAttribute, | 171 XFA_ATTRIBUTE eAttribute, |
| 172 FX_DWORD dwPacket) { | 172 uint32_t dwPacket) { |
| 173 void* pValue; | 173 void* pValue; |
| 174 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, | 174 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, |
| 175 XFA_ATTRIBUTETYPE_Integer, dwPacket)) { | 175 XFA_ATTRIBUTETYPE_Integer, dwPacket)) { |
| 176 return (int32_t)(uintptr_t)pValue; | 176 return (int32_t)(uintptr_t)pValue; |
| 177 } | 177 } |
| 178 return 0; | 178 return 0; |
| 179 } | 179 } |
| 180 CXFA_Measurement XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT eElement, | 180 CXFA_Measurement XFA_GetAttributeDefaultValue_Measure(XFA_ELEMENT eElement, |
| 181 XFA_ATTRIBUTE eAttribute, | 181 XFA_ATTRIBUTE eAttribute, |
| 182 FX_DWORD dwPacket) { | 182 uint32_t dwPacket) { |
| 183 void* pValue; | 183 void* pValue; |
| 184 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, | 184 if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute, |
| 185 XFA_ATTRIBUTETYPE_Measure, dwPacket)) { | 185 XFA_ATTRIBUTETYPE_Measure, dwPacket)) { |
| 186 return *(CXFA_Measurement*)pValue; | 186 return *(CXFA_Measurement*)pValue; |
| 187 } | 187 } |
| 188 return CXFA_Measurement(); | 188 return CXFA_Measurement(); |
| 189 } | 189 } |
| 190 int32_t XFA_GetElementCount() { | 190 int32_t XFA_GetElementCount() { |
| 191 return g_iXFAElementCount; | 191 return g_iXFAElementCount; |
| 192 } | 192 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 const uint8_t* XFA_GetElementAttributes(XFA_ELEMENT eElement, int32_t& iCount) { | 224 const uint8_t* XFA_GetElementAttributes(XFA_ELEMENT eElement, int32_t& iCount) { |
| 225 if (eElement >= g_iXFAElementCount) { | 225 if (eElement >= g_iXFAElementCount) { |
| 226 return NULL; | 226 return NULL; |
| 227 } | 227 } |
| 228 const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementAttributeIndex + eElement; | 228 const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementAttributeIndex + eElement; |
| 229 iCount = pElement->wCount; | 229 iCount = pElement->wCount; |
| 230 return g_XFAElementAttributeData + pElement->wStart; | 230 return g_XFAElementAttributeData + pElement->wStart; |
| 231 } | 231 } |
| 232 const XFA_ATTRIBUTEINFO* XFA_GetAttributeOfElement(XFA_ELEMENT eElement, | 232 const XFA_ATTRIBUTEINFO* XFA_GetAttributeOfElement(XFA_ELEMENT eElement, |
| 233 XFA_ATTRIBUTE eAttribute, | 233 XFA_ATTRIBUTE eAttribute, |
| 234 FX_DWORD dwPacket) { | 234 uint32_t dwPacket) { |
| 235 int32_t iCount = 0; | 235 int32_t iCount = 0; |
| 236 const uint8_t* pAttr = XFA_GetElementAttributes(eElement, iCount); | 236 const uint8_t* pAttr = XFA_GetElementAttributes(eElement, iCount); |
| 237 if (pAttr == NULL || iCount < 1) { | 237 if (pAttr == NULL || iCount < 1) { |
| 238 return NULL; | 238 return NULL; |
| 239 } | 239 } |
| 240 CFX_DSPATemplate<uint8_t> search; | 240 CFX_DSPATemplate<uint8_t> search; |
| 241 int32_t index = search.Lookup(eAttribute, pAttr, iCount); | 241 int32_t index = search.Lookup(eAttribute, pAttr, iCount); |
| 242 if (index < 0) { | 242 if (index < 0) { |
| 243 return NULL; | 243 return NULL; |
| 244 } | 244 } |
| 245 const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); | 245 const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttribute); |
| 246 ASSERT(pInfo); | 246 ASSERT(pInfo); |
| 247 if (dwPacket == XFA_XDPPACKET_UNKNOWN) | 247 if (dwPacket == XFA_XDPPACKET_UNKNOWN) |
| 248 return pInfo; | 248 return pInfo; |
| 249 return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; | 249 return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; |
| 250 } | 250 } |
| 251 const XFA_ELEMENTINFO* XFA_GetChildOfElement(XFA_ELEMENT eElement, | 251 const XFA_ELEMENTINFO* XFA_GetChildOfElement(XFA_ELEMENT eElement, |
| 252 XFA_ELEMENT eChild, | 252 XFA_ELEMENT eChild, |
| 253 FX_DWORD dwPacket) { | 253 uint32_t dwPacket) { |
| 254 int32_t iCount = 0; | 254 int32_t iCount = 0; |
| 255 const uint16_t* pChild = XFA_GetElementChildren(eElement, iCount); | 255 const uint16_t* pChild = XFA_GetElementChildren(eElement, iCount); |
| 256 if (pChild == NULL || iCount < 1) { | 256 if (pChild == NULL || iCount < 1) { |
| 257 return NULL; | 257 return NULL; |
| 258 } | 258 } |
| 259 CFX_DSPATemplate<uint16_t> search; | 259 CFX_DSPATemplate<uint16_t> search; |
| 260 int32_t index = search.Lookup(eChild, pChild, iCount); | 260 int32_t index = search.Lookup(eChild, pChild, iCount); |
| 261 if (index < 0) { | 261 if (index < 0) { |
| 262 return NULL; | 262 return NULL; |
| 263 } | 263 } |
| 264 const XFA_ELEMENTINFO* pInfo = XFA_GetElementByID(eChild); | 264 const XFA_ELEMENTINFO* pInfo = XFA_GetElementByID(eChild); |
| 265 ASSERT(pInfo); | 265 ASSERT(pInfo); |
| 266 if (dwPacket == XFA_XDPPACKET_UNKNOWN) | 266 if (dwPacket == XFA_XDPPACKET_UNKNOWN) |
| 267 return pInfo; | 267 return pInfo; |
| 268 return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; | 268 return (dwPacket & pInfo->dwPackets) ? pInfo : NULL; |
| 269 } | 269 } |
| 270 const XFA_PROPERTY* XFA_GetElementProperties(XFA_ELEMENT eElement, | 270 const XFA_PROPERTY* XFA_GetElementProperties(XFA_ELEMENT eElement, |
| 271 int32_t& iCount) { | 271 int32_t& iCount) { |
| 272 if (eElement >= g_iXFAElementCount) { | 272 if (eElement >= g_iXFAElementCount) { |
| 273 return NULL; | 273 return NULL; |
| 274 } | 274 } |
| 275 const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementPropertyIndex + eElement; | 275 const XFA_ELEMENTHIERARCHY* pElement = g_XFAElementPropertyIndex + eElement; |
| 276 iCount = pElement->wCount; | 276 iCount = pElement->wCount; |
| 277 return g_XFAElementPropertyData + pElement->wStart; | 277 return g_XFAElementPropertyData + pElement->wStart; |
| 278 } | 278 } |
| 279 const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_ELEMENT eElement, | 279 const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_ELEMENT eElement, |
| 280 XFA_ELEMENT eProperty, | 280 XFA_ELEMENT eProperty, |
| 281 FX_DWORD dwPacket) { | 281 uint32_t dwPacket) { |
| 282 int32_t iCount = 0; | 282 int32_t iCount = 0; |
| 283 const XFA_PROPERTY* pProperty = XFA_GetElementProperties(eElement, iCount); | 283 const XFA_PROPERTY* pProperty = XFA_GetElementProperties(eElement, iCount); |
| 284 if (pProperty == NULL || iCount < 1) { | 284 if (pProperty == NULL || iCount < 1) { |
| 285 return NULL; | 285 return NULL; |
| 286 } | 286 } |
| 287 int32_t iStart = 0, iEnd = iCount - 1, iMid; | 287 int32_t iStart = 0, iEnd = iCount - 1, iMid; |
| 288 do { | 288 do { |
| 289 iMid = (iStart + iEnd) / 2; | 289 iMid = (iStart + iEnd) / 2; |
| 290 XFA_ELEMENT eName = (XFA_ELEMENT)pProperty[iMid].eName; | 290 XFA_ELEMENT eName = (XFA_ELEMENT)pProperty[iMid].eName; |
| 291 if (eProperty == eName) { | 291 if (eProperty == eName) { |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 553 : m_wsBuffer(wsBuffer), m_iPosition(0), m_iRefCount(1) {} | 553 : m_wsBuffer(wsBuffer), m_iPosition(0), m_iRefCount(1) {} |
| 554 void CXFA_WideTextRead::Release() { | 554 void CXFA_WideTextRead::Release() { |
| 555 if (--m_iRefCount < 1) { | 555 if (--m_iRefCount < 1) { |
| 556 delete this; | 556 delete this; |
| 557 } | 557 } |
| 558 } | 558 } |
| 559 IFX_Stream* CXFA_WideTextRead::Retain() { | 559 IFX_Stream* CXFA_WideTextRead::Retain() { |
| 560 m_iRefCount++; | 560 m_iRefCount++; |
| 561 return this; | 561 return this; |
| 562 } | 562 } |
| 563 FX_DWORD CXFA_WideTextRead::GetAccessModes() const { | 563 uint32_t CXFA_WideTextRead::GetAccessModes() const { |
| 564 return FX_STREAMACCESS_Read | FX_STREAMACCESS_Text; | 564 return FX_STREAMACCESS_Read | FX_STREAMACCESS_Text; |
| 565 } | 565 } |
| 566 int32_t CXFA_WideTextRead::GetLength() const { | 566 int32_t CXFA_WideTextRead::GetLength() const { |
| 567 return m_wsBuffer.GetLength() * sizeof(FX_WCHAR); | 567 return m_wsBuffer.GetLength() * sizeof(FX_WCHAR); |
| 568 } | 568 } |
| 569 int32_t CXFA_WideTextRead::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { | 569 int32_t CXFA_WideTextRead::Seek(FX_STREAMSEEK eSeek, int32_t iOffset) { |
| 570 switch (eSeek) { | 570 switch (eSeek) { |
| 571 case FX_STREAMSEEK_Begin: | 571 case FX_STREAMSEEK_Begin: |
| 572 m_iPosition = iOffset; | 572 m_iPosition = iOffset; |
| 573 break; | 573 break; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 603 m_iPosition += iMaxLength; | 603 m_iPosition += iMaxLength; |
| 604 bEOS = IsEOF(); | 604 bEOS = IsEOF(); |
| 605 return iMaxLength; | 605 return iMaxLength; |
| 606 } | 606 } |
| 607 uint16_t CXFA_WideTextRead::GetCodePage() const { | 607 uint16_t CXFA_WideTextRead::GetCodePage() const { |
| 608 return (sizeof(FX_WCHAR) == 2) ? FX_CODEPAGE_UTF16LE : FX_CODEPAGE_UTF32LE; | 608 return (sizeof(FX_WCHAR) == 2) ? FX_CODEPAGE_UTF16LE : FX_CODEPAGE_UTF32LE; |
| 609 } | 609 } |
| 610 uint16_t CXFA_WideTextRead::SetCodePage(uint16_t wCodePage) { | 610 uint16_t CXFA_WideTextRead::SetCodePage(uint16_t wCodePage) { |
| 611 return GetCodePage(); | 611 return GetCodePage(); |
| 612 } | 612 } |
| OLD | NEW |