mwn icon indicating copy to clipboard operation
mwn copied to clipboard

Wikitext.parseTemplates() misinterprets | within <gallery> tags within template parameters

Open Retrocast opened this issue 9 months ago • 2 comments

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'
}

Retrocast avatar Feb 08 '25 02:02 Retrocast

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'));

bhsd-harry avatar Mar 25 '25 13:03 bhsd-harry

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!

ghost avatar Mar 26 '25 03:03 ghost