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