New function which works like g_completion_complete(), but strips a
authorMatthias Clasen <maclas@gmx.de>
Wed, 4 Feb 2004 23:54:17 +0000 (23:54 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Wed, 4 Feb 2004 23:54:17 +0000 (23:54 +0000)
Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>

* glib/gcompletion.c (g_completion_complete_utf8): New function which
works like g_completion_complete(), but strips a trailing incomplete
UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)

* tests/completion-test.c (main): Some GCompletion tests.

* tests/Makefile.am: Add completion-test.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/ChangeLog
docs/reference/glib/glib-sections.txt
glib/gcompletion.c
tests/Makefile.am
tests/completion-test.c [new file with mode: 0644]

index 0b5e1e9..01d108f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index 0b5e1e9..01d108f 100644 (file)
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index 0b5e1e9..01d108f 100644 (file)
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index 0b5e1e9..01d108f 100644 (file)
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index 0b5e1e9..01d108f 100644 (file)
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index 0b5e1e9..01d108f 100644 (file)
@@ -1,3 +1,14 @@
+Thu Feb  5 00:56:28 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/gcompletion.c (g_completion_complete_utf8): New function which
+       works like g_completion_complete(), but strips a trailing incomplete
+       UTF-8 character from the prefix.  (#133313, Theppitak Karoonboonyanan)
+
+       * tests/completion-test.c (main): Some GCompletion tests.
+
+       * tests/Makefile.am: Add completion-test.
+
+
 2004-02-01  Tor Lillqvist  <tml@iki.fi>
 
        * glib/glib.def: Add g_strsplit_set.
index d2669f0..045759b 100644 (file)
@@ -1,3 +1,7 @@
+Thu Feb  5 00:54:43 2004  Matthias Clasen  <maclas@gmx.de>
+
+       * glib/glib-sections.txt: Add g_completion_complete_utf8.
+
 Fri Jan 30 23:25:58 2004  Matthias Clasen  <maclas@gmx.de>
 
        * glib/tmpl/iochannels.sgml: 
index 9c9817b..4231b1a 100644 (file)
@@ -1329,6 +1329,7 @@ g_completion_add_items
 g_completion_remove_items
 g_completion_clear_items
 g_completion_complete
+g_completion_complete_utf8
 g_completion_set_compare
 GCompletionStrncmpFunc
 g_completion_free
index 2cfa40a..57ab509 100644 (file)
@@ -164,6 +164,57 @@ completion_check_cache (GCompletion* cmp,
   strncpy (*new_prefix + len, postfix, plen);
 }
 
+/**
+ * g_completion_complete_utf8:
+ * @cmp: the #GCompletion
+ * @prefix: the prefix string, typically used by the user, which is compared
+ *    with each of the items
+ * @new_prefix: if non-%NULL, returns the longest prefix which is common to all
+ *    items that matched @prefix, or %NULL if no items matched @prefix.
+ *    This string should be freed when no longer needed.
+ *
+ * Attempts to complete the string @prefix using the #GCompletion target items.
+ * In contrast to g_completion_complete(), this function returns the largest common
+ * prefix that is a valid UTF-8 string, omitting a possible common partial 
+ * character.
+ *
+ * You should use this function instead of g_completion_complete() if your 
+ * items are UTF-8 strings.
+ *
+ * Return value: the list of items whose strings begin with @prefix. This should
+ * not be changed.
+ *
+ * Since: 2.4
+ **/
+GList*
+g_completion_complete_utf8 (GCompletion  *cmp,
+                           const gchar  *prefix,
+                           gchar       **new_prefix)
+{
+  GList *list;
+  gchar *p, *q;
+
+  list = g_completion_complete (cmp, prefix, new_prefix);
+
+  if (*new_prefix)
+    {
+      p = *new_prefix + strlen (*new_prefix);
+      q = g_utf8_find_prev_char (*new_prefix, p);
+      
+      switch (g_utf8_get_char_validated (q, p - q))
+       {
+       case (gunichar)-2:
+       case (gunichar)-1:
+         *q = 0;
+         break;
+       default: ;
+       }
+
+    }
+
+  return list;
+}
+
 GList* 
 g_completion_complete (GCompletion* cmp,
                       const gchar* prefix,
index 3eb2710..2357d90 100644 (file)
@@ -66,6 +66,7 @@ endif
 test_programs =                                        \
        array-test                              \
        $(CXX_TEST)                             \
+       completion-test                         \
        date-test                               \
        dirname-test                            \
        file-test                               \
@@ -114,6 +115,7 @@ thread_ldadd = $(libgthread) $(G_THREAD_LIBS) $(progs_ldadd)
 module_ldadd = $(libgmodule) $(G_MODULE_LIBS) $(progs_ldadd)
 
 array_test_LDADD = $(progs_ldadd)
+completion_test_LDADD = $(progs_ldadd)
 date_test_LDADD = $(progs_ldadd)
 dirname_test_LDADD = $(progs_ldadd)
 file_test_LDADD = $(progs_ldadd)
diff --git a/tests/completion-test.c b/tests/completion-test.c
new file mode 100644 (file)
index 0000000..8805366
--- /dev/null
@@ -0,0 +1,60 @@
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GLib Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GLib at ftp://ftp.gtk.org/pub/gtk/. 
+ */
+#include <glib.h>
+
+int main (int argc, char *argv[])
+{
+  GCompletion *cmp;
+  GList *items;
+  gchar *prefix;
+  
+  cmp = g_completion_new (NULL);
+
+  items = NULL;
+  items = g_list_append (items, "a\302\243");
+  items = g_list_append (items, "a\302\244");
+  items = g_list_append (items, "bb");
+  items = g_list_append (items, "bc");
+  g_completion_add_items (cmp, items);
+
+  items = g_completion_complete (cmp, "a", &prefix);
+  g_assert (!strcmp ("a\302", prefix));
+  g_free (prefix);
+  
+  items = g_completion_complete_utf8 (cmp, "a", &prefix);
+  g_assert (!strcmp ("a", prefix));
+  g_free (prefix);
+
+  items = g_completion_complete (cmp, "b", &prefix);
+  g_assert (!strcmp ("b", prefix));
+  g_free (prefix);
+  
+  items = g_completion_complete_utf8 (cmp, "b", &prefix);
+  g_assert (!strcmp ("b", prefix));
+  g_free (prefix);
+
+  return 0;
+}