twig.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*
  2. Language: Twig
  3. Requires: xml.js
  4. Author: Luke Holder <[email protected]>
  5. Description: Twig is a templating language for PHP
  6. Category: template
  7. */
  8. function(hljs) {
  9. var PARAMS = {
  10. className: 'params',
  11. begin: '\\(', end: '\\)'
  12. };
  13. var FUNCTION_NAMES = 'attribute block constant cycle date dump include ' +
  14. 'max min parent random range source template_from_string';
  15. var FUNCTIONS = {
  16. beginKeywords: FUNCTION_NAMES,
  17. keywords: {name: FUNCTION_NAMES},
  18. relevance: 0,
  19. contains: [
  20. PARAMS
  21. ]
  22. };
  23. var FILTER = {
  24. begin: /\|[A-Za-z_]+:?/,
  25. keywords:
  26. 'abs batch capitalize convert_encoding date date_modify default ' +
  27. 'escape first format join json_encode keys last length lower ' +
  28. 'merge nl2br number_format raw replace reverse round slice sort split ' +
  29. 'striptags title trim upper url_encode',
  30. contains: [
  31. FUNCTIONS
  32. ]
  33. };
  34. var TAGS = 'autoescape block do embed extends filter flush for ' +
  35. 'if import include macro sandbox set spaceless use verbatim';
  36. TAGS = TAGS + ' ' + TAGS.split(' ').map(function(t){return 'end' + t}).join(' ');
  37. return {
  38. aliases: ['craftcms'],
  39. case_insensitive: true,
  40. subLanguage: 'xml',
  41. contains: [
  42. hljs.COMMENT(/\{#/, /#}/),
  43. {
  44. className: 'template-tag',
  45. begin: /\{%/, end: /%}/,
  46. contains: [
  47. {
  48. className: 'name',
  49. begin: /\w+/,
  50. keywords: TAGS,
  51. starts: {
  52. endsWithParent: true,
  53. contains: [FILTER, FUNCTIONS],
  54. relevance: 0
  55. }
  56. }
  57. ]
  58. },
  59. {
  60. className: 'template-variable',
  61. begin: /\{\{/, end: /}}/,
  62. contains: ['self', FILTER, FUNCTIONS]
  63. }
  64. ]
  65. };
  66. }