prism-treeview.js 1.4 KB

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