prism-latte.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. (function (Prism) {
  2. Prism.languages.latte = {
  3. 'comment': /^\{\*[\s\S]*/,
  4. 'ld': {
  5. pattern: /^\{(?:[=_]|\/?(?!\d|\w+\()\w+|)/,
  6. inside: {
  7. 'punctuation': /^\{\/?/,
  8. 'tag': {
  9. pattern: /.+/,
  10. alias: 'important'
  11. }
  12. }
  13. },
  14. 'rd': {
  15. pattern: /\}$/,
  16. inside: {
  17. 'punctuation': /.+/
  18. }
  19. },
  20. 'php': {
  21. pattern: /\S(?:[\s\S]*\S)?/,
  22. alias: 'language-php',
  23. inside: Prism.languages.php
  24. }
  25. };
  26. var markupLatte = Prism.languages.extend('markup', {});
  27. Prism.languages.insertBefore('inside', 'attr-value', {
  28. 'n-attr': {
  29. pattern: /n:[\w-]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+))?/,
  30. inside: {
  31. 'attr-name': {
  32. pattern: /^[^\s=]+/,
  33. alias: 'important'
  34. },
  35. 'attr-value': {
  36. pattern: /=[\s\S]+/,
  37. inside: {
  38. 'punctuation': [
  39. /^=/,
  40. {
  41. pattern: /^(\s*)["']|["']$/,
  42. lookbehind: true
  43. }
  44. ],
  45. 'php': {
  46. pattern: /\S(?:[\s\S]*\S)?/,
  47. inside: Prism.languages.php
  48. }
  49. }
  50. },
  51. }
  52. },
  53. }, markupLatte.tag);
  54. Prism.hooks.add('before-tokenize', function(env) {
  55. if (env.language !== 'latte') {
  56. return;
  57. }
  58. var lattePattern = /\{\*[\s\S]*?\*\}|\{[^'"\s{}*](?:[^"'/{}]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|\/\*[\s\S]*?\*\/)*?\}/g;
  59. Prism.languages['markup-templating'].buildPlaceholders(env, 'latte', lattePattern);
  60. env.grammar = markupLatte;
  61. });
  62. Prism.hooks.add('after-tokenize', function(env) {
  63. Prism.languages['markup-templating'].tokenizePlaceholders(env, 'latte');
  64. });
  65. }(Prism));