| 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/fde/xml/fde_xml_imp.h" | 7 #include "xfa/fde/xml/fde_xml_imp.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1082 m_NodeStack(16), | 1082 m_NodeStack(16), |
| 1083 m_ws1(), | 1083 m_ws1(), |
| 1084 m_ws2() { | 1084 m_ws2() { |
| 1085 m_NodeStack.Push(m_pParent); | 1085 m_NodeStack.Push(m_pParent); |
| 1086 } | 1086 } |
| 1087 CFDE_XMLDOMParser::~CFDE_XMLDOMParser() { | 1087 CFDE_XMLDOMParser::~CFDE_XMLDOMParser() { |
| 1088 m_NodeStack.RemoveAll(); | 1088 m_NodeStack.RemoveAll(); |
| 1089 m_ws1.Empty(); | 1089 m_ws1.Empty(); |
| 1090 m_ws2.Empty(); | 1090 m_ws2.Empty(); |
| 1091 } | 1091 } |
| 1092 |
| 1092 int32_t CFDE_XMLDOMParser::DoParser(IFX_Pause* pPause) { | 1093 int32_t CFDE_XMLDOMParser::DoParser(IFX_Pause* pPause) { |
| 1093 uint32_t dwRet; | 1094 FDE_XmlSyntaxResult syntaxParserResult; |
| 1094 int32_t iCount = 0; | 1095 int32_t iCount = 0; |
| 1095 while (TRUE) { | 1096 while (TRUE) { |
| 1096 dwRet = m_pParser->DoSyntaxParse(); | 1097 syntaxParserResult = m_pParser->DoSyntaxParse(); |
| 1097 switch (dwRet) { | 1098 switch (syntaxParserResult) { |
| 1098 case FDE_XMLSYNTAXSTATUS_InstructionOpen: | 1099 case FDE_XmlSyntaxResult::InstructionOpen: |
| 1099 break; | 1100 break; |
| 1100 case FDE_XMLSYNTAXSTATUS_InstructionClose: | 1101 case FDE_XmlSyntaxResult::InstructionClose: |
| 1101 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { | 1102 if (m_pChild->GetType() != FDE_XMLNODE_Instruction) { |
| 1102 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1103 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1103 break; | 1104 break; |
| 1104 } | 1105 } |
| 1105 m_pChild = m_pParent; | 1106 m_pChild = m_pParent; |
| 1106 break; | 1107 break; |
| 1107 case FDE_XMLSYNTAXSTATUS_ElementOpen: | 1108 case FDE_XmlSyntaxResult::ElementOpen: |
| 1108 case FDE_XMLSYNTAXSTATUS_ElementBreak: | 1109 case FDE_XmlSyntaxResult::ElementBreak: |
| 1109 break; | 1110 break; |
| 1110 case FDE_XMLSYNTAXSTATUS_ElementClose: | 1111 case FDE_XmlSyntaxResult::ElementClose: |
| 1111 if (m_pChild->GetType() != FDE_XMLNODE_Element) { | 1112 if (m_pChild->GetType() != FDE_XMLNODE_Element) { |
| 1112 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1113 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1113 break; | 1114 break; |
| 1114 } | 1115 } |
| 1115 m_pParser->GetTagName(m_ws1); | 1116 m_pParser->GetTagName(m_ws1); |
| 1116 ((CFDE_XMLElement*)m_pChild)->GetTagName(m_ws2); | 1117 ((CFDE_XMLElement*)m_pChild)->GetTagName(m_ws2); |
| 1117 if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_ws2) != 0) { | 1118 if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_ws2) != 0) { |
| 1118 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1119 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1119 break; | 1120 break; |
| 1120 } | 1121 } |
| 1121 m_NodeStack.Pop(); | 1122 m_NodeStack.Pop(); |
| 1122 if (m_NodeStack.GetSize() < 1) { | 1123 if (m_NodeStack.GetSize() < 1) { |
| 1123 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1124 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1124 break; | 1125 break; |
| 1125 } | 1126 } |
| 1126 m_pParent = (CFDE_XMLNode*)*m_NodeStack.GetTopElement(); | 1127 m_pParent = (CFDE_XMLNode*)*m_NodeStack.GetTopElement(); |
| 1127 m_pChild = m_pParent; | 1128 m_pChild = m_pParent; |
| 1128 iCount++; | 1129 iCount++; |
| 1129 break; | 1130 break; |
| 1130 case FDE_XMLSYNTAXSTATUS_TargetName: | 1131 case FDE_XmlSyntaxResult::TargetName: |
| 1131 m_pParser->GetTargetName(m_ws1); | 1132 m_pParser->GetTargetName(m_ws1); |
| 1132 m_pChild = new CFDE_XMLInstruction(m_ws1); | 1133 m_pChild = new CFDE_XMLInstruction(m_ws1); |
| 1133 m_pParent->InsertChildNode(m_pChild); | 1134 m_pParent->InsertChildNode(m_pChild); |
| 1134 m_ws1.Empty(); | 1135 m_ws1.Empty(); |
| 1135 break; | 1136 break; |
| 1136 case FDE_XMLSYNTAXSTATUS_TagName: | 1137 case FDE_XmlSyntaxResult::TagName: |
| 1137 m_pParser->GetTagName(m_ws1); | 1138 m_pParser->GetTagName(m_ws1); |
| 1138 m_pChild = new CFDE_XMLElement(m_ws1); | 1139 m_pChild = new CFDE_XMLElement(m_ws1); |
| 1139 m_pParent->InsertChildNode(m_pChild); | 1140 m_pParent->InsertChildNode(m_pChild); |
| 1140 m_NodeStack.Push(m_pChild); | 1141 m_NodeStack.Push(m_pChild); |
| 1141 m_pParent = m_pChild; | 1142 m_pParent = m_pChild; |
| 1142 break; | 1143 break; |
| 1143 case FDE_XMLSYNTAXSTATUS_AttriName: | 1144 case FDE_XmlSyntaxResult::AttriName: |
| 1144 m_pParser->GetAttributeName(m_ws1); | 1145 m_pParser->GetAttributeName(m_ws1); |
| 1145 break; | 1146 break; |
| 1146 case FDE_XMLSYNTAXSTATUS_AttriValue: | 1147 case FDE_XmlSyntaxResult::AttriValue: |
| 1147 if (m_pChild == NULL) { | 1148 if (m_pChild == NULL) { |
| 1148 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1149 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1149 break; | 1150 break; |
| 1150 } | 1151 } |
| 1151 m_pParser->GetAttributeName(m_ws2); | 1152 m_pParser->GetAttributeName(m_ws2); |
| 1152 if (m_pChild->GetType() == FDE_XMLNODE_Element) { | 1153 if (m_pChild->GetType() == FDE_XMLNODE_Element) { |
| 1153 ((CFDE_XMLElement*)m_pChild)->SetString(m_ws1, m_ws2); | 1154 ((CFDE_XMLElement*)m_pChild)->SetString(m_ws1, m_ws2); |
| 1154 } else if (m_pChild->GetType() == FDE_XMLNODE_Instruction) { | 1155 } else if (m_pChild->GetType() == FDE_XMLNODE_Instruction) { |
| 1155 ((CFDE_XMLInstruction*)m_pChild)->SetString(m_ws1, m_ws2); | 1156 ((CFDE_XMLInstruction*)m_pChild)->SetString(m_ws1, m_ws2); |
| 1156 } | 1157 } |
| 1157 m_ws1.Empty(); | 1158 m_ws1.Empty(); |
| 1158 break; | 1159 break; |
| 1159 case FDE_XMLSYNTAXSTATUS_Text: | 1160 case FDE_XmlSyntaxResult::Text: |
| 1160 m_pParser->GetTextData(m_ws1); | 1161 m_pParser->GetTextData(m_ws1); |
| 1161 m_pChild = new CFDE_XMLText(m_ws1); | 1162 m_pChild = new CFDE_XMLText(m_ws1); |
| 1162 m_pParent->InsertChildNode(m_pChild); | 1163 m_pParent->InsertChildNode(m_pChild); |
| 1163 m_pChild = m_pParent; | 1164 m_pChild = m_pParent; |
| 1164 break; | 1165 break; |
| 1165 case FDE_XMLSYNTAXSTATUS_CData: | 1166 case FDE_XmlSyntaxResult::CData: |
| 1166 m_pParser->GetTextData(m_ws1); | 1167 m_pParser->GetTextData(m_ws1); |
| 1167 m_pChild = new CFDE_XMLCharData(m_ws1); | 1168 m_pChild = new CFDE_XMLCharData(m_ws1); |
| 1168 m_pParent->InsertChildNode(m_pChild); | 1169 m_pParent->InsertChildNode(m_pChild); |
| 1169 m_pChild = m_pParent; | 1170 m_pChild = m_pParent; |
| 1170 break; | 1171 break; |
| 1171 case FDE_XMLSYNTAXSTATUS_TargetData: | 1172 case FDE_XmlSyntaxResult::TargetData: |
| 1172 if (m_pChild == NULL || | 1173 if (m_pChild == NULL || |
| 1173 m_pChild->GetType() != FDE_XMLNODE_Instruction) { | 1174 m_pChild->GetType() != FDE_XMLNODE_Instruction) { |
| 1174 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1175 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1175 break; | 1176 break; |
| 1176 } | 1177 } |
| 1177 if (!m_ws1.IsEmpty()) { | 1178 if (!m_ws1.IsEmpty()) { |
| 1178 ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); | 1179 ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); |
| 1179 } | 1180 } |
| 1180 m_pParser->GetTargetData(m_ws1); | 1181 m_pParser->GetTargetData(m_ws1); |
| 1181 ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); | 1182 ((CFDE_XMLInstruction*)m_pChild)->AppendData(m_ws1); |
| 1182 m_ws1.Empty(); | 1183 m_ws1.Empty(); |
| 1183 break; | 1184 break; |
| 1184 default: | 1185 default: |
| 1185 break; | 1186 break; |
| 1186 } | 1187 } |
| 1187 if (dwRet == FDE_XMLSYNTAXSTATUS_Error || | 1188 if (syntaxParserResult == FDE_XmlSyntaxResult::Error || |
| 1188 dwRet == FDE_XMLSYNTAXSTATUS_EOS) { | 1189 syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
| 1189 break; | 1190 break; |
| 1190 } | 1191 } |
| 1191 if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { | 1192 if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { |
| 1192 break; | 1193 break; |
| 1193 } | 1194 } |
| 1194 } | 1195 } |
| 1195 return m_pParser->GetStatus(); | 1196 return m_pParser->GetStatus(); |
| 1196 } | 1197 } |
| 1197 CFDE_XMLSAXParser::CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, | 1198 CFDE_XMLSAXParser::CFDE_XMLSAXParser(FDE_XMLREADERHANDLER* pHandler, |
| 1198 CFDE_XMLSyntaxParser* pParser) | 1199 CFDE_XMLSyntaxParser* pParser) |
| 1199 : m_pHandler(pHandler), | 1200 : m_pHandler(pHandler), |
| 1200 m_pParser(pParser), | 1201 m_pParser(pParser), |
| 1201 m_TagStack(16), | 1202 m_TagStack(16), |
| 1202 m_pTagTop(NULL), | 1203 m_pTagTop(NULL), |
| 1203 m_ws1(), | 1204 m_ws1(), |
| 1204 m_ws2() {} | 1205 m_ws2() {} |
| 1205 CFDE_XMLSAXParser::~CFDE_XMLSAXParser() { | 1206 CFDE_XMLSAXParser::~CFDE_XMLSAXParser() { |
| 1206 m_TagStack.RemoveAll(); | 1207 m_TagStack.RemoveAll(); |
| 1207 m_ws1.Empty(); | 1208 m_ws1.Empty(); |
| 1208 m_ws2.Empty(); | 1209 m_ws2.Empty(); |
| 1209 } | 1210 } |
| 1210 int32_t CFDE_XMLSAXParser::DoParser(IFX_Pause* pPause) { | 1211 int32_t CFDE_XMLSAXParser::DoParser(IFX_Pause* pPause) { |
| 1211 uint32_t dwRet = 0; | 1212 FDE_XmlSyntaxResult syntaxParserResult; |
| 1212 int32_t iCount = 0; | 1213 int32_t iCount = 0; |
| 1213 while (TRUE) { | 1214 while (TRUE) { |
| 1214 dwRet = m_pParser->DoSyntaxParse(); | 1215 syntaxParserResult = m_pParser->DoSyntaxParse(); |
| 1215 switch (dwRet) { | 1216 switch (syntaxParserResult) { |
| 1216 case FDE_XMLSYNTAXSTATUS_ElementBreak: | 1217 case FDE_XmlSyntaxResult::ElementBreak: |
| 1217 if (m_pTagTop == NULL) { | 1218 if (m_pTagTop == NULL) { |
| 1218 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1219 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1219 break; | 1220 break; |
| 1220 } | 1221 } |
| 1221 if (m_pTagTop->eType == FDE_XMLNODE_Element) { | 1222 if (m_pTagTop->eType == FDE_XMLNODE_Element) { |
| 1222 m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); | 1223 m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); |
| 1223 } | 1224 } |
| 1224 break; | 1225 break; |
| 1225 case FDE_XMLSYNTAXSTATUS_ElementClose: | 1226 case FDE_XmlSyntaxResult::ElementClose: |
| 1226 if (m_pTagTop == NULL || m_pTagTop->eType != FDE_XMLNODE_Element) { | 1227 if (m_pTagTop == NULL || m_pTagTop->eType != FDE_XMLNODE_Element) { |
| 1227 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1228 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1228 break; | 1229 break; |
| 1229 } | 1230 } |
| 1230 m_pParser->GetTagName(m_ws1); | 1231 m_pParser->GetTagName(m_ws1); |
| 1231 if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_pTagTop->wsTagName) != 0) { | 1232 if (m_ws1.GetLength() > 0 && m_ws1.Compare(m_pTagTop->wsTagName) != 0) { |
| 1232 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1233 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1233 break; | 1234 break; |
| 1234 } else if (m_ws1.GetLength() == 0) { | 1235 } else if (m_ws1.GetLength() == 0) { |
| 1235 m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); | 1236 m_pHandler->OnTagBreak(m_pHandler, m_pTagTop->wsTagName); |
| 1236 } | 1237 } |
| 1237 m_pHandler->OnTagClose(m_pHandler, m_pTagTop->wsTagName); | 1238 m_pHandler->OnTagClose(m_pHandler, m_pTagTop->wsTagName); |
| 1238 Pop(); | 1239 Pop(); |
| 1239 iCount++; | 1240 iCount++; |
| 1240 break; | 1241 break; |
| 1241 case FDE_XMLSYNTAXSTATUS_TargetName: { | 1242 case FDE_XmlSyntaxResult::TargetName: { |
| 1242 m_pParser->GetTargetName(m_ws1); | 1243 m_pParser->GetTargetName(m_ws1); |
| 1243 CFDE_XMLTAG xmlTag; | 1244 CFDE_XMLTAG xmlTag; |
| 1244 xmlTag.wsTagName = m_ws1; | 1245 xmlTag.wsTagName = m_ws1; |
| 1245 xmlTag.eType = FDE_XMLNODE_Instruction; | 1246 xmlTag.eType = FDE_XMLNODE_Instruction; |
| 1246 Push(xmlTag); | 1247 Push(xmlTag); |
| 1247 m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Instruction, | 1248 m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Instruction, |
| 1248 m_pTagTop->wsTagName); | 1249 m_pTagTop->wsTagName); |
| 1249 m_ws1.Empty(); | 1250 m_ws1.Empty(); |
| 1250 } break; | 1251 } break; |
| 1251 case FDE_XMLSYNTAXSTATUS_TagName: { | 1252 case FDE_XmlSyntaxResult::TagName: { |
| 1252 m_pParser->GetTargetName(m_ws1); | 1253 m_pParser->GetTargetName(m_ws1); |
| 1253 CFDE_XMLTAG xmlTag; | 1254 CFDE_XMLTAG xmlTag; |
| 1254 xmlTag.wsTagName = m_ws1; | 1255 xmlTag.wsTagName = m_ws1; |
| 1255 xmlTag.eType = FDE_XMLNODE_Element; | 1256 xmlTag.eType = FDE_XMLNODE_Element; |
| 1256 Push(xmlTag); | 1257 Push(xmlTag); |
| 1257 m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Element, | 1258 m_pHandler->OnTagEnter(m_pHandler, FDE_XMLNODE_Element, |
| 1258 m_pTagTop->wsTagName); | 1259 m_pTagTop->wsTagName); |
| 1259 } break; | 1260 } break; |
| 1260 case FDE_XMLSYNTAXSTATUS_AttriName: | 1261 case FDE_XmlSyntaxResult::AttriName: |
| 1261 m_pParser->GetTargetName(m_ws1); | 1262 m_pParser->GetTargetName(m_ws1); |
| 1262 break; | 1263 break; |
| 1263 case FDE_XMLSYNTAXSTATUS_AttriValue: | 1264 case FDE_XmlSyntaxResult::AttriValue: |
| 1264 m_pParser->GetAttributeName(m_ws2); | 1265 m_pParser->GetAttributeName(m_ws2); |
| 1265 if (m_pTagTop == NULL) { | 1266 if (m_pTagTop == NULL) { |
| 1266 dwRet = FDE_XMLSYNTAXSTATUS_Error; | 1267 syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1267 break; | 1268 break; |
| 1268 } | 1269 } |
| 1269 if (m_pTagTop->eType == FDE_XMLNODE_Element) { | 1270 if (m_pTagTop->eType == FDE_XMLNODE_Element) { |
| 1270 m_pHandler->OnAttribute(m_pHandler, m_ws1, m_ws2); | 1271 m_pHandler->OnAttribute(m_pHandler, m_ws1, m_ws2); |
| 1271 } | 1272 } |
| 1272 m_ws1.Empty(); | 1273 m_ws1.Empty(); |
| 1273 break; | 1274 break; |
| 1274 case FDE_XMLSYNTAXSTATUS_CData: | 1275 case FDE_XmlSyntaxResult::CData: |
| 1275 m_pParser->GetTextData(m_ws1); | 1276 m_pParser->GetTextData(m_ws1); |
| 1276 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_CharData, m_ws1); | 1277 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_CharData, m_ws1); |
| 1277 break; | 1278 break; |
| 1278 case FDE_XMLSYNTAXSTATUS_Text: | 1279 case FDE_XmlSyntaxResult::Text: |
| 1279 m_pParser->GetTextData(m_ws1); | 1280 m_pParser->GetTextData(m_ws1); |
| 1280 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Text, m_ws1); | 1281 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Text, m_ws1); |
| 1281 break; | 1282 break; |
| 1282 case FDE_XMLSYNTAXSTATUS_TargetData: | 1283 case FDE_XmlSyntaxResult::TargetData: |
| 1283 m_pParser->GetTargetData(m_ws1); | 1284 m_pParser->GetTargetData(m_ws1); |
| 1284 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Instruction, m_ws1); | 1285 m_pHandler->OnData(m_pHandler, FDE_XMLNODE_Instruction, m_ws1); |
| 1285 m_ws1.Empty(); | 1286 m_ws1.Empty(); |
| 1286 break; | 1287 break; |
| 1287 default: | 1288 default: |
| 1288 break; | 1289 break; |
| 1289 } | 1290 } |
| 1290 if (dwRet == FDE_XMLSYNTAXSTATUS_Error || | 1291 if (syntaxParserResult == FDE_XmlSyntaxResult::Error || |
| 1291 dwRet == FDE_XMLSYNTAXSTATUS_EOS) { | 1292 syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
| 1292 break; | 1293 break; |
| 1293 } | 1294 } |
| 1294 if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { | 1295 if (pPause != NULL && iCount > 500 && pPause->NeedToPauseNow()) { |
| 1295 break; | 1296 break; |
| 1296 } | 1297 } |
| 1297 } | 1298 } |
| 1298 return m_pParser->GetStatus(); | 1299 return m_pParser->GetStatus(); |
| 1299 } | 1300 } |
| 1300 inline void CFDE_XMLSAXParser::Push(const CFDE_XMLTAG& xmlTag) { | 1301 inline void CFDE_XMLSAXParser::Push(const CFDE_XMLTAG& xmlTag) { |
| 1301 m_TagStack.Push(xmlTag); | 1302 m_TagStack.Push(xmlTag); |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1448 m_iBufferChars(0), | 1449 m_iBufferChars(0), |
| 1449 m_bEOS(FALSE), | 1450 m_bEOS(FALSE), |
| 1450 m_pStart(nullptr), | 1451 m_pStart(nullptr), |
| 1451 m_pEnd(nullptr), | 1452 m_pEnd(nullptr), |
| 1452 m_XMLNodeStack(16), | 1453 m_XMLNodeStack(16), |
| 1453 m_iAllocStep(m_BlockBuffer.GetAllocStep()), | 1454 m_iAllocStep(m_BlockBuffer.GetAllocStep()), |
| 1454 m_iDataLength(m_BlockBuffer.GetDataLengthRef()), | 1455 m_iDataLength(m_BlockBuffer.GetDataLengthRef()), |
| 1455 m_pCurrentBlock(nullptr), | 1456 m_pCurrentBlock(nullptr), |
| 1456 m_iIndexInBlock(0), | 1457 m_iIndexInBlock(0), |
| 1457 m_iTextDataLength(0), | 1458 m_iTextDataLength(0), |
| 1458 m_dwStatus(FDE_XMLSYNTAXSTATUS_None), | 1459 m_syntaxParserResult(FDE_XmlSyntaxResult::None), |
| 1459 m_dwMode(FDE_XMLSYNTAXMODE_Text), | 1460 m_syntaxParserState(FDE_XmlSyntaxState::Text), |
| 1460 m_wQuotationMark(0), | 1461 m_wQuotationMark(0), |
| 1461 m_iEntityStart(-1), | 1462 m_iEntityStart(-1), |
| 1462 m_SkipStack(16) { | 1463 m_SkipStack(16) { |
| 1463 m_CurNode.iNodeNum = -1; | 1464 m_CurNode.iNodeNum = -1; |
| 1464 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; | 1465 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; |
| 1465 } | 1466 } |
| 1466 void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream, | 1467 void CFDE_XMLSyntaxParser::Init(IFX_Stream* pStream, |
| 1467 int32_t iXMLPlaneSize, | 1468 int32_t iXMLPlaneSize, |
| 1468 int32_t iTextDataSize) { | 1469 int32_t iTextDataSize) { |
| 1469 FXSYS_assert(m_pStream == NULL && m_pBuffer == NULL); | 1470 FXSYS_assert(m_pStream == NULL && m_pBuffer == NULL); |
| 1470 FXSYS_assert(pStream != NULL && iXMLPlaneSize > 0); | 1471 FXSYS_assert(pStream != NULL && iXMLPlaneSize > 0); |
| 1471 int32_t iStreamLength = pStream->GetLength(); | 1472 int32_t iStreamLength = pStream->GetLength(); |
| 1472 FXSYS_assert(iStreamLength > 0); | 1473 FXSYS_assert(iStreamLength > 0); |
| 1473 m_pStream = pStream; | 1474 m_pStream = pStream; |
| 1474 m_iXMLPlaneSize = std::min(iXMLPlaneSize, iStreamLength); | 1475 m_iXMLPlaneSize = std::min(iXMLPlaneSize, iStreamLength); |
| 1475 uint8_t bom[4]; | 1476 uint8_t bom[4]; |
| 1476 m_iCurrentPos = m_pStream->GetBOM(bom); | 1477 m_iCurrentPos = m_pStream->GetBOM(bom); |
| 1477 FXSYS_assert(m_pBuffer == NULL); | 1478 FXSYS_assert(m_pBuffer == NULL); |
| 1478 m_pBuffer = FX_Alloc(FX_WCHAR, m_iXMLPlaneSize); | 1479 m_pBuffer = FX_Alloc(FX_WCHAR, m_iXMLPlaneSize); |
| 1479 m_pStart = m_pEnd = m_pBuffer; | 1480 m_pStart = m_pEnd = m_pBuffer; |
| 1480 FXSYS_assert(!m_BlockBuffer.IsInitialized()); | 1481 FXSYS_assert(!m_BlockBuffer.IsInitialized()); |
| 1481 m_BlockBuffer.InitBuffer(); | 1482 m_BlockBuffer.InitBuffer(); |
| 1482 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1483 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1483 m_iParsedBytes = m_iParsedChars = 0; | 1484 m_iParsedBytes = m_iParsedChars = 0; |
| 1484 m_iBufferChars = 0; | 1485 m_iBufferChars = 0; |
| 1485 } | 1486 } |
| 1486 uint32_t CFDE_XMLSyntaxParser::DoSyntaxParse() { | 1487 |
| 1487 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error || | 1488 FDE_XmlSyntaxResult CFDE_XMLSyntaxParser::DoSyntaxParse() { |
| 1488 m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { | 1489 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error || |
| 1489 return m_dwStatus; | 1490 m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
| 1491 return m_syntaxParserResult; |
| 1490 } | 1492 } |
| 1491 FXSYS_assert(m_pStream && m_pBuffer && m_BlockBuffer.IsInitialized()); | 1493 FXSYS_assert(m_pStream && m_pBuffer && m_BlockBuffer.IsInitialized()); |
| 1492 int32_t iStreamLength = m_pStream->GetLength(); | 1494 int32_t iStreamLength = m_pStream->GetLength(); |
| 1493 int32_t iPos; | 1495 int32_t iPos; |
| 1494 | 1496 |
| 1495 uint32_t dwStatus = FDE_XMLSYNTAXSTATUS_None; | 1497 FDE_XmlSyntaxResult syntaxParserResult = FDE_XmlSyntaxResult::None; |
| 1496 while (TRUE) { | 1498 while (TRUE) { |
| 1497 if (m_pStart >= m_pEnd) { | 1499 if (m_pStart >= m_pEnd) { |
| 1498 if (m_bEOS || m_iCurrentPos >= iStreamLength) { | 1500 if (m_bEOS || m_iCurrentPos >= iStreamLength) { |
| 1499 m_dwStatus = FDE_XMLSYNTAXSTATUS_EOS; | 1501 m_syntaxParserResult = FDE_XmlSyntaxResult::EndOfString; |
| 1500 return m_dwStatus; | 1502 return m_syntaxParserResult; |
| 1501 } | 1503 } |
| 1502 m_iParsedChars += (m_pEnd - m_pBuffer); | 1504 m_iParsedChars += (m_pEnd - m_pBuffer); |
| 1503 m_iParsedBytes = m_iCurrentPos; | 1505 m_iParsedBytes = m_iCurrentPos; |
| 1504 if (m_pStream->GetPosition() != m_iCurrentPos) { | 1506 if (m_pStream->GetPosition() != m_iCurrentPos) { |
| 1505 m_pStream->Seek(FX_STREAMSEEK_Begin, m_iCurrentPos); | 1507 m_pStream->Seek(FX_STREAMSEEK_Begin, m_iCurrentPos); |
| 1506 } | 1508 } |
| 1507 m_iBufferChars = | 1509 m_iBufferChars = |
| 1508 m_pStream->ReadString(m_pBuffer, m_iXMLPlaneSize, m_bEOS); | 1510 m_pStream->ReadString(m_pBuffer, m_iXMLPlaneSize, m_bEOS); |
| 1509 iPos = m_pStream->GetPosition(); | 1511 iPos = m_pStream->GetPosition(); |
| 1510 if (m_iBufferChars < 1) { | 1512 if (m_iBufferChars < 1) { |
| 1511 m_iCurrentPos = iStreamLength; | 1513 m_iCurrentPos = iStreamLength; |
| 1512 m_dwStatus = FDE_XMLSYNTAXSTATUS_EOS; | 1514 m_syntaxParserResult = FDE_XmlSyntaxResult::EndOfString; |
| 1513 return m_dwStatus; | 1515 return m_syntaxParserResult; |
| 1514 } | 1516 } |
| 1515 m_iCurrentPos = iPos; | 1517 m_iCurrentPos = iPos; |
| 1516 m_pStart = m_pBuffer; | 1518 m_pStart = m_pBuffer; |
| 1517 m_pEnd = m_pBuffer + m_iBufferChars; | 1519 m_pEnd = m_pBuffer + m_iBufferChars; |
| 1518 } | 1520 } |
| 1519 | 1521 |
| 1520 while (m_pStart < m_pEnd) { | 1522 while (m_pStart < m_pEnd) { |
| 1521 FX_WCHAR ch = *m_pStart; | 1523 FX_WCHAR ch = *m_pStart; |
| 1522 switch (m_dwMode) { | 1524 switch (m_syntaxParserState) { |
| 1523 case FDE_XMLSYNTAXMODE_Text: | 1525 case FDE_XmlSyntaxState::Text: |
| 1524 if (ch == L'<') { | 1526 if (ch == L'<') { |
| 1525 if (m_iDataLength > 0) { | 1527 if (m_iDataLength > 0) { |
| 1526 m_iTextDataLength = m_iDataLength; | 1528 m_iTextDataLength = m_iDataLength; |
| 1527 m_BlockBuffer.Reset(); | 1529 m_BlockBuffer.Reset(); |
| 1528 m_pCurrentBlock = | 1530 m_pCurrentBlock = |
| 1529 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1531 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1530 m_iEntityStart = -1; | 1532 m_iEntityStart = -1; |
| 1531 dwStatus = FDE_XMLSYNTAXSTATUS_Text; | 1533 syntaxParserResult = FDE_XmlSyntaxResult::Text; |
| 1532 } else { | 1534 } else { |
| 1533 m_pStart++; | 1535 m_pStart++; |
| 1534 m_dwMode = FDE_XMLSYNTAXMODE_Node; | 1536 m_syntaxParserState = FDE_XmlSyntaxState::Node; |
| 1535 } | 1537 } |
| 1536 } else { | 1538 } else { |
| 1537 ParseTextChar(ch); | 1539 ParseTextChar(ch); |
| 1538 } | 1540 } |
| 1539 break; | 1541 break; |
| 1540 case FDE_XMLSYNTAXMODE_Node: | 1542 case FDE_XmlSyntaxState::Node: |
| 1541 if (ch == L'!') { | 1543 if (ch == L'!') { |
| 1542 m_pStart++; | 1544 m_pStart++; |
| 1543 m_dwMode = FDE_XMLSYNTAXMODE_SkipCommentOrDecl; | 1545 m_syntaxParserState = FDE_XmlSyntaxState::SkipCommentOrDecl; |
| 1544 } else if (ch == L'/') { | 1546 } else if (ch == L'/') { |
| 1545 m_pStart++; | 1547 m_pStart++; |
| 1546 m_dwMode = FDE_XMLSYNTAXMODE_CloseElement; | 1548 m_syntaxParserState = FDE_XmlSyntaxState::CloseElement; |
| 1547 } else if (ch == L'?') { | 1549 } else if (ch == L'?') { |
| 1548 m_iLastNodeNum++; | 1550 m_iLastNodeNum++; |
| 1549 m_iCurrentNodeNum = m_iLastNodeNum; | 1551 m_iCurrentNodeNum = m_iLastNodeNum; |
| 1550 m_CurNode.iNodeNum = m_iLastNodeNum; | 1552 m_CurNode.iNodeNum = m_iLastNodeNum; |
| 1551 m_CurNode.eNodeType = FDE_XMLNODE_Instruction; | 1553 m_CurNode.eNodeType = FDE_XMLNODE_Instruction; |
| 1552 m_XMLNodeStack.Push(m_CurNode); | 1554 m_XMLNodeStack.Push(m_CurNode); |
| 1553 m_pStart++; | 1555 m_pStart++; |
| 1554 m_dwMode = FDE_XMLSYNTAXMODE_Target; | 1556 m_syntaxParserState = FDE_XmlSyntaxState::Target; |
| 1555 dwStatus = FDE_XMLSYNTAXSTATUS_InstructionOpen; | 1557 syntaxParserResult = FDE_XmlSyntaxResult::InstructionOpen; |
| 1556 } else { | 1558 } else { |
| 1557 m_iLastNodeNum++; | 1559 m_iLastNodeNum++; |
| 1558 m_iCurrentNodeNum = m_iLastNodeNum; | 1560 m_iCurrentNodeNum = m_iLastNodeNum; |
| 1559 m_CurNode.iNodeNum = m_iLastNodeNum; | 1561 m_CurNode.iNodeNum = m_iLastNodeNum; |
| 1560 m_CurNode.eNodeType = FDE_XMLNODE_Element; | 1562 m_CurNode.eNodeType = FDE_XMLNODE_Element; |
| 1561 m_XMLNodeStack.Push(m_CurNode); | 1563 m_XMLNodeStack.Push(m_CurNode); |
| 1562 m_dwMode = FDE_XMLSYNTAXMODE_Tag; | 1564 m_syntaxParserState = FDE_XmlSyntaxState::Tag; |
| 1563 dwStatus = FDE_XMLSYNTAXSTATUS_ElementOpen; | 1565 syntaxParserResult = FDE_XmlSyntaxResult::ElementOpen; |
| 1564 } | 1566 } |
| 1565 break; | 1567 break; |
| 1566 case FDE_XMLSYNTAXMODE_Target: | 1568 case FDE_XmlSyntaxState::Target: |
| 1567 case FDE_XMLSYNTAXMODE_Tag: | 1569 case FDE_XmlSyntaxState::Tag: |
| 1568 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { | 1570 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { |
| 1569 if (m_iDataLength < 1) { | 1571 if (m_iDataLength < 1) { |
| 1570 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1572 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1571 return m_dwStatus; | 1573 return m_syntaxParserResult; |
| 1572 } else { | 1574 } else { |
| 1573 m_iTextDataLength = m_iDataLength; | 1575 m_iTextDataLength = m_iDataLength; |
| 1574 m_BlockBuffer.Reset(); | 1576 m_BlockBuffer.Reset(); |
| 1575 m_pCurrentBlock = | 1577 m_pCurrentBlock = |
| 1576 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1578 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1577 if (m_dwMode != FDE_XMLSYNTAXMODE_Target) { | 1579 if (m_syntaxParserState != FDE_XmlSyntaxState::Target) { |
| 1578 dwStatus = FDE_XMLSYNTAXSTATUS_TagName; | 1580 syntaxParserResult = FDE_XmlSyntaxResult::TagName; |
| 1579 } else { | 1581 } else { |
| 1580 dwStatus = FDE_XMLSYNTAXSTATUS_TargetName; | 1582 syntaxParserResult = FDE_XmlSyntaxResult::TargetName; |
| 1581 } | 1583 } |
| 1582 m_dwMode = FDE_XMLSYNTAXMODE_AttriName; | 1584 m_syntaxParserState = FDE_XmlSyntaxState::AttriName; |
| 1583 } | 1585 } |
| 1584 } else { | 1586 } else { |
| 1585 if (m_iIndexInBlock == m_iAllocStep) { | 1587 if (m_iIndexInBlock == m_iAllocStep) { |
| 1586 m_pCurrentBlock = | 1588 m_pCurrentBlock = |
| 1587 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1589 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1588 if (!m_pCurrentBlock) { | 1590 if (!m_pCurrentBlock) { |
| 1589 return FDE_XMLSYNTAXSTATUS_Error; | 1591 return FDE_XmlSyntaxResult::Error; |
| 1590 } | 1592 } |
| 1591 } | 1593 } |
| 1592 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1594 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1593 m_iDataLength++; | 1595 m_iDataLength++; |
| 1594 m_pStart++; | 1596 m_pStart++; |
| 1595 } | 1597 } |
| 1596 break; | 1598 break; |
| 1597 case FDE_XMLSYNTAXMODE_AttriName: | 1599 case FDE_XmlSyntaxState::AttriName: |
| 1598 if (m_iDataLength < 1 && FDE_IsXMLWhiteSpace(ch)) { | 1600 if (m_iDataLength < 1 && FDE_IsXMLWhiteSpace(ch)) { |
| 1599 m_pStart++; | 1601 m_pStart++; |
| 1600 break; | 1602 break; |
| 1601 } | 1603 } |
| 1602 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { | 1604 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { |
| 1603 if (m_iDataLength < 1) { | 1605 if (m_iDataLength < 1) { |
| 1604 if (m_CurNode.eNodeType == FDE_XMLNODE_Element) { | 1606 if (m_CurNode.eNodeType == FDE_XMLNODE_Element) { |
| 1605 if (ch == L'>' || ch == L'/') { | 1607 if (ch == L'>' || ch == L'/') { |
| 1606 m_dwMode = FDE_XMLSYNTAXMODE_BreakElement; | 1608 m_syntaxParserState = FDE_XmlSyntaxState::BreakElement; |
| 1607 break; | 1609 break; |
| 1608 } | 1610 } |
| 1609 } else if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { | 1611 } else if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { |
| 1610 if (ch == L'?') { | 1612 if (ch == L'?') { |
| 1611 m_dwMode = FDE_XMLSYNTAXMODE_CloseInstruction; | 1613 m_syntaxParserState = FDE_XmlSyntaxState::CloseInstruction; |
| 1612 m_pStart++; | 1614 m_pStart++; |
| 1613 } else { | 1615 } else { |
| 1614 m_dwMode = FDE_XMLSYNTAXMODE_TargetData; | 1616 m_syntaxParserState = FDE_XmlSyntaxState::TargetData; |
| 1615 } | 1617 } |
| 1616 break; | 1618 break; |
| 1617 } | 1619 } |
| 1618 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1620 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1619 return m_dwStatus; | 1621 return m_syntaxParserResult; |
| 1620 } else { | 1622 } else { |
| 1621 if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { | 1623 if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { |
| 1622 if (ch != '=' && !FDE_IsXMLWhiteSpace(ch)) { | 1624 if (ch != '=' && !FDE_IsXMLWhiteSpace(ch)) { |
| 1623 m_dwMode = FDE_XMLSYNTAXMODE_TargetData; | 1625 m_syntaxParserState = FDE_XmlSyntaxState::TargetData; |
| 1624 break; | 1626 break; |
| 1625 } | 1627 } |
| 1626 } | 1628 } |
| 1627 m_iTextDataLength = m_iDataLength; | 1629 m_iTextDataLength = m_iDataLength; |
| 1628 m_BlockBuffer.Reset(); | 1630 m_BlockBuffer.Reset(); |
| 1629 m_pCurrentBlock = | 1631 m_pCurrentBlock = |
| 1630 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1632 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1631 m_dwMode = FDE_XMLSYNTAXMODE_AttriEqualSign; | 1633 m_syntaxParserState = FDE_XmlSyntaxState::AttriEqualSign; |
| 1632 dwStatus = FDE_XMLSYNTAXSTATUS_AttriName; | 1634 syntaxParserResult = FDE_XmlSyntaxResult::AttriName; |
| 1633 } | 1635 } |
| 1634 } else { | 1636 } else { |
| 1635 if (m_iIndexInBlock == m_iAllocStep) { | 1637 if (m_iIndexInBlock == m_iAllocStep) { |
| 1636 m_pCurrentBlock = | 1638 m_pCurrentBlock = |
| 1637 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1639 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1638 if (!m_pCurrentBlock) { | 1640 if (!m_pCurrentBlock) { |
| 1639 return FDE_XMLSYNTAXSTATUS_Error; | 1641 return FDE_XmlSyntaxResult::Error; |
| 1640 } | 1642 } |
| 1641 } | 1643 } |
| 1642 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1644 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1643 m_iDataLength++; | 1645 m_iDataLength++; |
| 1644 m_pStart++; | 1646 m_pStart++; |
| 1645 } | 1647 } |
| 1646 break; | 1648 break; |
| 1647 case FDE_XMLSYNTAXMODE_AttriEqualSign: | 1649 case FDE_XmlSyntaxState::AttriEqualSign: |
| 1648 if (FDE_IsXMLWhiteSpace(ch)) { | 1650 if (FDE_IsXMLWhiteSpace(ch)) { |
| 1649 m_pStart++; | 1651 m_pStart++; |
| 1650 break; | 1652 break; |
| 1651 } | 1653 } |
| 1652 if (ch != L'=') { | 1654 if (ch != L'=') { |
| 1653 if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { | 1655 if (m_CurNode.eNodeType == FDE_XMLNODE_Instruction) { |
| 1654 m_dwMode = FDE_XMLSYNTAXMODE_TargetData; | 1656 m_syntaxParserState = FDE_XmlSyntaxState::TargetData; |
| 1655 break; | 1657 break; |
| 1656 } | 1658 } |
| 1657 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1659 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1658 return m_dwStatus; | 1660 return m_syntaxParserResult; |
| 1659 } else { | 1661 } else { |
| 1660 m_dwMode = FDE_XMLSYNTAXMODE_AttriQuotation; | 1662 m_syntaxParserState = FDE_XmlSyntaxState::AttriQuotation; |
| 1661 m_pStart++; | 1663 m_pStart++; |
| 1662 } | 1664 } |
| 1663 break; | 1665 break; |
| 1664 case FDE_XMLSYNTAXMODE_AttriQuotation: | 1666 case FDE_XmlSyntaxState::AttriQuotation: |
| 1665 if (FDE_IsXMLWhiteSpace(ch)) { | 1667 if (FDE_IsXMLWhiteSpace(ch)) { |
| 1666 m_pStart++; | 1668 m_pStart++; |
| 1667 break; | 1669 break; |
| 1668 } | 1670 } |
| 1669 if (ch != L'\"' && ch != L'\'') { | 1671 if (ch != L'\"' && ch != L'\'') { |
| 1670 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1672 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1671 return m_dwStatus; | 1673 return m_syntaxParserResult; |
| 1672 } else { | 1674 } else { |
| 1673 m_wQuotationMark = ch; | 1675 m_wQuotationMark = ch; |
| 1674 m_dwMode = FDE_XMLSYNTAXMODE_AttriValue; | 1676 m_syntaxParserState = FDE_XmlSyntaxState::AttriValue; |
| 1675 m_pStart++; | 1677 m_pStart++; |
| 1676 } | 1678 } |
| 1677 break; | 1679 break; |
| 1678 case FDE_XMLSYNTAXMODE_AttriValue: | 1680 case FDE_XmlSyntaxState::AttriValue: |
| 1679 if (ch == m_wQuotationMark) { | 1681 if (ch == m_wQuotationMark) { |
| 1680 if (m_iEntityStart > -1) { | 1682 if (m_iEntityStart > -1) { |
| 1681 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1683 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1682 return m_dwStatus; | 1684 return m_syntaxParserResult; |
| 1683 } | 1685 } |
| 1684 m_iTextDataLength = m_iDataLength; | 1686 m_iTextDataLength = m_iDataLength; |
| 1685 m_wQuotationMark = 0; | 1687 m_wQuotationMark = 0; |
| 1686 m_BlockBuffer.Reset(); | 1688 m_BlockBuffer.Reset(); |
| 1687 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1689 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1688 m_pStart++; | 1690 m_pStart++; |
| 1689 m_dwMode = FDE_XMLSYNTAXMODE_AttriName; | 1691 m_syntaxParserState = FDE_XmlSyntaxState::AttriName; |
| 1690 dwStatus = FDE_XMLSYNTAXSTATUS_AttriValue; | 1692 syntaxParserResult = FDE_XmlSyntaxResult::AttriValue; |
| 1691 } else { | 1693 } else { |
| 1692 ParseTextChar(ch); | 1694 ParseTextChar(ch); |
| 1693 } | 1695 } |
| 1694 break; | 1696 break; |
| 1695 case FDE_XMLSYNTAXMODE_CloseInstruction: | 1697 case FDE_XmlSyntaxState::CloseInstruction: |
| 1696 if (ch != L'>') { | 1698 if (ch != L'>') { |
| 1697 if (m_iIndexInBlock == m_iAllocStep) { | 1699 if (m_iIndexInBlock == m_iAllocStep) { |
| 1698 m_pCurrentBlock = | 1700 m_pCurrentBlock = |
| 1699 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1701 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1700 if (!m_pCurrentBlock) { | 1702 if (!m_pCurrentBlock) { |
| 1701 return FDE_XMLSYNTAXSTATUS_Error; | 1703 return FDE_XmlSyntaxResult::Error; |
| 1702 } | 1704 } |
| 1703 } | 1705 } |
| 1704 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1706 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1705 m_iDataLength++; | 1707 m_iDataLength++; |
| 1706 m_dwMode = FDE_XMLSYNTAXMODE_TargetData; | 1708 m_syntaxParserState = FDE_XmlSyntaxState::TargetData; |
| 1707 } else if (m_iDataLength > 0) { | 1709 } else if (m_iDataLength > 0) { |
| 1708 m_iTextDataLength = m_iDataLength; | 1710 m_iTextDataLength = m_iDataLength; |
| 1709 m_BlockBuffer.Reset(); | 1711 m_BlockBuffer.Reset(); |
| 1710 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1712 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1711 dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; | 1713 syntaxParserResult = FDE_XmlSyntaxResult::TargetData; |
| 1712 } else { | 1714 } else { |
| 1713 m_pStart++; | 1715 m_pStart++; |
| 1714 FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); | 1716 FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); |
| 1715 if (pXMLNode == NULL) { | 1717 if (pXMLNode == NULL) { |
| 1716 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1718 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1717 return m_dwStatus; | 1719 return m_syntaxParserResult; |
| 1718 } | 1720 } |
| 1719 m_XMLNodeStack.Pop(); | 1721 m_XMLNodeStack.Pop(); |
| 1720 pXMLNode = m_XMLNodeStack.GetTopElement(); | 1722 pXMLNode = m_XMLNodeStack.GetTopElement(); |
| 1721 if (pXMLNode == NULL) { | 1723 if (pXMLNode == NULL) { |
| 1722 m_CurNode.iNodeNum = -1; | 1724 m_CurNode.iNodeNum = -1; |
| 1723 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; | 1725 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; |
| 1724 } else { | 1726 } else { |
| 1725 m_CurNode = *pXMLNode; | 1727 m_CurNode = *pXMLNode; |
| 1726 } | 1728 } |
| 1727 m_iCurrentNodeNum = m_CurNode.iNodeNum; | 1729 m_iCurrentNodeNum = m_CurNode.iNodeNum; |
| 1728 m_BlockBuffer.Reset(); | 1730 m_BlockBuffer.Reset(); |
| 1729 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1731 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1730 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1732 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1731 dwStatus = FDE_XMLSYNTAXSTATUS_InstructionClose; | 1733 syntaxParserResult = FDE_XmlSyntaxResult::InstructionClose; |
| 1732 } | 1734 } |
| 1733 break; | 1735 break; |
| 1734 case FDE_XMLSYNTAXMODE_BreakElement: | 1736 case FDE_XmlSyntaxState::BreakElement: |
| 1735 if (ch == L'>') { | 1737 if (ch == L'>') { |
| 1736 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1738 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1737 dwStatus = FDE_XMLSYNTAXSTATUS_ElementBreak; | 1739 syntaxParserResult = FDE_XmlSyntaxResult::ElementBreak; |
| 1738 } else if (ch == L'/') { | 1740 } else if (ch == L'/') { |
| 1739 m_dwMode = FDE_XMLSYNTAXMODE_CloseElement; | 1741 m_syntaxParserState = FDE_XmlSyntaxState::CloseElement; |
| 1740 } else { | 1742 } else { |
| 1741 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1743 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1742 return m_dwStatus; | 1744 return m_syntaxParserResult; |
| 1743 } | 1745 } |
| 1744 m_pStart++; | 1746 m_pStart++; |
| 1745 break; | 1747 break; |
| 1746 case FDE_XMLSYNTAXMODE_CloseElement: | 1748 case FDE_XmlSyntaxState::CloseElement: |
| 1747 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { | 1749 if (!FDE_IsXMLNameChar(ch, m_iDataLength < 1)) { |
| 1748 if (ch == L'>') { | 1750 if (ch == L'>') { |
| 1749 FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); | 1751 FDE_XMLNODE* pXMLNode = m_XMLNodeStack.GetTopElement(); |
| 1750 if (pXMLNode == NULL) { | 1752 if (pXMLNode == NULL) { |
| 1751 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1753 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1752 return m_dwStatus; | 1754 return m_syntaxParserResult; |
| 1753 } | 1755 } |
| 1754 m_XMLNodeStack.Pop(); | 1756 m_XMLNodeStack.Pop(); |
| 1755 pXMLNode = m_XMLNodeStack.GetTopElement(); | 1757 pXMLNode = m_XMLNodeStack.GetTopElement(); |
| 1756 if (pXMLNode == NULL) { | 1758 if (pXMLNode == NULL) { |
| 1757 m_CurNode.iNodeNum = -1; | 1759 m_CurNode.iNodeNum = -1; |
| 1758 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; | 1760 m_CurNode.eNodeType = FDE_XMLNODE_Unknown; |
| 1759 } else { | 1761 } else { |
| 1760 m_CurNode = *pXMLNode; | 1762 m_CurNode = *pXMLNode; |
| 1761 } | 1763 } |
| 1762 m_iCurrentNodeNum = m_CurNode.iNodeNum; | 1764 m_iCurrentNodeNum = m_CurNode.iNodeNum; |
| 1763 m_iTextDataLength = m_iDataLength; | 1765 m_iTextDataLength = m_iDataLength; |
| 1764 m_BlockBuffer.Reset(); | 1766 m_BlockBuffer.Reset(); |
| 1765 m_pCurrentBlock = | 1767 m_pCurrentBlock = |
| 1766 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1768 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1767 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1769 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1768 dwStatus = FDE_XMLSYNTAXSTATUS_ElementClose; | 1770 syntaxParserResult = FDE_XmlSyntaxResult::ElementClose; |
| 1769 } else if (!FDE_IsXMLWhiteSpace(ch)) { | 1771 } else if (!FDE_IsXMLWhiteSpace(ch)) { |
| 1770 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1772 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1771 return m_dwStatus; | 1773 return m_syntaxParserResult; |
| 1772 } | 1774 } |
| 1773 } else { | 1775 } else { |
| 1774 if (m_iIndexInBlock == m_iAllocStep) { | 1776 if (m_iIndexInBlock == m_iAllocStep) { |
| 1775 m_pCurrentBlock = | 1777 m_pCurrentBlock = |
| 1776 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1778 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1777 if (!m_pCurrentBlock) { | 1779 if (!m_pCurrentBlock) { |
| 1778 return FDE_XMLSYNTAXSTATUS_Error; | 1780 return FDE_XmlSyntaxResult::Error; |
| 1779 } | 1781 } |
| 1780 } | 1782 } |
| 1781 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1783 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1782 m_iDataLength++; | 1784 m_iDataLength++; |
| 1783 } | 1785 } |
| 1784 m_pStart++; | 1786 m_pStart++; |
| 1785 break; | 1787 break; |
| 1786 case FDE_XMLSYNTAXMODE_SkipCommentOrDecl: | 1788 case FDE_XmlSyntaxState::SkipCommentOrDecl: |
| 1787 if (FX_wcsnicmp(m_pStart, L"--", 2) == 0) { | 1789 if (FX_wcsnicmp(m_pStart, L"--", 2) == 0) { |
| 1788 m_pStart += 2; | 1790 m_pStart += 2; |
| 1789 m_dwMode = FDE_XMLSYNTAXMODE_SkipComment; | 1791 m_syntaxParserState = FDE_XmlSyntaxState::SkipComment; |
| 1790 } else if (FX_wcsnicmp(m_pStart, L"[CDATA[", 7) == 0) { | 1792 } else if (FX_wcsnicmp(m_pStart, L"[CDATA[", 7) == 0) { |
| 1791 m_pStart += 7; | 1793 m_pStart += 7; |
| 1792 m_dwMode = FDE_XMLSYNTAXMODE_SkipCData; | 1794 m_syntaxParserState = FDE_XmlSyntaxState::SkipCData; |
| 1793 } else { | 1795 } else { |
| 1794 m_dwMode = FDE_XMLSYNTAXMODE_SkipDeclNode; | 1796 m_syntaxParserState = FDE_XmlSyntaxState::SkipDeclNode; |
| 1795 m_SkipChar = L'>'; | 1797 m_SkipChar = L'>'; |
| 1796 m_SkipStack.Push(L'>'); | 1798 m_SkipStack.Push(L'>'); |
| 1797 } | 1799 } |
| 1798 break; | 1800 break; |
| 1799 case FDE_XMLSYNTAXMODE_SkipCData: { | 1801 case FDE_XmlSyntaxState::SkipCData: { |
| 1800 if (FX_wcsnicmp(m_pStart, L"]]>", 3) == 0) { | 1802 if (FX_wcsnicmp(m_pStart, L"]]>", 3) == 0) { |
| 1801 m_pStart += 3; | 1803 m_pStart += 3; |
| 1802 dwStatus = FDE_XMLSYNTAXSTATUS_CData; | 1804 syntaxParserResult = FDE_XmlSyntaxResult::CData; |
| 1803 m_iTextDataLength = m_iDataLength; | 1805 m_iTextDataLength = m_iDataLength; |
| 1804 m_BlockBuffer.Reset(); | 1806 m_BlockBuffer.Reset(); |
| 1805 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1807 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1806 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1808 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1807 } else { | 1809 } else { |
| 1808 if (m_iIndexInBlock == m_iAllocStep) { | 1810 if (m_iIndexInBlock == m_iAllocStep) { |
| 1809 m_pCurrentBlock = | 1811 m_pCurrentBlock = |
| 1810 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1812 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1811 if (!m_pCurrentBlock) | 1813 if (!m_pCurrentBlock) |
| 1812 return FDE_XMLSYNTAXSTATUS_Error; | 1814 return FDE_XmlSyntaxResult::Error; |
| 1813 } | 1815 } |
| 1814 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1816 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1815 m_iDataLength++; | 1817 m_iDataLength++; |
| 1816 m_pStart++; | 1818 m_pStart++; |
| 1817 } | 1819 } |
| 1818 break; | 1820 break; |
| 1819 } | 1821 } |
| 1820 case FDE_XMLSYNTAXMODE_SkipDeclNode: | 1822 case FDE_XmlSyntaxState::SkipDeclNode: |
| 1821 if (m_SkipChar == L'\'' || m_SkipChar == L'\"') { | 1823 if (m_SkipChar == L'\'' || m_SkipChar == L'\"') { |
| 1822 m_pStart++; | 1824 m_pStart++; |
| 1823 if (ch != m_SkipChar) | 1825 if (ch != m_SkipChar) |
| 1824 break; | 1826 break; |
| 1825 | 1827 |
| 1826 m_SkipStack.Pop(); | 1828 m_SkipStack.Pop(); |
| 1827 uint32_t* pDWord = m_SkipStack.GetTopElement(); | 1829 uint32_t* pDWord = m_SkipStack.GetTopElement(); |
| 1828 if (!pDWord) | 1830 if (!pDWord) |
| 1829 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1831 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1830 else | 1832 else |
| 1831 m_SkipChar = (FX_WCHAR)*pDWord; | 1833 m_SkipChar = (FX_WCHAR)*pDWord; |
| 1832 } else { | 1834 } else { |
| 1833 switch (ch) { | 1835 switch (ch) { |
| 1834 case L'<': | 1836 case L'<': |
| 1835 m_SkipChar = L'>'; | 1837 m_SkipChar = L'>'; |
| 1836 m_SkipStack.Push(L'>'); | 1838 m_SkipStack.Push(L'>'); |
| 1837 break; | 1839 break; |
| 1838 case L'[': | 1840 case L'[': |
| 1839 m_SkipChar = L']'; | 1841 m_SkipChar = L']'; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1857 uint32_t* pDWord = m_SkipStack.GetTopElement(); | 1859 uint32_t* pDWord = m_SkipStack.GetTopElement(); |
| 1858 if (!pDWord) { | 1860 if (!pDWord) { |
| 1859 if (m_iDataLength >= 9) { | 1861 if (m_iDataLength >= 9) { |
| 1860 CFX_WideString wsHeader; | 1862 CFX_WideString wsHeader; |
| 1861 m_BlockBuffer.GetTextData(wsHeader, 0, 7); | 1863 m_BlockBuffer.GetTextData(wsHeader, 0, 7); |
| 1862 } | 1864 } |
| 1863 m_iTextDataLength = m_iDataLength; | 1865 m_iTextDataLength = m_iDataLength; |
| 1864 m_BlockBuffer.Reset(); | 1866 m_BlockBuffer.Reset(); |
| 1865 m_pCurrentBlock = | 1867 m_pCurrentBlock = |
| 1866 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1868 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1867 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1869 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1868 } else { | 1870 } else { |
| 1869 m_SkipChar = static_cast<FX_WCHAR>(*pDWord); | 1871 m_SkipChar = static_cast<FX_WCHAR>(*pDWord); |
| 1870 } | 1872 } |
| 1871 } | 1873 } |
| 1872 break; | 1874 break; |
| 1873 } | 1875 } |
| 1874 if (m_SkipStack.GetSize() > 0) { | 1876 if (m_SkipStack.GetSize() > 0) { |
| 1875 if (m_iIndexInBlock == m_iAllocStep) { | 1877 if (m_iIndexInBlock == m_iAllocStep) { |
| 1876 m_pCurrentBlock = | 1878 m_pCurrentBlock = |
| 1877 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1879 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1878 if (!m_pCurrentBlock) { | 1880 if (!m_pCurrentBlock) { |
| 1879 return FDE_XMLSYNTAXSTATUS_Error; | 1881 return FDE_XmlSyntaxResult::Error; |
| 1880 } | 1882 } |
| 1881 } | 1883 } |
| 1882 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1884 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1883 m_iDataLength++; | 1885 m_iDataLength++; |
| 1884 } | 1886 } |
| 1885 m_pStart++; | 1887 m_pStart++; |
| 1886 } | 1888 } |
| 1887 break; | 1889 break; |
| 1888 case FDE_XMLSYNTAXMODE_SkipComment: | 1890 case FDE_XmlSyntaxState::SkipComment: |
| 1889 if (FX_wcsnicmp(m_pStart, L"-->", 3) == 0) { | 1891 if (FX_wcsnicmp(m_pStart, L"-->", 3) == 0) { |
| 1890 m_pStart += 2; | 1892 m_pStart += 2; |
| 1891 m_dwMode = FDE_XMLSYNTAXMODE_Text; | 1893 m_syntaxParserState = FDE_XmlSyntaxState::Text; |
| 1892 } | 1894 } |
| 1893 | 1895 |
| 1894 m_pStart++; | 1896 m_pStart++; |
| 1895 break; | 1897 break; |
| 1896 case FDE_XMLSYNTAXMODE_TargetData: | 1898 case FDE_XmlSyntaxState::TargetData: |
| 1897 if (FDE_IsXMLWhiteSpace(ch)) { | 1899 if (FDE_IsXMLWhiteSpace(ch)) { |
| 1898 if (m_iDataLength < 1) { | 1900 if (m_iDataLength < 1) { |
| 1899 m_pStart++; | 1901 m_pStart++; |
| 1900 break; | 1902 break; |
| 1901 } else if (m_wQuotationMark == 0) { | 1903 } else if (m_wQuotationMark == 0) { |
| 1902 m_iTextDataLength = m_iDataLength; | 1904 m_iTextDataLength = m_iDataLength; |
| 1903 m_wQuotationMark = 0; | 1905 m_wQuotationMark = 0; |
| 1904 m_BlockBuffer.Reset(); | 1906 m_BlockBuffer.Reset(); |
| 1905 m_pCurrentBlock = | 1907 m_pCurrentBlock = |
| 1906 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1908 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1907 m_pStart++; | 1909 m_pStart++; |
| 1908 dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; | 1910 syntaxParserResult = FDE_XmlSyntaxResult::TargetData; |
| 1909 break; | 1911 break; |
| 1910 } | 1912 } |
| 1911 } | 1913 } |
| 1912 if (ch == '?') { | 1914 if (ch == '?') { |
| 1913 m_dwMode = FDE_XMLSYNTAXMODE_CloseInstruction; | 1915 m_syntaxParserState = FDE_XmlSyntaxState::CloseInstruction; |
| 1914 m_pStart++; | 1916 m_pStart++; |
| 1915 } else if (ch == '\"') { | 1917 } else if (ch == '\"') { |
| 1916 if (m_wQuotationMark == 0) { | 1918 if (m_wQuotationMark == 0) { |
| 1917 m_wQuotationMark = ch; | 1919 m_wQuotationMark = ch; |
| 1918 m_pStart++; | 1920 m_pStart++; |
| 1919 } else if (ch == m_wQuotationMark) { | 1921 } else if (ch == m_wQuotationMark) { |
| 1920 m_iTextDataLength = m_iDataLength; | 1922 m_iTextDataLength = m_iDataLength; |
| 1921 m_wQuotationMark = 0; | 1923 m_wQuotationMark = 0; |
| 1922 m_BlockBuffer.Reset(); | 1924 m_BlockBuffer.Reset(); |
| 1923 m_pCurrentBlock = | 1925 m_pCurrentBlock = |
| 1924 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1926 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1925 m_pStart++; | 1927 m_pStart++; |
| 1926 dwStatus = FDE_XMLSYNTAXSTATUS_TargetData; | 1928 syntaxParserResult = FDE_XmlSyntaxResult::TargetData; |
| 1927 } else { | 1929 } else { |
| 1928 m_dwStatus = FDE_XMLSYNTAXSTATUS_Error; | 1930 m_syntaxParserResult = FDE_XmlSyntaxResult::Error; |
| 1929 return m_dwStatus; | 1931 return m_syntaxParserResult; |
| 1930 } | 1932 } |
| 1931 } else { | 1933 } else { |
| 1932 if (m_iIndexInBlock == m_iAllocStep) { | 1934 if (m_iIndexInBlock == m_iAllocStep) { |
| 1933 m_pCurrentBlock = | 1935 m_pCurrentBlock = |
| 1934 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 1936 m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 1935 if (!m_pCurrentBlock) { | 1937 if (!m_pCurrentBlock) { |
| 1936 return FDE_XMLSYNTAXSTATUS_Error; | 1938 return FDE_XmlSyntaxResult::Error; |
| 1937 } | 1939 } |
| 1938 } | 1940 } |
| 1939 m_pCurrentBlock[m_iIndexInBlock++] = ch; | 1941 m_pCurrentBlock[m_iIndexInBlock++] = ch; |
| 1940 m_iDataLength++; | 1942 m_iDataLength++; |
| 1941 m_pStart++; | 1943 m_pStart++; |
| 1942 } | 1944 } |
| 1943 break; | 1945 break; |
| 1944 default: | 1946 default: |
| 1945 break; | 1947 break; |
| 1946 } | 1948 } |
| 1947 if (dwStatus != FDE_XMLSYNTAXSTATUS_None) | 1949 if (syntaxParserResult != FDE_XmlSyntaxResult::None) |
| 1948 return dwStatus; | 1950 return syntaxParserResult; |
| 1949 } | 1951 } |
| 1950 } | 1952 } |
| 1951 return 0; | 1953 return FDE_XmlSyntaxResult::Text; |
| 1952 } | 1954 } |
| 1953 | 1955 |
| 1954 CFDE_XMLSyntaxParser::~CFDE_XMLSyntaxParser() { | 1956 CFDE_XMLSyntaxParser::~CFDE_XMLSyntaxParser() { |
| 1955 if (m_pCurrentBlock) { | 1957 if (m_pCurrentBlock) { |
| 1956 m_pCurrentBlock = NULL; | 1958 m_pCurrentBlock = NULL; |
| 1957 } | 1959 } |
| 1958 FX_Free(m_pBuffer); | 1960 FX_Free(m_pBuffer); |
| 1959 } | 1961 } |
| 1960 | 1962 |
| 1961 int32_t CFDE_XMLSyntaxParser::GetStatus() const { | 1963 int32_t CFDE_XMLSyntaxParser::GetStatus() const { |
| 1962 if (m_pStream == NULL) { | 1964 if (m_pStream == NULL) { |
| 1963 return -1; | 1965 return -1; |
| 1964 } | 1966 } |
| 1965 int32_t iStreamLength = m_pStream->GetLength(); | 1967 int32_t iStreamLength = m_pStream->GetLength(); |
| 1966 if (iStreamLength < 1) { | 1968 if (iStreamLength < 1) { |
| 1967 return 100; | 1969 return 100; |
| 1968 } | 1970 } |
| 1969 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_Error) { | 1971 if (m_syntaxParserResult == FDE_XmlSyntaxResult::Error) { |
| 1970 return -1; | 1972 return -1; |
| 1971 } | 1973 } |
| 1972 if (m_dwStatus == FDE_XMLSYNTAXSTATUS_EOS) { | 1974 if (m_syntaxParserResult == FDE_XmlSyntaxResult::EndOfString) { |
| 1973 return 100; | 1975 return 100; |
| 1974 } | 1976 } |
| 1975 return m_iParsedBytes * 100 / iStreamLength; | 1977 return m_iParsedBytes * 100 / iStreamLength; |
| 1976 } | 1978 } |
| 1977 static int32_t FX_GetUTF8EncodeLength(const FX_WCHAR* pSrc, int32_t iSrcLen) { | 1979 static int32_t FX_GetUTF8EncodeLength(const FX_WCHAR* pSrc, int32_t iSrcLen) { |
| 1978 uint32_t unicode = 0; | 1980 uint32_t unicode = 0; |
| 1979 int32_t iDstNum = 0; | 1981 int32_t iDstNum = 0; |
| 1980 while (iSrcLen-- > 0) { | 1982 while (iSrcLen-- > 0) { |
| 1981 unicode = *pSrc++; | 1983 unicode = *pSrc++; |
| 1982 int nbytes = 0; | 1984 int nbytes = 0; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2072 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); | 2074 m_BlockBuffer.DeleteTextChars(m_iDataLength - m_iEntityStart, FALSE); |
| 2073 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); | 2075 m_pCurrentBlock = m_BlockBuffer.GetAvailableBlock(m_iIndexInBlock); |
| 2074 m_iEntityStart = -1; | 2076 m_iEntityStart = -1; |
| 2075 } else { | 2077 } else { |
| 2076 if (m_iEntityStart < 0 && ch == L'&') { | 2078 if (m_iEntityStart < 0 && ch == L'&') { |
| 2077 m_iEntityStart = m_iDataLength - 1; | 2079 m_iEntityStart = m_iDataLength - 1; |
| 2078 } | 2080 } |
| 2079 } | 2081 } |
| 2080 m_pStart++; | 2082 m_pStart++; |
| 2081 } | 2083 } |
| OLD | NEW |