From 05c52ae81da6ce3c3b57672c2560072e1ce2705c Mon Sep 17 00:00:00 2001 From: Friendika Date: Wed, 9 Feb 2011 17:51:05 -0800 Subject: [PATCH] preserve newlines inside
 tags when importing feeds

---
 include/html2bbcode.php | 51 +++++++++++++++++++++++++++++++++++++++--
 1 file changed, 49 insertions(+), 2 deletions(-)

diff --git a/include/html2bbcode.php b/include/html2bbcode.php
index bde761f2fc..734282d95c 100644
--- a/include/html2bbcode.php
+++ b/include/html2bbcode.php
@@ -7,10 +7,15 @@
 
 function html2bbcode($s) {
 
+
+	// only keep newlines from source that are within pre tags
+
+	$s = stripnl_exceptinpre($s);
+
+
 	// Tags to Find
 
 	$htmltags = array(
-		'/\n/is',
 		'/\(.*?)\<\/pre\>/is',
 		'/\/is',
 		'/\<\/p\>/is',
@@ -36,7 +41,6 @@ function html2bbcode($s) {
 	// Replace with
 
 	$bbtags = array(
-		'',
 		'[code]$1[/code]',
 		'',
 		"\n",
@@ -66,5 +70,48 @@ function html2bbcode($s) {
 	// Strip all other HTML tags
 	$text = strip_tags($text);
 	return $text;
+
+}
+
+function stripnl_exceptinpre($string)
+{
+    // First, check for 
 tag
+    if(strpos($string, '
') === false)
+    {
+        return str_replace("\n","", $string);
+    }
+
+    // If there is a 
, we have to split by line
+    // and manually replace the linebreaks
+
+    $strArr=explode("\n", $string);
+
+    $output="";
+    $preFound=false;
+
+    // Loop over each line
+    foreach($strArr as $line)
+    {    // See if the line has a 
. If it does, set $preFound to true
+        if(strpos($line, "
") !== false)
+        {
+            $preFound=true;
+        }
+        elseif(strpos($line, "
") !== false) + { + $preFound=false; + } + + // If we are in a pre tag, add line and also add \n, else add the line without \n + if($preFound) + { + $output .= $line . "\n"; + } + else + { + $output .= $line ; + } + } + + return $output; }