diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 (patch) | |
tree | 67208f7c145782a7e90b123b982ca78d88cc2c87 /indexlib/tokenizer.cpp | |
download | tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.tar.gz tdepim-460c52653ab0dcca6f19a4f492ed2c5e4e963ab0.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'indexlib/tokenizer.cpp')
-rw-r--r-- | indexlib/tokenizer.cpp | 300 |
1 files changed, 300 insertions, 0 deletions
diff --git a/indexlib/tokenizer.cpp b/indexlib/tokenizer.cpp new file mode 100644 index 000000000..b069c7482 --- /dev/null +++ b/indexlib/tokenizer.cpp @@ -0,0 +1,300 @@ +#include "tokenizer.h" +#include <algorithm> +#include <vector> +#include <string> +#include <cassert> + +using std::string; +using std::vector; + +namespace { +vector<string> split( const char* str, const char delim ) { + assert( str ); + vector<string> res; + while ( *str == delim ) ++str; + while ( *str ) { + const char* start = str++; + while ( *str && *str != delim ) ++str; + res.push_back( string( start, str ) ); + while ( *str == delim ) ++str; + } + return res; +} + +class latin1_tokenizer : public indexlib::detail::tokenizer { + private: + static const char stop = 46; // . + static void normalize( char& c ) { + const char result[] = { + stop, // [ 0 ] + stop, // [ 1 ] + stop, // [ 2 ] + stop, // [ 3 ] + stop, // [ 4 ] + stop, // [ 5 ] + stop, // [ 6 ] + stop, // [ 7 ] + stop, // ^H [ 8 ] + stop, // \t [ 9 ] + stop, // [ 10 ] + stop, // [ 11 ] + stop, // [ 12 ] + stop, // [ 13 ] + stop, // [ 14 ] + stop, // [ 15 ] + stop, // [ 16 ] + stop, // [ 17 ] + stop, // [ 18 ] + stop, // [ 19 ] + stop, // [ 20 ] + stop, // [ 21 ] + stop, // [ 22 ] + stop, // [ 23 ] + stop, // [ 24 ] + stop, // [ 25 ] + stop, // [ 26 ] + stop, // [ 27 ] + stop, // [ 28 ] + stop, // [ 29 ] + stop, // [ 30 ] + stop, // [ 31 ] + stop, // [ 32 ] + stop, // ! [ 33 ] + stop, // " [ 34 ] + stop, // # [ 35 ] + stop, // $ [ 36 ] + stop, // % [ 37 ] + stop, // & [ 38 ] + stop, // ' [ 39 ] + stop, // ( [ 40 ] + stop, // ) [ 41 ] + stop, // * [ 42 ] + stop, // + [ 43 ] + stop, // , [ 44 ] + stop, // - [ 45 ] + stop, // . [ 46 ] + stop, // / [ 47 ] + '0', // 0 [ 48 ] + '1', // 1 [ 49 ] + '2', // 2 [ 50 ] + '3', // 3 [ 51 ] + '4', // 4 [ 52 ] + '5', // 5 [ 53 ] + '6', // 6 [ 54 ] + '7', // 7 [ 55 ] + '8', // 8 [ 56 ] + '9', // 9 [ 57 ] + stop, // : [ 58 ] + stop, // ; [ 59 ] + stop, // < [ 60 ] + stop, // = [ 61 ] + stop, // > [ 62 ] + stop, // ? [ 63 ] + stop, // @ [ 64 ] + 'A', // A [ 65 ] + 'B', // B [ 66 ] + 'C', // C [ 67 ] + 'D', // D [ 68 ] + 'E', // E [ 69 ] + 'F', // F [ 70 ] + 'G', // G [ 71 ] + 'H', // H [ 72 ] + 'I', // I [ 73 ] + 'J', // J [ 74 ] + 'K', // K [ 75 ] + 'L', // L [ 76 ] + 'M', // M [ 77 ] + 'N', // N [ 78 ] + 'O', // O [ 79 ] + 'P', // P [ 80 ] + 'Q', // Q [ 81 ] + 'R', // R [ 82 ] + 'S', // S [ 83 ] + 'T', // T [ 84 ] + 'U', // U [ 85 ] + 'V', // V [ 86 ] + 'W', // W [ 87 ] + 'X', // X [ 88 ] + 'Y', // Y [ 89 ] + 'Z', // Z [ 90 ] + stop, // [ [ 91 ] + stop, // \ [ 92 ] + stop, // ] [ 93 ] + stop, // ^ [ 94 ] + stop, // _ [ 95 ] + stop, // ` [ 96 ] + 'A', // a [ 97 ] + 'B', // b [ 98 ] + 'C', // c [ 99 ] + 'D', // d [ 100 ] + 'E', // e [ 101 ] + 'F', // f [ 102 ] + 'G', // g [ 103 ] + 'H', // h [ 104 ] + 'I', // i [ 105 ] + 'J', // j [ 106 ] + 'K', // k [ 107 ] + 'L', // l [ 108 ] + 'M', // m [ 109 ] + 'N', // n [ 110 ] + 'O', // o [ 111 ] + 'P', // p [ 112 ] + 'Q', // q [ 113 ] + 'R', // r [ 114 ] + 'S', // s [ 115 ] + 'T', // t [ 116 ] + 'U', // u [ 117 ] + 'V', // v [ 118 ] + 'W', // w [ 119 ] + 'X', // x [ 120 ] + 'Y', // y [ 121 ] + 'Z', // z [ 122 ] + stop, // { [ 123 ] + stop, // | [ 124 ] + stop, // } [ 125 ] + stop, // ~ [ 126 ] + stop, // [ 127 ] + stop, // [ 128 ] + stop, // [ 129 ] + stop, // [ 130 ] + stop, // [ 131 ] + stop, // [ 132 ] + stop, // [ 133 ] + stop, // [ 134 ] + stop, // [ 135 ] + stop, // [ 136 ] + stop, // [ 137 ] + stop, // [ 138 ] + stop, // [ 139 ] + stop, // [ 140 ] + stop, // [ 141 ] + stop, // [ 142 ] + stop, // [ 143 ] + stop, // [ 144 ] + stop, // [ 145 ] + stop, // [ 146 ] + stop, // [ 147 ] + stop, // [ 148 ] + stop, // [ 149 ] + stop, // [ 150 ] + stop, // [ 151 ] + stop, // [ 152 ] + stop, // [ 153 ] + stop, // [ 154 ] + stop, // [ 155 ] + stop, // [ 156 ] + stop, // [ 157 ] + stop, // [ 158 ] + stop, // [ 159 ] + stop, // [ 160 ] + stop, // [ 161 ] + stop, // [ 162 ] + stop, // [ 163 ] + stop, // [ 164 ] + stop, // [ 165 ] + stop, // [ 166 ] + stop, // [ 167 ] + stop, // [ 168 ] + stop, // [ 169 ] + stop, // [ 170 ] + stop, // [ 171 ] + stop, // [ 172 ] + stop, // [ 173 ] + stop, // [ 174 ] + stop, // [ 175 ] + stop, // [ 176 ] + stop, // [ 177 ] + stop, // [ 178 ] + stop, // [ 179 ] + stop, // [ 180 ] + stop, // [ 181 ] + stop, // [ 182 ] + stop, // [ 183 ] + stop, // [ 184 ] + stop, // [ 185 ] + stop, // [ 186 ] + stop, // [ 187 ] + stop, // [ 188 ] + stop, // [ 189 ] + stop, // [ 190 ] + stop, // [ 191 ] + 'A', // [ 192 ] + 'A', // [ 193 ] + 'A', // [ 194 ] + 'A', // [ 195 ] + 'A', // [ 196 ] + 'A', // [ 197 ] + 'A', // [ 198 ] + 'C', // [ 199 ] + 'E', // [ 200 ] + 'E', // [ 201 ] + 'E', // [ 202 ] + 'E', // [ 203 ] + 'I', // [ 204 ] + 'I', // [ 205 ] + 'I', // [ 206 ] + 'I', // [ 207 ] + 'D', // [ 208 ] + 'N', // [ 209 ] + 'O', // [ 210 ] + 'O', // [ 211 ] + 'O', // [ 212 ] + 'O', // [ 213 ] + 'O', // [ 214 ] + 'X', // [ 215 ] + 'O', // [ 216 ] + 'U', // [ 217 ] + 'U', // [ 218 ] + 'U', // [ 219 ] + 'U', // [ 220 ] + 'Y', // [ 221 ] + 'T', // [ 222 ] + 'S', // [ 223 ] + 'A', // [ 224 ] + 'A', // [ 225 ] + 'A', // [ 226 ] + 'A', // [ 227 ] + 'A', // [ 228 ] + 'A', // [ 229 ] + 'A', // [ 230 ] + 'C', // [ 231 ] + 'E', // [ 232 ] + 'E', // [ 233 ] + 'E', // [ 234 ] + 'E', // [ 235 ] + 'I', // [ 236 ] + 'I', // [ 237 ] + 'I', // [ 238 ] + 'I', // [ 239 ] + stop, // [ 240 ] + 'N', // [ 241 ] + 'O', // [ 242 ] + 'O', // [ 243 ] + 'O', // [ 244 ] + 'O', // [ 245 ] + 'O', // [ 246 ] + stop, // [ 247 ] + 'O', // [ 248 ] + 'U', // [ 249 ] + 'U', // [ 250 ] + 'U', // [ 251 ] + 'U', // [ 252 ] + 'Y', // [ 253 ] + 'T', // [ 254 ] + 'Y' // [ 255 ] + }; + c = result[ static_cast<unsigned char>( c ) ]; + } + std::vector<std::string> do_string_to_words( const char* str ) { + string complete = str; + std::for_each( complete.begin(), complete.end(), normalize ); + return split( complete.c_str(), stop ); + } +}; +} + + +std::auto_ptr<indexlib::detail::tokenizer> indexlib::detail::get_tokenizer( std::string name ) { + if ( name == "latin-1:european" ) return std::auto_ptr<indexlib::detail::tokenizer>( new latin1_tokenizer ); + return std::auto_ptr<indexlib::detail::tokenizer>( 0 ); +} |