-//
-// 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
#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