• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1'use strict';
2
3//Const
4var VALID_DOCTYPE_NAME = 'html',
5    QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd',
6    QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
7        "+//silmaril//dtd html pro v0r11 19970101//en",
8        "-//advasoft ltd//dtd html 3.0 aswedit + extensions//en",
9        "-//as//dtd html 3.0 aswedit + extensions//en",
10        "-//ietf//dtd html 2.0 level 1//en",
11        "-//ietf//dtd html 2.0 level 2//en",
12        "-//ietf//dtd html 2.0 strict level 1//en",
13        "-//ietf//dtd html 2.0 strict level 2//en",
14        "-//ietf//dtd html 2.0 strict//en",
15        "-//ietf//dtd html 2.0//en",
16        "-//ietf//dtd html 2.1e//en",
17        "-//ietf//dtd html 3.0//en",
18        "-//ietf//dtd html 3.0//en//",
19        "-//ietf//dtd html 3.2 final//en",
20        "-//ietf//dtd html 3.2//en",
21        "-//ietf//dtd html 3//en",
22        "-//ietf//dtd html level 0//en",
23        "-//ietf//dtd html level 0//en//2.0",
24        "-//ietf//dtd html level 1//en",
25        "-//ietf//dtd html level 1//en//2.0",
26        "-//ietf//dtd html level 2//en",
27        "-//ietf//dtd html level 2//en//2.0",
28        "-//ietf//dtd html level 3//en",
29        "-//ietf//dtd html level 3//en//3.0",
30        "-//ietf//dtd html strict level 0//en",
31        "-//ietf//dtd html strict level 0//en//2.0",
32        "-//ietf//dtd html strict level 1//en",
33        "-//ietf//dtd html strict level 1//en//2.0",
34        "-//ietf//dtd html strict level 2//en",
35        "-//ietf//dtd html strict level 2//en//2.0",
36        "-//ietf//dtd html strict level 3//en",
37        "-//ietf//dtd html strict level 3//en//3.0",
38        "-//ietf//dtd html strict//en",
39        "-//ietf//dtd html strict//en//2.0",
40        "-//ietf//dtd html strict//en//3.0",
41        "-//ietf//dtd html//en",
42        "-//ietf//dtd html//en//2.0",
43        "-//ietf//dtd html//en//3.0",
44        "-//metrius//dtd metrius presentational//en",
45        "-//microsoft//dtd internet explorer 2.0 html strict//en",
46        "-//microsoft//dtd internet explorer 2.0 html//en",
47        "-//microsoft//dtd internet explorer 2.0 tables//en",
48        "-//microsoft//dtd internet explorer 3.0 html strict//en",
49        "-//microsoft//dtd internet explorer 3.0 html//en",
50        "-//microsoft//dtd internet explorer 3.0 tables//en",
51        "-//netscape comm. corp.//dtd html//en",
52        "-//netscape comm. corp.//dtd strict html//en",
53        "-//o'reilly and associates//dtd html 2.0//en",
54        "-//o'reilly and associates//dtd html extended 1.0//en",
55        "-//spyglass//dtd html 2.0 extended//en",
56        "-//sq//dtd html 2.0 hotmetal + extensions//en",
57        "-//sun microsystems corp.//dtd hotjava html//en",
58        "-//sun microsystems corp.//dtd hotjava strict html//en",
59        "-//w3c//dtd html 3 1995-03-24//en",
60        "-//w3c//dtd html 3.2 draft//en",
61        "-//w3c//dtd html 3.2 final//en",
62        "-//w3c//dtd html 3.2//en",
63        "-//w3c//dtd html 3.2s draft//en",
64        "-//w3c//dtd html 4.0 frameset//en",
65        "-//w3c//dtd html 4.0 transitional//en",
66        "-//w3c//dtd html experimental 19960712//en",
67        "-//w3c//dtd html experimental 970421//en",
68        "-//w3c//dtd w3 html//en",
69        "-//w3o//dtd w3 html 3.0//en",
70        "-//w3o//dtd w3 html 3.0//en//",
71        "-//webtechs//dtd mozilla html 2.0//en",
72        "-//webtechs//dtd mozilla html//en"
73    ],
74    QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
75        '-//w3c//dtd html 4.01 frameset//',
76        '-//w3c//dtd html 4.01 transitional//'
77    ],
78    QUIRKS_MODE_PUBLIC_IDS = [
79        '-//w3o//dtd w3 html strict 3.0//en//',
80        '-/w3c/dtd html 4.0 transitional/en',
81        'html'
82    ];
83
84
85//Utils
86function enquoteDoctypeId(id) {
87    var quote = id.indexOf('"') !== -1 ? '\'' : '"';
88
89    return quote + id + quote;
90}
91
92
93//API
94exports.isQuirks = function (name, publicId, systemId) {
95    if (name !== VALID_DOCTYPE_NAME)
96        return true;
97
98    if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID)
99        return true;
100
101    if (publicId !== null) {
102        publicId = publicId.toLowerCase();
103
104        if (QUIRKS_MODE_PUBLIC_IDS.indexOf(publicId) > -1)
105            return true;
106
107        var prefixes = QUIRKS_MODE_PUBLIC_ID_PREFIXES;
108
109        if (systemId === null)
110            prefixes = prefixes.concat(QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES);
111
112        for (var i = 0; i < prefixes.length; i++) {
113            if (publicId.indexOf(prefixes[i]) === 0)
114                return true;
115        }
116    }
117
118    return false;
119};
120
121exports.serializeContent = function (name, publicId, systemId) {
122    var str = '!DOCTYPE ' + name;
123
124    if (publicId !== null)
125        str += ' PUBLIC ' + enquoteDoctypeId(publicId);
126
127    else if (systemId !== null)
128        str += ' SYSTEM';
129
130    if (systemId !== null)
131        str += ' ' + enquoteDoctypeId(systemId);
132
133    return str;
134};
135