diff --git a/e107_handlers/e_parse_class.php b/e107_handlers/e_parse_class.php
index 86793cacc..85037a7ff 100644
--- a/e107_handlers/e_parse_class.php
+++ b/e107_handlers/e_parse_class.php
@@ -9,8 +9,8 @@
* Text processing and parsing functions
*
* $Source: /cvs_backup/e107_0.8/e107_handlers/e_parse_class.php,v $
-* $Revision: 1.50 $
-* $Date: 2009-01-23 21:18:37 $
+* $Revision: 1.51 $
+* $Date: 2009-01-30 20:39:03 $
* $Author: e107steved $
*
*/
@@ -48,8 +48,8 @@ class e_parse
'no_tags' => FALSE, // remove HTML tags.
'value' => FALSE, // Restore entity form of quotes and such to single characters - TRUE disables
- 'nobreak' => FALSE, // Line break compression - TRUE removes multiple line breaks
- 'retain_nl' => FALSE // Retain newlines - wraps to \n instead of
if TRUE
+ 'nobreak' => FALSE, // Line break compression - TRUE removes newline characters
+ 'retain_nl' => FALSE // Retain newlines - wraps to \n instead of
if TRUE (for non-HTML email text etc)
);
// Super modifiers override default option values
@@ -767,6 +767,7 @@ class e_parse
// Now get on with the parsing
$ret_parser = '';
$last_bbcode = '';
+ $saveOpts = $opts; // So we can change them on each loop
if ($parseBB == FALSE)
{
$content = array($text);
@@ -775,7 +776,7 @@ class e_parse
{
// Split each text block into bits which are either within one of the 'key' bbcodes, or outside them
// (Because we have to match end words, the 'extra' capturing subpattern gets added to output array. We strip it later)
- $content = preg_split('#(\[(php|code|scode|hide).*?\[/(?:\\2)\])#mis', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
+ $content = preg_split('#(\[(html|php|code|scode|hide).*?\[/(?:\\2)\])#mis', $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE );
}
@@ -783,6 +784,7 @@ class e_parse
foreach ($content as $full_text)
{
$proc_funcs = TRUE;
+ $convertNL = TRUE;
// We may have 'captured' a bbcode word - strip it if so
if ($last_bbcode == $full_text)
@@ -793,8 +795,10 @@ class e_parse
}
else
{
+ $opts = $saveOpts; // Set the options for this pass
+
// (Have to have a good test in case a 'non-key' bbcode starts the block - so pull out the bbcode parameters while we're there
- if (($parseBB !== FALSE) && preg_match('#(^\[(php|code|scode|hide)(.*?)\])(.*?)(\[/\\2\]$)#is', $full_text, $matches ))
+ if (($parseBB !== FALSE) && preg_match('#(^\[(html|php|code|scode|hide)(.*?)\])(.*?)(\[/\\2\]$)#is', $full_text, $matches ))
{ // It's one of the 'key' bbcodes
$proc_funcs = FALSE; // Usually don't want 'normal' processing if its a 'special' bbcode
// $matches[0] - complete block from opening bracket of opening tag to closing bracket of closing tag
@@ -822,6 +826,10 @@ class e_parse
if (!$matches[3]) $bbcode = html_entity_decode($matches[4], ENT_QUOTES, CHARSET);
if (DB_INF_SHOW) echo "PHP after decode: ".htmlentities($bbcode)."
";
break;
+ case 'html' :
+ $proc_funcs = TRUE;
+ $convertNL = FALSE;
+ break;
case 'hide' :
$proc_funcs = TRUE;
default : // Most bbcodes will just execute their normal file
@@ -874,11 +882,14 @@ class e_parse
// Could put tag stripping in here
+/*
// Line break compression - filter white space after HTML tags - among other things, ensures HTML tables display properly
- if (!$opts['nobreak'])
+ // Hopefully now achieved by other means
+ if ($convertNL && !$opts['nobreak'])
{
$sub_blk = preg_replace("#>\s*[\r]*\n[\r]*#", ">", $sub_blk);
}
+*/
// Link substitution
// Convert URL's to clickable links, unless modifiers or prefs override
@@ -924,7 +935,14 @@ class e_parse
// Reduce newlines in all forms to a single newline character (finds '\n', '\r\n', '\n\r')
if (!$opts['nobreak'])
{
- $sub_blk = preg_replace("#[\r]*\n[\r]*#", E_NL, $sub_blk);
+ if ($convertNL)
+ {
+ $sub_blk = preg_replace("#[\r]*\n[\r]*#", E_NL, $sub_blk); // We may need to convert to
later
+ }
+ else
+ {
+ $sub_blk = preg_replace("#[\r]*\n[\r]*#", "\n", $sub_blk); // Not doing any more - its HTML so keep \n so HTML is formatted
+ }
}
@@ -1047,16 +1065,19 @@ class e_parse
}
- $nl_replace = '
'; // Default replaces all \n with
for HTML display
- if ($opts['nobreak'])
+ if ($convertNL)
{
- $nl_replace = '';
+ $nl_replace = '
'; // Default replaces all \n with
for HTML display
+ if ($opts['nobreak'])
+ {
+ $nl_replace = '';
+ }
+ elseif ($opts['retain_nl'])
+ {
+ $nl_replace = "\n";
+ }
+ $sub_blk = str_replace(E_NL, $nl_replace, $sub_blk);
}
- elseif ($opts['retain_nl'])
- {
- $nl_replace = "\n";
- }
- $sub_blk = str_replace(E_NL, $nl_replace, $sub_blk);
$ret_parser .= $sub_blk;