big-moving.ru/api/soft/Ace/lib/ace/mode/haml_highlight_rules.js

146 lines
4.2 KiB
JavaScript
Executable File

define(function(require, exports, module) {
"use strict";
var oop = require("../lib/oop");
var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules;
var RubyExports = require("./ruby_highlight_rules");
var RubyHighlightRules = RubyExports.RubyHighlightRules;
var HamlHighlightRules = function() {
// regexp must not have capturing parentheses. Use (?:) instead.
// regexps are ordered -> the first match is used
HtmlHighlightRules.call(this);
this.$rules = {
"start": [
{
token: "comment.block", // multiline HTML comment
regex: /^\/$/,
next: "comment"
},
{
token: "comment.block", // multiline HAML comment
regex: /^\-#$/,
next: "comment"
},
{
token: "comment.line", // HTML comment
regex: /\/\s*.*/
},
{
token: "comment.line", // HAML comment
regex: /-#\s*.*/
},
{
token: "keyword.other.doctype",
regex: "^!!!\\s*(?:[a-zA-Z0-9-_]+)?"
},
RubyExports.qString,
RubyExports.qqString,
RubyExports.tString,
{
token: "meta.tag.haml",
regex: /(%[\w:\-]+)/
},
{
token: "keyword.attribute-name.class.haml",
regex: /\.[\w-]+/
},
{
token: "keyword.attribute-name.id.haml",
regex: /#[\w-]+/,
next: "element_class"
},
RubyExports.constantNumericHex,
RubyExports.constantNumericFloat,
RubyExports.constantOtherSymbol,
{
token: "text",
regex: /=|-|~/,
next: "embedded_ruby"
}
],
"element_class": [
{
token: "keyword.attribute-name.class.haml",
regex: /\.[\w-]+/
},
{
token: "punctuation.section",
regex: /\{/,
next: "element_attributes"
},
RubyExports.constantOtherSymbol,
{
token: "empty",
regex: "$|(?!\\.|#|\\{|\\[|=|-|~|\\/])",
next: "start"
}
],
"element_attributes": [
RubyExports.constantOtherSymbol,
RubyExports.qString,
RubyExports.qqString,
RubyExports.tString,
RubyExports.constantNumericHex,
RubyExports.constantNumericFloat,
{
token: "punctuation.section",
regex: /$|\}/,
next: "start"
}
],
"embedded_ruby": [
RubyExports.constantNumericHex,
RubyExports.constantNumericFloat,
RubyExports.instanceVariable,
RubyExports.qString,
RubyExports.qqString,
RubyExports.tString,
{
token : "support.class", // class name
regex : "[A-Z][a-zA-Z_\\d]+"
},
{
token : new RubyHighlightRules().getKeywords(),
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
},
{
token : ["keyword", "text", "text"],
regex : "(?:do|\\{)(?: \\|[^|]+\\|)?$",
next : "start"
},
{
token : ["text"],
regex : "^$",
next : "start"
},
{
token : ["text"],
regex : "^(?!.*\\|\\s*$)",
next : "start"
}
],
"comment": [
{
token: "comment.block",
regex: /^$/,
next: "start"
},
{
token: "comment.block", // comment spanning the whole line
regex: /\s+.*/
}
]
};
this.normalizeRules();
};
oop.inherits(HamlHighlightRules, HtmlHighlightRules);
exports.HamlHighlightRules = HamlHighlightRules;
});