Display single column Unicode characters in one column.
[nvi.git] / common / conv.h
blob76b11c21a84520754b13f2599d2ba5956f027a83
1 #define F_GB 'A'
3 #define INT9494(f,r,c) ((f) << 16) | ((r) << 8) | (c)
4 #define INTIS9494(c) !!(((c) >> 16) & 0x7F)
5 #define INTISUCS(c) ((c & ~0x7F) && !(((c) >> 16) & 0x7F))
6 #define INTUCS(c) (c)
7 #define INT9494F(c) ((c) >> 16) & 0x7F
8 #define INT9494R(c) ((c) >> 8) & 0x7F
9 #define INT9494C(c) (c) & 0x7F
10 #define INTILL(c) (1 << 23) | (c)
11 #ifdef USE_WIDECHAR
12 #define INTISWIDE(c) (!!(c >> 8))
13 #define CHAR_WIDTH(sp, ch) \
14 (INTISUCS(ch) && ucswidth(ch) > 0 ? ucswidth(ch) : INTISWIDE(ch) ? 2 : 1)
15 #else
16 #define INTISWIDE(c) 0
17 #define CHAR_WIDTH(sp, ch) 1
18 #endif
20 #define KEY_COL(sp, ch) \
21 (INTISWIDE(ch) ? CHAR_WIDTH(sp, ch) : KEY_LEN(sp,ch))
23 struct _conv {
24 void *buffer;
25 size_t size;
27 int (*char2int) (struct _conv*, const char *, ssize_t, CHAR_T **, size_t *, size_t *);
28 int (*int2char) (struct _conv*, const CHAR_T *, ssize_t, char **, size_t *, size_t *);
29 int (*file2int) (struct _conv*, const char *, ssize_t, CHAR_T **, size_t *, size_t *);
30 int (*int2file) (struct _conv*, const CHAR_T *, ssize_t, char **, size_t *, size_t *);
31 int (*int2disp) (struct _conv*, const CHAR_T *, ssize_t, char **, size_t *, size_t *);