123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- 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
- ]
- }
- ]
- };
- };
|