processDoctype method

  1. @override
Token? processDoctype(
  1. DoctypeToken token
)
override

Implementation

@override
Token? processDoctype(DoctypeToken token) {
  final name = token.name;
  var publicId = token.publicId?.toAsciiLowerCase();
  final systemId = token.systemId;
  final correct = token.correct;

  if (name != 'html' ||
      publicId != null ||
      systemId != null && systemId != 'about:legacy-compat') {
    parser.parseError(token.span, 'unknown-doctype');
  }

  publicId ??= '';

  tree.insertDoctype(token);

  if (!correct ||
      token.name != 'html' ||
      startsWithAny(publicId, const [
        '+//silmaril//dtd html pro v0r11 19970101//',
        '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',
        '-//as//dtd html 3.0 aswedit + extensions//',
        '-//ietf//dtd html 2.0 level 1//',
        '-//ietf//dtd html 2.0 level 2//',
        '-//ietf//dtd html 2.0 strict level 1//',
        '-//ietf//dtd html 2.0 strict level 2//',
        '-//ietf//dtd html 2.0 strict//',
        '-//ietf//dtd html 2.0//',
        '-//ietf//dtd html 2.1e//',
        '-//ietf//dtd html 3.0//',
        '-//ietf//dtd html 3.2 final//',
        '-//ietf//dtd html 3.2//',
        '-//ietf//dtd html 3//',
        '-//ietf//dtd html level 0//',
        '-//ietf//dtd html level 1//',
        '-//ietf//dtd html level 2//',
        '-//ietf//dtd html level 3//',
        '-//ietf//dtd html strict level 0//',
        '-//ietf//dtd html strict level 1//',
        '-//ietf//dtd html strict level 2//',
        '-//ietf//dtd html strict level 3//',
        '-//ietf//dtd html strict//',
        '-//ietf//dtd html//',
        '-//metrius//dtd metrius presentational//',
        '-//microsoft//dtd internet explorer 2.0 html strict//',
        '-//microsoft//dtd internet explorer 2.0 html//',
        '-//microsoft//dtd internet explorer 2.0 tables//',
        '-//microsoft//dtd internet explorer 3.0 html strict//',
        '-//microsoft//dtd internet explorer 3.0 html//',
        '-//microsoft//dtd internet explorer 3.0 tables//',
        '-//netscape comm. corp.//dtd html//',
        '-//netscape comm. corp.//dtd strict html//',
        "-//o'reilly and associates//dtd html 2.0//",
        "-//o'reilly and associates//dtd html extended 1.0//",
        "-//o'reilly and associates//dtd html extended relaxed 1.0//",
        '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',
        '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',
        '-//spyglass//dtd html 2.0 extended//',
        '-//sq//dtd html 2.0 hotmetal + extensions//',
        '-//sun microsystems corp.//dtd hotjava html//',
        '-//sun microsystems corp.//dtd hotjava strict html//',
        '-//w3c//dtd html 3 1995-03-24//',
        '-//w3c//dtd html 3.2 draft//',
        '-//w3c//dtd html 3.2 final//',
        '-//w3c//dtd html 3.2//',
        '-//w3c//dtd html 3.2s draft//',
        '-//w3c//dtd html 4.0 frameset//',
        '-//w3c//dtd html 4.0 transitional//',
        '-//w3c//dtd html experimental 19960712//',
        '-//w3c//dtd html experimental 970421//',
        '-//w3c//dtd w3 html//',
        '-//w3o//dtd w3 html 3.0//',
        '-//webtechs//dtd mozilla html 2.0//',
        '-//webtechs//dtd mozilla html//'
      ]) ||
      const [
        '-//w3o//dtd w3 html strict 3.0//en//',
        '-/w3c/dtd html 4.0 transitional/en',
        'html'
      ].contains(publicId) ||
      startsWithAny(publicId, const [
            '-//w3c//dtd html 4.01 frameset//',
            '-//w3c//dtd html 4.01 transitional//'
          ]) &&
          systemId == null ||
      systemId != null &&
          systemId.toLowerCase() ==
              'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd') {
    parser.compatMode = 'quirks';
  } else if (startsWithAny(publicId, const [
        '-//w3c//dtd xhtml 1.0 frameset//',
        '-//w3c//dtd xhtml 1.0 transitional//'
      ]) ||
      startsWithAny(publicId, const [
            '-//w3c//dtd html 4.01 frameset//',
            '-//w3c//dtd html 4.01 transitional//'
          ]) &&
          systemId != null) {
    parser.compatMode = 'limited quirks';
  }
  parser.phase = parser._beforeHtmlPhase;
  return null;
}