Merge pull request #850 from chhochreiner/master
Tcl Highlighting rules
This commit is contained in:
commit
325e36c3b7
4 changed files with 353 additions and 0 deletions
|
|
@ -125,6 +125,7 @@ var modesByName = {
|
|||
sh: ["SH" , "sh|bash|bat"],
|
||||
sql: ["SQL" , "sql"],
|
||||
svg: ["SVG" , "svg"],
|
||||
tcl: ["Tcl" , "tcl"],
|
||||
text: ["Text" , "txt"],
|
||||
textile: ["Textile" , "textile"],
|
||||
xml: ["XML" , "xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
|
||||
|
|
@ -179,6 +180,7 @@ var docs = {
|
|||
"docs/less.less": "LESS",
|
||||
"docs/html.html": "HTML",
|
||||
"docs/xml.xml": "XML",
|
||||
"docs/tcl.tcl": "Tcl",
|
||||
"docs/yaml.yaml": "YAML",
|
||||
"docs/svg.svg": "SVG",
|
||||
"docs/php.php": "PHP",
|
||||
|
|
|
|||
40
demo/kitchen-sink/docs/tcl.tcl
Normal file
40
demo/kitchen-sink/docs/tcl.tcl
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
|
||||
proc dijkstra {graph origin} {
|
||||
# Initialize
|
||||
dict for {vertex distmap} $graph {
|
||||
dict set dist $vertex Inf
|
||||
dict set path $vertex {}
|
||||
}
|
||||
dict set dist $origin 0
|
||||
dict set path $origin [list $origin]
|
||||
|
||||
while {[dict size $graph]} {
|
||||
# Find unhandled node with least weight
|
||||
set d Inf
|
||||
dict for {uu -} $graph {
|
||||
if {$d > [set dd [dict get $dist $uu]]} {
|
||||
set u $uu
|
||||
set d $dd
|
||||
}
|
||||
}
|
||||
|
||||
# No such node; graph must be disconnected
|
||||
if {$d == Inf} break
|
||||
|
||||
# Update the weights for nodes\
|
||||
lead to by the node we've picked
|
||||
dict for {v dd} [dict get $graph $u] {
|
||||
if {[dict exists $graph $v]} {
|
||||
set alt [expr {$d + $dd}]
|
||||
if {$alt < [dict get $dist $v]} {
|
||||
dict set dist $v $alt
|
||||
dict set path $v [list {*}[dict get $path $u] $v]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Remove chosen node from graph still to be handled
|
||||
dict unset graph $u
|
||||
}
|
||||
return [list $dist $path]
|
||||
}
|
||||
116
lib/ace/mode/tcl.js
Normal file
116
lib/ace/mode/tcl.js
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Ajax.org Code Editor (ACE).
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Ajax.org B.V.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Fabian Jakobs <fabian AT ajax DOT org>
|
||||
* Shlomo Zalman Heigh <shlomozalmanheigh AT gmail DOT com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var TextMode = require("./text").Mode;
|
||||
var Tokenizer = require("../tokenizer").Tokenizer;
|
||||
var TclHighlightRules = require("./tcl_highlight_rules").TclHighlightRules;
|
||||
var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent;
|
||||
var Range = require("../range").Range;
|
||||
|
||||
var Mode = function() {
|
||||
this.$tokenizer = new Tokenizer(new TclHighlightRules().getRules());
|
||||
this.$outdent = new MatchingBraceOutdent();
|
||||
};
|
||||
oop.inherits(Mode, TextMode);
|
||||
|
||||
(function() {
|
||||
|
||||
this.toggleCommentLines = function(state, doc, startRow, endRow) {
|
||||
var outdent = true;
|
||||
var re = /^(\s*)#/;
|
||||
|
||||
for (var i=startRow; i<= endRow; i++) {
|
||||
if (!re.test(doc.getLine(i))) {
|
||||
outdent = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (outdent) {
|
||||
var deleteRange = new Range(0, 0, 0, 0);
|
||||
for (var i=startRow; i<= endRow; i++)
|
||||
{
|
||||
var line = doc.getLine(i);
|
||||
var m = line.match(re);
|
||||
deleteRange.start.row = i;
|
||||
deleteRange.end.row = i;
|
||||
deleteRange.end.column = m[0].length;
|
||||
doc.replace(deleteRange, m[1]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
doc.indentRows(startRow, endRow, "#");
|
||||
}
|
||||
};
|
||||
|
||||
this.getNextLineIndent = function(state, line, tab) {
|
||||
var indent = this.$getIndent(line);
|
||||
|
||||
var tokenizedLine = this.$tokenizer.getLineTokens(line, state);
|
||||
var tokens = tokenizedLine.tokens;
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
this.checkOutdent = function(state, line, input) {
|
||||
return this.$outdent.checkOutdent(line, input);
|
||||
};
|
||||
|
||||
this.autoOutdent = function(state, doc, row) {
|
||||
this.$outdent.autoOutdent(doc, row);
|
||||
};
|
||||
|
||||
}).call(Mode.prototype);
|
||||
|
||||
exports.Mode = Mode;
|
||||
});
|
||||
195
lib/ace/mode/tcl_highlight_rules.js
Normal file
195
lib/ace/mode/tcl_highlight_rules.js
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
* http://www.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Ajax.org Code Editor (ACE).
|
||||
*
|
||||
* The Initial Developer of the Original Code is
|
||||
* Ajax.org B.V.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Christoph Hochreiner <ch.hochreiner AT gmail DOT com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var oop = require("../lib/oop");
|
||||
var lang = require("../lib/lang");
|
||||
var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
|
||||
|
||||
var TclHighlightRules = function() {
|
||||
|
||||
var builtinFunctions = lang.arrayToMap(
|
||||
("").split("|")
|
||||
|
||||
);
|
||||
this.$rules = {
|
||||
"start" : [
|
||||
{
|
||||
token : "comment",
|
||||
merge : true,
|
||||
regex : "#.*\\\\$",
|
||||
next : "commentfollow"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "#.*$"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : '[\\\\]$',
|
||||
next : "splitlineStart"
|
||||
}, {
|
||||
token : "text",
|
||||
regex : '[\\\\](?:["]|[{]|[}]|[[]|[]]|[$]|[\])'
|
||||
}, {
|
||||
token : "text", // last value before command
|
||||
regex : '^|[^{][;][^}]|[/\r/]',
|
||||
next : "commandItem"
|
||||
}, {
|
||||
token : "string", // single line
|
||||
regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||
}, {
|
||||
token : "string", // multi line """ string start
|
||||
merge : true,
|
||||
regex : '[ ]*["]',
|
||||
next : "qqstring"
|
||||
}, {
|
||||
token : "variable.instancce", // variable xotcl with braces
|
||||
merge : true,
|
||||
regex : "[$]",
|
||||
next : "variable"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"
|
||||
}, {
|
||||
token : function(value) {
|
||||
if (builtinFunctions.hasOwnProperty(value))
|
||||
return "keyword";
|
||||
else
|
||||
return "identifier";
|
||||
},
|
||||
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
|
||||
}, {
|
||||
token : "paren.lparen",
|
||||
regex : "[[{]",
|
||||
next : "commandItem"
|
||||
}, {
|
||||
token : "paren.lparen",
|
||||
regex : "[(]"
|
||||
}, {
|
||||
token : "paren.rparen",
|
||||
regex : "[\\])}]"
|
||||
}, {
|
||||
token : "text",
|
||||
regex : "\\s+"
|
||||
}
|
||||
],
|
||||
"commandItem" : [
|
||||
{
|
||||
token : "comment",
|
||||
merge : true,
|
||||
regex : "#.*\\\\$",
|
||||
next : "commentfollow"
|
||||
}, {
|
||||
token : "comment",
|
||||
regex : "#.*$",
|
||||
next : "start"
|
||||
}, {
|
||||
token : "string", // single line
|
||||
regex : '[ ]*["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'
|
||||
}, {
|
||||
token : "variable.instancce", // variable xotcl with braces
|
||||
merge : true,
|
||||
regex : "[$]",
|
||||
next : "variable"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : "(?:[:][:])[a-zA-Z0-9_/]+(?:[:][:])",
|
||||
next : "commandItem"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : "[a-zA-Z0-9_/]+(?:[:][:])",
|
||||
next : "commandItem"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : "(?:[:][:])",
|
||||
next : "commandItem"
|
||||
}, {
|
||||
token : "support.function",
|
||||
regex : "!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|{\\*}|;|::"
|
||||
}, {
|
||||
token : "keyword",
|
||||
regex : "[a-zA-Z0-9_/]+",
|
||||
next : "start"
|
||||
} ],
|
||||
"commentfollow" : [
|
||||
{
|
||||
token : "comment",
|
||||
regex : ".*\\\\$",
|
||||
next : "commentfollow"
|
||||
}, {
|
||||
token : "comment",
|
||||
merge : true,
|
||||
regex : '.+',
|
||||
next : "start"
|
||||
} ],
|
||||
"splitlineStart" : [
|
||||
{
|
||||
token : "text",
|
||||
regex : "^.",
|
||||
next : "start"
|
||||
}],
|
||||
"variable" : [
|
||||
{
|
||||
token : "variable.instancce", // variable xotcl with braces
|
||||
regex : "(?:[:][:])?(?:[a-zA-Z_]|\d)+(?:(?:[:][:])?(?:[a-zA-Z_]|\d)+)?(?:[(](?:[a-zA-Z_]|\d)+[)])?",
|
||||
next : "start"
|
||||
}, {
|
||||
token : "variable.instancce", // variable tcl
|
||||
regex : "(?:[a-zA-Z_]|\d)+(?:[(](?:[a-zA-Z_]|\d)+[)])?",
|
||||
next : "start"
|
||||
}, {
|
||||
token : "variable.instancce", // variable tcl with braces
|
||||
regex : "{?(?:[a-zA-Z_]|\d)+}?",
|
||||
next : "start"
|
||||
}],
|
||||
"qqstring" : [ {
|
||||
token : "string", // multi line """ string end
|
||||
regex : '(?:[^\\\\]|\\\\.)*?["]',
|
||||
next : "start"
|
||||
}, {
|
||||
token : "string",
|
||||
merge : true,
|
||||
regex : '.+'
|
||||
} ]
|
||||
};
|
||||
};
|
||||
|
||||
oop.inherits(TclHighlightRules, TextHighlightRules);
|
||||
|
||||
exports.TclHighlightRules = TclHighlightRules;
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue