1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-07 16:15:22 +02:00
php-phpbb/phpBB/includes/bbcode/bbcode_parser.php
Marek A. R 45c97a40d2 A little cleanup
git-svn-id: file:///svn/phpbb/trunk@8480 89ea8834-ac86-4346-8a33-228a782c2dd0
2008-03-29 14:11:49 +00:00

242 lines
5.9 KiB
PHP

<?php
/**
*
* @package phpBB3
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/
/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
exit;
}
/**
* The phpBB version of the BBCode parser
*
*/
class phpbb_bbcode_parser extends phpbb_bbcode_parser_base
{
private $list_stack = array();
protected $tags = array();
public function __construct()
{
$this->tags = array(
// The exact B BBcode from phpBB
'b' => array(
'replace' => '<span style="font-weight: bold">',
'close' => '</span>',
'attributes' => array(),
'children' => array(true, 'quote' => true, 'code' => true, 'list' => true),
'parents' => array(true),
),
// The exact I BBcode from phpBB
'i' => array(
'replace' => '<span style="font-style: italic">',
'close' => '</span>',
'attributes' => array(),
'children' => array(true, 'quote' => true, 'code' => true, 'list' => true),
'parents' => array(true),
),
// The exact U BBcode from phpBB
'u' => array(
'replace' => '<span style="text-decoration: underline">',
'close' => '</span>',
'attributes' => array(),
'children' => array(true, 'quote' => true, 'code' => true, 'list' => true),
'parents' => array(true),
),
// Quote tag attempt.
'quote' => array(
'replace' => '<div class="quotetitle">{_}</div><div class="quotecontent">',
'close' => '</div>',
'attributes' => array(
'_' => array(
'replace' => '%s wrote:',
),
),
'children' => array(true),
'parents' => array(true),
),
// code tag (without the =php functionality)
'code' => array(
'replace' => '<div class="codetitle"><b>Code:</b></div><div class="codecontent">',
'close' => '</div>',
'attributes' => array(),
'children' => array(false),
'parents' => array(true),
),
// list tag
'list' => array(
'replace' => '',
'replace_func' => array($this, 'list_open'),
'close' => '',
'close_func' => array($this, 'list_close'),
'attributes' => array(
'_' => array(
'replace' => '',
),
),
'children' => array(false, 'li' => true),
'parents' => array(true),
),
// The exact * tag from phpBB. "*" is not a valid tag name in this parser... introducing li from HTML!
'li' => array(
'replace' => '<li>',
'close' => '</li>',
'close_shadow' => true,
'attributes' => array(),
'children' => array(true, 'li' => true),
'parents' => array(false, 'list' => true),
),
// Almost exact img tag from phpBB...
'img' => array(
'replace' => '<img alt="Image" src="',
'close' => '" />',
'attributes' => array(
'__' => array(
'replace' => '%s',
),
),
'children' => array(false),
'parents' => array(true),
),
'url' => array(
'replace' => '',
'replace_func' => array($this, 'url_tag'),
'close' => '</a>',
'attributes' => array(
// The replace value is not important empty because the replace_func handles this.
'_' => array(
'replace' => '',
),
'__' => array(
'replace' => '',
),
),
'children' => array(false),
'parents' => array(true),
),
'color' => array(
'replace' => '<span style="color: {_}">',
'close' => '</span>',
'attributes' => array(
'_' => array(
'replace' => '%s',
'required' => true
),
),
'children' => array(true, 'color' => true),
'parents' => array(true),
),
'size' => array(
'replace' => '<span style="font-size: {_}px; line-height: normal">',
'close' => '</span>',
'attributes' => array(
'_' => array(
'replace' => '%s',
'required' => true
),
),
'children' => array(true, 'size' => true),
'parents' => array(true),
),
// FLASH tag implementation attempt.
'flash' => array(
'replace' => '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0"{w}{h}>
<param name="movie" value="{m}" />
<param name="quality" value="high" />
<embed src="{m}" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"{w}{h}>
</embed>
</object>',
'close' => false,
'attributes' => array(
'm' => array(
'replace' => '%s',
'required' => true,
),
'w' => array(
'replace' => ' width="%s"',
'type_check' => 'ctype_digit',
),
'h' => array(
'replace' => ' height="%s"',
'type_check' => 'ctype_digit',
),
),
'children' => array(false),
'parents' => array(true),
),
// The spoiler tag from area51.phpbb.com :p
'spoiler' => array(
'replace' => '<span class="quotetitle"><b>Spoiler:</b></span><span style="background-color:white;color:white;">',
'close' => '</span>',
'attributes' => array(),
'children' => array(false),
'parents' => array(true),
),
// a noparse tag
'noparse' => array(
'replace' => '',
'close' => '',
'attributes' => array(),
'children' => array(false),
'parents' => array(true),
),
);
$this->smilies = array(
':)' => '<img src="http://area51.phpbb.com/phpBB/images/smilies/icon_e_smile.gif" />',
':(' => '<img src="http://area51.phpbb.com/phpBB/images/smilies/icon_e_sad.gif" />',
);
// $this->text_callback = 'strtoupper';
parent::__construct();
}
protected function url_tag(array $attributes = array(), array $definition = array())
{
if (isset($attributes['_']))
{
return '<a href="' . $attributes['_'] . '">';
}
return '<a href="' . $attributes['__'] . '">';
}
protected function list_open(array $attributes = array(), array $definition = array())
{
if (isset($attributes['_']))
{
return '<ol style="list-style-type: ' . $attributes['_'] . '">';
}
return '<ul>';
}
protected function list_close(array $attributes = array())
{
if (isset($attributes['_']))
{
return '</ol>';
}
return '</ul>';
}
}