prepare for release
[alioth/jupp.git] / utf8.h
1 /*
2  *      UTF-8 Utilities
3  *      Copyright
4  *              (C) 2004 Joseph H. Allen
5  *
6  *      This file is part of JOE (Joe's Own Editor)
7  */
8 #ifndef JUPP_UTF8_H
9 #define JUPP_UTF8_H
10
11 #ifdef EXTERN
12 __IDSTRING(rcsid_utf8_h, "$MirOS: contrib/code/jupp/utf8.h,v 1.12 2020/03/27 06:39:00 tg Exp $");
13 #endif
14
15 #include "i18n.h"
16
17 /* UTF-8 Encoder
18  *
19  * c is a UCS character.
20  * buf is 7 byte buffer- utf-8 coded character is written to this followed by a 0 termination.
21  * returns length (not including terminator).
22  */
23
24 int utf8_encode(unsigned char *buf,int c);
25
26 /* UTF-8 decoder state machine */
27
28 struct utf8_sm {
29         unsigned char buf[8];   /* Record of sequence */
30         int ptr;                /* Record pointer */
31         int state;              /* Current state.  0 = idle, anything else is no. of chars left in sequence */
32         int accu;               /* Character accumulator */
33         int minv;               /* Minimum value, for decoder */
34 };
35
36 /* UTF-8 Decoder
37  *
38  * Returns 0 - 7FFFFFFF: decoded character
39  *                   -1: character accepted, nothing decoded yet.
40  *                   -2: incomplete sequence
41  *                   -3: no sequence started, but character is between 128 - 191, 254 or 255
42  */
43
44 int utf8_decode(struct utf8_sm *utf8_sm,unsigned char c);
45
46 int utf8_decode_string(unsigned char *s);
47
48 int utf8_decode_fwrd(unsigned char **p,int *plen);
49
50 /* Initialize state machine */
51
52 void utf8_init(struct utf8_sm *utf8_sm);
53
54 void joe_locale(void);
55 void to_utf8(union charmap *map, unsigned char *s, int c);
56 int from_utf8(union charmap *map, unsigned char *s);
57
58 extern int utf8;
59
60 int mk_wcwidth(int wide,int c);
61
62 /* default charmap of terminal */
63 extern union charmap *locale_map;
64 /* charmap for UTF-8 */
65 extern union charmap *utf8_map;
66
67 #endif