1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
| module.exports = function(hljs) {
| var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+';
| var XML_ENTITIES = {
| className: 'symbol',
| begin: '&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;'
| };
| var XML_META_KEYWORDS = {
| begin: '\\s',
| contains:[
| {
| className: 'meta-keyword',
| begin: '#?[a-z_][a-z1-9_-]+',
| illegal: '\\n',
| }
| ]
| };
| var XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {begin: '\\(', end: '\\)'});
| var APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, {className: 'meta-string'});
| var QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {className: 'meta-string'});
| var TAG_INTERNALS = {
| endsWithParent: true,
| illegal: /</,
| relevance: 0,
| contains: [
| {
| className: 'attr',
| begin: XML_IDENT_RE,
| relevance: 0
| },
| {
| begin: /=\s*/,
| relevance: 0,
| contains: [
| {
| className: 'string',
| endsParent: true,
| variants: [
| {begin: /"/, end: /"/, contains: [XML_ENTITIES]},
| {begin: /'/, end: /'/, contains: [XML_ENTITIES]},
| {begin: /[^\s"'=<>`]+/}
| ]
| }
| ]
| }
| ]
| };
| return {
| aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist', 'wsf', 'svg'],
| case_insensitive: true,
| contains: [
| {
| className: 'meta',
| begin: '<![a-z]', end: '>',
| relevance: 10,
| contains: [
| XML_META_KEYWORDS,
| QUOTE_META_STRING_MODE,
| APOS_META_STRING_MODE,
| XML_META_PAR_KEYWORDS,
| {
| begin: '\\[', end: '\\]',
| contains:[
| {
| className: 'meta',
| begin: '<![a-z]', end: '>',
| contains: [
| XML_META_KEYWORDS,
| XML_META_PAR_KEYWORDS,
| QUOTE_META_STRING_MODE,
| APOS_META_STRING_MODE
| ]
| }
| ]
| }
| ]
| },
| hljs.COMMENT(
| '<!--',
| '-->',
| {
| relevance: 10
| }
| ),
| {
| begin: '<\\!\\[CDATA\\[', end: '\\]\\]>',
| relevance: 10
| },
| XML_ENTITIES,
| {
| className: 'meta',
| begin: /<\?xml/, end: /\?>/, relevance: 10
| },
| {
| begin: /<\?(php)?/, end: /\?>/,
| subLanguage: 'php',
| contains: [
| // We don't want the php closing tag ?> to close the PHP block when
| // inside any of the following blocks:
| {begin: '/\\*', end: '\\*/', skip: true},
| {begin: 'b"', end: '"', skip: true},
| {begin: 'b\'', end: '\'', skip: true},
| hljs.inherit(hljs.APOS_STRING_MODE, {illegal: null, className: null, contains: null, skip: true}),
| hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null, className: null, contains: null, skip: true})
| ]
| },
| {
| className: 'tag',
| /*
| The lookahead pattern (?=...) ensures that 'begin' only matches
| '<style' as a single word, followed by a whitespace or an
| ending braket. The '$' is needed for the lexeme to be recognized
| by hljs.subMode() that tests lexemes outside the stream.
| */
| begin: '<style(?=\\s|>)', end: '>',
| keywords: {name: 'style'},
| contains: [TAG_INTERNALS],
| starts: {
| end: '</style>', returnEnd: true,
| subLanguage: ['css', 'xml']
| }
| },
| {
| className: 'tag',
| // See the comment in the <style tag about the lookahead pattern
| begin: '<script(?=\\s|>)', end: '>',
| keywords: {name: 'script'},
| contains: [TAG_INTERNALS],
| starts: {
| end: '\<\/script\>', returnEnd: true,
| subLanguage: ['actionscript', 'javascript', 'handlebars', 'xml']
| }
| },
| {
| className: 'tag',
| begin: '</?', end: '/?>',
| contains: [
| {
| className: 'name', begin: /[^\/><\s]+/, relevance: 0
| },
| TAG_INTERNALS
| ]
| }
| ]
| };
| };
|
|