2004-01-13 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml / XmlParserInput.cs
index b5b5da741bd974af4c4687360216cb206d5c1939..715b30aa51d074b532f50494e7ac699da1e0ba25 100644 (file)
@@ -1,11 +1,11 @@
-//
-// System.Xml.XmlParserInput
-//
-// Author:
-//     Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)
-//
-//     (C)2003 Atsushi Enomoto
-//
+//\r
+// System.Xml.XmlParserInput\r
+//\r
+// Author:\r
+//     Atsushi Enomoto (ginga@kit.hi-ho.ne.jp)\r
+//\r
+//     (C)2003 Atsushi Enomoto\r
+//\r
 using System;\r
 using System.IO;\r
 using System.Text;\r
@@ -37,192 +37,163 @@ namespace Mono.Xml.Native
                #endregion\r
 \r
                #region Public Methods\r
-               // Read the next character and compare it against the
-               // specified character.
-               public void Close ()
-               {
-                       this.reader.Close ();
-               }
-
-               public void Expect (int expected)
-               {
-                       int ch = ReadChar ();
-
-                       if (ch != expected) {
-                               throw ReaderError (
-                                       String.Format (
-                                               "expected '{0}' ({1:X}) but found '{2}' ({3:X})",
-                                               (char)expected,
-                                               expected,
-                                               (char)ch,
-                                               ch));
-                       }
-               }
-
-               public void Expect (string expected)
-               {
-                       int len = expected.Length;
-                       for(int i=0; i< len; i++)
-                               Expect (expected[i]);
-               }
-
-               public void InsertParameterEntityBuffer (string value)
-               {
-                       this.peBuffer.Insert (0, ' ' + value + ' ');
-               }
-
-               public int PeekChar ()
-               {
-                       if (peBuffer.Length > 0)
-                               return peBuffer [0];
-
-                       if (can_seek)
-                               return reader.Peek ();
-
-                       if (has_peek)
-                               return peek_char;
-
-                       peek_char = reader.Read ();
-                       has_peek = true;
-                       return peek_char;
-               }
-
-               public int ReadChar ()
-               {
-                       int ch;
-
-                       if (peBuffer.Length > 0) {
-                               ch = peBuffer [0];
-                               peBuffer.Remove (0, 1);
-                               // I decided not to add character to currentTag with respect to PERef value
-                               return ch;
-                       }
-
-                       if (has_peek) {
-                               ch = peek_char;
-                               has_peek = false;
-                       } else {
-                               ch = reader.Read ();
-                       }
-
-                       if (ch == '\n') {
-                               line++;
-                               column = 1;
-                       } else {
-                               column++;
-                       }
-                       currentMarkup.Append ((char) ch);
-                       return ch;
-               }
-               #endregion
-
-               #region Public Properties
-               public string BaseURI {
-                       get { return baseURI; }
-               }
-
-               public StringBuilder CurrentMarkup {
-                       get { return this.currentMarkup; }
-               }
-
-               private char [] wsChars = new char [] {' ', '\r', '\n', '\t'};
-               public bool HasPEBuffer {
-                       get {
-                               if (peBuffer.Length == 0)
-                                       return false;
-                               else if (peBuffer.ToString ().Trim (wsChars).Length == 0)
-                                       return false;
-                               else
-                                       return true;
-                       }
-               }
-
-               public int LineNumber {
-                       get { return line; }
-               }
-
-               public int LinePosition {
-                       get { return column; }
-               }
-               public string Name \r
-               {
-                       get {
-                               return currentMarkup.ToString (parsedNameStart, parsedNameEnd - parsedNameStart);
-                       }
-               }
-
-               public string Value {
-                       get {
-                               return currentMarkup.ToString (parsedValueStart, parsedValueEnd - parsedValueStart);
-                       }
-               }
-               #endregion
+               // Read the next character and compare it against the\r
+               // specified character.\r
+               public void Close ()\r
+               {\r
+                       this.reader.Close ();\r
+               }\r
 \r
-               #region Privates\r
-               private void ReadNameOrNmToken(bool isNameToken)\r
+               public void Expect (int expected)\r
                {\r
-                       parsedNameStart = currentMarkup.Length;\r
-                       if(isNameToken) {\r
-                               if (!XmlChar.IsNameChar (PeekChar ()))\r
-                                       throw ReaderError ("a name did not start with a legal character " + PeekChar ());\r
+                       int ch = ReadChar ();\r
+\r
+                       if (ch != expected) {\r
+                               throw ReaderError (\r
+                                       String.Format (\r
+                                               "expected '{0}' ({1:X}) but found '{2}' ({3:X})",\r
+                                               (char)expected,\r
+                                               expected,\r
+                                               (char)ch,\r
+                                               ch));\r
                        }\r
-                       else {\r
-                               if (!XmlChar.IsFirstNameChar (PeekChar ()))\r
-                                       throw ReaderError ("a name did not start with a valid character " + PeekChar () + "(" + (char) PeekChar () + ")");\r
+               }\r
+\r
+               public void Expect (string expected)\r
+               {\r
+                       int len = expected.Length;\r
+                       for(int i=0; i< len; i++)\r
+                               Expect (expected[i]);\r
+               }\r
+\r
+               public void InsertParameterEntityBuffer (string value)\r
+               {\r
+                       this.peBuffer.Insert (0, ' ' + value + ' ');\r
+                       peStored = true;\r
+               }\r
+\r
+               public int PeekChar ()\r
+               {\r
+                       if (peStored)\r
+                               return peBuffer [0];\r
+\r
+                       if (can_seek)\r
+                               return reader.Peek ();\r
+\r
+                       if (has_peek)\r
+                               return peek_char;\r
+\r
+                       peek_char = reader.Read ();\r
+                       has_peek = true;\r
+                       return peek_char;\r
+               }\r
+\r
+               public int ReadChar ()\r
+               {\r
+                       int ch;\r
+\r
+                       if (peStored) {\r
+                               ch = peBuffer [0];\r
+                               peBuffer.Remove (0, 1);\r
+                               peStored = peBuffer.Length > 0;\r
+                               // I decided not to add character to currentTag with respect to PERef value\r
+                               return ch;\r
+                       }\r
+\r
+                       if (has_peek) {\r
+                               ch = peek_char;\r
+                               has_peek = false;\r
+                       } else {\r
+                               ch = reader.Read ();\r
+                       }\r
+\r
+                       if (ch == '\n') {\r
+                               line++;\r
+                               column = 1;\r
+                       } else {\r
+                               column++;\r
+                       }\r
+                       currentMarkup.Append ((char) ch);\r
+                       return ch;\r
+               }\r
+               #endregion\r
+\r
+               #region Public Properties\r
+               public string BaseURI {\r
+                       get { return baseURI; }\r
+               }\r
+\r
+               public StringBuilder CurrentMarkup {\r
+                       get { return this.currentMarkup; }\r
+               }\r
+\r
+               public bool HasPEBuffer {\r
+                       get {\r
+                               if (!peStored)\r
+                                       return false;\r
+                               else if (peBuffer.ToString ().Trim (XmlChar.WhitespaceChars).Length == 0)\r
+                                       return false;\r
+                               else\r
+                                       return true;\r
                        }\r
-
-                       ReadChar ();
-
-                       while (XmlChar.IsNameChar (PeekChar ())) {
-                               ReadChar ();
-                       }
-
-                       parsedNameEnd = currentMarkup.Length;
-               }
-
-               // Privates
+               }\r
+\r
+               public int LineNumber {\r
+                       get { return line; }\r
+               }\r
+\r
+               public int LinePosition {\r
+                       get { return column; }\r
+               }\r
+\r
+               public bool InitialState {\r
+                       get { return initialState; }\r
+                       set { initialState = value; }\r
+               }\r
+\r
+               #endregion\r
+\r
+               #region Privates\r
                TextReader reader;\r
-               bool can_seek;
-               bool has_peek;
-               int peek_char;
-               int line;
-               int column;
-               StringBuilder currentMarkup = new StringBuilder ();
-               int parsedNameStart;
-               int parsedNameEnd;
-               int parsedValueStart;
-               int parsedValueEnd;
-               StringBuilder peBuffer = new StringBuilder ();
-               string baseURI;
-
-               private int ParseCharReference (string name)
-               {
-                       int ret = -1;
-                       if (name.Length > 0 && name [0] == '#') {
-                               if (name [1] == 'x')
-                                       ret = int.Parse (name.Substring (2, name.Length - 2), NumberStyles.None & NumberStyles.AllowHexSpecifier);
-                               else
-                                       ret = int.Parse (name.Substring (1, name.Length - 1));
-                       }
-                       return ret;
-               }
-
-               private int ParseKnownEntityReference (string name)
-               {
-                       switch (name) {
-                       case "quot": return '"';
-                       case "lt": return '<';
-                       case "gt": return '>';
-                       case "amp": return '&';
-                       case "apos": return '\'';
-                       }
-                       return -1;
-               }
-
-               private XmlException ReaderError (string message)
-               {
-                       return new XmlException (message, line, column);
-               }
+               bool can_seek;\r
+               bool has_peek;\r
+               int peek_char;\r
+               int line;\r
+               int column;\r
+               StringBuilder currentMarkup = new StringBuilder ();\r
+               StringBuilder peBuffer = new StringBuilder ();\r
+               string baseURI;\r
+               bool peStored = false;\r
+               bool initialState = true;\r
+\r
+               private int ParseCharReference (string name)\r
+               {\r
+                       int ret = -1;\r
+                       if (name.Length > 0 && name [0] == '#') {\r
+                               if (name [1] == 'x')\r
+                                       ret = int.Parse (name.Substring (2, name.Length - 2), NumberStyles.None & NumberStyles.AllowHexSpecifier);\r
+                               else\r
+                                       ret = int.Parse (name.Substring (1, name.Length - 1));\r
+                       }\r
+                       return ret;\r
+               }\r
+\r
+               private int ParseKnownEntityReference (string name)\r
+               {\r
+                       switch (name) {\r
+                       case "quot": return '"';\r
+                       case "lt": return '<';\r
+                       case "gt": return '>';\r
+                       case "amp": return '&';\r
+                       case "apos": return '\'';\r
+                       }\r
+                       return -1;\r
+               }\r
+\r
+               private XmlException ReaderError (string message)\r
+               {\r
+                       return new XmlException (message, null, line, column);\r
+               }\r
                #endregion\r
        }\r
 }\r