1 // =================================
  2 // Copyright (c) 2024 Seppo Laakko
  3 // Distributed under the MIT license
  4 // =================================
  5 
  6 using System;
  7 using System.Collections;
  8 
  9 namespace System.Xml
 10 {
 11     public class Attribute
 12     {
 13         public Attribute(const System.Lex.Span& span_const ustring& namespaceUri_const ustring& localName_const ustring& qualifiedName_const ustring& value_) : 
 14             span(span_)namespaceUri(namespaceUri_)localName(localName_)qualifiedName(qualifiedName_)value(value_)
 15         {
 16         }
 17         public const System.Lex.Span& Span() const
 18         {
 19             return span;
 20         }
 21         public const ustring& NamespaceUri() const
 22         {
 23             return namespaceUri;
 24         }
 25         public const ustring& LocalName() const
 26         {
 27             return localName;
 28         }
 29         public const ustring& QualifiedName() const
 30         {
 31             return qualifiedName;
 32         }
 33         public const ustring& Value() const
 34         {
 35             return value;
 36         }
 37         private System.Lex.Span span;
 38         private ustring namespaceUri;
 39         private ustring localName;
 40         private ustring qualifiedName;
 41         private ustring value;
 42     }
 43 
 44     public class Attributes
 45     {
 46         public typedef List<Attribute>.Iterator Iterator;
 47         public typedef List<Attribute>.ConstIterator ConstIterator;
 48         public List<Attribute>.Iterator Begin()
 49         {
 50             return attributes.Begin();
 51         }
 52         public List<Attribute>.Iterator End()
 53         {
 54             return attributes.End();
 55         }
 56         public List<Attribute>.ConstIterator Begin() const
 57         {
 58             return attributes.CBegin();
 59         }
 60         public List<Attribute>.ConstIterator End() const
 61         {
 62             return attributes.CEnd();
 63         }
 64         public List<Attribute>.ConstIterator CBegin() const
 65         {
 66             return attributes.CBegin();
 67         }
 68         public List<Attribute>.ConstIterator CEnd() const
 69         {
 70             return attributes.CEnd();
 71         }
 72         public long Count() const
 73         {
 74             return attributes.Count();
 75         }
 76         public void Add(const Attribute& attribute)
 77         {
 78             attributes.Add(attribute);
 79         }
 80         public void Clear()
 81         {
 82             attributes.Clear();
 83         }
 84         public const ustring* GetAttributeValue(const ustring& namespaceUriconst ustring& localName) const
 85         {
 86             for (const Attribute& attribute : attributes)
 87             {
 88                 if (attribute.NamespaceUri() == namespaceUri && attribute.LocalName() == localName)
 89                 {
 90                     const ustring& value = attribute.Value();
 91                     return &value;
 92                 }
 93             }
 94             return null;
 95         }
 96         public const ustring* GetAttributeValue(const ustring& qualifiedName) const
 97         {
 98             for (const Attribute& attribute : attributes)
 99             {
100                 if (attribute.QualifiedName() == qualifiedName)
101                 {
102                     const ustring& value = attribute.Value();
103                     return &value;
104                 }
105             }
106             return null;
107         }
108         private List<Attribute> attributes;
109     }
110 
111     public class XmlContentHandler
112     {
113         public virtual default ~XmlContentHandler();
114         public virtual Result<bool> StartDocument(const System.Lex.Span& spanint fileIndex)
115         {
116             return Result<bool>(true);
117         }
118         public virtual Result<bool> EndDocument()
119         {
120             return Result<bool>(true);
121         }
122         public virtual Result<bool> Version(const ustring& xmlVersion)
123         {
124             return Result<bool>(true);
125         }
126         public virtual Result<bool> Standalone(bool standalone)
127         {
128             return Result<bool>(true);
129         }
130         public virtual Result<bool> Encoding(const ustring& encoding)
131         {
132             return Result<bool>(true);
133         }
134         public virtual Result<bool> HandleText(const System.Lex.Span& spanint fileIndexconst ustring& text)
135         {
136             return Result<bool>(true);
137         }
138         public virtual Result<bool> HandleComment(const System.Lex.Span& spanint fileIndexconst ustring& comment)
139         {
140             return Result<bool>(true);
141         }
142         public virtual Result<bool> HandlePI(const System.Lex.Span& spanint fileIndexconst ustring& targetconst ustring& data)
143         {
144             return Result<bool>(true);
145         }
146         public virtual Result<bool> HandleCDataSection(const System.Lex.Span& spanint fileIndexconst ustring& cdata)
147         {
148             return Result<bool>(true);
149         }
150         public virtual Result<bool> StartElement(const System.Lex.Span& spanint fileIndex
151             const ustring& namespaceUriconst ustring& localNameconst ustring& qualifiedNameconst Attributes& attributes)
152         {
153             return Result<bool>(true);
154         }
155         public virtual Result<bool> EndElement(const ustring& namespaceUriconst ustring& localNameconst ustring& qualifiedName)
156         {
157             return Result<bool>(true);
158         }
159         public virtual Result<bool> SkippedEntity(const ustring& entityName)
160         {
161             return Result<bool>(true);
162         }
163     }
164