diff options
Diffstat (limited to 'www/wiki/extensions/CodeEditor/modules/ace/mode-gherkin.js')
-rw-r--r-- | www/wiki/extensions/CodeEditor/modules/ace/mode-gherkin.js | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/www/wiki/extensions/CodeEditor/modules/ace/mode-gherkin.js b/www/wiki/extensions/CodeEditor/modules/ace/mode-gherkin.js new file mode 100644 index 00000000..322dbe40 --- /dev/null +++ b/www/wiki/extensions/CodeEditor/modules/ace/mode-gherkin.js @@ -0,0 +1,163 @@ +ace.define("ace/mode/gherkin_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { + +var oop = require("../lib/oop"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; +var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; + +var GherkinHighlightRules = function() { + var languages = [{ + name: "en", + labels: "Feature|Background|Scenario(?: Outline)?|Examples", + keywords: "Given|When|Then|And|But" + }]; + + var labels = languages.map(function(l) { + return l.labels; + }).join("|"); + var keywords = languages.map(function(l) { + return l.keywords; + }).join("|"); + this.$rules = { + start : [{ + token: "constant.numeric", + regex: "(?:(?:[1-9]\\d*)|(?:0))" + }, { + token : "comment", + regex : "#.*$" + }, { + token : "keyword", + regex : "(?:" + labels + "):|(?:" + keywords + ")\\b" + }, { + token : "keyword", + regex : "\\*" + }, { + token : "string", // multi line """ string start + regex : '"{3}', + next : "qqstring3" + }, { + token : "string", // " string + regex : '"', + next : "qqstring" + }, { + token : "text", + regex : "^\\s*(?=@[\\w])", + next : [{ + token : "text", + regex : "\\s+" + }, { + token : "variable.parameter", + regex : "@[\\w]+" + }, { + token : "empty", + regex : "", + next : "start" + }] + }, { + token : "comment", + regex : "<[^>]+>" + }, { + token : "comment", + regex : "\\|(?=.)", + next : "table-item" + }, { + token : "comment", + regex : "\\|$", + next : "start" + }], + "qqstring3" : [ { + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", // multi line """ string end + regex : '"{3}', + next : "start" + }, { + defaultToken : "string" + }], + "qqstring" : [{ + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", + regex : "\\\\$", + next : "qqstring" + }, { + token : "string", + regex : '"|$', + next : "start" + }, { + defaultToken: "string" + }], + "table-item" : [{ + token : "comment", + regex : /$/, + next : "start" + }, { + token : "comment", + regex : /\|/ + }, { + token : "string", + regex : /\\./ + }, { + defaultToken : "string" + }] + }; + this.normalizeRules(); +} + +oop.inherits(GherkinHighlightRules, TextHighlightRules); + +exports.GherkinHighlightRules = GherkinHighlightRules; +}); + +ace.define("ace/mode/gherkin",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/gherkin_highlight_rules"], function(require, exports, module) { + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var GherkinHighlightRules = require("./gherkin_highlight_rules").GherkinHighlightRules; + +var Mode = function() { + this.HighlightRules = GherkinHighlightRules; + this.$behaviour = this.$defaultBehaviour; +}; +oop.inherits(Mode, TextMode); + +(function() { + this.lineCommentStart = "#"; + this.$id = "ace/mode/gherkin"; + + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); + var space2 = " "; + + var tokenizedLine = this.getTokenizer().getLineTokens(line, state); + var tokens = tokenizedLine.tokens; + + console.log(state) + + if(line.match("[ ]*\\|")) { + indent += "| "; + } + + if (tokens.length && tokens[tokens.length-1].type == "comment") { + return indent; + } + + + if (state == "start") { + if (line.match("Scenario:|Feature:|Scenario Outline:|Background:")) { + indent += space2; + } else if(line.match("(Given|Then).+(:)$|Examples:")) { + indent += space2; + } else if(line.match("\\*.+")) { + indent += "* "; + } + } + + + return indent; + }; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); |