Changeset 1773


Ignore:
Timestamp:
Jun 27, 2007, 4:39:47 PM (13 years ago)
Author:
Sam Hocevar
Message:
  • Implemented cucul_utf32_to_ascii() using code from Ben Wiley Sittler.
Location:
libcaca/trunk/cucul
Files:
2 edited

Legend:

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

    r1462 r1773  
    11/*
    22 *  libcucul      Canvas for ultrafast compositing of Unicode letters
    3  *  Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org>
     3 *  Copyright (c) 2002-2007 Sam Hocevar <sam@zoy.org>
     4 *                2007 Ben Wiley Sittler <bsittler@gmail.com>
    45 *                All Rights Reserved
    56 *
     
    237238}
    238239
     240/** \brief Convert a UTF-32 character to ASCII.
     241 *
     242 *  Convert a UTF-32 character into an ASCII character. When no equivalent
     243 *  exists, a graphically close equivalent is sought.
     244 *
     245 *  This function never fails, but its behaviour with illegal UTF-32 characters
     246 *  is undefined.
     247 *
     248 *  \param ch The UTF-32 character.
     249 *  \return The corresponding ASCII character, or a graphically close
     250 *  equivalent if found, or "?" if not representable.
     251 */
     252char cucul_utf32_to_ascii(unsigned long int ch)
     253{
     254    /* Standard ASCII */
     255    if(ch < 0x80)
     256        return ch;
     257
     258    /* Fullwidth Forms */
     259    if(ch > 0x0000ff00 && ch < 0x0000ff5f)
     260        return ' ' + (ch - 0x0000ff00);
     261
     262    switch (ch)
     263    {
     264    case 0x000000a0: /*   (nbsp) */
     265    case 0x00003000: /*   (ideographic space) */
     266        return ' ';
     267    case 0x000000a3: /* £ */
     268        return 'f';
     269    case 0x000000b0: /* ° */
     270        return '\'';
     271    case 0x000000b1: /* ± */
     272        return '#';
     273    case 0x000000b7: /* · */
     274    case 0x00002219: /* ∙ */
     275    case 0x000030fb: /* ・ */
     276        return '.';
     277    case 0x000003c0: /* π */
     278        return '*';
     279    case 0x00002018: /* ‘ */
     280    case 0x00002019: /* ’ */
     281        return '\'';
     282    case 0x0000201c: /* “ */
     283    case 0x0000201d: /* ” */
     284        return '"';
     285    case 0x00002190: /* ← */
     286        return '<';
     287    case 0x00002191: /* ↑ */
     288        return '^';
     289    case 0x00002192: /* → */
     290        return '>';
     291    case 0x00002193: /* ↓ */
     292        return 'v';
     293    case 0x00002260: /* ≠ */
     294        return '!';
     295    case 0x00002261: /* ≡ */
     296        return '=';
     297    case 0x00002264: /* ≤ */
     298        return '<';
     299    case 0x00002265: /* ≥ */
     300        return '>';
     301    case 0x000023ba: /* ⎺ */
     302    case 0x000023bb: /* ⎻ */
     303    case 0x000023bc: /* ⎼ */
     304    case 0x000023bd: /* ⎽ */
     305    case 0x00002500: /* ─ */
     306    case 0x00002550: /* ═ */
     307        return '-';
     308    case 0x00002502: /* │ */
     309    case 0x00002551: /* ║ */
     310        return '|';
     311    case 0x0000250c: /* ┌ */
     312    case 0x00002552: /* ╒ */
     313    case 0x00002553: /* ╓ */
     314    case 0x00002554: /* ╔ */
     315    case 0x00002514: /* └ */
     316    case 0x00002558: /* ╘ */
     317    case 0x00002559: /* ╙ */
     318    case 0x0000255a: /* ╚ */
     319    case 0x0000251c: /* ├ */
     320    case 0x0000255e: /* ╞ */
     321    case 0x0000255f: /* ╟ */
     322    case 0x00002560: /* ╠ */
     323    case 0x0000252c: /* ┬ */
     324    case 0x00002564: /* ╤ */
     325    case 0x00002565: /* ╥ */
     326    case 0x00002566: /* ╦ */
     327    case 0x00002534: /* ┴ */
     328    case 0x00002567: /* ╧ */
     329    case 0x00002568: /* ╨ */
     330    case 0x00002569: /* ╩ */
     331    case 0x0000253c: /* ┼ */
     332    case 0x0000256a: /* ╪ */
     333    case 0x0000256b: /* ╫ */
     334    case 0x0000256c: /* ╬ */
     335        return '+';
     336    case 0x00002510: /* ┐ */
     337    case 0x00002555: /* ╕ */
     338    case 0x00002556: /* ╖ */
     339    case 0x00002557: /* ╗ */
     340    case 0x00002518: /* ┘ */
     341    case 0x0000255b: /* ╛ */
     342    case 0x0000255c: /* ╜ */
     343    case 0x0000255d: /* ╝ */
     344    case 0x00002524: /* ┤ */
     345    case 0x00002561: /* ╡ */
     346    case 0x00002562: /* ╢ */
     347    case 0x00002563: /* ╣ */
     348        return '+';
     349    case 0x00002591: /* ░ */
     350    case 0x00002592: /* ▒ */
     351    case 0x00002593: /* ▓ */
     352    case 0x00002580: /* ▀ */
     353    case 0x00002584: /* ▄ */
     354    case 0x00002588: /* █ */
     355    case 0x0000258c: /* ▌ */
     356    case 0x00002590: /* ▐ */
     357    case 0x000025a0: /* ■ */
     358    case 0x000025ac: /* ▬ */
     359    case 0x000025ae: /* ▮ */
     360        return '#';
     361    case 0x000025c6: /* ◆ */
     362    case 0x00002666: /* ♦ */
     363        return '+';
     364    case 0x00002022: /* • */
     365    case 0x000025cb: /* ○ */
     366    case 0x000025cf: /* ● */
     367    case 0x00002603: /* ☃ */
     368    case 0x0000263c: /* ☼ */
     369        return 'o';
     370    case 0x0000301c: /* 〜 */
     371        return '~';
     372    }
     373
     374    return '?';
     375}
     376
    239377/** \brief Tell whether a UTF-32 character is fullwidth.
    240378 *
  • libcaca/trunk/cucul/cucul.h

    r1462 r1773  
    143143unsigned char cucul_utf32_to_cp437(unsigned long int);
    144144unsigned long int cucul_cp437_to_utf32(unsigned char);
     145char cucul_utf32_to_ascii(unsigned long int);
    145146int cucul_utf32_is_fullwidth(unsigned long int);
    146147/*  @} */
Note: See TracChangeset for help on using the changeset viewer.