UNPKG

1.3 kBJavaScriptView Raw
1Prism.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
34Prism.hooks.add('wrap', function (env) {
35 if (env.language === 'treeview' && env.type === 'entry-name') {
36 var classes = env.classes;
37
38 var folderPattern = /(^|[^\\])\/\s*$/;
39 if (folderPattern.test(env.content)) {
40 // folder
41
42 // remove trailing /
43 env.content = env.content.replace(folderPattern, '$1');
44 classes.push('dir');
45 } else {
46 // file
47
48 // remove trailing file marker
49 env.content = env.content.replace(/(^|[^\\])[=*|]\s*$/, '$1');
50
51 var parts = env.content.toLowerCase().replace(/\s+/g, '').split('.');
52 while (parts.length > 1) {
53 parts.shift();
54 // Ex. 'foo.min.js' would become '<span class="token keyword ext-min-js ext-js">foo.min.js</span>'
55 classes.push('ext-' + parts.join('-'));
56 }
57 }
58
59 if (env.content[0] === '.') {
60 classes.push('dotfile');
61 }
62 }
63});