Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }