This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/app/BBCode/Parser.php

93 lines
2 KiB
PHP

<?php
/**
* Holds the BBcode handler.
* @package Sakura
*/
namespace Sakura\BBCode;
use Sakura\DB;
/**
* BBcode handler.
* @package Sakura
* @author Julian van de Groep <me@flash.moe>
*/
class Parser
{
/**
* Holds the bbcode parsers.
* @var array
*/
public static $parsers = [
// Basic markup
Tags\Bold::class,
Tags\Italics::class,
Tags\Underline::class,
Tags\Strike::class,
Tags\Header::class,
Tags\Image::class,
Tags\Spoiler::class,
// More advanced
Tags\Colour::class,
Tags\Align::class,
Tags\Size::class,
Tags\YouTube::class,
// Links
Tags\NamedLink::class,
Tags\Link::class,
// Quotes
Tags\NamedQuote::class,
Tags\Quote::class,
// Advanced parsing
Tags\Box::class,
Tags\Code::class,
Tags\ListTag::class,
Tags\User::class,
// Newline must always be last
Tags\Newline::class,
];
/**
* Parse the emoticons.
* @param string $text
* @return string
*/
public static function parseEmoticons($text)
{
// Get emoticons from the database
$emotes = DB::table('emoticons')
->get();
// Parse all emoticons
foreach ($emotes as $emote) {
$image = "<img src='{$emote->emote_path}' alt='{$emote->emote_string}' class='emoticon'>";
$icon = preg_quote($emote->emote_string, '#');
$text = preg_replace("#{$icon}#", $image, $text);
}
// Return the parsed text
return $text;
}
/**
* Convert the parsed text to HTML.
* @param string $text
* @return string
*/
public static function toHTML($text)
{
$text = self::parseEmoticons($text);
foreach (self::$parsers as $parser) {
$text = call_user_func([$parser, 'parse'], $text);
}
return $text;
}
}