From 49be347f8c93f3e56cee4cf95825596d0c8caee8 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 19 Apr 2012 20:32:56 +0200 Subject: [PATCH] more langs --- .../config/codemirror_languages.php | 54 ++++++++- htdocs/application/config/geshi_languages.php | 2 +- htdocs/application/views/defaults/header.php | 1 + .../static/js/codemirror/mode/shell/shell.js | 103 ++++++++++++++++++ htdocs/static/styles/diff.css | 3 + 5 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 htdocs/static/js/codemirror/mode/shell/shell.js create mode 100644 htdocs/static/styles/diff.css diff --git a/htdocs/application/config/codemirror_languages.php b/htdocs/application/config/codemirror_languages.php index 084957f..82b0339 100644 --- a/htdocs/application/config/codemirror_languages.php +++ b/htdocs/application/config/codemirror_languages.php @@ -78,7 +78,14 @@ $config['codemirror_languages'] = array( ) , ) , ) , - 'bash' => 'Bash', + 'bash' => array( + 'mode' => 'text/x-sh', + 'js' => array( + array( + 'codemirror/mode/shell/shell.js' + ) , + ) , + ) , 'c' => array( 'mode' => 'text/x-csrc', 'js' => array( @@ -95,10 +102,38 @@ $config['codemirror_languages'] = array( ) , ) , ) , - 'diff' => 'Diff', - 'latex' => 'LaTeX', - 'sql' => 'SQL', - 'xml' => 'XML', + 'diff' => array( + 'mode' => 'diff', + 'js' => array( + array( + 'codemirror/mode/diff/diff.js' + ) , + ) , + ) , + 'latex' => array( + 'mode' => 'stex', + 'js' => array( + array( + 'codemirror/mode/stex/stex.js' + ) , + ) , + ) , + 'sql' => array( + 'mode' => 'mysql', + 'js' => array( + array( + 'codemirror/mode/mysql/mysql.js' + ) , + ) , + ) , + 'xml' => array( + 'mode' => 'xml', + 'js' => array( + array( + 'codemirror/mode/xml/xml.js' + ) , + ) , + ) , 'text' => 'Plain Text', 'abap' => 'ABAP', 'actionscript' => 'Actionscript', @@ -169,7 +204,14 @@ $config['codemirror_languages'] = array( 'matlab' => 'Matlab', 'mirc' => 'mIRC', 'mpasm' => 'MPASM', - 'mysql' => 'MySQL', + 'mysql' => array( + 'mode' => 'mysql', + 'js' => array( + array( + 'codemirror/mode/mysql/mysql.js' + ) , + ) , + ) , 'nsis' => 'NSIS', 'objc' => 'Objective C', 'ocaml' => 'ocaml', diff --git a/htdocs/application/config/geshi_languages.php b/htdocs/application/config/geshi_languages.php index 1f11cba..e6beb81 100644 --- a/htdocs/application/config/geshi_languages.php +++ b/htdocs/application/config/geshi_languages.php @@ -53,7 +53,7 @@ $config['geshi_languages'] = array( 'groovy' => 'Groovy', 'haskell' => 'Haskell', 'idl' => 'Unoidl', - 'ini' => 'INI', + 'ini' => 'ini', 'inno' => 'Inno Script', 'io' => 'Io', 'java' => 'Java', diff --git a/htdocs/application/views/defaults/header.php b/htdocs/application/views/defaults/header.php index fce4c6e..f8a0232 100755 --- a/htdocs/application/views/defaults/header.php +++ b/htdocs/application/views/defaults/header.php @@ -22,6 +22,7 @@ $this->carabiner->css('reset.css'); $this->carabiner->css('fonts.css'); $this->carabiner->css('main.css'); $this->carabiner->css('codemirror.css'); +$this->carabiner->css('diff.css'); $this->carabiner->display('css'); diff --git a/htdocs/static/js/codemirror/mode/shell/shell.js b/htdocs/static/js/codemirror/mode/shell/shell.js new file mode 100644 index 0000000..dddca86 --- /dev/null +++ b/htdocs/static/js/codemirror/mode/shell/shell.js @@ -0,0 +1,103 @@ +CodeMirror.defineMode('shell', function(config) { + + var atoms = ['true','false'], + keywords = ['if','then','do','else','elif','while','until','for','in','esac','fi','fin','fil','done','exit','set','unset','export','function'], + commands = ['ab','awk','bash','beep','cat','cc','cd','chown','chmod','chroot','clear','cp','curl','cut','diff','echo','find','gawk','gcc','get','git','grep','kill','killall','ls','make','mkdir','openssl','mv','nc','node','npm','ping','ps','restart','rm','rmdir','sed','service','sh','shopt','shred','source','sort','sleep','ssh','start','stop','su','sudo','tee','telnet','top','touch','vi','vim','wall','wc','wget','who','write','yes','zsh']; + + function tokenBase(stream, state) { + + var sol = stream.sol(); + var ch = stream.next(); + + if (ch === '\'' || ch === '"' || ch === '`') { + state.tokens.unshift(tokenString(ch)); + return tokenize(stream, state); + } + if (ch === '#') { + if (sol && stream.eat('!')) { + stream.skipToEnd(); + return 'meta'; // 'comment'? + } + stream.skipToEnd(); + return 'comment'; + } + if (ch === '$') { + state.tokens.unshift(tokenDollar); + return tokenize(stream, state); + } + if (ch === '+' || ch === '=') { + return 'operator'; + } + if (ch === '-') { + stream.eat('-'); + stream.eatWhile(/\w/); + return 'attribute'; + } + if (/\d/.test(ch)) { + stream.eatWhile(/\d/); + if(!/\w/.test(stream.peek())) { + return 'number'; + } + } + stream.eatWhile(/\w/); + var cur = stream.current(); + if (stream.peek() === '=' && /\w+/.test(cur)) return 'def'; + if (atoms.indexOf(cur) !== -1) return 'atom'; + if (commands.indexOf(cur) !== -1) return 'builtin'; + if (keywords.indexOf(cur) !== -1) return 'keyword'; + return 'word'; + } + + function tokenString(quote) { + return function(stream, state) { + var next, end = false, escaped = false; + while ((next = stream.next()) != null) { + if (next === quote && !escaped) { + end = true; + break; + } + if (next === '$' && !escaped && quote !== '\'') { + escaped = true; + stream.backUp(1); + state.tokens.unshift(tokenDollar); + break; + } + escaped = !escaped && next === '\\'; + } + if (end || !escaped) { + state.tokens.shift(); + } + return (quote === '`' || quote === ')' ? 'quote' : 'string'); + }; + }; + + var tokenDollar = function(stream, state) { + if (state.tokens.length > 1) stream.eat('$'); + var ch = stream.next(), hungry = /\w/; + if (ch === '{') hungry = /[^}]/; + if (ch === '(') { + state.tokens[0] = tokenString(')'); + return tokenize(stream, state); + } + if (!/\d/.test(ch)) { + stream.eatWhile(hungry); + stream.eat('}'); + } + state.tokens.shift(); + return 'def'; + }; + + function tokenize(stream, state) { + return (state.tokens[0] || tokenBase) (stream, state); + }; + + return { + startState: function() {return {tokens:[]}}, + token: function(stream, state) { + if (stream.eatSpace()) return null; + return tokenize(stream, state); + } + }; +}); + +CodeMirror.defineMIME('text/x-sh', 'shell'); diff --git a/htdocs/static/styles/diff.css b/htdocs/static/styles/diff.css new file mode 100644 index 0000000..0e96ab2 --- /dev/null +++ b/htdocs/static/styles/diff.css @@ -0,0 +1,3 @@ +span.cm-rangeinfo {color: #a0b;} +span.cm-minus {color: red;} +span.cm-plus {color: #2b2;}