mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
Added syntax highlitning to [code]. Added [flash] tag.
git-svn-id: file:///svn/phpbb/trunk@3863 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
ce8eab90fb
commit
c2e73ed656
1 changed files with 78 additions and 21 deletions
|
@ -25,11 +25,13 @@ class bbcode
|
|||
var $bbcode_bitfield = 0;
|
||||
var $bbcode_cache = array();
|
||||
|
||||
function bbcode($uid = '', $bitfield = 0)
|
||||
function bbcode($bitfield = 0)
|
||||
{
|
||||
$this->bbcode_uid = $uid;
|
||||
$this->bbcode_bitfield = $bitfield;
|
||||
//$this->bbcode_cache_init();
|
||||
if ($bitfield)
|
||||
{
|
||||
$this->bbcode_bitfield = $bitfield;
|
||||
$this->bbcode_cache_init();
|
||||
}
|
||||
}
|
||||
|
||||
function bbcode_second_pass(&$message, $bbcode_uid = '', $bbcode_bitfield = '')
|
||||
|
@ -38,6 +40,7 @@ class bbcode
|
|||
{
|
||||
$this->bbcode_cache_init();
|
||||
}
|
||||
|
||||
if ($bbcode_uid)
|
||||
{
|
||||
$this->bbcode_uid = $bbcode_uid;
|
||||
|
@ -50,9 +53,10 @@ class bbcode
|
|||
$str = array('search' => array(), 'replace' => array());
|
||||
$preg = array('search' => array(), 'replace' => array());
|
||||
|
||||
for ($bbcode_id = 0; $bbcode_id < 31; ++$bbcode_id)
|
||||
$bitlen = strlen(decbin($this->bbcode_bitfield));
|
||||
for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
|
||||
{
|
||||
if ($this->bbcode_bitfield & pow(2, $bbcode_id))
|
||||
if ($this->bbcode_bitfield & pow(2, $bbcode_id))
|
||||
{
|
||||
foreach ($this->bbcode_cache[$bbcode_id] as $type => $array)
|
||||
{
|
||||
|
@ -66,8 +70,15 @@ class bbcode
|
|||
}
|
||||
}
|
||||
|
||||
$message = str_replace($str['search'], $str['replace'], $message);
|
||||
$message = preg_replace($preg['search'], $preg['replace'], $message);
|
||||
|
||||
if (count($str['search']))
|
||||
{
|
||||
$message = str_replace($str['search'], $str['replace'], $message);
|
||||
}
|
||||
if (count($preg['search']))
|
||||
{
|
||||
$message = preg_replace($preg['search'], $preg['replace'], $message);
|
||||
}
|
||||
|
||||
return $message;
|
||||
}
|
||||
|
@ -83,19 +94,24 @@ class bbcode
|
|||
$sql = '';
|
||||
|
||||
$bbcode_ids = array();
|
||||
// TODO: only load needed bbcodes
|
||||
for ($bbcode_id = 0; $bbcode_id < 10; ++$bbcode_id)
|
||||
$bitlen = strlen(decbin($this->bbcode_bitfield));
|
||||
|
||||
for ($bbcode_id = 0; $bbcode_id < $bitlen; ++$bbcode_id)
|
||||
{
|
||||
if (isset($this->bbcode_cache[$bbcode_id]) || !($this->bbcode_bitfield & pow(2, $bbcode_id)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
$bbcode_ids[] = $bbcode_id;
|
||||
|
||||
//
|
||||
// WARNING: hardcoded values. it assumes that bbcodes with bbcode_id > 10 are user-defined bbcodes
|
||||
// WARNING: hardcoded values. it assumes that bbcodes with bbcode_id > 11 are user-defined bbcodes
|
||||
// and it has to be specified which bbcodes need the template to be loaded
|
||||
//
|
||||
if ($bbcode_id > 10)
|
||||
if ($bbcode_id > 11)
|
||||
{
|
||||
$sql .= $bbcode_id . ',';
|
||||
}
|
||||
// WARNING: even more hardcoded stuff - define which bbcodes need template
|
||||
elseif (in_array($bbcode_id, array(0, 5, 6, 8, 9)))
|
||||
{
|
||||
$load_template = TRUE;
|
||||
|
@ -149,6 +165,7 @@ class bbcode
|
|||
{
|
||||
$rowset[$row['bbcode_id']] = $row;
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
}
|
||||
|
||||
foreach ($bbcode_ids as $bbcode_id)
|
||||
|
@ -222,7 +239,7 @@ class bbcode
|
|||
case 8:
|
||||
$this->bbcode_cache[$bbcode_id] = array(
|
||||
'preg' => array(
|
||||
'#\[code:$uid\](.*?)\[/code:$uid\]#ise' => '$this->bbcode_second_pass_code("\1")'
|
||||
'#\[code(?:=([a-z]+))?:$uid\](.*?)\[/code:$uid\]#ise' => "\$this->bbcode_second_pass_code('\\1', '\\2')"
|
||||
)
|
||||
);
|
||||
break;
|
||||
|
@ -235,18 +252,25 @@ class bbcode
|
|||
'[*:$uid]' => '<li>'
|
||||
),
|
||||
'preg' => array(
|
||||
'#\[list=(.+?):$uid\]#e' => '$this->bbcode_ordered_list("\1")',
|
||||
'#\[list=(.+?):$uid\]#e' => "\$this->bbcode_ordered_list('\\1')",
|
||||
)
|
||||
);
|
||||
break;
|
||||
case 10:
|
||||
$this->bbcode_cache[$bbcode_id] = array(
|
||||
'preg' => array(
|
||||
'#\[email:$uid\](.*?)\[/email:$uid\]#is' => '<a href="mailto:\1">\1</a>',
|
||||
'#\[email:$uid\](.*?)\[/email:$uid\]#is' => '<a href="mailto:\1">\1</a>',
|
||||
'#\[email=(.*?):$uid\](.*?)\[/email:$uid\]#is' => '<a href="mailto:\1">\2</a>'
|
||||
)
|
||||
);
|
||||
break;
|
||||
case 11:
|
||||
$this->bbcode_cache[$bbcode_id] = array(
|
||||
'preg' => array(
|
||||
'#\[flash:$uid\](.*?)\[/flash:$uid\]#' => '<object classid="clsid:D27CDB6E-AE6D-11CF-96B8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,0,0"><param name="movie" value="\1"><param name="play" value="1"><param name="loop" value="1"><param name="quality" value="high"><embed src="\1" play="1" loop="1" quality="high"></embed></object>'
|
||||
)
|
||||
);
|
||||
break;
|
||||
default:
|
||||
if (isset($rowset[$bbcode_id]))
|
||||
{
|
||||
|
@ -281,11 +305,44 @@ class bbcode
|
|||
return '<ol type="' . $chr . '" start="' . $start . '">';
|
||||
}
|
||||
|
||||
function bbcode_second_pass_code($code)
|
||||
function bbcode_second_pass_code($type, $code)
|
||||
{
|
||||
$code = str_replace("\t", ' ', $code);
|
||||
$code = str_replace(' ', ' ', $code);
|
||||
$code = str_replace(' ', ' ', $code);
|
||||
$code = stripslashes(str_replace("\r\n", "\n", $code));
|
||||
|
||||
switch ($type)
|
||||
{
|
||||
case 'php':
|
||||
$remove_tags = FALSE;
|
||||
if (!preg_match('/<\?(php)? .*? \?>/', $code))
|
||||
{
|
||||
$remove_tags = TRUE;
|
||||
$code = "<?php $code ?>";
|
||||
}
|
||||
|
||||
$str_from = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@');
|
||||
$str_to = array('<', '>', '"', ':', '[', ']', '(', ')', '{', '}', '.', '@');
|
||||
|
||||
$code = str_replace($str_to, $str_from, $code);
|
||||
|
||||
ob_start();
|
||||
highlight_string($code);
|
||||
$code = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
if ($remove_tags)
|
||||
{
|
||||
$code = preg_replace('/(.*?)<\?php (.*)\?>(.*?)/', '\1\2\3', $code);
|
||||
}
|
||||
|
||||
$code = preg_replace('!^<code>[\n\r\s\t]*<font color="#[a-z0-9]+">[\n\r\s\t]*(.*)</font>[\n\r\s\t]*</code>[\n\r\s\t]*!is', '\\1', $code);
|
||||
break;
|
||||
|
||||
default:
|
||||
$code = str_replace("\t", ' ', $code);
|
||||
$code = str_replace(' ', ' ', $code);
|
||||
$code = str_replace(' ', ' ', $code);
|
||||
}
|
||||
|
||||
$code = $this->bbcode_tpl['code_open'] . $code . $this->bbcode_tpl['code_close'];
|
||||
|
||||
return $code;
|
||||
|
|
Loading…
Add table
Reference in a new issue