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);
      }
    }
 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);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matchesLetter()) {
     t.createTempBuffer();
     t.dataBuffer.append(Character.toLowerCase(r.current()));
     t.emit("<" + r.current());
     t.advanceTransition(ScriptDataDoubleEscapeStart);
   } else if (r.matches('/')) {
     t.createTempBuffer();
     t.advanceTransition(ScriptDataEscapedEndTagOpen);
   } else {
     t.emit('<');
     t.transition(ScriptDataEscaped);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.isEmpty()) {
     t.eofError(this);
     t.emit("</");
     t.transition(Data);
   } else if (r.matchesLetter()) {
     t.createTagPending(false);
     t.transition(TagName);
   } else if (r.matches('>')) {
     t.error(this);
     t.advanceTransition(Data);
   } else {
     t.error(this);
     t.advanceTransition(BogusComment);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matches('-')) {
     t.emit('-');
     t.advanceTransition(ScriptDataEscapedDashDash);
   } else {
     t.transition(ScriptData);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matches('/')) {
     t.emit('/');
     t.createTempBuffer();
     t.advanceTransition(ScriptDataDoubleEscapeEnd);
   } else {
     t.transition(ScriptDataDoubleEscaped);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matches('/')) {
     t.createTempBuffer();
     t.advanceTransition(RawtextEndTagOpen);
   } else {
     t.emit('<');
     t.transition(Rawtext);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   // todo: handle bogus comment starting from eof. when does that trigger?
   // rewind to capture character that lead us here
   r.unconsume();
   Token.Comment comment = new Token.Comment();
   comment.data.append(r.consumeTo('>'));
   // todo: replace nullChar with replaceChar
   t.emit(comment);
   t.advanceTransition(Data);
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matchesLetter()) {
     t.createTagPending(false);
     t.tagPending.appendTagName(Character.toLowerCase(r.current()));
     t.dataBuffer.append(r.current());
     t.advanceTransition(ScriptDataEscapedEndTagName);
   } else {
     t.emit("</");
     t.transition(ScriptDataEscaped);
   }
 }
 // in data state, gather characters until a character reference or tag is found
 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 character (oddly?)
       t.emit(r.consume());
       break;
     case eof:
       t.emit(new Token.EOF());
       break;
     default:
       String data = r.consumeToAny('&', '<', nullChar);
       t.emit(data);
       break;
   }
 }
예제 #11
0
 void read(Tokeniser t, CharacterReader r) {
   if (r.isEmpty()) {
     t.eofError(this);
     t.doctypePending.forceQuirks = true;
     t.emitDoctypePending();
     t.transition(Data);
     return;
   }
   if (r.matches('>')) {
     t.emitDoctypePending();
     t.advanceTransition(Data);
   } else if (r.matchConsumeIgnoreCase("PUBLIC")) {
     t.transition(AfterDoctypePublicKeyword);
   } else if (r.matchConsumeIgnoreCase("SYSTEM")) {
     t.transition(AfterDoctypeSystemKeyword);
   } else {
     t.error(this);
     t.doctypePending.forceQuirks = true;
     t.advanceTransition(BogusDoctype);
   }
 }
 /// handles data in title, textarea etc
 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(new Token.EOF());
       break;
     default:
       String data = r.consumeToAny('&', '<', nullChar);
       t.emit(data);
       break;
   }
 }
 // from < in data
 void read(Tokeniser t, CharacterReader r) {
   switch (r.current()) {
     case '!':
       t.advanceTransition(MarkupDeclarationOpen);
       break;
     case '/':
       t.advanceTransition(EndTagOpen);
       break;
     case '?':
       t.advanceTransition(BogusComment);
       break;
     default:
       if (r.matchesLetter()) {
         t.createTagPending(true);
         t.transition(TagName);
       } else {
         t.error(this);
         t.emit('<'); // char that got us here
         t.transition(Data);
       }
       break;
   }
 }
 // from < in rcdata
 void read(Tokeniser t, CharacterReader r) {
   if (r.matches('/')) {
     t.createTempBuffer();
     t.advanceTransition(RCDATAEndTagOpen);
   } else if (r.matchesLetter() && !r.containsIgnoreCase("</" + t.appropriateEndTagName())) {
     // diverge from spec: got a start tag, but there's no appropriate end tag (</title>), so
     // rather than
     // consuming to EOF; break out here
     t.tagPending = new Token.EndTag(t.appropriateEndTagName());
     t.emitTagPending();
     r.unconsume(); // undo "<"
     t.transition(Data);
   } else {
     t.emit("<");
     t.transition(Rcdata);
   }
 }
 void read(Tokeniser t, CharacterReader r) {
   if (r.matchConsume("--")) {
     t.createCommentPending();
     t.transition(CommentStart);
   } else if (r.matchConsumeIgnoreCase("DOCTYPE")) {
     t.transition(Doctype);
   } else if (r.matchConsume("[CDATA[")) {
     // todo: should actually check current namepspace, and only non-html allows cdata. until
     // namespace
     // is implemented properly, keep handling as cdata
     // } else if (!t.currentNodeInHtmlNS() && r.matchConsume("[CDATA[")) {
     t.transition(CdataSection);
   } else {
     t.error(this);
     t.advanceTransition(
         BogusComment); // advance so this character gets in bogus comment data's rewind
   }
 }
예제 #16
0
 void read(Tokeniser t, CharacterReader r) {
   char c = r.current();
   switch (c) {
     case '-':
       t.advanceTransition(CommentEndDash);
       break;
     case nullChar:
       t.error(this);
       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));
   }
 }