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/libraries/BBcode.php

134 lines
4 KiB
PHP
Raw Normal View History

<?php
/*
* BBcode Wrapper
*/
namespace Sakura;
use JBBCode\Parser;
use JBBCode\DefaultCodeDefinitionSet;
use JBBCode\CodeDefinitionBuilder;
/**
* Class BBcode
* @package Sakura
*/
class BBcode
{
// Parser container
private static $bbcode = null;
// Constructor
public static function init()
2015-12-02 14:40:28 +00:00
{
// Create new parser class
self::$bbcode = new Parser();
// Add the standard definitions
self::loadStandardCodes();
}
// Add basic bbcodes
public static function loadStandardCodes()
2015-12-02 14:40:28 +00:00
{
// Add the standard definitions
self::$bbcode->addCodeDefinitionSet(new DefaultCodeDefinitionSet());
// Header tag
$builder = new CodeDefinitionBuilder('header', '<h1>{param}</h1>');
self::$bbcode->addCodeDefinition($builder->build());
// Strike tag
$builder = new CodeDefinitionBuilder('s', '<del>{param}</del>');
self::$bbcode->addCodeDefinition($builder->build());
// Spoiler tag
$builder = new CodeDefinitionBuilder('spoiler', '<span class="spoiler">{param}</span>');
self::$bbcode->addCodeDefinition($builder->build());
// Box tag
$builder = new CodeDefinitionBuilder('box', '<div class="spoiler-box-container"><div class="spoiler-box-title" onclick="toggleClass(this.parentNode.children[1], \'hidden\');">Click to open</div><div class="spoiler-box-content hidden">{param}</div></div>');
self::$bbcode->addCodeDefinition($builder->build());
// Box tag
$builder = new CodeDefinitionBuilder('box', '<div class="spoiler-box-container"><div class="spoiler-box-title" onclick="toggleClass(this.parentNode.children[1], \'hidden\');">{option}</div><div class="spoiler-box-content hidden">{param}</div></div>');
$builder->setUseOption(true);
self::$bbcode->addCodeDefinition($builder->build());
// Quote tag
$builder = new CodeDefinitionBuilder('quote', '<blockquote><div class="quotee">Quote</div><div class="quote">{param}</div></blockquote>');
self::$bbcode->addCodeDefinition($builder->build());
// Quote tag
$builder = new CodeDefinitionBuilder('quote', '<blockquote><div class="quotee">{option} wrote</div><div class="quote">{param}</div></blockquote>');
$builder->setUseOption(true);
self::$bbcode->addCodeDefinition($builder->build());
// Add special definitions (PHP files MUST have the same name as the definition class
foreach (glob(ROOT . 'libraries/BBcodeDefinitions/*.php') as $ext) {
// Include the class
require_once $ext;
// Clean the file path
$ext = str_replace(ROOT . 'libraries/', '', $ext);
$ext = str_replace('.php', '', $ext);
$ext = str_replace('/', '\\', $ext);
// Build the classname
$className = __NAMESPACE__ . '\\' . $ext;
// Add the BBcode definition
self::$bbcode->addCodeDefinition(new $className);
}
}
// Set text
public static function text($text)
2015-12-02 14:40:28 +00:00
{
// Check if $bbcode is still null
if (self::$bbcode == null) {
self::init();
}
self::$bbcode->parse($text);
}
// Get as HTML
public static function toHTML($text = null)
2015-12-02 14:40:28 +00:00
{
// Check if text isn't null
if ($text !== null) {
self::text($text);
}
$parsed = nl2br(self::$bbcode->getAsHtml());
$parsed = Main::fixCodeTags($parsed);
$parsed = Main::parseEmotes($parsed);
return $parsed;
}
// Get as BBmarkup
public static function toEditor($text = null)
2015-12-02 14:40:28 +00:00
{
// Check if text isn't null
if ($text !== null) {
self::text($text);
}
return self::$bbcode->getAsBBCode();
}
// Get as plaintext
public static function toPlain($text = null)
2015-12-02 14:40:28 +00:00
{
// Check if text isn't null
if ($text !== null) {
self::text($text);
}
return self::$bbcode->getAsText();
}
}