Fix non-existent snippet tags being broken up by an @ tag
What does it do?
Described in #16318, if a non-existent snippet tag is found within an output filter, an @ tag inside the filter can cause the output to break.
The provided example where xxx doesn't exist:
[[+xyz:empty=`
aaa
[[xxx? &x=`bbb@ccc`]]
ddd
`]]
eee
is getting broken up by modTag/modElement::getPropertySet on the @, treating the part in front of it as the name of the tag/element, including half the snippet tag.
This fix makes sure that it only considers the bit up to the first :.
To ensure property sets continue to work, I wanted to add some property set tests but I can't get this structure:
[[!Snippet@PropSet:default=`foo`]]
to return anything when the snippet returns an empty value. If someone can figure out why that's not working (in either the test or real world cases!) that would be great.
Why is it needed?
Make parser more resilient.
How to test
Unit tests or create your own similar test cases with snippets on a resource.
Related issue(s)/PR(s)
Fixes #16318
@Mark-H is this still in a draft state?
Yes, I was hoping for some help trying to figure out the failing test but didn't get any.