prism-treeview.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. Prism.languages.treeview = {
  2. "treeview-part": {
  3. pattern: /(^|\n).+/,
  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') {
  35. // Remove line breaks
  36. if(env.type === 'treeview-part') {
  37. env.content = env.content.replace(/\n/g,'')+'<br />';
  38. }
  39. if(env.type === 'entry-name') {
  40. if(/(^|[^\\])\/\s*$/.test(env.content)) {
  41. env.content = env.content.slice(0,-1);
  42. // This is a folder
  43. env.classes.push('dir');
  44. } else {
  45. if(/(^|[^\\])[=*|]\s*$/.test(env.content)) {
  46. env.content = env.content.slice(0,-1);
  47. }
  48. var parts = env.content.toLowerCase().split('.');
  49. while (parts.length > 1) {
  50. parts.shift();
  51. // Ex. 'foo.min.js' would become '<span class="token keyword ext-min-js ext-js">foo.min.js</span>'
  52. env.classes.push('ext-' + parts.join('-'));
  53. }
  54. }
  55. if(env.content.charAt(0)==='.') {
  56. env.classes.push('dotfile');
  57. }
  58. }
  59. }
  60. });