handle with variables
[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 _Iutf8
9 #define _Iutf8 1
10
11 #ifdef EXTERN
12 __IDSTRING(rcsid_utf8_h, "$MirOS: contrib/code/jupp/utf8.h,v 1.6 2017/12/02 17:00:52 tg Exp $");
13 #endif
14
15 #include "i18n.h"
16
17 /* UTF-8 Encoder
18  *
19  * c is unicode 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 PARAMS((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 };
34
35 /* UTF-8 Decoder
36  *
37  * Returns 0 - 7FFFFFFF: decoded character
38  *                   -1: character accepted, nothing decoded yet.
39  *                   -2: incomplete sequence
40  *                   -3: no sequence started, but character is between 128 - 191, 254 or 255
41  */
42
43 int utf8_decode PARAMS((struct utf8_sm *utf8_sm,unsigned char c));
44
45 int utf8_decode_string PARAMS((unsigned char *s));
46
47 int utf8_decode_fwrd PARAMS((unsigned char **p,int *plen));
48
49 /* Initialize state machine */
50
51 void utf8_init PARAMS((struct utf8_sm *utf8_sm));
52
53 void joe_locale();
54 void to_utf8 PARAMS((struct charmap *map,unsigned char *s,int c));
55 int from_utf8 PARAMS((struct charmap *map,unsigned char *s));
56
57 extern int utf8;
58
59 int mk_wcwidth PARAMS((int wide,int c));
60
61 extern struct charmap *locale_map;      /* Default bytemap of terminal */
62 extern struct charmap *utf8_map;        /* Bytemap for UTF-8 */
63
64 #endif