ace-rails-ap 3.0.1 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ace/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/ace/ace.js +210 -161
  4. data/vendor/assets/javascripts/ace/ext-beautify.js +0 -1
  5. data/vendor/assets/javascripts/ace/ext-chromevox.js +0 -1
  6. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +0 -1
  7. data/vendor/assets/javascripts/ace/ext-emmet.js +66 -48
  8. data/vendor/assets/javascripts/ace/ext-keybinding_menu.js +9 -19
  9. data/vendor/assets/javascripts/ace/ext-language_tools.js +108 -10
  10. data/vendor/assets/javascripts/ace/ext-linking.js +0 -1
  11. data/vendor/assets/javascripts/ace/ext-modelist.js +4 -1
  12. data/vendor/assets/javascripts/ace/ext-old_ie.js +23 -2
  13. data/vendor/assets/javascripts/ace/ext-searchbox.js +23 -2
  14. data/vendor/assets/javascripts/ace/ext-settings_menu.js +10 -1
  15. data/vendor/assets/javascripts/ace/ext-spellcheck.js +0 -1
  16. data/vendor/assets/javascripts/ace/ext-split.js +0 -1
  17. data/vendor/assets/javascripts/ace/ext-static_highlight.js +0 -1
  18. data/vendor/assets/javascripts/ace/ext-statusbar.js +2 -4
  19. data/vendor/assets/javascripts/ace/ext-textarea.js +0 -1
  20. data/vendor/assets/javascripts/ace/ext-themelist.js +0 -1
  21. data/vendor/assets/javascripts/ace/ext-whitespace.js +0 -1
  22. data/vendor/assets/javascripts/ace/keybinding-emacs.js +159 -50
  23. data/vendor/assets/javascripts/ace/mode-autohotkey.js +1 -1
  24. data/vendor/assets/javascripts/ace/mode-c_cpp.js +32 -14
  25. data/vendor/assets/javascripts/ace/mode-coffee.js +1 -1
  26. data/vendor/assets/javascripts/ace/mode-coldfusion.js +62 -24
  27. data/vendor/assets/javascripts/ace/mode-csharp.js +14 -8
  28. data/vendor/assets/javascripts/ace/mode-css.js +2 -2
  29. data/vendor/assets/javascripts/ace/mode-curly.js +62 -24
  30. data/vendor/assets/javascripts/ace/mode-d.js +13 -7
  31. data/vendor/assets/javascripts/ace/mode-dart.js +32 -14
  32. data/vendor/assets/javascripts/ace/mode-django.js +62 -24
  33. data/vendor/assets/javascripts/ace/mode-dockerfile.js +3 -3
  34. data/vendor/assets/javascripts/ace/mode-dot.js +12 -6
  35. data/vendor/assets/javascripts/ace/mode-ejs.js +126 -27
  36. data/vendor/assets/javascripts/ace/mode-elixir.js +493 -0
  37. data/vendor/assets/javascripts/ace/mode-elm.js +248 -0
  38. data/vendor/assets/javascripts/ace/mode-forth.js +1 -1
  39. data/vendor/assets/javascripts/ace/mode-ftl.js +20 -10
  40. data/vendor/assets/javascripts/ace/mode-gitignore.js +1 -0
  41. data/vendor/assets/javascripts/ace/mode-glsl.js +32 -14
  42. data/vendor/assets/javascripts/ace/mode-golang.js +14 -8
  43. data/vendor/assets/javascripts/ace/mode-groovy.js +22 -12
  44. data/vendor/assets/javascripts/ace/mode-haml.js +64 -3
  45. data/vendor/assets/javascripts/ace/mode-handlebars.js +72 -34
  46. data/vendor/assets/javascripts/ace/mode-haxe.js +14 -8
  47. data/vendor/assets/javascripts/ace/mode-html.js +62 -24
  48. data/vendor/assets/javascripts/ace/mode-html_ruby.js +126 -27
  49. data/vendor/assets/javascripts/ace/mode-jack.js +2 -2
  50. data/vendor/assets/javascripts/ace/mode-jade.js +21 -11
  51. data/vendor/assets/javascripts/ace/mode-java.js +22 -12
  52. data/vendor/assets/javascripts/ace/mode-javascript.js +22 -12
  53. data/vendor/assets/javascripts/ace/mode-json.js +2 -2
  54. data/vendor/assets/javascripts/ace/mode-jsoniq.js +47 -1835
  55. data/vendor/assets/javascripts/ace/mode-jsp.js +22 -12
  56. data/vendor/assets/javascripts/ace/mode-jsx.js +14 -8
  57. data/vendor/assets/javascripts/ace/mode-less.js +2 -2
  58. data/vendor/assets/javascripts/ace/mode-liquid.js +20 -10
  59. data/vendor/assets/javascripts/ace/mode-logiql.js +2 -2
  60. data/vendor/assets/javascripts/ace/mode-lsl.js +2 -2
  61. data/vendor/assets/javascripts/ace/mode-luapage.js +62 -24
  62. data/vendor/assets/javascripts/ace/mode-markdown.js +62 -24
  63. data/vendor/assets/javascripts/ace/mode-mel.js +2 -2
  64. data/vendor/assets/javascripts/ace/mode-mysql.js +12 -6
  65. data/vendor/assets/javascripts/ace/mode-nix.js +32 -14
  66. data/vendor/assets/javascripts/ace/mode-objectivec.js +30 -12
  67. data/vendor/assets/javascripts/ace/mode-pgsql.js +20 -10
  68. data/vendor/assets/javascripts/ace/mode-php.js +1126 -40
  69. data/vendor/assets/javascripts/ace/mode-powershell.js +2 -2
  70. data/vendor/assets/javascripts/ace/mode-protobuf.js +32 -14
  71. data/vendor/assets/javascripts/ace/mode-rhtml.js +62 -24
  72. data/vendor/assets/javascripts/ace/mode-ruby.js +66 -5
  73. data/vendor/assets/javascripts/ace/mode-rust.js +36 -3
  74. data/vendor/assets/javascripts/ace/mode-scad.js +14 -8
  75. data/vendor/assets/javascripts/ace/mode-scala.js +22 -12
  76. data/vendor/assets/javascripts/ace/mode-scss.js +2 -2
  77. data/vendor/assets/javascripts/ace/mode-sh.js +2 -2
  78. data/vendor/assets/javascripts/ace/mode-sjs.js +22 -12
  79. data/vendor/assets/javascripts/ace/mode-smarty.js +62 -24
  80. data/vendor/assets/javascripts/ace/mode-soy_template.js +63 -25
  81. data/vendor/assets/javascripts/ace/mode-stylus.js +4 -1
  82. data/vendor/assets/javascripts/ace/mode-svg.js +62 -24
  83. data/vendor/assets/javascripts/ace/mode-textile.js +1 -0
  84. data/vendor/assets/javascripts/ace/mode-twig.js +62 -24
  85. data/vendor/assets/javascripts/ace/mode-typescript.js +22 -12
  86. data/vendor/assets/javascripts/ace/mode-vala.js +2 -2
  87. data/vendor/assets/javascripts/ace/mode-velocity.js +62 -24
  88. data/vendor/assets/javascripts/ace/mode-xml.js +40 -12
  89. data/vendor/assets/javascripts/ace/mode-xquery.js +47 -1835
  90. data/vendor/assets/javascripts/ace/theme-cobalt.js +1 -1
  91. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +1 -1
  92. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +2 -2
  93. data/vendor/assets/javascripts/ace/worker-coffee.js +15 -5
  94. data/vendor/assets/javascripts/ace/worker-css.js +15 -5
  95. data/vendor/assets/javascripts/ace/worker-html.js +15 -5
  96. data/vendor/assets/javascripts/ace/worker-javascript.js +15 -5
  97. data/vendor/assets/javascripts/ace/worker-json.js +17 -6
  98. data/vendor/assets/javascripts/ace/worker-lua.js +15 -5
  99. data/vendor/assets/javascripts/ace/worker-php.js +15 -5
  100. data/vendor/assets/javascripts/ace/worker-xquery.js +15 -5
  101. metadata +4 -2
@@ -102,11 +102,11 @@ var SAFE_INSERT_BEFORE_TOKENS =
102
102
  ["text", "paren.rparen", "punctuation.operator", "comment"];
103
103
 
104
104
  var context;
105
- var contextCache = {}
105
+ var contextCache = {};
106
106
  var initContext = function(editor) {
107
107
  var id = -1;
108
108
  if (editor.multiSelect) {
109
- id = editor.selection.id;
109
+ id = editor.selection.index;
110
110
  if (contextCache.rangeCount != editor.multiSelect.rangeCount)
111
111
  contextCache = {rangeCount: editor.multiSelect.rangeCount};
112
112
  }
@@ -5,22 +5,28 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var DocCommentHighlightRules = function() {
8
-
9
8
  this.$rules = {
10
9
  "start" : [ {
11
10
  token : "comment.doc.tag",
12
11
  regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
- }, {
14
- token : "comment.doc.tag",
15
- regex : "\\bTODO\\b"
16
- }, {
17
- defaultToken : "comment.doc"
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
18
17
  }]
19
18
  };
20
19
  };
21
20
 
22
21
  oop.inherits(DocCommentHighlightRules, TextHighlightRules);
23
22
 
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
24
30
  DocCommentHighlightRules.getStartRule = function(start) {
25
31
  return {
26
32
  token : "comment.doc", // doc comment
@@ -5,22 +5,28 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var DocCommentHighlightRules = function() {
8
-
9
8
  this.$rules = {
10
9
  "start" : [ {
11
10
  token : "comment.doc.tag",
12
11
  regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
- }, {
14
- token : "comment.doc.tag",
15
- regex : "\\bTODO\\b"
16
- }, {
17
- defaultToken : "comment.doc"
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
18
17
  }]
19
18
  };
20
19
  };
21
20
 
22
21
  oop.inherits(DocCommentHighlightRules, TextHighlightRules);
23
22
 
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
24
30
  DocCommentHighlightRules.getStartRule = function(start) {
25
31
  return {
26
32
  token : "comment.doc", // doc comment
@@ -89,11 +95,12 @@ var c_cppHighlightRules = function() {
89
95
 
90
96
  var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b";
91
97
 
92
- this.$rules = {
98
+ this.$rules = {
93
99
  "start" : [
94
100
  {
95
101
  token : "comment",
96
- regex : "\\/\\/.*$"
102
+ regex : "//",
103
+ next : "singleLineComment"
97
104
  },
98
105
  DocCommentHighlightRules.getStartRule("doc-start"),
99
106
  {
@@ -160,14 +167,26 @@ var c_cppHighlightRules = function() {
160
167
  regex : ".+"
161
168
  }
162
169
  ],
170
+ "singleLineComment" : [
171
+ {
172
+ token : "comment",
173
+ regex : /\\$/,
174
+ next : "singleLineComment"
175
+ }, {
176
+ token : "comment",
177
+ regex : /$/,
178
+ next : "start"
179
+ }, {
180
+ defaultToken: "comment"
181
+ }
182
+ ],
163
183
  "qqstring" : [
164
184
  {
165
185
  token : "string",
166
186
  regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
167
187
  next : "start"
168
188
  }, {
169
- token : "string",
170
- regex : '.+'
189
+ defaultToken : "string"
171
190
  }
172
191
  ],
173
192
  "qstring" : [
@@ -176,8 +195,7 @@ var c_cppHighlightRules = function() {
176
195
  regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
177
196
  next : "start"
178
197
  }, {
179
- token : "string",
180
- regex : '.+'
198
+ defaultToken : "string"
181
199
  }
182
200
  ],
183
201
  "directive" : [
@@ -275,11 +293,11 @@ var SAFE_INSERT_BEFORE_TOKENS =
275
293
  ["text", "paren.rparen", "punctuation.operator", "comment"];
276
294
 
277
295
  var context;
278
- var contextCache = {}
296
+ var contextCache = {};
279
297
  var initContext = function(editor) {
280
298
  var id = -1;
281
299
  if (editor.multiSelect) {
282
- id = editor.selection.id;
300
+ id = editor.selection.index;
283
301
  if (contextCache.rangeCount != editor.multiSelect.rangeCount)
284
302
  contextCache = {rangeCount: editor.multiSelect.rangeCount};
285
303
  }
@@ -5,22 +5,28 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var DocCommentHighlightRules = function() {
8
-
9
8
  this.$rules = {
10
9
  "start" : [ {
11
10
  token : "comment.doc.tag",
12
11
  regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
- }, {
14
- token : "comment.doc.tag",
15
- regex : "\\bTODO\\b"
16
- }, {
17
- defaultToken : "comment.doc"
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
18
17
  }]
19
18
  };
20
19
  };
21
20
 
22
21
  oop.inherits(DocCommentHighlightRules, TextHighlightRules);
23
22
 
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
24
30
  DocCommentHighlightRules.getStartRule = function(start) {
25
31
  return {
26
32
  token : "comment.doc", // doc comment
@@ -89,11 +95,12 @@ var c_cppHighlightRules = function() {
89
95
 
90
96
  var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\d\\$_\u00a1-\uffff]*\\b";
91
97
 
92
- this.$rules = {
98
+ this.$rules = {
93
99
  "start" : [
94
100
  {
95
101
  token : "comment",
96
- regex : "\\/\\/.*$"
102
+ regex : "//",
103
+ next : "singleLineComment"
97
104
  },
98
105
  DocCommentHighlightRules.getStartRule("doc-start"),
99
106
  {
@@ -160,14 +167,26 @@ var c_cppHighlightRules = function() {
160
167
  regex : ".+"
161
168
  }
162
169
  ],
170
+ "singleLineComment" : [
171
+ {
172
+ token : "comment",
173
+ regex : /\\$/,
174
+ next : "singleLineComment"
175
+ }, {
176
+ token : "comment",
177
+ regex : /$/,
178
+ next : "start"
179
+ }, {
180
+ defaultToken: "comment"
181
+ }
182
+ ],
163
183
  "qqstring" : [
164
184
  {
165
185
  token : "string",
166
186
  regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"',
167
187
  next : "start"
168
188
  }, {
169
- token : "string",
170
- regex : '.+'
189
+ defaultToken : "string"
171
190
  }
172
191
  ],
173
192
  "qstring" : [
@@ -176,8 +195,7 @@ var c_cppHighlightRules = function() {
176
195
  regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'",
177
196
  next : "start"
178
197
  }, {
179
- token : "string",
180
- regex : '.+'
198
+ defaultToken : "string"
181
199
  }
182
200
  ],
183
201
  "directive" : [
@@ -5,22 +5,28 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var DocCommentHighlightRules = function() {
8
-
9
8
  this.$rules = {
10
9
  "start" : [ {
11
10
  token : "comment.doc.tag",
12
11
  regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
- }, {
14
- token : "comment.doc.tag",
15
- regex : "\\bTODO\\b"
16
- }, {
17
- defaultToken : "comment.doc"
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
18
17
  }]
19
18
  };
20
19
  };
21
20
 
22
21
  oop.inherits(DocCommentHighlightRules, TextHighlightRules);
23
22
 
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
24
30
  DocCommentHighlightRules.getStartRule = function(start) {
25
31
  return {
26
32
  token : "comment.doc", // doc comment
@@ -649,20 +655,24 @@ var JavaScriptHighlightRules = function(options) {
649
655
  }
650
656
  ],
651
657
  "comment_regex_allowed" : [
658
+ DocCommentHighlightRules.getTagRule(),
652
659
  {token : "comment", regex : "\\*\\/", next : "start"},
653
- {defaultToken : "comment"}
660
+ {defaultToken : "comment", caseInsensitive: true}
654
661
  ],
655
662
  "comment" : [
663
+ DocCommentHighlightRules.getTagRule(),
656
664
  {token : "comment", regex : "\\*\\/", next : "no_regex"},
657
- {defaultToken : "comment"}
665
+ {defaultToken : "comment", caseInsensitive: true}
658
666
  ],
659
667
  "line_comment_regex_allowed" : [
668
+ DocCommentHighlightRules.getTagRule(),
660
669
  {token : "comment", regex : "$|^", next : "start"},
661
- {defaultToken : "comment"}
670
+ {defaultToken : "comment", caseInsensitive: true}
662
671
  ],
663
672
  "line_comment" : [
673
+ DocCommentHighlightRules.getTagRule(),
664
674
  {token : "comment", regex : "$|^", next : "no_regex"},
665
- {defaultToken : "comment"}
675
+ {defaultToken : "comment", caseInsensitive: true}
666
676
  ],
667
677
  "qqstring" : [
668
678
  {
@@ -5,22 +5,28 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var DocCommentHighlightRules = function() {
8
-
9
8
  this.$rules = {
10
9
  "start" : [ {
11
10
  token : "comment.doc.tag",
12
11
  regex : "@[\\w\\d_]+" // TODO: fix email addresses
13
- }, {
14
- token : "comment.doc.tag",
15
- regex : "\\bTODO\\b"
16
- }, {
17
- defaultToken : "comment.doc"
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
18
17
  }]
19
18
  };
20
19
  };
21
20
 
22
21
  oop.inherits(DocCommentHighlightRules, TextHighlightRules);
23
22
 
23
+ DocCommentHighlightRules.getTagRule = function(start) {
24
+ return {
25
+ token : "comment.doc.tag.storage.type",
26
+ regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b"
27
+ };
28
+ }
29
+
24
30
  DocCommentHighlightRules.getStartRule = function(start) {
25
31
  return {
26
32
  token : "comment.doc", // doc comment
@@ -436,20 +442,24 @@ var JavaScriptHighlightRules = function(options) {
436
442
  }
437
443
  ],
438
444
  "comment_regex_allowed" : [
445
+ DocCommentHighlightRules.getTagRule(),
439
446
  {token : "comment", regex : "\\*\\/", next : "start"},
440
- {defaultToken : "comment"}
447
+ {defaultToken : "comment", caseInsensitive: true}
441
448
  ],
442
449
  "comment" : [
450
+ DocCommentHighlightRules.getTagRule(),
443
451
  {token : "comment", regex : "\\*\\/", next : "no_regex"},
444
- {defaultToken : "comment"}
452
+ {defaultToken : "comment", caseInsensitive: true}
445
453
  ],
446
454
  "line_comment_regex_allowed" : [
455
+ DocCommentHighlightRules.getTagRule(),
447
456
  {token : "comment", regex : "$|^", next : "start"},
448
- {defaultToken : "comment"}
457
+ {defaultToken : "comment", caseInsensitive: true}
449
458
  ],
450
459
  "line_comment" : [
460
+ DocCommentHighlightRules.getTagRule(),
451
461
  {token : "comment", regex : "$|^", next : "no_regex"},
452
- {defaultToken : "comment"}
462
+ {defaultToken : "comment", caseInsensitive: true}
453
463
  ],
454
464
  "qqstring" : [
455
465
  {
@@ -1925,11 +1935,11 @@ var SAFE_INSERT_BEFORE_TOKENS =
1925
1935
  ["text", "paren.rparen", "punctuation.operator", "comment"];
1926
1936
 
1927
1937
  var context;
1928
- var contextCache = {}
1938
+ var contextCache = {};
1929
1939
  var initContext = function(editor) {
1930
1940
  var id = -1;
1931
1941
  if (editor.multiSelect) {
1932
- id = editor.selection.id;
1942
+ id = editor.selection.index;
1933
1943
  if (contextCache.rangeCount != editor.multiSelect.rangeCount)
1934
1944
  contextCache = {rangeCount: editor.multiSelect.rangeCount};
1935
1945
  }
@@ -2364,24 +2374,21 @@ oop.inherits(FoldMode, BaseFoldMode);
2364
2374
 
2365
2375
  });
2366
2376
 
2367
- define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode"], function(require, exports, module) {
2377
+ define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
2368
2378
  "use strict";
2369
2379
 
2370
2380
  var oop = require("../lib/oop");
2371
2381
  var TextMode = require("./text").Mode;
2372
- var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules;
2373
- var PhpLangHighlightRules = require("./php_highlight_rules").PhpLangHighlightRules;
2382
+ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules;
2374
2383
  var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
2375
2384
  var Range = require("../range").Range;
2376
2385
  var WorkerClient = require("../worker/worker_client").WorkerClient;
2377
2386
  var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
2378
2387
  var CStyleFoldMode = require("./folding/cstyle").FoldMode;
2379
- var unicode = require("../unicode");
2380
2388
 
2381
- var Mode = function(opts) {
2382
- this.inlinePhp = opts && opts.inline;
2383
- var HighlightRules = this.inlinePhp ? PhpLangHighlightRules : PhpHighlightRules;
2384
- this.HighlightRules = HighlightRules;
2389
+ var Mode = function() {
2390
+ this.HighlightRules = JavaScriptHighlightRules;
2391
+
2385
2392
  this.$outdent = new MatchingBraceOutdent();
2386
2393
  this.$behaviour = new CstyleBehaviour();
2387
2394
  this.foldingRules = new CStyleFoldMode();
@@ -2390,22 +2397,7 @@ oop.inherits(Mode, TextMode);
2390
2397
 
2391
2398
  (function() {
2392
2399
 
2393
- this.tokenRe = new RegExp("^["
2394
- + unicode.packages.L
2395
- + unicode.packages.Mn + unicode.packages.Mc
2396
- + unicode.packages.Nd
2397
- + unicode.packages.Pc + "\_]+", "g"
2398
- );
2399
-
2400
- this.nonTokenRe = new RegExp("^(?:[^"
2401
- + unicode.packages.L
2402
- + unicode.packages.Mn + unicode.packages.Mc
2403
- + unicode.packages.Nd
2404
- + unicode.packages.Pc + "\_]|\s])+", "g"
2405
- );
2406
-
2407
-
2408
- this.lineCommentStart = ["//", "#"];
2400
+ this.lineCommentStart = "//";
2409
2401
  this.blockComment = {start: "/*", end: "*/"};
2410
2402
 
2411
2403
  this.getNextLineIndent = function(state, line, tab) {
@@ -2415,18 +2407,1074 @@ oop.inherits(Mode, TextMode);
2415
2407
  var tokens = tokenizedLine.tokens;
2416
2408
  var endState = tokenizedLine.state;
2417
2409
 
2410
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
2411
+ return indent;
2412
+ }
2413
+
2414
+ if (state == "start" || state == "no_regex") {
2415
+ var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);
2416
+ if (match) {
2417
+ indent += tab;
2418
+ }
2419
+ } else if (state == "doc-start") {
2420
+ if (endState == "start" || endState == "no_regex") {
2421
+ return "";
2422
+ }
2423
+ var match = line.match(/^\s*(\/?)\*/);
2424
+ if (match) {
2425
+ if (match[1]) {
2426
+ indent += " ";
2427
+ }
2428
+ indent += "* ";
2429
+ }
2430
+ }
2431
+
2432
+ return indent;
2433
+ };
2434
+
2435
+ this.checkOutdent = function(state, line, input) {
2436
+ return this.$outdent.checkOutdent(line, input);
2437
+ };
2438
+
2439
+ this.autoOutdent = function(state, doc, row) {
2440
+ this.$outdent.autoOutdent(doc, row);
2441
+ };
2442
+
2443
+ this.createWorker = function(session) {
2444
+ var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker");
2445
+ worker.attachToDocument(session.getDocument());
2446
+
2447
+ worker.on("jslint", function(results) {
2448
+ session.setAnnotations(results.data);
2449
+ });
2450
+
2451
+ worker.on("terminate", function() {
2452
+ session.clearAnnotations();
2453
+ });
2454
+
2455
+ return worker;
2456
+ };
2457
+
2458
+ this.$id = "ace/mode/javascript";
2459
+ }).call(Mode.prototype);
2460
+
2461
+ exports.Mode = Mode;
2462
+ });
2463
+
2464
+ 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) {
2465
+ "use strict";
2466
+
2467
+ var oop = require("../../lib/oop");
2468
+ var Behaviour = require("../behaviour").Behaviour;
2469
+ var CstyleBehaviour = require("./cstyle").CstyleBehaviour;
2470
+ var TokenIterator = require("../../token_iterator").TokenIterator;
2471
+
2472
+ var CssBehaviour = function () {
2473
+
2474
+ this.inherit(CstyleBehaviour);
2475
+
2476
+ this.add("colon", "insertion", function (state, action, editor, session, text) {
2477
+ if (text === ':') {
2478
+ var cursor = editor.getCursorPosition();
2479
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
2480
+ var token = iterator.getCurrentToken();
2481
+ if (token && token.value.match(/\s+/)) {
2482
+ token = iterator.stepBackward();
2483
+ }
2484
+ if (token && token.type === 'support.type') {
2485
+ var line = session.doc.getLine(cursor.row);
2486
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
2487
+ if (rightChar === ':') {
2488
+ return {
2489
+ text: '',
2490
+ selection: [1, 1]
2491
+ }
2492
+ }
2493
+ if (!line.substring(cursor.column).match(/^\s*;/)) {
2494
+ return {
2495
+ text: ':;',
2496
+ selection: [1, 1]
2497
+ }
2498
+ }
2499
+ }
2500
+ }
2501
+ });
2502
+
2503
+ this.add("colon", "deletion", function (state, action, editor, session, range) {
2504
+ var selected = session.doc.getTextRange(range);
2505
+ if (!range.isMultiLine() && selected === ':') {
2506
+ var cursor = editor.getCursorPosition();
2507
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
2508
+ var token = iterator.getCurrentToken();
2509
+ if (token && token.value.match(/\s+/)) {
2510
+ token = iterator.stepBackward();
2511
+ }
2512
+ if (token && token.type === 'support.type') {
2513
+ var line = session.doc.getLine(range.start.row);
2514
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
2515
+ if (rightChar === ';') {
2516
+ range.end.column ++;
2517
+ return range;
2518
+ }
2519
+ }
2520
+ }
2521
+ });
2522
+
2523
+ this.add("semicolon", "insertion", function (state, action, editor, session, text) {
2524
+ if (text === ';') {
2525
+ var cursor = editor.getCursorPosition();
2526
+ var line = session.doc.getLine(cursor.row);
2527
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
2528
+ if (rightChar === ';') {
2529
+ return {
2530
+ text: '',
2531
+ selection: [1, 1]
2532
+ }
2533
+ }
2534
+ }
2535
+ });
2418
2536
 
2537
+ }
2538
+ oop.inherits(CssBehaviour, CstyleBehaviour);
2539
+
2540
+ exports.CssBehaviour = CssBehaviour;
2541
+ });
2542
+
2543
+ define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) {
2544
+ "use strict";
2545
+
2546
+ var oop = require("../lib/oop");
2547
+ var TextMode = require("./text").Mode;
2548
+ var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules;
2549
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
2550
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
2551
+ var CssBehaviour = require("./behaviour/css").CssBehaviour;
2552
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
2553
+
2554
+ var Mode = function() {
2555
+ this.HighlightRules = CssHighlightRules;
2556
+ this.$outdent = new MatchingBraceOutdent();
2557
+ this.$behaviour = new CssBehaviour();
2558
+ this.foldingRules = new CStyleFoldMode();
2559
+ };
2560
+ oop.inherits(Mode, TextMode);
2561
+
2562
+ (function() {
2563
+
2564
+ this.foldingRules = "cStyle";
2565
+ this.blockComment = {start: "/*", end: "*/"};
2566
+
2567
+ this.getNextLineIndent = function(state, line, tab) {
2568
+ var indent = this.$getIndent(line);
2569
+ var tokens = this.getTokenizer().getLineTokens(line, state).tokens;
2419
2570
  if (tokens.length && tokens[tokens.length-1].type == "comment") {
2420
2571
  return indent;
2421
2572
  }
2422
2573
 
2423
- if (state == "php-start") {
2574
+ var match = line.match(/^.*\{\s*$/);
2575
+ if (match) {
2576
+ indent += tab;
2577
+ }
2578
+
2579
+ return indent;
2580
+ };
2581
+
2582
+ this.checkOutdent = function(state, line, input) {
2583
+ return this.$outdent.checkOutdent(line, input);
2584
+ };
2585
+
2586
+ this.autoOutdent = function(state, doc, row) {
2587
+ this.$outdent.autoOutdent(doc, row);
2588
+ };
2589
+
2590
+ this.createWorker = function(session) {
2591
+ var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker");
2592
+ worker.attachToDocument(session.getDocument());
2593
+
2594
+ worker.on("csslint", function(e) {
2595
+ session.setAnnotations(e.data);
2596
+ });
2597
+
2598
+ worker.on("terminate", function() {
2599
+ session.clearAnnotations();
2600
+ });
2601
+
2602
+ return worker;
2603
+ };
2604
+
2605
+ this.$id = "ace/mode/css";
2606
+ }).call(Mode.prototype);
2607
+
2608
+ exports.Mode = Mode;
2609
+
2610
+ });
2611
+
2612
+ define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
2613
+ "use strict";
2614
+
2615
+ var oop = require("../../lib/oop");
2616
+ var Behaviour = require("../behaviour").Behaviour;
2617
+ var TokenIterator = require("../../token_iterator").TokenIterator;
2618
+ var lang = require("../../lib/lang");
2619
+
2620
+ function is(token, type) {
2621
+ return token.type.lastIndexOf(type + ".xml") > -1;
2622
+ }
2623
+
2624
+ var XmlBehaviour = function () {
2625
+
2626
+ this.add("string_dquotes", "insertion", function (state, action, editor, session, text) {
2627
+ if (text == '"' || text == "'") {
2628
+ var quote = text;
2629
+ var selected = session.doc.getTextRange(editor.getSelectionRange());
2630
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
2631
+ return {
2632
+ text: quote + selected + quote,
2633
+ selection: false
2634
+ };
2635
+ }
2636
+
2637
+ var cursor = editor.getCursorPosition();
2638
+ var line = session.doc.getLine(cursor.row);
2639
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
2640
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
2641
+ var token = iterator.getCurrentToken();
2642
+
2643
+ if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) {
2644
+ return {
2645
+ text: "",
2646
+ selection: [1, 1]
2647
+ };
2648
+ }
2649
+
2650
+ if (!token)
2651
+ token = iterator.stepBackward();
2652
+
2653
+ if (!token)
2654
+ return;
2655
+
2656
+ while (is(token, "tag-whitespace") || is(token, "whitespace")) {
2657
+ token = iterator.stepBackward();
2658
+ }
2659
+ var rightSpace = !rightChar || rightChar.match(/\s/);
2660
+ if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) {
2661
+ return {
2662
+ text: quote + quote,
2663
+ selection: [1, 1]
2664
+ };
2665
+ }
2666
+ }
2667
+ });
2668
+
2669
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
2670
+ var selected = session.doc.getTextRange(range);
2671
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
2672
+ var line = session.doc.getLine(range.start.row);
2673
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
2674
+ if (rightChar == selected) {
2675
+ range.end.column++;
2676
+ return range;
2677
+ }
2678
+ }
2679
+ });
2680
+
2681
+ this.add("autoclosing", "insertion", function (state, action, editor, session, text) {
2682
+ if (text == '>') {
2683
+ var position = editor.getCursorPosition();
2684
+ var iterator = new TokenIterator(session, position.row, position.column);
2685
+ var token = iterator.getCurrentToken() || iterator.stepBackward();
2686
+ if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value")))
2687
+ return;
2688
+ if (is(token, "reference.attribute-value"))
2689
+ return;
2690
+ if (is(token, "attribute-value")) {
2691
+ var firstChar = token.value.charAt(0);
2692
+ if (firstChar == '"' || firstChar == "'") {
2693
+ var lastChar = token.value.charAt(token.value.length - 1);
2694
+ var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length;
2695
+ if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar)
2696
+ return;
2697
+ }
2698
+ }
2699
+ while (!is(token, "tag-name")) {
2700
+ token = iterator.stepBackward();
2701
+ }
2702
+
2703
+ var tokenRow = iterator.getCurrentTokenRow();
2704
+ var tokenColumn = iterator.getCurrentTokenColumn();
2705
+ if (is(iterator.stepBackward(), "end-tag-open"))
2706
+ return;
2707
+
2708
+ var element = token.value;
2709
+ if (tokenRow == position.row)
2710
+ element = element.substring(0, position.column - tokenColumn);
2711
+
2712
+ if (this.voidElements.hasOwnProperty(element.toLowerCase()))
2713
+ return;
2714
+
2715
+ return {
2716
+ text: ">" + "</" + element + ">",
2717
+ selection: [1, 1]
2718
+ };
2719
+ }
2720
+ });
2721
+
2722
+ this.add("autoindent", "insertion", function (state, action, editor, session, text) {
2723
+ if (text == "\n") {
2724
+ var cursor = editor.getCursorPosition();
2725
+ var line = session.getLine(cursor.row);
2726
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
2727
+ var token = iterator.getCurrentToken();
2728
+
2729
+ if (token && token.type.indexOf("tag-close") !== -1) {
2730
+ while (token && token.type.indexOf("tag-name") === -1) {
2731
+ token = iterator.stepBackward();
2732
+ }
2733
+
2734
+ if (!token) {
2735
+ return;
2736
+ }
2737
+
2738
+ var tag = token.value;
2739
+ var row = iterator.getCurrentTokenRow();
2740
+ token = iterator.stepBackward();
2741
+ if (!token || token.type.indexOf("end-tag") !== -1) {
2742
+ return;
2743
+ }
2744
+
2745
+ if (this.voidElements && !this.voidElements[tag]) {
2746
+ var nextToken = session.getTokenAt(cursor.row, cursor.column+1);
2747
+ var line = session.getLine(row);
2748
+ var nextIndent = this.$getIndent(line);
2749
+ var indent = nextIndent + session.getTabString();
2750
+
2751
+ if (nextToken && nextToken.value === "</") {
2752
+ return {
2753
+ text: "\n" + indent + "\n" + nextIndent,
2754
+ selection: [1, indent.length, 1, indent.length]
2755
+ };
2756
+ } else {
2757
+ return {
2758
+ text: "\n" + indent
2759
+ };
2760
+ }
2761
+ }
2762
+ }
2763
+ }
2764
+ });
2765
+
2766
+ };
2767
+
2768
+ oop.inherits(XmlBehaviour, Behaviour);
2769
+
2770
+ exports.XmlBehaviour = XmlBehaviour;
2771
+ });
2772
+
2773
+ define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) {
2774
+ "use strict";
2775
+
2776
+ var oop = require("../../lib/oop");
2777
+ var BaseFoldMode = require("./fold_mode").FoldMode;
2778
+
2779
+ var FoldMode = exports.FoldMode = function(defaultMode, subModes) {
2780
+ this.defaultMode = defaultMode;
2781
+ this.subModes = subModes;
2782
+ };
2783
+ oop.inherits(FoldMode, BaseFoldMode);
2784
+
2785
+ (function() {
2786
+
2787
+
2788
+ this.$getMode = function(state) {
2789
+ if (typeof state != "string")
2790
+ state = state[0];
2791
+ for (var key in this.subModes) {
2792
+ if (state.indexOf(key) === 0)
2793
+ return this.subModes[key];
2794
+ }
2795
+ return null;
2796
+ };
2797
+
2798
+ this.$tryMode = function(state, session, foldStyle, row) {
2799
+ var mode = this.$getMode(state);
2800
+ return (mode ? mode.getFoldWidget(session, foldStyle, row) : "");
2801
+ };
2802
+
2803
+ this.getFoldWidget = function(session, foldStyle, row) {
2804
+ return (
2805
+ this.$tryMode(session.getState(row-1), session, foldStyle, row) ||
2806
+ this.$tryMode(session.getState(row), session, foldStyle, row) ||
2807
+ this.defaultMode.getFoldWidget(session, foldStyle, row)
2808
+ );
2809
+ };
2810
+
2811
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2812
+ var mode = this.$getMode(session.getState(row-1));
2813
+
2814
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
2815
+ mode = this.$getMode(session.getState(row));
2816
+
2817
+ if (!mode || !mode.getFoldWidget(session, foldStyle, row))
2818
+ mode = this.defaultMode;
2819
+
2820
+ return mode.getFoldWidgetRange(session, foldStyle, row);
2821
+ };
2822
+
2823
+ }).call(FoldMode.prototype);
2824
+
2825
+ });
2826
+
2827
+ define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) {
2828
+ "use strict";
2829
+
2830
+ var oop = require("../../lib/oop");
2831
+ var lang = require("../../lib/lang");
2832
+ var Range = require("../../range").Range;
2833
+ var BaseFoldMode = require("./fold_mode").FoldMode;
2834
+ var TokenIterator = require("../../token_iterator").TokenIterator;
2835
+
2836
+ var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) {
2837
+ BaseFoldMode.call(this);
2838
+ this.voidElements = voidElements || {};
2839
+ this.optionalEndTags = oop.mixin({}, this.voidElements);
2840
+ if (optionalEndTags)
2841
+ oop.mixin(this.optionalEndTags, optionalEndTags);
2842
+
2843
+ };
2844
+ oop.inherits(FoldMode, BaseFoldMode);
2845
+
2846
+ var Tag = function() {
2847
+ this.tagName = "";
2848
+ this.closing = false;
2849
+ this.selfClosing = false;
2850
+ this.start = {row: 0, column: 0};
2851
+ this.end = {row: 0, column: 0};
2852
+ };
2853
+
2854
+ function is(token, type) {
2855
+ return token.type.lastIndexOf(type + ".xml") > -1;
2856
+ }
2857
+
2858
+ (function() {
2859
+
2860
+ this.getFoldWidget = function(session, foldStyle, row) {
2861
+ var tag = this._getFirstTagInLine(session, row);
2862
+
2863
+ if (!tag)
2864
+ return "";
2865
+
2866
+ if (tag.closing || (!tag.tagName && tag.selfClosing))
2867
+ return foldStyle == "markbeginend" ? "end" : "";
2868
+
2869
+ if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase()))
2870
+ return "";
2871
+
2872
+ if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column))
2873
+ return "";
2874
+
2875
+ return "start";
2876
+ };
2877
+ this._getFirstTagInLine = function(session, row) {
2878
+ var tokens = session.getTokens(row);
2879
+ var tag = new Tag();
2880
+
2881
+ for (var i = 0; i < tokens.length; i++) {
2882
+ var token = tokens[i];
2883
+ if (is(token, "tag-open")) {
2884
+ tag.end.column = tag.start.column + token.value.length;
2885
+ tag.closing = is(token, "end-tag-open");
2886
+ token = tokens[++i];
2887
+ if (!token)
2888
+ return null;
2889
+ tag.tagName = token.value;
2890
+ tag.end.column += token.value.length;
2891
+ for (i++; i < tokens.length; i++) {
2892
+ token = tokens[i];
2893
+ tag.end.column += token.value.length;
2894
+ if (is(token, "tag-close")) {
2895
+ tag.selfClosing = token.value == '/>';
2896
+ break;
2897
+ }
2898
+ }
2899
+ return tag;
2900
+ } else if (is(token, "tag-close")) {
2901
+ tag.selfClosing = token.value == '/>';
2902
+ return tag;
2903
+ }
2904
+ tag.start.column += token.value.length;
2905
+ }
2906
+
2907
+ return null;
2908
+ };
2909
+
2910
+ this._findEndTagInLine = function(session, row, tagName, startColumn) {
2911
+ var tokens = session.getTokens(row);
2912
+ var column = 0;
2913
+ for (var i = 0; i < tokens.length; i++) {
2914
+ var token = tokens[i];
2915
+ column += token.value.length;
2916
+ if (column < startColumn)
2917
+ continue;
2918
+ if (is(token, "end-tag-open")) {
2919
+ token = tokens[i + 1];
2920
+ if (token && token.value == tagName)
2921
+ return true;
2922
+ }
2923
+ }
2924
+ return false;
2925
+ };
2926
+ this._readTagForward = function(iterator) {
2927
+ var token = iterator.getCurrentToken();
2928
+ if (!token)
2929
+ return null;
2930
+
2931
+ var tag = new Tag();
2932
+ do {
2933
+ if (is(token, "tag-open")) {
2934
+ tag.closing = is(token, "end-tag-open");
2935
+ tag.start.row = iterator.getCurrentTokenRow();
2936
+ tag.start.column = iterator.getCurrentTokenColumn();
2937
+ } else if (is(token, "tag-name")) {
2938
+ tag.tagName = token.value;
2939
+ } else if (is(token, "tag-close")) {
2940
+ tag.selfClosing = token.value == "/>";
2941
+ tag.end.row = iterator.getCurrentTokenRow();
2942
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
2943
+ iterator.stepForward();
2944
+ return tag;
2945
+ }
2946
+ } while(token = iterator.stepForward());
2947
+
2948
+ return null;
2949
+ };
2950
+
2951
+ this._readTagBackward = function(iterator) {
2952
+ var token = iterator.getCurrentToken();
2953
+ if (!token)
2954
+ return null;
2955
+
2956
+ var tag = new Tag();
2957
+ do {
2958
+ if (is(token, "tag-open")) {
2959
+ tag.closing = is(token, "end-tag-open");
2960
+ tag.start.row = iterator.getCurrentTokenRow();
2961
+ tag.start.column = iterator.getCurrentTokenColumn();
2962
+ iterator.stepBackward();
2963
+ return tag;
2964
+ } else if (is(token, "tag-name")) {
2965
+ tag.tagName = token.value;
2966
+ } else if (is(token, "tag-close")) {
2967
+ tag.selfClosing = token.value == "/>";
2968
+ tag.end.row = iterator.getCurrentTokenRow();
2969
+ tag.end.column = iterator.getCurrentTokenColumn() + token.value.length;
2970
+ }
2971
+ } while(token = iterator.stepBackward());
2972
+
2973
+ return null;
2974
+ };
2975
+
2976
+ this._pop = function(stack, tag) {
2977
+ while (stack.length) {
2978
+
2979
+ var top = stack[stack.length-1];
2980
+ if (!tag || top.tagName == tag.tagName) {
2981
+ return stack.pop();
2982
+ }
2983
+ else if (this.optionalEndTags.hasOwnProperty(tag.tagName)) {
2984
+ return;
2985
+ }
2986
+ else if (this.optionalEndTags.hasOwnProperty(top.tagName)) {
2987
+ stack.pop();
2988
+ continue;
2989
+ } else {
2990
+ return null;
2991
+ }
2992
+ }
2993
+ };
2994
+
2995
+ this.getFoldWidgetRange = function(session, foldStyle, row) {
2996
+ var firstTag = this._getFirstTagInLine(session, row);
2997
+
2998
+ if (!firstTag)
2999
+ return null;
3000
+
3001
+ var isBackward = firstTag.closing || firstTag.selfClosing;
3002
+ var stack = [];
3003
+ var tag;
3004
+
3005
+ if (!isBackward) {
3006
+ var iterator = new TokenIterator(session, row, firstTag.start.column);
3007
+ var start = {
3008
+ row: row,
3009
+ column: firstTag.start.column + firstTag.tagName.length + 2
3010
+ };
3011
+ while (tag = this._readTagForward(iterator)) {
3012
+ if (tag.selfClosing) {
3013
+ if (!stack.length) {
3014
+ tag.start.column += tag.tagName.length + 2;
3015
+ tag.end.column -= 2;
3016
+ return Range.fromPoints(tag.start, tag.end);
3017
+ } else
3018
+ continue;
3019
+ }
3020
+
3021
+ if (tag.closing) {
3022
+ this._pop(stack, tag);
3023
+ if (stack.length == 0)
3024
+ return Range.fromPoints(start, tag.start);
3025
+ }
3026
+ else {
3027
+ stack.push(tag);
3028
+ }
3029
+ }
3030
+ }
3031
+ else {
3032
+ var iterator = new TokenIterator(session, row, firstTag.end.column);
3033
+ var end = {
3034
+ row: row,
3035
+ column: firstTag.start.column
3036
+ };
3037
+
3038
+ while (tag = this._readTagBackward(iterator)) {
3039
+ if (tag.selfClosing) {
3040
+ if (!stack.length) {
3041
+ tag.start.column += tag.tagName.length + 2;
3042
+ tag.end.column -= 2;
3043
+ return Range.fromPoints(tag.start, tag.end);
3044
+ } else
3045
+ continue;
3046
+ }
3047
+
3048
+ if (!tag.closing) {
3049
+ this._pop(stack, tag);
3050
+ if (stack.length == 0) {
3051
+ tag.start.column += tag.tagName.length + 2;
3052
+ return Range.fromPoints(tag.start, end);
3053
+ }
3054
+ }
3055
+ else {
3056
+ stack.push(tag);
3057
+ }
3058
+ }
3059
+ }
3060
+
3061
+ };
3062
+
3063
+ }).call(FoldMode.prototype);
3064
+
3065
+ });
3066
+
3067
+ define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) {
3068
+ "use strict";
3069
+
3070
+ var oop = require("../../lib/oop");
3071
+ var MixedFoldMode = require("./mixed").FoldMode;
3072
+ var XmlFoldMode = require("./xml").FoldMode;
3073
+ var CStyleFoldMode = require("./cstyle").FoldMode;
3074
+
3075
+ var FoldMode = exports.FoldMode = function(voidElements, optionalTags) {
3076
+ MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), {
3077
+ "js-": new CStyleFoldMode(),
3078
+ "css-": new CStyleFoldMode()
3079
+ });
3080
+ };
3081
+
3082
+ oop.inherits(FoldMode, MixedFoldMode);
3083
+
3084
+ });
3085
+
3086
+ define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) {
3087
+ "use strict";
3088
+
3089
+ var TokenIterator = require("../token_iterator").TokenIterator;
3090
+
3091
+ var commonAttributes = [
3092
+ "accesskey",
3093
+ "class",
3094
+ "contenteditable",
3095
+ "contextmenu",
3096
+ "dir",
3097
+ "draggable",
3098
+ "dropzone",
3099
+ "hidden",
3100
+ "id",
3101
+ "inert",
3102
+ "itemid",
3103
+ "itemprop",
3104
+ "itemref",
3105
+ "itemscope",
3106
+ "itemtype",
3107
+ "lang",
3108
+ "spellcheck",
3109
+ "style",
3110
+ "tabindex",
3111
+ "title",
3112
+ "translate"
3113
+ ];
3114
+
3115
+ var eventAttributes = [
3116
+ "onabort",
3117
+ "onblur",
3118
+ "oncancel",
3119
+ "oncanplay",
3120
+ "oncanplaythrough",
3121
+ "onchange",
3122
+ "onclick",
3123
+ "onclose",
3124
+ "oncontextmenu",
3125
+ "oncuechange",
3126
+ "ondblclick",
3127
+ "ondrag",
3128
+ "ondragend",
3129
+ "ondragenter",
3130
+ "ondragleave",
3131
+ "ondragover",
3132
+ "ondragstart",
3133
+ "ondrop",
3134
+ "ondurationchange",
3135
+ "onemptied",
3136
+ "onended",
3137
+ "onerror",
3138
+ "onfocus",
3139
+ "oninput",
3140
+ "oninvalid",
3141
+ "onkeydown",
3142
+ "onkeypress",
3143
+ "onkeyup",
3144
+ "onload",
3145
+ "onloadeddata",
3146
+ "onloadedmetadata",
3147
+ "onloadstart",
3148
+ "onmousedown",
3149
+ "onmousemove",
3150
+ "onmouseout",
3151
+ "onmouseover",
3152
+ "onmouseup",
3153
+ "onmousewheel",
3154
+ "onpause",
3155
+ "onplay",
3156
+ "onplaying",
3157
+ "onprogress",
3158
+ "onratechange",
3159
+ "onreset",
3160
+ "onscroll",
3161
+ "onseeked",
3162
+ "onseeking",
3163
+ "onselect",
3164
+ "onshow",
3165
+ "onstalled",
3166
+ "onsubmit",
3167
+ "onsuspend",
3168
+ "ontimeupdate",
3169
+ "onvolumechange",
3170
+ "onwaiting"
3171
+ ];
3172
+
3173
+ var globalAttributes = commonAttributes.concat(eventAttributes);
3174
+
3175
+ var attributeMap = {
3176
+ "html": ["manifest"],
3177
+ "head": [],
3178
+ "title": [],
3179
+ "base": ["href", "target"],
3180
+ "link": ["href", "hreflang", "rel", "media", "type", "sizes"],
3181
+ "meta": ["http-equiv", "name", "content", "charset"],
3182
+ "style": ["type", "media", "scoped"],
3183
+ "script": ["charset", "type", "src", "defer", "async"],
3184
+ "noscript": ["href"],
3185
+ "body": ["onafterprint", "onbeforeprint", "onbeforeunload", "onhashchange", "onmessage", "onoffline", "onpopstate", "onredo", "onresize", "onstorage", "onundo", "onunload"],
3186
+ "section": [],
3187
+ "nav": [],
3188
+ "article": ["pubdate"],
3189
+ "aside": [],
3190
+ "h1": [],
3191
+ "h2": [],
3192
+ "h3": [],
3193
+ "h4": [],
3194
+ "h5": [],
3195
+ "h6": [],
3196
+ "header": [],
3197
+ "footer": [],
3198
+ "address": [],
3199
+ "main": [],
3200
+ "p": [],
3201
+ "hr": [],
3202
+ "pre": [],
3203
+ "blockquote": ["cite"],
3204
+ "ol": ["start", "reversed"],
3205
+ "ul": [],
3206
+ "li": ["value"],
3207
+ "dl": [],
3208
+ "dt": [],
3209
+ "dd": [],
3210
+ "figure": [],
3211
+ "figcaption": [],
3212
+ "div": [],
3213
+ "a": ["href", "target", "ping", "rel", "media", "hreflang", "type"],
3214
+ "em": [],
3215
+ "strong": [],
3216
+ "small": [],
3217
+ "s": [],
3218
+ "cite": [],
3219
+ "q": ["cite"],
3220
+ "dfn": [],
3221
+ "abbr": [],
3222
+ "data": [],
3223
+ "time": ["datetime"],
3224
+ "code": [],
3225
+ "var": [],
3226
+ "samp": [],
3227
+ "kbd": [],
3228
+ "sub": [],
3229
+ "sup": [],
3230
+ "i": [],
3231
+ "b": [],
3232
+ "u": [],
3233
+ "mark": [],
3234
+ "ruby": [],
3235
+ "rt": [],
3236
+ "rp": [],
3237
+ "bdi": [],
3238
+ "bdo": [],
3239
+ "span": [],
3240
+ "br": [],
3241
+ "wbr": [],
3242
+ "ins": ["cite", "datetime"],
3243
+ "del": ["cite", "datetime"],
3244
+ "img": ["alt", "src", "height", "width", "usemap", "ismap"],
3245
+ "iframe": ["name", "src", "height", "width", "sandbox", "seamless"],
3246
+ "embed": ["src", "height", "width", "type"],
3247
+ "object": ["param", "data", "type", "height" , "width", "usemap", "name", "form", "classid"],
3248
+ "param": ["name", "value"],
3249
+ "video": ["src", "autobuffer", "autoplay", "loop", "controls", "width", "height", "poster"],
3250
+ "audio": ["src", "autobuffer", "autoplay", "loop", "controls"],
3251
+ "source": ["src", "type", "media"],
3252
+ "track": ["kind", "src", "srclang", "label", "default"],
3253
+ "canvas": ["width", "height"],
3254
+ "map": ["name"],
3255
+ "area": ["shape", "coords", "href", "hreflang", "alt", "target", "media", "rel", "ping", "type"],
3256
+ "svg": [],
3257
+ "math": [],
3258
+ "table": ["summary"],
3259
+ "caption": [],
3260
+ "colgroup": ["span"],
3261
+ "col": ["span"],
3262
+ "tbody": [],
3263
+ "thead": [],
3264
+ "tfoot": [],
3265
+ "tr": [],
3266
+ "td": ["headers", "rowspan", "colspan"],
3267
+ "th": ["headers", "rowspan", "colspan", "scope"],
3268
+ "form": ["accept-charset", "action", "autocomplete", "enctype", "method", "name", "novalidate", "target"],
3269
+ "fieldset": ["disabled", "form", "name"],
3270
+ "legend": [],
3271
+ "label": ["form", "for"],
3272
+ "input": ["type", "accept", "alt", "autocomplete", "checked", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "height", "list", "max", "maxlength", "min", "multiple", "pattern", "placeholder", "readonly", "required", "size", "src", "step", "width", "files", "value"],
3273
+ "button": ["autofocus", "disabled", "form", "formaction", "formenctype", "formmethod", "formnovalidate", "formtarget", "name", "value", "type"],
3274
+ "select": ["autofocus", "disabled", "form", "multiple", "name", "size"],
3275
+ "datalist": [],
3276
+ "optgroup": ["disabled", "label"],
3277
+ "option": ["disabled", "selected", "label", "value"],
3278
+ "textarea": ["autofocus", "disabled", "form", "maxlength", "name", "placeholder", "readonly", "required", "rows", "cols", "wrap"],
3279
+ "keygen": ["autofocus", "challenge", "disabled", "form", "keytype", "name"],
3280
+ "output": ["for", "form", "name"],
3281
+ "progress": ["value", "max"],
3282
+ "meter": ["value", "min", "max", "low", "high", "optimum"],
3283
+ "details": ["open"],
3284
+ "summary": [],
3285
+ "command": ["type", "label", "icon", "disabled", "checked", "radiogroup", "command"],
3286
+ "menu": ["type", "label"],
3287
+ "dialog": ["open"]
3288
+ };
3289
+
3290
+ var elements = Object.keys(attributeMap);
3291
+
3292
+ function is(token, type) {
3293
+ return token.type.lastIndexOf(type + ".xml") > -1;
3294
+ }
3295
+
3296
+ function findTagName(session, pos) {
3297
+ var iterator = new TokenIterator(session, pos.row, pos.column);
3298
+ var token = iterator.getCurrentToken();
3299
+ while (token && !is(token, "tag-name")){
3300
+ token = iterator.stepBackward();
3301
+ }
3302
+ if (token)
3303
+ return token.value;
3304
+ }
3305
+
3306
+ var HtmlCompletions = function() {
3307
+
3308
+ };
3309
+
3310
+ (function() {
3311
+
3312
+ this.getCompletions = function(state, session, pos, prefix) {
3313
+ var token = session.getTokenAt(pos.row, pos.column);
3314
+
3315
+ if (!token)
3316
+ return [];
3317
+ if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open"))
3318
+ return this.getTagCompletions(state, session, pos, prefix);
3319
+ if (is(token, "tag-whitespace") || is(token, "attribute-name"))
3320
+ return this.getAttributeCompetions(state, session, pos, prefix);
3321
+
3322
+ return [];
3323
+ };
3324
+
3325
+ this.getTagCompletions = function(state, session, pos, prefix) {
3326
+ return elements.map(function(element){
3327
+ return {
3328
+ value: element,
3329
+ meta: "tag",
3330
+ score: Number.MAX_VALUE
3331
+ };
3332
+ });
3333
+ };
3334
+
3335
+ this.getAttributeCompetions = function(state, session, pos, prefix) {
3336
+ var tagName = findTagName(session, pos);
3337
+ if (!tagName)
3338
+ return [];
3339
+ var attributes = globalAttributes;
3340
+ if (tagName in attributeMap) {
3341
+ attributes = attributes.concat(attributeMap[tagName]);
3342
+ }
3343
+ return attributes.map(function(attribute){
3344
+ return {
3345
+ caption: attribute,
3346
+ snippet: attribute + '="$0"',
3347
+ meta: "attribute",
3348
+ score: Number.MAX_VALUE
3349
+ };
3350
+ });
3351
+ };
3352
+
3353
+ }).call(HtmlCompletions.prototype);
3354
+
3355
+ exports.HtmlCompletions = HtmlCompletions;
3356
+ });
3357
+
3358
+ define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) {
3359
+ "use strict";
3360
+
3361
+ var oop = require("../lib/oop");
3362
+ var lang = require("../lib/lang");
3363
+ var TextMode = require("./text").Mode;
3364
+ var JavaScriptMode = require("./javascript").Mode;
3365
+ var CssMode = require("./css").Mode;
3366
+ var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
3367
+ var XmlBehaviour = require("./behaviour/xml").XmlBehaviour;
3368
+ var HtmlFoldMode = require("./folding/html").FoldMode;
3369
+ var HtmlCompletions = require("./html_completions").HtmlCompletions;
3370
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
3371
+ var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"];
3372
+ var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"];
3373
+
3374
+ var Mode = function(options) {
3375
+ this.fragmentContext = options && options.fragmentContext;
3376
+ this.HighlightRules = HtmlHighlightRules;
3377
+ this.$behaviour = new XmlBehaviour();
3378
+ this.$completer = new HtmlCompletions();
3379
+
3380
+ this.createModeDelegates({
3381
+ "js-": JavaScriptMode,
3382
+ "css-": CssMode
3383
+ });
3384
+
3385
+ this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags));
3386
+ };
3387
+ oop.inherits(Mode, TextMode);
3388
+
3389
+ (function() {
3390
+
3391
+ this.blockComment = {start: "<!--", end: "-->"};
3392
+
3393
+ this.voidElements = lang.arrayToMap(voidElements);
3394
+
3395
+ this.getNextLineIndent = function(state, line, tab) {
3396
+ return this.$getIndent(line);
3397
+ };
3398
+
3399
+ this.checkOutdent = function(state, line, input) {
3400
+ return false;
3401
+ };
3402
+
3403
+ this.getCompletions = function(state, session, pos, prefix) {
3404
+ return this.$completer.getCompletions(state, session, pos, prefix);
3405
+ };
3406
+
3407
+ this.createWorker = function(session) {
3408
+ if (this.constructor != Mode)
3409
+ return;
3410
+ var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker");
3411
+ worker.attachToDocument(session.getDocument());
3412
+
3413
+ if (this.fragmentContext)
3414
+ worker.call("setOptions", [{context: this.fragmentContext}]);
3415
+
3416
+ worker.on("error", function(e) {
3417
+ session.setAnnotations(e.data);
3418
+ });
3419
+
3420
+ worker.on("terminate", function() {
3421
+ session.clearAnnotations();
3422
+ });
3423
+
3424
+ return worker;
3425
+ };
3426
+
3427
+ this.$id = "ace/mode/html";
3428
+ }).call(Mode.prototype);
3429
+
3430
+ exports.Mode = Mode;
3431
+ });
3432
+
3433
+ define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"], function(require, exports, module) {
3434
+ "use strict";
3435
+
3436
+ var oop = require("../lib/oop");
3437
+ var TextMode = require("./text").Mode;
3438
+ var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules;
3439
+ var PhpLangHighlightRules = require("./php_highlight_rules").PhpLangHighlightRules;
3440
+ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
3441
+ var Range = require("../range").Range;
3442
+ var WorkerClient = require("../worker/worker_client").WorkerClient;
3443
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
3444
+ var CStyleFoldMode = require("./folding/cstyle").FoldMode;
3445
+ var unicode = require("../unicode");
3446
+ var HtmlMode = require("./html").Mode;
3447
+ var JavaScriptMode = require("./javascript").Mode;
3448
+ var CssMode = require("./css").Mode;
3449
+
3450
+ var PhpMode = function(opts) {
3451
+ this.HighlightRules = PhpLangHighlightRules;
3452
+ this.$outdent = new MatchingBraceOutdent();
3453
+ this.$behaviour = new CstyleBehaviour();
3454
+ this.foldingRules = new CStyleFoldMode();
3455
+ };
3456
+ oop.inherits(PhpMode, TextMode);
3457
+
3458
+ (function() {
3459
+
3460
+ this.getNextLineIndent = function(state, line, tab) {
3461
+ var indent = this.$getIndent(line);
3462
+
3463
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
3464
+ var tokens = tokenizedLine.tokens;
3465
+ var endState = tokenizedLine.state;
3466
+
3467
+ if (tokens.length && tokens[tokens.length-1].type == "comment") {
3468
+ return indent;
3469
+ }
3470
+
3471
+ if (state == "start") {
2424
3472
  var match = line.match(/^.*[\{\(\[\:]\s*$/);
2425
3473
  if (match) {
2426
3474
  indent += tab;
2427
3475
  }
2428
- } else if (state == "php-doc-start") {
2429
- if (endState != "php-doc-start") {
3476
+ } else if (state == "doc-start") {
3477
+ if (endState != "doc-start") {
2430
3478
  return "";
2431
3479
  }
2432
3480
  var match = line.match(/^\s*(\/?)\*/);
@@ -2449,10 +3497,48 @@ oop.inherits(Mode, TextMode);
2449
3497
  this.$outdent.autoOutdent(doc, row);
2450
3498
  };
2451
3499
 
3500
+ this.$id = "ace/mode/php-inline";
3501
+ }).call(PhpMode.prototype);
3502
+
3503
+ var Mode = function(opts) {
3504
+ if (opts && opts.inline) {
3505
+ PhpMode.call(this);
3506
+ return;
3507
+ }
3508
+ HtmlMode.call(this);
3509
+ this.HighlightRules = PhpHighlightRules;
3510
+ this.createModeDelegates({
3511
+ "js-": JavaScriptMode,
3512
+ "css-": CssMode,
3513
+ "php-": PhpMode
3514
+ });
3515
+ };
3516
+ oop.inherits(Mode, HtmlMode);
3517
+
3518
+ (function() {
3519
+
3520
+ this.tokenRe = new RegExp("^["
3521
+ + unicode.packages.L
3522
+ + unicode.packages.Mn + unicode.packages.Mc
3523
+ + unicode.packages.Nd
3524
+ + unicode.packages.Pc + "\_]+", "g"
3525
+ );
3526
+
3527
+ this.nonTokenRe = new RegExp("^(?:[^"
3528
+ + unicode.packages.L
3529
+ + unicode.packages.Mn + unicode.packages.Mc
3530
+ + unicode.packages.Nd
3531
+ + unicode.packages.Pc + "\_]|\s])+", "g"
3532
+ );
3533
+
3534
+
3535
+ this.lineCommentStart = ["//", "#"];
3536
+ this.blockComment = {start: "/*", end: "*/"};
3537
+
2452
3538
  this.createWorker = function(session) {
2453
3539
  var worker = new WorkerClient(["ace"], "ace/mode/php_worker", "PhpWorker");
2454
3540
  worker.attachToDocument(session.getDocument());
2455
-
3541
+
2456
3542
  if (this.inlinePhp)
2457
3543
  worker.call("setOptions", [{inline: true}]);
2458
3544