X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=banana%2Fmisc.inc.php;h=8f334846c261d9f40f4eb4f275aef388a9e4b45b;hb=09f71105fb4d3afd464c92a4d5358d9c1440a602;hp=7a526ecdb20553e0c6402edac1a285a2105c01ed;hpb=e04e6059901219052f5ac34da1c7af393718d63b;p=banana.git
diff --git a/banana/misc.inc.php b/banana/misc.inc.php
index 7a526ec..8f33484 100644
--- a/banana/misc.inc.php
+++ b/banana/misc.inc.php
@@ -286,6 +286,19 @@ function displayshortcuts($first = -1) {
* FORMATTING STUFF : BODY
*/
+function autoformat($text)
+{
+ global $banana;
+ $length = $banana->wrap;
+
+ $cmd = "echo ".escapeshellarg($text)." | perl -MText::Autoformat -e 'autoformat {left=>1, right=>$length, all=>1 };'";
+ exec($cmd, $result, $ret);
+ if ($ret != 0) {
+ $result = split("\n", $text);
+ }
+ return $result;
+}
+
function wrap($text, $_prefix="", $_force=false)
{
$parts = preg_split("/\n-- ?\n/", $text);
@@ -301,18 +314,46 @@ function wrap($text, $_prefix="", $_force=false)
$length = $banana->wrap;
$max = $length + ($length/10);
$splits = split("\n", $text);
- $ret = -1;
+ $result = array();
+ $next = array();
+ $format = false;
foreach ($splits as $line) {
if ($_force || strlen($line) > $max) {
- if (!preg_match("!^\\s*$url\\s*$!i", $line)) {
- $cmd = "echo ".escapeshellarg($text)." | perl -MText::Autoformat -e 'autoformat {left=>1, right=>$length, all=>1 };'";
- exec($cmd, $result, $ret);
- break;
+ if (preg_match("!^(.*)($url)(.*)!i", $line, $matches) && strlen($matches[2]) > $length && strlen($matches) < 900) {
+ if (strlen($matches[1]) != 0) {
+ array_push($next, rtrim($matches[1]));
+ if (strlen($matches[1]) > $max) {
+ $format = true;
+ }
+ }
+
+ if ($format) {
+ $result = array_merge($result, autoformat(join("\n", $next)));
+ } else {
+ $result = array_merge($result, $next);
+ }
+ $format = false;
+ $next = array();
+ array_push($result, $matches[2]);
+
+ if (strlen($matches[6]) != 0) {
+ array_push($next, ltrim($matches[6]));
+ if (strlen($matches[6]) > $max) {
+ $format = true;
+ }
+ }
+ } else {
+ $format = true;
+ array_push($next, $line);
}
+ } else {
+ array_push($next, $line);
}
}
- if ($ret != 0) {
- $result = $splits;
+ if ($format) {
+ $result = array_merge($result, autoformat(join("\n", $next)));
+ } else {
+ $result = array_merge($result, $next);
}
return $_prefix.join("\n$_prefix", $result).($_prefix ? '' : $sign);
@@ -333,26 +374,32 @@ function formatbody($_text, $format='plain', $flowed=false)
if ($format == 'html') {
$res = '
'.html_entity_decode(to_entities(removeEvilTags($_text))).'
';
} else if ($format == 'richtext') {
- $res = '
'.createlinks(html_entity_decode(to_entities(richtextToHtml($_text)))).'
';
- $format = 'html';
+ $res = '
'.html_entity_decode(to_entities(richtextToHtml($_text))).'
';
} else {
$res = "\n\n" . to_entities(wrap($_text, "", $flowed))."\n\n";
}
- global $banana;
- $url = $banana->url_regexp;
- $res = preg_replace("/(<|>|")/", " \\1 ", $_text);
- $res = preg_replace("!$url!ie", "'\\1'.cutlink('\\2').'\\3'", $res);
- $res = preg_replace("/ (<|>|") /", "\\1", $res);
+ if ($format != 'html') {
+ global $banana;
+ $url = $banana->url_regexp;
+ $res = preg_replace("/(<|>|")/", " \\1 ", $res);
+ $res = preg_replace("!$url!ie", "'\\1'.cutlink('\\2').'\\3'", $res);
+ $res = preg_replace('/(["\[])?(?:mailto:)?([a-z0-9.\-+_]+@[a-z0-9.\-+_]+)(["\]])?/i', '\1\2\3', $res);
+ $res = preg_replace("/ (<|>|") /", "\\1", $res);
+
+ if ($format == 'richtext') {
+ $format = 'html';
+ }
+ }
if ($format == 'html') {
$res = preg_replace("@(
]*>|
]*>)@", "\\1
-- \\2", $res);
$res = preg_replace("@
]*>\n?-- \n?(
]*>)@", "
--
\\2", $res);
$parts = preg_split("@(:?
]*>\n?-- \n?
||\n)>@i", $res) ; $i++) { + while (preg_match("@(^||\n)>@i", $res)) { $res = preg_replace("@(^||\n)((>[^\n]*\n)+)@ie", - "'\\1'" + "'\\1'" .".stripslashes(preg_replace('@(^||\n)>[ \\t\\r]*@i', '\\1', '\\2'))" .".''", $res);