New function which works like g_completion_complete(), but strips a

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.
This commit is contained in:
Matthias Clasen 2004-02-04 23:54:17 +00:00 committed by Matthias Clasen
parent 999a87a19a
commit dd394749f9
11 changed files with 184 additions and 0 deletions

View 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.

View 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.

View 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.

View 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.

View 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.

View 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.

View 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:

View 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

View 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,

View 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)

60
tests/completion-test.c Normal file
View File

@ -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;
}