00001 /* Imported from http://www.senga.org/unac/ */ 00002 /* 00003 * Copyright (C) 2000, 2001 Loic Dachary 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 */ 00019 00020 /* 00021 * Provides functions to strip accents from a string in all the charset 00022 * supported by iconv(3). See the unac(3) manual page for more information. 00023 */ 00024 00025 #ifndef _unac_h 00026 #define _unac_h 00027 00028 #ifdef __cplusplus 00029 extern "C" { 00030 #endif 00031 00032 /* Generated by builder. Do not modify. Start defines */ 00033 #define UNAC_BLOCK_SHIFT 5 00034 #define UNAC_BLOCK_MASK ((1 << UNAC_BLOCK_SHIFT) - 1) 00035 #define UNAC_BLOCK_SIZE (1 << UNAC_BLOCK_SHIFT) 00036 #define UNAC_BLOCK_COUNT 173 00037 #define UNAC_INDEXES_SIZE (0x10000 >> UNAC_BLOCK_SHIFT) 00038 /* Generated by builder. Do not modify. End defines */ 00039 00040 /* 00041 * Return the unaccented equivalent of the UTF-16 character <c> 00042 * in the pointer <p>. The length of the unsigned short array pointed 00043 * by <p> is returned in the <l> argument. 00044 * The C prototype of this macro would be: 00045 * 00046 * void unac_char(const unsigned short c, unsigned short* p, unsigned short l) 00047 */ 00048 #define unac_char_utf16(c,p,l) \ 00049 { \ 00050 unsigned short index = unac_indexes[(c) >> UNAC_BLOCK_SHIFT]; \ 00051 unsigned char position = (c) & UNAC_BLOCK_MASK; \ 00052 (p) = &(unac_data_table[index][unac_positions[index][(c) & UNAC_BLOCK_MASK]]); \ 00053 (l) = unac_positions[index][position + 1] - unac_positions[index][position]; \ 00054 if((l) == 1 && *(p) == 0xFFFF) { \ 00055 (p) = 0; \ 00056 (l) = 0; \ 00057 } \ 00058 } 00059 00060 /* 00061 * Return unac version number. 00062 */ 00063 const char* unac_version(void); 00064 00065 /* 00066 * Return the unaccented equivalent of the UTF-16 string <in> of length 00067 * <in_length> in the pointer <out>. The length of the UTF-16 string returned 00068 * in <out> is stored in <out_length>. If the pointer *out is null, a new 00069 * string is allocated using malloc(3). If the pointer *out is not null, 00070 * the available length must also be given in the *out_length argument. 00071 * The pointer passed to *out must have been allocated by malloc(3) and 00072 * may be reallocated by realloc(3) if needs be. It is the responsibility 00073 * of the caller to free the pointer returned in *out. 00074 * The return value is 0 on success and -1 on error, in which case 00075 * the errno variable is set to the corresponding error code. 00076 */ 00077 int unac_string_utf16(const char* in, size_t in_length, 00078 char** out, size_t* out_length); 00079 00080 /* 00081 * The semantic of this function is stricly equal to the function 00082 * unac_string_utf16. The <charset> argument applies to the content of the 00083 * input string. It is converted to UTF-16 using iconv(3) before calling 00084 * the unac_string function and the result is converted from UTF-16 to 00085 * the specified <charset> before returning it in the <out> pointer. 00086 * For efficiency purpose it is recommended that the caller uses 00087 * unac_string and iconv(3) to save buffer allocations overhead. 00088 * The return value is 0 on success and -1 on error, in which case 00089 * the errno variable is set to the corresponding error code. 00090 */ 00091 int unac_string(const char* charset, 00092 const char* in, size_t in_length, 00093 char** out, size_t* out_length); 00094 00095 /* Generated by builder. Do not modify. Start declarations */ 00096 extern unsigned short unac_indexes[UNAC_INDEXES_SIZE]; 00097 extern unsigned char unac_positions[UNAC_BLOCK_COUNT][UNAC_BLOCK_SIZE + 1]; 00098 extern unsigned short* unac_data_table[UNAC_BLOCK_COUNT]; 00099 extern unsigned short unac_data0[]; 00100 extern unsigned short unac_data1[]; 00101 extern unsigned short unac_data2[]; 00102 extern unsigned short unac_data3[]; 00103 extern unsigned short unac_data4[]; 00104 extern unsigned short unac_data5[]; 00105 extern unsigned short unac_data6[]; 00106 extern unsigned short unac_data7[]; 00107 extern unsigned short unac_data8[]; 00108 extern unsigned short unac_data9[]; 00109 extern unsigned short unac_data10[]; 00110 extern unsigned short unac_data11[]; 00111 extern unsigned short unac_data12[]; 00112 extern unsigned short unac_data13[]; 00113 extern unsigned short unac_data14[]; 00114 extern unsigned short unac_data15[]; 00115 extern unsigned short unac_data16[]; 00116 extern unsigned short unac_data17[]; 00117 extern unsigned short unac_data18[]; 00118 extern unsigned short unac_data19[]; 00119 extern unsigned short unac_data20[]; 00120 extern unsigned short unac_data21[]; 00121 extern unsigned short unac_data22[]; 00122 extern unsigned short unac_data23[]; 00123 extern unsigned short unac_data24[]; 00124 extern unsigned short unac_data25[]; 00125 extern unsigned short unac_data26[]; 00126 extern unsigned short unac_data27[]; 00127 extern unsigned short unac_data28[]; 00128 extern unsigned short unac_data29[]; 00129 extern unsigned short unac_data30[]; 00130 extern unsigned short unac_data31[]; 00131 extern unsigned short unac_data32[]; 00132 extern unsigned short unac_data33[]; 00133 extern unsigned short unac_data34[]; 00134 extern unsigned short unac_data35[]; 00135 extern unsigned short unac_data36[]; 00136 extern unsigned short unac_data37[]; 00137 extern unsigned short unac_data38[]; 00138 extern unsigned short unac_data39[]; 00139 extern unsigned short unac_data40[]; 00140 extern unsigned short unac_data41[]; 00141 extern unsigned short unac_data42[]; 00142 extern unsigned short unac_data43[]; 00143 extern unsigned short unac_data44[]; 00144 extern unsigned short unac_data45[]; 00145 extern unsigned short unac_data46[]; 00146 extern unsigned short unac_data47[]; 00147 extern unsigned short unac_data48[]; 00148 extern unsigned short unac_data49[]; 00149 extern unsigned short unac_data50[]; 00150 extern unsigned short unac_data51[]; 00151 extern unsigned short unac_data52[]; 00152 extern unsigned short unac_data53[]; 00153 extern unsigned short unac_data54[]; 00154 extern unsigned short unac_data55[]; 00155 extern unsigned short unac_data56[]; 00156 extern unsigned short unac_data57[]; 00157 extern unsigned short unac_data58[]; 00158 extern unsigned short unac_data59[]; 00159 extern unsigned short unac_data60[]; 00160 extern unsigned short unac_data61[]; 00161 extern unsigned short unac_data62[]; 00162 extern unsigned short unac_data63[]; 00163 extern unsigned short unac_data64[]; 00164 extern unsigned short unac_data65[]; 00165 extern unsigned short unac_data66[]; 00166 extern unsigned short unac_data67[]; 00167 extern unsigned short unac_data68[]; 00168 extern unsigned short unac_data69[]; 00169 extern unsigned short unac_data70[]; 00170 extern unsigned short unac_data71[]; 00171 extern unsigned short unac_data72[]; 00172 extern unsigned short unac_data73[]; 00173 extern unsigned short unac_data74[]; 00174 extern unsigned short unac_data75[]; 00175 extern unsigned short unac_data76[]; 00176 extern unsigned short unac_data77[]; 00177 extern unsigned short unac_data78[]; 00178 extern unsigned short unac_data79[]; 00179 extern unsigned short unac_data80[]; 00180 extern unsigned short unac_data81[]; 00181 extern unsigned short unac_data82[]; 00182 extern unsigned short unac_data83[]; 00183 extern unsigned short unac_data84[]; 00184 extern unsigned short unac_data85[]; 00185 extern unsigned short unac_data86[]; 00186 extern unsigned short unac_data87[]; 00187 extern unsigned short unac_data88[]; 00188 extern unsigned short unac_data89[]; 00189 extern unsigned short unac_data90[]; 00190 extern unsigned short unac_data91[]; 00191 extern unsigned short unac_data92[]; 00192 extern unsigned short unac_data93[]; 00193 extern unsigned short unac_data94[]; 00194 extern unsigned short unac_data95[]; 00195 extern unsigned short unac_data96[]; 00196 extern unsigned short unac_data97[]; 00197 extern unsigned short unac_data98[]; 00198 extern unsigned short unac_data99[]; 00199 extern unsigned short unac_data100[]; 00200 extern unsigned short unac_data101[]; 00201 extern unsigned short unac_data102[]; 00202 extern unsigned short unac_data103[]; 00203 extern unsigned short unac_data104[]; 00204 extern unsigned short unac_data105[]; 00205 extern unsigned short unac_data106[]; 00206 extern unsigned short unac_data107[]; 00207 extern unsigned short unac_data108[]; 00208 extern unsigned short unac_data109[]; 00209 extern unsigned short unac_data110[]; 00210 extern unsigned short unac_data111[]; 00211 extern unsigned short unac_data112[]; 00212 extern unsigned short unac_data113[]; 00213 extern unsigned short unac_data114[]; 00214 extern unsigned short unac_data115[]; 00215 extern unsigned short unac_data116[]; 00216 extern unsigned short unac_data117[]; 00217 extern unsigned short unac_data118[]; 00218 extern unsigned short unac_data119[]; 00219 extern unsigned short unac_data120[]; 00220 extern unsigned short unac_data121[]; 00221 extern unsigned short unac_data122[]; 00222 extern unsigned short unac_data123[]; 00223 extern unsigned short unac_data124[]; 00224 extern unsigned short unac_data125[]; 00225 extern unsigned short unac_data126[]; 00226 extern unsigned short unac_data127[]; 00227 extern unsigned short unac_data128[]; 00228 extern unsigned short unac_data129[]; 00229 extern unsigned short unac_data130[]; 00230 extern unsigned short unac_data131[]; 00231 extern unsigned short unac_data132[]; 00232 extern unsigned short unac_data133[]; 00233 extern unsigned short unac_data134[]; 00234 extern unsigned short unac_data135[]; 00235 extern unsigned short unac_data136[]; 00236 extern unsigned short unac_data137[]; 00237 extern unsigned short unac_data138[]; 00238 extern unsigned short unac_data139[]; 00239 extern unsigned short unac_data140[]; 00240 extern unsigned short unac_data141[]; 00241 extern unsigned short unac_data142[]; 00242 extern unsigned short unac_data143[]; 00243 extern unsigned short unac_data144[]; 00244 extern unsigned short unac_data145[]; 00245 extern unsigned short unac_data146[]; 00246 extern unsigned short unac_data147[]; 00247 extern unsigned short unac_data148[]; 00248 extern unsigned short unac_data149[]; 00249 extern unsigned short unac_data150[]; 00250 extern unsigned short unac_data151[]; 00251 extern unsigned short unac_data152[]; 00252 extern unsigned short unac_data153[]; 00253 extern unsigned short unac_data154[]; 00254 extern unsigned short unac_data155[]; 00255 extern unsigned short unac_data156[]; 00256 extern unsigned short unac_data157[]; 00257 extern unsigned short unac_data158[]; 00258 extern unsigned short unac_data159[]; 00259 extern unsigned short unac_data160[]; 00260 extern unsigned short unac_data161[]; 00261 extern unsigned short unac_data162[]; 00262 extern unsigned short unac_data163[]; 00263 extern unsigned short unac_data164[]; 00264 extern unsigned short unac_data165[]; 00265 extern unsigned short unac_data166[]; 00266 extern unsigned short unac_data167[]; 00267 extern unsigned short unac_data168[]; 00268 extern unsigned short unac_data169[]; 00269 extern unsigned short unac_data170[]; 00270 extern unsigned short unac_data171[]; 00271 extern unsigned short unac_data172[]; 00272 /* Generated by builder. Do not modify. End declarations */ 00273 00274 #ifdef __cplusplus 00275 } 00276 #endif 00277 00278 #endif /* _unac_h */