image/svg+xml
Brteve's API for EveApps
Version 0.0.1
The reference document for common folder of EveApps project.
 
Loading...
Searching...
No Matches
ffunicode.c File Reference
#include "ff.h"

Go to the source code of this file.

Macros

#define MERGE2(a, b)   a ## b
 
#define CVTBL(tbl, cp)   MERGE2(tbl, cp)
 

Functions

WCHAR ff_uni2oem (DWORD uni, WORD cp)
 
WCHAR ff_oem2uni (WCHAR oem, WORD cp)
 
DWORD ff_wtoupper (DWORD uni)
 

Variables

static const WCHAR uc437 []
 

Macro Definition Documentation

◆ CVTBL

#define CVTBL (   tbl,
  cp 
)    MERGE2(tbl, cp)

Definition at line 31 of file ffunicode.c.

◆ MERGE2

#define MERGE2 (   a,
  b 
)    a ## b

Definition at line 30 of file ffunicode.c.

Function Documentation

◆ ff_oem2uni()

WCHAR ff_oem2uni ( WCHAR  oem,
WORD  cp 
)

Definition at line 15244 of file ffunicode.c.

15248{
15249 WCHAR c = 0;
15250 const WCHAR *p = CVTBL(uc, FF_CODE_PAGE);
15251
15252
15253 if (oem < 0x80) { /* ASCII? */
15254 c = oem;
15255
15256 } else { /* Extended char */
15257 if (cp == FF_CODE_PAGE) { /* Is it a valid code page? */
15258 if (oem < 0x100) c = p[oem - 0x80];
15259 }
15260 }
15261
15262 return c;
15263}
static uint32_t c
Definition Common.c:38
WORD WCHAR
Definition ff.h:62
#define FF_CODE_PAGE
Definition ffconf.h:90
#define CVTBL(tbl, cp)
Definition ffunicode.c:31

◆ ff_uni2oem()

WCHAR ff_uni2oem ( DWORD  uni,
WORD  cp 
)

Definition at line 15222 of file ffunicode.c.

15226{
15227 WCHAR c = 0;
15228 const WCHAR *p = CVTBL(uc, FF_CODE_PAGE);
15229
15230
15231 if (uni < 0x80) { /* ASCII? */
15232 c = (WCHAR)uni;
15233
15234 } else { /* Non-ASCII */
15235 if (uni < 0x10000 && cp == FF_CODE_PAGE) { /* Is it in BMP and valid code page? */
15236 for (c = 0; c < 0x80 && uni != p[c]; c++) ;
15237 c = (c + 0x80) & 0xFF;
15238 }
15239 }
15240
15241 return c;
15242}

◆ ff_wtoupper()

DWORD ff_wtoupper ( DWORD  uni)

Definition at line 15464 of file ffunicode.c.

15467{
15468 const WORD *p;
15469 WORD uc, bc, nc, cmd;
15470 static const WORD cvt1[] = { /* Compressed up conversion table for U+0000 - U+0FFF */
15471 /* Basic Latin */
15472 0x0061,0x031A,
15473 /* Latin-1 Supplement */
15474 0x00E0,0x0317,
15475 0x00F8,0x0307,
15476 0x00FF,0x0001,0x0178,
15477 /* Latin Extended-A */
15478 0x0100,0x0130,
15479 0x0132,0x0106,
15480 0x0139,0x0110,
15481 0x014A,0x012E,
15482 0x0179,0x0106,
15483 /* Latin Extended-B */
15484 0x0180,0x004D,0x0243,0x0181,0x0182,0x0182,0x0184,0x0184,0x0186,0x0187,0x0187,0x0189,0x018A,0x018B,0x018B,0x018D,0x018E,0x018F,0x0190,0x0191,0x0191,0x0193,0x0194,0x01F6,0x0196,0x0197,0x0198,0x0198,0x023D,0x019B,0x019C,0x019D,0x0220,0x019F,0x01A0,0x01A0,0x01A2,0x01A2,0x01A4,0x01A4,0x01A6,0x01A7,0x01A7,0x01A9,0x01AA,0x01AB,0x01AC,0x01AC,0x01AE,0x01AF,0x01AF,0x01B1,0x01B2,0x01B3,0x01B3,0x01B5,0x01B5,0x01B7,0x01B8,0x01B8,0x01BA,0x01BB,0x01BC,0x01BC,0x01BE,0x01F7,0x01C0,0x01C1,0x01C2,0x01C3,0x01C4,0x01C5,0x01C4,0x01C7,0x01C8,0x01C7,0x01CA,0x01CB,0x01CA,
15485 0x01CD,0x0110,
15486 0x01DD,0x0001,0x018E,
15487 0x01DE,0x0112,
15488 0x01F3,0x0003,0x01F1,0x01F4,0x01F4,
15489 0x01F8,0x0128,
15490 0x0222,0x0112,
15491 0x023A,0x0009,0x2C65,0x023B,0x023B,0x023D,0x2C66,0x023F,0x0240,0x0241,0x0241,
15492 0x0246,0x010A,
15493 /* IPA Extensions */
15494 0x0253,0x0040,0x0181,0x0186,0x0255,0x0189,0x018A,0x0258,0x018F,0x025A,0x0190,0x025C,0x025D,0x025E,0x025F,0x0193,0x0261,0x0262,0x0194,0x0264,0x0265,0x0266,0x0267,0x0197,0x0196,0x026A,0x2C62,0x026C,0x026D,0x026E,0x019C,0x0270,0x0271,0x019D,0x0273,0x0274,0x019F,0x0276,0x0277,0x0278,0x0279,0x027A,0x027B,0x027C,0x2C64,0x027E,0x027F,0x01A6,0x0281,0x0282,0x01A9,0x0284,0x0285,0x0286,0x0287,0x01AE,0x0244,0x01B1,0x01B2,0x0245,0x028D,0x028E,0x028F,0x0290,0x0291,0x01B7,
15495 /* Greek, Coptic */
15496 0x037B,0x0003,0x03FD,0x03FE,0x03FF,
15497 0x03AC,0x0004,0x0386,0x0388,0x0389,0x038A,
15498 0x03B1,0x0311,
15499 0x03C2,0x0002,0x03A3,0x03A3,
15500 0x03C4,0x0308,
15501 0x03CC,0x0003,0x038C,0x038E,0x038F,
15502 0x03D8,0x0118,
15503 0x03F2,0x000A,0x03F9,0x03F3,0x03F4,0x03F5,0x03F6,0x03F7,0x03F7,0x03F9,0x03FA,0x03FA,
15504 /* Cyrillic */
15505 0x0430,0x0320,
15506 0x0450,0x0710,
15507 0x0460,0x0122,
15508 0x048A,0x0136,
15509 0x04C1,0x010E,
15510 0x04CF,0x0001,0x04C0,
15511 0x04D0,0x0144,
15512 /* Armenian */
15513 0x0561,0x0426,
15514
15515 0x0000 /* EOT */
15516 };
15517 static const WORD cvt2[] = { /* Compressed up conversion table for U+1000 - U+FFFF */
15518 /* Phonetic Extensions */
15519 0x1D7D,0x0001,0x2C63,
15520 /* Latin Extended Additional */
15521 0x1E00,0x0196,
15522 0x1EA0,0x015A,
15523 /* Greek Extended */
15524 0x1F00,0x0608,
15525 0x1F10,0x0606,
15526 0x1F20,0x0608,
15527 0x1F30,0x0608,
15528 0x1F40,0x0606,
15529 0x1F51,0x0007,0x1F59,0x1F52,0x1F5B,0x1F54,0x1F5D,0x1F56,0x1F5F,
15530 0x1F60,0x0608,
15531 0x1F70,0x000E,0x1FBA,0x1FBB,0x1FC8,0x1FC9,0x1FCA,0x1FCB,0x1FDA,0x1FDB,0x1FF8,0x1FF9,0x1FEA,0x1FEB,0x1FFA,0x1FFB,
15532 0x1F80,0x0608,
15533 0x1F90,0x0608,
15534 0x1FA0,0x0608,
15535 0x1FB0,0x0004,0x1FB8,0x1FB9,0x1FB2,0x1FBC,
15536 0x1FCC,0x0001,0x1FC3,
15537 0x1FD0,0x0602,
15538 0x1FE0,0x0602,
15539 0x1FE5,0x0001,0x1FEC,
15540 0x1FF3,0x0001,0x1FFC,
15541 /* Letterlike Symbols */
15542 0x214E,0x0001,0x2132,
15543 /* Number forms */
15544 0x2170,0x0210,
15545 0x2184,0x0001,0x2183,
15546 /* Enclosed Alphanumerics */
15547 0x24D0,0x051A,
15548 0x2C30,0x042F,
15549 /* Latin Extended-C */
15550 0x2C60,0x0102,
15551 0x2C67,0x0106, 0x2C75,0x0102,
15552 /* Coptic */
15553 0x2C80,0x0164,
15554 /* Georgian Supplement */
15555 0x2D00,0x0826,
15556 /* Full-width */
15557 0xFF41,0x031A,
15558
15559 0x0000 /* EOT */
15560 };
15561
15562
15563 if (uni < 0x10000) { /* Is it in BMP? */
15564 uc = (WORD)uni;
15565 p = uc < 0x1000 ? cvt1 : cvt2;
15566 for (;;) {
15567 bc = *p++; /* Get the block base */
15568 if (bc == 0 || uc < bc) break; /* Not matched? */
15569 nc = *p++; cmd = nc >> 8; nc &= 0xFF; /* Get processing command and block size */
15570 if (uc < bc + nc) { /* In the block? */
15571 switch (cmd) {
15572 case 0: uc = p[uc - bc]; break; /* Table conversion */
15573 case 1: uc -= (uc - bc) & 1; break; /* Case pairs */
15574 case 2: uc -= 16; break; /* Shift -16 */
15575 case 3: uc -= 32; break; /* Shift -32 */
15576 case 4: uc -= 48; break; /* Shift -48 */
15577 case 5: uc -= 26; break; /* Shift -26 */
15578 case 6: uc += 8; break; /* Shift +8 */
15579 case 7: uc -= 80; break; /* Shift -80 */
15580 case 8: uc -= 0x1C60; break; /* Shift -0x1C60 */
15581 }
15582 break;
15583 }
15584 if (cmd == 0) p += nc; /* Skip table if needed */
15585 }
15586 uni = uc;
15587 }
15588
15589 return uni;
15590}
static ft_void_t ft_uint32_t * cmd
Definition FT_Gpu_Hal.h:184
unsigned short WORD
Definition ff.h:60

Variable Documentation

◆ uc437

const WCHAR uc437[]
static
Initial value:
= {
0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
}

Definition at line 15009 of file ffunicode.c.

15009 { /* CP437(U.S.) to Unicode conversion table */
15010 0x00C7, 0x00FC, 0x00E9, 0x00E2, 0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF, 0x00EE, 0x00EC, 0x00C4, 0x00C5,
15011 0x00C9, 0x00E6, 0x00C6, 0x00F4, 0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2, 0x00A3, 0x00A5, 0x20A7, 0x0192,
15012 0x00E1, 0x00ED, 0x00F3, 0x00FA, 0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD, 0x00BC, 0x00A1, 0x00AB, 0x00BB,
15013 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510,
15014 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567,
15015 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580,
15016 0x03B1, 0x00DF, 0x0393, 0x03C0, 0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4, 0x221E, 0x03C6, 0x03B5, 0x2229,
15017 0x2261, 0x00B1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x207F, 0x00B2, 0x25A0, 0x00A0
15018};