ICU tokenizer works now
[pazpar2-moved-to-github.git] / src / icu_I18N.h
1 /* $Id: icu_I18N.h,v 1.8 2007-05-09 14:01:21 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
41
42 // forward declarations
43 //struct UBreakIterator;
44
45
46
47
48 // declared structs and functions
49
50
51 int icu_check_status (UErrorCode status);
52
53 struct icu_buf_utf16
54 {
55   UChar * utf16;
56   int32_t utf16_len;
57   int32_t utf16_cap;
58 };
59
60 struct icu_buf_utf16 * icu_buf_utf16_create(size_t capacity);
61 struct icu_buf_utf16 * icu_buf_utf16_resize(struct icu_buf_utf16 * buf16,
62                                             size_t capacity);
63 void icu_buf_utf16_destroy(struct icu_buf_utf16 * buf16);
64
65
66
67 struct icu_buf_utf8
68 {
69   uint8_t * utf8;
70   int32_t utf8_len;
71   int32_t utf8_cap;
72 };
73
74 struct icu_buf_utf8 * icu_buf_utf8_create(size_t capacity);
75 struct icu_buf_utf8 * icu_buf_utf8_resize(struct icu_buf_utf8 * buf8,
76                                           size_t capacity);
77 void icu_buf_utf8_destroy(struct icu_buf_utf8 * buf8);
78
79
80 UErrorCode icu_utf16_from_utf8(struct icu_buf_utf16 * dest16,
81                                struct icu_buf_utf8 * src8,
82                                UErrorCode * status);
83
84 UErrorCode icu_utf16_from_utf8_cstr(struct icu_buf_utf16 * dest16,
85                                     const char * src8cstr,
86                                     UErrorCode * status);
87
88
89 UErrorCode icu_utf16_to_utf8(struct icu_buf_utf8 * dest8,
90                              struct icu_buf_utf16 * src16,
91                              UErrorCode * status);
92
93 int icu_utf16_casemap(struct icu_buf_utf16 * dest16,
94                       struct icu_buf_utf16 * src16,
95                       const char *locale, char action,
96                       UErrorCode *status);
97
98 UErrorCode icu_sortkey8_from_utf16(UCollator *coll,
99                                    struct icu_buf_utf8 * dest8, 
100                                    struct icu_buf_utf16 * src16,
101                                    UErrorCode * status);
102
103 struct icu_tokenizer
104 {
105   char locale[16];
106   char action;
107   UBreakIterator* bi;
108   struct icu_buf_utf16 * buf16;
109   int32_t token_count;
110   int32_t token_id;
111   int32_t token_start;
112   int32_t token_end;
113   // keep always invariant
114   // 0 <= token_start 
115   //   <= token_end 
116   //   <= buf16->utf16_len
117   // and invariant
118   // 0 <= token_id <= token_count
119 };
120
121 struct icu_tokenizer * icu_tokenizer_create(const char *locale, char action,
122                                             UErrorCode *status);
123
124 void icu_tokenizer_destroy(struct icu_tokenizer * tokenizer);
125
126 int icu_tokenizer_attach(struct icu_tokenizer * tokenizer, 
127                          struct icu_buf_utf16 * src16, UErrorCode *status);
128
129 int32_t icu_tokenizer_next_token(struct icu_tokenizer * tokenizer, 
130                                  struct icu_buf_utf16 * tkn16, 
131                                  UErrorCode *status);
132
133 int32_t icu_tokenizer_token_id(struct icu_tokenizer * tokenizer);
134 int32_t icu_tokenizer_token_start(struct icu_tokenizer * tokenizer);
135 int32_t icu_tokenizer_token_end(struct icu_tokenizer * tokenizer);
136 int32_t icu_tokenizer_token_length(struct icu_tokenizer * tokenizer);
137 int32_t icu_tokenizer_token_count(struct icu_tokenizer * tokenizer);
138
139
140
141
142 #endif // HAVE_ICU
143 #endif // ICU_I18NL_H