|
@ -1464,9 +1464,11 @@ function unicodify($body) { |
|
|
function extract_modifiers($body) { |
|
|
function extract_modifiers($body) { |
|
|
$modifiers = array(); |
|
|
$modifiers = array(); |
|
|
|
|
|
|
|
|
if (preg_match_all('@<tinyboard ([\w\s]+)>(.+?)</tinyboard>@um', $body, $matches, PREG_SET_ORDER)) { |
|
|
if (preg_match_all('@<tinyboard ([\w\s]+)>(.+?)</tinyboard>@us', $body, $matches, PREG_SET_ORDER)) { |
|
|
foreach ($matches as $match) { |
|
|
foreach ($matches as $match) { |
|
|
$modifiers[$match[1]] = $match[2]; |
|
|
if (preg_match('/^escape /', $match[1])) |
|
|
|
|
|
continue; |
|
|
|
|
|
$modifiers[$match[1]] = html_entity_decode($match[2]); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -1476,51 +1478,15 @@ function extract_modifiers($body) { |
|
|
function markup(&$body, $track_cites = false) { |
|
|
function markup(&$body, $track_cites = false) { |
|
|
global $board, $config, $markup_urls; |
|
|
global $board, $config, $markup_urls; |
|
|
|
|
|
|
|
|
$body = str_replace("\r", '', $body); |
|
|
$modifiers = extract_modifiers($body); |
|
|
$body = utf8tohtml($body); |
|
|
|
|
|
|
|
|
|
|
|
if (preg_match_all('@<tinyboard ([\w\s]+)>(.+?)</tinyboard>@um', $body, $modifiers, PREG_SET_ORDER | PREG_OFFSET_CAPTURE)) { |
|
|
$body = preg_replace('@<tinyboard ([\w\s]+)>(.+?)</tinyboard>@us', '', $body); |
|
|
$skip_chars = 0; |
|
|
|
|
|
$body_tmp = $body; |
|
|
|
|
|
$end_markup = false; |
|
|
|
|
|
|
|
|
|
|
|
foreach ($modifiers as $modifier) { |
|
|
if (isset($modifiers['raw html']) && $modifiers['raw html'] == '1') |
|
|
// preg_match_all is not multibyte-safe |
|
|
return $body; |
|
|
foreach ($modifier as &$match) { |
|
|
|
|
|
$match[1] = mb_strlen(substr($body_tmp, 0, $match[1])); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
$modifier['type'] = $modifier[1][0]; |
|
|
|
|
|
$modifier['content'] = $modifier[2][0]; |
|
|
|
|
|
|
|
|
|
|
|
if ($modifier['type'] == 'ban message') { |
|
|
|
|
|
// Public ban message |
|
|
|
|
|
$replacement = sprintf($config['mod']['ban_message'], html_entity_decode($modifier['content'])); |
|
|
|
|
|
if ($end_markup) { |
|
|
|
|
|
$body .= $replacement; |
|
|
|
|
|
} |
|
|
|
|
|
} elseif ($modifier['type'] == 'raw html') { |
|
|
|
|
|
$body = html_entity_decode($modifier['content']); |
|
|
|
|
|
$replacement = ''; |
|
|
|
|
|
$end_markup = true; |
|
|
|
|
|
} elseif (preg_match('/^escape /', $modifier['type'])) { |
|
|
|
|
|
// Escaped (not a real modifier) |
|
|
|
|
|
$replacement = '<tinyboard ' . substr($modifier['type'], strlen('escape ')) . '>' . $modifier['content'] . '</tinyboard>'; |
|
|
|
|
|
} else { |
|
|
|
|
|
// Unknown |
|
|
|
|
|
$replacement = ''; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!$end_markup) { |
|
|
|
|
|
$body = mb_substr_replace($body, $replacement, $modifier[0][1] + $skip_chars, mb_strlen($modifier[0][0])); |
|
|
|
|
|
$skip_chars += mb_strlen($replacement) - mb_strlen($modifier[0][0]); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ($end_markup) { |
|
|
$body = str_replace("\r", '', $body); |
|
|
return array(); |
|
|
$body = utf8tohtml($body); |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (mysql_version() < 50503) |
|
|
if (mysql_version() < 50503) |
|
|
$body = mb_encode_numericentity($body, array(0x010000, 0xffffff, 0, 0xffffff), 'UTF-8'); |
|
|
$body = mb_encode_numericentity($body, array(0x010000, 0xffffff, 0, 0xffffff), 'UTF-8'); |
|
|