Rhino.TokenStream.GetNextXMLToken C# (CSharp) Method

GetNextXMLToken() private method

private GetNextXMLToken ( ) : int
return int
		internal virtual int GetNextXMLToken()
		{
			tokenBeg = cursor;
			stringBufferTop = 0;
			// remember the XML
			for (int c = GetChar(); c != EOF_CHAR; c = GetChar())
			{
				if (xmlIsTagContent)
				{
					switch (c)
					{
						case '>':
						{
							AddToString(c);
							xmlIsTagContent = false;
							xmlIsAttribute = false;
							break;
						}

						case '/':
						{
							AddToString(c);
							if (PeekChar() == '>')
							{
								c = GetChar();
								AddToString(c);
								xmlIsTagContent = false;
								xmlOpenTagsCount--;
							}
							break;
						}

						case '{':
						{
							UngetChar(c);
							this.@string = GetStringFromBuffer();
							return Token.XML;
						}

						case '\'':
						case '"':
						{
							AddToString(c);
							if (!ReadQuotedString(c))
							{
								return Token.ERROR;
							}
							break;
						}

						case '=':
						{
							AddToString(c);
							xmlIsAttribute = true;
							break;
						}

						case ' ':
						case '\t':
						case '\r':
						case '\n':
						{
							AddToString(c);
							break;
						}

						default:
						{
							AddToString(c);
							xmlIsAttribute = false;
							break;
						}
					}
					if (!xmlIsTagContent && xmlOpenTagsCount == 0)
					{
						this.@string = GetStringFromBuffer();
						return Token.XMLEND;
					}
				}
				else
				{
					switch (c)
					{
						case '<':
						{
							AddToString(c);
							c = PeekChar();
							switch (c)
							{
								case '!':
								{
									c = GetChar();
									// Skip !
									AddToString(c);
									c = PeekChar();
									switch (c)
									{
										case '-':
										{
											c = GetChar();
											// Skip -
											AddToString(c);
											c = GetChar();
											if (c == '-')
											{
												AddToString(c);
												if (!ReadXmlComment())
												{
													return Token.ERROR;
												}
											}
											else
											{
												// throw away the string in progress
												stringBufferTop = 0;
												this.@string = null;
												parser.AddError("msg.XML.bad.form");
												return Token.ERROR;
											}
											break;
										}

										case '[':
										{
											c = GetChar();
											// Skip [
											AddToString(c);
											if (GetChar() == 'C' && GetChar() == 'D' && GetChar() == 'A' && GetChar() == 'T' && GetChar() == 'A' && GetChar() == '[')
											{
												AddToString('C');
												AddToString('D');
												AddToString('A');
												AddToString('T');
												AddToString('A');
												AddToString('[');
												if (!ReadCDATA())
												{
													return Token.ERROR;
												}
											}
											else
											{
												// throw away the string in progress
												stringBufferTop = 0;
												this.@string = null;
												parser.AddError("msg.XML.bad.form");
												return Token.ERROR;
											}
											break;
										}

										default:
										{
											if (!ReadEntity())
											{
												return Token.ERROR;
											}
											break;
										}
									}
									break;
								}

								case '?':
								{
									c = GetChar();
									// Skip ?
									AddToString(c);
									if (!ReadPI())
									{
										return Token.ERROR;
									}
									break;
								}

								case '/':
								{
									// End tag
									c = GetChar();
									// Skip /
									AddToString(c);
									if (xmlOpenTagsCount == 0)
									{
										// throw away the string in progress
										stringBufferTop = 0;
										this.@string = null;
										parser.AddError("msg.XML.bad.form");
										return Token.ERROR;
									}
									xmlIsTagContent = true;
									xmlOpenTagsCount--;
									break;
								}

								default:
								{
									// Start tag
									xmlIsTagContent = true;
									xmlOpenTagsCount++;
									break;
								}
							}
							break;
						}

						case '{':
						{
							UngetChar(c);
							this.@string = GetStringFromBuffer();
							return Token.XML;
						}

						default:
						{
							AddToString(c);
							break;
						}
					}
				}
			}
			tokenEnd = cursor;
			stringBufferTop = 0;
			// throw away the string in progress
			this.@string = null;
			parser.AddError("msg.XML.bad.form");
			return Token.ERROR;
		}