private Token ScanXmlComment(bool stopAtEndOfLine) { int start = this.endPos; this.startPos = this.endPos; char char1; char char2; while (true) { char1 = this.GetChar(this.endPos); if ((int)char1 >= 55296 && (int)char1 <= 56319) { char2 = this.GetChar(this.endPos + 1); if ((int)char2 >= 56320 && (int)char2 <= 57343) { this.endPos += 2; } else { break; } } else if (XmlCharType.IsCharData(char1)) { while ((int)char1 == 45) { char1 = this.GetChar(++this.endPos); if ((int)char1 == 45) { char1 = this.GetChar(++this.endPos); if ((int)char1 == 62) { if (this.endPos > start + 3) { this.endPos -= 2; this.unescapedString = this.Substring(start, this.endPos - start); this.stillInsideMultiLineToken = true; return(Token.LiteralComment); } ++this.endPos; this.unescapedString = "-->"; this.state = Scanner.State.Xml; return(Token.EndOfTag); } if ((int)char1 != 0) { if (this.endPos > start + 2) { this.endPos -= 2; this.unescapedString = this.Substring(start, this.endPos - start); this.stillInsideMultiLineToken = true; return(Token.LiteralComment); } this.unescapedString = this.Substring(start, this.endPos - start); this.stillInsideMultiLineToken = true; this.HandleError(SR.IllegalComment, this.unescapedString); return(Token.IllegalCharacter); } if ((int)char1 == 0 && this.endPos >= this.maxPos) { return(Token.LiteralComment); } } else if ((int)char1 == 0 && this.endPos >= this.maxPos) { if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; } return(Token.LiteralComment); } } if ((int)char1 != 0 || this.endPos < this.maxPos) { ++this.endPos; } else { goto label_24; } } else { goto label_6; } } return(this.HandleIllegalSurrogatePair(char1, char2, Token.LiteralComment)); label_6: return(this.HandleIllegalCharacter(char1, Token.LiteralComment)); label_24: if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; } return(Token.LiteralComment); }
private Token ScanXmlText(bool stopAtEndOfLine) { int num = this.endPos; this.startPos = this.endPos; this.unescapedString = (string)null; this.isWhitespace = true; char char1; while (true) { do { char1 = this.GetChar(this.endPos++); if ((int)char1 == 38) { this.stillInsideMultiLineToken = true; goto label_15; } else if ((int)char1 == 0 && this.endPos >= this.maxPos) { if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; goto label_15; } else { goto label_15; } } else if ((int)char1 >= 55296 && (int)char1 <= 56319) { char char2 = this.GetChar(this.endPos); if ((int)char2 < 56320 || (int)char2 > 57343) { --this.endPos; return(this.HandleIllegalSurrogatePair(char1, char2, Token.LiteralContentString)); } ++this.endPos; } else { if (!XmlCharType.IsCharData(char1)) { --this.endPos; return(this.HandleIllegalCharacter(char1, Token.LiteralContentString)); } if ((int)char1 == 60) { goto label_15; } } }while (!this.isWhitespace || Scanner.IsXmlWhitespace(char1)); this.isWhitespace = false; } label_15: int length = this.endPos - num - 1; this.unescapedString = length > 0 ? this.Substring(this.startPos, length) : ""; if ((int)char1 == 60 || (int)char1 == 38) { --this.endPos; } return(Token.LiteralContentString); }
private Token ScanXmlString(char closingQuote, bool stopAtEndOfLine) { this.startPos = this.endPos; this.unescapedString = (string)null; this.isWhitespace = false; char char1 = this.GetChar(this.endPos); if ((int)char1 >= 55296 && (int)char1 <= 56319) { char char2 = this.GetChar(this.endPos + 1); if ((int)char2 < 56320 || (int)char2 > 57343) { this.stillInsideMultiLineToken = true; if (this.endPos < this.maxPos) { ++this.endPos; } this.HandleError(SR.IllegalSurrogatePair, new string[2] { Convert.ToInt32(char1).ToString("x"), Convert.ToInt32(char2).ToString("x") }); return(Token.IllegalCharacter); } this.endPos += 2; } else { if (!XmlCharType.IsCharData(char1)) { this.stillInsideMultiLineToken = true; ++this.endPos; this.unescapedString = char1.ToString(); this.HandleError(SR.IllegalCharacter, new string[2] { char1.ToString(), Convert.ToInt32(char1).ToString() }); return(Token.IllegalCharacter); } if ((int)char1 == 60 && this.mode != Scanner.State.InternalSubset) { ++this.endPos; this.unescapedString = char1.ToString(); this.HandleError(SR.IllegalAttributeCharacter, new string[2] { char1.ToString(), Convert.ToInt32(char1).ToString() }); --this.endPos; return(Token.IllegalCharacter); } } char char3; do { char3 = this.GetChar(this.endPos++); if ((int)char3 >= 55296 && (int)char3 <= 56319) { char char2 = this.GetChar(this.endPos++); if ((int)char2 < 56320 || (int)char2 > 57343) { this.stillInsideMultiLineToken = true; break; } } else { if (!XmlCharType.IsCharData(char3)) { this.stillInsideMultiLineToken = true; break; } if ((int)char3 == 60 && this.mode != Scanner.State.InternalSubset) { this.stillInsideMultiLineToken = true; break; } if ((int)char3 == 38) { this.stillInsideMultiLineToken = true; break; } if ((int)char3 == 0 && this.endPos >= this.maxPos) { if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; } --this.endPos; break; } } }while ((int)char3 != (int)closingQuote); this.unescapedString = this.endPos > this.startPos + 1 ? this.Substring(this.startPos, this.endPos - this.startPos - 1) : ""; if ((int)char3 != (int)closingQuote) { --this.endPos; } this.isWhitespace = false; return(Token.StringLiteral); }
private Token ScanXmlProcessingInstructionsTag(bool stopAtEndOfLine) { int start = this.endPos; this.startPos = this.endPos; if ((int)this.GetChar(this.endPos - 1) == 63) { this.stillInsideMultiLineToken = true; this.ScanName(); return(Token.Identifier); } char char1; char char2; while (true) { char1 = this.GetChar(this.endPos); if ((int)char1 >= 55296 && (int)char1 <= 56319) { char2 = this.GetChar(this.endPos + 1); if ((int)char2 >= 56320 && (int)char2 <= 57343) { this.endPos += 2; } else { break; } } else if (XmlCharType.IsCharData(char1)) { while ((int)char1 == 63) { char1 = this.GetChar(++this.endPos); if ((int)char1 == 62) { if (this.endPos > start + 2) { --this.endPos; this.unescapedString = this.Substring(start, this.endPos - start); this.stillInsideMultiLineToken = true; return(Token.ProcessingInstructions); } ++this.endPos; this.state = Scanner.State.Xml; return(Token.EndOfTag); } if ((int)char1 == 0 && this.endPos >= this.maxPos) { if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; } return(Token.ProcessingInstructions); } } if ((int)char1 != 0 || this.endPos < this.maxPos) { ++this.endPos; } else { goto label_18; } } else { goto label_7; } } return(this.HandleIllegalSurrogatePair(char1, char2, Token.ProcessingInstructions)); label_7: return(this.HandleIllegalCharacter(char1, Token.ProcessingInstructions)); label_18: if (stopAtEndOfLine) { this.stillInsideMultiLineToken = true; } return(Token.ProcessingInstructions); }