prismjs_components_prism-markup-templating.js 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // node_modules/prismjs/components/prism-markup-templating.js
  2. (function(Prism2) {
  3. function getPlaceholder(language, index) {
  4. return "___" + language.toUpperCase() + index + "___";
  5. }
  6. Object.defineProperties(Prism2.languages["markup-templating"] = {}, {
  7. buildPlaceholders: {
  8. /**
  9. * Tokenize all inline templating expressions matching `placeholderPattern`.
  10. *
  11. * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns
  12. * `true` will be replaced.
  13. *
  14. * @param {object} env The environment of the `before-tokenize` hook.
  15. * @param {string} language The language id.
  16. * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.
  17. * @param {(match: string) => boolean} [replaceFilter]
  18. */
  19. value: function(env, language, placeholderPattern, replaceFilter) {
  20. if (env.language !== language) {
  21. return;
  22. }
  23. var tokenStack = env.tokenStack = [];
  24. env.code = env.code.replace(placeholderPattern, function(match) {
  25. if (typeof replaceFilter === "function" && !replaceFilter(match)) {
  26. return match;
  27. }
  28. var i = tokenStack.length;
  29. var placeholder;
  30. while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
  31. ++i;
  32. }
  33. tokenStack[i] = match;
  34. return placeholder;
  35. });
  36. env.grammar = Prism2.languages.markup;
  37. }
  38. },
  39. tokenizePlaceholders: {
  40. /**
  41. * Replace placeholders with proper tokens after tokenizing.
  42. *
  43. * @param {object} env The environment of the `after-tokenize` hook.
  44. * @param {string} language The language id.
  45. */
  46. value: function(env, language) {
  47. if (env.language !== language || !env.tokenStack) {
  48. return;
  49. }
  50. env.grammar = Prism2.languages[language];
  51. var j = 0;
  52. var keys = Object.keys(env.tokenStack);
  53. function walkTokens(tokens) {
  54. for (var i = 0; i < tokens.length; i++) {
  55. if (j >= keys.length) {
  56. break;
  57. }
  58. var token = tokens[i];
  59. if (typeof token === "string" || token.content && typeof token.content === "string") {
  60. var k = keys[j];
  61. var t = env.tokenStack[k];
  62. var s = typeof token === "string" ? token : token.content;
  63. var placeholder = getPlaceholder(language, k);
  64. var index = s.indexOf(placeholder);
  65. if (index > -1) {
  66. ++j;
  67. var before = s.substring(0, index);
  68. var middle = new Prism2.Token(language, Prism2.tokenize(t, env.grammar), "language-" + language, t);
  69. var after = s.substring(index + placeholder.length);
  70. var replacement = [];
  71. if (before) {
  72. replacement.push.apply(replacement, walkTokens([before]));
  73. }
  74. replacement.push(middle);
  75. if (after) {
  76. replacement.push.apply(replacement, walkTokens([after]));
  77. }
  78. if (typeof token === "string") {
  79. tokens.splice.apply(tokens, [i, 1].concat(replacement));
  80. } else {
  81. token.content = replacement;
  82. }
  83. }
  84. } else if (token.content) {
  85. walkTokens(token.content);
  86. }
  87. }
  88. return tokens;
  89. }
  90. walkTokens(env.tokens);
  91. }
  92. }
  93. });
  94. })(Prism);
  95. //# sourceMappingURL=prismjs_components_prism-markup-templating.js.map