added attchments
This commit is contained in:
58
app/Actions/BbcodeFormatter.php
Normal file
58
app/Actions/BbcodeFormatter.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace App\Actions;
|
||||
|
||||
use s9e\TextFormatter\Configurator;
|
||||
use s9e\TextFormatter\Parser;
|
||||
use s9e\TextFormatter\Renderer;
|
||||
|
||||
class BbcodeFormatter
|
||||
{
|
||||
private static ?Parser $parser = null;
|
||||
private static ?Renderer $renderer = null;
|
||||
|
||||
public static function format(?string $text): string
|
||||
{
|
||||
if ($text === null || $text === '') {
|
||||
return '';
|
||||
}
|
||||
|
||||
if (!self::$parser || !self::$renderer) {
|
||||
[$parser, $renderer] = self::build();
|
||||
self::$parser = $parser;
|
||||
self::$renderer = $renderer;
|
||||
}
|
||||
|
||||
$xml = self::$parser->parse($text);
|
||||
|
||||
return self::$renderer->render($xml);
|
||||
}
|
||||
|
||||
private static function build(): array
|
||||
{
|
||||
$configurator = new Configurator();
|
||||
$bbcodes = $configurator->plugins->load('BBCodes');
|
||||
$bbcodes->addFromRepository('B');
|
||||
$bbcodes->addFromRepository('I');
|
||||
$bbcodes->addFromRepository('U');
|
||||
$bbcodes->addFromRepository('S');
|
||||
$bbcodes->addFromRepository('URL');
|
||||
$bbcodes->addFromRepository('IMG');
|
||||
$bbcodes->addFromRepository('QUOTE');
|
||||
$bbcodes->addFromRepository('CODE');
|
||||
$bbcodes->addFromRepository('LIST');
|
||||
$bbcodes->addFromRepository('*');
|
||||
|
||||
$configurator->tags->add('BR')->template = '<br/>';
|
||||
|
||||
$bundle = $configurator->finalize();
|
||||
$parser = $bundle['parser'] ?? null;
|
||||
$renderer = $bundle['renderer'] ?? null;
|
||||
|
||||
if (!$parser || !$renderer) {
|
||||
throw new \RuntimeException('Unable to initialize BBCode formatter.');
|
||||
}
|
||||
|
||||
return [$parser, $renderer];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user