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"],
|
sh: ["SH" , "sh|bash|bat"],
|
||||||
sql: ["SQL" , "sql"],
|
sql: ["SQL" , "sql"],
|
||||||
svg: ["SVG" , "svg"],
|
svg: ["SVG" , "svg"],
|
||||||
|
tcl: ["Tcl" , "tcl"],
|
||||||
text: ["Text" , "txt"],
|
text: ["Text" , "txt"],
|
||||||
textile: ["Textile" , "textile"],
|
textile: ["Textile" , "textile"],
|
||||||
xml: ["XML" , "xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
|
xml: ["XML" , "xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl"],
|
||||||
|
|
@ -179,6 +180,7 @@ var docs = {
|
||||||
"docs/less.less": "LESS",
|
"docs/less.less": "LESS",
|
||||||
"docs/html.html": "HTML",
|
"docs/html.html": "HTML",
|
||||||
"docs/xml.xml": "XML",
|
"docs/xml.xml": "XML",
|
||||||
|
"docs/tcl.tcl": "Tcl",
|
||||||
"docs/yaml.yaml": "YAML",
|
"docs/yaml.yaml": "YAML",
|
||||||
"docs/svg.svg": "SVG",
|
"docs/svg.svg": "SVG",
|
||||||
"docs/php.php": "PHP",
|
"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