prism-treeview.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. Prism.languages.treeview = {
  2. 'treeview-part': {
  3. pattern: /^.+/m,
  4. inside: {
  5. 'entry-line': [
  6. {
  7. pattern: /\|-- |├── /,
  8. alias: 'line-h'
  9. },
  10. {
  11. pattern: /\| |│ /,
  12. alias: 'line-v'
  13. },
  14. {
  15. pattern: /`-- |└── /,
  16. alias: 'line-v-last'
  17. },
  18. {
  19. pattern: / {4}/,
  20. alias: 'line-v-gap'
  21. }
  22. ],
  23. 'entry-name': {
  24. pattern: /.*\S.*/,
  25. inside: {
  26. // symlink
  27. 'operator': / -> /,
  28. }
  29. }
  30. }
  31. }
  32. };
  33. Prism.hooks.add('wrap', function (env) {
  34. if (env.language === 'treeview' && env.type === 'entry-name') {
  35. var classes = env.classes;
  36. var folderPattern = /(^|[^\\])\/\s*$/;
  37. if (folderPattern.test(env.content)) {
  38. // folder
  39. // remove trailing /
  40. env.content = env.content.replace(folderPattern, '$1');
  41. classes.push('dir');
  42. } else {
  43. // file
  44. // remove trailing file marker
  45. env.content = env.content.replace(/(^|[^\\])[=*|]\s*$/, '$1');
  46. var parts = env.content.toLowerCase().replace(/\s+/g, '').split('.');
  47. while (parts.length > 1) {
  48. parts.shift();
  49. // Ex. 'foo.min.js' would become '<span class="token keyword ext-min-js ext-js">foo.min.js</span>'
  50. classes.push('ext-' + parts.join('-'));
  51. }
  52. }
  53. if (env.content[0] === '.') {
  54. classes.push('dotfile');
  55. }
  56. }
  57. });