codemirror-rails 2.3 → 2.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/README.md +0 -16
  2. data/codemirror-rails.gemspec +1 -1
  3. data/lib/codemirror/rails/version.rb +2 -2
  4. data/vendor/assets/javascripts/codemirror.js +323 -687
  5. data/vendor/assets/javascripts/codemirror/modes/clike.js +3 -40
  6. data/vendor/assets/javascripts/codemirror/modes/clojure.js +14 -14
  7. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +0 -6
  8. data/vendor/assets/javascripts/codemirror/modes/css.js +1 -1
  9. data/vendor/assets/javascripts/codemirror/modes/diff.js +5 -24
  10. data/vendor/assets/javascripts/codemirror/modes/gfm.js +4 -40
  11. data/vendor/assets/javascripts/codemirror/modes/go.js +22 -20
  12. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +1 -1
  13. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +2 -4
  14. data/vendor/assets/javascripts/codemirror/modes/javascript.js +7 -8
  15. data/vendor/assets/javascripts/codemirror/modes/less.js +54 -100
  16. data/vendor/assets/javascripts/codemirror/modes/markdown.js +49 -52
  17. data/vendor/assets/javascripts/codemirror/modes/pascal.js +46 -2
  18. data/vendor/assets/javascripts/codemirror/modes/perl.js +1 -1
  19. data/vendor/assets/javascripts/codemirror/modes/php.js +25 -54
  20. data/vendor/assets/javascripts/codemirror/modes/python.js +16 -14
  21. data/vendor/assets/javascripts/codemirror/modes/rpm-spec.js +1 -1
  22. data/vendor/assets/javascripts/codemirror/modes/rst.js +1 -1
  23. data/vendor/assets/javascripts/codemirror/modes/ruby.js +9 -4
  24. data/vendor/assets/javascripts/codemirror/modes/scheme.js +46 -74
  25. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +16 -16
  26. data/vendor/assets/javascripts/codemirror/modes/stex.js +6 -21
  27. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +45 -55
  28. data/vendor/assets/javascripts/codemirror/modes/xml.js +14 -79
  29. data/vendor/assets/javascripts/codemirror/{utils/overlay.js → overlay.js} +2 -3
  30. data/vendor/assets/javascripts/codemirror/runmode.js +27 -0
  31. data/vendor/assets/stylesheets/codemirror.css +2 -63
  32. data/vendor/assets/stylesheets/codemirror/modes/tiddlywiki.css +21 -14
  33. data/vendor/assets/stylesheets/codemirror/themes/eclipse.css +1 -1
  34. data/vendor/assets/stylesheets/codemirror/themes/elegant.css +2 -2
  35. data/vendor/assets/stylesheets/codemirror/themes/neat.css +3 -3
  36. data/vendor/assets/stylesheets/codemirror/themes/night.css +1 -1
  37. data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +2 -2
  38. metadata +6 -39
  39. data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +0 -29
  40. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +0 -766
  41. data/vendor/assets/javascripts/codemirror/modes/ecl.js +0 -203
  42. data/vendor/assets/javascripts/codemirror/modes/erlang.js +0 -251
  43. data/vendor/assets/javascripts/codemirror/modes/pig.js +0 -172
  44. data/vendor/assets/javascripts/codemirror/modes/properties.js +0 -63
  45. data/vendor/assets/javascripts/codemirror/modes/shell.js +0 -103
  46. data/vendor/assets/javascripts/codemirror/modes/smarty.js +0 -148
  47. data/vendor/assets/javascripts/codemirror/modes/tiki.js +0 -316
  48. data/vendor/assets/javascripts/codemirror/modes/vbscript.js +0 -26
  49. data/vendor/assets/javascripts/codemirror/modes/xquery.js +0 -448
  50. data/vendor/assets/javascripts/codemirror/utils/closetag.js +0 -146
  51. data/vendor/assets/javascripts/codemirror/utils/dialog.js +0 -63
  52. data/vendor/assets/javascripts/codemirror/utils/foldcode.js +0 -196
  53. data/vendor/assets/javascripts/codemirror/utils/formatting.js +0 -297
  54. data/vendor/assets/javascripts/codemirror/utils/javascript-hint.js +0 -134
  55. data/vendor/assets/javascripts/codemirror/utils/loadmode.js +0 -51
  56. data/vendor/assets/javascripts/codemirror/utils/match-highlighter.js +0 -44
  57. data/vendor/assets/javascripts/codemirror/utils/multiplex.js +0 -72
  58. data/vendor/assets/javascripts/codemirror/utils/pig-hint.js +0 -123
  59. data/vendor/assets/javascripts/codemirror/utils/runmode.js +0 -49
  60. data/vendor/assets/javascripts/codemirror/utils/search.js +0 -118
  61. data/vendor/assets/javascripts/codemirror/utils/searchcursor.js +0 -117
  62. data/vendor/assets/javascripts/codemirror/utils/simple-hint.js +0 -72
  63. data/vendor/assets/stylesheets/codemirror/modes/tiki.css +0 -26
  64. data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +0 -81
  65. data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +0 -25
  66. data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +0 -21
  67. data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +0 -44
  68. data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +0 -27
  69. data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +0 -46
  70. data/vendor/assets/stylesheets/codemirror/utils/dialog.css +0 -23
  71. data/vendor/assets/stylesheets/codemirror/utils/simple-hint.css +0 -16
@@ -321,6 +321,6 @@ CodeMirror.defineMode('rst', function(config, options) {
321
321
  return token;
322
322
  }
323
323
  };
324
- }, "python");
324
+ });
325
325
 
326
326
  CodeMirror.defineMIME("text/x-rst", "rst");
@@ -30,10 +30,10 @@ CodeMirror.defineMode("ruby", function(config, parserConfig) {
30
30
  return "comment";
31
31
  }
32
32
  if (stream.eatSpace()) return null;
33
- var ch = stream.next(), m;
33
+ var ch = stream.next();
34
34
  if (ch == "`" || ch == "'" || ch == '"' ||
35
35
  (ch == "/" && !stream.eol() && stream.peek() != " ")) {
36
- return chain(readQuoted(ch, "string", ch == '"' || ch == "`"), stream, state);
36
+ return chain(readQuoted(ch, "string", ch == '"'), stream, state);
37
37
  } else if (ch == "%") {
38
38
  var style, embed = false;
39
39
  if (stream.eat("s")) style = "atom";
@@ -46,8 +46,13 @@ CodeMirror.defineMode("ruby", function(config, parserConfig) {
46
46
  } else if (ch == "#") {
47
47
  stream.skipToEnd();
48
48
  return "comment";
49
- } else if (ch == "<" && (m = stream.match(/^<-?[\`\"\']?([a-zA-Z_?]\w*)[\`\"\']?(?:;|$)/))) {
50
- return chain(readHereDoc(m[1]), stream, state);
49
+ } else if (ch == "<" && stream.eat("<")) {
50
+ stream.eat("-");
51
+ stream.eat(/[\'\"\`]/);
52
+ var match = stream.match(/^\w+/);
53
+ stream.eat(/[\'\"\`]/);
54
+ if (match) return chain(readHereDoc(match[0]), stream, state);
55
+ return null;
51
56
  } else if (ch == "0") {
52
57
  if (stream.eat("x")) stream.eatWhile(/[\da-fA-F]/);
53
58
  else if (stream.eat("b")) stream.eatWhile(/[01]/);
@@ -5,7 +5,7 @@ CodeMirror.defineMode("scheme", function (config, mode) {
5
5
  var BUILTIN = "builtin", COMMENT = "comment", STRING = "string",
6
6
  ATOM = "atom", NUMBER = "number", BRACKET = "bracket", KEYWORD="keyword";
7
7
  var INDENT_WORD_SKIP = 2, KEYWORDS_SKIP = 1;
8
-
8
+
9
9
  function makeKeywords(str) {
10
10
  var obj = {}, words = str.split(" ");
11
11
  for (var i = 0; i < words.length; ++i) obj[words[i]] = true;
@@ -14,6 +14,7 @@ CodeMirror.defineMode("scheme", function (config, mode) {
14
14
 
15
15
  var keywords = makeKeywords("λ case-lambda call/cc class define-class exit-handler field import inherit init-field interface let*-values let-values let/ec mixin opt-lambda override protect provide public rename require require-for-syntax syntax syntax-case syntax-error unit/sig unless when with-syntax and begin call-with-current-continuation call-with-input-file call-with-output-file case cond define define-syntax delay do dynamic-wind else for-each if lambda let let* let-syntax letrec letrec-syntax map or syntax-rules abs acos angle append apply asin assoc assq assv atan boolean? caar cadr call-with-input-file call-with-output-file call-with-values car cdddar cddddr cdr ceiling char->integer char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? char-downcase char-lower-case? char-numeric? char-ready? char-upcase char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? char? close-input-port close-output-port complex? cons cos current-input-port current-output-port denominator display eof-object? eq? equal? eqv? eval even? exact->inexact exact? exp expt #f floor force gcd imag-part inexact->exact inexact? input-port? integer->char integer? interaction-environment lcm length list list->string list->vector list-ref list-tail list? load log magnitude make-polar make-rectangular make-string make-vector max member memq memv min modulo negative? newline not null-environment null? number->string number? numerator odd? open-input-file open-output-file output-port? pair? peek-char port? positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part real? remainder reverse round scheme-report-environment set! set-car! set-cdr! sin sqrt string string->list string->number string->symbol string-append string-ci<=? string-ci<? string-ci=? string-ci>=? string-ci>? string-copy string-fill! string-length string-ref string-set! string<=? string<? string=? string>=? string>? string? substring symbol->string symbol? #t tan transcript-off transcript-on truncate values vector vector->list vector-fill! vector-length vector-ref vector-set! with-input-from-file with-output-to-file write write-char zero?");
16
16
  var indentKeys = makeKeywords("define let letrec let* lambda");
17
+
17
18
 
18
19
  function stateStack(indent, type, prev) { // represents a state stack object
19
20
  this.indent = indent;
@@ -28,29 +29,21 @@ CodeMirror.defineMode("scheme", function (config, mode) {
28
29
  function popStack(state) {
29
30
  state.indentStack = state.indentStack.prev;
30
31
  }
31
-
32
- var binaryMatcher = new RegExp(/^(?:[-+]i|[-+][01]+#*(?:\/[01]+#*)?i|[-+]?[01]+#*(?:\/[01]+#*)?@[-+]?[01]+#*(?:\/[01]+#*)?|[-+]?[01]+#*(?:\/[01]+#*)?[-+](?:[01]+#*(?:\/[01]+#*)?)?i|[-+]?[01]+#*(?:\/[01]+#*)?)(?=[()\s;"]|$)/i);
33
- var octalMatcher = new RegExp(/^(?:[-+]i|[-+][0-7]+#*(?:\/[0-7]+#*)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?@[-+]?[0-7]+#*(?:\/[0-7]+#*)?|[-+]?[0-7]+#*(?:\/[0-7]+#*)?[-+](?:[0-7]+#*(?:\/[0-7]+#*)?)?i|[-+]?[0-7]+#*(?:\/[0-7]+#*)?)(?=[()\s;"]|$)/i);
34
- var hexMatcher = new RegExp(/^(?:[-+]i|[-+][\da-f]+#*(?:\/[\da-f]+#*)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?@[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?[-+](?:[\da-f]+#*(?:\/[\da-f]+#*)?)?i|[-+]?[\da-f]+#*(?:\/[\da-f]+#*)?)(?=[()\s;"]|$)/i);
35
- var decimalMatcher = new RegExp(/^(?:[-+]i|[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)i|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)@[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)|[-+]?(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)[-+](?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*)?i|(?:(?:(?:\d+#+\.?#*|\d+\.\d*#*|\.\d+#*|\d+)(?:[esfdl][-+]?\d+)?)|\d+#*\/\d+#*))(?=[()\s;"]|$)/i);
36
-
37
- function isBinaryNumber (stream) {
38
- return stream.match(binaryMatcher);
39
- }
40
-
41
- function isOctalNumber (stream) {
42
- return stream.match(octalMatcher);
43
- }
44
-
45
- function isDecimalNumber (stream, backup) {
46
- if (backup === true) {
47
- stream.backUp(1);
32
+
33
+ /**
34
+ * Scheme numbers are complicated unfortunately.
35
+ * Checks if we're looking at a number, which might be possibly a fraction.
36
+ * Also checks that it is not part of a longer identifier. Returns true/false accordingly.
37
+ */
38
+ function isNumber(ch, stream){
39
+ if(/[0-9]/.exec(ch) != null){
40
+ stream.eatWhile(/[0-9]/);
41
+ stream.eat(/\//);
42
+ stream.eatWhile(/[0-9]/);
43
+ if (stream.eol() || !(/[a-zA-Z\-\_\/]/.exec(stream.peek()))) return true;
44
+ stream.backUp(stream.current().length - 1); // undo all the eating
48
45
  }
49
- return stream.match(decimalMatcher);
50
- }
51
-
52
- function isHexNumber (stream) {
53
- return stream.match(hexMatcher);
46
+ return false;
54
47
  }
55
48
 
56
49
  return {
@@ -74,13 +67,13 @@ CodeMirror.defineMode("scheme", function (config, mode) {
74
67
  return null;
75
68
  }
76
69
  var returnType = null;
77
-
70
+
78
71
  switch(state.mode){
79
72
  case "string": // multi-line string parsing mode
80
73
  var next, escaped = false;
81
74
  while ((next = stream.next()) != null) {
82
75
  if (next == "\"" && !escaped) {
83
-
76
+
84
77
  state.mode = false;
85
78
  break;
86
79
  }
@@ -92,7 +85,7 @@ CodeMirror.defineMode("scheme", function (config, mode) {
92
85
  var next, maybeEnd = false;
93
86
  while ((next = stream.next()) != null) {
94
87
  if (next == "#" && maybeEnd) {
95
-
88
+
96
89
  state.mode = false;
97
90
  break;
98
91
  }
@@ -113,73 +106,52 @@ CodeMirror.defineMode("scheme", function (config, mode) {
113
106
  }
114
107
  default: // default parsing mode
115
108
  var ch = stream.next();
116
-
109
+
117
110
  if (ch == "\"") {
118
111
  state.mode = "string";
119
112
  returnType = STRING;
120
-
113
+
121
114
  } else if (ch == "'") {
122
115
  returnType = ATOM;
123
116
  } else if (ch == '#') {
124
- if (stream.eat("|")) { // Multi-line comment
117
+ if (stream.eat("|")) { // Multi-line comment
125
118
  state.mode = "comment"; // toggle to comment mode
126
119
  returnType = COMMENT;
127
- } else if (stream.eat(/[tf]/i)) { // #t/#f (atom)
120
+ } else if (stream.eat(/[tf]/)) { // #t/#f (atom)
128
121
  returnType = ATOM;
129
- } else if (stream.eat(';')) { // S-Expr comment
122
+ } else if (stream.eat(';')) { // S-Expr comment
130
123
  state.mode = "s-expr-comment";
131
124
  returnType = COMMENT;
132
- } else {
133
- var numTest = null, hasExactness = false, hasRadix = true;
134
- if (stream.eat(/[ei]/i)) {
135
- hasExactness = true;
136
- } else {
137
- stream.backUp(1); // must be radix specifier
138
- }
139
- if (stream.match(/^#b/i)) {
140
- numTest = isBinaryNumber;
141
- } else if (stream.match(/^#o/i)) {
142
- numTest = isOctalNumber;
143
- } else if (stream.match(/^#x/i)) {
144
- numTest = isHexNumber;
145
- } else if (stream.match(/^#d/i)) {
146
- numTest = isDecimalNumber;
147
- } else if (stream.match(/^[-+0-9.]/, false)) {
148
- hasRadix = false;
149
- numTest = isDecimalNumber;
150
- // re-consume the intial # if all matches failed
151
- } else if (!hasExactness) {
152
- stream.eat('#');
153
- }
154
- if (numTest != null) {
155
- if (hasRadix && !hasExactness) {
156
- // consume optional exactness after radix
157
- stream.match(/^#[ei]/i);
158
- }
159
- if (numTest(stream))
160
- returnType = NUMBER;
161
- }
162
125
  }
163
- } else if (/^[-+0-9.]/.test(ch) && isDecimalNumber(stream, true)) { // match non-prefixed number, must be decimal
164
- returnType = NUMBER;
126
+
165
127
  } else if (ch == ";") { // comment
166
128
  stream.skipToEnd(); // rest of the line is a comment
167
129
  returnType = COMMENT;
130
+ } else if (ch == "-"){
131
+
132
+ if(!isNaN(parseInt(stream.peek()))){
133
+ stream.eatWhile(/[\/0-9]/);
134
+ returnType = NUMBER;
135
+ }else{
136
+ returnType = null;
137
+ }
138
+ } else if (isNumber(ch,stream)){
139
+ returnType = NUMBER;
168
140
  } else if (ch == "(" || ch == "[") {
169
141
  var keyWord = ''; var indentTemp = stream.column();
170
142
  /**
171
- Either
143
+ Either
172
144
  (indent-word ..
173
145
  (non-indent-word ..
174
146
  (;something else, bracket, etc.
175
147
  */
176
-
148
+
177
149
  while ((letter = stream.eat(/[^\s\(\[\;\)\]]/)) != null) {
178
150
  keyWord += letter;
179
151
  }
180
-
152
+
181
153
  if (keyWord.length > 0 && indentKeys.propertyIsEnumerable(keyWord)) { // indent-word
182
-
154
+
183
155
  pushStack(state, indentTemp + INDENT_WORD_SKIP, ch);
184
156
  } else { // non-indent word
185
157
  // we continue eating the spaces
@@ -193,15 +165,15 @@ CodeMirror.defineMode("scheme", function (config, mode) {
193
165
  }
194
166
  }
195
167
  stream.backUp(stream.current().length - 1); // undo all the eating
196
-
168
+
197
169
  if(typeof state.sExprComment == "number") state.sExprComment++;
198
-
170
+
199
171
  returnType = BRACKET;
200
172
  } else if (ch == ")" || ch == "]") {
201
173
  returnType = BRACKET;
202
174
  if (state.indentStack != null && state.indentStack.type == (ch == ")" ? "(" : "[")) {
203
175
  popStack(state);
204
-
176
+
205
177
  if(typeof state.sExprComment == "number"){
206
178
  if(--state.sExprComment == 0){
207
179
  returnType = COMMENT; // final closing bracket
@@ -210,11 +182,11 @@ CodeMirror.defineMode("scheme", function (config, mode) {
210
182
  }
211
183
  }
212
184
  } else {
213
- stream.eatWhile(/[\w\$_\-!$%&*+\.\/:<=>?@\^~]/);
214
-
185
+ stream.eatWhile(/[\w\$_\-]/);
186
+
215
187
  if (keywords && keywords.propertyIsEnumerable(stream.current())) {
216
188
  returnType = BUILTIN;
217
- } else returnType = "variable";
189
+ }else returnType = null;
218
190
  }
219
191
  }
220
192
  return (typeof state.sExprComment == "number") ? COMMENT : returnType;
@@ -227,4 +199,4 @@ CodeMirror.defineMode("scheme", function (config, mode) {
227
199
  };
228
200
  });
229
201
 
230
- CodeMirror.defineMIME("text/x-scheme", "scheme");
202
+ CodeMirror.defineMIME("text/x-scheme", "scheme");
@@ -27,45 +27,45 @@ CodeMirror.defineMode('smalltalk', function(config, modeConfig) {
27
27
 
28
28
  var next = function(stream, context, state) {
29
29
  var token = new Token(null, context, false);
30
- var aChar = stream.next();
30
+ var char = stream.next();
31
31
 
32
- if (aChar === '"') {
32
+ if (char === '"') {
33
33
  token = nextComment(stream, new Context(nextComment, context));
34
34
 
35
- } else if (aChar === '\'') {
35
+ } else if (char === '\'') {
36
36
  token = nextString(stream, new Context(nextString, context));
37
37
 
38
- } else if (aChar === '#') {
38
+ } else if (char === '#') {
39
39
  stream.eatWhile(/[^ .]/);
40
40
  token.name = 'string-2';
41
41
 
42
- } else if (aChar === '$') {
42
+ } else if (char === '$') {
43
43
  stream.eatWhile(/[^ ]/);
44
44
  token.name = 'string-2';
45
45
 
46
- } else if (aChar === '|' && state.expectVariable) {
46
+ } else if (char === '|' && state.expectVariable) {
47
47
  token.context = new Context(nextTemporaries, context);
48
48
 
49
- } else if (/[\[\]{}()]/.test(aChar)) {
49
+ } else if (/[\[\]{}()]/.test(char)) {
50
50
  token.name = 'bracket';
51
- token.eos = /[\[{(]/.test(aChar);
51
+ token.eos = /[\[{(]/.test(char);
52
52
 
53
- if (aChar === '[') {
53
+ if (char === '[') {
54
54
  state.indentation++;
55
- } else if (aChar === ']') {
55
+ } else if (char === ']') {
56
56
  state.indentation = Math.max(0, state.indentation - 1);
57
57
  }
58
58
 
59
- } else if (specialChars.test(aChar)) {
59
+ } else if (specialChars.test(char)) {
60
60
  stream.eatWhile(specialChars);
61
61
  token.name = 'operator';
62
- token.eos = aChar !== ';'; // ; cascaded message expression
62
+ token.eos = char !== ';'; // ; cascaded message expression
63
63
 
64
- } else if (/\d/.test(aChar)) {
64
+ } else if (/\d/.test(char)) {
65
65
  stream.eatWhile(/[\w\d]/);
66
66
  token.name = 'number'
67
67
 
68
- } else if (/[\w_]/.test(aChar)) {
68
+ } else if (/[\w_]/.test(char)) {
69
69
  stream.eatWhile(/[\w\d_]/);
70
70
  token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null;
71
71
 
@@ -88,9 +88,9 @@ CodeMirror.defineMode('smalltalk', function(config, modeConfig) {
88
88
 
89
89
  var nextTemporaries = function(stream, context, state) {
90
90
  var token = new Token(null, context, false);
91
- var aChar = stream.next();
91
+ var char = stream.next();
92
92
 
93
- if (aChar === '|') {
93
+ if (char === '|') {
94
94
  token.context = context.parent;
95
95
  token.eos = true;
96
96
 
@@ -82,37 +82,22 @@ CodeMirror.defineMode("stex", function(cmCfg, modeCfg)
82
82
  }
83
83
 
84
84
  function normal(source, state) {
85
- if (source.match(/^\\[a-zA-Z@]+/)) {
85
+ if (source.match(/^\\[a-z]+/)) {
86
86
  var cmdName = source.current();
87
87
  cmdName = cmdName.substr(1, cmdName.length-1);
88
- var plug;
89
- if (plugins.hasOwnProperty(cmdName)) {
90
- plug = plugins[cmdName];
91
- } else {
92
- plug = plugins["DEFAULT"];
93
- }
88
+ var plug = plugins[cmdName];
89
+ if (typeof(plug) == 'undefined') {
90
+ plug = plugins["DEFAULT"];
91
+ }
94
92
  plug = new plug();
95
93
  pushCommand(state, plug);
96
94
  setState(state, beginParams);
97
95
  return plug.style;
98
96
  }
99
97
 
100
- // escape characters
101
- if (source.match(/^\\[$&%#{}_]/)) {
102
- return "tag";
103
- }
104
-
105
- // white space control characters
106
- if (source.match(/^\\[,;!\/]/)) {
107
- return "tag";
108
- }
109
-
110
98
  var ch = source.next();
111
99
  if (ch == "%") {
112
- // special case: % at end of its own line; stay in same state
113
- if (!source.eol()) {
114
- setState(state, inCComment);
115
- }
100
+ setState(state, inCComment);
116
101
  return "comment";
117
102
  }
118
103
  else if (ch=='}' || ch==']') {
@@ -1,18 +1,18 @@
1
1
  /***
2
- |''Name''|tiddlywiki.js|
3
- |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror|
4
- |''Author''|PMario|
5
- |''Version''|0.1.7|
6
- |''Status''|''stable''|
7
- |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]|
8
- |''Documentation''|http://codemirror.tiddlyspace.com/|
9
- |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]|
10
- |''CoreVersion''|2.5.0|
11
- |''Requires''|codemirror.js|
12
- |''Keywords''|syntax highlighting color code mirror codemirror|
13
- ! Info
14
- CoreVersion parameter is needed for TiddlyWiki only!
15
- ***/
2
+ |''Name''|tiddlywiki.js|
3
+ |''Description''|Enables TiddlyWikiy syntax highlighting using CodeMirror2|
4
+ |''Author''|PMario|
5
+ |''Version''|0.1.6|
6
+ |''Status''|''beta''|
7
+ |''Source''|[[GitHub|https://github.com/pmario/CodeMirror2/blob/tw-syntax/mode/tiddlywiki]]|
8
+ |''Documentation''|http://codemirror.tiddlyspace.com/|
9
+ |''License''|[[MIT License|http://www.opensource.org/licenses/mit-license.php]]|
10
+ |''CoreVersion''|2.5.0|
11
+ |''Requires''|codemirror.js|
12
+ |''Keywords''|syntax highlighting color code mirror codemirror|
13
+ ! Info
14
+ CoreVersion parameter is needed for TiddlyWiki only!
15
+ ***/
16
16
  //{{{
17
17
  CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
18
18
  var indentUnit = config.indentUnit;
@@ -47,20 +47,20 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
47
47
  }();
48
48
 
49
49
  var isSpaceName = /[\w_\-]/i,
50
- reHR = /^\-\-\-\-+$/, // <hr>
50
+ reHR = /^\-\-\-\-+$/,
51
51
  reWikiCommentStart = /^\/\*\*\*$/, // /***
52
52
  reWikiCommentStop = /^\*\*\*\/$/, // ***/
53
53
  reBlockQuote = /^<<<$/,
54
54
 
55
- reJsCodeStart = /^\/\/\{\{\{$/, // //{{{ js block start
56
- reJsCodeStop = /^\/\/\}\}\}$/, // //}}} js stop
57
- reXmlCodeStart = /^<!--\{\{\{-->$/, // xml block start
58
- reXmlCodeStop = /^<!--\}\}\}-->$/, // xml stop
55
+ reJsCodeStart = /^\/\/\{\{\{$/, // //{{{
56
+ reJsCodeStop = /^\/\/\}\}\}$/, // //}}}
57
+ reXmlCodeStart = /^<!--\{\{\{-->$/,
58
+ reXmlCodeStop = /^<!--\}\}\}-->$/,
59
59
 
60
- reCodeBlockStart = /^\{\{\{$/, // {{{ TW text div block start
61
- reCodeBlockStop = /^\}\}\}$/, // }}} TW text stop
60
+ reCodeBlockStart = /^\{\{\{$/,
61
+ reCodeBlockStop = /^\}\}\}$/,
62
62
 
63
- reCodeStart = /\{\{\{/, // {{{ code span start
63
+ reCodeStart = /\{\{\{/,
64
64
  reUntilCodeStop = /.*?\}\}\}/;
65
65
 
66
66
  function chain(stream, state, f) {
@@ -95,9 +95,9 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
95
95
 
96
96
  state.block = false; // indicates the start of a code block.
97
97
 
98
- ch = stream.peek(); // don't eat, to make matching simpler
98
+ ch = stream.peek(); // don't eat, to make match simpler
99
99
 
100
- // check start of blocks
100
+ // check start of blocks
101
101
  if (sol && /[<\/\*{}\-]/.test(ch)) {
102
102
  if (stream.match(reCodeBlockStart)) {
103
103
  state.block = true;
@@ -107,16 +107,16 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
107
107
  return ret('quote', 'quote');
108
108
  }
109
109
  if (stream.match(reWikiCommentStart) || stream.match(reWikiCommentStop)) {
110
- return ret('code', 'comment');
110
+ return ret('code', 'code');
111
111
  }
112
112
  if (stream.match(reJsCodeStart) || stream.match(reJsCodeStop) || stream.match(reXmlCodeStart) || stream.match(reXmlCodeStop)) {
113
- return ret('code', 'comment');
113
+ return ret('code', 'code');
114
114
  }
115
115
  if (stream.match(reHR)) {
116
116
  return ret('hr', 'hr');
117
117
  }
118
118
  } // sol
119
- ch = stream.next();
119
+ var ch = stream.next();
120
120
 
121
121
  if (sol && /[\/\*!#;:>|]/.test(ch)) {
122
122
  if (ch == "!") { // tw header
@@ -125,26 +125,26 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
125
125
  }
126
126
  if (ch == "*") { // tw list
127
127
  stream.eatWhile('*');
128
- return ret("list", "comment");
128
+ return ret("list", "list");
129
129
  }
130
130
  if (ch == "#") { // tw numbered list
131
131
  stream.eatWhile('#');
132
- return ret("list", "comment");
132
+ return ret("list", "list");
133
133
  }
134
- if (ch == ";") { // definition list, term
134
+ if (ch == ";") { // tw list
135
135
  stream.eatWhile(';');
136
- return ret("list", "comment");
136
+ return ret("list", "list");
137
137
  }
138
- if (ch == ":") { // definition list, description
138
+ if (ch == ":") { // tw list
139
139
  stream.eatWhile(':');
140
- return ret("list", "comment");
140
+ return ret("list", "list");
141
141
  }
142
142
  if (ch == ">") { // single line quote
143
143
  stream.eatWhile(">");
144
144
  return ret("quote", "quote");
145
145
  }
146
146
  if (ch == '|') {
147
- return ret('table', 'header');
147
+ return ret('table', 'table');
148
148
  }
149
149
  }
150
150
 
@@ -155,16 +155,13 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
155
155
  // rudimentary html:// file:// link matching. TW knows much more ...
156
156
  if (/[hf]/i.test(ch)) {
157
157
  if (/[ti]/i.test(stream.peek()) && stream.match(/\b(ttps?|tp|ile):\/\/[\-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i)) {
158
- return ret("link", "link");
158
+ return ret("link-external", "link-external");
159
159
  }
160
160
  }
161
161
  // just a little string indicator, don't want to have the whole string covered
162
162
  if (ch == '"') {
163
163
  return ret('string', 'string');
164
164
  }
165
- if (ch == '~') { // _no_ CamelCase indicator should be bold
166
- return ret('text', 'brace');
167
- }
168
165
  if (/[\[\]]/.test(ch)) { // check for [[..]]
169
166
  if (stream.peek() == ch) {
170
167
  stream.next();
@@ -173,7 +170,7 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
173
170
  }
174
171
  if (ch == "@") { // check for space link. TODO fix @@...@@ highlighting
175
172
  stream.eatWhile(isSpaceName);
176
- return ret("link", "link");
173
+ return ret("link-external", "link-external");
177
174
  }
178
175
  if (/\d/.test(ch)) { // numbers
179
176
  stream.eatWhile(/\d/);
@@ -192,15 +189,9 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
192
189
  return chain(stream, state, twTokenUnderline);
193
190
  }
194
191
  }
195
- // strikethrough and mdash handling
196
- if (ch == "-") {
192
+ if (ch == "-") { // tw strikethrough TODO looks ugly .. different handling see below;
197
193
  if (stream.eat("-")) {
198
- // if strikethrough looks ugly, change CSS.
199
- if (stream.peek() != ' ')
200
- return chain(stream, state, twTokenStrike);
201
- // mdash
202
- if (stream.peek() == ' ')
203
- return ret('text', 'brace');
194
+ return chain(stream, state, twTokenStrike);
204
195
  }
205
196
  }
206
197
  if (ch == "'") { // tw bold
@@ -217,7 +208,6 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
217
208
  return ret(ch);
218
209
  }
219
210
 
220
- // core macro handling
221
211
  stream.eatWhile(/[\w\$_]/);
222
212
  var word = stream.current(),
223
213
  known = textwords.propertyIsEnumerable(word) && textwords[word];
@@ -266,21 +256,21 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
266
256
  var ch, sb = state.block;
267
257
 
268
258
  if (sb && stream.current()) {
269
- return ret("code", "comment");
259
+ return ret("code", "code");
270
260
  }
271
261
 
272
262
  if (!sb && stream.match(reUntilCodeStop)) {
273
263
  state.tokenize = jsTokenBase;
274
- return ret("code", "comment");
264
+ return ret("code", "code-inline");
275
265
  }
276
266
 
277
267
  if (sb && stream.sol() && stream.match(reCodeBlockStop)) {
278
268
  state.tokenize = jsTokenBase;
279
- return ret("code", "comment");
269
+ return ret("code", "code");
280
270
  }
281
271
 
282
272
  ch = stream.next();
283
- return (sb) ? ret("code", "comment") : ret("code", "comment");
273
+ return (sb) ? ret("code", "code") : ret("code", "code-inline");
284
274
  }
285
275
 
286
276
  // tw em / italic
@@ -311,8 +301,8 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
311
301
  return ret("text", "underlined");
312
302
  }
313
303
 
314
- // tw strike through text looks ugly
315
- // change CSS if needed
304
+ // tw strike through text looks ugly
305
+ // TODO just strike through the first and last 2 chars if possible.
316
306
  function twTokenStrike(stream, state) {
317
307
  var maybeEnd = false,
318
308
  ch, nr;
@@ -324,7 +314,7 @@ CodeMirror.defineMode("tiddlywiki", function (config, parserConfig) {
324
314
  }
325
315
  maybeEnd = (ch == "-");
326
316
  }
327
- return ret("text", "strikethrough");
317
+ return ret("text", "line-through");
328
318
  }
329
319
 
330
320
  // macro