diff options
author | Michal Hruby <michal.mhr@gmail.com> | 2012-02-09 16:32:36 +0100 |
---|---|---|
committer | Michal Hruby <michal.mhr@gmail.com> | 2012-02-09 16:32:36 +0100 |
commit | e9372f12cdcf774072645ae1f75c3c579ae57a0d (patch) | |
tree | 922cd02f0277ab377676db729ed65b4374118b0e /extensions/fts++/stringutils.cpp | |
parent | bed9fc4862bba98602be99475e5dcd123e0fa521 (diff) | |
download | zeitgeist-e9372f12cdcf774072645ae1f75c3c579ae57a0d.tar.gz |
Initial stab at transliteration support
Diffstat (limited to 'extensions/fts++/stringutils.cpp')
-rw-r--r-- | extensions/fts++/stringutils.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/extensions/fts++/stringutils.cpp b/extensions/fts++/stringutils.cpp index 12b0baf8..59a6dd2c 100644 --- a/extensions/fts++/stringutils.cpp +++ b/extensions/fts++/stringutils.cpp @@ -21,6 +21,10 @@ #include "stringutils.h" +#ifdef HAVE_DEE_ICU +#include <dee-icu.h> +#endif + using namespace std; namespace ZeitgeistFTS { @@ -123,6 +127,39 @@ void SplitUri (string const& uri, string &authority, } } +#ifdef HAVE_DEE_ICU +static DeeICUTermFilter *icu_filter = NULL; + +/** + * Use ascii folding filter on the input text and return folded version + * of the original string. + * + * Note that if the folded version is exactly the same as the original + * empty string will be returned. + */ +string AsciiFold (string const& input) +{ + if (icu_filter == NULL) + { + icu_filter = dee_icu_term_filter_new_ascii_folder (); + if (icu_filter == NULL) return ""; + } + + // FIXME: check first if the input contains any non-ascii chars? + + gchar *folded = dee_icu_term_filter_apply (icu_filter, input.c_str ()); + string result (folded); + g_free (folded); + + return result == input ? "" : result; +} +#else +string AsciiFold (string const& input) +{ + return ""; +} +#endif + } /* namespace StringUtils */ } /* namespace ZeitgeistFTS */ |