]> git.mxchange.org Git - friendica.git/blobdiff - include/html2bbcode.php
add remove_user hook (it looks like dreamhost changed all my file permissions, this...
[friendica.git] / include / html2bbcode.php
old mode 100644 (file)
new mode 100755 (executable)
index 0236c83..8025c33
 <?php
 
+/**
+ * html2bbcode
+ */
+
 
 function html2bbcode($s) {
 
 
-// Tags to Find
-$htmltags = array(
-                        '/\<b\>(.*?)\<\/b\>/is',
-                        '/\<i\>(.*?)\<\/i\>/is',
-                        '/\<u\>(.*?)\<\/u\>/is',
-                        '/\<ul\>(.*?)\<\/ul\>/is',
-                        '/\<li\>(.*?)\<\/li\>/is',
-                        '/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
-                        '/\<div(.*?)\>(.*?)\<\/div\>/is',
-                        '/\<br(.*?)\>/is',
-                        '/\<strong\>(.*?)\<\/strong\>/is',
-                        '/\<a href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is',
-                       '/\<code\>(.*?)\<\/code\>/is',
-                       '/\<font color=(.*?)\>(.*?)\<\/font\>',
-                       '/\<font color=\"(.*?)\"\>(.*?)\<\/font\>',
-                       '/\<blockquote\>(.*?)\<\/blockquote\>/is',
-
-                        );
-
-// Replace with
-$bbtags = array(
-                        '[b]$1[/b]',
-                        '[i]$1[/i]',
-                        '[u]$1[/u]',
-                        '[list]$1[/list]',
-                        '[*]$1',
-                        '[img]$2[/img]',
-                        '$2',
-                        '\n',
-                        '[b]$1[/b]',
-                        '[url=$1]$3[/url]',
-                       '[code]$1[/code],
-                       '[color="$1"]$2[/color]',
-                       '[color="$1"]$2[/color]',
-                       '[quote]$1[/quote]',
-                        );
-
-// Replace $htmltags in $text with $bbtags
-$text = preg_replace ($htmltags, $bbtags, $s);
-
-// Strip all other HTML tags
-$text = strip_tags($text);
-return $text;
-}
\ No newline at end of file
+       // only keep newlines from source that are within pre tags
+
+       $s = stripnl_exceptinpre($s);
+
+
+       // Tags to Find
+
+       $htmltags = array(
+               '/\<pre\>(.*?)\<\/pre\>/is',
+               '/\<p(.*?)\>/is',
+               '/\<\/p\>/is',
+               '/\<b\>(.*?)\<\/b\>/is',
+               '/\<i\>(.*?)\<\/i\>/is',
+               '/\<u\>(.*?)\<\/u\>/is',
+               '/\<ul\>(.*?)\<\/ul\>/is',
+               '/\<li\>(.*?)\<\/li\>/is',
+               '/\<img(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
+               '/\<img(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)src=\"(.*?)\" (.*?)\>/is',
+               '/\<img(.*?)src=\"(.*?)\"(.*?)width: *([0-9]+)(.*?)height: *([0-9]+)(.*?)\>/is',
+               '/\<img(.*?)src=\"(.*?)\"(.*?)height: *([0-9]+)(.*?)width: *([0-9]+)(.*?)\>/is',
+               '/\<img(.*?) src=\"(.*?)\" (.*?)\>/is',
+               '/\<div(.*?)\>(.*?)\<\/div\>/is',
+               '/\<br(.*?)\>/is',
+               '/\<strong\>(.*?)\<\/strong\>/is',
+               '/\<a (.*?)href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is',
+               '/\<code\>(.*?)\<\/code\>/is',
+               '/\<span style=\"color:(.*?)\"\>(.*?)\<\/span\>/is',
+               '/\<span style=\"font-size:(.*?)\"\>(.*?)\<\/span\>/is',
+               '/\<blockquote\>(.*?)\<\/blockquote\>/is',
+               '/\<video(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/video\>/is',
+               '/\<audio(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/audio\>/is',
+               '/\<iframe(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/iframe\>/is',
+
+       );
+
+       // Replace with
+
+       $bbtags = array(
+               '[code]$1[/code]',
+               '',
+               "\n",
+               '[b]$1[/b]',
+               '[i]$1[/i]',
+               '[u]$1[/u]',
+               '[list]$1[/list]',
+               '[*]$1',
+               '[img=$2x$4]$6[/img]',
+               '[img=$4x$2]$6[/img]',
+               '[img=$4x$6]$2[/img]',
+               '[img=$6x$4]$2[/img]',
+               '[img]$2[/img]',
+               '$2',
+               "\n",
+               '[b]$1[/b]',
+               '[url=$2]$4[/url]',
+               '[code]$1[/code]',
+               '[color="$1"]$2[/color]',
+               '[size=$1]$2[/size]',
+               '[quote]$1[/quote]',
+               '[video]$1[/video]',
+               '[audio]$1[/audio]',
+               '[iframe]$1[/iframe]',
+       );
+
+       // Replace $htmltags in $text with $bbtags
+       $text = preg_replace ($htmltags, $bbtags, $s);
+
+       call_hooks('html2bbcode', $text);
+
+       // Strip all other HTML tags
+       $text = strip_tags($text);
+       return $text;
+
+}
+
+function stripnl_exceptinpre($string)
+{
+    // First, check for <pre> tag
+    if(strpos($string, '<pre>') === false)
+    {
+        return str_replace("\n","", $string);
+    }
+
+    // If there is a <pre>, 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 <pre>. If it does, set $preFound to true
+        if(strpos($line, "<pre>") !== false)
+        {
+            $preFound=true;
+        }
+        elseif(strpos($line, "</pre>") !== 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;
+}
+