1 #ifndef NF16CHECK_H
2 #define NF16CHECK_H
3 
4 /* Copyright 2003 Martin J. Du"rst, W3C; for details, see
5  * http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231
6  */
7 
8 /* Normalization checking for UTF-16 */
9 /* Supports full normalization according to W3C Character Model */
10 
11 
12 #ifndef CHARSET_H
13 /*  If we're being included in an RXP .c file, this will already
14     have been typedef'd in charset.h. */
15 typedef unsigned short char16;
16 #endif
17 
18 typedef enum nf16start {
19     NF16Start,     /* check including start condition */
20     NF16noStart,   /* don't check start condition */
21     NF16continue,  /* continue checking */
22     NF16error      /* error, wait for next start */
23 } nf16start;
24 
25 typedef struct nf16checker {
26     unsigned int starter;       /* starter of a run that may be combined */
27     int          starterflag;   /* declared as int to not expose NF16data.h */
28     nf16start    startP;        /* start/continue/error condition */
29     int          lastclass;     /* combining class */
30     unsigned int high;          /* high surrogate not yet analyzed */
31     int          exists;        /* 1: check that character exists; 0: don't check */
32 } *NF16Checker;
33 
34 
35 typedef enum nf16result {
36     NF16wrong,
37     NF16okay
38 } nf16res;
39 
40 /* create one per thread/entity/whatever */
41 NF16Checker nf16checkNew (int exists);
42 
43 void nf16checkDelete (NF16Checker checker);
44 
45 /* set start state */
46 void nf16checkStart   (NF16Checker checker);
47 void nf16checkNoStart (NF16Checker checker);
48 
49 /* change checking of existing characters */
50 void nf16checkExists (NF16Checker checker, int exists);
51 
52 /* general check function, s is null-delimited */
53 nf16res nf16check (NF16Checker checker, char16* s);
54 
55 /* variant of nf16check, s_length gives length of s */
56 nf16res nf16checkL (NF16Checker checker, char16* s, int s_length);
57 
58 #endif /* NF16CHECK_H */
59