mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2025-01-25 00:16:52 +00:00
Add pragma rule for parameters declarations
This commit is contained in:
parent
99750d78b5
commit
8b867be8ef
61
core/modules/parsers/wikiparser/rules/parameters.js
Normal file
61
core/modules/parsers/wikiparser/rules/parameters.js
Normal file
@ -0,0 +1,61 @@
|
||||
/*\
|
||||
title: $:/core/modules/parsers/wikiparser/rules/parameters.js
|
||||
type: application/javascript
|
||||
module-type: wikirule
|
||||
|
||||
Wiki pragma rule for parameter definitions
|
||||
|
||||
```
|
||||
\parameters(param:defaultvalue,param2:defaultvalue)
|
||||
definition text
|
||||
```
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.name = "parameters";
|
||||
exports.types = {pragma: true};
|
||||
|
||||
/*
|
||||
Instantiate parse rule
|
||||
*/
|
||||
exports.init = function(parser) {
|
||||
this.parser = parser;
|
||||
// Regexp to match
|
||||
this.matchRegExp = /^\\parameters\s*\(([^)]*)\)\s*\r?\n/mg;
|
||||
};
|
||||
|
||||
/*
|
||||
Parse the most recent match
|
||||
*/
|
||||
exports.parse = function() {
|
||||
// Move past the macro name and parameters
|
||||
this.parser.pos = this.matchRegExp.lastIndex;
|
||||
// Parse the parameters
|
||||
var paramString = this.match[1],
|
||||
attributes = Object.create(null),
|
||||
orderedAttributes = [],
|
||||
reParam = /\s*([A-Za-z0-9\-_]+)(?:\s*:\s*(?:"""([\s\S]*?)"""|"([^"]*)"|'([^']*)'|([^"'\s]+)))?/mg,
|
||||
paramMatch = reParam.exec(paramString);
|
||||
while(paramMatch) {
|
||||
// Save the parameter details
|
||||
var name = paramMatch[1],
|
||||
attribute = {name: name, type: "string", value: paramMatch[2] || paramMatch[3] || paramMatch[4] || paramMatch[5]};
|
||||
attributes[name] = attribute;
|
||||
orderedAttributes.push(attribute);
|
||||
// Look for the next parameter
|
||||
paramMatch = reParam.exec(paramString);
|
||||
}
|
||||
// Save the macro definition
|
||||
return [{
|
||||
type: "parameters",
|
||||
attributes: attributes,
|
||||
orderedAttributes: orderedAttributes
|
||||
}];
|
||||
};
|
||||
|
||||
})();
|
@ -0,0 +1,29 @@
|
||||
title: Transclude/Parameterised/Positional/Shortcut/Parameters
|
||||
description: Positional parameterised transclusion using shortcut syntax and parameters pragma
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\whitespace trim
|
||||
{{TiddlerOne}}
|
||||
{{TiddlerOne|Ferret}}
|
||||
{{TiddlerOne|Butterfly|Moth}}
|
||||
{{TiddlerOne|Beetle|Scorpion|Snake}}
|
||||
{{TiddlerOne||TiddlerTwo|Beetle|Scorpion|Snake}}
|
||||
_
|
||||
title: TiddlerOne
|
||||
|
||||
\whitespace trim
|
||||
\parameters(zero:'Jaguar',one:'Lizard',two:'Mole')
|
||||
[{<$text text=<<zero>>/>}{<$text text=<<one>>/>}{<$text text=<<two>>/>}]
|
||||
_
|
||||
title: TiddlerTwo
|
||||
|
||||
\whitespace trim
|
||||
\parameters(zero:'Mouse',one:'Horse',two:'Owl')
|
||||
(<$transclude $tiddler=<<currentTiddler>> zero=<<zero>> one=<<one>> two=<<two>>/>)
|
||||
_
|
||||
title: ExpectedResult
|
||||
|
||||
<p>[{Jaguar}{Lizard}{Mole}]</p><p>[{Ferret}{Lizard}{Mole}]</p><p>[{Butterfly}{Moth}{Mole}]</p><p>[{Beetle}{Scorpion}{Snake}]</p><p>([{Beetle}{Scorpion}{Snake}])</p>
|
@ -0,0 +1,20 @@
|
||||
title: Transclude/Parameterised/Shortcut/Parameters
|
||||
description: Simple parameterised transclusion using the parameters pragma
|
||||
type: text/vnd.tiddlywiki-multiple
|
||||
tags: [[$:/tags/wiki-test-spec]]
|
||||
|
||||
title: Output
|
||||
|
||||
\whitespace trim
|
||||
<$transclude $tiddler='TiddlerOne' one='Ferret'/>
|
||||
<$transclude $tiddler='TiddlerOne'/>
|
||||
_
|
||||
title: TiddlerOne
|
||||
|
||||
\whitespace trim
|
||||
\parameters(one:'Jaguar')
|
||||
<$text text=<<one>>/>
|
||||
_
|
||||
title: ExpectedResult
|
||||
|
||||
<p>FerretJaguar</p>
|
Loading…
Reference in New Issue
Block a user