Changeset dd24b6a for fmtext.c


Ignore:
Timestamp:
Dec 24, 2007, 10:14:09 AM (13 years ago)
Author:
Alejandro R. Sedeño <asedeno@mit.edu>
Branches:
master, barnowl_perlaim, debian, release-1.4, release-1.5, release-1.6, release-1.7, release-1.8, release-1.9
Children:
9866c3a
Parents:
762512d
Message:
* include wchar.h
* replace hand-rolled width detection with wcswidth.
* pad with space if we end up halfway into a character at the start of a line.

WARNING: Still not safe.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • fmtext.c

    r28ee32b rdd24b6a  
    316316{
    317317  char *ptr_s, *ptr_e, *ptr_c, *last;
    318   int col, cnt;
     318  int col, cnt, padding;
    319319
    320320  last=in->textbuff+in->textlen-1;
     
    335335    col = 0;
    336336    cnt = 0;
     337    padding = 0;
    337338    ptr_c = ptr_s;
    338339    while(col < bcol && ptr_c < ptr_e) {
    339340      gunichar c = g_utf8_get_char(ptr_c);
    340       if (g_unichar_iswide(c)) {
    341         if (col + 2 > bcol) break;
    342         else col += 2;
    343       }
    344       else if (g_unichar_type(c) == G_UNICODE_NON_SPACING_MARK) ; /*do nothing*/
    345       /* We may need more special cases here... unicode spacing is hard. */
    346       else {
    347         if (col + 1 > bcol) break;
    348         else ++col;
    349       }
     341      if (col + wcwidth(c) > bcol) break;
     342      col += wcwidth(c);
    350343      ptr_c = g_utf8_next_char(ptr_c);
    351       if (col >= acol) ++cnt;
    352       if (col <= acol) ptr_s = ptr_c;
    353     }
    354     _owl_fmtext_append_fmtext(out, in, ptr_s - in->textbuff, ptr_c - in->textbuff);
     344      if (col >= acol) {
     345        if (cnt == 0) {
     346          ptr_s = ptr_c;
     347          padding = col - acol;
     348        }
     349        ++cnt;
     350      }
     351    }
     352    if (cnt) {
     353      while(padding-- > 0) {
     354        owl_fmtext_append_normal(out, " ");
     355      }
     356      _owl_fmtext_append_fmtext(out, in, ptr_s - in->textbuff, ptr_c - in->textbuff);
     357    }
     358    else {
     359      owl_fmtext_append_normal(out, "\n");
     360    }
    355361    ptr_s=ptr_e+1;
    356    
     362     
    357363#if 0
    358364    /* we need to check that we won't run over here */
Note: See TracChangeset for help on using the changeset viewer.