From d5e690a06d523a2047eaf9b623b633bb72c18af9 Mon Sep 17 00:00:00 2001 From: Jermolene Date: Thu, 30 Jul 2015 12:28:29 +0100 Subject: [PATCH] First pass at global disabling of parser rules This is to address #1875 more quickly than via #345. This commit only includes a partial implementation of the UI - see the ticket for details. --- core/modules/filters/wikiparserrules.js | 30 +++++++++++++++++++ core/modules/parsers/wikiparser/wikiparser.js | 15 ++++++++++ core/ui/ControlPanel/Parsing.tid | 29 ++++++++++++++++++ core/wiki/config/wikilink.tid | 3 ++ 4 files changed, 77 insertions(+) create mode 100644 core/modules/filters/wikiparserrules.js create mode 100644 core/ui/ControlPanel/Parsing.tid create mode 100644 core/wiki/config/wikilink.tid diff --git a/core/modules/filters/wikiparserrules.js b/core/modules/filters/wikiparserrules.js new file mode 100644 index 000000000..ee57113c8 --- /dev/null +++ b/core/modules/filters/wikiparserrules.js @@ -0,0 +1,30 @@ +/*\ +title: $:/core/modules/filters/wikiparserrules.js +type: application/javascript +module-type: filteroperator + +Filter operator for returning the names of the wiki parser rules in this wiki + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +/* +Export our filter function +*/ +exports.wikiparserrules = function(source,operator,options) { + var results = []; + $tw.utils.each($tw.modules.types.wikirule,function(mod) { + var exp = mod.exports; + if(exp.types[operator.operand]) { + results.push(exp.name); + } + }); + results.sort(); + return results; +}; + +})(); diff --git a/core/modules/parsers/wikiparser/wikiparser.js b/core/modules/parsers/wikiparser/wikiparser.js index 2a584b429..4c88d6ef2 100644 --- a/core/modules/parsers/wikiparser/wikiparser.js +++ b/core/modules/parsers/wikiparser/wikiparser.js @@ -29,12 +29,15 @@ var WikiParser = function(type,text,options) { // Initialise the classes if we don't have them already if(!this.pragmaRuleClasses) { WikiParser.prototype.pragmaRuleClasses = $tw.modules.createClassesFromModules("wikirule","pragma",$tw.WikiRuleBase); + this.setupRules(WikiParser.prototype.pragmaRuleClasses,"$:/config/WikiParserRules/Pragmas/"); } if(!this.blockRuleClasses) { WikiParser.prototype.blockRuleClasses = $tw.modules.createClassesFromModules("wikirule","block",$tw.WikiRuleBase); + this.setupRules(WikiParser.prototype.blockRuleClasses,"$:/config/WikiParserRules/Block/"); } if(!this.inlineRuleClasses) { WikiParser.prototype.inlineRuleClasses = $tw.modules.createClassesFromModules("wikirule","inline",$tw.WikiRuleBase); + this.setupRules(WikiParser.prototype.inlineRuleClasses,"$:/config/WikiParserRules/Inline/"); } // Save the parse text this.type = type || "text/vnd.tiddlywiki"; @@ -59,6 +62,18 @@ var WikiParser = function(type,text,options) { // Return the parse tree }; +/* +*/ +WikiParser.prototype.setupRules = function(proto,configPrefix) { + var self = this; + $tw.utils.each(proto,function(object,name) { + if(self.wiki.getTiddlerText(configPrefix + name,"enable") !== "enable") { + delete proto[name]; +console.log("deleting",name) + } + }); +}; + /* Instantiate an array of parse rules */ diff --git a/core/ui/ControlPanel/Parsing.tid b/core/ui/ControlPanel/Parsing.tid new file mode 100644 index 000000000..fabf98c8d --- /dev/null +++ b/core/ui/ControlPanel/Parsing.tid @@ -0,0 +1,29 @@ +title: $:/core/ui/ControlPanel/Parsing +tags: $:/tags/ControlPanel +caption: Parsing + +\define parsing-inner(typeCap) +
  • +<$checkbox tiddler="""$:/config/WikiParserRules/$typeCap$/$(currentTiddler)$""" field="text" checked="enable" unchecked="disable" default="enable"> ''<$text text=<>/>'': +
  • +\end + +\define parsing-outer(typeLower,typeCap) + +\end + +! Pragma Parse Rules + +<> + +! Inline Parse Rules + +<> + +! Block Parse Rules + +<> diff --git a/core/wiki/config/wikilink.tid b/core/wiki/config/wikilink.tid new file mode 100644 index 000000000..9a395abd6 --- /dev/null +++ b/core/wiki/config/wikilink.tid @@ -0,0 +1,3 @@ +title: $:/config/WikiParserRules/Inline/wikilink + +enable \ No newline at end of file