Blame Identity/Models/Html/phpBB/3.0.4/includes/bbcode.php

d6e8d8
d6e8d8
/**
d6e8d8
*
d6e8d8
* @package phpBB3
d6e8d8
* @version $Id: bbcode.php 8953 2008-09-28 17:08:09Z acydburn $
d6e8d8
* @copyright (c) 2005 phpBB Group
d6e8d8
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
d6e8d8
*
d6e8d8
*/
d6e8d8
d6e8d8
/**
d6e8d8
* @ignore
d6e8d8
*/
d6e8d8
if (!defined('IN_PHPBB'))
d6e8d8
{
d6e8d8
	exit;
d6e8d8
}
d6e8d8
d6e8d8
/**
d6e8d8
* BBCode class
d6e8d8
* @package phpBB3
d6e8d8
*/
d6e8d8
class bbcode
d6e8d8
{
d6e8d8
	var $bbcode_uid = '';
d6e8d8
	var $bbcode_bitfield = '';
d6e8d8
	var $bbcode_cache = array();
d6e8d8
	var $bbcode_template = array();
d6e8d8
d6e8d8
	var $bbcodes = array();
d6e8d8
d6e8d8
	var $template_bitfield;
d6e8d8
	var $template_filename = '';
d6e8d8
d6e8d8
	/**
d6e8d8
	* Constructor
d6e8d8
	* Init bbcode cache entries if bitfield is specified
d6e8d8
	*/
d6e8d8
	function bbcode($bitfield = '')
d6e8d8
	{
d6e8d8
		if ($bitfield)
d6e8d8
		{
d6e8d8
			$this->bbcode_bitfield = $bitfield;
d6e8d8
			$this->bbcode_cache_init();
d6e8d8
		}
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Second pass bbcodes
d6e8d8
	*/
d6e8d8
	function bbcode_second_pass(&$message, $bbcode_uid = '', $bbcode_bitfield = false)
d6e8d8
	{
d6e8d8
		if ($bbcode_uid)
d6e8d8
		{
d6e8d8
			$this->bbcode_uid = $bbcode_uid;
d6e8d8
		}
d6e8d8
d6e8d8
		if ($bbcode_bitfield !== false)
d6e8d8
		{
d6e8d8
			$this->bbcode_bitfield = $bbcode_bitfield;
d6e8d8
d6e8d8
			// Init those added with a new bbcode_bitfield (already stored codes will not get parsed again)
d6e8d8
			$this->bbcode_cache_init();
d6e8d8
		}
d6e8d8
d6e8d8
		if (!$this->bbcode_bitfield)
d6e8d8
		{
d6e8d8
			// Remove the uid from tags that have not been transformed into HTML
d6e8d8
			if ($this->bbcode_uid)
d6e8d8
			{
d6e8d8
				$message = str_replace(':' . $this->bbcode_uid, '', $message);
d6e8d8
			}
d6e8d8
d6e8d8
			return;
d6e8d8
		}
d6e8d8
d6e8d8
		$str = array('search' => array(), 'replace' => array());
d6e8d8
		$preg = array('search' => array(), 'replace' => array());
d6e8d8
d6e8d8
		$bitfield = new bitfield($this->bbcode_bitfield);
d6e8d8
		$bbcodes_set = $bitfield->get_all_set();
d6e8d8
d6e8d8
		$undid_bbcode_specialchars = false;
d6e8d8
		foreach ($bbcodes_set as $bbcode_id)
d6e8d8
		{
d6e8d8
			if (!empty($this->bbcode_cache[$bbcode_id]))
d6e8d8
			{
d6e8d8
				foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
d6e8d8
				{
d6e8d8
					foreach ($array as $search => $replace)
d6e8d8
					{
d6e8d8
						${$type}['search'][] = str_replace('$uid', $this->bbcode_uid, $search);
d6e8d8
						${$type}['replace'][] = $replace;
d6e8d8
					}
d6e8d8
d6e8d8
					if (sizeof($str['search']))
d6e8d8
					{
d6e8d8
						$message = str_replace($str['search'], $str['replace'], $message);
d6e8d8
						$str = array('search' => array(), 'replace' => array());
d6e8d8
					}
d6e8d8
d6e8d8
					if (sizeof($preg['search']))
d6e8d8
					{
d6e8d8
						// we need to turn the entities back into their original form to allow the
d6e8d8
						// search patterns to work properly
d6e8d8
						if (!$undid_bbcode_specialchars)
d6e8d8
						{
d6e8d8
							$message = str_replace(array(':', '.'), array(':', '.'), $message);
d6e8d8
							$undid_bbcode_specialchars = true;
d6e8d8
						}
d6e8d8
d6e8d8
						$message = preg_replace($preg['search'], $preg['replace'], $message);
d6e8d8
						$preg = array('search' => array(), 'replace' => array());
d6e8d8
					}
d6e8d8
				}
d6e8d8
			}
d6e8d8
		}
d6e8d8
d6e8d8
		// Remove the uid from tags that have not been transformed into HTML
d6e8d8
		$message = str_replace(':' . $this->bbcode_uid, '', $message);
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Init bbcode cache
d6e8d8
	*
d6e8d8
	* requires: $this->bbcode_bitfield
d6e8d8
	* sets: $this->bbcode_cache with bbcode templates needed for bbcode_bitfield
d6e8d8
	*/
d6e8d8
	function bbcode_cache_init()
d6e8d8
	{
d6e8d8
		global $user, $phpbb_root_path;
d6e8d8
d6e8d8
		if (empty($this->template_filename))
d6e8d8
		{
d6e8d8
			$this->template_bitfield = new bitfield($user->theme['bbcode_bitfield']);
d6e8d8
			$this->template_filename = $phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template/bbcode.html';
d6e8d8
			
d6e8d8
			if (!@file_exists($this->template_filename))
d6e8d8
			{
d6e8d8
				if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'])
d6e8d8
				{
d6e8d8
					$this->template_filename = $phpbb_root_path . 'styles/' . $user->theme['template_inherit_path'] . '/template/bbcode.html';
d6e8d8
					if (!@file_exists($this->template_filename))
d6e8d8
					{
d6e8d8
						trigger_error('The file ' . $this->template_filename . ' is missing.', E_USER_ERROR);
d6e8d8
					}
d6e8d8
				}
d6e8d8
				else
d6e8d8
				{
d6e8d8
					trigger_error('The file ' . $this->template_filename . ' is missing.', E_USER_ERROR);
d6e8d8
				}
d6e8d8
			}
d6e8d8
		}
d6e8d8
d6e8d8
		$bbcode_ids = $rowset = $sql = array();
d6e8d8
d6e8d8
		$bitfield = new bitfield($this->bbcode_bitfield);
d6e8d8
		$bbcodes_set = $bitfield->get_all_set();
d6e8d8
d6e8d8
		foreach ($bbcodes_set as $bbcode_id)
d6e8d8
		{
d6e8d8
			if (isset($this->bbcode_cache[$bbcode_id]))
d6e8d8
			{
d6e8d8
				// do not try to re-cache it if it's already in
d6e8d8
				continue;
d6e8d8
			}
d6e8d8
			$bbcode_ids[] = $bbcode_id;
d6e8d8
d6e8d8
			if ($bbcode_id > NUM_CORE_BBCODES)
d6e8d8
			{
d6e8d8
				$sql[] = $bbcode_id;
d6e8d8
			}
d6e8d8
		}
d6e8d8
d6e8d8
		if (sizeof($sql))
d6e8d8
		{
d6e8d8
			global $db;
d6e8d8
d6e8d8
			$sql = 'SELECT *
d6e8d8
				FROM ' . BBCODES_TABLE . '
d6e8d8
				WHERE ' . $db->sql_in_set('bbcode_id', $sql);
d6e8d8
			$result = $db->sql_query($sql, 3600);
d6e8d8
d6e8d8
			while ($row = $db->sql_fetchrow($result))
d6e8d8
			{
d6e8d8
				// To circumvent replacing newlines with 
for the generated html,
d6e8d8
				// we use carriage returns here. They are later changed back to newlines
d6e8d8
				$row['bbcode_tpl'] = str_replace("\n", "\r", $row['bbcode_tpl']);
d6e8d8
				$row['second_pass_replace'] = str_replace("\n", "\r", $row['second_pass_replace']);
d6e8d8
d6e8d8
				$rowset[$row['bbcode_id']] = $row;
d6e8d8
			}
d6e8d8
			$db->sql_freeresult($result);
d6e8d8
		}
d6e8d8
d6e8d8
		foreach ($bbcode_ids as $bbcode_id)
d6e8d8
		{
d6e8d8
			switch ($bbcode_id)
d6e8d8
			{
d6e8d8
				case 0:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'str' => array(
d6e8d8
							'[/quote:$uid]'	=> $this->bbcode_tpl('quote_close', $bbcode_id)
d6e8d8
						),
d6e8d8
						'preg' => array(
d6e8d8
							'#\[quote(?:="(.*?)")?:$uid\]((?!\[quote(?:=".*?")?:$uid\]).)?#ise'	=> "\$this->bbcode_second_pass_quote('\$1', '\$2')"
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 1:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'str' => array(
d6e8d8
							'[b:$uid]'	=> $this->bbcode_tpl('b_open', $bbcode_id),
d6e8d8
							'[/b:$uid]'	=> $this->bbcode_tpl('b_close', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 2:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'str' => array(
d6e8d8
							'[i:$uid]'	=> $this->bbcode_tpl('i_open', $bbcode_id),
d6e8d8
							'[/i:$uid]'	=> $this->bbcode_tpl('i_close', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 3:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'#\[url:$uid\]((.*?))\[/url:$uid\]#s'			=> $this->bbcode_tpl('url', $bbcode_id),
d6e8d8
							'#\[url=([^\[]+?):$uid\](.*?)\[/url:$uid\]#s'	=> $this->bbcode_tpl('url', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 4:
d6e8d8
					if ($user->optionget('viewimg'))
d6e8d8
					{
d6e8d8
						$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
							'preg' => array(
d6e8d8
								'#\[img:$uid\](.*?)\[/img:$uid\]#s'		=> $this->bbcode_tpl('img', $bbcode_id),
d6e8d8
							)
d6e8d8
						);
d6e8d8
					}
d6e8d8
					else
d6e8d8
					{
d6e8d8
						$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
							'preg' => array(
d6e8d8
								'#\[img:$uid\](.*?)\[/img:$uid\]#s'		=> str_replace('$2', '[ img ]', $this->bbcode_tpl('url', $bbcode_id, true)),
d6e8d8
							)
d6e8d8
						);
d6e8d8
					}
d6e8d8
				break;
d6e8d8
d6e8d8
				case 5:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'#\[size=([\-\+]?\d+):$uid\](.*?)\[/size:$uid\]#s'	=> $this->bbcode_tpl('size', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 6:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'!\[color=(#[0-9a-f]{6}|[a-z\-]+):$uid\](.*?)\[/color:$uid\]!is'	=> $this->bbcode_tpl('color', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 7:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'str' => array(
d6e8d8
							'[u:$uid]'	=> $this->bbcode_tpl('u_open', $bbcode_id),
d6e8d8
							'[/u:$uid]'	=> $this->bbcode_tpl('u_close', $bbcode_id),
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 8:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#ise'	=> "\$this->bbcode_second_pass_code('\$1', '\$2')",
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 9:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'#(\[\/?(list|\*):[mou]?:?$uid\])[\n]{1}#'	=> "\$1",
d6e8d8
							'#(\[list=([^\[]+):$uid\])[\n]{1}#'			=> "\$1",
d6e8d8
							'#\[list=([^\[]+):$uid\]#e'					=> "\$this->bbcode_list('\$1')",
d6e8d8
						),
d6e8d8
						'str' => array(
d6e8d8
							'[list:$uid]'		=> $this->bbcode_tpl('ulist_open_default', $bbcode_id),
d6e8d8
							'[/list:u:$uid]'	=> $this->bbcode_tpl('ulist_close', $bbcode_id),
d6e8d8
							'[/list:o:$uid]'	=> $this->bbcode_tpl('olist_close', $bbcode_id),
d6e8d8
							'[*:$uid]'			=> $this->bbcode_tpl('listitem', $bbcode_id),
d6e8d8
							'[/*:$uid]'			=> $this->bbcode_tpl('listitem_close', $bbcode_id),
d6e8d8
							'[/*:m:$uid]'		=> $this->bbcode_tpl('listitem_close', $bbcode_id)
d6e8d8
						),
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 10:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'preg' => array(
d6e8d8
							'#\[email:$uid\]((.*?))\[/email:$uid\]#is'			=> $this->bbcode_tpl('email', $bbcode_id),
d6e8d8
							'#\[email=([^\[]+):$uid\](.*?)\[/email:$uid\]#is'	=> $this->bbcode_tpl('email', $bbcode_id)
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				case 11:
d6e8d8
					if ($user->optionget('viewflash'))
d6e8d8
					{
d6e8d8
						$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
							'preg' => array(
d6e8d8
								'#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#'	=> $this->bbcode_tpl('flash', $bbcode_id),
d6e8d8
							)
d6e8d8
						);
d6e8d8
					}
d6e8d8
					else
d6e8d8
					{
d6e8d8
						$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
							'preg' => array(
d6e8d8
								'#\[flash=([0-9]+),([0-9]+):$uid\](.*?)\[/flash:$uid\]#'	=> str_replace('$1', '$3', str_replace('$2', '[ flash ]', $this->bbcode_tpl('url', $bbcode_id, true)))
d6e8d8
							)
d6e8d8
						);
d6e8d8
					}
d6e8d8
				break;
d6e8d8
d6e8d8
				case 12:
d6e8d8
					$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
						'str'	=> array(
d6e8d8
							'[/attachment:$uid]'	=> $this->bbcode_tpl('inline_attachment_close', $bbcode_id)
d6e8d8
						),
d6e8d8
						'preg'	=> array(
d6e8d8
							'#\[attachment=([0-9]+):$uid\]#'	=> $this->bbcode_tpl('inline_attachment_open', $bbcode_id)
d6e8d8
						)
d6e8d8
					);
d6e8d8
				break;
d6e8d8
d6e8d8
				default:
d6e8d8
					if (isset($rowset[$bbcode_id]))
d6e8d8
					{
d6e8d8
						if ($this->template_bitfield->get($bbcode_id))
d6e8d8
						{
d6e8d8
							// The bbcode requires a custom template to be loaded
d6e8d8
							if (!$bbcode_tpl = $this->bbcode_tpl($rowset[$bbcode_id]['bbcode_tag'], $bbcode_id))
d6e8d8
							{
d6e8d8
								// For some reason, the required template seems not to be available, use the default template
d6e8d8
								$bbcode_tpl = (!empty($rowset[$bbcode_id]['second_pass_replace'])) ? $rowset[$bbcode_id]['second_pass_replace'] : $rowset[$bbcode_id]['bbcode_tpl'];
d6e8d8
							}
d6e8d8
							else
d6e8d8
							{
d6e8d8
								// In order to use templates with custom bbcodes we need
d6e8d8
								// to replace all {VARS} to corresponding backreferences
d6e8d8
								// Note that backreferences are numbered from bbcode_match
d6e8d8
								if (preg_match_all('/\{(URL|LOCAL_URL|EMAIL|TEXT|SIMPLETEXT|IDENTIFIER|COLOR|NUMBER)[0-9]*\}/', $rowset[$bbcode_id]['bbcode_match'], $m))
d6e8d8
								{
d6e8d8
									foreach ($m[0] as $i => $tok)
d6e8d8
									{
d6e8d8
										$bbcode_tpl = str_replace($tok, '$' . ($i + 1), $bbcode_tpl);
d6e8d8
									}
d6e8d8
								}
d6e8d8
							}
d6e8d8
						}
d6e8d8
						else
d6e8d8
						{
d6e8d8
							// Default template
d6e8d8
							$bbcode_tpl = (!empty($rowset[$bbcode_id]['second_pass_replace'])) ? $rowset[$bbcode_id]['second_pass_replace'] : $rowset[$bbcode_id]['bbcode_tpl'];
d6e8d8
						}
d6e8d8
d6e8d8
						// Replace {L_*} lang strings
d6e8d8
						$bbcode_tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $bbcode_tpl);
d6e8d8
d6e8d8
						if (!empty($rowset[$bbcode_id]['second_pass_replace']))
d6e8d8
						{
d6e8d8
							// The custom BBCode requires second-pass pattern replacements
d6e8d8
							$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
								'preg' => array($rowset[$bbcode_id]['second_pass_match'] => $bbcode_tpl)
d6e8d8
							);
d6e8d8
						}
d6e8d8
						else
d6e8d8
						{
d6e8d8
							$this->bbcode_cache[$bbcode_id] = array(
d6e8d8
								'str' => array($rowset[$bbcode_id]['second_pass_match'] => $bbcode_tpl)
d6e8d8
							);
d6e8d8
						}
d6e8d8
					}
d6e8d8
					else
d6e8d8
					{
d6e8d8
						$this->bbcode_cache[$bbcode_id] = false;
d6e8d8
					}
d6e8d8
				break;
d6e8d8
			}
d6e8d8
		}
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Return bbcode template
d6e8d8
	*/
d6e8d8
	function bbcode_tpl($tpl_name, $bbcode_id = -1, $skip_bitfield_check = false)
d6e8d8
	{
d6e8d8
		static $bbcode_hardtpl = array();
d6e8d8
		if (empty($bbcode_hardtpl))
d6e8d8
		{
d6e8d8
			global $user;
d6e8d8
			
d6e8d8
			$bbcode_hardtpl = array(
d6e8d8
				'b_open'	=> '',
d6e8d8
				'b_close'	=> '',
d6e8d8
				'i_open'	=> '',
d6e8d8
				'i_close'	=> '',
d6e8d8
				'u_open'	=> '',
d6e8d8
				'u_close'	=> '',
d6e8d8
				'img'		=> '' . $user->lang['IMAGE'] . '',
d6e8d8
				'size'		=> '$2',
d6e8d8
				'color'		=> '$2',
d6e8d8
				'email'		=> '$2'
d6e8d8
			);
d6e8d8
		}
d6e8d8
d6e8d8
		if ($bbcode_id != -1 && !$skip_bitfield_check && !$this->template_bitfield->get($bbcode_id))
d6e8d8
		{
d6e8d8
			return (isset($bbcode_hardtpl[$tpl_name])) ? $bbcode_hardtpl[$tpl_name] : false;
d6e8d8
		}
d6e8d8
d6e8d8
		if (empty($this->bbcode_template))
d6e8d8
		{
d6e8d8
			if (($tpl = file_get_contents($this->template_filename)) === false)
d6e8d8
			{
d6e8d8
				trigger_error('Could not load bbcode template', E_USER_ERROR);
d6e8d8
			}
d6e8d8
d6e8d8
			// replace \ with \\ and then ' with \'.
d6e8d8
			$tpl = str_replace('\\', '\\\\', $tpl);
d6e8d8
			$tpl = str_replace("'", "\'", $tpl);
d6e8d8
d6e8d8
			// strip newlines and indent
d6e8d8
			$tpl = preg_replace("/\n[\n\r\s\t]*/", '', $tpl);
d6e8d8
d6e8d8
			// Turn template blocks into PHP assignment statements for the values of $bbcode_tpl..
d6e8d8
			$this->bbcode_template = array();
d6e8d8
d6e8d8
			$matches = preg_match_all('#(.*?)#', $tpl, $match);
d6e8d8
d6e8d8
			for ($i = 0; $i < $matches; $i++)
d6e8d8
			{
d6e8d8
				if (empty($match[1][$i]))
d6e8d8
				{
d6e8d8
					continue;
d6e8d8
				}
d6e8d8
d6e8d8
				$this->bbcode_template[$match[1][$i]] = $this->bbcode_tpl_replace($match[1][$i], $match[2][$i]);
d6e8d8
			}
d6e8d8
		}
d6e8d8
d6e8d8
		return (isset($this->bbcode_template[$tpl_name])) ? $this->bbcode_template[$tpl_name] : ((isset($bbcode_hardtpl[$tpl_name])) ? $bbcode_hardtpl[$tpl_name] : false);
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Return bbcode template replacement
d6e8d8
	*/
d6e8d8
	function bbcode_tpl_replace($tpl_name, $tpl)
d6e8d8
	{
d6e8d8
		global $user;
d6e8d8
d6e8d8
		static $replacements = array(
d6e8d8
			'quote_username_open'	=> array('{USERNAME}'	=> '$1'),
d6e8d8
			'color'					=> array('{COLOR}'		=> '$1', '{TEXT}'			=> '$2'),
d6e8d8
			'size'					=> array('{SIZE}'		=> '$1', '{TEXT}'			=> '$2'),
d6e8d8
			'img'					=> array('{URL}'		=> '$1'),
d6e8d8
			'flash'					=> array('{WIDTH}'		=> '$1', '{HEIGHT}'			=> '$2', '{URL}'	=> '$3'),
d6e8d8
			'url'					=> array('{URL}'		=> '$1', '{DESCRIPTION}'	=> '$2'),
d6e8d8
			'email'					=> array('{EMAIL}'		=> '$1', '{DESCRIPTION}'	=> '$2')
d6e8d8
		);
d6e8d8
d6e8d8
		$tpl = preg_replace('/{L_([A-Z_]+)}/e', "(!empty(\$user->lang['\$1'])) ? \$user->lang['\$1'] : ucwords(strtolower(str_replace('_', ' ', '\$1')))", $tpl);
d6e8d8
d6e8d8
		if (!empty($replacements[$tpl_name]))
d6e8d8
		{
d6e8d8
			$tpl = strtr($tpl, $replacements[$tpl_name]);
d6e8d8
		}
d6e8d8
d6e8d8
		return trim($tpl);
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Second parse list bbcode
d6e8d8
	*/
d6e8d8
	function bbcode_list($type)
d6e8d8
	{
d6e8d8
		if ($type == '')
d6e8d8
		{
d6e8d8
			$tpl = 'ulist_open_default';
d6e8d8
			$type = 'default';
d6e8d8
		}
d6e8d8
		else if ($type == 'i')
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'lower-roman';
d6e8d8
		}
d6e8d8
		else if ($type == 'I')
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'upper-roman';
d6e8d8
		}
d6e8d8
		else if (preg_match('#^(disc|circle|square)$#i', $type))
d6e8d8
		{
d6e8d8
			$tpl = 'ulist_open';
d6e8d8
			$type = strtolower($type);
d6e8d8
		}
d6e8d8
		else if (preg_match('#^[a-z]$#', $type))
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'lower-alpha';
d6e8d8
		}
d6e8d8
		else if (preg_match('#[A-Z]#', $type))
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'upper-alpha';
d6e8d8
		}
d6e8d8
		else if (is_numeric($type))
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'arabic-numbers';
d6e8d8
		}
d6e8d8
		else
d6e8d8
		{
d6e8d8
			$tpl = 'olist_open';
d6e8d8
			$type = 'arabic-numbers';
d6e8d8
		}
d6e8d8
d6e8d8
		return str_replace('{LIST_TYPE}', $type, $this->bbcode_tpl($tpl));
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Second parse quote tag
d6e8d8
	*/
d6e8d8
	function bbcode_second_pass_quote($username, $quote)
d6e8d8
	{
d6e8d8
		// when using the /e modifier, preg_replace slashes double-quotes but does not
d6e8d8
		// seem to slash anything else
d6e8d8
		$quote = str_replace('\"', '"', $quote);
d6e8d8
		$username = str_replace('\"', '"', $username);
d6e8d8
d6e8d8
		// remove newline at the beginning
d6e8d8
		if ($quote == "\n")
d6e8d8
		{
d6e8d8
			$quote = '';
d6e8d8
		}
d6e8d8
d6e8d8
		$quote = (($username) ? str_replace('$1', $username, $this->bbcode_tpl('quote_username_open')) : $this->bbcode_tpl('quote_open')) . $quote;
d6e8d8
d6e8d8
		return $quote;
d6e8d8
	}
d6e8d8
d6e8d8
	/**
d6e8d8
	* Second parse code tag
d6e8d8
	*/
d6e8d8
	function bbcode_second_pass_code($type, $code)
d6e8d8
	{
d6e8d8
		// when using the /e modifier, preg_replace slashes double-quotes but does not
d6e8d8
		// seem to slash anything else
d6e8d8
		$code = str_replace('\"', '"', $code);
d6e8d8
d6e8d8
		switch ($type)
d6e8d8
		{
d6e8d8
			case 'php':
d6e8d8
				// Not the english way, but valid because of hardcoded syntax highlighting
d6e8d8
				if (strpos($code, '
') === 0)
d6e8d8
				{
d6e8d8
					$code = substr($code, 41);
d6e8d8
				}
d6e8d8
d6e8d8
			// no break;
d6e8d8
d6e8d8
			default:
d6e8d8
				$code = str_replace("\t", '   ', $code);
d6e8d8
				$code = str_replace('  ', '  ', $code);
d6e8d8
				$code = str_replace('  ', '  ', $code);
d6e8d8
d6e8d8
				// remove newline at the beginning
d6e8d8
				if (!empty($code) && $code[0] == "\n")
d6e8d8
				{
d6e8d8
					$code = substr($code, 1);
d6e8d8
				}
d6e8d8
			break;
d6e8d8
		}
d6e8d8
d6e8d8
		$code = $this->bbcode_tpl('code_open') . $code . $this->bbcode_tpl('code_close');
d6e8d8
d6e8d8
		return $code;
d6e8d8
	}
d6e8d8
}
d6e8d8
d6e8d8
?>