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 |