highlight.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.highlight = void 0;
  4. const chalk = require('chalk');
  5. const prism = require('prismjs');
  6. const loadLanguages = require('prismjs/components/index');
  7. const escapeHtml = require('escape-html');
  8. // required to make embedded highlighting work...
  9. loadLanguages(['markup', 'css', 'javascript']);
  10. function wrap(code, lang) {
  11. if (lang === 'text') {
  12. code = escapeHtml(code);
  13. }
  14. return `<pre v-pre><code>${code}</code></pre>`;
  15. }
  16. exports.highlight = (str, lang) => {
  17. if (!lang) {
  18. return wrap(str, 'text');
  19. }
  20. lang = lang.toLowerCase();
  21. const rawLang = lang;
  22. if (lang === 'vue' || lang === 'html') {
  23. lang = 'markup';
  24. }
  25. if (lang === 'md') {
  26. lang = 'markdown';
  27. }
  28. if (lang === 'ts') {
  29. lang = 'typescript';
  30. }
  31. if (lang === 'py') {
  32. lang = 'python';
  33. }
  34. if (!prism.languages[lang]) {
  35. try {
  36. loadLanguages([lang]);
  37. }
  38. catch (e) {
  39. console.warn(chalk.yellow(`[vuepress] Syntax highlight for language "${lang}" is not supported.`));
  40. }
  41. }
  42. if (prism.languages[lang]) {
  43. const code = prism.highlight(str, prism.languages[lang], lang);
  44. return wrap(code, rawLang);
  45. }
  46. return wrap(str, 'text');
  47. };
  48. //# sourceMappingURL=highlight.js.map