public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '"': t.Transition(AfterDoctypeSystemIdentifier); break; case nullChar: t.Error(this); t.doctypePending.systemIdentifier.Append(replacementChar); break; case '>': t.Error(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; case eof: t.EofError(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; default: t.doctypePending.systemIdentifier.Append(c); break; } }
// 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; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '-': t.Transition(CommentStartDash); break; case nullChar: t.Error(this); t.commentPending.data.Append(replacementChar); t.Transition(Comment); break; case '>': t.Error(this); t.EmitCommentPending(); t.Transition(Data); break; case eof: t.EofError(this); t.EmitCommentPending(); t.Transition(Data); break; default: t.commentPending.data.Append(c); t.Transition(Comment); break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': break; case '>': t.EmitDoctypePending(); t.Transition(Data); break; case eof: t.EofError(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; default: t.Error(this); t.Transition(BogusDoctype); // NOT force quirks break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': t.Transition(BeforeAttributeName); break; case '/': t.Transition(SelfClosingStartTag); break; case '>': t.EmitTagPending(); t.Transition(Data); break; case eof: t.EofError(this); t.Transition(Data); break; default: t.Error(this); r.Unconsume(); t.Transition(BeforeAttributeName); break; } }
public override void Read(Tokeniser t, CharacterReader r) { if (r.IsEmpty) { t.EofError(this); t.Transition(Data); return; } char c = r.Consume(); switch (c) { case '-': t.Emit(c); t.Transition(ScriptDataEscapedDashDash); break; case '<': t.Transition(ScriptDataEscapedLessThanSign); break; case nullChar: t.Error(this); t.Emit(replacementChar); t.Transition(ScriptDataEscaped); break; default: t.Emit(c); t.Transition(ScriptDataEscaped); break; } }
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 } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': // ignore break; case '"': t.Transition(AttributeValue_doubleQuoted); break; case '&': r.Unconsume(); t.Transition(AttributeValue_unquoted); break; case '\'': t.Transition(AttributeValue_singleQuoted); break; case nullChar: t.Error(this); t.tagPending.AppendAttributeValue(replacementChar); t.Transition(AttributeValue_unquoted); break; case eof: t.EofError(this); t.Transition(Data); break; case '>': t.Error(this); t.EmitTagPending(); t.Transition(Data); break; case '<': case '=': case '`': t.Error(this); t.tagPending.AppendAttributeValue(c); t.Transition(AttributeValue_unquoted); break; default: r.Unconsume(); t.Transition(AttributeValue_unquoted); break; } }
public override void Read(Tokeniser t, CharacterReader r) { if (r.MatchesLetter()) { string name = r.ConsumeLetterSequence(); t.tagPending.AppendTagName(name.ToLowerInvariant()); t.dataBuffer.Append(name); return; } char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': if (t.IsAppropriateEndTagToken()) { t.Transition(BeforeAttributeName); } else { AnythingElse(t, r); } break; case '/': if (t.IsAppropriateEndTagToken()) { t.Transition(SelfClosingStartTag); } else { AnythingElse(t, r); } break; case '>': if (t.IsAppropriateEndTagToken()) { t.EmitTagPending(); t.Transition(Data); } else { AnythingElse(t, r); } break; default: AnythingElse(t, r); break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': // ignore 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); t.Transition(AttributeName); break; case eof: t.EofError(this); t.Transition(Data); break; case '"': case '\'': case '<': t.Error(this); t.tagPending.NewAttribute(); t.tagPending.AppendAttributeName(c); t.Transition(AttributeName); break; default: // A-Z, anything else t.tagPending.NewAttribute(); r.Unconsume(); t.Transition(AttributeName); break; } }
// 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) { char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': t.Transition(BeforeDoctypeSystemIdentifier); break; case '>': t.Error(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; case '"': t.Error(this); // system id empty t.Transition(DoctypeSystemIdentifier_doubleQuoted); break; case '\'': t.Error(this); // system id empty t.Transition(DoctypeSystemIdentifier_singleQuoted); break; case eof: t.EofError(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; default: t.Error(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); break; } }
public override void Read(Tokeniser t, CharacterReader r) { if (r.MatchesLetter()) { string name = r.ConsumeLetterSequence(); t.doctypePending.name.Append(name.ToLowerInvariant()); return; } char c = r.Consume(); switch (c) { case '>': t.EmitDoctypePending(); t.Transition(Data); break; case '\t': case '\n': case '\f': case ' ': t.Transition(AfterDoctypeName); break; case nullChar: t.Error(this); t.doctypePending.name.Append(replacementChar); break; case eof: t.EofError(this); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; default: t.doctypePending.name.Append(c); 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 } }
public override void Read(Tokeniser t, CharacterReader r) { switch (r.Consume()) { case '/': t.CreateTempBuffer(); t.Transition(ScriptDataEndTagOpen); break; case '!': t.Emit("<!"); t.Transition(ScriptDataEscapeStart); break; default: t.Emit("<"); r.Unconsume(); t.Transition(ScriptData); break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '>': t.EmitDoctypePending(); t.Transition(Data); break; case eof: t.EmitDoctypePending(); t.Transition(Data); break; default: // ignore char break; } }
public override void Read(Tokeniser t, CharacterReader r) { if (r.MatchesLetter()) { t.CreateDoctypePending(); t.Transition(DoctypeName); return; } char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': break; // ignore whitespace case nullChar: t.Error(this); t.doctypePending.name.Append(replacementChar); t.Transition(DoctypeName); break; case eof: t.EofError(this); t.CreateDoctypePending(); t.doctypePending.forceQuirks = true; t.EmitDoctypePending(); t.Transition(Data); break; default: t.CreateDoctypePending(); t.doctypePending.name.Append(c); t.Transition(DoctypeName); break; } }
public override void Read(Tokeniser t, CharacterReader r) { if (r.MatchesLetter()) { string name = r.ConsumeLetterSequence(); t.dataBuffer.Append(name.ToLowerInvariant()); t.Emit(name); return; } char c = r.Consume(); switch (c) { case '\t': case '\n': case '\f': case ' ': case '/': case '>': if (t.dataBuffer.ToString().Equals("script")) { t.Transition(ScriptDataEscaped); } else { t.Transition(ScriptDataDoubleEscaped); } t.Emit(c); break; default: r.Unconsume(); t.Transition(ScriptDataDoubleEscaped); break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '>': t.tagPending.selfClosing = true; t.EmitTagPending(); t.Transition(Data); break; case eof: t.EofError(this); t.Transition(Data); break; default: t.Error(this); t.Transition(BeforeAttributeName); break; } }
public override void Read(Tokeniser t, CharacterReader r) { char c = r.Consume(); switch (c) { case '-': t.Emit(c); break; case '<': t.Emit(c); t.Transition(ScriptDataDoubleEscapedLessthanSign); break; case '>': t.Emit(c); t.Transition(ScriptData); break; case nullChar: t.Error(this); t.Emit(replacementChar); t.Transition(ScriptDataDoubleEscaped); break; case eof: t.EofError(this); t.Transition(Data); break; default: t.Emit(c); t.Transition(ScriptDataDoubleEscaped); break; } }
// 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; } }