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 |