void ibus_engine_desc_output (IBusEngineDesc *desc, GString *output, gint indent) { g_string_append_indent (output, indent); g_string_append (output, "<engine>\n"); #define OUTPUT_ENTRY(field, element) \ { \ gchar *escape_text = g_markup_escape_text (desc->field ? desc->field : "", -1); \ g_string_append_indent (output, indent + 1); \ g_string_append_printf (output, "<"element">%s</"element">\n", \ escape_text); \ g_free (escape_text); \ } #define OUTPUT_ENTRY_1(name) OUTPUT_ENTRY(name, #name) OUTPUT_ENTRY_1(name); OUTPUT_ENTRY_1(longname); OUTPUT_ENTRY_1(description); OUTPUT_ENTRY_1(language); OUTPUT_ENTRY_1(license); OUTPUT_ENTRY_1(author); OUTPUT_ENTRY_1(icon); OUTPUT_ENTRY_1(layout); g_string_append_indent (output, indent + 1); g_string_append_printf (output, "<rank>%u</rank>\n", desc->rank); #undef OUTPUT_ENTRY #undef OUTPUT_ENTRY_1 g_string_append_indent (output, indent); g_string_append (output, "</engine>\n"); }
static gboolean bus_registry_save_cache (BusRegistry *registry) { g_assert (BUS_IS_REGISTRY (registry)); gchar *cachedir; gchar *filename; GString *output; GList *p; FILE *pf; cachedir = g_build_filename (g_get_user_cache_dir (), "ibus", "bus", NULL); filename = g_build_filename (cachedir, "registry.xml", NULL); g_mkdir_with_parents (cachedir, 0775); pf = g_fopen (filename, "w"); g_free (filename); g_free (cachedir); if (pf == NULL) { g_warning ("create registry.xml failed"); return FALSE; } output = g_string_new (""); g_string_append (output, "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"); g_string_append (output, "<!-- \n" " This file was generated by ibus-daemon. Please don't modify it.\n" " -->\n"); g_string_append (output, "<ibus-registry>\n"); if (registry->observed_paths) { g_string_append_indent (output, 1); g_string_append (output, "<observed-paths>\n"); for (p = registry->observed_paths; p != NULL; p = p->next) { ibus_observed_path_output ((IBusObservedPath *)p->data, output, 2); } g_string_append_indent (output, 1); g_string_append (output, "</observed-paths>\n"); } if (registry->components) { g_string_append_indent (output, 1); g_string_append (output, "<components>\n"); for (p = registry->components; p != NULL; p = p->next) { ibus_component_output ((IBusComponent *)p->data, output, 2); } g_string_append_indent (output, 1); g_string_append (output, "</components>\n"); } g_string_append (output, "</ibus-registry>\n"); fwrite (output->str, output->len, 1, pf); g_string_free (output, TRUE); fclose (pf); return TRUE; }
void ibus_observed_path_output (IBusObservedPath *path, GString *output, gint indent) { g_assert (IBUS_IS_OBSERVED_PATH (path)); g_assert (output); g_string_append_indent (output, indent); g_string_append_printf (output, "<path mtime=\"%ld\" >%s</path>\n", path->mtime, path->path); }