diff --git a/lib/ace/autocomplete.js b/lib/ace/autocomplete.js index 33c41f93..e0aa510e 100644 --- a/lib/ace/autocomplete.js +++ b/lib/ace/autocomplete.js @@ -243,7 +243,7 @@ var Autocomplete = function() { editor.on("changeSelection", this.$changeListener); editor.on("blur", this.$blurListener); - worker.attachToDocument(editor.session.getDocument(), {cursor: editor.getCursorPosition()}, true); + worker.attachToDocument(editor.session.getDocument(), {cursor: editor.getCursorPosition(), keywords: editor.session.getMode().$keywordList}, true); worker.on("complete", function(data) { var matches = data.data.matches; diff --git a/lib/ace/autocomplete/autocomplete_worker.js b/lib/ace/autocomplete/autocomplete_worker.js index c85f2e8c..6c5ec0d4 100644 --- a/lib/ace/autocomplete/autocomplete_worker.js +++ b/lib/ace/autocomplete/autocomplete_worker.js @@ -74,14 +74,14 @@ oop.inherits(AutocompleteWorker, Mirror); var doc = this.doc.getValue(); var pos = this.data.cursor; - var part = SyntaxDetector.getContextSyntaxPart(this.doc, this.data.cursor, "javascript"); + var part = SyntaxDetector.getContextSyntaxPart(this.doc, this.data.cursor); var language = part.language; var currentPos = { line: pos.row, col: pos.column }; var currentNode = null; var matches = [], ast = null; - completer.complete(_self.doc, ast, this.data.cursor, currentNode, function(identifier, completions) { + completer.complete(_self.doc, ast, this.data.cursor, this.data.keywords, currentNode, function(identifier, completions) { if (completions) matches = matches.concat(completions); removeDuplicateMatches(matches); diff --git a/lib/ace/autocomplete/text_completer.js b/lib/ace/autocomplete/text_completer.js index 9ffa9c67..0cef7aed 100644 --- a/lib/ace/autocomplete/text_completer.js +++ b/lib/ace/autocomplete/text_completer.js @@ -1,6 +1,7 @@ define(function(require, exports, module) { var completeUtil = require("./complete_util"); var SPLIT_REGEX = /[^a-zA-Z_0-9\$]+/; + var MAX_SCORE = 1000000; var completer = module.exports; @@ -9,7 +10,7 @@ define(function(require, exports, module) { }; // For the current document, gives scores to identifiers not on frequency, but on distance from the current prefix - function wordDistanceAnalyzer(doc, pos, prefix) { + function wordDistanceAnalyzer(doc, pos, prefix, keywords) { var text = doc.getValue().trim(); // Determine cursor's word index @@ -32,24 +33,28 @@ define(function(require, exports, module) { var distance = Math.max(prefixPosition, i) - Math.min(prefixPosition, i); // Score substracted from 100000 to force descending ordering if (Object.prototype.hasOwnProperty.call(identDict, ident)) - identDict[ident] = Math.max(1000000-distance, identDict[ident]); + identDict[ident] = Math.max(MAX_SCORE-distance, identDict[ident]); else - identDict[ident] = 1000000-distance; + identDict[ident] = MAX_SCORE-distance; } + + for (var k = 0, l = keywords.length; k < l; k++) { + identDict[keywords[k]] = MAX_SCORE; + } return identDict; } - function analyze(doc, pos) { + function analyze(doc, pos, keywords) { var line = doc.getLine(pos.row); var identifier = completeUtil.retrievePrecedingIdentifier(line, pos.column); - var analysisCache = wordDistanceAnalyzer(doc, pos, identifier); + var analysisCache = wordDistanceAnalyzer(doc, pos, identifier, keywords); return analysisCache; } - completer.complete = function(doc, fullAst, pos, currentNode, callback) { - var identDict = analyze(doc, pos); + completer.complete = function(doc, fullAst, pos, keywords, currentNode, callback) { + var identDict = analyze(doc, pos, keywords); var line = doc.getLine(pos.row); var identifier = completeUtil.retrievePrecedingIdentifier(line, pos.column); diff --git a/lib/ace/mode/abap.js b/lib/ace/mode/abap.js index b2ba82c4..53cd9532 100644 --- a/lib/ace/mode/abap.js +++ b/lib/ace/mode/abap.js @@ -39,7 +39,9 @@ var TextMode = require("./text").Mode; var oop = require("../lib/oop"); function Mode() { - this.$tokenizer = new Tokenizer(new Rules().getRules()); + var highlighter = new Rules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = new Rules(rules.$keywordList); this.foldingRules = new FoldMode(); } diff --git a/lib/ace/mode/c_cpp.js b/lib/ace/mode/c_cpp.js index c388dc0f..6b6f8c09 100644 --- a/lib/ace/mode/c_cpp.js +++ b/lib/ace/mode/c_cpp.js @@ -41,9 +41,13 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new c_cppHighlightRules().getRules()); + var highlighter = new c_cppHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); + this.$keywordList = highlighter.$keywordList; + this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/clojure.js b/lib/ace/mode/clojure.js index d1494e02..cbbaace5 100644 --- a/lib/ace/mode/clojure.js +++ b/lib/ace/mode/clojure.js @@ -39,7 +39,9 @@ var MatchingParensOutdent = require("./matching_parens_outdent").MatchingParensO var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new ClojureHighlightRules().getRules()); + var highlighter = new ClojureHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = new Rules(rules.$keywordList); this.$outdent = new MatchingParensOutdent(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/coffee.js b/lib/ace/mode/coffee.js index b2bb55ad..18799082 100644 --- a/lib/ace/mode/coffee.js +++ b/lib/ace/mode/coffee.js @@ -41,8 +41,10 @@ var WorkerClient = require("../worker/worker_client").WorkerClient; var oop = require("../lib/oop"); function Mode() { - this.$tokenizer = new Tokenizer(new Rules().getRules()); + var highlighter = new Rules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new Outdent(); + this.$keywordList = new Rules(rules.$keywordList); this.foldingRules = new FoldMode(); } diff --git a/lib/ace/mode/csharp.js b/lib/ace/mode/csharp.js index 2e536294..66644b45 100644 --- a/lib/ace/mode/csharp.js +++ b/lib/ace/mode/csharp.js @@ -10,9 +10,11 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new CSharpHighlightRules().getRules()); + var highlighter = new CSharpHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/css.js b/lib/ace/mode/css.js index 2c5807c7..fcaa298c 100644 --- a/lib/ace/mode/css.js +++ b/lib/ace/mode/css.js @@ -41,9 +41,11 @@ var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new CssHighlightRules().getRules()); + var highlighter = new CssHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/dart.js b/lib/ace/mode/dart.js index 114c79ab..cab31e08 100644 --- a/lib/ace/mode/dart.js +++ b/lib/ace/mode/dart.js @@ -52,6 +52,7 @@ var Mode = function() { this.foldingRules = new CStyleFoldMode(); this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, CMode); diff --git a/lib/ace/mode/glsl.js b/lib/ace/mode/glsl.js index 641f5ebc..ef2a2b44 100644 --- a/lib/ace/mode/glsl.js +++ b/lib/ace/mode/glsl.js @@ -41,9 +41,12 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new glslHighlightRules().getRules()); + var highlighter = new glslHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, CMode); diff --git a/lib/ace/mode/golang.js b/lib/ace/mode/golang.js index f00ce9c7..72262022 100644 --- a/lib/ace/mode/golang.js +++ b/lib/ace/mode/golang.js @@ -1,55 +1,58 @@ define(function(require, exports, module) { -var oop = require("../lib/oop"); -var TextMode = require("./text").Mode; -var Tokenizer = require("../tokenizer").Tokenizer; -var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules; -var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; -var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; -var CStyleFoldMode = require("./folding/cstyle").FoldMode; - -var Mode = function() { - this.$tokenizer = new Tokenizer(new GolangHighlightRules().getRules()); - this.$outdent = new MatchingBraceOutdent(); - this.foldingRules = new CStyleFoldMode(); -}; -oop.inherits(Mode, TextMode); - -(function() { + var oop = require("../lib/oop"); + var TextMode = require("./text").Mode; + var Tokenizer = require("../tokenizer").Tokenizer; + var GolangHighlightRules = require("./golang_highlight_rules").GolangHighlightRules; + var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; + var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; + var CStyleFoldMode = require("./folding/cstyle").FoldMode; + var Mode = function() { + var highlighter = new GolangHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; + this.$outdent = new MatchingBraceOutdent(); + this.foldingRules = new CStyleFoldMode(); + }; + oop.inherits(Mode, TextMode); + + (function() { + this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; - this.getNextLineIndent = function(state, line, tab) { - var indent = this.$getIndent(line); + this.getNextLineIndent = function(state, line, tab) { + var indent = this.$getIndent(line); - var tokenizedLine = this.$tokenizer.getLineTokens(line, state); - var tokens = tokenizedLine.tokens; - var endState = tokenizedLine.state; + var tokenizedLine = this.$tokenizer.getLineTokens(line, state); + var tokens = tokenizedLine.tokens; + var endState = tokenizedLine.state; - if (tokens.length && tokens[tokens.length-1].type == "comment") { - return indent; - } - - if (state == "start") { - var match = line.match(/^.*[\{\(\[]\s*$/); - if (match) { - indent += tab; + if (tokens.length && tokens[tokens.length-1].type == "comment") { + return indent; + } + + if (state == "start") { + var match = line.match(/^.*[\{\(\[]\s*$/); + if (match) { + indent += tab; + } } - } - return indent; - };//end getNextLineIndent + return indent; + };//end getNextLineIndent - this.checkOutdent = function(state, line, input) { - return this.$outdent.checkOutdent(line, input); - }; + this.checkOutdent = function(state, line, input) { + return this.$outdent.checkOutdent(line, input); + }; - this.autoOutdent = function(state, doc, row) { - this.$outdent.autoOutdent(doc, row); - }; + this.autoOutdent = function(state, doc, row) { + this.$outdent.autoOutdent(doc, row); + }; -}).call(Mode.prototype); + }).call(Mode.prototype); -exports.Mode = Mode; + exports.Mode = Mode; }); diff --git a/lib/ace/mode/groovy.js b/lib/ace/mode/groovy.js index fad038eb..65d87cd4 100644 --- a/lib/ace/mode/groovy.js +++ b/lib/ace/mode/groovy.js @@ -8,7 +8,9 @@ var GroovyHighlightRules = require("./groovy_highlight_rules").GroovyHighlightRu var Mode = function() { JavaScriptMode.call(this); - this.$tokenizer = new Tokenizer(new GroovyHighlightRules().getRules()); + var highlighter = new GroovyHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, JavaScriptMode); diff --git a/lib/ace/mode/haxe.js b/lib/ace/mode/haxe.js index edbfef6b..3933a769 100644 --- a/lib/ace/mode/haxe.js +++ b/lib/ace/mode/haxe.js @@ -10,9 +10,12 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new HaxeHighlightRules().getRules()); + var highlighter = new HaxeHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/java.js b/lib/ace/mode/java.js index 1b7045ea..f132130b 100644 --- a/lib/ace/mode/java.js +++ b/lib/ace/mode/java.js @@ -8,8 +8,10 @@ var JavaHighlightRules = require("./java_highlight_rules").JavaHighlightRules; var Mode = function() { JavaScriptMode.call(this); + var highlighter = new JavaHighlightRules(); - this.$tokenizer = new Tokenizer(new JavaHighlightRules().getRules()); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, JavaScriptMode); diff --git a/lib/ace/mode/javascript.js b/lib/ace/mode/javascript.js index a3e45bcc..00d8af1a 100644 --- a/lib/ace/mode/javascript.js +++ b/lib/ace/mode/javascript.js @@ -42,9 +42,12 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new JavaScriptHighlightRules().getRules()); + var highlighter = new JavaScriptHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/liquid.js b/lib/ace/mode/liquid.js index 8555e6c5..247c02a1 100644 --- a/lib/ace/mode/liquid.js +++ b/lib/ace/mode/liquid.js @@ -38,7 +38,10 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new LiquidHighlightRules().getRules()); + var highlighter = new LiquidHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/lisp.js b/lib/ace/mode/lisp.js index 5bae6689..46427d60 100644 --- a/lib/ace/mode/lisp.js +++ b/lib/ace/mode/lisp.js @@ -45,6 +45,7 @@ var Mode = function() { var highlighter = new LispHighlightRules(); this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/lua.js b/lib/ace/mode/lua.js index 2ef9031a..58a3c822 100644 --- a/lib/ace/mode/lua.js +++ b/lib/ace/mode/lua.js @@ -40,8 +40,11 @@ var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { - this.$tokenizer = new Tokenizer(new LuaHighlightRules().getRules()); + var highlighter = new LuaHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.foldingRules = new LuaFoldMode(); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/makefile.js b/lib/ace/mode/makefile.js index 7f8f726b..a54171dd 100644 --- a/lib/ace/mode/makefile.js +++ b/lib/ace/mode/makefile.js @@ -51,6 +51,7 @@ var Mode = function() { this.foldingRules = new FoldMode(); this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/ocaml.js b/lib/ace/mode/ocaml.js index 6367b937..9aa6643d 100644 --- a/lib/ace/mode/ocaml.js +++ b/lib/ace/mode/ocaml.js @@ -39,8 +39,11 @@ var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutd var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new OcamlHighlightRules().getRules()); + var highlighter = new OcamlHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/perl.js b/lib/ace/mode/perl.js index ff8eaa18..46d20065 100644 --- a/lib/ace/mode/perl.js +++ b/lib/ace/mode/perl.js @@ -40,9 +40,12 @@ var Range = require("../range").Range; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new PerlHighlightRules().getRules()); + var highlighter = new PerlHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new CStyleFoldMode({start: "^=(begin|item)\\b", end: "^=(cut)\\b"}); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/pgsql.js b/lib/ace/mode/pgsql.js index 29c30311..4ebaec80 100755 --- a/lib/ace/mode/pgsql.js +++ b/lib/ace/mode/pgsql.js @@ -30,30 +30,33 @@ define(function(require, exports, module) { -var oop = require("../lib/oop"); -var TextMode = require("../mode/text").Mode; -var Tokenizer = require("../tokenizer").Tokenizer; -var PgsqlHighlightRules = require("./pgsql_highlight_rules").PgsqlHighlightRules; -var Range = require("../range").Range; + var oop = require("../lib/oop"); + var TextMode = require("../mode/text").Mode; + var Tokenizer = require("../tokenizer").Tokenizer; + var PgsqlHighlightRules = require("./pgsql_highlight_rules").PgsqlHighlightRules; + var Range = require("../range").Range; -var Mode = function() { - this.$tokenizer = new Tokenizer(new PgsqlHighlightRules().getRules()); -}; -oop.inherits(Mode, TextMode); + var Mode = function() { + var highlighter = new PgsqlHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; + }; + oop.inherits(Mode, TextMode); -(function() { + (function() { this.lineCommentStart = "--"; this.blockComment = {start: "/*", end: "*/"}; - this.getNextLineIndent = function(state, line, tab) { - if (state == "start" || state == "keyword.statementEnd") { - return ""; - } else { - return this.$getIndent(line); // Keep whatever indent the previous line has + this.getNextLineIndent = function(state, line, tab) { + if (state == "start" || state == "keyword.statementEnd") { + return ""; + } else { + return this.$getIndent(line); // Keep whatever indent the previous line has + } } - } -}).call(Mode.prototype); + }).call(Mode.prototype); -exports.Mode = Mode; + exports.Mode = Mode; }); diff --git a/lib/ace/mode/powershell.js b/lib/ace/mode/powershell.js index b0c12eb7..f3bfcdcc 100644 --- a/lib/ace/mode/powershell.js +++ b/lib/ace/mode/powershell.js @@ -10,7 +10,10 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new PowershellHighlightRules().getRules()); + var highlighter = new PowershellHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode({start: "^\\s*(<#)", end: "^[#\\s]>\\s*$"}); diff --git a/lib/ace/mode/python.js b/lib/ace/mode/python.js index 5a38f2c4..7adaf918 100644 --- a/lib/ace/mode/python.js +++ b/lib/ace/mode/python.js @@ -39,7 +39,9 @@ var PythonFoldMode = require("./folding/pythonic").FoldMode; var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new PythonHighlightRules().getRules()); + var highlighter = new PythonHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; this.foldingRules = new PythonFoldMode("\\:"); }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/ruby.js b/lib/ace/mode/ruby.js index 073fa070..ca832137 100644 --- a/lib/ace/mode/ruby.js +++ b/lib/ace/mode/ruby.js @@ -40,7 +40,10 @@ var Range = require("../range").Range; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new RubyHighlightRules().getRules()); + var highlighter = new RubyHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new FoldMode(); }; diff --git a/lib/ace/mode/scad.js b/lib/ace/mode/scad.js index c5c3e04b..6bd094bc 100644 --- a/lib/ace/mode/scad.js +++ b/lib/ace/mode/scad.js @@ -41,7 +41,10 @@ var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.$tokenizer = new Tokenizer(new scadHighlightRules().getRules()); + var highlighter = new scadHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); diff --git a/lib/ace/mode/scala.js b/lib/ace/mode/scala.js index 407d41cc..97e891fd 100644 --- a/lib/ace/mode/scala.js +++ b/lib/ace/mode/scala.js @@ -9,7 +9,9 @@ var ScalaHighlightRules = require("./scala_highlight_rules").ScalaHighlightRules var Mode = function() { JavaScriptMode.call(this); - this.$tokenizer = new Tokenizer(new ScalaHighlightRules().getRules()); + var highlighter = new ScalaHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, JavaScriptMode); diff --git a/lib/ace/mode/sh.js b/lib/ace/mode/sh.js index d97b336a..84496fb3 100644 --- a/lib/ace/mode/sh.js +++ b/lib/ace/mode/sh.js @@ -38,7 +38,10 @@ var ShHighlightRules = require("./sh_highlight_rules").ShHighlightRules; var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new ShHighlightRules().getRules()); + var highlighter = new ShHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/sql.js b/lib/ace/mode/sql.js index 6d5c8372..6b4d9c6e 100644 --- a/lib/ace/mode/sql.js +++ b/lib/ace/mode/sql.js @@ -38,7 +38,10 @@ var SqlHighlightRules = require("./sql_highlight_rules").SqlHighlightRules; var Range = require("../range").Range; var Mode = function() { - this.$tokenizer = new Tokenizer(new SqlHighlightRules().getRules()); + var highlighter = new SqlHighlightRules(); + + this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/stylus.js b/lib/ace/mode/stylus.js index 879f35fb..065348c6 100644 --- a/lib/ace/mode/stylus.js +++ b/lib/ace/mode/stylus.js @@ -51,6 +51,7 @@ var Mode = function() { this.foldingRules = new FoldMode(); this.$tokenizer = new Tokenizer(highlighter.getRules()); + this.$keywordList = highlighter.$keywordList; }; oop.inherits(Mode, TextMode); diff --git a/lib/ace/mode/text.js b/lib/ace/mode/text.js index e243ddbd..6763c602 100644 --- a/lib/ace/mode/text.js +++ b/lib/ace/mode/text.js @@ -325,7 +325,25 @@ var Mode = function() { } } }; + + this.getKeywords = function() { + var rules = this.$tokenizer.rules; + var keywords = []; + for (var rule in rules) { + var ruleItr = rules[rule]; + for (var r = 0, l = ruleItr.length; r < l; r++) { + if (typeof ruleItr[r].token === "string") { + if (/keyword/.test(ruleItr[r].token)) + keywords.push(ruleItr[r].regex); + else if (/support/.test(ruleItr[r].token)) + keywords.push(ruleItr[r].regex); + } + } + } + return keywords.concat(this.$keywordList || []); + }; + }).call(Mode.prototype); exports.Mode = Mode; diff --git a/lib/ace/mode/text_highlight_rules.js b/lib/ace/mode/text_highlight_rules.js index 5d418ec8..d6dbd794 100644 --- a/lib/ace/mode/text_highlight_rules.js +++ b/lib/ace/mode/text_highlight_rules.js @@ -204,6 +204,7 @@ var TextHighlightRules = function() { for (var i = list.length; i--; ) keywords[list[i]] = className; }); + this.$keywordList = Object.keys(keywords); map = null; return ignoreCase ? function(value) {return keywords[value.toLowerCase()] || defaultToken }