constructor and destructor wrappers for ICU transliterator services added
[pazpar2-moved-to-github.git] / src / icu_I18N.h
1 /* $Id: icu_I18N.h,v 1.10 2007-05-11 09:35:50 marc Exp $
2    Copyright (c) 2006-2007, Index Data.
3
4    This file is part of Pazpar2.
5
6    Pazpar2 is free software; you can redistribute it and/or modify it under
7    the terms of the GNU General Public License as published by the Free
8    Software Foundation; either version 2, or (at your option) any later
9    version.
10
11    Pazpar2 is distributed in the hope that it will be useful, but WITHOUT ANY
12    WARRANTY; without even the implied warranty of MERCHANTABILITY or
13    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14    for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with Pazpar2; see the file LICENSE.  If not, write to the
18    Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
19    02111-1307, USA.
20 */
21
22 #ifndef ICU_I18NL_H
23 #define ICU_I18NL_H
24
25 #ifdef HAVE_ICU
26
27 #include <yaz/nmem.h>
28
29
30 #include <unicode/utypes.h>   /* Basic ICU data types */
31 #include <unicode/uchar.h>    /* char names           */
32
33 //#include <unicode/ustdio.h>
34 #include <unicode/ucol.h> 
35 //#include <unicode/ucnv.h>     /* C   Converter API    */
36 //#include <unicode/ustring.h>  /* some more string fcns*/
37 //#include <unicode/uloc.h>
38 #include <unicode/ubrk.h>
39 //#include <unicode/unistr.h>
40 #include <unicode/utrans.h>
41
42
43
44 // forward declarations
45 //struct UBreakIterator;
46
47
48
49
50 // declared structs and functions
51
52
53 int icu_check_status (UErrorCode status);
54
55 struct icu_buf_utf16
56 {
57   UChar * utf16;
58   int32_t utf16_len;
59   int32_t utf16_cap;
60 };
61
62 struct icu_buf_utf16 * icu_buf_utf16_create(size_t capacity);
63 struct icu_buf_utf16 * icu_buf_utf16_resize(struct icu_buf_utf16 * buf16,
64                                             size_t capacity);
65 void icu_buf_utf16_destroy(struct icu_buf_utf16 * buf16);
66
67
68
69 struct icu_buf_utf8
70 {
71   uint8_t * utf8;
72   int32_t utf8_len;
73   int32_t utf8_cap;
74 };
75
76 struct icu_buf_utf8 * icu_buf_utf8_create(size_t capacity);
77 struct icu_buf_utf8 * icu_buf_utf8_resize(struct icu_buf_utf8 * buf8,
78                                           size_t capacity);
79 void icu_buf_utf8_destroy(struct icu_buf_utf8 * buf8);
80
81
82 UErrorCode icu_utf16_from_utf8(struct icu_buf_utf16 * dest16,
83                                struct icu_buf_utf8 * src8,
84                                UErrorCode * status);
85
86 UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 * dest16,
87                                     const char * src8cstr,
88                                     UErrorCode * status);
89
90
91 UErrorCode icu_utf16_to_utf8(struct icu_buf_utf8 * dest8,
92                              struct icu_buf_utf16 * src16,
93                              UErrorCode * status);
94
95 int icu_utf16_casemap(struct icu_buf_utf16 * dest16,
96                       struct icu_buf_utf16 * src16,
97                       const char *locale, char action,
98                       UErrorCode *status);
99
100 UErrorCode icu_sortkey8_from_utf16(UCollator *coll,
101                                    struct icu_buf_utf8 * dest8, 
102                                    struct icu_buf_utf16 * src16,
103                                    UErrorCode * status);
104
105 struct icu_tokenizer
106 {
107   char locale[16];
108   char action;
109   UBreakIterator* bi;
110   struct icu_buf_utf16 * buf16;
111   int32_t token_count;
112   int32_t token_id;
113   int32_t token_start;
114   int32_t token_end;
115   // keep always invariant
116   // 0 <= token_start 
117   //   <= token_end 
118   //   <= buf16->utf16_len
119   // and invariant
120   // 0 <= token_id <= token_count
121 };
122
123 struct icu_tokenizer * icu_tokenizer_create(const char *locale, char action,
124                                             UErrorCode *status);
125
126 void icu_tokenizer_destroy(struct icu_tokenizer * tokenizer);
127
128 int icu_tokenizer_attach(struct icu_tokenizer * tokenizer, 
129                          struct icu_buf_utf16 * src16, UErrorCode *status);
130
131 int32_t icu_tokenizer_next_token(struct icu_tokenizer * tokenizer, 
132                                  struct icu_buf_utf16 * tkn16, 
133                                  UErrorCode *status);
134
135 int32_t icu_tokenizer_token_id(struct icu_tokenizer * tokenizer);
136 int32_t icu_tokenizer_token_start(struct icu_tokenizer * tokenizer);
137 int32_t icu_tokenizer_token_end(struct icu_tokenizer * tokenizer);
138 int32_t icu_tokenizer_token_length(struct icu_tokenizer * tokenizer);
139 int32_t icu_tokenizer_token_count(struct icu_tokenizer * tokenizer);
140
141
142
143 struct icu_normalizer
144 {
145   char action;
146   struct icu_buf_utf16 * rules16;
147   UParseError parse_error[256];
148   UTransliterator * trans;
149 };
150
151 struct icu_normalizer * icu_normalizer_create(const char *rules, char action,
152                                               UErrorCode *status);
153
154
155 void icu_normalizer_destroy(struct icu_normalizer * normalizer);
156
157
158 #endif // HAVE_ICU
159 #endif // ICU_I18NL_H