115 lines
4.6 KiB
Plaintext
115 lines
4.6 KiB
Plaintext
import { DOCUMENT_MODE } from './html.js';
|
|
//Const
|
|
const VALID_DOCTYPE_NAME = 'html';
|
|
const VALID_SYSTEM_ID = 'about:legacy-compat';
|
|
const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';
|
|
const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
|
|
'+//silmaril//dtd html pro v0r11 19970101//',
|
|
'-//as//dtd html 3.0 aswedit + extensions//',
|
|
'-//advasoft ltd//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//",
|
|
'-//sq//dtd html 2.0 hotmetal + extensions//',
|
|
'-//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//',
|
|
'-//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 QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
|
|
...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
|
|
'-//w3c//dtd html 4.01 frameset//',
|
|
'-//w3c//dtd html 4.01 transitional//',
|
|
];
|
|
const QUIRKS_MODE_PUBLIC_IDS = new Set([
|
|
'-//w3o//dtd w3 html strict 3.0//en//',
|
|
'-/w3c/dtd html 4.0 transitional/en',
|
|
'html',
|
|
]);
|
|
const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];
|
|
const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
|
|
...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
|
|
'-//w3c//dtd html 4.01 frameset//',
|
|
'-//w3c//dtd html 4.01 transitional//',
|
|
];
|
|
//Utils
|
|
function hasPrefix(publicId, prefixes) {
|
|
return prefixes.some((prefix) => publicId.startsWith(prefix));
|
|
}
|
|
//API
|
|
export function isConforming(token) {
|
|
return (token.name === VALID_DOCTYPE_NAME &&
|
|
token.publicId === null &&
|
|
(token.systemId === null || token.systemId === VALID_SYSTEM_ID));
|
|
}
|
|
export function getDocumentMode(token) {
|
|
if (token.name !== VALID_DOCTYPE_NAME) {
|
|
return DOCUMENT_MODE.QUIRKS;
|
|
}
|
|
const { systemId } = token;
|
|
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
|
|
return DOCUMENT_MODE.QUIRKS;
|
|
}
|
|
let { publicId } = token;
|
|
if (publicId !== null) {
|
|
publicId = publicId.toLowerCase();
|
|
if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
|
|
return DOCUMENT_MODE.QUIRKS;
|
|
}
|
|
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
|
|
if (hasPrefix(publicId, prefixes)) {
|
|
return DOCUMENT_MODE.QUIRKS;
|
|
}
|
|
prefixes =
|
|
systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
|
|
if (hasPrefix(publicId, prefixes)) {
|
|
return DOCUMENT_MODE.LIMITED_QUIRKS;
|
|
}
|
|
}
|
|
return DOCUMENT_MODE.NO_QUIRKS;
|
|
}
|
|
//# sourceMappingURL=doctype.js.map |