| OLD | NEW |
| 1 // CodeMirror, copyright (c) by Marijn Haverbeke and others |
| 2 // Distributed under an MIT license: http://codemirror.net/LICENSE |
| 3 |
| 4 (function(mod) { |
| 5 if (typeof exports == "object" && typeof module == "object") // CommonJS |
| 6 mod(require("../../lib/codemirror")); |
| 7 else if (typeof define == "function" && define.amd) // AMD |
| 8 define(["../../lib/codemirror"], mod); |
| 9 else // Plain browser env |
| 10 mod(CodeMirror); |
| 11 })(function(CodeMirror) { |
| 12 "use strict"; |
| 13 |
| 1 CodeMirror.defineMode('shell', function() { | 14 CodeMirror.defineMode('shell', function() { |
| 2 | 15 |
| 3 var words = {}; | 16 var words = {}; |
| 4 function define(style, string) { | 17 function define(style, string) { |
| 5 var split = string.split(' '); | 18 var split = string.split(' '); |
| 6 for(var i = 0; i < split.length; i++) { | 19 for(var i = 0; i < split.length; i++) { |
| 7 words[split[i]] = style; | 20 words[split[i]] = style; |
| 8 } | 21 } |
| 9 }; | 22 }; |
| 10 | 23 |
| 11 // Atoms | 24 // Atoms |
| 12 define('atom', 'true false'); | 25 define('atom', 'true false'); |
| 13 | 26 |
| 14 // Keywords | 27 // Keywords |
| 15 define('keyword', 'if then do else elif while until for in esac fi fin ' + | 28 define('keyword', 'if then do else elif while until for in esac fi fin ' + |
| 16 'fil done exit set unset export function'); | 29 'fil done exit set unset export function'); |
| 17 | 30 |
| 18 // Commands | 31 // Commands |
| 19 define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + | 32 define('builtin', 'ab awk bash beep cat cc cd chown chmod chroot clear cp ' + |
| 20 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + | 33 'curl cut diff echo find gawk gcc get git grep kill killall ln ls make ' + |
| 21 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + | 34 'mkdir openssl mv nc node npm ping ps restart rm rmdir sed service sh ' + |
| 22 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + | 35 'shopt shred source sort sleep ssh start stop su sudo tee telnet top ' + |
| 23 'touch vi vim wall wc wget who write yes zsh'); | 36 'touch vi vim wall wc wget who write yes zsh'); |
| 24 | 37 |
| 25 function tokenBase(stream, state) { | 38 function tokenBase(stream, state) { |
| 39 if (stream.eatSpace()) return null; |
| 26 | 40 |
| 27 var sol = stream.sol(); | 41 var sol = stream.sol(); |
| 28 var ch = stream.next(); | 42 var ch = stream.next(); |
| 29 | 43 |
| 44 if (ch === '\\') { |
| 45 stream.next(); |
| 46 return null; |
| 47 } |
| 30 if (ch === '\'' || ch === '"' || ch === '`') { | 48 if (ch === '\'' || ch === '"' || ch === '`') { |
| 31 state.tokens.unshift(tokenString(ch)); | 49 state.tokens.unshift(tokenString(ch)); |
| 32 return tokenize(stream, state); | 50 return tokenize(stream, state); |
| 33 } | 51 } |
| 34 if (ch === '#') { | 52 if (ch === '#') { |
| 35 if (sol && stream.eat('!')) { | 53 if (sol && stream.eat('!')) { |
| 36 stream.skipToEnd(); | 54 stream.skipToEnd(); |
| 37 return 'meta'; // 'comment'? | 55 return 'meta'; // 'comment'? |
| 38 } | 56 } |
| 39 stream.skipToEnd(); | 57 stream.skipToEnd(); |
| 40 return 'comment'; | 58 return 'comment'; |
| 41 } | 59 } |
| 42 if (ch === '$') { | 60 if (ch === '$') { |
| 43 state.tokens.unshift(tokenDollar); | 61 state.tokens.unshift(tokenDollar); |
| 44 return tokenize(stream, state); | 62 return tokenize(stream, state); |
| 45 } | 63 } |
| 46 if (ch === '+' || ch === '=') { | 64 if (ch === '+' || ch === '=') { |
| 47 return 'operator'; | 65 return 'operator'; |
| 48 } | 66 } |
| 49 if (ch === '-') { | 67 if (ch === '-') { |
| 50 stream.eat('-'); | 68 stream.eat('-'); |
| 51 stream.eatWhile(/\w/); | 69 stream.eatWhile(/\w/); |
| 52 return 'attribute'; | 70 return 'attribute'; |
| 53 } | 71 } |
| 54 if (/\d/.test(ch)) { | 72 if (/\d/.test(ch)) { |
| 55 stream.eatWhile(/\d/); | 73 stream.eatWhile(/\d/); |
| 56 if(!/\w/.test(stream.peek())) { | 74 if(stream.eol() || !/\w/.test(stream.peek())) { |
| 57 return 'number'; | 75 return 'number'; |
| 58 } | 76 } |
| 59 } | 77 } |
| 60 stream.eatWhile(/[\w-]/); | 78 stream.eatWhile(/[\w-]/); |
| 61 var cur = stream.current(); | 79 var cur = stream.current(); |
| 62 if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; | 80 if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; |
| 63 return words.hasOwnProperty(cur) ? words[cur] : null; | 81 return words.hasOwnProperty(cur) ? words[cur] : null; |
| 64 } | 82 } |
| 65 | 83 |
| 66 function tokenString(quote) { | 84 function tokenString(quote) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 return 'def'; | 120 return 'def'; |
| 103 }; | 121 }; |
| 104 | 122 |
| 105 function tokenize(stream, state) { | 123 function tokenize(stream, state) { |
| 106 return (state.tokens[0] || tokenBase) (stream, state); | 124 return (state.tokens[0] || tokenBase) (stream, state); |
| 107 }; | 125 }; |
| 108 | 126 |
| 109 return { | 127 return { |
| 110 startState: function() {return {tokens:[]};}, | 128 startState: function() {return {tokens:[]};}, |
| 111 token: function(stream, state) { | 129 token: function(stream, state) { |
| 112 if (stream.eatSpace()) return null; | |
| 113 return tokenize(stream, state); | 130 return tokenize(stream, state); |
| 114 } | 131 } |
| 115 }; | 132 }; |
| 116 }); | 133 }); |
| 117 | 134 |
| 118 CodeMirror.defineMIME('text/x-sh', 'shell'); | 135 CodeMirror.defineMIME('text/x-sh', 'shell'); |
| 136 |
| 137 }); |
| OLD | NEW |