changeset in labs/bespinclient: Bug 572115 - Introduce a "specia...

5 views
Skip to first unread message

Patrick Walton

unread,
Sep 29, 2010, 7:17:18 PM9/29/10
to bespin-...@googlegroups.com
changeset 24cebc9a07d5 in /repo/hg/mozilla/labs/bespinclient
details: http://hg.mozilla.org/labs/bespinclient?cmd=changeset;node=24cebc9a07d5
description:
Bug 572115 - Introduce a "specialmodules" setting, which will cause modules that match that regex to be highlighted in a different color

diffstat:

plugins/supported/js_syntax.js | 54 ++++++++++++++++++++++++++-
plugins/supported/standard_syntax.js | 12 +++++-
plugins/supported/syntax_directory.js | 1 +
plugins/supported/syntax_manager/index.js | 7 +++
plugins/supported/syntax_manager/package.json | 1 +
plugins/supported/syntax_worker.js | 13 ++++++
plugins/supported/text_editor/package.json | 23 ++++++-----
7 files changed, 97 insertions(+), 14 deletions(-)

diffs (238 lines):

diff --git a/plugins/supported/js_syntax.js b/plugins/supported/js_syntax.js
--- a/plugins/supported/js_syntax.js
+++ b/plugins/supported/js_syntax.js
@@ -38,14 +38,22 @@
"define metadata";
({
"description": "JavaScript syntax highlighter",
- "dependencies": { "standard_syntax": "0.0.0" },
+ "dependencies": { "settings": "0.0.0", "standard_syntax": "0.0.0" },
"environments": { "worker": true },
"provides": [
{
"ep": "syntax",
"name": "js",
"pointer": "#JSSyntax",
- "fileexts": [ "js", "json" ]
+ "fileexts": [ "js", "json" ],
+ "settings": [ "specialmodules" ]
+ },
+ {
+ "ep": "setting",
+ "name": "specialmodules",
+ "description": "Regex that matches special modules",
+ "type": "text",
+ "defaultValue": "^jetpack\\.[^\"']+"
}
]
});
@@ -65,6 +73,11 @@ var states = {
tag: 'keyword'
},
{
+ regex: /^require/,
+ tag: 'builtin',
+ then: 'require'
+ },
+ {
regex: /^[A-Za-z_][A-Za-z0-9_]*/,
tag: 'plain'
},
@@ -131,7 +144,44 @@ var states = {
regex: /^[*\/]/,
tag: 'comment'
}
+ ],
+
+ /* Special handling for "require" */
+
+ require: [
+ {
+ regex: /^\(["']/,
+ tag: 'plain',
+ then: 'requireBody'
+ },
+ {
+ regex: /^/,
+ tag: 'plain',
+ then: 'start'
+ }
+ ],
+
+ requireBody: [
+ {
+ regexSetting: 'specialmodules',
+ tag: 'specialmodule',
+ then: 'requireEnd'
+ },
+ {
+ regex: /^[^"']+/,
+ tag: 'module',
+ then: 'requireEnd'
+ }
+ ],
+
+ requireEnd: [
+ {
+ regex: /^["']?/,
+ tag: 'plain',
+ then: 'start'
+ }
]
};

exports.JSSyntax = new StandardSyntax(states);
+
diff --git a/plugins/supported/standard_syntax.js b/plugins/supported/standard_syntax.js
--- a/plugins/supported/standard_syntax.js
+++ b/plugins/supported/standard_syntax.js
@@ -55,6 +55,8 @@ var syntaxDirectory = require('syntax_di
exports.StandardSyntax = function(states, subsyntaxes) {
this.states = states;
this.subsyntaxes = subsyntaxes;
+
+ this.settings = {};
};

/** This syntax controller exposes a simple regex- and line-based parser. */
@@ -71,7 +73,13 @@ exports.StandardSyntax.prototype = {

var result = null;
_(this.states[state]).each(function(alt) {
- var regex = alt.regex;
+ var regex;
+ if (alt.regexSetting != null) {
+ regex = new RegExp(this.settings[alt.regexSetting]);
+ } else {
+ regex = alt.regex;
+ }
+
var match = regex.exec(str);
if (match == null) {
return;
@@ -109,7 +117,7 @@ exports.StandardSyntax.prototype = {
}

_.breakLoop();
- });
+ }, this);

return result;
}
diff --git a/plugins/supported/syntax_directory.js b/plugins/supported/syntax_directory.js
--- a/plugins/supported/syntax_directory.js
+++ b/plugins/supported/syntax_directory.js
@@ -56,6 +56,7 @@ function SyntaxInfo(ext) {
this.extension = ext;
this.name = ext.name;
this.fileExts = ext.hasOwnProperty('fileexts') ? ext.fileexts : [];
+ this.settings = ext.settings != null ? ext.settings : [];
}

/**
diff --git a/plugins/supported/syntax_manager/index.js b/plugins/supported/syntax_manager/index.js
--- a/plugins/supported/syntax_manager/index.js
+++ b/plugins/supported/syntax_manager/index.js
@@ -40,6 +40,7 @@ var Event = require('events').Event;
var WorkerSupervisor = require('worker_manager').WorkerSupervisor;
var console = require('bespin:console').console;
var rangeutils = require('rangeutils:utils/range');
+var settings = require('settings').settings;
var syntaxDirectory = require('syntax_directory').syntaxDirectory;

// The number of lines to highlight at once.
@@ -166,7 +167,13 @@ Context.prototype = {
},

_workerStarted: function() {
+ this._syntaxInfo.settings.forEach(function(name) {
+ var value = settings.get(name);
+ this._worker.send('setSyntaxSetting', [ name, value ]);
+ }, this);
+
this._worker.send('loadSyntax', [ this._syntaxInfo.name ]);
+
if (this._active) {
this._annotate();
}
diff --git a/plugins/supported/syntax_manager/package.json b/plugins/supported/syntax_manager/package.json
--- a/plugins/supported/syntax_manager/package.json
+++ b/plugins/supported/syntax_manager/package.json
@@ -2,6 +2,7 @@
"description": "Provides syntax highlighting services for the editor",
"dependencies": {
"events": "0.0.0",
+ "settings": "0.0.0",
"syntax_directory": "0.0.0",
"underscore": "0.0.0",
"worker_manager": "0.0.0"
diff --git a/plugins/supported/syntax_worker.js b/plugins/supported/syntax_worker.js
--- a/plugins/supported/syntax_worker.js
+++ b/plugins/supported/syntax_worker.js
@@ -50,6 +50,7 @@ var syntaxDirectory = require('syntax_di

var syntaxWorker = {
engines: {},
+ settings: {},

annotate: function(state, lines, range) {
function splitParts(str) { return str.split(":"); }
@@ -140,6 +141,13 @@ var syntaxWorker = {
info.extension.load().then(function(engine) {
engines[syntaxName] = engine;

+ if (info.settings != null) {
+ engine.settings = {};
+ info.settings.forEach(function(name) {
+ engine.settings[name] = this.settings[name];
+ }, this);
+ }
+
var subsyntaxes = engine.subsyntaxes;
if (subsyntaxes == null) {
pr.resolve();
@@ -151,6 +159,11 @@ var syntaxWorker = {
}.bind(this));

return pr;
+ },
+
+ setSyntaxSetting: function(name, value) {
+ this.settings[name] = value;
+ return true;
}
};

diff --git a/plugins/supported/text_editor/package.json b/plugins/supported/text_editor/package.json
--- a/plugins/supported/text_editor/package.json
+++ b/plugins/supported/text_editor/package.json
@@ -437,16 +437,19 @@
"ep": "themevariable",
"name": "highlighterFG",
"defaultValue": {
- "plain": "#e6e6e6",
- "comment": "#666666",
- "directive": "#999999",
- "error": "#ff0000",
- "identifier": "#D841FF",
- "keyword": "#42A8ED",
- "operator": "#88BBFF",
- "string": "#039A0A",
- "addition": "#FFFFFF",
- "deletion": "#FFFFFF"
+ "plain": "#e6e6e6",
+ "comment": "#666666",
+ "directive": "#999999",
+ "error": "#ff0000",
+ "identifier": "#D841FF",
+ "keyword": "#42A8ED",
+ "operator": "#88BBFF",
+ "string": "#039A0A",
+ "addition": "#FFFFFF",
+ "deletion": "#FFFFFF",
+ "builtin": "#307BAD",
+ "module": "#BA4946",
+ "specialmodule": "#C741BB"
}
},
{

Reply all
Reply to author
Forward
0 new messages