mwn
mwn copied to clipboard
Wikitext.parseTemplates() misinterprets | within <gallery> tags within template parameters
This wikitext is correctly parsed on wiki (image1 is a proper gallery element):
{{Card
|title1=Squirrel
|image1=
<gallery>
Squirrel.png | Act I
Gbc squirrel.png | Act II
</gallery>
|cost=Free
|health=1
|power=0
|tribe=[[:Category:Squirrel|Squirrel]]
}}
But parseTemplates incorrectly parses it as bunch of positional parameters instead:
Template {
wikitext: '...',
parameters: [
Parameter {
name: 'title1',
value: 'Squirrel',
wikitext: '|title1=Squirrel\n'
},
Parameter {
name: 'image1',
value: '<gallery>\nSquirrel.png',
wikitext: '|image1=\n<gallery>\nSquirrel.png '
},
Parameter {
name: 1,
value: 'Act I\nGbc squirrel.png',
wikitext: '| Act I\nGbc squirrel.png '
},
Parameter {
name: 2,
value: 'Act II\n</gallery>',
wikitext: '| Act II\n</gallery>\n'
},
Parameter { name: 'cost', value: 'Free', wikitext: '|cost=Free\n' },
Parameter { name: 'health', value: '1', wikitext: '|health=1\n' },
Parameter { name: 'power', value: '0', wikitext: '|power=0\n' },
Parameter {
name: 'tribe',
value: '[[:Category:Squirrel|Squirrel]]',
wikitext: '|tribe=[[:Category:Squirrel|Squirrel]]\n'
}
],
name: 'Card'
}
Maybe you can take a look at WikiParser-Node when parsing complex Wikitext? Here is the result from your example:
import Parser from 'wikiparser-node';
const wikitext = `{{Card
|title1=Squirrel
|image1=
<gallery>
Squirrel.png | Act I
Gbc squirrel.png | Act II
</gallery>
|cost=Free
|health=1
|power=0
|tribe=[[:Category:Squirrel|Squirrel]]
}}`;
const template = Parser.parse(wikitext).querySelector('template');
// '<gallery>\nSquirrel.png |Act I\nGbc squirrel.png |Act II\n</gallery>'
console.log(template.getValue('image1'));
Wikitext in my case wasn't really "complex", so I just made regex for it, but your library seems pretty good, I'll definitely use it in my project when doing more complex stuff, thanks!