summaryrefslogtreecommitdiff
path: root/extensions/fts++/stringutils.cpp
diff options
context:
space:
mode:
authorMichal Hruby <michal.mhr@gmail.com>2012-02-09 16:32:36 +0100
committerMichal Hruby <michal.mhr@gmail.com>2012-02-09 16:32:36 +0100
commite9372f12cdcf774072645ae1f75c3c579ae57a0d (patch)
tree922cd02f0277ab377676db729ed65b4374118b0e /extensions/fts++/stringutils.cpp
parentbed9fc4862bba98602be99475e5dcd123e0fa521 (diff)
downloadzeitgeist-e9372f12cdcf774072645ae1f75c3c579ae57a0d.tar.gz
Initial stab at transliteration support
Diffstat (limited to 'extensions/fts++/stringutils.cpp')
-rw-r--r--extensions/fts++/stringutils.cpp37
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 */