aboutsummaryrefslogtreecommitdiffstats
path: root/public/prism/prism-shell-session.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/prism/prism-shell-session.js')
-rw-r--r--public/prism/prism-shell-session.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/public/prism/prism-shell-session.js b/public/prism/prism-shell-session.js
new file mode 100644
index 0000000..5674752
--- /dev/null
+++ b/public/prism/prism-shell-session.js
@@ -0,0 +1,73 @@
+(function (Prism) {
+ // CAREFUL!
+ // The following patterns are concatenated, so the group referenced by a back reference is non-obvious!
+
+ var strings = [
+ // normal string
+ /"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/.source,
+ /'[^']*'/.source,
+ /\$'(?:[^'\\]|\\[\s\S])*'/.source,
+
+ // here doc
+ // 2 capturing groups
+ /<<-?\s*(["']?)(\w+)\1\s[\s\S]*?[\r\n]\2/.source,
+ ].join('|');
+
+ Prism.languages['shell-session'] = {
+ command: {
+ pattern: RegExp(
+ // user info
+ /^/.source +
+ '(?:' +
+ // <user> ":" ( <path> )?
+ (/[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+(?::[^\0-\x1F$#%*?"<>:;|]+)?/
+ .source +
+ '|' +
+ // <path>
+ // Since the path pattern is quite general, we will require it to start with a special character to
+ // prevent false positives.
+ /[/~.][^\0-\x1F$#%*?"<>@:;|]*/.source) +
+ ')?' +
+ // shell symbol
+ /[$#%](?=\s)/.source +
+ // bash command
+ /(?:[^\\\r\n \t'"<$]|[ \t](?:(?!#)|#.*$)|\\(?:[^\r]|\r\n?)|\$(?!')|<(?!<)|<<str>>)+/.source.replace(
+ /<<str>>/g,
+ function () {
+ return strings;
+ }
+ ),
+ 'm'
+ ),
+ greedy: true,
+ inside: {
+ info: {
+ // foo@bar:~/files$ exit
+ // foo@bar$ exit
+ // ~/files$ exit
+ pattern: /^[^#$%]+/,
+ alias: 'punctuation',
+ inside: {
+ user: /^[^\s@:$#%*!/\\]+@[^\r\n@:$#%*!/\\]+/,
+ punctuation: /:/,
+ path: /[\s\S]+/,
+ },
+ },
+ bash: {
+ pattern: /(^[$#%]\s*)\S[\s\S]*/,
+ lookbehind: true,
+ alias: 'language-bash',
+ inside: Prism.languages.bash,
+ },
+ 'shell-symbol': {
+ pattern: /^[$#%]/,
+ alias: 'important',
+ },
+ },
+ },
+ output: /.(?:.*(?:[\r\n]|.$))*/,
+ };
+
+ Prism.languages['sh-session'] = Prism.languages['shellsession'] =
+ Prism.languages['shell-session'];
+})(Prism);