summaryrefslogtreecommitdiff
path: root/japanese/mutt-devel/files/patch-ae
blob: 849ae36b0d648d89d1a91882d560660d4317096b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
--- khenkan.c.orig	Tue Aug  1 02:28:27 2000
+++ khenkan.c	Tue Aug  1 03:13:51 2000
@@ -1045,6 +1045,7 @@
 {
   char *p = (char *)s, ch, *beg, *end=NULL, *to_ascii=NULL, *to_kanji=NULL;
   int len = 0, count, beg_kanji, end_kanji=0;
+  char *enc_end = NULL, *prev_brk = NULL;
 
   /* check if buffer 'd' has a enough length */
   if (dmax - d < strlen((char *)s) * 4 / 3) return (-1);
@@ -1064,11 +1065,23 @@
     if (d == dmax) return (-1);
 
     if (len > 75) { /* line break(in text) */
-      p = beg;  /* search previous word's end */
-      while(beg > (char *)s && *beg != ' ') beg--;
-      while(beg > (char *)s && *beg == ' ') beg--;
+      if (enc_end == NULL) {
+        enc_end = s;
+      }
+      while(beg >= enc_end && *beg != ' ') beg--;
+      while(beg >= enc_end && *beg == ' ') beg--;
       ++beg;
-      d -= p - beg + 1;
+      if (prev_brk != NULL && beg <= prev_brk) {
+        beg = p;
+        while(beg > prev_brk && isalnum(*beg)) beg--;
+      }
+      if (prev_brk == NULL || beg > prev_brk) {
+        d -= p - beg;
+        p = beg;
+        prev_brk = beg;
+      } else {
+        prev_brk = p;
+      }
       *d++ = '\n';
       *d++ = ' ';
       len = 0;
@@ -1181,6 +1194,7 @@
       new_d = encode_base64(d, jtmp_str, jtmp_str + count);
       len += new_d - d;
       d = new_d;
+      enc_end = p;
 
       beg_kanji = end_kanji;
       beg = p;