X-Git-Url: http://www.wagner.pp.ru/gitweb/?p=oss%2Fcatdoc.git;a=blobdiff_plain;f=src%2Fwriter.c;h=5f95ba2fdb3659f09ba1fe8c24e3a508bf89c423;hp=5448d6c0b805d1e5b26e7e9f10081663eec42be3;hb=c83cd8895214b3d0a6481123a7f3f126bb9f0a06;hpb=6915b0b0946a5fe142f5a220c1e55c829335e623 diff --git a/src/writer.c b/src/writer.c index 5448d6c..5f95ba2 100644 --- a/src/writer.c +++ b/src/writer.c @@ -54,12 +54,18 @@ void out_char(const char *chunk) { } else if (bufpos>wrap_margin) { char *q=outputbuffer,*p=outputbuffer+wrap_margin; - while (p>outputbuffer&&!isspace(*p)) p--; + while (p>outputbuffer&&*p!=' '&& *p!='\t') p--; if (p==outputbuffer) { /*worst case - nowhere to wrap. Will use brute force */ - fwrite(outputbuffer,wrap_margin,1,stdout); + int i = wrap_margin; + if (from_unicode == to_utf8) { + /* go back to start of nearest utf-8 character */ + while(i>0 && (outputbuffer[i] & 0xC0) == 0x80) i--; + } + fwrite(outputbuffer,i,1,stdout); + fputc('\n',stdout); - p=outputbuffer+wrap_margin; + p=outputbuffer+i; } else { *p=0;p++; fputs(outputbuffer,stdout);