mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-11-17 23:34:50 +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