X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=include%2Fbb2diaspora.php;h=ffe6b3b970bd5dbc4137ac8a98e280a6867e9540;hb=3331e71e8e14a279dc59e87693e8edeacae00be8;hp=d0cb60302c9002200195bfba5bb2a613001a18d0;hpb=0c5af9f3037477ac2736bcc856e5315fef6ba181;p=friendica.git diff --git a/include/bb2diaspora.php b/include/bb2diaspora.php index d0cb60302c..ffe6b3b970 100644 --- a/include/bb2diaspora.php +++ b/include/bb2diaspora.php @@ -7,6 +7,7 @@ require_once("include/html2bbcode.php"); require_once("include/bbcode.php"); require_once("include/markdownify/markdownify.php"); + // we don't want to support a bbcode specific markdown interpreter // and the markdown library we have is pretty good, but provides HTML output. // So we'll use that to convert to HTML, then convert the HTML back to bbcode, @@ -51,10 +52,10 @@ function diaspora2bb($s) { $s = preg_replace("/([^\]\=]|^)(https?\:\/\/)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3]$2$3[/url]',$s); //$s = preg_replace("/([^\]\=]|^)(https?\:\/\/)(vimeo|youtu|www\.youtube|soundcloud)([a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/ism", '$1[url=$2$3$4]$2$3$4[/url]',$s); - $s = preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]',$s); - $s = preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]',$s); - $s = preg_replace("/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism",'[vimeo]$2[/vimeo]',$s); - $s = preg_replace("/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism",'[vimeo]$1[/vimeo]',$s); + $s = bb_tag_preg_replace("/\[url\=?(.*?)\]https?:\/\/www.youtube.com\/watch\?v\=(.*?)\[\/url\]/ism",'[youtube]$2[/youtube]','url',$s); + $s = bb_tag_preg_replace("/\[url\=https?:\/\/www.youtube.com\/watch\?v\=(.*?)\].*?\[\/url\]/ism",'[youtube]$1[/youtube]','url',$s); + $s = bb_tag_preg_replace("/\[url\=?(.*?)\]https?:\/\/vimeo.com\/([0-9]+)(.*?)\[\/url\]/ism",'[vimeo]$2[/vimeo]','url',$s); + $s = bb_tag_preg_replace("/\[url\=https?:\/\/vimeo.com\/([0-9]+)\](.*?)\[\/url\]/ism",'[vimeo]$1[/vimeo]','url',$s); // remove duplicate adjacent code tags $s = preg_replace("/(\[code\])+(.*?)(\[\/code\])+/ism","[code]$2[/code]", $s); @@ -130,63 +131,67 @@ function diaspora_ol($s) { } -function bb2diaspora($Text,$preserve_nl = false) { +function bb2diaspora($Text,$preserve_nl = false, $fordiaspora = true) { -////////////////////// -// An attempt was made to convert bbcode to html and then to markdown -// consisting of the following lines. -// I'm undoing this as we have a lot of bbcode constructs which -// were simply getting lost, for instance bookmark, vimeo, video, youtube, events, etc. -// We can try this again, but need a very good test sequence to verify -// all the major bbcode constructs that we use are getting through. -////////////////////// -/* - // bbcode() will convert "[*]" into "
  • " with no closing "
  • " - // Markdownify() is unable to handle these, as it makes each new - // "
  • " into a deeper nested element until it crashes. So pre-format - // the lists as Diaspora lists before sending the $Text to bbcode() - // - // Note that to get nested lists to work for Diaspora, we would need - // to define the closing tag for the list elements. So nested lists - // are going to be flattened out in Diaspora for now + // Re-enabling the converter again. + // The bbcode parser now handles youtube-links (and the other stuff) correctly. + // Additionally the html code is now fixed so that lists are now working. - $endlessloop = 0; - while ((((strpos($Text, "[/list]") !== false) && (strpos($Text, "[list") !== false)) || - ((strpos($Text, "[/ol]") !== false) && (strpos($Text, "[ol]") !== false)) || - ((strpos($Text, "[/ul]") !== false) && (strpos($Text, "[ul]") !== false))) && (++$endlessloop < 20)) { - $Text = preg_replace_callback("/\[list\](.*?)\[\/list\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[list=1\](.*?)\[\/list\]/is", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=i\](.*?)\[\/list\]/s",'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=I\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=a\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[list=A\](.*?)\[\/list\]/s", 'diaspora_ol', $Text); - $Text = preg_replace_callback("/\[ul\](.*?)\[\/ul\]/is", 'diaspora_ul', $Text); - $Text = preg_replace_callback("/\[ol\](.*?)\[\/ol\]/is", 'diaspora_ol', $Text); - } + /** + * Transform #tags, strip off the [url] and replace spaces with underscore + */ + $Text = preg_replace_callback('/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', create_function('$match', + 'return \'#\'. str_replace(\' \', \'_\', $match[2]);' + ), $Text); -*/ + + // Converting images with size parameters to simple images. Markdown doesn't know it. + $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $Text); + + // the following was added on 10-January-2012 due to an inability of Diaspora's + // new javascript markdown processor to handle links with images as the link "text" + // It is not optimal and may be removed if this ability is restored in the future + //if ($fordiaspora) + // $Text = preg_replace("/\[url\=([^\[\]]*)\]\s*\[img\](.*?)\[\/img\]\s*\[\/url\]/ism", + // "[url]$1[/url]\n[img]$2[/img]", $Text); + + // Remove the avatar picture since that isn't looking good on the other side + //$Text = preg_replace("/\[share(.*?)avatar\s?=\s?'.*?'\s?(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism","\n[share$1$2]$3[/share]",$Text); // Convert it to HTML - don't try oembed -// $Text = bbcode($Text, $preserve_nl, false); + $Text = bbcode($Text, $preserve_nl, false); // Now convert HTML to Markdown -// $md = new Markdownify(false, false, false); -// $Text = $md->parseString($Text); + $md = new Markdownify(false, false, false); + $Text = $md->parseString($Text); + + // The Markdownify converter converts underscores '_' in URLs to '\_', which + // messes up the URL. Manually fix these + $count = 1; + $pos = bb_find_open_close($Text, '[', ']', $count); + while($pos !== false) { + $start = substr($Text, 0, $pos['start']); + $subject = substr($Text, $pos['start'], $pos['end'] - $pos['start'] + 1); + $end = substr($Text, $pos['end'] + 1); + + $subject = str_replace('\_', '_', $subject); + $Text = $start . $subject . $end; + + $count++; + $pos = bb_find_open_close($Text, '[', ']', $count); + } // If the text going into bbcode() has a plain URL in it, i.e. // with no [url] tags around it, it will come out of parseString() // looking like: , which gets removed by strip_tags(). // So take off the angle brackets of any such URL -// $Text = preg_replace("//is", "http$1", $Text); + $Text = preg_replace("//is", "http$1", $Text); // Remove all unconverted tags -// $Text = strip_tags($Text); - -////// -// end of bb->html->md conversion attempt -////// + $Text = strip_tags($Text); +/* Old routine $ev = bbtoevent($Text); @@ -362,6 +367,7 @@ function bb2diaspora($Text,$preserve_nl = false) { $Text = preg_replace_callback('/\[(.*?)\]\((.*?)\)/ism','unescape_underscores_in_links',$Text); +*/ // Remove any leading or trailing whitespace, as this will mess up // the Diaspora signature verification and cause the item to disappear