getgrav / grav-plugin-shortcode-core

Grav Shortcode Core Plugin
https://getgrav.org
MIT License
47 stars 21 forks source link

Dash in parameter name breaks `shortcodes` Twig filter #125

Open dmik opened 2 months ago

dmik commented 2 months ago

I'm trying out shortcodes-core v5.2.0 and it appears that having a parameter with a name containing a dash completely breaks it: the handler function is simply not called in this case.

Steps to reproduce:

  1. Install grav-admin-v1.7.46.
  2. Edit themes/quark/templates/partials/footer.html.twig and add {{ '[fa=cog my-param /]'|shortcodes|raw }} somewhere inside the <p> tag.

The output in HTML will be [fa=cog my-param /], i.e. the shortcode's literal without any transformatin (not a suprise as logging shows that its handler is not called at all).

If you change the short code to just {{ '[fa=cog myparam /]'|shortcodes|raw }} (notice no dash), all works — the handler is called and the icon appears.

Note that there is no such a problem when the same shortcode (i.e. with the dash in the parameter name) is used inside a .md file — all works correctly in this case and the icon properly is generated as well. So the problem only appears with the shortcodes filter (with or without raw).

pmoreno-rodriguez commented 1 month ago

Try to change your user/plugins/shortcode-core/vendor/thunderer/shortcode/src/Utility/RegexBuilderUtility.php file in the following way:

line 43: return '~(?:\s*([\w-]+(?:'.$complex.'|'.$simple.'|'.$empty.')))~us';

line 66: $parameters = '(?<parameters>(?:\s*(?:[\w-]+(?:'.$equalsSpaced.$complex.'|'.$equalsSpaced.$simple.'|'.$empty.')))*)';

Try it and if it works correctly, I will propose a pull request with these changes.

dmik commented 1 month ago

@pmoreno-rodriguez Just tried what you said and — yes, this fixes the problem here, thanks.