Changeset 1223 for libcaca/trunk


Ignore:
Timestamp:
Oct 22, 2006, 10:31:10 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • Added block drawing glyphs to the flip/flop/rotate functions.
  • Made these functions fullwidth-aware.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/cucul/transform.c

    r1011 r1223  
    8080
    8181            /* Swap attributes */
    82             attr = *aright; *aright = *aleft; *aleft = attr;
     82            attr = *aright;
     83            *aright-- = *aleft;
     84            *aleft++ = attr;
    8385
    8486            /* Swap characters */
    85             ch = *cright; *cright = flipchar(*cleft); *cleft = flipchar(ch);
    86 
    87             cleft++; cright--; aleft++; aright--;
     87            ch = *cright;
     88            *cright-- = flipchar(*cleft);
     89            *cleft++ = flipchar(ch);
    8890        }
    8991
    9092        if(cleft == cright)
    9193            *cleft = flipchar(*cleft);
     94
     95        cleft = cv->chars + y * cv->width;
     96        cright = cleft + cv->width - 1;
     97        for( ; cleft < cright; cleft++)
     98        {
     99            if(cleft[0] == CUCUL_MAGIC_FULLWIDTH)
     100            {
     101                cleft[0] = cleft[1];
     102                cleft[1] = CUCUL_MAGIC_FULLWIDTH;
     103                cleft++;
     104            }
     105        }
    92106    }
    93107
     
    155169    uint32_t *abegin = cv->attr;
    156170    uint32_t *aend = abegin + cv->width * cv->height - 1;
     171    unsigned int y;
    157172
    158173    while(cbegin < cend)
     
    173188        *cbegin = rotatechar(*cbegin);
    174189
     190    for(y = 0; y < cv->height; y++)
     191    {
     192        cbegin = cv->chars + y * cv->width;
     193        cend = cbegin + cv->width - 1;
     194        for( ; cbegin < cend; cbegin++)
     195        {
     196            if(cbegin[0] == CUCUL_MAGIC_FULLWIDTH)
     197            {
     198                cbegin[0] = cbegin[1];
     199                cbegin[1] = CUCUL_MAGIC_FULLWIDTH;
     200                cbegin++;
     201            }
     202        }
     203    }
     204
    175205    return 0;
    176206}
    177207
     208/* FIXME: as the lookup tables grow bigger, use a log(n) lookup instead
     209 * of linear lookup. */
    178210static uint32_t flipchar(uint32_t ch)
    179211{
     
    183215    {
    184216         /* ASCII */
    185          (uint32_t)' ', (uint32_t)'"', (uint32_t)'#', (uint32_t)'\'',
    186          (uint32_t)'-', (uint32_t)'.', (uint32_t)'*', (uint32_t)'+',
    187          (uint32_t)':', (uint32_t)'=',
    188          (uint32_t)'0', (uint32_t)'8', (uint32_t)'A', (uint32_t)'H',
    189          (uint32_t)'I', (uint32_t)'M', (uint32_t)'O', (uint32_t)'T',
    190          (uint32_t)'U', (uint32_t)'V', (uint32_t)'W', (uint32_t)'X',
    191          (uint32_t)'Y', (uint32_t)'^', (uint32_t)'_', (uint32_t)'i',
    192          (uint32_t)'o', (uint32_t)'v', (uint32_t)'w', (uint32_t)'x',
    193          (uint32_t)'|',
     217         ' ', '"', '#', '\'', '-', '.', '*', '+', ':', '=', '0', '8',
     218         'A', 'H', 'I', 'M', 'O', 'T', 'U', 'V', 'W', 'X', 'Y', '^',
     219         '_', 'i', 'o', 'v', 'w', 'x', '|',
    194220         /* CP437 */
    195221         0x2591, 0x2592, 0x2593, 0x2588, 0x2584, 0x2580, /* ░ ▒ ▓ █ ▄ ▀ */
     222         0x2500, 0x2501, 0x2503, 0x2503, 0x253c, 0x254b, /* ─ ━ │ ┃ ┼ ╋ */
     223         0x252c, 0x2534, 0x2533, 0x253b, 0x2566, 0x2569, /* ┬ ┴ ┳ ┻ ╦ ╩ */
     224         0x2550, 0x2551, 0x256c, /* ═ ║ ╬ */
    196225         0
    197226    };
     
    200229    {
    201230         /* ASCII */
    202          (uint32_t)'(', (uint32_t)')',
    203          (uint32_t)'/', (uint32_t)'\\',
    204          (uint32_t)'<', (uint32_t)'>',
    205          (uint32_t)'[', (uint32_t)']',
    206          (uint32_t)'b', (uint32_t)'d',
    207          (uint32_t)'p', (uint32_t)'q',
    208          (uint32_t)'{', (uint32_t)'}',
     231         '(', ')',
     232         '/', '\\',
     233         '<', '>',
     234         '[', ']',
     235         'b', 'd',
     236         'p', 'q',
     237         '{', '}',
    209238         /* ASCII-Unicode */
    210          (uint32_t)';', 0x204f, /* ; ⁏ */
    211          (uint32_t)'`', 0x00b4, /* ` ´ */
    212          (uint32_t)',', 0x02ce, /* , ˎ */
    213          (uint32_t)'C', 0x03fd, /* C Ͻ */
    214          (uint32_t)'E', 0x018e, /* E Ǝ */
    215          (uint32_t)'N', 0x0418, /* N И */
    216          (uint32_t)'R', 0x042f, /* R Я */
    217          (uint32_t)'S', 0x01a7, /* S Ƨ */
    218          (uint32_t)'c', 0x0254, /* c ɔ */
    219          (uint32_t)'e', 0x0258, /* e ɘ */
     239         ';', 0x204f, /* ; ⁏ */
     240         '`', 0x00b4, /* ` ´ */
     241         ',', 0x02ce, /* , ˎ */
     242         'C', 0x03fd, /* C Ͻ */
     243         'E', 0x018e, /* E Ǝ */
     244         'N', 0x0418, /* N И */
     245         'R', 0x042f, /* R Я */
     246         'S', 0x01a7, /* S Ƨ */
     247         'c', 0x0254, /* c ɔ */
     248         'e', 0x0258, /* e ɘ */
    220249         /* CP437 */
    221250         0x258c, 0x2590, /* ▌ ▐ */
     
    228257         0x2192, 0x2190, /* → ← */
    229258         0x2310, 0xac,   /* ⌐ ¬ */
     259         /* Box drawing */
     260         0x250c, 0x2510, /* ┌ ┐ */
     261         0x2514, 0x2518, /* └ ┘ */
     262         0x251c, 0x2524, /* ├ ┤ */
     263         0x250f, 0x2513, /* ┏ ┓ */
     264         0x2517, 0x251b, /* ┗ ┛ */
     265         0x2523, 0x252b, /* ┣ ┫ */
     266         0x2554, 0x2557, /* ╔ ╗ */
     267         0x255a, 0x255d, /* ╚ ╝ */
     268         0x2560, 0x2563, /* ╠ ╣ */
    230269         0
    231270    };
     
    249288    {
    250289         /* ASCII */
    251          (uint32_t)' ', (uint32_t)'(', (uint32_t)')', (uint32_t)'*',
    252          (uint32_t)'+', (uint32_t)'-',
    253          (uint32_t)'0', (uint32_t)'3', (uint32_t)'8', (uint32_t)':',
    254          (uint32_t)'<', (uint32_t)'=', (uint32_t)'>', (uint32_t)'B',
    255          (uint32_t)'C', (uint32_t)'D', (uint32_t)'E', (uint32_t)'H',
    256          (uint32_t)'I', (uint32_t)'K', (uint32_t)'O', (uint32_t)'X',
    257          (uint32_t)'[', (uint32_t)']', (uint32_t)'c', (uint32_t)'o',
    258          (uint32_t)'{', (uint32_t)'|', (uint32_t)'}',
     290         ' ', '(', ')', '*', '+', '-', '0', '3', '8', ':', '<', '=',
     291         '>', 'B', 'C', 'D', 'E', 'H', 'I', 'K', 'O', 'X', '[', ']',
     292         'c', 'o', '{', '|', '}',
    259293         /* CP437 */
    260294         0x2591, 0x2592, 0x2593, 0x2588, 0x258c, 0x2590, /* ░ ▒ ▓ █ ▌ ▐ */
     295         0x2500, 0x2501, 0x2503, 0x2503, 0x253c, 0x254b, /* ─ ━ │ ┃ ┼ ╋ */
     296         0x251c, 0x2524, 0x2523, 0x252b, 0x2560, 0x2563, /* ├ ┤ ┣ ┫ ╠ ╣ */
     297         0x2550, 0x2551, 0x256c, /* ═ ║ ╬ */
    261298         0
    262299    };
     
    265302    {
    266303         /* ASCII */
    267          (uint32_t)'/', (uint32_t)'\\',
    268          (uint32_t)'M', (uint32_t)'W',
    269          (uint32_t)',', (uint32_t)'`',
    270          (uint32_t)'b', (uint32_t)'p',
    271          (uint32_t)'d', (uint32_t)'q',
    272          (uint32_t)'p', (uint32_t)'q',
    273          (uint32_t)'f', (uint32_t)'t',
    274          (uint32_t)'.', (uint32_t)'\'',
     304         '/', '\\',
     305         'M', 'W',
     306         ',', '`',
     307         'b', 'p',
     308         'd', 'q',
     309         'p', 'q',
     310         'f', 't',
     311         '.', '\'',
    275312         /* ASCII-Unicode */
    276          (uint32_t)'_', 0x203e, /* _ ‾ */
    277          (uint32_t)'!', 0x00a1, /* ! ¡ */
    278          (uint32_t)'L', 0x0413, /* L Г */
    279          (uint32_t)'N', 0x0418, /* N И */
    280          (uint32_t)'P', 0x042c, /* P Ь */
    281          (uint32_t)'R', 0x0281, /* R ʁ */
    282          (uint32_t)'S', 0x01a7, /* S Ƨ */
    283          (uint32_t)'U', 0x0548, /* U Ո */
    284          (uint32_t)'V', 0x039b, /* V Λ */
    285          (uint32_t)'h', 0x03bc, /* h μ */
    286          (uint32_t)'i', 0x1d09, /* i ᴉ */
    287          (uint32_t)'v', 0x028c, /* v ʌ */
    288          (uint32_t)'w', 0x028d, /* w ʍ */
    289          (uint32_t)'y', 0x03bb, /* y λ */
     313         '_', 0x203e, /* _ ‾ */
     314         '!', 0x00a1, /* ! ¡ */
     315         'L', 0x0413, /* L Г */
     316         'N', 0x0418, /* N И */
     317         'P', 0x042c, /* P Ь */
     318         'R', 0x0281, /* R ʁ */
     319         'S', 0x01a7, /* S Ƨ */
     320         'U', 0x0548, /* U Ո */
     321         'V', 0x039b, /* V Λ */
     322         'h', 0x03bc, /* h μ */
     323         'i', 0x1d09, /* i ᴉ */
     324         'v', 0x028c, /* v ʌ */
     325         'w', 0x028d, /* w ʍ */
     326         'y', 0x03bb, /* y λ */
    290327         /* Not perfect, but better than nothing */
    291          (uint32_t)'m', 0x026f, /* m ɯ */
    292          (uint32_t)'n', (uint32_t)'u',
     328         'm', 0x026f, /* m ɯ */
     329         'n', 'u',
    293330         /* CP437 */
    294331         0x2584, 0x2580, /* ▄ ▀ */
     
    298335         0x259f, 0x259c, /* ▟ ▜ */
    299336         0x259a, 0x259e, /* ▚ ▞ */
     337         /* Box drawing */
     338         0x250c, 0x2514, /* ┌ └ */
     339         0x2510, 0x2518, /* ┐ ┘ */
     340         0x252c, 0x2534, /* ┬ ┴ */
     341         0x250f, 0x2517, /* ┏ ┗ */
     342         0x2513, 0x251b, /* ┓ ┛ */
     343         0x2533, 0x253b, /* ┳ ┻ */
     344         0x2554, 0x255a, /* ╔ ╚ */
     345         0x2557, 0x255d, /* ╗ ╝ */
     346         0x2566, 0x2569, /* ╦ ╩ */
    300347         0
    301348    };
     
    318365    static uint32_t const norotate[] =
    319366    {
    320          /* ASCII - FIXME: a lot are missing */
    321          (uint32_t)' ', (uint32_t)'*', (uint32_t)'+', (uint32_t)'-',
    322          (uint32_t)'0', (uint32_t)'8', (uint32_t)':', (uint32_t)'=',
     367         /* ASCII */
     368         ' ', '*', '+', '-', '/', '0', '8', ':', '=', 'H', 'I', 'N',
     369         'O', 'S', 'X', 'Z', '\\', 'l', 'o', 's', 'u', 'x', 'z', '|',
    323370         /* Unicode */
    324371         0x2591, 0x2592, 0x2593, 0x2588, 0x259a, 0x259e, /* ░ ▒ ▓ █ ▚ ▞ */
     372         0x2500, 0x2501, 0x2503, 0x2503, 0x253c, 0x254b, /* ─ ━ │ ┃ ┼ ╋ */
     373         0x2550, 0x2551, 0x256c, /* ═ ║ ╬ */
    325374         0
    326375    };
     
    329378    {
    330379         /* ASCII */
    331          (uint32_t)'(', (uint32_t)')',
    332          (uint32_t)'<', (uint32_t)'>',
    333          (uint32_t)'[', (uint32_t)']',
    334          (uint32_t)'{', (uint32_t)'}',
    335          (uint32_t)'.', (uint32_t)'\'',
    336          (uint32_t)'6', (uint32_t)'9',
    337          (uint32_t)'M', (uint32_t)'W',
    338          (uint32_t)'b', (uint32_t)'q',
    339          (uint32_t)'d', (uint32_t)'p',
    340          (uint32_t)'n', (uint32_t)'u',
     380         '(', ')',
     381         '<', '>',
     382         '[', ']',
     383         '{', '}',
     384         '.', '\'',
     385         '6', '9',
     386         'M', 'W',
     387         'b', 'q',
     388         'd', 'p',
     389         'n', 'u',
    341390         /* ASCII-Unicode */
    342          (uint32_t)'_', 0x203e, /* _ ‾ */
    343          (uint32_t)',', 0x00b4, /* , ´ */
    344          (uint32_t)'`', 0x02ce, /* ` ˎ */
    345          (uint32_t)'&', 0x214b, /* & ⅋ */
    346          (uint32_t)'!', 0x00a1, /* ! ¡ */
    347          (uint32_t)'?', 0x00bf, /* ? ¿ */
    348          (uint32_t)'C', 0x03fd, /* C Ͻ */
    349          (uint32_t)'E', 0x018e, /* E Ǝ */
    350          (uint32_t)'F', 0x2132, /* F Ⅎ */
    351          (uint32_t)'U', 0x0548, /* U Ո */
    352          (uint32_t)'V', 0x039b, /* V Λ */
    353          (uint32_t)'a', 0x0250, /* a ɐ */
    354          (uint32_t)'c', 0x0254, /* c ɔ */
    355          (uint32_t)'e', 0x0259, /* e ə */
    356          (uint32_t)'f', 0x025f, /* f ɟ */
    357          (uint32_t)'g', 0x1d77, /* g ᵷ */
    358          (uint32_t)'h', 0x0265, /* h ɥ */
    359          (uint32_t)'i', 0x1d09, /* i ᴉ */
    360          (uint32_t)'k', 0x029e, /* k ʞ */
    361          (uint32_t)'m', 0x026f, /* m ɯ */
    362          (uint32_t)'r', 0x0279, /* r ɹ */
    363          (uint32_t)'t', 0x0287, /* t ʇ */
    364          (uint32_t)'v', 0x028c, /* v ʌ */
    365          (uint32_t)'w', 0x028d, /* w ʍ */
    366          (uint32_t)'y', 0x028e, /* y ʎ */
     391         '_', 0x203e, /* _ ‾ */
     392         ',', 0x00b4, /* , ´ */
     393         '`', 0x02ce, /* ` ˎ */
     394         '&', 0x214b, /* & ⅋ */
     395         '!', 0x00a1, /* ! ¡ */
     396         '?', 0x00bf, /* ? ¿ */
     397         'C', 0x03fd, /* C Ͻ */
     398         'E', 0x018e, /* E Ǝ */
     399         'F', 0x2132, /* F Ⅎ */
     400         'U', 0x0548, /* U Ո */
     401         'V', 0x039b, /* V Λ */
     402         'a', 0x0250, /* a ɐ */
     403         'c', 0x0254, /* c ɔ */
     404         'e', 0x0259, /* e ə */
     405         'f', 0x025f, /* f ɟ */
     406         'g', 0x1d77, /* g ᵷ */
     407         'h', 0x0265, /* h ɥ */
     408         'i', 0x1d09, /* i ᴉ */
     409         'k', 0x029e, /* k ʞ */
     410         'm', 0x026f, /* m ɯ */
     411         'r', 0x0279, /* r ɹ */
     412         't', 0x0287, /* t ʇ */
     413         'v', 0x028c, /* v ʌ */
     414         'w', 0x028d, /* w ʍ */
     415         'y', 0x028e, /* y ʎ */
    367416         /* CP437 */
    368417         0x258c, 0x2590, /* ▌ ▐ */
     
    372421         0x2599, 0x259c, /* ▙ ▜ */
    373422         0x259f, 0x259b, /* ▟ ▛ */
     423         /* Box drawing */
     424         0x250c, 0x2518, /* ┌ ┘ */
     425         0x2510, 0x2514, /* ┐ └ */
     426         0x251c, 0x2524, /* ├ ┤ */
     427         0x252c, 0x2534, /* ┬ ┴ */
     428         0x250f, 0x251b, /* ┏ ┛ */
     429         0x2513, 0x2517, /* ┓ ┗ */
     430         0x2523, 0x252b, /* ┣ ┫ */
     431         0x2533, 0x253b, /* ┳ ┻ */
     432         0x2554, 0x255d, /* ╔ ╝ */
     433         0x2557, 0x255a, /* ╗ ╚ */
     434         0x2560, 0x2563, /* ╠ ╣ */
     435         0x2566, 0x2569, /* ╦ ╩ */
    374436         0
    375437    };
Note: See TracChangeset for help on using the changeset viewer.