codemirror-rails 4.12 → 4.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codemirror/rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/codemirror.js +45 -22
  4. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +6 -4
  5. data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +1 -1
  6. data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +12 -4
  7. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +14 -9
  8. data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +94 -51
  9. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +2 -1
  10. data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +211 -123
  11. data/vendor/assets/javascripts/codemirror/addons/scroll/annotatescrollbar.js +36 -12
  12. data/vendor/assets/javascripts/codemirror/addons/search/matchesonscrollbar.js +9 -4
  13. data/vendor/assets/javascripts/codemirror/addons/selection/selection-pointer.js +3 -0
  14. data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +31 -4
  15. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +46 -7
  16. data/vendor/assets/javascripts/codemirror/modes/clike.js +5 -1
  17. data/vendor/assets/javascripts/codemirror/modes/css.js +104 -55
  18. data/vendor/assets/javascripts/codemirror/modes/cypher.js +1 -1
  19. data/vendor/assets/javascripts/codemirror/modes/forth.js +180 -0
  20. data/vendor/assets/javascripts/codemirror/modes/go.js +1 -0
  21. data/vendor/assets/javascripts/codemirror/modes/idl.js +1 -1
  22. data/vendor/assets/javascripts/codemirror/modes/javascript.js +1 -1
  23. data/vendor/assets/javascripts/codemirror/modes/sql.js +1 -1
  24. data/vendor/assets/javascripts/codemirror/modes/stylus.js +444 -0
  25. data/vendor/assets/javascripts/codemirror/modes/verilog.js +192 -19
  26. data/vendor/assets/stylesheets/codemirror/themes/colorforth.css +33 -0
  27. metadata +4 -1
@@ -17,7 +17,8 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
17
17
  statementIndentUnit = parserConfig.statementIndentUnit || indentUnit,
18
18
  dontAlignCalls = parserConfig.dontAlignCalls,
19
19
  noIndentKeywords = parserConfig.noIndentKeywords || [],
20
- multiLineStrings = parserConfig.multiLineStrings;
20
+ multiLineStrings = parserConfig.multiLineStrings,
21
+ hooks = parserConfig.hooks || {};
21
22
 
22
23
  function words(str) {
23
24
  var obj = {}, words = str.split(" ");
@@ -107,7 +108,11 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
107
108
  var statementKeywords = words("always always_comb always_ff always_latch assert assign assume else export for foreach forever if import initial repeat while");
108
109
 
109
110
  function tokenBase(stream, state) {
110
- var ch = stream.peek();
111
+ var ch = stream.peek(), style;
112
+ if (hooks[ch] && (style = hooks[ch](stream, state)) != false) return style;
113
+ if (hooks.tokenBase && (style = hooks.tokenBase(stream, state)) != false)
114
+ return style;
115
+
111
116
  if (/[,;:\.]/.test(ch)) {
112
117
  curPunc = stream.next();
113
118
  return null;
@@ -280,12 +285,14 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
280
285
  electricInput: buildElectricInputRegEx(),
281
286
 
282
287
  startState: function(basecolumn) {
283
- return {
288
+ var state = {
284
289
  tokenize: null,
285
290
  context: new Context((basecolumn || 0) - indentUnit, 0, "top", false),
286
291
  indented: 0,
287
292
  startOfLine: true
288
293
  };
294
+ if (hooks.startState) hooks.startState(state);
295
+ return state;
289
296
  },
290
297
 
291
298
  token: function(stream, state) {
@@ -295,6 +302,7 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
295
302
  state.indented = stream.indentation();
296
303
  state.startOfLine = true;
297
304
  }
305
+ if (hooks.token) hooks.token(stream, state);
298
306
  if (stream.eatSpace()) return null;
299
307
  curPunc = null;
300
308
  curKeyword = null;
@@ -304,17 +312,19 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
304
312
 
305
313
  if (curPunc == ctx.type) {
306
314
  popContext(state);
307
- }
308
- else if ((curPunc == ";" && ctx.type == "statement") ||
315
+ } else if ((curPunc == ";" && ctx.type == "statement") ||
309
316
  (ctx.type && isClosing(curKeyword, ctx.type))) {
310
317
  ctx = popContext(state);
311
318
  while (ctx && ctx.type == "statement") ctx = popContext(state);
312
- }
313
- else if (curPunc == "{") { pushContext(state, stream.column(), "}"); }
314
- else if (curPunc == "[") { pushContext(state, stream.column(), "]"); }
315
- else if (curPunc == "(") { pushContext(state, stream.column(), ")"); }
316
- else if (ctx && ctx.type == "endcase" && curPunc == ":") { pushContext(state, stream.column(), "statement"); }
317
- else if (curPunc == "newstatement") {
319
+ } else if (curPunc == "{") {
320
+ pushContext(state, stream.column(), "}");
321
+ } else if (curPunc == "[") {
322
+ pushContext(state, stream.column(), "]");
323
+ } else if (curPunc == "(") {
324
+ pushContext(state, stream.column(), ")");
325
+ } else if (ctx && ctx.type == "endcase" && curPunc == ":") {
326
+ pushContext(state, stream.column(), "statement");
327
+ } else if (curPunc == "newstatement") {
318
328
  pushContext(state, stream.column(), "statement");
319
329
  } else if (curPunc == "newblock") {
320
330
  if (curKeyword == "function" && ctx && (ctx.type == "statement" || ctx.type == "endgroup")) {
@@ -335,13 +345,16 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
335
345
 
336
346
  indent: function(state, textAfter) {
337
347
  if (state.tokenize != tokenBase && state.tokenize != null) return CodeMirror.Pass;
348
+ if (hooks.indent) {
349
+ var fromHook = hooks.indent(state);
350
+ if (fromHook >= 0) return fromHook;
351
+ }
338
352
  var ctx = state.context, firstChar = textAfter && textAfter.charAt(0);
339
353
  if (ctx.type == "statement" && firstChar == "}") ctx = ctx.prev;
340
354
  var closing = false;
341
355
  var possibleClosing = textAfter.match(closingBracketOrWord);
342
- if (possibleClosing) {
356
+ if (possibleClosing)
343
357
  closing = isClosing(possibleClosing[0], ctx.type);
344
- }
345
358
  if (ctx.type == "statement") return ctx.indented + (firstChar == "{" ? 0 : statementIndentUnit);
346
359
  else if (closingBracket.test(ctx.type) && ctx.align && !dontAlignCalls) return ctx.column + (closing ? 0 : 1);
347
360
  else if (ctx.type == ")" && !closing) return ctx.indented + statementIndentUnit;
@@ -354,11 +367,171 @@ CodeMirror.defineMode("verilog", function(config, parserConfig) {
354
367
  };
355
368
  });
356
369
 
357
- CodeMirror.defineMIME("text/x-verilog", {
358
- name: "verilog"
359
- });
360
- CodeMirror.defineMIME("text/x-systemverilog", {
361
- name: "systemverilog"
362
- });
370
+ CodeMirror.defineMIME("text/x-verilog", {
371
+ name: "verilog"
372
+ });
373
+
374
+ CodeMirror.defineMIME("text/x-systemverilog", {
375
+ name: "verilog"
376
+ });
377
+
378
+ // SVXVerilog mode
379
+
380
+ var svxchScopePrefixes = {
381
+ ">": "property", "->": "property", "-": "hr", "|": "link", "?$": "qualifier", "?*": "qualifier",
382
+ "@-": "variable-3", "@": "variable-3", "?": "qualifier"
383
+ };
363
384
 
385
+ function svxGenIndent(stream, state) {
386
+ var svxindentUnit = 2;
387
+ var rtnIndent = -1, indentUnitRq = 0, curIndent = stream.indentation();
388
+ switch (state.svxCurCtlFlowChar) {
389
+ case "\\":
390
+ curIndent = 0;
391
+ break;
392
+ case "|":
393
+ if (state.svxPrevPrevCtlFlowChar == "@") {
394
+ indentUnitRq = -2; //-2 new pipe rq after cur pipe
395
+ break;
396
+ }
397
+ if (svxchScopePrefixes[state.svxPrevCtlFlowChar])
398
+ indentUnitRq = 1; // +1 new scope
399
+ break;
400
+ case "M": // m4
401
+ if (state.svxPrevPrevCtlFlowChar == "@") {
402
+ indentUnitRq = -2; //-2 new inst rq after pipe
403
+ break;
404
+ }
405
+ if (svxchScopePrefixes[state.svxPrevCtlFlowChar])
406
+ indentUnitRq = 1; // +1 new scope
407
+ break;
408
+ case "@":
409
+ if (state.svxPrevCtlFlowChar == "S")
410
+ indentUnitRq = -1; // new pipe stage after stmts
411
+ if (state.svxPrevCtlFlowChar == "|")
412
+ indentUnitRq = 1; // 1st pipe stage
413
+ break;
414
+ case "S":
415
+ if (state.svxPrevCtlFlowChar == "@")
416
+ indentUnitRq = 1; // flow in pipe stage
417
+ if (svxchScopePrefixes[state.svxPrevCtlFlowChar])
418
+ indentUnitRq = 1; // +1 new scope
419
+ break;
420
+ }
421
+ var statementIndentUnit = svxindentUnit;
422
+ rtnIndent = curIndent + (indentUnitRq*statementIndentUnit);
423
+ return rtnIndent >= 0 ? rtnIndent : curIndent;
424
+ }
425
+
426
+ CodeMirror.defineMIME("text/x-svx", {
427
+ name: "verilog",
428
+ hooks: {
429
+ "\\": function(stream, state) {
430
+ var vxIndent = 0, style = false;
431
+ var curPunc = stream.string;
432
+ if ((stream.sol()) && (/\\SV/.test(stream.string))) {
433
+ curPunc = (/\\SVX_version/.test(stream.string))
434
+ ? "\\SVX_version" : stream.string;
435
+ stream.skipToEnd();
436
+ if (curPunc == "\\SV" && state.vxCodeActive) {state.vxCodeActive = false;};
437
+ if ((/\\SVX/.test(curPunc) && !state.vxCodeActive)
438
+ || (curPunc=="\\SVX_version" && state.vxCodeActive)) {state.vxCodeActive = true;};
439
+ style = "keyword";
440
+ state.svxCurCtlFlowChar = state.svxPrevPrevCtlFlowChar
441
+ = state.svxPrevCtlFlowChar = "";
442
+ if (state.vxCodeActive == true) {
443
+ state.svxCurCtlFlowChar = "\\";
444
+ vxIndent = svxGenIndent(stream, state);
445
+ }
446
+ state.vxIndentRq = vxIndent;
447
+ }
448
+ return style;
449
+ },
450
+ tokenBase: function(stream, state) {
451
+ var vxIndent = 0, style = false;
452
+ var svxisOperatorChar = /[\[\]=:]/;
453
+ var svxkpScopePrefixs = {
454
+ "**":"variable-2", "*":"variable-2", "$$":"variable", "$":"variable",
455
+ "^^":"attribute", "^":"attribute"};
456
+ var ch = stream.peek();
457
+ var vxCurCtlFlowCharValueAtStart = state.svxCurCtlFlowChar;
458
+ if (state.vxCodeActive == true) {
459
+ if (/[\[\]{}\(\);\:]/.test(ch)) {
460
+ // bypass nesting and 1 char punc
461
+ style = "meta";
462
+ stream.next();
463
+ } else if (ch == "/") {
464
+ stream.next();
465
+ if (stream.eat("/")) {
466
+ stream.skipToEnd();
467
+ style = "comment";
468
+ state.svxCurCtlFlowChar = "S";
469
+ } else {
470
+ stream.backUp(1);
471
+ }
472
+ } else if (ch == "@") {
473
+ // pipeline stage
474
+ style = svxchScopePrefixes[ch];
475
+ state.svxCurCtlFlowChar = "@";
476
+ stream.next();
477
+ stream.eatWhile(/[\w\$_]/);
478
+ } else if (stream.match(/\b[mM]4+/, true)) { // match: function(pattern, consume, caseInsensitive)
479
+ // m4 pre proc
480
+ stream.skipTo("(");
481
+ style = "def";
482
+ state.svxCurCtlFlowChar = "M";
483
+ } else if (ch == "!" && stream.sol()) {
484
+ // v stmt in svx region
485
+ // state.svxCurCtlFlowChar = "S";
486
+ style = "comment";
487
+ stream.next();
488
+ } else if (svxisOperatorChar.test(ch)) {
489
+ // operators
490
+ stream.eatWhile(svxisOperatorChar);
491
+ style = "operator";
492
+ } else if (ch == "#") {
493
+ // phy hier
494
+ state.svxCurCtlFlowChar = (state.svxCurCtlFlowChar == "")
495
+ ? ch : state.svxCurCtlFlowChar;
496
+ stream.next();
497
+ stream.eatWhile(/[+-]\d/);
498
+ style = "tag";
499
+ } else if (svxkpScopePrefixs.propertyIsEnumerable(ch)) {
500
+ // special SVX operators
501
+ style = svxkpScopePrefixs[ch];
502
+ state.svxCurCtlFlowChar = state.svxCurCtlFlowChar == "" ? "S" : state.svxCurCtlFlowChar; // stmt
503
+ stream.next();
504
+ stream.match(/[a-zA-Z_0-9]+/);
505
+ } else if (style = svxchScopePrefixes[ch] || false) {
506
+ // special SVX operators
507
+ state.svxCurCtlFlowChar = state.svxCurCtlFlowChar == "" ? ch : state.svxCurCtlFlowChar;
508
+ stream.next();
509
+ stream.match(/[a-zA-Z_0-9]+/);
510
+ }
511
+ if (state.svxCurCtlFlowChar != vxCurCtlFlowCharValueAtStart) { // flow change
512
+ vxIndent = svxGenIndent(stream, state);
513
+ state.vxIndentRq = vxIndent;
514
+ }
515
+ }
516
+ return style;
517
+ },
518
+ token: function(stream, state) {
519
+ if (state.vxCodeActive == true && stream.sol() && state.svxCurCtlFlowChar != "") {
520
+ state.svxPrevPrevCtlFlowChar = state.svxPrevCtlFlowChar;
521
+ state.svxPrevCtlFlowChar = state.svxCurCtlFlowChar;
522
+ state.svxCurCtlFlowChar = "";
523
+ }
524
+ },
525
+ indent: function(state) {
526
+ return (state.vxCodeActive == true) ? state.vxIndentRq : -1;
527
+ },
528
+ startState: function(state) {
529
+ state.svxCurCtlFlowChar = "";
530
+ state.svxPrevCtlFlowChar = "";
531
+ state.svxPrevPrevCtlFlowChar = "";
532
+ state.vxCodeActive = true;
533
+ state.vxIndentRq = 0;
534
+ }
535
+ }
536
+ });
364
537
  });
@@ -0,0 +1,33 @@
1
+ .cm-s-colorforth.CodeMirror { background: #000000; color: #f8f8f8; }
2
+ .cm-s-colorforth .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
3
+ .cm-s-colorforth .CodeMirror-guttermarker { color: #FFBD40; }
4
+ .cm-s-colorforth .CodeMirror-guttermarker-subtle { color: #78846f; }
5
+ .cm-s-colorforth .CodeMirror-linenumber { color: #bababa; }
6
+ .cm-s-colorforth .CodeMirror-cursor { border-left: 1px solid white !important; }
7
+
8
+ .cm-s-colorforth span.cm-comment { color: #ededed; }
9
+ .cm-s-colorforth span.cm-def { color: #ff1c1c; font-weight:bold; }
10
+ .cm-s-colorforth span.cm-keyword { color: #ffd900; }
11
+ .cm-s-colorforth span.cm-builtin { color: #00d95a; }
12
+ .cm-s-colorforth span.cm-variable { color: #73ff00; }
13
+ .cm-s-colorforth span.cm-string { color: #007bff; }
14
+ .cm-s-colorforth span.cm-number { color: #00c4ff; }
15
+ .cm-s-colorforth span.cm-atom { color: #606060; }
16
+
17
+ .cm-s-colorforth span.cm-variable-2 { color: #EEE; }
18
+ .cm-s-colorforth span.cm-variable-3 { color: #DDD; }
19
+ .cm-s-colorforth span.cm-property {}
20
+ .cm-s-colorforth span.cm-operator {}
21
+
22
+ .cm-s-colorforth span.cm-meta { color: yellow; }
23
+ .cm-s-colorforth span.cm-qualifier { color: #FFF700; }
24
+ .cm-s-colorforth span.cm-bracket { color: #cc7; }
25
+ .cm-s-colorforth span.cm-tag { color: #FFBD40; }
26
+ .cm-s-colorforth span.cm-attribute { color: #FFF700; }
27
+ .cm-s-colorforth span.cm-error { color: #f00; }
28
+
29
+ .cm-s-colorforth .CodeMirror-selected { background: #333d53 !important; }
30
+
31
+ .cm-s-colorforth span.cm-compilation { background: rgba(255, 255, 255, 0.12); }
32
+
33
+ .cm-s-colorforth .CodeMirror-activeline-background {background: #253540 !important;}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codemirror-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: '4.12'
4
+ version: '4.13'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Fixler
@@ -287,6 +287,7 @@ files:
287
287
  - vendor/assets/javascripts/codemirror/modes/ecl.js
288
288
  - vendor/assets/javascripts/codemirror/modes/eiffel.js
289
289
  - vendor/assets/javascripts/codemirror/modes/erlang.js
290
+ - vendor/assets/javascripts/codemirror/modes/forth.js
290
291
  - vendor/assets/javascripts/codemirror/modes/fortran.js
291
292
  - vendor/assets/javascripts/codemirror/modes/gas.js
292
293
  - vendor/assets/javascripts/codemirror/modes/gfm.js
@@ -342,6 +343,7 @@ files:
342
343
  - vendor/assets/javascripts/codemirror/modes/spreadsheet.js
343
344
  - vendor/assets/javascripts/codemirror/modes/sql.js
344
345
  - vendor/assets/javascripts/codemirror/modes/stex.js
346
+ - vendor/assets/javascripts/codemirror/modes/stylus.js
345
347
  - vendor/assets/javascripts/codemirror/modes/tcl.js
346
348
  - vendor/assets/javascripts/codemirror/modes/textile.js
347
349
  - vendor/assets/javascripts/codemirror/modes/tiddlywiki.js
@@ -377,6 +379,7 @@ files:
377
379
  - vendor/assets/stylesheets/codemirror/themes/base16-light.css
378
380
  - vendor/assets/stylesheets/codemirror/themes/blackboard.css
379
381
  - vendor/assets/stylesheets/codemirror/themes/cobalt.css
382
+ - vendor/assets/stylesheets/codemirror/themes/colorforth.css
380
383
  - vendor/assets/stylesheets/codemirror/themes/eclipse.css
381
384
  - vendor/assets/stylesheets/codemirror/themes/elegant.css
382
385
  - vendor/assets/stylesheets/codemirror/themes/erlang-dark.css