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. * * @return self */ public function parse($callback): self { $this->parsingCallbacks[] = $callback; return $this; } /** * Prepare the system for unparsing. This can be used to modify the text that was parsed. * Please note that the parsed text 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: * - mixed $context * - string $xml: The parsed text. * * The callback should return: * - string $xml: The text to be unparsed. * * @return self */ public function unparse($callback): self { $this->unparsingCallbacks[] = $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. This argument MUST either be nullable, or omitted entirely. * * The callback should return: * - string $xml: The xml to be rendered. * * @return self */ public function render($callback): self { $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) { $formatter->addConfigurationCallback(ContainerUtil::wrapCallback($callback, $container)); } foreach ($this->parsingCallbacks as $callback) { $formatter->addParsingCallback(ContainerUtil::wrapCallback($callback, $container)); } foreach ($this->unparsingCallbacks as $callback) { $formatter->addUnparsingCallback(ContainerUtil::wrapCallback($callback, $container)); } foreach ($this->renderingCallbacks as $callback) { $formatter->addRenderingCallback(ContainerUtil::wrapCallback($callback, $container)); } 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(); } }