From b54a00cb4da3475de1461957a64246fd4738627e Mon Sep 17 00:00:00 2001 From: nightwing Date: Wed, 17 Apr 2013 15:52:56 +0400 Subject: [PATCH] add ini mode --- lib/ace/mode/ini.js | 64 +++++++++++++++++++ lib/ace/mode/ini_highlight_rules.js | 98 +++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 lib/ace/mode/ini.js create mode 100644 lib/ace/mode/ini_highlight_rules.js diff --git a/lib/ace/mode/ini.js b/lib/ace/mode/ini.js new file mode 100644 index 00000000..cd21990a --- /dev/null +++ b/lib/ace/mode/ini.js @@ -0,0 +1,64 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * 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 + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * 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 + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (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"; + +var oop = require("../lib/oop"); +var TextMode = require("./text").Mode; +var Tokenizer = require("../tokenizer").Tokenizer; +var IniHighlightRules = require("./ini_highlight_rules").IniHighlightRules; +// TODO: pick appropriate fold mode +var FoldMode = require("./folding/cstyle").FoldMode; + +var Mode = function() { + var highlighter = new IniHighlightRules(); + this.foldingRules = new FoldMode(); + 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/ini_highlight_rules.js b/lib/ace/mode/ini_highlight_rules.js new file mode 100644 index 00000000..75d28c4f --- /dev/null +++ b/lib/ace/mode/ini_highlight_rules.js @@ -0,0 +1,98 @@ +/* ***** BEGIN LICENSE BLOCK ***** + * Distributed under the BSD license: + * + * 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 + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * 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 + * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * ***** END LICENSE BLOCK ***** */ + +/* This file was autogenerated from tool\tm bundles\ini.tmbundle\Syntaxes\Ini.plist (uuid: ) */ +/**************************************************************************************** + * IT MIGHT NOT BE PERFECT ...But it's a good start from an existing *.tmlanguage file. * + * fileTypes * + ****************************************************************************************/ + +define(function(require, exports, module) { +"use strict"; + +var oop = require("../lib/oop"); +var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; + +var IniHighlightRules = function() { + // regexp must not have capturing parentheses. Use (?:) instead. + // regexps are ordered -> the first match is used + + this.$rules = { start: + [ { token: 'punctuation.definition.comment.ini', + regex: '#', + push: + [ { token: 'comment.line.number-sign.ini', + regex: '$', + next: 'pop' }, + { defaultToken: 'comment.line.number-sign.ini' } ] }, + { token: 'punctuation.definition.comment.ini', + regex: ';', + push: + [ { token: 'comment.line.semicolon.ini', regex: '$', next: 'pop' }, + { defaultToken: 'comment.line.semicolon.ini' } ] }, + { token: + [ 'keyword.other.definition.ini', + 'text', + 'punctuation.separator.key-value.ini' ], + regex: '\\b([a-zA-Z0-9_.-]+)\\b(\\s*)(=)' }, + { token: + [ 'punctuation.definition.entity.ini', + 'constant.section.group-title.ini', + 'punctuation.definition.entity.ini' ], + regex: '^(\\[)(.*?)(\\])' }, + { token: 'punctuation.definition.string.begin.ini', + regex: '\'', + push: + [ { token: 'punctuation.definition.string.end.ini', + regex: '\'', + next: 'pop' }, + { token: 'constant.character.escape.ini', regex: '\\\\.' }, + { defaultToken: 'string.quoted.single.ini' } ] }, + { token: 'punctuation.definition.string.begin.ini', + regex: '"', + push: + [ { token: 'punctuation.definition.string.end.ini', + regex: '"', + next: 'pop' }, + { defaultToken: 'string.quoted.double.ini' } ] } ] } + + this.normalizeRules(); +}; + +IniHighlightRules.metaData = { fileTypes: [ 'ini', 'conf' ], + keyEquivalent: '^~I', + name: 'Ini', + scopeName: 'source.ini' } + + +oop.inherits(IniHighlightRules, TextHighlightRules); + +exports.IniHighlightRules = IniHighlightRules; +}); \ No newline at end of file