summaryrefslogtreecommitdiffstats
path: root/Modules/cjkcodecs/alg_iso8859_7.h
blob: 3eb4a31d74d23249769eae4b0660a51d0673b14e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*
 * alg_iso8859_7.c: Encoder/Decoder macro for ISO8859-7
 *
 * Written by Hye-Shik Chang <perky@FreeBSD.org>
 * $CJKCodecs: alg_iso8859_7.h,v 1.2 2003/12/31 05:46:55 perky Exp $
 */

/*
 * 0x2888fbc9 and 0xbffffd77 are magic number that indicates availability
 * of mapping for each differences. (0 and 0x2d0)
 */

#define ISO8859_7_ENCODE(c, assi)                               \
    if ((c) <= 0xa0) (assi) = (c);                              \
    else if ((c) < 0xc0 && (0x288f3bc9L & (1L << ((c)-0xa0))))  \
        (assi) = (c);                                           \
    else if ((c) >= 0x0384 && (c) <= 0x03ce && ((c) >= 0x03a4 ||\
             (0xbffffd77L & (1L << ((c)-0x0384)))))             \
        (assi) = (c) - 0x02d0;                                  \
    else if ((c)>>1 == 0x2018>>1) (assi) = (c) - 0x1f77;        \
    else if ((c) == 0x2015) (assi) = 0xaf;

#define ISO8859_7_DECODE(c, assi)                               \
    if ((c) < 0xa0) (assi) = (c);                               \
    else if ((c) < 0xc0 && (0x288f3bc9L & (1L << ((c)-0xa0))))  \
        (assi) = (c);                                           \
    else if ((c) >= 0xb4 && (c) <= 0xfe && ((c) >= 0xd4 ||      \
             (0xbffffd77L & (1L << ((c)-0xb4)))))               \
        (assi) = 0x02d0 + (c);                                  \
    else if ((c) == 0xa1) (assi) = 0x2018;                      \
    else if ((c) == 0xa2) (assi) = 0x2019;                      \
    else if ((c) == 0xaf) (assi) = 0x2015;