Файл: library/XenForo/BbCode/Formatter/Text.php
Строк: 111
<?php
/**
* BB code formatter that follows the formatting of the text as plain text.
*
* @package XenForo_BbCode
*/
class XenForo_BbCode_Formatter_Text extends XenForo_BbCode_Formatter_Base
{
protected $_simpleReplacements = array(
'left' => "%sn",
'center' => "%sn",
'right' => "%sn"
);
protected $_advancedReplacements = array(
'quote' => array('$this', 'handleTagQuote'),
'img' => array('$this', 'handleTagImg'),
'media' => array('$this', 'handleTagMedia'),
'spoiler' => array('$this', 'handleTagSpoiler'),
'attach' => array('$this', 'handleTagAttach'),
'list' => array('$this', 'handleTagList')
);
/**
* Gets the list of valid BB code tags. This removes most behaviors.
*
* @see XenForo_BbCode_Formatter_Base::getTags()
*/
public function getTags()
{
if ($this->_tags !== null)
{
return $this->_tags;
}
$callback = array($this, 'handleTag');
$tags = parent::getTags();
foreach ($tags AS $tagName => &$tag)
{
unset($tag['replace'], $tag['callback']);
$tag['callback'] = $callback;
}
return $tags;
}
protected function _setupCustomTagInfo($tagName, array $tag)
{
$output = parent::_setupCustomTagInfo($tagName, $tag);
if (isset($output['replace']))
{
if (strlen($tag['replace_text']))
{
$output['replace'] = $tag['replace_text'];
}
else
{
$output['replace'] = '{text}' . ($tag['trim_lines_after'] ? "n" : '');
}
}
return $output;
}
public function filterString($string, array $rendererStates)
{
$string = XenForo_Helper_String::censorString($string);
return $string;
}
public function handleTag(array $tag, array $rendererStates)
{
$tagName = $tag['tag'];
if (isset($this->_advancedReplacements[$tagName]))
{
$callback = $this->_advancedReplacements[$tagName];
if (is_array($callback) && $callback[0] == '$this')
{
$callback[0] = $this;
}
return call_user_func($callback, $tag, $rendererStates);
}
$output = $this->renderSubTree($tag['children'], $rendererStates);
if (isset($this->_simpleReplacements[$tagName]))
{
$output = sprintf($this->_simpleReplacements[$tagName], $output);
}
return $output;
}
public function handleTagQuote(array $tag, array $rendererStates)
{
$output = $this->renderSubTree($tag['children'], $rendererStates);
return "n----------n" . trim($output) . "n----------n";
}
public function handleTagImg(array $tag, array $rendererStates)
{
return '[IMG]';
}
public function handleTagMedia(array $tag, array $rendererStates)
{
return '[MEDIA]';
}
public function handleTagSpoiler(array $tag, array $rendererStates)
{
return "[SPOILER]n";
}
public function handleTagAttach(array $tag, array $rendererStates)
{
return '[ATTACH]';
}
public function handleTagList(array $tag, array $rendererStates)
{
$bullets = explode('[*]', trim($this->renderSubTree($tag['children'], $rendererStates)));
$output = '';
foreach ($bullets AS $bullet)
{
$bullet = trim($bullet);
if ($bullet !== '')
{
$output .= $bullet . "n";
}
}
return $output;
}
}