1
2
3
4
5
6 using System;
7
8 namespace System.Xml
9 {
10 [nodiscard]
11 public Result<bool> ParseXmlFile(const string& xmlFilePath, XmlContentHandler* contentHandler, System.Lex.FileMap& fileMap)
12 {
13 auto result = System.IO.File.ReadAllText(xmlFilePath);
14 if (result.Error())
15 {
16 return Result<bool>(ErrorId(result.GetErrorId()));
17 }
18 return ParseXmlContent(result.Value(), xmlFilePath, contentHandler, fileMap);
19 }
20
21 [nodiscard]
22 public Result<bool> ParseXmlContent(const string& xmlContent, const string& systemId, XmlContentHandler* contentHandler, System.Lex.FileMap& fileMap)
23 {
24 auto utf32Result = ToUtf32(xmlContent);
25 if (utf32Result.Error())
26 {
27 return Result<bool>(ErrorId(utf32Result.GetErrorId()));
28 }
29 return ParseXmlContent(Rvalue(utf32Result.Value()), systemId, contentHandler, fileMap);
30 }
31
32 [nodiscard]
33 public Result<bool> ParseXmlContent(ustring&& xmlContent, const string& systemId, XmlContentHandler* contentHandler, System.Lex.FileMap& fileMap)
34 {
35 System.Lex.TrivialLexer lexer(xmlContent.Chars(), xmlContent.Chars() + xmlContent.Length(), systemId);
36 int fileIndex = fileMap.MapFileName(systemId);
37 lexer.SetFileIndex(fileIndex);
38 XmlProcessor processor(lexer, contentHandler);
39 auto result = XmlParser<System.Lex.TrivialLexer>.Parse(lexer, &processor);
40 if (result.Error())
41 {
42 return Result<bool>(ErrorId(result.GetErrorId()));
43 }
44 fileMap.AddSourceFile(fileIndex, xmlContent, lexer.GetLineStartIndeces());
45 return Result<bool>(true);
46 }