Git Product home page Git Product logo

Comments (4)

thunderer avatar thunderer commented on June 19, 2024

Hi @spotman! Thanks for reporting the issue, what you are trying to achieve can be seen as two problems:

  • actually parsing shortcode wildcards, ie. matching shortcodes with certain wildcards with the single handler (register [banner-*], have all [banner-top], [banner-bottom_left] shortcodes passed to that single handler),
  • handling wildcard shortcode just like any other one, just falling back to default handler to dispatch it manually or handle inside.

Actually parsing wildcards is an interesting idea I will put into #16. I will need to find a way to make it work without changing shortcode syntax. As for the default handler, I prepared an example for you below - it works by catching all unhandled shortcodes and replacing them out manually. Note that I used TextSerializer instead of returning raw string because it automatically produces proper self-closed and with-content shortcode, but it is not mandatory. Please let me know what do you think and whether it solves your problem.

$handlers = new HandlerContainer();
$handlers->setDefault(function(ShortcodeInterface $s) {
    if(preg_match('~^banner-([a-zA-Z0-9_]+)$~', $s->getName(), $matches)) {
        $serializer = new TextSerializer();
        $new = new Shortcode('banner', ['type' => $matches[1]], $s->getContent());

        return $serializer->serialize($new);
    }
});
$processor = new Processor(new RegularParser(), $handlers);

assert('[banner type=top /]' === $processor->process('[banner-top]'));
assert('[banner type=top]content[/banner]' === $processor->process('[banner-top]content[/banner-top]'));
assert('[banner type=top_left /]' === $processor->process('[banner-top_left]'));

from shortcode.

spotman avatar spotman commented on June 19, 2024

@thunderer Thank you for quick and detailed answer! I've tested it and this approach is OK for me coz all other shortcodes are fully described. You may close this issue (or keep it as doc, up to you).

from shortcode.

thunderer avatar thunderer commented on June 19, 2024

I'm happy that it solved your problem, I will probably update README with this example. You gave me an interesting idea to think about, thanks!

from shortcode.

spotman avatar spotman commented on June 19, 2024

I'm glad to help you :)

from shortcode.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.