public override void Read(Tokeniser t, CharacterReader r)
            {
                char c = r.Current;

                switch (c)
                {
                case '-':
                    t.Emit(c);
                    t.AdvanceTransition(ScriptDataDoubleEscapedDash);
                    break;

                case '<':
                    t.Emit(c);
                    t.AdvanceTransition(ScriptDataDoubleEscapedLessthanSign);
                    break;

                case nullChar:
                    t.Error(this);
                    r.Advance();
                    t.Emit(replacementChar);
                    break;

                case eof:
                    t.EofError(this);
                    t.Transition(Data);
                    break;

                default:
                    string data = r.ConsumeToAny('-', '<', nullChar);
                    t.Emit(data);
                    break;
                }
            }
            // handles data in title, textarea etc
            public override void Read(Tokeniser t, CharacterReader r)
            {
                switch (r.Current)
                {
                case '&':
                    t.AdvanceTransition(CharacterReferenceInRcdata);
                    break;

                case '<':
                    t.AdvanceTransition(RcdataLessthanSign);
                    break;

                case nullChar:
                    t.Error(this);
                    r.Advance();
                    t.Emit(replacementChar);
                    break;

                case eof:
                    t.Emit(Token.EOF.Instance);
                    break;

                default:
                    string data = r.ConsumeToAny('&', '<', nullChar);
                    t.Emit(data);
                    break;
                }
            }
            public override void Read(Tokeniser t, CharacterReader r)
            {
                char c = r.Current;

                switch (c)
                {
                case '-':
                    t.AdvanceTransition(CommentEndDash);
                    break;

                case nullChar:
                    t.Error(this);
                    r.Advance();
                    t.commentPending.data.Append(replacementChar);
                    break;

                case eof:
                    t.EofError(this);
                    t.EmitCommentPending();
                    t.Transition(Data);
                    break;

                default:
                    t.commentPending.data.Append(r.ConsumeToAny('-', nullChar));
                    break;
                }
            }
Beispiel #4
0
            public override void Read(Tokeniser t, CharacterReader r)
            {
                if (r.IsEmpty)
                {
                    t.EofError(this);
                    t.Transition(Data);
                    return;
                }

                switch (r.Current)
                {
                case '-':
                    t.Emit('-');
                    t.AdvanceTransition(ScriptDataEscapedDash);
                    break;

                case '<':
                    t.AdvanceTransition(ScriptDataEscapedLessThanSign);
                    break;

                case nullChar:
                    t.Error(this);
                    r.Advance();
                    t.Emit(replacementChar);
                    break;

                default:
                    string data = r.ConsumeToAny('-', '<', nullChar);
                    t.Emit(data);
                    break;
                }
            }
Beispiel #5
0
            // in data state, gather characters until a char reference or tag is found
            public override void Read(Tokeniser t, CharacterReader r)
            {
                switch (r.Current)
                {
                case '&':
                    t.AdvanceTransition(CharacterReferenceInData);
                    break;

                case '<':
                    t.AdvanceTransition(TagOpen);
                    break;

                case nullChar:
                    t.Error(this);     // NOT replacement char (oddly?)
                    t.Emit(r.Consume());
                    break;

                case eof:
                    t.Emit(Token.EOF.Instance);
                    break;

                default:
                    string data = r.ConsumeToAny('&', '<', nullChar);
                    t.Emit(data);
                    break;
                }
            }
Beispiel #6
0
            public override void Read(Tokeniser t, CharacterReader r)
            {
                string value = r.ConsumeToAny('\t', '\n', '\f', ' ', '&', '>', nullChar, '"', '\'', '<', '=', '`');

                if (value.Length > 0)
                {
                    t.tagPending.AppendAttributeValue(value);
                }

                char c = r.Consume();

                switch (c)
                {
                case '\t':
                case '\n':
                case '\f':
                case ' ':
                    t.Transition(BeforeAttributeName);
                    break;

                case '&':
                    string ref2 = t.ConsumeCharacterReference('>', true);
                    if (ref2 == null)
                    {
                        t.tagPending.AppendAttributeValue('&');
                    }
                    else
                    {
                        t.tagPending.AppendAttributeValue(ref2);
                    }
                    break;

                case '>':
                    t.EmitTagPending();
                    t.Transition(Data);
                    break;

                case nullChar:
                    t.Error(this);
                    t.tagPending.AppendAttributeValue(replacementChar);
                    break;

                case eof:
                    t.EofError(this);
                    t.Transition(Data);
                    break;

                case '"':
                case '\'':
                case '<':
                case '=':
                case '`':
                    t.Error(this);
                    t.tagPending.AppendAttributeValue(c);
                    break;

                    // no default, handled in consume to any above
                }
            }
Beispiel #7
0
            // from before attribute name
            public override void Read(Tokeniser t, CharacterReader r)
            {
                string name = r.ConsumeToAny('\t', '\n', '\f', ' ', '/', '=', '>', nullChar, '"', '\'', '<');

                t.tagPending.AppendAttributeName(name.ToLowerInvariant());

                char c = r.Consume();

                switch (c)
                {
                case '\t':
                case '\n':
                case '\f':
                case ' ':
                    t.Transition(AfterAttributeName);
                    break;

                case '/':
                    t.Transition(SelfClosingStartTag);
                    break;

                case '=':
                    t.Transition(BeforeAttributeValue);
                    break;

                case '>':
                    t.EmitTagPending();
                    t.Transition(Data);
                    break;

                case nullChar:
                    t.Error(this);
                    t.tagPending.AppendAttributeName(replacementChar);
                    break;

                case eof:
                    t.EofError(this);
                    t.Transition(Data);
                    break;

                case '"':
                case '\'':
                case '<':
                    t.Error(this);
                    t.tagPending.AppendAttributeName(c);
                    // no default, as covered in consumeToAny
                    break;
                }
            }
            public override void Read(Tokeniser t, CharacterReader r)
            {
                string value = r.ConsumeToAny('\'', '&', nullChar);

                if (value.Length > 0)
                {
                    t.tagPending.AppendAttributeValue(value);
                }

                char c = r.Consume();

                switch (c)
                {
                case '\'':
                    t.Transition(AfterAttributeValue_quoted);
                    break;

                case '&':
                    string ref2 = t.ConsumeCharacterReference('\'', true);
                    if (ref2 == null)
                    {
                        t.tagPending.AppendAttributeValue('&');
                    }
                    else
                    {
                        t.tagPending.AppendAttributeValue(ref2);
                    }

                    break;

                case nullChar:
                    t.Error(this);
                    t.tagPending.AppendAttributeValue(replacementChar);
                    break;

                case eof:
                    t.EofError(this);
                    t.Transition(Data);
                    break;
                    // no default, handled in consume to any above
                }
            }
            // from < or </ in data, will have start or end tag pending
            public override void Read(Tokeniser t, CharacterReader r)
            {
                // previous TagOpen state did NOT consume, will have a letter char in current
                string tagName = r.ConsumeToAny('\t', '\n', '\f', ' ', '/', '>', nullChar).ToLowerInvariant();

                t.tagPending.AppendTagName(tagName);

                switch (r.Consume())
                {
                case '\t':
                case '\n':
                case '\f':
                case ' ':
                    t.Transition(BeforeAttributeName);
                    break;

                case '/':
                    t.Transition(SelfClosingStartTag);
                    break;

                case '>':
                    t.EmitTagPending();
                    t.Transition(Data);
                    break;

                case nullChar:     // replacement
                    t.tagPending.AppendTagName(replacementStr);
                    break;

                case eof:     // should emit pending tag?
                    t.EofError(this);
                    t.Transition(Data);
                    // no default, as covered with above consumeToAny
                    break;
                }
            }