From 6b6f2e83de0e5b48ba48583206bd456508554540 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 20 May 2010 17:28:30 -0400
Subject: [PATCH] Display and send messages with format=flowed (#1484370), fixes word wrapping issues (#1486543)
---
program/include/rcube_message.php | 36 ++++++++++++++++++++++++++++++++++++
1 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/program/include/rcube_message.php b/program/include/rcube_message.php
index 05b0151..47fe3d7 100644
--- a/program/include/rcube_message.php
+++ b/program/include/rcube_message.php
@@ -198,6 +198,10 @@
if ($mimetype == 'text/plain') {
$out = $this->imap->get_message_part($this->uid, $mime_id, $part);
+
+ // re-format format=flowed content
+ if ($part->ctype_secondary == "plain" && $part->ctype_parameters['format'] == "flowed")
+ $out = self::unfold_flowed($out);
break;
}
else if ($mimetype == 'text/html') {
@@ -477,5 +481,37 @@
}
+ /**
+ * Interpret a format=flowed message body according to RFC 2646
+ *
+ * @param string Raw body formatted as flowed text
+ * @return string Interpreted text with unwrapped lines and stuffed space removed
+ */
+ public static function unfold_flowed($text)
+ {
+ return preg_replace(
+ array('/-- (\r?\n)/', '/^ /m', '/(.) \r?\n/', '/--%SIGEND%(\r?\n)/'),
+ array('--%SIGEND%\\1', '', '\\1 ', '-- \\1'),
+ $text);
+ }
+
+ /**
+ * Wrap the given text to comply with RFC 2646
+ */
+ public static function format_flowed($text, $length = 72)
+ {
+ $out = '';
+
+ foreach (preg_split('/\r?\n/', trim($text)) as $line) {
+ // don't wrap quoted lines (to avoid wrapping problems)
+ if ($line[0] != '>')
+ $line = rc_wordwrap(rtrim($line), $length - 1, " \r\n");
+
+ $out .= $line . "\r\n";
+ }
+
+ return $out;
+ }
+
}
--
Gitblit v1.9.1