Fix applying combining characters to double-width characters.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 15 Oct 2004 09:28:46 +0000 (09:28 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 15 Oct 2004 09:28:46 +0000 (09:28 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/putty@4628 cda61777-01e9-0310-a592-d414129be87e

terminal.c

index 708ffc8..0857462 100644 (file)
@@ -2717,8 +2717,26 @@ void term_out(Terminal *term)
 
                        break;
                      case 0:
-                       add_cc(cline, term->curs.x - !term->wrapnext, c);
-                       term->seen_disp_event = 1;
+                       if (term->curs.x > 0) {
+                           int x = term->curs.x - 1;
+
+                           /* If we're in wrapnext state, the character
+                            * to combine with is _here_, not to our left. */
+                           if (term->wrapnext)
+                               x++;
+
+                           /*
+                            * If the previous character is
+                            * UCSWIDE, back up another one.
+                            */
+                           if (cline->chars[x].chr == UCSWIDE) {
+                               assert(x > 0);
+                               x--;
+                           }
+
+                           add_cc(cline, x, c);
+                           term->seen_disp_event = 1;
+                       }
                        continue;
                      default:
                        continue;