Changeset 1385 for toilet


Ignore:
Timestamp:
Nov 13, 2006, 2:02:05 AM (13 years ago)
Author:
Sam Hocevar
Message:
  • Support for ANSI escape codes in the input:

http://zoy.org/~sam/toilet-ansi.png
http://zoy.org/~sam/toilet-ansi2.png

  • Empty lines are currently broken.
Location:
toilet/trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • toilet/trunk/src/figlet.c

    r1376 r1385  
    3333#define EXT_GLYPHS (STD_GLYPHS + 7)
    3434
    35 static int feed_figlet(context_t *, uint32_t);
     35static int feed_figlet(context_t *, uint32_t, uint32_t);
    3636static int flush_figlet(context_t *);
    3737static int end_figlet(context_t *);
     
    5151}
    5252
    53 static int feed_figlet(context_t *cx, uint32_t ch)
     53static int feed_figlet(context_t *cx, uint32_t ch, uint32_t attr)
    5454{
    5555    unsigned int c, w, h, x, y;
     
    9191        cx->h = cx->y + h;
    9292
     93    if(attr)
     94        cucul_set_attr(cx->cv, attr);
    9395    cucul_set_canvas_size(cx->cv, cx->w, cx->h);
    9496
     
    9799        for(x = 0; x < w; x++)
    98100    {
    99         uint32_t tmp = cucul_get_char(cx->image, x, y + c * cx->height);
    100         cucul_put_char(cx->cv, cx->x + x, cx->y + y, tmp);
     101        uint32_t tmpch = cucul_get_char(cx->image, x, y + c * cx->height);
     102        //uint32_t tmpat = cucul_get_attr(cx->image, x, y + c * cx->height);
     103        /* FIXME: this could be changed to cucul_put_attr() when the
     104         * function is fixed in libcucul */
     105        //cucul_set_attr(cx->cv, tmpat);
     106        cucul_put_char(cx->cv, cx->x + x, cx->y + y, tmpch);
     107        //cucul_put_attr(cx->cv, cx->x + x, cx->y + y, tmpat);
    101108    }
    102109
  • toilet/trunk/src/render.c

    r1376 r1385  
    4747int render_stdin(context_t *cx)
    4848{
    49     char buf[10];
    50     unsigned int i = 0, len;
    51     uint32_t ch;
     49    cucul_canvas_t *cv;
     50    char *line;
     51    unsigned int i, len;
     52
     53    /* FIXME: we can't read longer lines */
     54    len = 1024;
     55    line = malloc(len);
     56    cv = cucul_create_canvas(0, 0);
    5257
    5358    /* Read from stdin */
    5459    while(!feof(stdin))
    5560    {
    56         buf[i++] = getchar();
    57         buf[i] = '\0';
     61        if(!fgets(line, len, stdin))
     62            break;
    5863
    59         ch = cucul_utf8_to_utf32(buf, &len);
     64        cucul_set_canvas_size(cv, 0, 0);
     65        cucul_import_memory(cv, line, strlen(line), "utf8");
     66        for(i = 0; i < cucul_get_canvas_width(cv); i++)
     67        {
     68            uint32_t ch = cucul_get_char(cv, i, 0);
     69            uint32_t at = cucul_get_attr(cv, i, 0);
     70            cx->feed(cx, ch, at);
     71            if(cucul_utf32_is_fullwidth(ch)) i++;
     72        }
    6073
    61         if(!len)
    62             continue;
     74        render_flush(cx);
     75    }
    6376
    64         cx->feed(cx, ch);
    65         i = 0;
    66 
    67         if(ch == '\n')
    68             render_flush(cx);
    69     }
     77    free(line);
    7078
    7179    return 0;
     
    7482int render_list(context_t *cx, unsigned int argc, char *argv[])
    7583{
    76     unsigned int i, j;
     84    cucul_canvas_t *cv;
     85    unsigned int i, j, len;
     86    char *parser = NULL;
    7787
    78     for(i = 0; i < argc; i++)
     88    cv = cucul_create_canvas(0, 0);
     89
     90    for(j = 0; j < argc; )
    7991    {
    80         /* Read from commandline */
    81         unsigned int len;
     92        char *cr;
    8293
    83         if(i)
    84             cx->feed(cx, ' ');
     94        if(!parser)
     95        {
     96            if(j)
     97                cx->feed(cx, ' ', 0);
     98            parser = argv[j];
     99        }
    85100
    86         for(j = 0; argv[i][j];)
     101        cr = strchr(parser, '\n');
     102        if(cr)
     103            len = (cr - parser) + 1;
     104        else
     105            len = strlen(parser);
     106
     107        cucul_set_canvas_size(cv, 0, 0);
     108        cucul_import_memory(cv, parser, len, "utf8");
     109        for(i = 0; i < cucul_get_canvas_width(cv); i++)
    87110        {
    88             cx->feed(cx, cucul_utf8_to_utf32(argv[i] + j, &len));
    89             j += len;
     111            uint32_t ch = cucul_get_char(cv, i, 0);
     112            uint32_t at = cucul_get_attr(cv, i, 0);
     113            cx->feed(cx, ch, at);
     114            if(cucul_utf32_is_fullwidth(ch)) i++;
     115        }
     116
     117        if(cr)
     118        {
     119            parser += len;
     120            render_flush(cx);
     121        }
     122        else
     123        {
     124            parser = NULL;
     125            j++;
    90126        }
    91127    }
  • toilet/trunk/src/term.c

    r1376 r1385  
    2727#include "render.h"
    2828
    29 static int feed_tiny(context_t *, uint32_t);
     29static int feed_tiny(context_t *, uint32_t, uint32_t);
    3030static int flush_tiny(context_t *);
    3131static int end_tiny(context_t *);
     
    4343}
    4444
    45 static int feed_tiny(context_t *cx, uint32_t ch)
     45static int feed_tiny(context_t *cx, uint32_t ch, uint32_t attr)
    4646{
    4747    switch(ch)
     
    8080    }
    8181
     82    cucul_set_attr(cx->cv, attr);
    8283    cucul_set_canvas_size(cx->cv, cx->ew, cx->eh);
    8384
  • toilet/trunk/src/toilet.h

    r1243 r1385  
    2929
    3030    /* Render methods */
    31     int (*feed)(struct toilet_context *, uint32_t);
     31    int (*feed)(struct toilet_context *, uint32_t, uint32_t);
    3232    int (*flush)(struct toilet_context *);
    3333    int (*end)(struct toilet_context *);
Note: See TracChangeset for help on using the changeset viewer.