[gnome-contacts] Remove accents etc when searching
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-contacts] Remove accents etc when searching
- Date: Tue, 13 Sep 2011 15:14:29 +0000 (UTC)
commit 39b2359803eceed96151cbe9f930f921880618a0
Author: Alexander Larsson <alexl redhat com>
Date: Tue Sep 13 17:13:36 2011 +0200
Remove accents etc when searching
Fixes bug #658050
src/contacts-contact.vala | 6 +++---
src/contacts-link-dialog.vala | 2 +-
src/contacts-list-pane.vala | 2 +-
src/contacts-utils.vala | 30 ++++++++++++++++++++++++++++++
vapi/custom.vapi | 6 ++++++
5 files changed, 41 insertions(+), 5 deletions(-)
---
diff --git a/src/contacts-contact.vala b/src/contacts-contact.vala
index aa3b357..24f8712 100644
--- a/src/contacts-contact.vala
+++ b/src/contacts-contact.vala
@@ -766,15 +766,15 @@ public class Contacts.Contact : GLib.Object {
private void update_filter_data () {
var builder = new StringBuilder ();
if (individual.alias != null) {
- builder.append (individual.alias.casefold ());
+ builder.append (Utils.canonicalize_for_search (individual.alias));
builder.append_unichar (' ');
}
if (individual.full_name != null) {
- builder.append (individual.full_name.casefold ());
+ builder.append (Utils.canonicalize_for_search (individual.full_name));
builder.append_unichar (' ');
}
if (individual.nickname != null) {
- builder.append (individual.nickname.casefold ());
+ builder.append (Utils.canonicalize_for_search (individual.nickname));
builder.append_unichar (' ');
}
var im_addresses = individual.im_addresses;
diff --git a/src/contacts-link-dialog.vala b/src/contacts-link-dialog.vala
index 2d81e5e..cc46623 100644
--- a/src/contacts-link-dialog.vala
+++ b/src/contacts-link-dialog.vala
@@ -206,7 +206,7 @@ public class Contacts.LinkDialog : Dialog {
if (str.length == 0)
values = null;
else {
- str = str.casefold();
+ str = Utils.canonicalize_for_search (str);
values = str.split(" ");
}
diff --git a/src/contacts-list-pane.vala b/src/contacts-list-pane.vala
index 5b253b3..0da3ce7 100644
--- a/src/contacts-list-pane.vala
+++ b/src/contacts-list-pane.vala
@@ -39,7 +39,7 @@ public class Contacts.ListPane : Frame {
if (str.length == 0)
values = null;
else {
- str = str.casefold();
+ str = Utils.canonicalize_for_search (str);
values = str.split(" ");
}
diff --git a/src/contacts-utils.vala b/src/contacts-utils.vala
index dc5dd3d..6f407f6 100644
--- a/src/contacts-utils.vala
+++ b/src/contacts-utils.vala
@@ -158,4 +158,34 @@ public class Contacts.Utils : Object {
radius,
Math.PI / 2, Math.PI);
}
+
+ private static unichar strip_char (unichar ch) {
+ switch (ch.type ()) {
+ case UnicodeType.CONTROL:
+ case UnicodeType.FORMAT:
+ case UnicodeType.UNASSIGNED:
+ case UnicodeType.NON_SPACING_MARK:
+ case UnicodeType.COMBINING_MARK:
+ case UnicodeType.ENCLOSING_MARK:
+ /* Ignore those */
+ return 0;
+ default:
+ return ch.tolower ();
+ }
+ }
+
+ public static string canonicalize_for_search (string str) {
+ unowned string s;
+ var buf = new unichar[18];
+ var res = new StringBuilder ();
+ for (s = str; s[0] != 0; s = s.next_char ()) {
+ var c = strip_char (s.get_char ());
+ if (c != 0) {
+ var size = LocalGLib.fully_decompose (c, true, buf);
+ if (size > 0)
+ res.append_unichar (buf[0]);
+ }
+ }
+ return res.str;
+ }
}
diff --git a/vapi/custom.vapi b/vapi/custom.vapi
index 73f0a5f..da3b2d6 100644
--- a/vapi/custom.vapi
+++ b/vapi/custom.vapi
@@ -16,3 +16,9 @@ namespace Gnome {
LARGE
}
}
+
+[CCode (cprefix = "G", lower_case_cprefix = "g_", cheader_filename = "glib.h", gir_namespace = "GLib", gir_version = "2.0")]
+namespace LocalGLib {
+ [CCode (cname = "g_unichar_fully_decompose", cheader_filename = "glib.h")]
+ public static unowned size_t fully_decompose (unichar ch, bool compat, unichar[] result);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]