codemirror-rails 4.1 → 4.2

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 (138) hide show
  1. checksums.yaml +4 -4
  2. data/lib/codemirror/rails/version.rb +2 -2
  3. data/vendor/assets/javascripts/codemirror.js +133 -58
  4. data/vendor/assets/javascripts/codemirror/addons/comment/comment.js +3 -0
  5. data/vendor/assets/javascripts/codemirror/addons/comment/continuecomment.js +3 -0
  6. data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +3 -0
  7. data/vendor/assets/javascripts/codemirror/addons/display/fullscreen.js +3 -0
  8. data/vendor/assets/javascripts/codemirror/addons/display/placeholder.js +3 -0
  9. data/vendor/assets/javascripts/codemirror/addons/display/rulers.js +16 -6
  10. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +3 -0
  11. data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +28 -3
  12. data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +3 -0
  13. data/vendor/assets/javascripts/codemirror/addons/edit/matchbrackets.js +3 -0
  14. data/vendor/assets/javascripts/codemirror/addons/edit/matchtags.js +3 -0
  15. data/vendor/assets/javascripts/codemirror/addons/edit/trailingspace.js +3 -0
  16. data/vendor/assets/javascripts/codemirror/addons/fold/brace-fold.js +3 -0
  17. data/vendor/assets/javascripts/codemirror/addons/fold/comment-fold.js +3 -0
  18. data/vendor/assets/javascripts/codemirror/addons/fold/foldcode.js +36 -8
  19. data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +3 -0
  20. data/vendor/assets/javascripts/codemirror/addons/fold/indent-fold.js +3 -0
  21. data/vendor/assets/javascripts/codemirror/addons/fold/markdown-fold.js +3 -0
  22. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +4 -1
  23. data/vendor/assets/javascripts/codemirror/addons/hint/anyword-hint.js +3 -0
  24. data/vendor/assets/javascripts/codemirror/addons/hint/css-hint.js +3 -0
  25. data/vendor/assets/javascripts/codemirror/addons/hint/html-hint.js +3 -0
  26. data/vendor/assets/javascripts/codemirror/addons/hint/javascript-hint.js +7 -2
  27. data/vendor/assets/javascripts/codemirror/addons/hint/python-hint.js +3 -0
  28. data/vendor/assets/javascripts/codemirror/addons/hint/show-hint.js +74 -36
  29. data/vendor/assets/javascripts/codemirror/addons/hint/sql-hint.js +3 -0
  30. data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +3 -0
  31. data/vendor/assets/javascripts/codemirror/addons/lint/coffeescript-lint.js +3 -0
  32. data/vendor/assets/javascripts/codemirror/addons/lint/css-lint.js +3 -0
  33. data/vendor/assets/javascripts/codemirror/addons/lint/javascript-lint.js +3 -0
  34. data/vendor/assets/javascripts/codemirror/addons/lint/json-lint.js +3 -0
  35. data/vendor/assets/javascripts/codemirror/addons/lint/lint.js +3 -0
  36. data/vendor/assets/javascripts/codemirror/addons/lint/yaml-lint.js +3 -0
  37. data/vendor/assets/javascripts/codemirror/addons/merge/merge.js +3 -0
  38. data/vendor/assets/javascripts/codemirror/addons/mode/loadmode.js +3 -0
  39. data/vendor/assets/javascripts/codemirror/addons/mode/multiplex.js +3 -0
  40. data/vendor/assets/javascripts/codemirror/addons/mode/overlay.js +12 -3
  41. data/vendor/assets/javascripts/codemirror/addons/runmode/colorize.js +3 -0
  42. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode-standalone.js +4 -1
  43. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.js +4 -1
  44. data/vendor/assets/javascripts/codemirror/addons/runmode/runmode.node.js +4 -1
  45. data/vendor/assets/javascripts/codemirror/addons/scroll/scrollpastend.js +3 -0
  46. data/vendor/assets/javascripts/codemirror/addons/search/match-highlighter.js +6 -2
  47. data/vendor/assets/javascripts/codemirror/addons/search/search.js +3 -0
  48. data/vendor/assets/javascripts/codemirror/addons/search/searchcursor.js +3 -0
  49. data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +3 -0
  50. data/vendor/assets/javascripts/codemirror/addons/selection/mark-selection.js +3 -0
  51. data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +23 -16
  52. data/vendor/assets/javascripts/codemirror/addons/tern/worker.js +3 -0
  53. data/vendor/assets/javascripts/codemirror/addons/wrap/hardwrap.js +3 -0
  54. data/vendor/assets/javascripts/codemirror/keymaps/emacs.js +4 -7
  55. data/vendor/assets/javascripts/codemirror/keymaps/sublime.js +11 -8
  56. data/vendor/assets/javascripts/codemirror/keymaps/vim.js +92 -33
  57. data/vendor/assets/javascripts/codemirror/modes/apl.js +3 -0
  58. data/vendor/assets/javascripts/codemirror/modes/asterisk.js +3 -0
  59. data/vendor/assets/javascripts/codemirror/modes/clike.js +3 -0
  60. data/vendor/assets/javascripts/codemirror/modes/clojure.js +3 -0
  61. data/vendor/assets/javascripts/codemirror/modes/cobol.js +3 -0
  62. data/vendor/assets/javascripts/codemirror/modes/coffeescript.js +3 -0
  63. data/vendor/assets/javascripts/codemirror/modes/commonlisp.js +3 -0
  64. data/vendor/assets/javascripts/codemirror/modes/css.js +13 -14
  65. data/vendor/assets/javascripts/codemirror/modes/cypher.js +146 -0
  66. data/vendor/assets/javascripts/codemirror/modes/d.js +3 -0
  67. data/vendor/assets/javascripts/codemirror/modes/diff.js +3 -0
  68. data/vendor/assets/javascripts/codemirror/modes/django.js +3 -0
  69. data/vendor/assets/javascripts/codemirror/modes/dtd.js +3 -0
  70. data/vendor/assets/javascripts/codemirror/modes/dylan.js +15 -0
  71. data/vendor/assets/javascripts/codemirror/modes/ecl.js +3 -0
  72. data/vendor/assets/javascripts/codemirror/modes/eiffel.js +3 -0
  73. data/vendor/assets/javascripts/codemirror/modes/erlang.js +3 -0
  74. data/vendor/assets/javascripts/codemirror/modes/fortran.js +3 -0
  75. data/vendor/assets/javascripts/codemirror/modes/gas.js +3 -0
  76. data/vendor/assets/javascripts/codemirror/modes/gfm.js +9 -1
  77. data/vendor/assets/javascripts/codemirror/modes/gherkin.js +3 -0
  78. data/vendor/assets/javascripts/codemirror/modes/go.js +3 -0
  79. data/vendor/assets/javascripts/codemirror/modes/groovy.js +3 -0
  80. data/vendor/assets/javascripts/codemirror/modes/haml.js +3 -0
  81. data/vendor/assets/javascripts/codemirror/modes/haskell.js +3 -0
  82. data/vendor/assets/javascripts/codemirror/modes/haxe.js +5 -1
  83. data/vendor/assets/javascripts/codemirror/modes/htmlembedded.js +3 -0
  84. data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +3 -0
  85. data/vendor/assets/javascripts/codemirror/modes/http.js +3 -0
  86. data/vendor/assets/javascripts/codemirror/modes/jade.js +569 -81
  87. data/vendor/assets/javascripts/codemirror/modes/javascript.js +5 -0
  88. data/vendor/assets/javascripts/codemirror/modes/jinja2.js +3 -0
  89. data/vendor/assets/javascripts/codemirror/modes/julia.js +3 -0
  90. data/vendor/assets/javascripts/codemirror/modes/livescript.js +17 -17
  91. data/vendor/assets/javascripts/codemirror/modes/lua.js +3 -0
  92. data/vendor/assets/javascripts/codemirror/modes/markdown.js +5 -3
  93. data/vendor/assets/javascripts/codemirror/modes/mirc.js +3 -0
  94. data/vendor/assets/javascripts/codemirror/modes/mllike.js +3 -0
  95. data/vendor/assets/javascripts/codemirror/modes/nginx.js +3 -0
  96. data/vendor/assets/javascripts/codemirror/modes/ntriples.js +3 -0
  97. data/vendor/assets/javascripts/codemirror/modes/octave.js +3 -0
  98. data/vendor/assets/javascripts/codemirror/modes/pascal.js +3 -0
  99. data/vendor/assets/javascripts/codemirror/modes/pegjs.js +3 -0
  100. data/vendor/assets/javascripts/codemirror/modes/perl.js +5 -0
  101. data/vendor/assets/javascripts/codemirror/modes/php.js +5 -2
  102. data/vendor/assets/javascripts/codemirror/modes/pig.js +3 -0
  103. data/vendor/assets/javascripts/codemirror/modes/properties.js +3 -0
  104. data/vendor/assets/javascripts/codemirror/modes/puppet.js +3 -0
  105. data/vendor/assets/javascripts/codemirror/modes/python.js +284 -328
  106. data/vendor/assets/javascripts/codemirror/modes/q.js +3 -0
  107. data/vendor/assets/javascripts/codemirror/modes/r.js +3 -0
  108. data/vendor/assets/javascripts/codemirror/modes/rpm.js +3 -0
  109. data/vendor/assets/javascripts/codemirror/modes/rst.js +3 -0
  110. data/vendor/assets/javascripts/codemirror/modes/ruby.js +3 -0
  111. data/vendor/assets/javascripts/codemirror/modes/rust.js +3 -0
  112. data/vendor/assets/javascripts/codemirror/modes/sass.js +3 -0
  113. data/vendor/assets/javascripts/codemirror/modes/scheme.js +3 -0
  114. data/vendor/assets/javascripts/codemirror/modes/shell.js +9 -2
  115. data/vendor/assets/javascripts/codemirror/modes/sieve.js +3 -0
  116. data/vendor/assets/javascripts/codemirror/modes/smalltalk.js +3 -0
  117. data/vendor/assets/javascripts/codemirror/modes/smarty.js +3 -0
  118. data/vendor/assets/javascripts/codemirror/modes/smartymixed.js +3 -0
  119. data/vendor/assets/javascripts/codemirror/modes/solr.js +3 -0
  120. data/vendor/assets/javascripts/codemirror/modes/sparql.js +3 -0
  121. data/vendor/assets/javascripts/codemirror/modes/sql.js +3 -0
  122. data/vendor/assets/javascripts/codemirror/modes/stex.js +3 -0
  123. data/vendor/assets/javascripts/codemirror/modes/tcl.js +3 -0
  124. data/vendor/assets/javascripts/codemirror/modes/tiddlywiki.js +3 -0
  125. data/vendor/assets/javascripts/codemirror/modes/tiki.js +3 -0
  126. data/vendor/assets/javascripts/codemirror/modes/toml.js +3 -0
  127. data/vendor/assets/javascripts/codemirror/modes/turtle.js +3 -0
  128. data/vendor/assets/javascripts/codemirror/modes/vb.js +3 -0
  129. data/vendor/assets/javascripts/codemirror/modes/vbscript.js +3 -0
  130. data/vendor/assets/javascripts/codemirror/modes/velocity.js +3 -0
  131. data/vendor/assets/javascripts/codemirror/modes/verilog.js +3 -0
  132. data/vendor/assets/javascripts/codemirror/modes/xml.js +4 -1
  133. data/vendor/assets/javascripts/codemirror/modes/xquery.js +3 -0
  134. data/vendor/assets/javascripts/codemirror/modes/yaml.js +3 -0
  135. data/vendor/assets/javascripts/codemirror/modes/z80.js +3 -0
  136. data/vendor/assets/stylesheets/codemirror/addons/tern/tern.css +1 -0
  137. data/vendor/assets/stylesheets/codemirror/themes/neo.css +40 -0
  138. metadata +4 -2
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"), require("../../mode/sql/sql"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Depends on coffeelint.js from http://www.coffeelint.org/js/coffeelint.js
2
5
 
3
6
  // declare global: coffeelint
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Depends on csslint.js from https://github.com/stubbornella/csslint
2
5
 
3
6
  // declare global: CSSLint
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Depends on jsonlint.js from https://github.com/zaach/jsonlint
2
5
 
3
6
  // declare global: jsonlint
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,10 +1,14 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Utility function that allows modes to be combined. The mode given
2
5
  // as the base argument takes care of most of the normal mode
3
6
  // functionality, but a second (typically simple) mode is used, which
4
7
  // can override the style of text. Both modes get to parse all of the
5
8
  // text, but when both assign a non-null style to a piece of code, the
6
- // overlay wins, unless the combine argument was true, in which case
7
- // the styles are combined.
9
+ // overlay wins, unless the combine argument was true and not overridden,
10
+ // or state.overlay.combineTokens was true, in which case the styles are
11
+ // combined.
8
12
 
9
13
  (function(mod) {
10
14
  if (typeof exports == "object" && typeof module == "object") // CommonJS
@@ -54,8 +58,13 @@ CodeMirror.overlayMode = function(base, overlay, combine) {
54
58
  }
55
59
  stream.pos = Math.min(state.basePos, state.overlayPos);
56
60
 
61
+ // state.overlay.combineTokens always takes precedence over combine,
62
+ // unless set to null
57
63
  if (state.overlayCur == null) return state.baseCur;
58
- if (state.baseCur != null && combine) return state.baseCur + " " + state.overlayCur;
64
+ else if (state.baseCur != null &&
65
+ state.overlay.combineTokens ||
66
+ combine && state.overlay.combineTokens == null)
67
+ return state.baseCur + " " + state.overlayCur;
59
68
  else return state.overlayCur;
60
69
  },
61
70
 
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"), require("./runmode"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  window.CodeMirror = {};
2
5
 
3
6
  (function() {
@@ -139,7 +142,7 @@ CodeMirror.runMode = function (string, modespec, callback, options) {
139
142
  for (var i = 0, e = lines.length; i < e; ++i) {
140
143
  if (i) callback("\n");
141
144
  var stream = new CodeMirror.StringStream(lines[i]);
142
- if (!stream.string && mode.blankLine) mode.blankLine();
145
+ if (!stream.string && mode.blankLine) mode.blankLine(state);
143
146
  while (!stream.eol()) {
144
147
  var style = mode.token(stream, state);
145
148
  callback(stream.current(), style, i, stream.start, state);
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -57,7 +60,7 @@ CodeMirror.runMode = function(string, modespec, callback, options) {
57
60
  for (var i = 0, e = lines.length; i < e; ++i) {
58
61
  if (i) callback("\n");
59
62
  var stream = new CodeMirror.StringStream(lines[i]);
60
- if (!stream.string && mode.blankLine) mode.blankLine();
63
+ if (!stream.string && mode.blankLine) mode.blankLine(state);
61
64
  while (!stream.eol()) {
62
65
  var style = mode.token(stream, state);
63
66
  callback(stream.current(), style, i, stream.start, state);
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  /* Just enough of CodeMirror to run runMode under node.js */
2
5
 
3
6
  // declare global: StringStream
@@ -107,7 +110,7 @@ exports.runMode = function(string, modespec, callback, options) {
107
110
  for (var i = 0, e = lines.length; i < e; ++i) {
108
111
  if (i) callback("\n");
109
112
  var stream = new exports.StringStream(lines[i]);
110
- if (!stream.string && mode.blankLine) mode.blankLine();
113
+ if (!stream.string && mode.blankLine) mode.blankLine(state);
111
114
  while (!stream.eol()) {
112
115
  var style = mode.token(stream, state);
113
116
  callback(stream.current(), style, i, stream.start, state);
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Highlighting text that matches the selection
2
5
  //
3
6
  // Defines an option highlightSelectionMatches, which, when enabled,
@@ -76,8 +79,9 @@
76
79
  cm.addOverlay(state.overlay = makeOverlay(line.slice(start, end), re, state.style));
77
80
  return;
78
81
  }
79
- if (cm.getCursor("head").line != cm.getCursor("anchor").line) return;
80
- var selection = cm.getSelections()[0].replace(/^\s+|\s+$/g, "");
82
+ var from = cm.getCursor("from"), to = cm.getCursor("to");
83
+ if (from.line != to.line) return;
84
+ var selection = cm.getRange(from, to).replace(/^\s+|\s+$/g, "");
81
85
  if (selection.length >= state.minChars)
82
86
  cm.addOverlay(state.overlay = makeOverlay(selection, false, state.style));
83
87
  });
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Define search commands. Depends on dialog.js or another
2
5
  // implementation of the openDialog method.
3
6
 
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Because sometimes you need to style the cursor's line.
2
5
  //
3
6
  // Adds an option 'styleActiveLine' which, when enabled, gives the
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Because sometimes you need to mark the selected *text*.
2
5
  //
3
6
  // Adds an option 'styleSelectedText' which, when enabled, gives
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // Glue code between CodeMirror and Tern.
2
5
  //
3
6
  // Create a CodeMirror.TernServer to wrap an actual Tern server,
@@ -14,7 +17,7 @@
14
17
  // indicate that a file is not available.
15
18
  // * fileFilter: A function(value, docName, doc) that will be applied
16
19
  // to documents before passing them on to Tern.
17
- // * switchToDoc: A function(name) that should, when providing a
20
+ // * switchToDoc: A function(name, doc) that should, when providing a
18
21
  // multi-file view, switch the view or focus to the named file.
19
22
  // * showError: A function(editor, message) that can be used to
20
23
  // override the way errors are displayed.
@@ -72,6 +75,9 @@
72
75
  this.cachedArgHints = null;
73
76
  this.activeArgHints = null;
74
77
  this.jumpStack = [];
78
+
79
+ this.getHint = function(cm, c) { return hint(self, cm, c); };
80
+ this.getHint.async = true;
75
81
  };
76
82
 
77
83
  CodeMirror.TernServer.prototype = {
@@ -82,27 +88,24 @@
82
88
  return this.docs[name] = data;
83
89
  },
84
90
 
85
- delDoc: function(name) {
86
- var found = this.docs[name];
91
+ delDoc: function(id) {
92
+ var found = resolveDoc(this, id);
87
93
  if (!found) return;
88
94
  CodeMirror.off(found.doc, "change", this.trackChange);
89
- delete this.docs[name];
90
- this.server.delFile(name);
95
+ delete this.docs[found.name];
96
+ this.server.delFile(found.name);
91
97
  },
92
98
 
93
- hideDoc: function(name) {
99
+ hideDoc: function(id) {
94
100
  closeArgHints(this);
95
- var found = this.docs[name];
101
+ var found = resolveDoc(this, id);
96
102
  if (found && found.changed) sendDoc(this, found);
97
103
  },
98
104
 
99
105
  complete: function(cm) {
100
- var self = this;
101
- CodeMirror.showHint(cm, function(cm, c) { return hint(self, cm, c); }, {async: true});
106
+ cm.showHint({hint: this.getHint});
102
107
  },
103
108
 
104
- getHint: function(cm, c) { return hint(this, cm, c); },
105
-
106
109
  showType: function(cm, pos) { showType(this, cm, pos); },
107
110
 
108
111
  updateArgHints: function(cm) { updateArgHints(this, cm); },
@@ -154,6 +157,12 @@
154
157
  return ts.addDoc(name, doc);
155
158
  }
156
159
 
160
+ function resolveDoc(ts, id) {
161
+ if (typeof id == "string") return ts.docs[id];
162
+ if (id instanceof CodeMirror) id = id.getDoc();
163
+ if (id instanceof CodeMirror.Doc) return findDoc(ts, id);
164
+ }
165
+
157
166
  function trackChange(ts, doc, change) {
158
167
  var data = findDoc(ts, doc);
159
168
 
@@ -381,10 +390,10 @@
381
390
  }
382
391
 
383
392
  function moveTo(ts, curDoc, doc, start, end) {
384
- doc.doc.setSelection(end, start);
393
+ doc.doc.setSelection(start, end);
385
394
  if (curDoc != doc && ts.options.switchToDoc) {
386
395
  closeArgHints(ts);
387
- ts.options.switchToDoc(doc.name);
396
+ ts.options.switchToDoc(doc.name, doc.doc);
388
397
  }
389
398
  }
390
399
 
@@ -429,7 +438,7 @@
429
438
 
430
439
  function rename(ts, cm) {
431
440
  var token = cm.getTokenAt(cm.getCursor());
432
- if (!/\w/.test(token.string)) showError(ts, cm, "Not at a variable");
441
+ if (!/\w/.test(token.string)) return showError(ts, cm, "Not at a variable");
433
442
  dialog(cm, "New name for " + token.string, function(newName) {
434
443
  ts.request(cm, {type: "rename", newName: newName, fullDocs: true}, function(error, data) {
435
444
  if (error) return showError(ts, cm, error);
@@ -439,8 +448,6 @@
439
448
  }
440
449
 
441
450
  function selectName(ts, cm) {
442
- var cur = cm.getCursor(), token = cm.getTokenAt(cur);
443
- if (!/\w/.test(token.string)) showError(ts, cm, "Not at a variable");
444
451
  var name = findDoc(ts, cm.doc).name;
445
452
  ts.request(cm, {type: "refs"}, function(error, data) {
446
453
  if (error) return showError(ts, cm, error);
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // declare global: tern, server
2
5
 
3
6
  var server;
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../../lib/codemirror"));
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  (function(mod) {
2
5
  if (typeof exports == "object" && typeof module == "object") // CommonJS
3
6
  mod(require("../lib/codemirror"));
@@ -324,13 +327,7 @@
324
327
  },
325
328
  "Ctrl-O": repeated(function(cm) { cm.replaceSelection("\n", "start"); }),
326
329
  "Ctrl-T": repeated(function(cm) {
327
- var pos = cm.getCursor();
328
- if (pos.ch < cm.getLine(pos.line).length) pos = Pos(pos.line, pos.ch + 1);
329
- var from = cm.findPosH(pos, -2, "char");
330
- var range = cm.getRange(from, pos);
331
- if (range.length != 2) return;
332
- cm.setSelection(from, pos);
333
- cm.replaceSelection(range.charAt(1) + range.charAt(0), null, "+transpose");
330
+ cm.execCommand("transposeChars");
334
331
  }),
335
332
 
336
333
  "Alt-C": repeated(function(cm) {
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  // A rough approximation of Sublime Text's keybindings
2
5
  // Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js
3
6
 
@@ -184,9 +187,12 @@
184
187
  };
185
188
 
186
189
  cmds[map["Shift-" + ctrl + "Up"] = "swapLineUp"] = function(cm) {
187
- var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1;
190
+ var ranges = cm.listSelections(), linesToMove = [], at = cm.firstLine() - 1, newSels = [];
188
191
  for (var i = 0; i < ranges.length; i++) {
189
192
  var range = ranges[i], from = range.from().line - 1, to = range.to().line;
193
+ newSels.push({anchor: Pos(range.anchor.line - 1, range.anchor.ch),
194
+ head: Pos(range.head.line - 1, range.head.ch)});
195
+ if (range.to().ch == 0 && !range.empty()) --to;
190
196
  if (from > at) linesToMove.push(from, to);
191
197
  else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
192
198
  at = to;
@@ -196,16 +202,12 @@
196
202
  var from = linesToMove[i], to = linesToMove[i + 1];
197
203
  var line = cm.getLine(from);
198
204
  cm.replaceRange("", Pos(from, 0), Pos(from + 1, 0), "+swapLine");
199
- if (to > cm.lastLine()) {
205
+ if (to > cm.lastLine())
200
206
  cm.replaceRange("\n" + line, Pos(cm.lastLine()), null, "+swapLine");
201
- var sels = cm.listSelections(), last = sels[sels.length - 1];
202
- var head = last.head.line == to ? Pos(to - 1) : last.head;
203
- var anchor = last.anchor.line == to ? Pos(to - 1) : last.anchor;
204
- cm.setSelections(sels.slice(0, sels.length - 1).concat([{head: head, anchor: anchor}]));
205
- } else {
207
+ else
206
208
  cm.replaceRange(line + "\n", Pos(to, 0), null, "+swapLine");
207
- }
208
209
  }
210
+ cm.setSelections(newSels);
209
211
  cm.scrollIntoView();
210
212
  });
211
213
  };
@@ -214,6 +216,7 @@
214
216
  var ranges = cm.listSelections(), linesToMove = [], at = cm.lastLine() + 1;
215
217
  for (var i = ranges.length - 1; i >= 0; i--) {
216
218
  var range = ranges[i], from = range.to().line + 1, to = range.from().line;
219
+ if (range.to().ch == 0 && !range.empty()) from--;
217
220
  if (from < at) linesToMove.push(from, to);
218
221
  else if (linesToMove.length) linesToMove[linesToMove.length - 1] = to;
219
222
  at = to;
@@ -1,3 +1,6 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: http://codemirror.net/LICENSE
3
+
1
4
  /**
2
5
  * Supported keybindings:
3
6
  *
@@ -271,6 +274,7 @@
271
274
  actionArgs: { insertAt: 'charAfter' }},
272
275
  { keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true,
273
276
  actionArgs: { insertAt: 'eol' }},
277
+ { keys: ['A'], type: 'action', action: 'enterInsertMode', isEdit: true, actionArgs: { insertAt: 'endOfSelectedArea' }, context: 'visual' },
274
278
  { keys: ['i'], type: 'action', action: 'enterInsertMode', isEdit: true,
275
279
  actionArgs: { insertAt: 'inplace' }},
276
280
  { keys: ['I'], type: 'action', action: 'enterInsertMode', isEdit: true,
@@ -297,6 +301,8 @@
297
301
  { keys: ['R'], type: 'action', action: 'enterInsertMode', isEdit: true,
298
302
  actionArgs: { replace: true }},
299
303
  { keys: ['u'], type: 'action', action: 'undo' },
304
+ { keys: ['u'], type: 'action', action: 'changeCase', actionArgs: {toLower: true}, context: 'visual', isEdit: true },
305
+ { keys: ['U'],type: 'action', action: 'changeCase', actionArgs: {toLower: false}, context: 'visual', isEdit: true },
300
306
  { keys: ['<C-r>'], type: 'action', action: 'redo' },
301
307
  { keys: ['m', 'character'], type: 'action', action: 'setMark' },
302
308
  { keys: ['"', 'character'], type: 'action', action: 'setRegister' },
@@ -682,13 +688,13 @@
682
688
  if (macroModeState.isRecording) {
683
689
  if (key == 'q') {
684
690
  macroModeState.exitMacroRecordMode();
685
- vim.inputState = new InputState();
691
+ clearInputState(cm);
686
692
  return;
687
693
  }
688
694
  }
689
695
  if (key == '<Esc>') {
690
696
  // Clear input state and get back to normal mode.
691
- vim.inputState = new InputState();
697
+ clearInputState(cm);
692
698
  if (vim.visualMode) {
693
699
  exitVisualMode(cm);
694
700
  }
@@ -766,6 +772,11 @@
766
772
  return repeat;
767
773
  };
768
774
 
775
+ function clearInputState(cm, reason) {
776
+ cm.state.vim.inputState = new InputState();
777
+ CodeMirror.signal(cm, 'vim-command-done', reason);
778
+ }
779
+
769
780
  /*
770
781
  * Register stores information about copy and paste registers. Besides
771
782
  * text, a register must store whether it is linewise (i.e., when it is
@@ -1018,7 +1029,7 @@
1018
1029
  return;
1019
1030
  } else {
1020
1031
  // 2 different operators in a row doesn't make sense.
1021
- vim.inputState = new InputState();
1032
+ clearInputState(cm);
1022
1033
  }
1023
1034
  }
1024
1035
  inputState.operator = command.operator;
@@ -1063,7 +1074,7 @@
1063
1074
  actionArgs.repeat = repeat || 1;
1064
1075
  actionArgs.repeatIsExplicit = repeatIsExplicit;
1065
1076
  actionArgs.registerName = inputState.registerName;
1066
- vim.inputState = new InputState();
1077
+ clearInputState(cm);
1067
1078
  vim.lastMotion = null;
1068
1079
  if (command.isEdit) {
1069
1080
  this.recordLastEdit(vim, inputState, command);
@@ -1244,7 +1255,7 @@
1244
1255
  inputState.selectedCharacter;
1245
1256
  }
1246
1257
  motionArgs.repeat = repeat;
1247
- vim.inputState = new InputState();
1258
+ clearInputState(cm);
1248
1259
  if (motion) {
1249
1260
  var motionResult = motions[motion](cm, motionArgs, vim);
1250
1261
  vim.lastMotion = motions[motion];
@@ -1550,10 +1561,7 @@
1550
1561
  // will move the cursor to where it should be in the end.
1551
1562
  var curStart = cm.getCursor();
1552
1563
  var repeat = motionArgs.repeat;
1553
- cm.moveV((motionArgs.forward ? repeat : -repeat), 'page');
1554
- var curEnd = cm.getCursor();
1555
- cm.setCursor(curStart);
1556
- return curEnd;
1564
+ return cm.findPosV(curStart, (motionArgs.forward ? repeat : -repeat), 'page');
1557
1565
  },
1558
1566
  moveByParagraph: function(cm, motionArgs) {
1559
1567
  var line = cm.getCursor().line;
@@ -1645,15 +1653,14 @@
1645
1653
  do {
1646
1654
  symbol = lineText.charAt(ch++);
1647
1655
  if (symbol && isMatchableSymbol(symbol)) {
1648
- var ignoreStyle = ["string", "comment"];
1649
1656
  var style = cm.getTokenTypeAt(Pos(line, ch));
1650
- if (ignoreStyle.indexOf(style) < 0) {
1657
+ if (style !== "string" && style !== "comment") {
1651
1658
  break;
1652
1659
  }
1653
1660
  }
1654
1661
  } while (symbol);
1655
1662
  if (symbol) {
1656
- var matched = cm.findMatchingBracket(Pos(line, ch-1));
1663
+ var matched = cm.findMatchingBracket(Pos(line, ch));
1657
1664
  return matched.to;
1658
1665
  } else {
1659
1666
  return cursor;
@@ -1916,6 +1923,12 @@
1916
1923
  cm.setCursor(offsetCursor(cm.getCursor(), 0, 1));
1917
1924
  } else if (insertAt == 'firstNonBlank') {
1918
1925
  cm.setCursor(motions.moveToFirstNonWhiteSpaceCharacter(cm));
1926
+ } else if (insertAt == 'endOfSelectedArea') {
1927
+ var selectionEnd = cm.getCursor('head');
1928
+ var selectionStart = cm.getCursor('anchor');
1929
+ selectionEnd = cursorIsBefore(selectionStart, selectionEnd) ? Pos(selectionEnd.line, selectionEnd.ch+1) : (selectionEnd.line < selectionStart.line ? Pos(selectionStart.line, 0) : selectionEnd);
1930
+ cm.setCursor(selectionEnd);
1931
+ exitVisualMode(cm);
1919
1932
  }
1920
1933
  cm.setOption('keyMap', 'vim-insert');
1921
1934
  cm.setOption('disableInput', false);
@@ -2053,7 +2066,7 @@
2053
2066
  }
2054
2067
  this.enterInsertMode(cm, { repeat: actionArgs.repeat }, vim);
2055
2068
  },
2056
- paste: function(cm, actionArgs) {
2069
+ paste: function(cm, actionArgs, vim) {
2057
2070
  var cur = copyCursor(cm.getCursor());
2058
2071
  var register = vimGlobalState.registerController.getRegister(
2059
2072
  actionArgs.registerName);
@@ -2094,7 +2107,9 @@
2094
2107
  }
2095
2108
  var linewise = register.linewise;
2096
2109
  if (linewise) {
2097
- if (actionArgs.after) {
2110
+ if(vim.visualMode) {
2111
+ text = vim.visualLine ? text.slice(0, -1) : '\n' + text.slice(0, text.length - 1) + '\n';
2112
+ } else if (actionArgs.after) {
2098
2113
  // Move the newline at the end to the start instead, and paste just
2099
2114
  // before the newline character of the line we are on right now.
2100
2115
  text = '\n' + text.slice(0, text.length - 1);
@@ -2105,24 +2120,35 @@
2105
2120
  } else {
2106
2121
  cur.ch += actionArgs.after ? 1 : 0;
2107
2122
  }
2108
- cm.replaceRange(text, cur);
2109
- // Now fine tune the cursor to where we want it.
2110
2123
  var curPosFinal;
2111
2124
  var idx;
2112
- if (linewise && actionArgs.after) {
2113
- curPosFinal = Pos(
2114
- cur.line + 1,
2115
- findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));
2116
- } else if (linewise && !actionArgs.after) {
2117
- curPosFinal = Pos(
2118
- cur.line,
2119
- findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));
2120
- } else if (!linewise && actionArgs.after) {
2121
- idx = cm.indexFromPos(cur);
2122
- curPosFinal = cm.posFromIndex(idx + text.length - 1);
2125
+ if (vim.visualMode) {
2126
+ var selectedArea = getSelectedAreaRange(cm, vim);
2127
+ var selectionStart = selectedArea[0];
2128
+ var selectionEnd = selectedArea[1];
2129
+ // push the previously selected text to unnamed register
2130
+ vimGlobalState.registerController.unnamedRegister.setText(cm.getRange(selectionStart, selectionEnd));
2131
+ cm.replaceRange(text, selectionStart, selectionEnd);
2132
+ curPosFinal = cm.posFromIndex(cm.indexFromPos(selectionStart) + text.length - 1);
2133
+ if(linewise)curPosFinal.ch=0;
2123
2134
  } else {
2124
- idx = cm.indexFromPos(cur);
2125
- curPosFinal = cm.posFromIndex(idx + text.length);
2135
+ cm.replaceRange(text, cur);
2136
+ // Now fine tune the cursor to where we want it.
2137
+ if (linewise && actionArgs.after) {
2138
+ curPosFinal = Pos(
2139
+ cur.line + 1,
2140
+ findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line + 1)));
2141
+ } else if (linewise && !actionArgs.after) {
2142
+ curPosFinal = Pos(
2143
+ cur.line,
2144
+ findFirstNonWhiteSpaceCharacter(cm.getLine(cur.line)));
2145
+ } else if (!linewise && actionArgs.after) {
2146
+ idx = cm.indexFromPos(cur);
2147
+ curPosFinal = cm.posFromIndex(idx + text.length - 1);
2148
+ } else {
2149
+ idx = cm.indexFromPos(cur);
2150
+ curPosFinal = cm.posFromIndex(idx + text.length);
2151
+ }
2126
2152
  }
2127
2153
  cm.setCursor(curPosFinal);
2128
2154
  },
@@ -2216,6 +2242,15 @@
2216
2242
  repeat = vim.lastEditInputState.repeatOverride || repeat;
2217
2243
  }
2218
2244
  repeatLastEdit(cm, vim, repeat, false /** repeatForInsert */);
2245
+ },
2246
+ changeCase: function(cm, actionArgs, vim) {
2247
+ var selectedAreaRange = getSelectedAreaRange(cm, vim);
2248
+ var selectionStart = selectedAreaRange[0];
2249
+ var selectionEnd = selectedAreaRange[1];
2250
+ var toLower = actionArgs.toLower;
2251
+ var text = cm.getRange(selectionStart, selectionEnd);
2252
+ cm.replaceRange(toLower ? text.toLowerCase() : text.toUpperCase(), selectionStart, selectionEnd);
2253
+ cm.setCursor(selectionStart);
2219
2254
  }
2220
2255
  };
2221
2256
 
@@ -2298,6 +2333,29 @@
2298
2333
  function escapeRegex(s) {
2299
2334
  return s.replace(/([.?*+$\[\]\/\\(){}|\-])/g, '\\$1');
2300
2335
  }
2336
+ function getSelectedAreaRange(cm, vim) {
2337
+ var selectionStart = cm.getCursor('anchor');
2338
+ var selectionEnd = cm.getCursor('head');
2339
+ var lastSelection = vim.lastSelection;
2340
+ if (!vim.visualMode) {
2341
+ var line = lastSelection.curEnd.line - lastSelection.curStart.line;
2342
+ var ch = line ? lastSelection.curEnd.ch : lastSelection.curEnd.ch - lastSelection.curStart.ch;
2343
+ selectionEnd = {line: selectionEnd.line + line, ch: line ? selectionEnd.ch : ch + selectionEnd.ch};
2344
+ if (lastSelection.visualLine) {
2345
+ return [{line: selectionStart.line, ch: 0}, {line: selectionEnd.line, ch: lineLength(cm, selectionEnd.line)}];
2346
+ }
2347
+ } else {
2348
+ if (cursorIsBefore(selectionEnd, selectionStart)) {
2349
+ var tmp = selectionStart;
2350
+ selectionStart = selectionEnd;
2351
+ selectionEnd = tmp;
2352
+ } else {
2353
+ selectionEnd = cm.clipPos(Pos(selectionEnd.line, selectionEnd.ch+1));
2354
+ }
2355
+ exitVisualMode(cm);
2356
+ }
2357
+ return [selectionStart, selectionEnd];
2358
+ }
2301
2359
 
2302
2360
  function exitVisualMode(cm) {
2303
2361
  cm.off('mousedown', exitVisualMode);
@@ -2908,15 +2966,15 @@
2908
2966
  // Translates a search string from ex (vim) syntax into javascript form.
2909
2967
  function translateRegex(str) {
2910
2968
  // When these match, add a '\' if unescaped or remove one if escaped.
2911
- var specials = ['|', '(', ')', '{'];
2969
+ var specials = '|(){';
2912
2970
  // Remove, but never add, a '\' for these.
2913
- var unescape = ['}'];
2971
+ var unescape = '}';
2914
2972
  var escapeNextChar = false;
2915
2973
  var out = [];
2916
2974
  for (var i = -1; i < str.length; i++) {
2917
2975
  var c = str.charAt(i) || '';
2918
2976
  var n = str.charAt(i+1) || '';
2919
- var specialComesNext = (specials.indexOf(n) != -1);
2977
+ var specialComesNext = (n && specials.indexOf(n) != -1);
2920
2978
  if (escapeNextChar) {
2921
2979
  if (c !== '\\' || !specialComesNext) {
2922
2980
  out.push(c);
@@ -2926,7 +2984,7 @@
2926
2984
  if (c === '\\') {
2927
2985
  escapeNextChar = true;
2928
2986
  // Treat the unescape list as special for removing, but not adding '\'.
2929
- if (unescape.indexOf(n) != -1) {
2987
+ if (n && unescape.indexOf(n) != -1) {
2930
2988
  specialComesNext = true;
2931
2989
  }
2932
2990
  // Not passing this test means removing a '\'.
@@ -3901,6 +3959,7 @@
3901
3959
  // Closure to bind CodeMirror, key, modifier.
3902
3960
  function keyMapper(vimKey) {
3903
3961
  return function(cm) {
3962
+ CodeMirror.signal(cm, 'vim-keypress', vimKey);
3904
3963
  CodeMirror.Vim.handleKey(cm, vimKey);
3905
3964
  };
3906
3965
  }