diff --git a/.gitmodules b/.gitmodules index 4678c516..07bbe371 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,6 @@ [submodule "doc/wiki"] path = doc/wiki - url = git://github.com/ajaxorg/ace.wiki.git + url = https://github.com/ajaxorg/ace.wiki.git [submodule "build"] path = build - url = git://github.com/ajaxorg/ace-builds.git + url = https://github.com/ajaxorg/ace-builds.git diff --git a/demo/kitchen-sink/docs/io.io b/demo/kitchen-sink/docs/io.io new file mode 100644 index 00000000..4b80b6c2 --- /dev/null +++ b/demo/kitchen-sink/docs/io.io @@ -0,0 +1,6 @@ +// computes factorial of a number +factorial := method(n, + if(n == 0, return 1) + res := 1 + Range 1 to(n) foreach(i, res = res * i) +) \ No newline at end of file diff --git a/lib/ace/edit_session/bracket_match.js b/lib/ace/edit_session/bracket_match.js index 825f6924..064ee3dc 100644 --- a/lib/ace/edit_session/bracket_match.js +++ b/lib/ace/edit_session/bracket_match.js @@ -117,6 +117,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") + .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } @@ -173,6 +174,7 @@ function BracketMatch() { typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") + .replace(/\b(?:end|start|begin)\b/, "") + ")+" ); } diff --git a/lib/ace/ext/modelist.js b/lib/ace/ext/modelist.js index 14a55f7b..3ffac26b 100644 --- a/lib/ace/ext/modelist.js +++ b/lib/ace/ext/modelist.js @@ -66,8 +66,8 @@ var supportedModes = { Dockerfile: ["^Dockerfile"], Dot: ["dot"], Eiffel: ["e"], - Erlang: ["erl|hrl"], EJS: ["ejs"], + Erlang: ["erl|hrl"], Forth: ["frt|fs|ldr"], FTL: ["ftl"], Gcode: ["gcode"], @@ -83,6 +83,7 @@ var supportedModes = { HTML: ["html|htm|xhtml"], HTML_Ruby: ["erb|rhtml|html.erb"], INI: ["ini|conf|cfg|prefs"], + Io: ["io"], Jack: ["jack"], Jade: ["jade"], Java: ["java"], @@ -103,11 +104,11 @@ var supportedModes = { LuaPage: ["lp"], Lucene: ["lucene"], Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"], - MATLAB: ["matlab"], Markdown: ["md|markdown"], + MATLAB: ["matlab"], MEL: ["mel"], - MySQL: ["mysql"], MUSHCode: ["mc|mush"], + MySQL: ["mysql"], Nix: ["nix"], ObjectiveC: ["m|mm"], OCaml: ["ml|mli"], @@ -129,14 +130,14 @@ var supportedModes = { SASS: ["sass"], SCAD: ["scad"], Scala: ["scala"], - Smarty: ["smarty|tpl"], Scheme: ["scm|rkt"], SCSS: ["scss"], SH: ["sh|bash|^.bashrc"], SJS: ["sjs"], - Space: ["space"], + Smarty: ["smarty|tpl"], snippets: ["snippets"], Soy_Template:["soy"], + Space: ["space"], SQL: ["sql"], Stylus: ["styl|stylus"], SVG: ["svg"], diff --git a/lib/ace/mode/_test/text_coffee.txt b/lib/ace/mode/_test/text_coffee.txt index 094e61b7..2d9ba5ad 100644 --- a/lib/ace/mode/_test/text_coffee.txt +++ b/lib/ace/mode/_test/text_coffee.txt @@ -42,6 +42,7 @@ class Foo extends Bar foo.static.function #!test tokenize string with interpolation a = "#{ 22 / 7 + {x: "#{a + b}"} + 2}" +" #{ "" + {} } )" """heredoc """ do -> diff --git a/lib/ace/mode/_test/tokens_coffee.json b/lib/ace/mode/_test/tokens_coffee.json index 9c3967e4..b0703b37 100644 --- a/lib/ace/mode/_test/tokens_coffee.json +++ b/lib/ace/mode/_test/tokens_coffee.json @@ -466,6 +466,23 @@ ["constant.numeric","2"], ["paren.string","}"], ["string.end","\""] +],[ + "start", + ["string.start","\""], + ["string"," "], + ["paren.string","#{"], + ["text"," "], + ["string.start","\""], + ["string.end","\""], + ["text"," "], + ["keyword.operator","+"], + ["text"," "], + ["paren","{}"], + ["text"," "], + ["paren.string","}"], + ["string"," )"], + ["string.end","\""], + ["text"," "] ],[ "qqdoc", ["string","\"\"\"heredoc"] diff --git a/lib/ace/mode/_test/tokens_javascript.json b/lib/ace/mode/_test/tokens_javascript.json index 42e9bf5e..1be3f605 100644 --- a/lib/ace/mode/_test/tokens_javascript.json +++ b/lib/ace/mode/_test/tokens_javascript.json @@ -379,7 +379,7 @@ ["constant.numeric","1."], ["text","00"], ["identifier","E"], - ["text","^"], + ["keyword.operator","^"], ["constant.numeric","1"], ["punctuation.operator",","], ["text"," "], diff --git a/lib/ace/mode/_test/tokens_latex.json b/lib/ace/mode/_test/tokens_latex.json index 4ae69afa..52508e0d 100644 --- a/lib/ace/mode/_test/tokens_latex.json +++ b/lib/ace/mode/_test/tokens_latex.json @@ -92,7 +92,9 @@ ],[ "start", ["text"," E &= mc^2 "], - ["constant.character.escape","\\\\"], + ["constant.character.escape","\\\\"] +],[ + "start", ["text"," m &= "], ["storage.type","\\frac"], ["lparen","{"], diff --git a/lib/ace/mode/_test/tokens_php.json b/lib/ace/mode/_test/tokens_php.json index d1458a65..2134dccb 100644 --- a/lib/ace/mode/_test/tokens_php.json +++ b/lib/ace/mode/_test/tokens_php.json @@ -138,7 +138,7 @@ ["text"," "], ["support.php_tag"," the first match is used + + this.$rules = { start: + [ { token: [ 'text', 'meta.empty-parenthesis.io' ], + regex: '(\\()(\\))', + comment: 'we match this to overload return inside () --Allan; scoping rules for what gets the scope have changed, so we now group the ) instead of the ( -- Rob' }, + { token: [ 'text', 'meta.comma-parenthesis.io' ], + regex: '(\\,)(\\))', + comment: 'We want to do the same for ,) -- Seckar; same as above -- Rob' }, + { token: 'keyword.control.io', + regex: '\\b(?:if|ifTrue|ifFalse|ifTrueIfFalse|for|loop|reverseForeach|foreach|map|continue|break|while|do|return)\\b' }, + { token: 'punctuation.definition.comment.io', + regex: '/\\*', + push: + [ { token: 'punctuation.definition.comment.io', + regex: '\\*/', + next: 'pop' }, + { defaultToken: 'comment.block.io' } ] }, + { token: 'punctuation.definition.comment.io', + regex: '//', + push: + [ { token: 'comment.line.double-slash.io', + regex: '$', + next: 'pop' }, + { defaultToken: 'comment.line.double-slash.io' } ] }, + { token: 'punctuation.definition.comment.io', + regex: '#', + push: + [ { token: 'comment.line.number-sign.io', regex: '$', next: 'pop' }, + { defaultToken: 'comment.line.number-sign.io' } ] }, + { token: 'variable.language.io', + regex: '\\b(?:self|sender|target|proto|protos|parent)\\b', + comment: 'I wonder if some of this isn\'t variable.other.language? --Allan; scoping this as variable.language to match Objective-C\'s handling of \'self\', which is inconsistent with C++\'s handling of \'this\' but perhaps intentionally so -- Rob' }, + { token: 'keyword.operator.io', + regex: '<=|>=|=|:=|\\*|\\||\\|\\||\\+|-|/|&|&&|>|<|\\?|@|@@|\\b(?:and|or)\\b' }, + { token: 'constant.other.io', regex: '\\bGL[\\w_]+\\b' }, + { token: 'support.class.io', regex: '\\b[A-Z](?:\\w+)?\\b' }, + { token: 'support.function.io', + regex: '\\b(?:clone|call|init|method|list|vector|block|\\w+(?=\\s*\\())\\b' }, + { token: 'support.function.open-gl.io', + regex: '\\bgl(?:u|ut)?[A-Z]\\w+\\b' }, + { token: 'punctuation.definition.string.begin.io', + regex: '"""', + push: + [ { token: 'punctuation.definition.string.end.io', + regex: '"""', + next: 'pop' }, + { token: 'constant.character.escape.io', regex: '\\\\.' }, + { defaultToken: 'string.quoted.triple.io' } ] }, + { token: 'punctuation.definition.string.begin.io', + regex: '"', + push: + [ { token: 'punctuation.definition.string.end.io', + regex: '"', + next: 'pop' }, + { token: 'constant.character.escape.io', regex: '\\\\.' }, + { defaultToken: 'string.quoted.double.io' } ] }, + { token: 'constant.numeric.io', + regex: '\\b(?:0(?:x|X)[0-9a-fA-F]*|(?:[0-9]+\\.?[0-9]*|\\.[0-9]+)(?:(?:e|E)(?:\\+|-)?[0-9]+)?)(?:L|l|UL|ul|u|U|F|f)?\\b' }, + { token: 'variable.other.global.io', regex: 'Lobby\\b' }, + { token: 'constant.language.io', + regex: '\\b(?:TRUE|true|FALSE|false|NULL|null|Null|Nil|nil|YES|NO)\\b' } ] } + + this.normalizeRules(); +}; + +IoHighlightRules.metaData = { fileTypes: [ 'io' ], + keyEquivalent: '^~I', + name: 'Io', + scopeName: 'source.io' } + + +oop.inherits(IoHighlightRules, TextHighlightRules); + +exports.IoHighlightRules = IoHighlightRules; +}); \ No newline at end of file diff --git a/lib/ace/mode/javascript_highlight_rules.js b/lib/ace/mode/javascript_highlight_rules.js index b5393b13..e81a2dce 100644 --- a/lib/ace/mode/javascript_highlight_rules.js +++ b/lib/ace/mode/javascript_highlight_rules.js @@ -35,7 +35,7 @@ var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var JavaScriptHighlightRules = function() { +var JavaScriptHighlightRules = function(options) { // see: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects var keywordMapper = this.createKeywordMapper({ "variable.language": @@ -187,11 +187,11 @@ var JavaScriptHighlightRules = function() { regex : identifierRe }, { token : "keyword.operator", - regex : /--|\+\+|[!$%&*+\-~]|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|%=|\+=|\-=|&=|\^=/, + regex : /--|\+\+|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", - regex : /\?|\:|\,|\;|\./, + regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", @@ -200,10 +200,6 @@ var JavaScriptHighlightRules = function() { }, { token : "paren.rparen", regex : /[\])}]/ - }, { - token : "keyword.operator", - regex : /\/=?/, - next : "start" }, { token: "comment", regex: /^#!.*$/ @@ -354,9 +350,49 @@ var JavaScriptHighlightRules = function() { } ] }; - + + + if (!options || !options.noES6) { + this.$rules.no_regex.unshift({ + regex: "[{}]", onMatch: function(val, state, stack) { + this.next = val == "{" ? this.nextState : ""; + if (val == "{" && stack.length) { + stack.unshift("start", state); + return "paren"; + } + if (val == "}" && stack.length) { + stack.shift(); + this.next = stack.shift(); + if (this.next.indexOf("string") != -1) + return "paren.quasi.end"; + } + return val == "{" ? "paren.lparen" : "paren.rparen"; + }, + nextState: "start" + }, { + token : "string.quasi.start", + regex : /`/, + push : [{ + token : "constant.language.escape", + regex : escapedRe + }, { + token : "paren.quasi.start", + regex : /\${/, + push : "start" + }, { + token : "string.quasi.end", + regex : /`/, + next : "pop" + }, { + defaultToken: "string.quasi" + }] + }); + } + this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); + + this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); diff --git a/lib/ace/mode/sh_highlight_rules.js b/lib/ace/mode/sh_highlight_rules.js index 43f536f4..9dd9aa33 100644 --- a/lib/ace/mode/sh_highlight_rules.js +++ b/lib/ace/mode/sh_highlight_rules.js @@ -99,8 +99,12 @@ var ShHighlightRules = function() { }, { defaultToken: "string" }] - }, { + }, { + regex : "<<<", + token : "keyword.operator" + }, { stateName: "heredoc", + regex : "(<<)(\\s*)(['\"`]?)([\\w\\-]+)(['\"`]?)", onMatch : function(value, currentState, stack) { var next = value[2] == '-' ? "indentedHeredoc" : "heredoc"; var tokens = value.split(this.splitRegex); @@ -113,7 +117,6 @@ var ShHighlightRules = function() { {type:"string", value: tokens[5]} ]; }, - regex : "(<<-?)(\\s*)(['\"`]?)([\\w\-]+)(['\"`]?)", rules: { heredoc: [{ onMatch: function(value, currentState, stack) { @@ -131,7 +134,7 @@ var ShHighlightRules = function() { }], indentedHeredoc: [{ token: "string", - regex: "^ +" + regex: "^\t+" }, { onMatch: function(value, currentState, stack) { if (value === stack[1]) { @@ -178,7 +181,7 @@ var ShHighlightRules = function() { regex : integer + "\\b" }, { token : keywordMapper, - regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" + regex : "[a-zA-Z_][a-zA-Z0-9_]*\\b" }, { token : "keyword.operator", regex : "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|~|<|>|<=|=>|=|!=" diff --git a/lib/ace/mode/sjs_highlight_rules.js b/lib/ace/mode/sjs_highlight_rules.js index f51787b2..e8ced77b 100644 --- a/lib/ace/mode/sjs_highlight_rules.js +++ b/lib/ace/mode/sjs_highlight_rules.js @@ -36,7 +36,7 @@ var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScrip var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var SJSHighlightRules = function() { - var parent = new JavaScriptHighlightRules(); + var parent = new JavaScriptHighlightRules({noES6: true}); var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "[0-2][0-7]{0,2}|" + // oct @@ -177,10 +177,10 @@ var SJSHighlightRules = function() { // for use within interpreted contexts // without interfering with context nesting var embeddableRules = []; - for (var i=0; i 1) { if (stack[0] !== currentState) - stack.unshift(currentState); + stack.unshift("#tmp", currentState); } return { tokens : tokens,