]>
luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/xml.js
1 /*! `xml` grammar compiled for Highlight.js 11.11.1 */
3 var hljsGrammar
= (function () {
8 Website: https://www.w3.org/XML/
13 /** @type LanguageFn */
15 const regex
= hljs
.regex
;
16 // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar
17 // OTHER_NAME_CHARS = /[:\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]/;
18 // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods
19 // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, regex.optional(/[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*:/), /[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*/);;
20 // const XML_IDENT_RE = /[A-Z_a-z:\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]+/;
21 // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, regex.optional(/[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*:/), /[A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*/);
22 // however, to cater for performance and more Unicode support rely simply on the Unicode letter class
23 const TAG_NAME_RE
= regex
.concat(/[\p{L}_]/u, regex
.optional(/[\p{L}0-9_.-]*:/u), /[\p{L}0-9_.-]*/u);
24 const XML_IDENT_RE
= /[\p{L}0-9._:-]+/u;
25 const XML_ENTITIES
= {
27 begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/
29 const XML_META_KEYWORDS
= {
34 begin: /#?[a-z_][a-z1-9_-]+/,
39 const XML_META_PAR_KEYWORDS
= hljs
.inherit(XML_META_KEYWORDS
, {
43 const APOS_META_STRING_MODE
= hljs
.inherit(hljs
.APOS_STRING_MODE
, { className: 'string' });
44 const QUOTE_META_STRING_MODE
= hljs
.inherit(hljs
.QUOTE_STRING_MODE
, { className: 'string' });
45 const TAG_INTERNALS
= {
66 contains: [ XML_ENTITIES
]
71 contains: [ XML_ENTITIES
]
73 { begin: /[^\s"'=<>`]+/ }
94 case_insensitive: true,
104 QUOTE_META_STRING_MODE
,
105 APOS_META_STRING_MODE
,
106 XML_META_PAR_KEYWORDS
,
117 XML_META_PAR_KEYWORDS
,
118 QUOTE_META_STRING_MODE
,
119 APOS_META_STRING_MODE
132 begin: /<!\[CDATA\[/,
137 // xml processing instructions
146 QUOTE_META_STRING_MODE
150 begin: /<\?[a-z][a-z0-9]+/,
158 The lookahead pattern (?=...) ensures that 'begin' only matches
159 '<style' as a single word, followed by a whitespace or an
162 begin: /<style(?=\s|>)/,
164 keywords: { name: 'style' },
165 contains: [ TAG_INTERNALS
],
177 // See the comment in the <style tag about the lookahead pattern
178 begin: /<script(?=\s|>)/,
180 keywords: { name: 'script' },
181 contains: [ TAG_INTERNALS
],
192 // we need this for now for jSX
202 regex
.lookahead(regex
.concat(
207 regex
.either(/\/>/, />/, /\s
/)
216 starts: TAG_INTERNALS
225 regex
.lookahead(regex
.concat(
250 hljs
.registerLanguage('xml', hljsGrammar
);