aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer.c
diff options
context:
space:
mode:
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r--composer/e-msg-composer.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 7be0994fa0..48eb7cf15b 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -161,19 +161,33 @@ format_text (char *text)
while (*s) {
len = strcspn (s, "\n");
if (len > LINE_LEN) {
+ /* If we can break anywhere between s and
+ * s + LINE_LEN, do that. We can break between
+ * space and anything but  
+ */
space = s + LINE_LEN;
- while (*space != ' ' && space > s)
+ while (space > s && (*space != ' '
+ || (*(space + 1) == '\240')
+ || (*(space - 1) == '\240')))
space--;
if (space != s)
len = space - s;
}
- memcpy (d, s, len);
- s += len;
- if (*s)
+ /* Copy the line... */
+ while (len--) {
+ *d++ = (*s == '\240' ? ' ' : *s);
s++;
- d += len;
+ }
+
+ /* Eat whitespace... */
+ while (*s == ' ' || *s == '\240')
+ s++;
+ if (*s == '\n')
+ s++;
+
+ /* And end the line. */
*d++ = '\n';
}