1 // =================================
 2 // Copyright (c) 2024 Seppo Laakko
 3 // Distributed under the MIT license
 4 // =================================
 5 
 6 using System;
 7 
 8 namespace System.Xml
 9 {
10     [nodiscard]
11     public Result<bool> ParseXmlFile(const string& xmlFilePathXmlContentHandler* contentHandlerSystem.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()xmlFilePathcontentHandlerfileMap);
19     }
20 
21     [nodiscard]
22     public Result<bool> ParseXmlContent(const string& xmlContentconst string& systemIdXmlContentHandler* contentHandlerSystem.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())systemIdcontentHandlerfileMap);
30     }
31 
32     [nodiscard]
33     public Result<bool> ParseXmlContent(ustring&& xmlContentconst string& systemIdXmlContentHandler* contentHandlerSystem.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(lexercontentHandler);
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(fileIndexxmlContentlexer.GetLineStartIndeces());
45         return Result<bool>(true);
46     }