Ignore:
Timestamp:
Mar 8, 2006, 11:29:00 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Make output drivers more error resilient when handling UTF-32 characters, by simply ignoring everything non ASCII :-)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_x11.c

    r553 r557  
    272272    for(y = 0; y < kk->qq->height; y++)
    273273    {
     274        unsigned int yoff = (y + 1) * kk->drv.p->font_height
     275                                    - kk->drv.p->font_offset;
     276
    274277        for(x = 0; x < kk->qq->width; x += len)
    275278        {
     
    281284
    282285            /* Skip spaces */
    283             if(chars[0] == ' ')
     286            if(chars[0] <= 0x00000020 || chars[0] >= 0x00000080)
    284287                continue;
    285288
    286             buffer[0] = chars[0] & 0x7f;
     289            buffer[0] = (char)chars[0];
    287290
    288291            while(x + len < kk->qq->width
    289292                   && (attr[len] & 0xf) == (attr[0] & 0xf))
    290293            {
    291                 buffer[len] = chars[len] & 0x7f;
     294                if(chars[len] > 0x00000020 && chars[len] < 0x00000080)
     295                    buffer[len] = (char)chars[len];
     296                else
     297                    buffer[len] = ' ';
    292298                len++;
    293299            }
    294300
    295             XSetForeground(kk->drv.p->dpy, kk->drv.p->gc, kk->drv.p->colors[attr[0] & 0xf]);
     301            XSetForeground(kk->drv.p->dpy, kk->drv.p->gc,
     302                           kk->drv.p->colors[attr[0] & 0xf]);
    296303            XDrawString(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->gc,
    297                         x * kk->drv.p->font_width,
    298                         (y + 1) * kk->drv.p->font_height - kk->drv.p->font_offset,
    299                         buffer, len);
    300         }
    301     }
    302 
    303     XCopyArea(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->window, kk->drv.p->gc, 0, 0,
     304                        x * kk->drv.p->font_width, yoff, buffer, len);
     305        }
     306    }
     307
     308    XCopyArea(kk->drv.p->dpy, kk->drv.p->pixmap, kk->drv.p->window,
     309              kk->drv.p->gc, 0, 0,
    304310              kk->qq->width * kk->drv.p->font_width,
    305311              kk->qq->height * kk->drv.p->font_height,
Note: See TracChangeset for help on using the changeset viewer.