ace-rails-ap 4.0.0 → 4.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ace/rails/version.rb +1 -1
  3. data/vendor/assets/javascripts/ace/ace.js +993 -613
  4. data/vendor/assets/javascripts/ace/ext-chromevox.js +3 -4
  5. data/vendor/assets/javascripts/ace/ext-elastic_tabstops_lite.js +5 -6
  6. data/vendor/assets/javascripts/ace/ext-emmet.js +50 -21
  7. data/vendor/assets/javascripts/ace/ext-language_tools.js +21 -19
  8. data/vendor/assets/javascripts/ace/ext-modelist.js +11 -6
  9. data/vendor/assets/javascripts/ace/ext-old_ie.js +12 -5
  10. data/vendor/assets/javascripts/ace/ext-searchbox.js +12 -5
  11. data/vendor/assets/javascripts/ace/ext-settings_menu.js +14 -7
  12. data/vendor/assets/javascripts/ace/ext-static_highlight.js +5 -5
  13. data/vendor/assets/javascripts/ace/ext-statusbar.js +14 -12
  14. data/vendor/assets/javascripts/ace/ext-textarea.js +1 -2
  15. data/vendor/assets/javascripts/ace/ext-themelist.js +2 -0
  16. data/vendor/assets/javascripts/ace/ext-whitespace.js +17 -13
  17. data/vendor/assets/javascripts/ace/keybinding-emacs.js +76 -78
  18. data/vendor/assets/javascripts/ace/keybinding-vim.js +221 -80
  19. data/vendor/assets/javascripts/ace/mode-abc.js +2 -3
  20. data/vendor/assets/javascripts/ace/mode-actionscript.js +2 -3
  21. data/vendor/assets/javascripts/ace/mode-apache_conf.js +2 -3
  22. data/vendor/assets/javascripts/ace/mode-applescript.js +2 -3
  23. data/vendor/assets/javascripts/ace/mode-autohotkey.js +2 -3
  24. data/vendor/assets/javascripts/ace/mode-batchfile.js +2 -3
  25. data/vendor/assets/javascripts/ace/mode-c_cpp.js +8 -5
  26. data/vendor/assets/javascripts/ace/mode-coffee.js +1 -1
  27. data/vendor/assets/javascripts/ace/mode-coldfusion.js +533 -139
  28. data/vendor/assets/javascripts/ace/mode-csharp.js +4 -5
  29. data/vendor/assets/javascripts/ace/mode-css.js +185 -6
  30. data/vendor/assets/javascripts/ace/mode-curly.js +495 -138
  31. data/vendor/assets/javascripts/ace/mode-d.js +2 -3
  32. data/vendor/assets/javascripts/ace/mode-dart.js +8 -5
  33. data/vendor/assets/javascripts/ace/mode-django.js +495 -138
  34. data/vendor/assets/javascripts/ace/mode-dockerfile.js +59 -14
  35. data/vendor/assets/javascripts/ace/mode-dot.js +2 -3
  36. data/vendor/assets/javascripts/ace/mode-ejs.js +497 -152
  37. data/vendor/assets/javascripts/ace/mode-elm.js +6 -4
  38. data/vendor/assets/javascripts/ace/mode-erlang.js +3 -4
  39. data/vendor/assets/javascripts/ace/mode-forth.js +3 -4
  40. data/vendor/assets/javascripts/ace/mode-ftl.js +145 -17
  41. data/vendor/assets/javascripts/ace/mode-gherkin.js +58 -25
  42. data/vendor/assets/javascripts/ace/mode-glsl.js +8 -5
  43. data/vendor/assets/javascripts/ace/mode-golang.js +36 -25
  44. data/vendor/assets/javascripts/ace/mode-groovy.js +145 -17
  45. data/vendor/assets/javascripts/ace/mode-handlebars.js +496 -140
  46. data/vendor/assets/javascripts/ace/mode-haskell.js +3 -4
  47. data/vendor/assets/javascripts/ace/mode-haxe.js +4 -5
  48. data/vendor/assets/javascripts/ace/mode-html.js +495 -138
  49. data/vendor/assets/javascripts/ace/mode-html_elixir.js +3372 -0
  50. data/vendor/assets/javascripts/ace/mode-html_ruby.js +495 -138
  51. data/vendor/assets/javascripts/ace/mode-ini.js +1 -1
  52. data/vendor/assets/javascripts/ace/mode-io.js +2 -3
  53. data/vendor/assets/javascripts/ace/mode-jack.js +4 -5
  54. data/vendor/assets/javascripts/ace/mode-jade.js +155 -25
  55. data/vendor/assets/javascripts/ace/mode-java.js +145 -17
  56. data/vendor/assets/javascripts/ace/mode-javascript.js +145 -17
  57. data/vendor/assets/javascripts/ace/mode-json.js +4 -5
  58. data/vendor/assets/javascripts/ace/mode-jsoniq.js +4 -5
  59. data/vendor/assets/javascripts/ace/mode-jsp.js +150 -23
  60. data/vendor/assets/javascripts/ace/mode-jsx.js +4 -5
  61. data/vendor/assets/javascripts/ace/mode-julia.js +2 -3
  62. data/vendor/assets/javascripts/ace/mode-less.js +5 -6
  63. data/vendor/assets/javascripts/ace/mode-liquid.js +145 -17
  64. data/vendor/assets/javascripts/ace/mode-logiql.js +2 -2
  65. data/vendor/assets/javascripts/ace/mode-lsl.js +8 -10
  66. data/vendor/assets/javascripts/ace/mode-lua.js +2 -2
  67. data/vendor/assets/javascripts/ace/mode-luapage.js +497 -140
  68. data/vendor/assets/javascripts/ace/mode-makefile.js +54 -8
  69. data/vendor/assets/javascripts/ace/mode-markdown.js +497 -139
  70. data/vendor/assets/javascripts/ace/mode-mask.js +150 -22
  71. data/vendor/assets/javascripts/ace/mode-maze.js +283 -0
  72. data/vendor/assets/javascripts/ace/mode-mel.js +4 -5
  73. data/vendor/assets/javascripts/ace/mode-mushcode.js +0 -1
  74. data/vendor/assets/javascripts/ace/mode-mysql.js +1 -1
  75. data/vendor/assets/javascripts/ace/mode-nix.js +8 -5
  76. data/vendor/assets/javascripts/ace/mode-objectivec.js +6 -3
  77. data/vendor/assets/javascripts/ace/mode-perl.js +4 -5
  78. data/vendor/assets/javascripts/ace/mode-pgsql.js +141 -12
  79. data/vendor/assets/javascripts/ace/mode-php.js +9872 -143
  80. data/vendor/assets/javascripts/ace/mode-powershell.js +4 -5
  81. data/vendor/assets/javascripts/ace/mode-praat.js +18 -14
  82. data/vendor/assets/javascripts/ace/mode-prolog.js +2 -3
  83. data/vendor/assets/javascripts/ace/mode-protobuf.js +8 -5
  84. data/vendor/assets/javascripts/ace/mode-rhtml.js +495 -138
  85. data/vendor/assets/javascripts/ace/mode-ruby.js +2 -2
  86. data/vendor/assets/javascripts/ace/mode-rust.js +32 -39
  87. data/vendor/assets/javascripts/ace/mode-scad.js +4 -5
  88. data/vendor/assets/javascripts/ace/mode-scala.js +158 -21
  89. data/vendor/assets/javascripts/ace/mode-scheme.js +118 -1
  90. data/vendor/assets/javascripts/ace/mode-scss.js +4 -5
  91. data/vendor/assets/javascripts/ace/mode-sh.js +58 -13
  92. data/vendor/assets/javascripts/ace/mode-sjs.js +145 -17
  93. data/vendor/assets/javascripts/ace/mode-smarty.js +495 -138
  94. data/vendor/assets/javascripts/ace/mode-soy_template.js +496 -140
  95. data/vendor/assets/javascripts/ace/mode-sql.js +12 -4
  96. data/vendor/assets/javascripts/ace/mode-sqlserver.js +437 -0
  97. data/vendor/assets/javascripts/ace/mode-svg.js +147 -20
  98. data/vendor/assets/javascripts/ace/mode-swift.js +738 -0
  99. data/vendor/assets/javascripts/ace/mode-swig.js +1099 -0
  100. data/vendor/assets/javascripts/ace/mode-tcl.js +2 -3
  101. data/vendor/assets/javascripts/ace/mode-tex.js +1 -0
  102. data/vendor/assets/javascripts/ace/mode-toml.js +4 -0
  103. data/vendor/assets/javascripts/ace/mode-twig.js +495 -138
  104. data/vendor/assets/javascripts/ace/mode-typescript.js +147 -19
  105. data/vendor/assets/javascripts/ace/mode-vala.js +4 -5
  106. data/vendor/assets/javascripts/ace/mode-vbscript.js +26 -13
  107. data/vendor/assets/javascripts/ace/mode-velocity.js +495 -138
  108. data/vendor/assets/javascripts/ace/mode-verilog.js +8 -0
  109. data/vendor/assets/javascripts/ace/mode-xml.js +2 -3
  110. data/vendor/assets/javascripts/ace/mode-xquery.js +4 -5
  111. data/vendor/assets/javascripts/ace/snippets/actionscript.js +5 -0
  112. data/vendor/assets/javascripts/ace/snippets/html_elixir.js +7 -0
  113. data/vendor/assets/javascripts/ace/snippets/java.js +6 -0
  114. data/vendor/assets/javascripts/ace/snippets/javascript.js +13 -0
  115. data/vendor/assets/javascripts/ace/snippets/lsl.js +166 -0
  116. data/vendor/assets/javascripts/ace/snippets/maze.js +16 -0
  117. data/vendor/assets/javascripts/ace/snippets/php.js +105 -4
  118. data/vendor/assets/javascripts/ace/snippets/sqlserver.js +76 -0
  119. data/vendor/assets/javascripts/ace/snippets/swift.js +7 -0
  120. data/vendor/assets/javascripts/ace/snippets/swig.js +7 -0
  121. data/vendor/assets/javascripts/ace/theme-clouds.js +0 -1
  122. data/vendor/assets/javascripts/ace/theme-clouds_midnight.js +0 -1
  123. data/vendor/assets/javascripts/ace/theme-cobalt.js +3 -3
  124. data/vendor/assets/javascripts/ace/theme-dawn.js +0 -1
  125. data/vendor/assets/javascripts/ace/theme-github.js +0 -1
  126. data/vendor/assets/javascripts/ace/theme-idle_fingers.js +0 -1
  127. data/vendor/assets/javascripts/ace/theme-iplastic.js +121 -0
  128. data/vendor/assets/javascripts/ace/theme-katzenmilch.js +1 -2
  129. data/vendor/assets/javascripts/ace/theme-kr_theme.js +0 -1
  130. data/vendor/assets/javascripts/ace/theme-kuroir.js +0 -1
  131. data/vendor/assets/javascripts/ace/theme-merbivore.js +0 -1
  132. data/vendor/assets/javascripts/ace/theme-merbivore_soft.js +0 -1
  133. data/vendor/assets/javascripts/ace/theme-mono_industrial.js +0 -1
  134. data/vendor/assets/javascripts/ace/theme-monokai.js +0 -1
  135. data/vendor/assets/javascripts/ace/theme-pastel_on_dark.js +0 -1
  136. data/vendor/assets/javascripts/ace/theme-solarized_dark.js +0 -1
  137. data/vendor/assets/javascripts/ace/theme-solarized_light.js +0 -1
  138. data/vendor/assets/javascripts/ace/theme-sqlserver.js +138 -0
  139. data/vendor/assets/javascripts/ace/theme-terminal.js +0 -1
  140. data/vendor/assets/javascripts/ace/theme-textmate.js +0 -1
  141. data/vendor/assets/javascripts/ace/theme-tomorrow.js +0 -1
  142. data/vendor/assets/javascripts/ace/theme-tomorrow_night.js +0 -1
  143. data/vendor/assets/javascripts/ace/theme-tomorrow_night_blue.js +0 -1
  144. data/vendor/assets/javascripts/ace/theme-tomorrow_night_bright.js +0 -1
  145. data/vendor/assets/javascripts/ace/theme-tomorrow_night_eighties.js +0 -1
  146. data/vendor/assets/javascripts/ace/theme-twilight.js +0 -1
  147. data/vendor/assets/javascripts/ace/theme-vibrant_ink.js +0 -1
  148. data/vendor/assets/javascripts/ace/theme-xcode.js +0 -1
  149. data/vendor/assets/javascripts/ace/worker-coffee.js +576 -6015
  150. data/vendor/assets/javascripts/ace/worker-css.js +529 -449
  151. data/vendor/assets/javascripts/ace/worker-html.js +528 -448
  152. data/vendor/assets/javascripts/ace/worker-javascript.js +8719 -7656
  153. data/vendor/assets/javascripts/ace/worker-json.js +530 -450
  154. data/vendor/assets/javascripts/ace/worker-lua.js +530 -450
  155. data/vendor/assets/javascripts/ace/worker-php.js +530 -450
  156. data/vendor/assets/javascripts/ace/worker-xml.js +530 -450
  157. data/vendor/assets/javascripts/ace/worker-xquery.js +529 -449
  158. metadata +14 -2
@@ -5,8 +5,7 @@ var oop = require("../lib/oop");
5
5
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
6
 
7
7
  var XmlHighlightRules = function(normalize) {
8
-
9
- var tagRegex = "[a-zA-Z][-_a-zA-Z0-9]*";
8
+ var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*";
10
9
 
11
10
  this.$rules = {
12
11
  start : [
@@ -640,7 +639,7 @@ oop.inherits(Mode, TextMode);
640
639
 
641
640
  this.blockComment = {start: "<!--", end: "-->"};
642
641
 
643
- this.createWorker = function(session) {
642
+ this.createWorker = function(session) {
644
643
  var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker");
645
644
  worker.attachToDocument(session.getDocument());
646
645
 
@@ -717,6 +716,7 @@ define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/
717
716
  var oop = require("../lib/oop");
718
717
  var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
719
718
  var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
719
+ var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
720
720
 
721
721
  var JavaScriptHighlightRules = function(options) {
722
722
  var keywordMapper = this.createKeywordMapper({
@@ -746,7 +746,6 @@ var JavaScriptHighlightRules = function(options) {
746
746
  "constant.language.boolean": "true|false"
747
747
  }, "identifier");
748
748
  var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void";
749
- var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b";
750
749
 
751
750
  var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex
752
751
  "u[0-9a-fA-F]{4}|" + // unicode
@@ -834,15 +833,6 @@ var JavaScriptHighlightRules = function(options) {
834
833
  token : "keyword",
835
834
  regex : "(?:" + kwBeforeRe + ")\\b",
836
835
  next : "start"
837
- }, {
838
- token : ["punctuation.operator", "support.function"],
839
- regex : /(\.)(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
840
- }, {
841
- token : ["punctuation.operator", "support.function.dom"],
842
- regex : /(\.)(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
843
- }, {
844
- token : ["punctuation.operator", "support.constant"],
845
- regex : /(\.)(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
846
836
  }, {
847
837
  token : ["support.constant"],
848
838
  regex : /that\b/
@@ -852,9 +842,13 @@ var JavaScriptHighlightRules = function(options) {
852
842
  }, {
853
843
  token : keywordMapper,
854
844
  regex : identifierRe
845
+ }, {
846
+ token : "punctuation.operator",
847
+ regex : /[.](?![.])/,
848
+ next : "property"
855
849
  }, {
856
850
  token : "keyword.operator",
857
- regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
851
+ regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
858
852
  next : "start"
859
853
  }, {
860
854
  token : "punctuation.operator",
@@ -872,6 +866,38 @@ var JavaScriptHighlightRules = function(options) {
872
866
  regex: /^#!.*$/
873
867
  }
874
868
  ],
869
+ property: [{
870
+ token : "text",
871
+ regex : "\\s+"
872
+ }, {
873
+ token : [
874
+ "storage.type", "punctuation.operator", "entity.name.function", "text",
875
+ "keyword.operator", "text",
876
+ "storage.type", "text", "entity.name.function", "text", "paren.lparen"
877
+ ],
878
+ regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",
879
+ next: "function_arguments"
880
+ }, {
881
+ token : "punctuation.operator",
882
+ regex : /[.](?![.])/
883
+ }, {
884
+ token : "support.function",
885
+ regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/
886
+ }, {
887
+ token : "support.function.dom",
888
+ regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/
889
+ }, {
890
+ token : "support.constant",
891
+ regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/
892
+ }, {
893
+ token : "identifier",
894
+ regex : identifierRe
895
+ }, {
896
+ regex: "",
897
+ token: "empty",
898
+ next: "no_regex"
899
+ }
900
+ ],
875
901
  "start": [
876
902
  DocCommentHighlightRules.getStartRule("doc-start"),
877
903
  {
@@ -1026,7 +1052,7 @@ var JavaScriptHighlightRules = function(options) {
1026
1052
  if (val == "}" && stack.length) {
1027
1053
  stack.shift();
1028
1054
  this.next = stack.shift();
1029
- if (this.next.indexOf("string") != -1)
1055
+ if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1)
1030
1056
  return "paren.quasi.end";
1031
1057
  }
1032
1058
  return val == "{" ? "paren.lparen" : "paren.rparen";
@@ -1050,6 +1076,9 @@ var JavaScriptHighlightRules = function(options) {
1050
1076
  defaultToken: "string.quasi"
1051
1077
  }]
1052
1078
  });
1079
+
1080
+ if (!options || !options.noJSX)
1081
+ JSX.call(this);
1053
1082
  }
1054
1083
 
1055
1084
  this.embedRules(DocCommentHighlightRules, "doc-",
@@ -1060,6 +1089,105 @@ var JavaScriptHighlightRules = function(options) {
1060
1089
 
1061
1090
  oop.inherits(JavaScriptHighlightRules, TextHighlightRules);
1062
1091
 
1092
+ function JSX() {
1093
+ var tagRegex = identifierRe.replace("\\d", "\\d\\-");
1094
+ var jsxTag = {
1095
+ onMatch : function(val, state, stack) {
1096
+ var offset = val.charAt(1) == "/" ? 2 : 1;
1097
+ if (offset == 1) {
1098
+ if (state != this.nextState)
1099
+ stack.unshift(this.next, this.nextState, 0);
1100
+ else
1101
+ stack.unshift(this.next);
1102
+ stack[2]++;
1103
+ } else if (offset == 2) {
1104
+ if (state == this.nextState) {
1105
+ stack[1]--;
1106
+ if (!stack[1] || stack[1] < 0) {
1107
+ stack.shift();
1108
+ stack.shift();
1109
+ }
1110
+ }
1111
+ }
1112
+ return [{
1113
+ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml",
1114
+ value: val.slice(0, offset)
1115
+ }, {
1116
+ type: "meta.tag.tag-name.xml",
1117
+ value: val.substr(offset)
1118
+ }];
1119
+ },
1120
+ regex : "</?" + tagRegex + "",
1121
+ next: "jsxAttributes",
1122
+ nextState: "jsx"
1123
+ };
1124
+ this.$rules.start.unshift(jsxTag);
1125
+ var jsxJsRule = {
1126
+ regex: "{",
1127
+ token: "paren.quasi.start",
1128
+ push: "start"
1129
+ };
1130
+ this.$rules.jsx = [
1131
+ jsxJsRule,
1132
+ jsxTag,
1133
+ {include : "reference"},
1134
+ {defaultToken: "string"}
1135
+ ];
1136
+ this.$rules.jsxAttributes = [{
1137
+ token : "meta.tag.punctuation.tag-close.xml",
1138
+ regex : "/?>",
1139
+ onMatch : function(value, currentState, stack) {
1140
+ if (currentState == stack[0])
1141
+ stack.shift();
1142
+ if (value.length == 2) {
1143
+ if (stack[0] == this.nextState)
1144
+ stack[1]--;
1145
+ if (!stack[1] || stack[1] < 0) {
1146
+ stack.splice(0, 2);
1147
+ }
1148
+ }
1149
+ this.next = stack[0] || "start";
1150
+ return [{type: this.token, value: value}];
1151
+ },
1152
+ nextState: "jsx"
1153
+ },
1154
+ jsxJsRule,
1155
+ {
1156
+ token : "entity.other.attribute-name.xml",
1157
+ regex : tagRegex
1158
+ }, {
1159
+ token : "keyword.operator.attribute-equals.xml",
1160
+ regex : "="
1161
+ }, {
1162
+ token : "text.tag-whitespace.xml",
1163
+ regex : "\\s+"
1164
+ }, {
1165
+ token : "string.attribute-value.xml",
1166
+ regex : "'",
1167
+ stateName : "jsx_attr_q",
1168
+ push : [
1169
+ {token : "string.attribute-value.xml", regex: "'", next: "pop"},
1170
+ jsxJsRule,
1171
+ {include : "reference"},
1172
+ {defaultToken : "string.attribute-value.xml"}
1173
+ ]
1174
+ }, {
1175
+ token : "string.attribute-value.xml",
1176
+ regex : '"',
1177
+ stateName : "jsx_attr_qq",
1178
+ push : [
1179
+ jsxJsRule,
1180
+ {token : "string.attribute-value.xml", regex: '"', next: "pop"},
1181
+ {include : "reference"},
1182
+ {defaultToken : "string.attribute-value.xml"}
1183
+ ]
1184
+ }];
1185
+ this.$rules.reference = [{
1186
+ token : "constant.language.escape.reference.xml",
1187
+ regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"
1188
+ }];
1189
+ }
1190
+
1063
1191
  exports.JavaScriptHighlightRules = JavaScriptHighlightRules;
1064
1192
  });
1065
1193
 
@@ -1343,8 +1471,8 @@ var CstyleBehaviour = function() {
1343
1471
  if (leftChar == "\\" && token && /escape/.test(token.type))
1344
1472
  return null;
1345
1473
 
1346
- var stringBefore = token && /string/.test(token.type);
1347
- var stringAfter = !rightToken || /string/.test(rightToken.type);
1474
+ var stringBefore = token && /string|escape/.test(token.type);
1475
+ var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
1348
1476
 
1349
1477
  var pair;
1350
1478
  if (rightChar == quote) {
@@ -1485,7 +1613,7 @@ oop.inherits(FoldMode, BaseFoldMode);
1485
1613
  this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
1486
1614
  this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
1487
1615
  this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
1488
- this.startRegionRe = /^\s*(\/\*|\/\/)#region\b/;
1616
+ this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
1489
1617
  this._getFoldWidgetBase = this.getFoldWidget;
1490
1618
  this.getFoldWidget = function(session, foldStyle, row) {
1491
1619
  var line = session.getLine(row);
@@ -1573,13 +1701,12 @@ oop.inherits(FoldMode, BaseFoldMode);
1573
1701
 
1574
1702
  return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
1575
1703
  };
1576
-
1577
1704
  this.getCommentRegionBlock = function(session, line, row) {
1578
1705
  var startColumn = line.search(/\s*$/);
1579
1706
  var maxRow = session.getLength();
1580
1707
  var startRow = row;
1581
1708
 
1582
- var re = /^\s*(?:\/\*|\/\/)#(end)?region\b/;
1709
+ var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
1583
1710
  var depth = 1;
1584
1711
  while (++row < maxRow) {
1585
1712
  line = session.getLine(row);
@@ -0,0 +1,738 @@
1
+ define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) {
2
+ "use strict";
3
+
4
+ var oop = require("../lib/oop");
5
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
6
+
7
+ var DocCommentHighlightRules = function() {
8
+ this.$rules = {
9
+ "start" : [ {
10
+ token : "comment.doc.tag",
11
+ regex : "@[\\w\\d_]+" // TODO: fix email addresses
12
+ },
13
+ DocCommentHighlightRules.getTagRule(),
14
+ {
15
+ defaultToken : "comment.doc",
16
+ caseInsensitive: true
17
+ }]
18
+ };
19
+ };
20
+
21
+ oop.inherits(DocCommentHighlightRules, TextHighlightRules);
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
+
30
+ DocCommentHighlightRules.getStartRule = function(start) {
31
+ return {
32
+ token : "comment.doc", // doc comment
33
+ regex : "\\/\\*(?=\\*)",
34
+ next : start
35
+ };
36
+ };
37
+
38
+ DocCommentHighlightRules.getEndRule = function (start) {
39
+ return {
40
+ token : "comment.doc", // closing comment
41
+ regex : "\\*\\/",
42
+ next : start
43
+ };
44
+ };
45
+
46
+
47
+ exports.DocCommentHighlightRules = DocCommentHighlightRules;
48
+
49
+ });
50
+
51
+ define("ace/mode/swift_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) {
52
+ "use strict";
53
+
54
+ var oop = require("../lib/oop");
55
+ var lang = require("../lib/lang");
56
+ var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules;
57
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
58
+
59
+ var SwiftHighlightRules = function() {
60
+ var keywordMapper = this.createKeywordMapper({
61
+ "variable.language": "",
62
+ "keyword": "__COLUMN__|__FILE__|__FUNCTION__|__LINE__"
63
+ + "|as|associativity|break|case|class|continue|default|deinit|didSet"
64
+ + "|do|dynamicType|else|enum|extension|fallthrough|for|func|get|if|import"
65
+ + "|in|infix|init|inout|is|left|let|let|mutating|new|none|nonmutating"
66
+ + "|operator|override|postfix|precedence|prefix|protocol|return|right"
67
+ + "|safe|Self|self|set|struct|subscript|switch|Type|typealias"
68
+ + "|unowned|unsafe|var|weak|where|while|willSet"
69
+ + "|convenience|dynamic|final|infix|lazy|mutating|nonmutating|optional|override|postfix"
70
+ + "|prefix|required|static",
71
+ "storage.type": "bool|double|Double"
72
+ + "|extension|float|Float|int|Int|private|public|string|String",
73
+ "constant.language":
74
+ "false|Infinity|NaN|nil|no|null|null|off|on|super|this|true|undefined|yes",
75
+ "support.function":
76
+ ""
77
+ }, "identifier");
78
+
79
+ function string(start, options) {
80
+ var nestable = options.nestable || options.interpolation;
81
+ var interpStart = options.interpolation && options.interpolation.nextState || "start";
82
+ var mainRule = {
83
+ regex: start + (options.multiline ? "" : "(?=.)"),
84
+ token: "string.start"
85
+ };
86
+ var nextState = [
87
+ options.escape && {
88
+ regex: options.escape,
89
+ token: "character.escape"
90
+ },
91
+ options.interpolation && {
92
+ token : "paren.quasi.start",
93
+ regex : lang.escapeRegExp(options.interpolation.lead + options.interpolation.open),
94
+ push : interpStart
95
+ },
96
+ options.error && {
97
+ regex: options.error,
98
+ token: "error.invalid"
99
+ },
100
+ {
101
+ regex: start + (options.multiline ? "" : "|$"),
102
+ token: "string.end",
103
+ next: nestable ? "pop" : "start"
104
+ }, {
105
+ defaultToken: "string"
106
+ }
107
+ ].filter(Boolean);
108
+
109
+ if (nestable)
110
+ mainRule.push = nextState;
111
+ else
112
+ mainRule.next = nextState;
113
+
114
+ if (!options.interpolation)
115
+ return mainRule;
116
+
117
+ var open = options.interpolation.open;
118
+ var close = options.interpolation.close;
119
+ var counter = {
120
+ regex: "[" + lang.escapeRegExp(open + close) + "]",
121
+ onMatch: function(val, state, stack) {
122
+ this.next = val == open ? this.nextState : "";
123
+ if (val == open && stack.length) {
124
+ stack.unshift("start", state);
125
+ return "paren";
126
+ }
127
+ if (val == close && stack.length) {
128
+ stack.shift();
129
+ this.next = stack.shift();
130
+ if (this.next.indexOf("string") != -1)
131
+ return "paren.quasi.end";
132
+ }
133
+ return val == open ? "paren.lparen" : "paren.rparen";
134
+ },
135
+ nextState: interpStart
136
+ }
137
+ return [counter, mainRule];
138
+ }
139
+
140
+ function comments() {
141
+ return [{
142
+ token : "comment",
143
+ regex : "\\/\\/(?=.)",
144
+ next : [
145
+ DocCommentHighlightRules.getTagRule(),
146
+ {token : "comment", regex : "$|^", nextState : "start"},
147
+ {defaultToken : "comment", caseInsensitive: true}
148
+ ]
149
+ },
150
+ DocCommentHighlightRules.getStartRule("doc-start"),
151
+ {
152
+ token : "comment.start",
153
+ regex : /\/\*/,
154
+ stateName: "nested_comment",
155
+ push : [
156
+ DocCommentHighlightRules.getTagRule(),
157
+ {token : "comment.start", regex : /\/\*/, push: "nested_comment"},
158
+ {token : "comment.end", regex : "\\*\\/", next : "pop"},
159
+ {defaultToken : "comment", caseInsensitive: true}
160
+ ],
161
+ },
162
+ ];
163
+ }
164
+
165
+
166
+ this.$rules = {
167
+ start: [
168
+ string('"', {
169
+ escape: /\\(?:[0\\tnr"']|u{[a-fA-F1-9]{0,8}})/,
170
+ interpolation: {lead: "\\", open: "(", close: ")"},
171
+ error: /\\./,
172
+ multiline: false
173
+ }),
174
+ comments({type: "c", nestable: true}),
175
+ {
176
+ regex: /@[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,
177
+ token: "variable.parameter"
178
+ },
179
+ {
180
+ regex: /[a-zA-Z_$][a-zA-Z_$\d\u0080-\ufffe]*/,
181
+ token: keywordMapper
182
+ },
183
+ {
184
+ token : "constant.numeric",
185
+ regex : /[+-]?(?:0(?:b[01]+|o[0-7]+|x[\da-fA-F])|\d+(?:(?:\.\d*)?(?:[PpEe][+-]?\d+)?)\b)/
186
+ }, {
187
+ token : "keyword.operator",
188
+ regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,
189
+ next : "start"
190
+ }, {
191
+ token : "punctuation.operator",
192
+ regex : /[?:,;.]/,
193
+ next : "start"
194
+ }, {
195
+ token : "paren.lparen",
196
+ regex : /[\[({]/,
197
+ next : "start"
198
+ }, {
199
+ token : "paren.rparen",
200
+ regex : /[\])}]/
201
+ },
202
+
203
+ ]
204
+ };
205
+ this.embedRules(DocCommentHighlightRules, "doc-",
206
+ [ DocCommentHighlightRules.getEndRule("start") ]);
207
+
208
+ this.normalizeRules();
209
+ };
210
+
211
+
212
+ oop.inherits(SwiftHighlightRules, TextHighlightRules);
213
+
214
+ exports.HighlightRules = SwiftHighlightRules;
215
+ });
216
+
217
+ define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) {
218
+ "use strict";
219
+
220
+ var oop = require("../../lib/oop");
221
+ var Behaviour = require("../behaviour").Behaviour;
222
+ var TokenIterator = require("../../token_iterator").TokenIterator;
223
+ var lang = require("../../lib/lang");
224
+
225
+ var SAFE_INSERT_IN_TOKENS =
226
+ ["text", "paren.rparen", "punctuation.operator"];
227
+ var SAFE_INSERT_BEFORE_TOKENS =
228
+ ["text", "paren.rparen", "punctuation.operator", "comment"];
229
+
230
+ var context;
231
+ var contextCache = {};
232
+ var initContext = function(editor) {
233
+ var id = -1;
234
+ if (editor.multiSelect) {
235
+ id = editor.selection.index;
236
+ if (contextCache.rangeCount != editor.multiSelect.rangeCount)
237
+ contextCache = {rangeCount: editor.multiSelect.rangeCount};
238
+ }
239
+ if (contextCache[id])
240
+ return context = contextCache[id];
241
+ context = contextCache[id] = {
242
+ autoInsertedBrackets: 0,
243
+ autoInsertedRow: -1,
244
+ autoInsertedLineEnd: "",
245
+ maybeInsertedBrackets: 0,
246
+ maybeInsertedRow: -1,
247
+ maybeInsertedLineStart: "",
248
+ maybeInsertedLineEnd: ""
249
+ };
250
+ };
251
+
252
+ var getWrapped = function(selection, selected, opening, closing) {
253
+ var rowDiff = selection.end.row - selection.start.row;
254
+ return {
255
+ text: opening + selected + closing,
256
+ selection: [
257
+ 0,
258
+ selection.start.column + 1,
259
+ rowDiff,
260
+ selection.end.column + (rowDiff ? 0 : 1)
261
+ ]
262
+ };
263
+ };
264
+
265
+ var CstyleBehaviour = function() {
266
+ this.add("braces", "insertion", function(state, action, editor, session, text) {
267
+ var cursor = editor.getCursorPosition();
268
+ var line = session.doc.getLine(cursor.row);
269
+ if (text == '{') {
270
+ initContext(editor);
271
+ var selection = editor.getSelectionRange();
272
+ var selected = session.doc.getTextRange(selection);
273
+ if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) {
274
+ return getWrapped(selection, selected, '{', '}');
275
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
276
+ if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) {
277
+ CstyleBehaviour.recordAutoInsert(editor, session, "}");
278
+ return {
279
+ text: '{}',
280
+ selection: [1, 1]
281
+ };
282
+ } else {
283
+ CstyleBehaviour.recordMaybeInsert(editor, session, "{");
284
+ return {
285
+ text: '{',
286
+ selection: [1, 1]
287
+ };
288
+ }
289
+ }
290
+ } else if (text == '}') {
291
+ initContext(editor);
292
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
293
+ if (rightChar == '}') {
294
+ var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row});
295
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
296
+ CstyleBehaviour.popAutoInsertedClosing();
297
+ return {
298
+ text: '',
299
+ selection: [1, 1]
300
+ };
301
+ }
302
+ }
303
+ } else if (text == "\n" || text == "\r\n") {
304
+ initContext(editor);
305
+ var closing = "";
306
+ if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) {
307
+ closing = lang.stringRepeat("}", context.maybeInsertedBrackets);
308
+ CstyleBehaviour.clearMaybeInsertedClosing();
309
+ }
310
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
311
+ if (rightChar === '}') {
312
+ var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}');
313
+ if (!openBracePos)
314
+ return null;
315
+ var next_indent = this.$getIndent(session.getLine(openBracePos.row));
316
+ } else if (closing) {
317
+ var next_indent = this.$getIndent(line);
318
+ } else {
319
+ CstyleBehaviour.clearMaybeInsertedClosing();
320
+ return;
321
+ }
322
+ var indent = next_indent + session.getTabString();
323
+
324
+ return {
325
+ text: '\n' + indent + '\n' + next_indent + closing,
326
+ selection: [1, indent.length, 1, indent.length]
327
+ };
328
+ } else {
329
+ CstyleBehaviour.clearMaybeInsertedClosing();
330
+ }
331
+ });
332
+
333
+ this.add("braces", "deletion", function(state, action, editor, session, range) {
334
+ var selected = session.doc.getTextRange(range);
335
+ if (!range.isMultiLine() && selected == '{') {
336
+ initContext(editor);
337
+ var line = session.doc.getLine(range.start.row);
338
+ var rightChar = line.substring(range.end.column, range.end.column + 1);
339
+ if (rightChar == '}') {
340
+ range.end.column++;
341
+ return range;
342
+ } else {
343
+ context.maybeInsertedBrackets--;
344
+ }
345
+ }
346
+ });
347
+
348
+ this.add("parens", "insertion", function(state, action, editor, session, text) {
349
+ if (text == '(') {
350
+ initContext(editor);
351
+ var selection = editor.getSelectionRange();
352
+ var selected = session.doc.getTextRange(selection);
353
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
354
+ return getWrapped(selection, selected, '(', ')');
355
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
356
+ CstyleBehaviour.recordAutoInsert(editor, session, ")");
357
+ return {
358
+ text: '()',
359
+ selection: [1, 1]
360
+ };
361
+ }
362
+ } else if (text == ')') {
363
+ initContext(editor);
364
+ var cursor = editor.getCursorPosition();
365
+ var line = session.doc.getLine(cursor.row);
366
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
367
+ if (rightChar == ')') {
368
+ var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row});
369
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
370
+ CstyleBehaviour.popAutoInsertedClosing();
371
+ return {
372
+ text: '',
373
+ selection: [1, 1]
374
+ };
375
+ }
376
+ }
377
+ }
378
+ });
379
+
380
+ this.add("parens", "deletion", function(state, action, editor, session, range) {
381
+ var selected = session.doc.getTextRange(range);
382
+ if (!range.isMultiLine() && selected == '(') {
383
+ initContext(editor);
384
+ var line = session.doc.getLine(range.start.row);
385
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
386
+ if (rightChar == ')') {
387
+ range.end.column++;
388
+ return range;
389
+ }
390
+ }
391
+ });
392
+
393
+ this.add("brackets", "insertion", function(state, action, editor, session, text) {
394
+ if (text == '[') {
395
+ initContext(editor);
396
+ var selection = editor.getSelectionRange();
397
+ var selected = session.doc.getTextRange(selection);
398
+ if (selected !== "" && editor.getWrapBehavioursEnabled()) {
399
+ return getWrapped(selection, selected, '[', ']');
400
+ } else if (CstyleBehaviour.isSaneInsertion(editor, session)) {
401
+ CstyleBehaviour.recordAutoInsert(editor, session, "]");
402
+ return {
403
+ text: '[]',
404
+ selection: [1, 1]
405
+ };
406
+ }
407
+ } else if (text == ']') {
408
+ initContext(editor);
409
+ var cursor = editor.getCursorPosition();
410
+ var line = session.doc.getLine(cursor.row);
411
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
412
+ if (rightChar == ']') {
413
+ var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row});
414
+ if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) {
415
+ CstyleBehaviour.popAutoInsertedClosing();
416
+ return {
417
+ text: '',
418
+ selection: [1, 1]
419
+ };
420
+ }
421
+ }
422
+ }
423
+ });
424
+
425
+ this.add("brackets", "deletion", function(state, action, editor, session, range) {
426
+ var selected = session.doc.getTextRange(range);
427
+ if (!range.isMultiLine() && selected == '[') {
428
+ initContext(editor);
429
+ var line = session.doc.getLine(range.start.row);
430
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
431
+ if (rightChar == ']') {
432
+ range.end.column++;
433
+ return range;
434
+ }
435
+ }
436
+ });
437
+
438
+ this.add("string_dquotes", "insertion", function(state, action, editor, session, text) {
439
+ if (text == '"' || text == "'") {
440
+ initContext(editor);
441
+ var quote = text;
442
+ var selection = editor.getSelectionRange();
443
+ var selected = session.doc.getTextRange(selection);
444
+ if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) {
445
+ return getWrapped(selection, selected, quote, quote);
446
+ } else if (!selected) {
447
+ var cursor = editor.getCursorPosition();
448
+ var line = session.doc.getLine(cursor.row);
449
+ var leftChar = line.substring(cursor.column-1, cursor.column);
450
+ var rightChar = line.substring(cursor.column, cursor.column + 1);
451
+
452
+ var token = session.getTokenAt(cursor.row, cursor.column);
453
+ var rightToken = session.getTokenAt(cursor.row, cursor.column + 1);
454
+ if (leftChar == "\\" && token && /escape/.test(token.type))
455
+ return null;
456
+
457
+ var stringBefore = token && /string|escape/.test(token.type);
458
+ var stringAfter = !rightToken || /string|escape/.test(rightToken.type);
459
+
460
+ var pair;
461
+ if (rightChar == quote) {
462
+ pair = stringBefore !== stringAfter;
463
+ } else {
464
+ if (stringBefore && !stringAfter)
465
+ return null; // wrap string with different quote
466
+ if (stringBefore && stringAfter)
467
+ return null; // do not pair quotes inside strings
468
+ var wordRe = session.$mode.tokenRe;
469
+ wordRe.lastIndex = 0;
470
+ var isWordBefore = wordRe.test(leftChar);
471
+ wordRe.lastIndex = 0;
472
+ var isWordAfter = wordRe.test(leftChar);
473
+ if (isWordBefore || isWordAfter)
474
+ return null; // before or after alphanumeric
475
+ if (rightChar && !/[\s;,.})\]\\]/.test(rightChar))
476
+ return null; // there is rightChar and it isn't closing
477
+ pair = true;
478
+ }
479
+ return {
480
+ text: pair ? quote + quote : "",
481
+ selection: [1,1]
482
+ };
483
+ }
484
+ }
485
+ });
486
+
487
+ this.add("string_dquotes", "deletion", function(state, action, editor, session, range) {
488
+ var selected = session.doc.getTextRange(range);
489
+ if (!range.isMultiLine() && (selected == '"' || selected == "'")) {
490
+ initContext(editor);
491
+ var line = session.doc.getLine(range.start.row);
492
+ var rightChar = line.substring(range.start.column + 1, range.start.column + 2);
493
+ if (rightChar == selected) {
494
+ range.end.column++;
495
+ return range;
496
+ }
497
+ }
498
+ });
499
+
500
+ };
501
+
502
+
503
+ CstyleBehaviour.isSaneInsertion = function(editor, session) {
504
+ var cursor = editor.getCursorPosition();
505
+ var iterator = new TokenIterator(session, cursor.row, cursor.column);
506
+ if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) {
507
+ var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1);
508
+ if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS))
509
+ return false;
510
+ }
511
+ iterator.stepForward();
512
+ return iterator.getCurrentTokenRow() !== cursor.row ||
513
+ this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS);
514
+ };
515
+
516
+ CstyleBehaviour.$matchTokenType = function(token, types) {
517
+ return types.indexOf(token.type || token) > -1;
518
+ };
519
+
520
+ CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) {
521
+ var cursor = editor.getCursorPosition();
522
+ var line = session.doc.getLine(cursor.row);
523
+ if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0]))
524
+ context.autoInsertedBrackets = 0;
525
+ context.autoInsertedRow = cursor.row;
526
+ context.autoInsertedLineEnd = bracket + line.substr(cursor.column);
527
+ context.autoInsertedBrackets++;
528
+ };
529
+
530
+ CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) {
531
+ var cursor = editor.getCursorPosition();
532
+ var line = session.doc.getLine(cursor.row);
533
+ if (!this.isMaybeInsertedClosing(cursor, line))
534
+ context.maybeInsertedBrackets = 0;
535
+ context.maybeInsertedRow = cursor.row;
536
+ context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket;
537
+ context.maybeInsertedLineEnd = line.substr(cursor.column);
538
+ context.maybeInsertedBrackets++;
539
+ };
540
+
541
+ CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) {
542
+ return context.autoInsertedBrackets > 0 &&
543
+ cursor.row === context.autoInsertedRow &&
544
+ bracket === context.autoInsertedLineEnd[0] &&
545
+ line.substr(cursor.column) === context.autoInsertedLineEnd;
546
+ };
547
+
548
+ CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) {
549
+ return context.maybeInsertedBrackets > 0 &&
550
+ cursor.row === context.maybeInsertedRow &&
551
+ line.substr(cursor.column) === context.maybeInsertedLineEnd &&
552
+ line.substr(0, cursor.column) == context.maybeInsertedLineStart;
553
+ };
554
+
555
+ CstyleBehaviour.popAutoInsertedClosing = function() {
556
+ context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1);
557
+ context.autoInsertedBrackets--;
558
+ };
559
+
560
+ CstyleBehaviour.clearMaybeInsertedClosing = function() {
561
+ if (context) {
562
+ context.maybeInsertedBrackets = 0;
563
+ context.maybeInsertedRow = -1;
564
+ }
565
+ };
566
+
567
+
568
+
569
+ oop.inherits(CstyleBehaviour, Behaviour);
570
+
571
+ exports.CstyleBehaviour = CstyleBehaviour;
572
+ });
573
+
574
+ define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) {
575
+ "use strict";
576
+
577
+ var oop = require("../../lib/oop");
578
+ var Range = require("../../range").Range;
579
+ var BaseFoldMode = require("./fold_mode").FoldMode;
580
+
581
+ var FoldMode = exports.FoldMode = function(commentRegex) {
582
+ if (commentRegex) {
583
+ this.foldingStartMarker = new RegExp(
584
+ this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start)
585
+ );
586
+ this.foldingStopMarker = new RegExp(
587
+ this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end)
588
+ );
589
+ }
590
+ };
591
+ oop.inherits(FoldMode, BaseFoldMode);
592
+
593
+ (function() {
594
+
595
+ this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/;
596
+ this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/;
597
+ this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/;
598
+ this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/;
599
+ this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/;
600
+ this._getFoldWidgetBase = this.getFoldWidget;
601
+ this.getFoldWidget = function(session, foldStyle, row) {
602
+ var line = session.getLine(row);
603
+
604
+ if (this.singleLineBlockCommentRe.test(line)) {
605
+ if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line))
606
+ return "";
607
+ }
608
+
609
+ var fw = this._getFoldWidgetBase(session, foldStyle, row);
610
+
611
+ if (!fw && this.startRegionRe.test(line))
612
+ return "start"; // lineCommentRegionStart
613
+
614
+ return fw;
615
+ };
616
+
617
+ this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) {
618
+ var line = session.getLine(row);
619
+
620
+ if (this.startRegionRe.test(line))
621
+ return this.getCommentRegionBlock(session, line, row);
622
+
623
+ var match = line.match(this.foldingStartMarker);
624
+ if (match) {
625
+ var i = match.index;
626
+
627
+ if (match[1])
628
+ return this.openingBracketBlock(session, match[1], row, i);
629
+
630
+ var range = session.getCommentFoldRange(row, i + match[0].length, 1);
631
+
632
+ if (range && !range.isMultiLine()) {
633
+ if (forceMultiline) {
634
+ range = this.getSectionRange(session, row);
635
+ } else if (foldStyle != "all")
636
+ range = null;
637
+ }
638
+
639
+ return range;
640
+ }
641
+
642
+ if (foldStyle === "markbegin")
643
+ return;
644
+
645
+ var match = line.match(this.foldingStopMarker);
646
+ if (match) {
647
+ var i = match.index + match[0].length;
648
+
649
+ if (match[1])
650
+ return this.closingBracketBlock(session, match[1], row, i);
651
+
652
+ return session.getCommentFoldRange(row, i, -1);
653
+ }
654
+ };
655
+
656
+ this.getSectionRange = function(session, row) {
657
+ var line = session.getLine(row);
658
+ var startIndent = line.search(/\S/);
659
+ var startRow = row;
660
+ var startColumn = line.length;
661
+ row = row + 1;
662
+ var endRow = row;
663
+ var maxRow = session.getLength();
664
+ while (++row < maxRow) {
665
+ line = session.getLine(row);
666
+ var indent = line.search(/\S/);
667
+ if (indent === -1)
668
+ continue;
669
+ if (startIndent > indent)
670
+ break;
671
+ var subRange = this.getFoldWidgetRange(session, "all", row);
672
+
673
+ if (subRange) {
674
+ if (subRange.start.row <= startRow) {
675
+ break;
676
+ } else if (subRange.isMultiLine()) {
677
+ row = subRange.end.row;
678
+ } else if (startIndent == indent) {
679
+ break;
680
+ }
681
+ }
682
+ endRow = row;
683
+ }
684
+
685
+ return new Range(startRow, startColumn, endRow, session.getLine(endRow).length);
686
+ };
687
+ this.getCommentRegionBlock = function(session, line, row) {
688
+ var startColumn = line.search(/\s*$/);
689
+ var maxRow = session.getLength();
690
+ var startRow = row;
691
+
692
+ var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/;
693
+ var depth = 1;
694
+ while (++row < maxRow) {
695
+ line = session.getLine(row);
696
+ var m = re.exec(line);
697
+ if (!m) continue;
698
+ if (m[1]) depth--;
699
+ else depth++;
700
+
701
+ if (!depth) break;
702
+ }
703
+
704
+ var endRow = row;
705
+ if (endRow > startRow) {
706
+ return new Range(startRow, startColumn, endRow, line.length);
707
+ }
708
+ };
709
+
710
+ }).call(FoldMode.prototype);
711
+
712
+ });
713
+
714
+ define("ace/mode/swift",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/swift_highlight_rules","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) {
715
+ "use strict";
716
+
717
+ var oop = require("../lib/oop");
718
+ var TextMode = require("./text").Mode;
719
+ var HighlightRules = require("./swift_highlight_rules").HighlightRules;
720
+ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour;
721
+ var FoldMode = require("./folding/cstyle").FoldMode;
722
+
723
+ var Mode = function() {
724
+ this.HighlightRules = HighlightRules;
725
+ this.foldingRules = new FoldMode();
726
+ this.$behaviour = new CstyleBehaviour();
727
+ };
728
+ oop.inherits(Mode, TextMode);
729
+
730
+ (function() {
731
+ this.lineCommentStart = "//";
732
+ this.blockComment = {start: "/*", end: "*/", nestable: true};
733
+
734
+ this.$id = "ace/mode/swift"
735
+ }).call(Mode.prototype);
736
+
737
+ exports.Mode = Mode;
738
+ });