X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=common%2Fmodules%2Fhighlight.jsm;h=501edde272d2406b3f2043df60678caa0ce2f3e5;hb=247daf849abc85f4cfb10fa358c62c8daf8db95b;hp=73b6b06ae7cf35ed166aa9b003e442d3285538bd;hpb=70740024f9c028c1fd63e1a1850ab062ff956054;p=dactyl.git diff --git a/common/modules/highlight.jsm b/common/modules/highlight.jsm index 73b6b06..501edde 100644 --- a/common/modules/highlight.jsm +++ b/common/modules/highlight.jsm @@ -1,15 +1,16 @@ -// Copyright (c) 2008-2011 by Kris Maglione +// Copyright (c) 2008-2014 Kris Maglione // // This work is licensed for reuse under an MIT license. Details are // given in the LICENSE.txt file included with this file. "use strict"; -Components.utils.import("resource://dactyl/bootstrap.jsm"); defineModule("highlight", { exports: ["Highlight", "Highlights", "highlight"], - require: ["services", "styles", "util"], - use: ["messages", "template"] -}, this); + require: ["services", "util"] +}); + +lazyRequire("styles", ["Styles", "styles"]); +lazyRequire("template", ["template"]); var Highlight = Struct("class", "selector", "sites", "defaultExtends", "defaultValue", @@ -56,22 +57,22 @@ Highlight.defaultValue("sites", function () Highlight.defaultValue("style", function () styles.system.add("highlight:" + this.class, this.sites, this.css, this.agent, true)); -Highlight.defaultValue("defaultExtends", function () []); -Highlight.defaultValue("defaultValue", function () ""); +Highlight.defaultValue("defaultExtends", () => []); +Highlight.defaultValue("defaultValue", () => ""); Highlight.defaultValue("extends", function () this.defaultExtends); Highlight.defaultValue("value", function () this.defaultValue); update(Highlight.prototype, { get base() this.baseClass != this.class && highlight.highlight[this.baseClass] || null, - get bases() array.compact(this.extends.map(function (name) highlight.get(name))), + get bases() array.compact(this.extends.map(name => highlight.get(name))), get inheritedCSS() { if (this.gettingCSS) return ""; try { this.gettingCSS = true; - return this.bases.map(function (b) b.cssText.replace(/;?\s*$/, "; ")).join(""); + return this.bases.map(b => b.cssText.replace(/;?\s*$/, "; ")).join(""); } finally { this.gettingCSS = false; @@ -99,7 +100,7 @@ var Highlights = Module("Highlight", { keys: function keys() Object.keys(this.highlight).sort(), - __iterator__: function () values(this.highlight).sort(function (a, b) String.localeCompare(a.class, b.class)) + __iterator__: function () values(this.highlight).sort((a, b) => String.localeCompare(a.class, b.class)) .iterValues(), _create: function _create(agent, args) { @@ -124,7 +125,7 @@ var Highlights = Module("Highlight", { if (/^[[>+: ]/.test(args[1])) obj.selector = this.selector(obj.class) + args[1]; else if (args[1]) - obj.selector = this.selector(args[1]); + obj.selector = this.selector(args[1].replace(/^,/, "")); if (old && old.value != old.defaultValue) obj.value = old.value; @@ -133,8 +134,12 @@ var Highlights = Module("Highlight", { obj.style.enabled = true; else this.loaded.__defineSetter__(obj.class, function () { - delete this[obj.class]; - this[obj.class] = true; + Object.defineProperty(this, obj.class, { + value: true, + configurable: true, + enumerable: true, + writable: true + }); if (obj.class === obj.baseClass) for (let h in highlight) @@ -152,7 +157,7 @@ var Highlights = Module("Highlight", { let highlight = this.highlight[key] || this._create(false, [key]); - let bases = extend || highlight.extend; + let bases = extend || highlight.extends; if (append) { newStyle = Styles.append(highlight.value || "", newStyle); bases = highlight.extends.concat(bases); @@ -196,14 +201,14 @@ var Highlights = Module("Highlight", { * @param {string} group */ highlightNode: function highlightNode(node, group, applyBindings) { - node.setAttributeNS(NS.uri, "highlight", group); + node.setAttributeNS(NS, "highlight", group); let groups = group.split(" "); - for each (let group in groups) + for (let group of groups) this.loaded[group] = true; if (applyBindings) - for each (let group in groups) { + for (let group of groups) { if (applyBindings.bindings && group in applyBindings.bindings) applyBindings.bindings[group](node, applyBindings); else if (group in template.bindings) @@ -217,20 +222,21 @@ var Highlights = Module("Highlight", { * @param {string} class */ selector: function selector(class_) - let (self = this) - class_.replace(/(^|[>\s])([A-Z][\w-]+)\b/g, - function (m, n1, hl) n1 + - (self.highlight[hl] && self.highlight[hl].class != class_ - ? self.highlight[hl].selector : "[dactyl|highlight~=" + hl + "]")), - - groupRegexp: util.regexp(\s])([A-Z][\w-]+)\b/g, + (m, n1, hl) => { + if (this.highlight[hl] && this.highlight[hl].class != class_) + return n1 + this.highlight[hl].selector; + return n1 + "[dactyl|highlight~=" + hl + "]"; + }), + + groupRegexp: util.regexp(literal(/* ^ (\s* (?:\S|\s\S)+ \s+) \{ ([^}]*) \} \s* $ - ]]>, "gmx"), - sheetRegexp: util.regexp( (?:[^;\s]|\s[^;\s])+ ) @@ -239,7 +245,8 @@ var Highlights = Module("Highlight", { (?:; (?P (?:[^;\s]|\s[^;\s])+ )? )? \s* (?P .*) $ - ]]>, "x"), + */), "x"), + // /** * Bulk loads new CSS rules, in the format of, @@ -272,15 +279,15 @@ var Highlights = Module("Highlight", { * If Star is provided, the style is applied as an agent sheet. * * The new styles are lazily activated unless Bang or *eager* is - * provided. See {@link Util#xmlToDom}. + * provided. * * @param {string} css The rules to load. See {@link Highlights#css}. * @param {boolean} eager When true, load all provided rules immediately. */ loadCSS: function loadCSS(css, eager) { String.replace(css, /\\\n/g, "") - .replace(this.groupRegexp, function (m, m1, m2) m1 + " " + m2.replace(/\n\s*/g, " ")) - .split("\n").filter(function (s) /\S/.test(s) && !/^\s*\/\//.test(s)) + .replace(this.groupRegexp, (m, m1, m2) => (m1 + " " + m2.replace(/\n\s*/g, " "))) + .split("\n").filter(s => (/\S/.test(s) && !/^\s*\/\//.test(s))) .forEach(function (highlight) { let bang = eager || /^\s*!/.test(highlight); @@ -321,7 +328,7 @@ var Highlights = Module("Highlight", { commands.add(["hi[ghlight]"], "Set the style of certain display elements", function (args) { - let style = ; + */); let clear = args[0] == "clear"; if (clear) args.shift(); @@ -348,10 +355,10 @@ var Highlights = Module("Highlight", { ["padding: 0 1em 0 0; vertical-align: top; max-width: 16em; overflow: hidden;", "text-align: center"], ([h.class, - XXX, - template.map(h.extends, template.highlight), + ["span", { style: "text-align: center; line-height: 1em;" + h.value + style }, "XXX"], + template.map(h.extends, s => template.highlight(s), ","), template.highlightRegexp(h.value, /\b[-\w]+(?=:)|\/\*.*?\*\//g, - function (match) {match}) + match => ["span", { highlight: match[0] == "/" ? "Comment" : "Key" }, match]) ] for (h in highlight) if (!key || h.class.indexOf(key) > -1)))); @@ -392,7 +399,7 @@ var Highlights = Module("Highlight", { completer: function (context, args) { let group = args[0] && highlight.get(args[0]); if (group) - context.fork("extra", 0, this, function (context) [ + context.fork("extra", 0, this, context => [ [String(group.extends), _("option.currentValue")], [String(group.defaultExtends) || "", _("option.defaultValue")] ]); @@ -404,7 +411,10 @@ var Highlights = Module("Highlight", { { command: this.name, arguments: [v.class], - literalArg: v.value + literalArg: v.value, + options: { + "-link": v.extends.length ? v.extends : undefined + } } for (v in Iterator(highlight)) if (v.value != v.defaultValue) @@ -418,12 +428,13 @@ var Highlights = Module("Highlight", { let extRe = RegExp("\\." + config.fileExtension + "$"); context.title = ["Color Scheme", "Runtime Path"]; - context.keys = { text: function (f) f.leafName.replace(extRe, ""), description: ".parent.path" }; + context.keys = { text: f => f.leafName.replace(extRe, ""), + description: ".parent.path" }; context.completions = array.flatten( io.getRuntimeDirectories("colors").map( - function (dir) dir.readDirectory().filter( - function (file) extRe.test(file.leafName)))) + dir => dir.readDirectory() + .filter(file => extRe.test(file.leafName)))) .concat([ { leafName: "default", parent: { path: /*L*/"Revert to builtin colorscheme" } } ]); @@ -436,10 +447,10 @@ var Highlights = Module("Highlight", { }; }, javascript: function initJavascript(dactyl, modules, window) { - modules.JavaScript.setCompleter(["get", "set"].map(function (m) highlight[m]), - [ function (context, obj, args) Iterator(highlight.highlight) ]); - modules.JavaScript.setCompleter(["highlightNode"].map(function (m) highlight[m]), - [ null, function (context, obj, args) Iterator(highlight.highlight) ]); + modules.JavaScript.setCompleter(["get", "set"].map(m => highlight[m]), + [ (context, obj, args) => Iterator(highlight.highlight) ]); + modules.JavaScript.setCompleter(["highlightNode"].map(m => highlight[m]), + [ null, (context, obj, args) => Iterator(highlight.highlight) ]); } }); @@ -447,4 +458,4 @@ var Highlights = Module("Highlight", { endModule(); -// vim: set fdm=marker sw=4 ts=4 et ft=javascript: +// vim: set fdm=marker sw=4 sts=4 ts=8 et ft=javascript: