ace-rails-ap 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -1
  3. data/lib/ace/rails/version.rb +1 -1
  4. data/vendor/assets/javascripts/ace/ace.js +6911 -5290
  5. data/vendor/assets/javascripts/ace/ext-chromevox.js +537 -0
  6. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +301 -0
  7. data/vendor/assets/javascripts/ace/ext-emmet.js +1109 -0
  8. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +207 -0
  9. data/vendor/assets/javascripts/ace/ext-language_tools.js +1665 -0
  10. data/vendor/assets/javascripts/ace/ext-modelist.js +168 -0
  11. data/vendor/assets/javascripts/ace/ext-old_ie.js +500 -0
  12. data/vendor/assets/javascripts/ace/ext-options.js +252 -0
  13. data/vendor/assets/javascripts/ace/ext-searchbox.js +421 -0
  14. data/vendor/assets/javascripts/ace/ext-settings_menu.js +632 -0
  15. data/vendor/assets/javascripts/ace/ext-spellcheck.js +68 -0
  16. data/vendor/assets/javascripts/ace/ext-split.js +271 -0
  17. data/vendor/assets/javascripts/ace/ext-static_highlight.js +178 -0
  18. data/vendor/assets/javascripts/ace/ext-statusbar.js +47 -0
  19. data/vendor/assets/javascripts/ace/ext-textarea.js +478 -0
  20. data/vendor/assets/javascripts/ace/ext-themelist.js +86 -0
  21. data/vendor/assets/javascripts/ace/ext-whitespace.js +206 -0
  22. data/vendor/assets/javascripts/ace/keybinding-emacs.js +822 -131
  23. data/vendor/assets/javascripts/ace/keybinding-vim.js +382 -258
  24. data/vendor/assets/javascripts/ace/mode-abap.js +261 -0
  25. data/vendor/assets/javascripts/ace/mode-actionscript.js +257 -0
  26. data/vendor/assets/javascripts/ace/mode-ada.js +118 -0
  27. data/vendor/assets/javascripts/ace/mode-asciidoc.js +373 -0
  28. data/vendor/assets/javascripts/ace/mode-assembly_x86.js +217 -0
  29. data/vendor/assets/javascripts/ace/mode-autohotkey.js +225 -0
  30. data/vendor/assets/javascripts/ace/mode-batchfile.js +213 -0
  31. data/vendor/assets/javascripts/ace/mode-c9search.js +144 -124
  32. data/vendor/assets/javascripts/ace/mode-c_cpp.js +296 -254
  33. data/vendor/assets/javascripts/ace/mode-clojure.js +113 -177
  34. data/vendor/assets/javascripts/ace/mode-cobol.js +125 -0
  35. data/vendor/assets/javascripts/ace/mode-coffee.js +152 -235
  36. data/vendor/assets/javascripts/ace/mode-coldfusion.js +823 -835
  37. data/vendor/assets/javascripts/ace/mode-csharp.js +325 -187
  38. data/vendor/assets/javascripts/ace/mode-css.js +583 -297
  39. data/vendor/assets/javascripts/ace/mode-curly.js +2423 -0
  40. data/vendor/assets/javascripts/ace/mode-d.js +492 -0
  41. data/vendor/assets/javascripts/ace/mode-dart.js +993 -0
  42. data/vendor/assets/javascripts/ace/mode-diff.js +124 -204
  43. data/vendor/assets/javascripts/ace/mode-django.js +2448 -0
  44. data/vendor/assets/javascripts/ace/mode-dot.js +361 -0
  45. data/vendor/assets/javascripts/ace/mode-ejs.js +2817 -0
  46. data/vendor/assets/javascripts/ace/mode-erlang.js +987 -0
  47. data/vendor/assets/javascripts/ace/mode-forth.js +280 -0
  48. data/vendor/assets/javascripts/ace/mode-ftl.js +1061 -0
  49. data/vendor/assets/javascripts/ace/mode-glsl.js +313 -275
  50. data/vendor/assets/javascripts/ace/mode-golang.js +268 -275
  51. data/vendor/assets/javascripts/ace/mode-groovy.js +347 -492
  52. data/vendor/assets/javascripts/ace/mode-haml.js +498 -0
  53. data/vendor/assets/javascripts/ace/mode-handlebars.js +2433 -0
  54. data/vendor/assets/javascripts/ace/mode-haskell.js +362 -0
  55. data/vendor/assets/javascripts/ace/mode-haxe.js +226 -202
  56. data/vendor/assets/javascripts/ace/mode-html.js +1099 -802
  57. data/vendor/assets/javascripts/ace/mode-html_completions.js +309 -0
  58. data/vendor/assets/javascripts/ace/mode-html_ruby.js +2822 -0
  59. data/vendor/assets/javascripts/ace/mode-ini.js +185 -0
  60. data/vendor/assets/javascripts/ace/mode-jack.js +653 -0
  61. data/vendor/assets/javascripts/ace/mode-jade.js +2081 -0
  62. data/vendor/assets/javascripts/ace/mode-java.js +339 -488
  63. data/vendor/assets/javascripts/ace/mode-javascript.js +342 -478
  64. data/vendor/assets/javascripts/ace/mode-json.js +215 -178
  65. data/vendor/assets/javascripts/ace/mode-jsoniq.js +2761 -0
  66. data/vendor/assets/javascripts/ace/mode-jsp.js +1553 -0
  67. data/vendor/assets/javascripts/ace/mode-jsx.js +325 -289
  68. data/vendor/assets/javascripts/ace/mode-julia.js +286 -0
  69. data/vendor/assets/javascripts/ace/mode-latex.js +141 -46
  70. data/vendor/assets/javascripts/ace/mode-less.js +493 -151
  71. data/vendor/assets/javascripts/ace/mode-liquid.js +594 -656
  72. data/vendor/assets/javascripts/ace/mode-lisp.js +137 -0
  73. data/vendor/assets/javascripts/ace/mode-livescript.js +288 -0
  74. data/vendor/assets/javascripts/ace/mode-logiql.js +669 -0
  75. data/vendor/assets/javascripts/ace/mode-lsl.js +890 -0
  76. data/vendor/assets/javascripts/ace/mode-lua.js +274 -368
  77. data/vendor/assets/javascripts/ace/mode-luapage.js +1331 -1107
  78. data/vendor/assets/javascripts/ace/mode-lucene.js +64 -0
  79. data/vendor/assets/javascripts/ace/mode-makefile.js +332 -0
  80. data/vendor/assets/javascripts/ace/mode-markdown.js +1303 -948
  81. data/vendor/assets/javascripts/ace/mode-matlab.js +230 -0
  82. data/vendor/assets/javascripts/ace/mode-mushcode.js +705 -0
  83. data/vendor/assets/javascripts/ace/mode-mushcode_high_rules.js +569 -0
  84. data/vendor/assets/javascripts/ace/mode-mysql.js +185 -0
  85. data/vendor/assets/javascripts/ace/mode-nix.js +935 -0
  86. data/vendor/assets/javascripts/ace/mode-objectivec.js +699 -0
  87. data/vendor/assets/javascripts/ace/mode-ocaml.js +44 -63
  88. data/vendor/assets/javascripts/ace/mode-pascal.js +233 -0
  89. data/vendor/assets/javascripts/ace/mode-perl.js +116 -189
  90. data/vendor/assets/javascripts/ace/mode-pgsql.js +886 -500
  91. data/vendor/assets/javascripts/ace/mode-php.js +1158 -380
  92. data/vendor/assets/javascripts/ace/mode-plain_text.js +56 -0
  93. data/vendor/assets/javascripts/ace/mode-powershell.js +222 -167
  94. data/vendor/assets/javascripts/ace/mode-prolog.js +354 -0
  95. data/vendor/assets/javascripts/ace/mode-properties.js +100 -0
  96. data/vendor/assets/javascripts/ace/mode-protobuf.js +885 -0
  97. data/vendor/assets/javascripts/ace/mode-python.js +99 -201
  98. data/vendor/assets/javascripts/ace/mode-r.js +337 -0
  99. data/vendor/assets/javascripts/ace/mode-rdoc.js +210 -0
  100. data/vendor/assets/javascripts/ace/mode-rhtml.js +2663 -0
  101. data/vendor/assets/javascripts/ace/mode-ruby.js +262 -136
  102. data/vendor/assets/javascripts/ace/mode-rust.js +245 -0
  103. data/vendor/assets/javascripts/ace/mode-sass.js +443 -0
  104. data/vendor/assets/javascripts/ace/mode-scad.js +225 -240
  105. data/vendor/assets/javascripts/ace/mode-scala.js +340 -494
  106. data/vendor/assets/javascripts/ace/mode-scheme.js +143 -0
  107. data/vendor/assets/javascripts/ace/mode-scss.js +499 -157
  108. data/vendor/assets/javascripts/ace/mode-sh.js +180 -110
  109. data/vendor/assets/javascripts/ace/mode-sjs.js +1154 -0
  110. data/vendor/assets/javascripts/ace/mode-snippets.js +198 -0
  111. data/vendor/assets/javascripts/ace/mode-soy_template.js +2707 -0
  112. data/vendor/assets/javascripts/ace/mode-space.js +160 -0
  113. data/vendor/assets/javascripts/ace/mode-sql.js +48 -69
  114. data/vendor/assets/javascripts/ace/mode-stylus.js +447 -0
  115. data/vendor/assets/javascripts/ace/mode-svg.js +552 -605
  116. data/vendor/assets/javascripts/ace/mode-tcl.js +139 -98
  117. data/vendor/assets/javascripts/ace/mode-tex.js +187 -0
  118. data/vendor/assets/javascripts/ace/mode-textile.js +29 -40
  119. data/vendor/assets/javascripts/ace/mode-tmsnippet.js +200 -0
  120. data/vendor/assets/javascripts/ace/mode-toml.js +177 -0
  121. data/vendor/assets/javascripts/ace/mode-twig.js +2228 -0
  122. data/vendor/assets/javascripts/ace/mode-typescript.js +1018 -0
  123. data/vendor/assets/javascripts/ace/mode-vbscript.js +250 -0
  124. data/vendor/assets/javascripts/ace/mode-velocity.js +1621 -0
  125. data/vendor/assets/javascripts/ace/mode-verilog.js +127 -0
  126. data/vendor/assets/javascripts/ace/mode-vhdl.js +139 -0
  127. data/vendor/assets/javascripts/ace/mode-xml.js +350 -242
  128. data/vendor/assets/javascripts/ace/mode-xquery.js +2490 -300
  129. data/vendor/assets/javascripts/ace/mode-yaml.js +146 -45
  130. data/vendor/assets/javascripts/ace/theme-ambiance.js +202 -0
  131. data/vendor/assets/javascripts/ace/theme-chaos.js +179 -0
  132. data/vendor/assets/javascripts/ace/theme-chrome.js +97 -153
  133. data/vendor/assets/javascripts/ace/theme-clouds.js +78 -119
  134. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +79 -120
  135. data/vendor/assets/javascripts/ace/theme-cobalt.js +89 -140
  136. data/vendor/assets/javascripts/ace/theme-crimson_editor.js +93 -145
  137. data/vendor/assets/javascripts/ace/theme-dawn.js +84 -143
  138. data/vendor/assets/javascripts/ace/theme-dreamweaver.js +99 -162
  139. data/vendor/assets/javascripts/ace/theme-eclipse.js +78 -111
  140. data/vendor/assets/javascripts/ace/theme-github.js +70 -121
  141. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +75 -134
  142. data/vendor/assets/javascripts/ace/theme-kr.js +135 -0
  143. data/vendor/assets/javascripts/ace/theme-merbivore.js +80 -143
  144. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +81 -149
  145. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +87 -146
  146. data/vendor/assets/javascripts/ace/theme-monokai.js +88 -146
  147. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +82 -142
  148. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +83 -144
  149. data/vendor/assets/javascripts/ace/theme-solarized_light.js +76 -133
  150. data/vendor/assets/javascripts/ace/theme-terminal.js +145 -0
  151. data/vendor/assets/javascripts/ace/theme-textmate.js +101 -158
  152. data/vendor/assets/javascripts/ace/theme-tomorrow.js +89 -163
  153. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +89 -163
  154. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +89 -165
  155. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +101 -162
  156. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +90 -160
  157. data/vendor/assets/javascripts/ace/theme-twilight.js +87 -158
  158. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +75 -140
  159. data/vendor/assets/javascripts/ace/theme-xcode.js +120 -0
  160. data/vendor/assets/javascripts/ace/worker-coffee.js +3049 -2665
  161. data/vendor/assets/javascripts/ace/worker-css.js +1779 -4376
  162. data/vendor/assets/javascripts/ace/worker-javascript.js +8701 -9008
  163. data/vendor/assets/javascripts/ace/worker-json.js +709 -1340
  164. data/vendor/assets/javascripts/ace/worker-lua.js +3525 -0
  165. data/vendor/assets/javascripts/ace/worker-php.js +6893 -0
  166. data/vendor/assets/javascripts/ace/worker-xquery.js +19924 -64507
  167. metadata +100 -17
@@ -0,0 +1,143 @@
1
+ /* ***** BEGIN LICENSE BLOCK *****
2
+ * Distributed under the BSD license:
3
+ *
4
+ * Copyright (c) 2012, Ajax.org B.V.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of Ajax.org B.V. nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+ *
29
+ *
30
+ * Contributor(s):
31
+ *
32
+ * NalaGinrut@gmail.com
33
+ *
34
+ * ***** END LICENSE BLOCK ***** */
35
+
36
+ define('ace/mode/scheme', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scheme_highlight_rules'], function(require, exports, module) {
37
+
38
+
39
+ var oop = require("../lib/oop");
40
+ var TextMode = require("./text").Mode;
41
+ var Tokenizer = require("../tokenizer").Tokenizer;
42
+ var SchemeHighlightRules = require("./scheme_highlight_rules").SchemeHighlightRules;
43
+
44
+ var Mode = function() {
45
+ this.HighlightRules = SchemeHighlightRules;
46
+ };
47
+ oop.inherits(Mode, TextMode);
48
+
49
+ (function() {
50
+
51
+ this.lineCommentStart = ";";
52
+
53
+ this.$id = "ace/mode/scheme";
54
+ }).call(Mode.prototype);
55
+
56
+ exports.Mode = Mode;
57
+ });
58
+
59
+ define('ace/mode/scheme_highlight_rules', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text_highlight_rules'], function(require, exports, module) {
60
+
61
+
62
+ var oop = require("../lib/oop");
63
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
64
+
65
+ var SchemeHighlightRules = function() {
66
+ var keywordControl = "case|do|let|loop|if|else|when";
67
+ var keywordOperator = "eq?|eqv?|equal?|and|or|not|null?";
68
+ var constantLanguage = "#t|#f";
69
+ var supportFunctions = "cons|car|cdr|cond|lambda|lambda*|syntax-rules|format|set!|quote|eval|append|list|list?|member?|load";
70
+
71
+ var keywordMapper = this.createKeywordMapper({
72
+ "keyword.control": keywordControl,
73
+ "keyword.operator": keywordOperator,
74
+ "constant.language": constantLanguage,
75
+ "support.function": supportFunctions
76
+ }, "identifier", true);
77
+
78
+ this.$rules =
79
+ {
80
+ "start": [
81
+ {
82
+ token : "comment",
83
+ regex : ";.*$"
84
+ },
85
+ {
86
+ "token": ["storage.type.function-type.scheme", "text", "entity.name.function.scheme"],
87
+ "regex": "(?:\\b(?:(define|define-syntax|define-macro))\\b)(\\s+)((?:\\w|\\-|\\!|\\?)*)"
88
+ },
89
+ {
90
+ "token": "punctuation.definition.constant.character.scheme",
91
+ "regex": "#:\\S+"
92
+ },
93
+ {
94
+ "token": ["punctuation.definition.variable.scheme", "variable.other.global.scheme", "punctuation.definition.variable.scheme"],
95
+ "regex": "(\\*)(\\S*)(\\*)"
96
+ },
97
+ {
98
+ "token" : "constant.numeric", // hex
99
+ "regex" : "#[xXoObB][0-9a-fA-F]+"
100
+ },
101
+ {
102
+ "token" : "constant.numeric", // float
103
+ "regex" : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?"
104
+ },
105
+ {
106
+ "token" : keywordMapper,
107
+ "regex" : "[a-zA-Z_#][a-zA-Z0-9_\\-\\?\\!\\*]*"
108
+ },
109
+ {
110
+ "token" : "string",
111
+ "regex" : '"(?=.)',
112
+ "next" : "qqstring"
113
+ }
114
+ ],
115
+ "qqstring": [
116
+ {
117
+ "token": "constant.character.escape.scheme",
118
+ "regex": "\\\\."
119
+ },
120
+ {
121
+ "token" : "string",
122
+ "regex" : '[^"\\\\]+',
123
+ "merge" : true
124
+ }, {
125
+ "token" : "string",
126
+ "regex" : "\\\\$",
127
+ "next" : "qqstring",
128
+ "merge" : true
129
+ }, {
130
+ "token" : "string",
131
+ "regex" : '"|$',
132
+ "next" : "start",
133
+ "merge" : true
134
+ }
135
+ ]
136
+ }
137
+
138
+ };
139
+
140
+ oop.inherits(SchemeHighlightRules, TextHighlightRules);
141
+
142
+ exports.SchemeHighlightRules = SchemeHighlightRules;
143
+ });
@@ -1,41 +1,34 @@
1
1
  /* ***** BEGIN LICENSE BLOCK *****
2
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
2
+ * Distributed under the BSD license:
3
3
  *
4
- * The contents of this file are subject to the Mozilla Public License Version
5
- * 1.1 (the "License"); you may not use this file except in compliance with
6
- * the License. You may obtain a copy of the License at
7
- * http://www.mozilla.org/MPL/
8
- *
9
- * Software distributed under the License is distributed on an "AS IS" basis,
10
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
- * for the specific language governing rights and limitations under the
12
- * License.
13
- *
14
- * The Original Code is Ajax.org Code Editor (ACE).
15
- *
16
- * The Initial Developer of the Original Code is
17
- * Ajax.org B.V.
18
- * Portions created by the Initial Developer are Copyright (C) 2010
19
- * the Initial Developer. All Rights Reserved.
20
- *
21
- * Contributor(s):
22
- * Fabian Jakobs <fabian AT ajax DOT org>
23
- *
24
- * Alternatively, the contents of this file may be used under the terms of
25
- * either the GNU General Public License Version 2 or later (the "GPL"), or
26
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27
- * in which case the provisions of the GPL or the LGPL are applicable instead
28
- * of those above. If you wish to allow use of your version of this file only
29
- * under the terms of either the GPL or the LGPL, and not to allow others to
30
- * use your version of this file under the terms of the MPL, indicate your
31
- * decision by deleting the provisions above and replace them with the notice
32
- * and other provisions required by the GPL or the LGPL. If you do not delete
33
- * the provisions above, a recipient may use your version of this file under
34
- * the terms of any one of the MPL, the GPL or the LGPL.
4
+ * Copyright (c) 2010, Ajax.org B.V.
5
+ * All rights reserved.
6
+ *
7
+ * Redistribution and use in source and binary forms, with or without
8
+ * modification, are permitted provided that the following conditions are met:
9
+ * * Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ * * Redistributions in binary form must reproduce the above copyright
12
+ * notice, this list of conditions and the following disclaimer in the
13
+ * documentation and/or other materials provided with the distribution.
14
+ * * Neither the name of Ajax.org B.V. nor the
15
+ * names of its contributors may be used to endorse or promote products
16
+ * derived from this software without specific prior written permission.
17
+ *
18
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
22
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
28
  *
36
29
  * ***** END LICENSE BLOCK ***** */
37
30
 
38
- define('ace/mode/scss', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scss_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/folding/cstyle'], function(require, exports, module) {
31
+ define('ace/mode/scss', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/text', 'ace/tokenizer', 'ace/mode/scss_highlight_rules', 'ace/mode/matching_brace_outdent', 'ace/mode/behaviour/css', 'ace/mode/folding/cstyle'], function(require, exports, module) {
39
32
 
40
33
 
41
34
  var oop = require("../lib/oop");
@@ -43,22 +36,25 @@ var TextMode = require("./text").Mode;
43
36
  var Tokenizer = require("../tokenizer").Tokenizer;
44
37
  var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules;
45
38
  var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
39
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
46
40
  var CStyleFoldMode = require("./folding/cstyle").FoldMode;
47
41
 
48
42
  var Mode = function() {
49
- this.$tokenizer = new Tokenizer(new ScssHighlightRules().getRules(), "i");
43
+ this.HighlightRules = ScssHighlightRules;
50
44
  this.$outdent = new MatchingBraceOutdent();
45
+ this.$behaviour = new CssBehaviour();
51
46
  this.foldingRules = new CStyleFoldMode();
52
47
  };
53
48
  oop.inherits(Mode, TextMode);
54
49
 
55
50
  (function() {
56
-
51
+
52
+ this.lineCommentStart = "//";
53
+ this.blockComment = {start: "/*", end: "*/"};
54
+
57
55
  this.getNextLineIndent = function(state, line, tab) {
58
56
  var indent = this.$getIndent(line);
59
-
60
- // ignore braces in comments
61
- var tokens = this.$tokenizer.getLineTokens(line, state).tokens;
57
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
62
58
  if (tokens.length && tokens[tokens.length-1].type == "comment") {
63
59
  return indent;
64
60
  }
@@ -79,6 +75,7 @@ oop.inherits(Mode, TextMode);
79
75
  this.$outdent.autoOutdent(doc, row);
80
76
  };
81
77
 
78
+ this.$id = "ace/mode/scss";
82
79
  }).call(Mode.prototype);
83
80
 
84
81
  exports.Mode = Mode;
@@ -123,8 +120,8 @@ var ScssHighlightRules = function() {
123
120
  "border-color|border-left-color|border-left-style|border-left-width|" +
124
121
  "border-left|border-right-color|border-right-style|border-right-width|" +
125
122
  "border-right|border-spacing|border-style|border-top-color|" +
126
- "border-top-style|border-top-width|border-top|border-width|border|" +
127
- "bottom|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
123
+ "border-top-style|border-top-width|border-top|border-width|border|bottom|" +
124
+ "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" +
128
125
  "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" +
129
126
  "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" +
130
127
  "font-stretch|font-style|font-variant|font-weight|font|height|left|" +
@@ -141,20 +138,13 @@ var ScssHighlightRules = function() {
141
138
  "text-shadow|text-transform|top|unicode-bidi|vertical-align|" +
142
139
  "visibility|voice-family|volume|white-space|widows|width|word-spacing|" +
143
140
  "z-index").split("|");
144
-
145
- //The return array
146
141
  var ret = [];
147
-
148
- //All prefixProperties will get the browserPrefix in
149
- //the begning by join the prefixProperties array with the value of browserPrefix
150
142
  for (var i=0, ln=browserPrefix.length; i<ln; i++) {
151
143
  Array.prototype.push.apply(
152
144
  ret,
153
145
  (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|"))
154
146
  );
155
147
  }
156
-
157
- //Add also prefixProperties and properties without any browser prefix
158
148
  Array.prototype.push.apply(ret, prefixProperties);
159
149
  Array.prototype.push.apply(ret, properties);
160
150
 
@@ -217,14 +207,8 @@ var ScssHighlightRules = function() {
217
207
  "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|")
218
208
  );
219
209
 
220
- // regexp must not have capturing parentheses. Use (?:) instead.
221
- // regexps are ordered -> the first match is used
222
-
223
210
  var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";
224
211
 
225
- // regexp must not have capturing parentheses. Use (?:) instead.
226
- // regexps are ordered -> the first match is used
227
-
228
212
  this.$rules = {
229
213
  "start" : [
230
214
  {
@@ -233,7 +217,6 @@ var ScssHighlightRules = function() {
233
217
  },
234
218
  {
235
219
  token : "comment", // multi line comment
236
- merge : true,
237
220
  regex : "\\/\\*",
238
221
  next : "comment"
239
222
  }, {
@@ -241,7 +224,6 @@ var ScssHighlightRules = function() {
241
224
  regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
242
225
  }, {
243
226
  token : "string", // multi line string start
244
- merge : true,
245
227
  regex : '["].*\\\\$',
246
228
  next : "qqstring"
247
229
  }, {
@@ -249,7 +231,6 @@ var ScssHighlightRules = function() {
249
231
  regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"
250
232
  }, {
251
233
  token : "string", // multi line string start
252
- merge : true,
253
234
  regex : "['].*\\\\$",
254
235
  next : "qstring"
255
236
  }, {
@@ -264,6 +245,9 @@ var ScssHighlightRules = function() {
264
245
  }, {
265
246
  token : "constant.numeric",
266
247
  regex : numRe
248
+ }, {
249
+ token : ["support.function", "string", "support.function"],
250
+ regex : "(url\\()(.*)(\\))"
267
251
  }, {
268
252
  token : function(value) {
269
253
  if (properties.hasOwnProperty(value.toLowerCase()))
@@ -309,6 +293,8 @@ var ScssHighlightRules = function() {
309
293
  }, {
310
294
  token : "text",
311
295
  regex : "\\s+"
296
+ }, {
297
+ caseInsensitive: true
312
298
  }
313
299
  ],
314
300
  "comment" : [
@@ -318,7 +304,6 @@ var ScssHighlightRules = function() {
318
304
  next : "start"
319
305
  }, {
320
306
  token : "comment", // comment spanning whole line
321
- merge : true,
322
307
  regex : ".+"
323
308
  }
324
309
  ],
@@ -329,7 +314,6 @@ var ScssHighlightRules = function() {
329
314
  next : "start"
330
315
  }, {
331
316
  token : "string",
332
- merge : true,
333
317
  regex : '.+'
334
318
  }
335
319
  ],
@@ -340,7 +324,6 @@ var ScssHighlightRules = function() {
340
324
  next : "start"
341
325
  }, {
342
326
  token : "string",
343
- merge : true,
344
327
  regex : '.+'
345
328
  }
346
329
  ]
@@ -385,12 +368,7 @@ var MatchingBraceOutdent = function() {};
385
368
  };
386
369
 
387
370
  this.$getIndent = function(line) {
388
- var match = line.match(/^(\s+)/);
389
- if (match) {
390
- return match[1];
391
- }
392
-
393
- return "";
371
+ return line.match(/^\s*/)[0];
394
372
  };
395
373
 
396
374
  }).call(MatchingBraceOutdent.prototype);
@@ -398,6 +376,413 @@ var MatchingBraceOutdent = function() {};
398
376
  exports.MatchingBraceOutdent = MatchingBraceOutdent;
399
377
  });
400
378
 
379
+ define('ace/mode/behaviour/css', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/mode/behaviour/cstyle', 'ace/token_iterator'], function(require, exports, module) {
380
+
381
+
382
+ var oop = require("../../lib/oop");
383
+ var Behaviour = require("../behaviour").Behaviour;
384
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
385
+ var TokenIterator = require("../../token_iterator").TokenIterator;
386
+
387
+ var CssBehaviour = function () {
388
+
389
+ this.inherit(CstyleBehaviour);
390
+
391
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
392
+ if (text === ':') {
393
+ var cursor = editor.getCursorPosition();
394
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
395
+ var token = iterator.getCurrentToken();
396
+ if (token && token.value.match(/\s+/)) {
397
+ token = iterator.stepBackward();
398
+ }
399
+ if (token && token.type === 'support.type') {
400
+ var line = session.doc.getLine(cursor.row);
401
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
402
+ if (rightChar === ':') {
403
+ return {
404
+ text: '',
405
+ selection: [1, 1]
406
+ }
407
+ }
408
+ if (!line.substring(cursor.column).match(/^\s*;/)) {
409
+ return {
410
+ text: ':;',
411
+ selection: [1, 1]
412
+ }
413
+ }
414
+ }
415
+ }
416
+ });
417
+
418
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
419
+ var selected = session.doc.getTextRange(range);
420
+ if (!range.isMultiLine() && selected === ':') {
421
+ var cursor = editor.getCursorPosition();
422
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
423
+ var token = iterator.getCurrentToken();
424
+ if (token && token.value.match(/\s+/)) {
425
+ token = iterator.stepBackward();
426
+ }
427
+ if (token && token.type === 'support.type') {
428
+ var line = session.doc.getLine(range.start.row);
429
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
430
+ if (rightChar === ';') {
431
+ range.end.column ++;
432
+ return range;
433
+ }
434
+ }
435
+ }
436
+ });
437
+
438
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
439
+ if (text === ';') {
440
+ var cursor = editor.getCursorPosition();
441
+ var line = session.doc.getLine(cursor.row);
442
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
443
+ if (rightChar === ';') {
444
+ return {
445
+ text: '',
446
+ selection: [1, 1]
447
+ }
448
+ }
449
+ }
450
+ });
451
+
452
+ }
453
+ oop.inherits(CssBehaviour, CstyleBehaviour);
454
+
455
+ exports.CssBehaviour = CssBehaviour;
456
+ });
457
+
458
+ define('ace/mode/behaviour/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/mode/behaviour', 'ace/token_iterator', 'ace/lib/lang'], function(require, exports, module) {
459
+
460
+
461
+ var oop = require("../../lib/oop");
462
+ var Behaviour = require("../behaviour").Behaviour;
463
+ var TokenIterator = require("../../token_iterator").TokenIterator;
464
+ var lang = require("../../lib/lang");
465
+
466
+ var SAFE_INSERT_IN_TOKENS =
467
+ ["text", "paren.rparen", "punctuation.operator"];
468
+ var SAFE_INSERT_BEFORE_TOKENS =
469
+ ["text", "paren.rparen", "punctuation.operator", "comment"];
470
+
471
+
472
+ var autoInsertedBrackets = 0;
473
+ var autoInsertedRow = -1;
474
+ var autoInsertedLineEnd = "";
475
+ var maybeInsertedBrackets = 0;
476
+ var maybeInsertedRow = -1;
477
+ var maybeInsertedLineStart = "";
478
+ var maybeInsertedLineEnd = "";
479
+
480
+ var CstyleBehaviour = function () {
481
+
482
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
483
+ var cursor = editor.getCursorPosition();
484
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
485
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
486
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
487
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
488
+ return false;
489
+ }
490
+ iterator.stepForward();
491
+ return iterator.getCurrentTokenRow() !== cursor.row ||
492
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
493
+ };
494
+
495
+ CstyleBehaviour.$matchTokenType = function(token, types) {
496
+ return types.indexOf(token.type || token) > -1;
497
+ };
498
+
499
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
500
+ var cursor = editor.getCursorPosition();
501
+ var line = session.doc.getLine(cursor.row);
502
+ if (!this.isAutoInsertedClosing(cursor, line, autoInsertedLineEnd[0]))
503
+ autoInsertedBrackets = 0;
504
+ autoInsertedRow = cursor.row;
505
+ autoInsertedLineEnd = bracket + line.substr(cursor.column);
506
+ autoInsertedBrackets++;
507
+ };
508
+
509
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
510
+ var cursor = editor.getCursorPosition();
511
+ var line = session.doc.getLine(cursor.row);
512
+ if (!this.isMaybeInsertedClosing(cursor, line))
513
+ maybeInsertedBrackets = 0;
514
+ maybeInsertedRow = cursor.row;
515
+ maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
516
+ maybeInsertedLineEnd = line.substr(cursor.column);
517
+ maybeInsertedBrackets++;
518
+ };
519
+
520
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
521
+ return autoInsertedBrackets > 0 &&
522
+ cursor.row === autoInsertedRow &&
523
+ bracket === autoInsertedLineEnd[0] &&
524
+ line.substr(cursor.column) === autoInsertedLineEnd;
525
+ };
526
+
527
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
528
+ return maybeInsertedBrackets > 0 &&
529
+ cursor.row === maybeInsertedRow &&
530
+ line.substr(cursor.column) === maybeInsertedLineEnd &&
531
+ line.substr(0, cursor.column) == maybeInsertedLineStart;
532
+ };
533
+
534
+ CstyleBehaviour.popAutoInsertedClosing = function() {
535
+ autoInsertedLineEnd = autoInsertedLineEnd.substr(1);
536
+ autoInsertedBrackets--;
537
+ };
538
+
539
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
540
+ maybeInsertedBrackets = 0;
541
+ maybeInsertedRow = -1;
542
+ };
543
+
544
+ this.add("braces", "insertion", function (state, action, editor, session, text) {
545
+ var cursor = editor.getCursorPosition();
546
+ var line = session.doc.getLine(cursor.row);
547
+ if (text == '{') {
548
+ var selection = editor.getSelectionRange();
549
+ var selected = session.doc.getTextRange(selection);
550
+ if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
551
+ return {
552
+ text: '{' + selected + '}',
553
+ selection: false
554
+ };
555
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
556
+ if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
557
+ CstyleBehaviour.recordAutoInsert(editor, session, "}");
558
+ return {
559
+ text: '{}',
560
+ selection: [1, 1]
561
+ };
562
+ } else {
563
+ CstyleBehaviour.recordMaybeInsert(editor, session, "{");
564
+ return {
565
+ text: '{',
566
+ selection: [1, 1]
567
+ };
568
+ }
569
+ }
570
+ } else if (text == '}') {
571
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
572
+ if (rightChar == '}') {
573
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
574
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
575
+ CstyleBehaviour.popAutoInsertedClosing();
576
+ return {
577
+ text: '',
578
+ selection: [1, 1]
579
+ };
580
+ }
581
+ }
582
+ } else if (text == "\n" || text == "\r\n") {
583
+ var closing = "";
584
+ if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
585
+ closing = lang.stringRepeat("}", maybeInsertedBrackets);
586
+ CstyleBehaviour.clearMaybeInsertedClosing();
587
+ }
588
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
589
+ if (rightChar === '}') {
590
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
591
+ if (!openBracePos)
592
+ return null;
593
+ var next_indent = this.$getIndent(session.getLine(openBracePos.row));
594
+ } else if (closing) {
595
+ var next_indent = this.$getIndent(line);
596
+ } else {
597
+ return;
598
+ }
599
+ var indent = next_indent + session.getTabString();
600
+
601
+ return {
602
+ text: '\n' + indent + '\n' + next_indent + closing,
603
+ selection: [1, indent.length, 1, indent.length]
604
+ };
605
+ } else {
606
+ CstyleBehaviour.clearMaybeInsertedClosing();
607
+ }
608
+ });
609
+
610
+ this.add("braces", "deletion", function (state, action, editor, session, range) {
611
+ var selected = session.doc.getTextRange(range);
612
+ if (!range.isMultiLine() && selected == '{') {
613
+ var line = session.doc.getLine(range.start.row);
614
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
615
+ if (rightChar == '}') {
616
+ range.end.column++;
617
+ return range;
618
+ } else {
619
+ maybeInsertedBrackets--;
620
+ }
621
+ }
622
+ });
623
+
624
+ this.add("parens", "insertion", function (state, action, editor, session, text) {
625
+ if (text == '(') {
626
+ var selection = editor.getSelectionRange();
627
+ var selected = session.doc.getTextRange(selection);
628
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
629
+ return {
630
+ text: '(' + selected + ')',
631
+ selection: false
632
+ };
633
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
634
+ CstyleBehaviour.recordAutoInsert(editor, session, ")");
635
+ return {
636
+ text: '()',
637
+ selection: [1, 1]
638
+ };
639
+ }
640
+ } else if (text == ')') {
641
+ var cursor = editor.getCursorPosition();
642
+ var line = session.doc.getLine(cursor.row);
643
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
644
+ if (rightChar == ')') {
645
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
646
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
647
+ CstyleBehaviour.popAutoInsertedClosing();
648
+ return {
649
+ text: '',
650
+ selection: [1, 1]
651
+ };
652
+ }
653
+ }
654
+ }
655
+ });
656
+
657
+ this.add("parens", "deletion", function (state, action, editor, session, range) {
658
+ var selected = session.doc.getTextRange(range);
659
+ if (!range.isMultiLine() && selected == '(') {
660
+ var line = session.doc.getLine(range.start.row);
661
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
662
+ if (rightChar == ')') {
663
+ range.end.column++;
664
+ return range;
665
+ }
666
+ }
667
+ });
668
+
669
+ this.add("brackets", "insertion", function (state, action, editor, session, text) {
670
+ if (text == '[') {
671
+ var selection = editor.getSelectionRange();
672
+ var selected = session.doc.getTextRange(selection);
673
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
674
+ return {
675
+ text: '[' + selected + ']',
676
+ selection: false
677
+ };
678
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
679
+ CstyleBehaviour.recordAutoInsert(editor, session, "]");
680
+ return {
681
+ text: '[]',
682
+ selection: [1, 1]
683
+ };
684
+ }
685
+ } else if (text == ']') {
686
+ var cursor = editor.getCursorPosition();
687
+ var line = session.doc.getLine(cursor.row);
688
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
689
+ if (rightChar == ']') {
690
+ var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
691
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
692
+ CstyleBehaviour.popAutoInsertedClosing();
693
+ return {
694
+ text: '',
695
+ selection: [1, 1]
696
+ };
697
+ }
698
+ }
699
+ }
700
+ });
701
+
702
+ this.add("brackets", "deletion", function (state, action, editor, session, range) {
703
+ var selected = session.doc.getTextRange(range);
704
+ if (!range.isMultiLine() && selected == '[') {
705
+ var line = session.doc.getLine(range.start.row);
706
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
707
+ if (rightChar == ']') {
708
+ range.end.column++;
709
+ return range;
710
+ }
711
+ }
712
+ });
713
+
714
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
715
+ if (text == '"' || text == "'") {
716
+ var quote = text;
717
+ var selection = editor.getSelectionRange();
718
+ var selected = session.doc.getTextRange(selection);
719
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
720
+ return {
721
+ text: quote + selected + quote,
722
+ selection: false
723
+ };
724
+ } else {
725
+ var cursor = editor.getCursorPosition();
726
+ var line = session.doc.getLine(cursor.row);
727
+ var leftChar = line.substring(cursor.column-1, cursor.column);
728
+ if (leftChar == '\\') {
729
+ return null;
730
+ }
731
+ var tokens = session.getTokens(selection.start.row);
732
+ var col = 0, token;
733
+ var quotepos = -1; // Track whether we're inside an open quote.
734
+
735
+ for (var x = 0; x < tokens.length; x++) {
736
+ token = tokens[x];
737
+ if (token.type == "string") {
738
+ quotepos = -1;
739
+ } else if (quotepos < 0) {
740
+ quotepos = token.value.indexOf(quote);
741
+ }
742
+ if ((token.value.length + col) > selection.start.column) {
743
+ break;
744
+ }
745
+ col += tokens[x].value.length;
746
+ }
747
+ if (!token || (quotepos < 0 && token.type !== "comment" && (token.type !== "string" || ((selection.start.column !== token.value.length+col-1) && token.value.lastIndexOf(quote) === token.value.length-1)))) {
748
+ if (!CstyleBehaviour.isSaneInsertion(editor, session))
749
+ return;
750
+ return {
751
+ text: quote + quote,
752
+ selection: [1,1]
753
+ };
754
+ } else if (token && token.type === "string") {
755
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
756
+ if (rightChar == quote) {
757
+ return {
758
+ text: '',
759
+ selection: [1, 1]
760
+ };
761
+ }
762
+ }
763
+ }
764
+ }
765
+ });
766
+
767
+ this.add("string_dquotes", "deletion", function (state, action, editor, session, range) {
768
+ var selected = session.doc.getTextRange(range);
769
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
770
+ var line = session.doc.getLine(range.start.row);
771
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
772
+ if (rightChar == selected) {
773
+ range.end.column++;
774
+ return range;
775
+ }
776
+ }
777
+ });
778
+
779
+ };
780
+
781
+ oop.inherits(CstyleBehaviour, Behaviour);
782
+
783
+ exports.CstyleBehaviour = CstyleBehaviour;
784
+ });
785
+
401
786
  define('ace/mode/folding/cstyle', ['require', 'exports', 'module' , 'ace/lib/oop', 'ace/range', 'ace/mode/folding/fold_mode'], function(require, exports, module) {
402
787
 
403
788
 
@@ -405,15 +790,24 @@ var oop = require("../../lib/oop");
405
790
  var Range = require("../../range").Range;
406
791
  var BaseFoldMode = require("./fold_mode").FoldMode;
407
792
 
408
- var FoldMode = exports.FoldMode = function() {};
793
+ var FoldMode = exports.FoldMode = function(commentRegex) {
794
+ if (commentRegex) {
795
+ this.foldingStartMarker = new RegExp(
796
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
797
+ );
798
+ this.foldingStopMarker = new RegExp(
799
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
800
+ );
801
+ }
802
+ };
409
803
  oop.inherits(FoldMode, BaseFoldMode);
410
804
 
411
805
  (function() {
412
806
 
413
807
  this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
414
808
  this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
415
-
416
- this.getFoldWidgetRange = function(session, foldStyle, row) {
809
+
810
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
417
811
  var line = session.getLine(row);
418
812
  var match = line.match(this.foldingStartMarker);
419
813
  if (match) {
@@ -421,115 +815,63 @@ oop.inherits(FoldMode, BaseFoldMode);
421
815
 
422
816
  if (match[1])
423
817
  return this.openingBracketBlock(session, match[1], row, i);
424
-
425
- var range = session.getCommentFoldRange(row, i + match[0].length);
426
- range.end.column -= 2;
818
+
819
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
820
+
821
+ if (range && !range.isMultiLine()) {
822
+ if (forceMultiline) {
823
+ range = this.getSectionRange(session, row);
824
+ } else if (foldStyle != "all")
825
+ range = null;
826
+ }
827
+
427
828
  return range;
428
829
  }
429
830
 
430
- if (foldStyle !== "markbeginend")
831
+ if (foldStyle === "markbegin")
431
832
  return;
432
-
833
+
433
834
  var match = line.match(this.foldingStopMarker);
434
835
  if (match) {
435
836
  var i = match.index + match[0].length;
436
837
 
437
- if (match[2]) {
438
- var range = session.getCommentFoldRange(row, i);
439
- range.end.column -= 2;
440
- return range;
441
- }
442
-
443
- var end = {row: row, column: i};
444
- var start = session.$findOpeningBracket(match[1], end);
445
-
446
- if (!start)
447
- return;
448
-
449
- start.column++;
450
- end.column--;
838
+ if (match[1])
839
+ return this.closingBracketBlock(session, match[1], row, i);
451
840
 
452
- return Range.fromPoints(start, end);
841
+ return session.getCommentFoldRange(row, i, -1);
453
842
  }
454
843
  };
455
844
 
456
- }).call(FoldMode.prototype);
457
-
458
- });
459
-
460
- define('ace/mode/folding/fold_mode', ['require', 'exports', 'module' , 'ace/range'], function(require, exports, module) {
461
-
462
-
463
- var Range = require("../../range").Range;
464
-
465
- var FoldMode = exports.FoldMode = function() {};
466
-
467
- (function() {
468
-
469
- this.foldingStartMarker = null;
470
- this.foldingStopMarker = null;
471
-
472
- // must return "" if there's no fold, to enable caching
473
- this.getFoldWidget = function(session, foldStyle, row) {
845
+ this.getSectionRange = function(session, row) {
474
846
  var line = session.getLine(row);
475
- if (this.foldingStartMarker.test(line))
476
- return "start";
477
- if (foldStyle == "markbeginend"
478
- && this.foldingStopMarker
479
- && this.foldingStopMarker.test(line))
480
- return "end";
481
- return "";
482
- };
483
-
484
- this.getFoldWidgetRange = function(session, foldStyle, row) {
485
- return null;
486
- };
487
-
488
- this.indentationBlock = function(session, row, column) {
489
- var re = /\S/;
490
- var line = session.getLine(row);
491
- var startLevel = line.search(re);
492
- if (startLevel == -1)
493
- return;
494
-
495
- var startColumn = column || line.length;
496
- var maxRow = session.getLength();
847
+ var startIndent = line.search(/\S/);
497
848
  var startRow = row;
849
+ var startColumn = line.length;
850
+ row = row + 1;
498
851
  var endRow = row;
499
-
852
+ var maxRow = session.getLength();
500
853
  while (++row < maxRow) {
501
- var level = session.getLine(row).search(re);
502
-
503
- if (level == -1)
854
+ line = session.getLine(row);
855
+ var indent = line.search(/\S/);
856
+ if (indent === -1)
504
857
  continue;
505
-
506
- if (level <= startLevel)
858
+ if (startIndent > indent)
507
859
  break;
508
-
860
+ var subRange = this.getFoldWidgetRange(session, "all", row);
861
+
862
+ if (subRange) {
863
+ if (subRange.start.row <= startRow) {
864
+ break;
865
+ } else if (subRange.isMultiLine()) {
866
+ row = subRange.end.row;
867
+ } else if (startIndent == indent) {
868
+ break;
869
+ }
870
+ }
509
871
  endRow = row;
510
872
  }
511
-
512
- if (endRow > startRow) {
513
- var endColumn = session.getLine(endRow).length;
514
- return new Range(startRow, startColumn, endRow, endColumn);
515
- }
516
- };
517
-
518
- this.openingBracketBlock = function(session, bracket, row, column, typeRe) {
519
- var start = {row: row, column: column + 1};
520
- var end = session.$findClosingBracket(bracket, start, typeRe);
521
- if (!end)
522
- return;
523
-
524
- var fw = session.foldWidgets[end.row];
525
- if (fw == null)
526
- fw = this.getFoldWidget(session, end.row);
527
-
528
- if (fw == "start" && end.row > start.row) {
529
- end.row --;
530
- end.column = session.getLine(end.row).length;
531
- }
532
- return Range.fromPoints(start, end);
873
+
874
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
533
875
  };
534
876
 
535
877
  }).call(FoldMode.prototype);