ref: 720967f9849b63881ee705ab597975db1e628b33
parent: ee4ddd77f70132904f3c9cedb38540b336c68f70
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Mon Jan 6 21:24:16 EST 2014
libframe: fix _frcanfit() for zero width runes, simplify chopframe()
--- a/sys/src/libframe/frinsert.c
+++ b/sys/src/libframe/frinsert.c
@@ -78,11 +78,10 @@
void
chopframe(Frame *f, Point pt, ulong p, int bn)
{
- Frbox *b;
+ Frbox *b, *eb;
- for(b = &f->box[bn]; ; b++){
- if(b >= &f->box[f->nbox])
- drawerror(f->display, "endofframe");
+ eb = &f->box[f->nbox];
+ for(b = &f->box[bn]; b < eb; b++){
_frcklinewrap(f, &pt, b);
if(pt.y >= f->r.max.y)
break;
@@ -91,7 +90,7 @@
}
f->nchars = p;
f->nlines = f->maxlines;
- if(b<&f->box[f->nbox]) /* BUG */
+ if(b < eb) /* BUG */
_frdelbox(f, (int)(b-f->box), f->nbox-1);
}
--- a/sys/src/libframe/frutil.c
+++ b/sys/src/libframe/frutil.c
@@ -25,10 +25,9 @@
w = chartorune(&r, (char*)p);
left -= stringnwidth(f->font, (char*)p, 1);
if(left < 0)
- return nr;
+ break;
}
- drawerror(f->display, "_frcanfit can't");
- return 0;
+ return nr;
}
void
--
⑨