From cd506ca7ad97523ce37b05d35d05620def01ac68 Mon Sep 17 00:00:00 2001 From: jiyinyiyong Date: Thu, 23 Jan 2014 15:53:50 +0800 Subject: [PATCH] add Cirru syntax highlighting --- demo/kitchen-sink/docs/cirru.cirru | 36 +++++++++++ lib/ace/ext/modelist.js | 1 + lib/ace/mode/cirru.js | 23 +++++++ lib/ace/mode/cirru_highlight_rules.js | 91 +++++++++++++++++++++++++++ 4 files changed, 151 insertions(+) create mode 100644 demo/kitchen-sink/docs/cirru.cirru create mode 100644 lib/ace/mode/cirru.js create mode 100644 lib/ace/mode/cirru_highlight_rules.js diff --git a/demo/kitchen-sink/docs/cirru.cirru b/demo/kitchen-sink/docs/cirru.cirru new file mode 100644 index 00000000..98013998 --- /dev/null +++ b/demo/kitchen-sink/docs/cirru.cirru @@ -0,0 +1,36 @@ +-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr, + +set a (int 2) + +print (self) + +set c (child) + +under c + under parent + print a + +print $ get c a + +set c x (int 3) +print $ get c x + +set just-print $ code + print a + +print just-print + +eval (self) just-print +eval just-print + +print (string "string with space") +print (string "escapes \n \"\\") + +brackets ((((())))) + +"eval" $ string "eval" + +print (add $ (int 1) (int 2)) + +print $ unwrap $ + map (a $ int 1) (b $ int 2) \ No newline at end of file diff --git a/lib/ace/ext/modelist.js b/lib/ace/ext/modelist.js index e3b8862a..632ae088 100644 --- a/lib/ace/ext/modelist.js +++ b/lib/ace/ext/modelist.js @@ -52,6 +52,7 @@ var supportedModes = { BatchFile: ["bat|cmd"], C9Search: ["c9search_results"], C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp"], + Cirru: ["cirru|cr"], Clojure: ["clj"], Cobol: ["CBL|COB"], coffee: ["coffee|cf|cson|^Cakefile"], diff --git a/lib/ace/mode/cirru.js b/lib/ace/mode/cirru.js new file mode 100644 index 00000000..0d478635 --- /dev/null +++ b/lib/ace/mode/cirru.js @@ -0,0 +1,23 @@ + +define(function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var CirruHighlightRules = require("./cirru_highlight_rules").CirruHighlightRules; +var CoffeeFoldMode = require("./folding/coffee").FoldMode; + +var Mode = function() { + this.HighlightRules = CirruHighlightRules; + this.foldingRules = new CoffeeFoldMode(); +}; +oop.inherits(Mode, TextMode); + +(function() { + this.lineCommentStart = "--"; + this.$id = "ace/mode/cirru"; +}).call(Mode.prototype); + +exports.Mode = Mode; +}); diff --git a/lib/ace/mode/cirru_highlight_rules.js b/lib/ace/mode/cirru_highlight_rules.js new file mode 100644 index 00000000..92b327c9 --- /dev/null +++ b/lib/ace/mode/cirru_highlight_rules.js @@ -0,0 +1,91 @@ +define(function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + +// see http://cirru.org for more about this language +var CirruHighlightRules = function() { + this.$rules = { + start: [{ + token: 'constant.numeric', + regex: /[\d\.]+/ + }, { + token: 'comment.line.double-dash', + regex: /--/, + next: 'comment', + }, { + token: 'storage.modifier', + regex: /\(/, + }, { + token: 'support.function', + regex: /[^\(\)\"\s]+/, + next: 'line' + }, { + token: 'string.quoted.double', + regex: /"/, + next: 'string', + }, { + token: 'storage.modifier', + regex: /\)/, + }], + comment: [{ + token: 'comment.line.double-dash', + regex: /\ +[^\n]+/, + next: 'start', + }], + string: [{ + token: 'string.quoted.double', + regex: /"/, + next: 'line', + }, { + token: 'constant.character.escape', + regex: /\\/, + next: 'escape', + }, { + token: 'string.quoted.double', + regex: /[^\\\"]+/, + }], + escape: [{ + token: 'constant.character.escape', + regex: /./, + next: 'string', + }], + line: [{ + token: 'constant.numeric', + regex: /[\d\.]+/ + }, { + token: 'markup.raw', + regex: /^\s*/, + next: 'start', + }, { + token: 'variable.parameter', + regex: /[^\(\)\"\s]+/ + }, { + token: 'storage.modifier', + regex: /\(/, + next: 'start' + }, { + token: 'storage.modifier', + regex: /\)/, + }, { + token: 'markup.raw', + regex: /^\ */, + next: 'start', + }, { + token: 'storage.modifier', + regex: /\$/, + next: 'start', + }, { + token: 'string.quoted.double', + regex: /"/, + next: 'string', + }] + } + +}; + +oop.inherits(CirruHighlightRules, TextHighlightRules); + +exports.CirruHighlightRules = CirruHighlightRules; +});