highlight.ts 876 B

123456789101112131415161718192021222324252627282930
  1. import prism from 'prismjs'
  2. import loadLanguages from 'prismjs/components/index'
  3. function transformAlias(lang: string) {
  4. const map = {
  5. python3: 'python'
  6. } as { [key: string]: string }
  7. return map[lang] || lang
  8. }
  9. export default function highlight(str: string, lang: string) {
  10. if (lang) {
  11. const langCode = transformAlias(lang)
  12. if (!prism.languages[langCode]) {
  13. try {
  14. loadLanguages([langCode])
  15. } catch (e) {
  16. // eslint-disable-next-line no-console
  17. console.error(`lang ${langCode} is not supported by prism`)
  18. }
  19. }
  20. if (prism.languages[langCode]) {
  21. const code = prism.highlight(str, prism.languages[langCode], langCode)
  22. return `<pre class="language-${langCode}"><code>${code}</code></pre>`
  23. }
  24. }
  25. return `<pre class="language-text"><code>${str}</code></pre>` // use external default escaping
  26. }