diff --git a/demo/kitchen-sink/doclist.js b/demo/kitchen-sink/doclist.js index 3abdf664..651c09e4 100644 --- a/demo/kitchen-sink/doclist.js +++ b/demo/kitchen-sink/doclist.js @@ -78,6 +78,7 @@ var docs = { "docs/textile.textile": {name: "Textile", wrapped: true}, "docs/c9search.c9search_results": "C9 Search Results", + "docs/mel.mel": "MEL", "docs/Nix.nix": "Nix" }; diff --git a/demo/kitchen-sink/docs/mel.mel b/demo/kitchen-sink/docs/mel.mel new file mode 100644 index 00000000..2affc98b --- /dev/null +++ b/demo/kitchen-sink/docs/mel.mel @@ -0,0 +1,49 @@ +proc float edgeCalc(string $edge) +{ + + float $distance; + select -r `polyListComponentConversion -tv`; + string $connectedVerts[] = `filterExpand -ex 1 -sm 31`; + vector $PT1 = `pointPosition -w $connectedVerts[0]`; + vector $PT2 = `pointPosition -w $connectedVerts[1]`; + float $distance = mag(($PT1-$PT2)); + + return $distance; + +} + +global proc edgeLength() + { + source roundoff.mel; + string $edges[]= `filterExpand -ex 1 -sm 32`; + string $unit = `currentUnit -q -l`; + float $edgeLength[]; + int $conversion = 10; + + float $totalLength=0; // <= Init your sum variable + //save edgelength to var for later + for($i=0;$i<`size $edges`;$i++) + { + select -r $edges[$i]; // Select only one edge + $edgeLength[$i] = edgeCalc($edges[$i]); + $totalLength += $edgeLength[$i] * $conversion; + + } + + float $rounded_mm = `roundoff $totalLength 0`; + float $rounded_m = `roundoff (($totalLength)/1000) 2`; + string $edgeno = (size($edgeLength)); + string $edgenoprint; + + if(size($edgeLength)>1) { + $edgenoprint = " edges"; + } + else { + $edgenoprint = " edge"; + } + + print ($rounded_mm + " mm / " +$rounded_m+ " m - Total length of " + $edgeno + $edgenoprint +"\n"); + select -r $edges; // restore previous selection + + } + \ No newline at end of file diff --git a/lib/ace/mode/mel.js b/lib/ace/mode/mel.js index bf8ec8a4..685909be 100644 --- a/lib/ace/mode/mel.js +++ b/lib/ace/mode/mel.js @@ -3,7 +3,7 @@ * * Copyright (c) 2012, Ajax.org B.V. * All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright @@ -14,7 +14,7 @@ * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -26,17 +26,8 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * - * Contributor(s): - * - * - * * ***** END LICENSE BLOCK ***** */ -/* - THIS FILE WAS AUTOGENERATED BY mode.tmpl.js -*/ - define(function(require, exports, module) { "use strict"; @@ -44,20 +35,20 @@ var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var Tokenizer = require("../tokenizer").Tokenizer; var MELHighlightRules = require("./mel_highlight_rules").MELHighlightRules; -// TODO: pick appropriate fold mode -var FoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { - this.HighlightRules = new MELHighlightRules(); - this.foldingRules = new FoldMode(); + var highlighter = new MELHighlightRules(); + this.$tokenizer = new Tokenizer(highlighter.getRules()); }; oop.inherits(Mode, TextMode); (function() { + this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; - // Extra logic goes here. + }).call(Mode.prototype); exports.Mode = Mode; + }); \ No newline at end of file diff --git a/lib/ace/mode/mel_highlight_rules.js b/lib/ace/mode/mel_highlight_rules.js index 360e6eb5..ca23fd4f 100644 --- a/lib/ace/mode/mel_highlight_rules.js +++ b/lib/ace/mode/mel_highlight_rules.js @@ -77,9 +77,10 @@ var MELHighlightRules = function() { regex: '"', next: 'pop' }, { defaultToken: 'string.quoted.double.mel' } ] }, - { todo: 'fix grouping', - token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ], - regex: '(\\$)[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*?\\b' }, + + { token: [ 'variable.other.mel', 'punctuation.definition.variable.mel' ], + regex: '(\\$)([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*?\\b)' }, + { token: 'punctuation.definition.string.begin.mel', regex: '\'', push: @@ -88,8 +89,10 @@ var MELHighlightRules = function() { regex: '\'', next: 'pop' }, { defaultToken: 'string.quoted.single.mel' } ] }, + { token: 'constant.language.mel', regex: '\\b(false|true|yes|no|on|off)\\b' }, + { token: 'punctuation.definition.comment.mel', regex: '/\\*', push: @@ -97,35 +100,29 @@ var MELHighlightRules = function() { regex: '\\*/', next: 'pop' }, { defaultToken: 'comment.block.mel' } ] }, - { todo: 'fix grouping', - token: - [ 'comment.line.double-slash.mel', - 'punctuation.definition.comment.mel' ], - regex: '(//).*$\\n?' }, + + { token: [ 'comment.line.double-slash.mel', 'punctuation.definition.comment.mel' ], + regex: '(//)(.*$\\n?)' }, + { caseInsensitive: true, token: 'keyword.operator.mel', regex: '\\b(instanceof)\\b' }, { token: 'keyword.operator.symbolic.mel', regex: '[-\\!\\%\\&\\*\\+\\=\\/\\?\\:]' }, - { todo: 'fix grouping', - token: - [ 'meta.preprocessor.mel', - 'punctuation.definition.preprocessor.mel' ], - regex: '^[ \\t]*(#)[a-zA-Z]+' }, - { todo: 'fix grouping', - token: - [ 'meta.function.mel', - 'keyword.other.mel', - 'storage.type.mel', - 'entity.name.function.mel', - 'punctuation.section.function.mel' ], - regex: '((?:global\\s*)?proc)\\s*(\\w+\\s*\\[?\\]?\\s+|\\s+)([A-Za-z_][A-Za-z0-9_\\.]*)\\s*(\\()', + + { token: [ 'meta.preprocessor.mel', 'punctuation.definition.preprocessor.mel' ], + regex: '(^[ \\t]*)((?:#)[a-zA-Z]+)' }, + + { token: [ 'meta.function.mel', 'keyword.other.mel', 'storage.type.mel', 'entity.name.function.mel', 'punctuation.section.function.mel' ], + regex: '((?:global\\s*)?proc)\\s*(\\w+\\s*\\[?\\]?\\s+|\\s+)([A-Za-z_][A-Za-z0-9_\\.]*)(\\s*(\\())', push: [ { include: '$self' }, { token: 'punctuation.section.function.mel', regex: '\\)', next: 'pop' }, - { defaultToken: 'meta.function.mel' } ] } ] } + { defaultToken: 'meta.function.mel' } ] } + + ] } this.normalizeRules(); };