summaryrefslogtreecommitdiff
path: root/demos/icon-browser/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'demos/icon-browser/main.c')
-rw-r--r--demos/icon-browser/main.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/demos/icon-browser/main.c b/demos/icon-browser/main.c
index 7dd5eee550..9bd58c4dbe 100644
--- a/demos/icon-browser/main.c
+++ b/demos/icon-browser/main.c
@@ -1,8 +1,84 @@
+#include <string.h>
#include <gtk/gtk.h>
#include <iconbrowserapp.h>
+#include <fuzzy/dzl-fuzzy-index-builder.h>
+
+static void
+build_fuzzy_index (void)
+{
+ DzlFuzzyIndexBuilder *builder;
+ GFile *file;
+ GKeyFile *kf;
+ char *data;
+ gsize length;
+ char **groups;
+ int i;
+ GFile *outfile;
+ GError *error = NULL;
+
+ builder = dzl_fuzzy_index_builder_new ();
+ dzl_fuzzy_index_builder_set_case_sensitive (builder, FALSE);
+
+ file = g_file_new_for_uri ("resource:/org/gtk/iconbrowser/gtk/icon.list");
+ g_file_load_contents (file, NULL, &data, &length, NULL, NULL);
+
+ kf = g_key_file_new ();
+ g_key_file_load_from_data (kf, data, length, G_KEY_FILE_NONE, NULL);
+
+ groups = g_key_file_get_groups (kf, &length);
+ for (i = 0; i < length; i++)
+ {
+ const char *context;
+ char **keys;
+ gsize len;
+ int j;
+
+ context = groups[i];
+
+ keys = g_key_file_get_keys (kf, context, &len, NULL);
+ for (j = 0; j < len; j++)
+ {
+ const char *key = keys[j];
+ char *symbolic;
+
+ if (strcmp (key, "Name") == 0 || strcmp (key, "Description") == 0)
+ continue;
+
+ dzl_fuzzy_index_builder_insert (builder, key, g_variant_new_string (key));
+
+ symbolic = g_strconcat (key, "-symbolic", NULL);
+
+ dzl_fuzzy_index_builder_insert (builder, symbolic, g_variant_new_string (symbolic));
+
+ g_free (symbolic);
+ }
+ g_strfreev (keys);
+ }
+ g_strfreev (groups);
+
+ outfile = g_file_new_for_path ("icon.index");
+
+ if (!dzl_fuzzy_index_builder_write (builder, outfile, G_PRIORITY_DEFAULT, NULL, &error))
+ {
+ g_printerr ("%s\n", error->message);
+ g_error_free (error);
+ }
+ else
+ {
+ g_print ("icon.index written\n");
+ }
+
+ g_object_unref (builder);
+}
int
main (int argc, char *argv[])
{
+ if (argc == 2 && strcmp (argv[1], "--generate-index") == 0)
+ {
+ build_fuzzy_index ();
+ return 0;
+ }
+
return g_application_run (G_APPLICATION (icon_browser_app_new ()), argc, argv);
}