configurationCallbacks[] = $callback; return $this; } /** * Prepare the system for parsing. This can be used to modify the text that will be parsed, or to modify the parser. * Please note that the text to be parsed must be returned, regardless of whether it's changed. * * @param callable|string $callback * * The callback can be a closure or invokable class, and should accept: * - \s9e\TextFormatter\Parser $parser * - mixed $context * - string $text: The text to be parsed. * * The callback should return: * - string $text: The text to be parsed. */ public function parse($callback) { $this->parsingCallbacks[] = $callback; return $this; } /** * Prepare the system for rendering. This can be used to modify the xml that will be rendered, or to modify the renderer. * Please note that the xml to be rendered must be returned, regardless of whether it's changed. * * @param callable|string $callback * * The callback can be a closure or invokable class, and should accept: * - \s9e\TextFormatter\Rendered $renderer * - mixed $context * - string $xml: The xml to be rendered. * - ServerRequestInterface $request * * The callback should return: * - string $xml: The xml to be rendered. */ public function render($callback) { $this->renderingCallbacks[] = $callback; return $this; } public function extend(Container $container, Extension $extension = null) { $container->extend('flarum.formatter', function ($formatter, $container) { foreach ($this->configurationCallbacks as $callback) { if (is_string($callback)) { $callback = $container->make($callback); } $formatter->addConfigurationCallback($callback); } foreach ($this->parsingCallbacks as $callback) { if (is_string($callback)) { $callback = $container->make($callback); } $formatter->addParsingCallback($callback); } foreach ($this->renderingCallbacks as $callback) { if (is_string($callback)) { $callback = $container->make($callback); } $formatter->addRenderingCallback($callback); } return $formatter; }); } public function onEnable(Container $container, Extension $extension) { // FLush the formatter cache when this extension is enabled $container->make(ActualFormatter::class)->flush(); } public function onDisable(Container $container, Extension $extension) { // FLush the formatter cache when this extension is disabled $container->make(ActualFormatter::class)->flush(); } }