diff --git a/ChangeLog b/ChangeLog index 0261821507..6352b3f5c1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2004-08-14 Sven Neumann + + * plug-ins/help/domain.[ch]: allow to specify the location of the + index files independently from the base URL. + + * plug-ins/help/help.c: changed accordingly. + + * plug-ins/help/gimp-help-lookup.c: added command-line options to + specify base URI and root directory for index files. + 2004-08-14 Sven Neumann * plug-ins/help/locales.c (locales_parse): don't mess up the order diff --git a/plug-ins/help/domain.c b/plug-ins/help/domain.c index 38ff2da095..42a4c9e792 100644 --- a/plug-ins/help/domain.c +++ b/plug-ins/help/domain.c @@ -45,6 +45,7 @@ struct _HelpDomain { gchar *help_domain; gchar *help_uri; + gchar *help_root; GHashTable *help_locales; }; @@ -60,7 +61,8 @@ struct _HelpLocale /* local function prototypes */ static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri); + const gchar *domain_uri, + const gchar *domain_root); static void domain_free (HelpDomain *domain); static HelpLocale * domain_locale_new (const gchar *locale_id); @@ -89,7 +91,8 @@ static GHashTable *domain_hash = NULL; void domain_register (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { g_return_if_fail (domain_name != NULL); g_return_if_fail (domain_uri != NULL); @@ -105,7 +108,7 @@ domain_register (const gchar *domain_name, g_hash_table_insert (domain_hash, g_strdup (domain_name), - domain_new (domain_name, domain_uri)); + domain_new (domain_name, domain_uri, domain_root)); } HelpDomain * @@ -204,12 +207,24 @@ domain_exit (void) static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { HelpDomain *domain = g_new0 (HelpDomain, 1); domain->help_domain = g_strdup (domain_name); domain->help_uri = g_strdup (domain_uri); + domain->help_root = g_strdup (domain_root); + + if (domain_uri) + { + /* strip trailing slash */ + gint len = strlen (domain_uri); + + if (len && + domain_uri[len - 1] == '/') + domain->help_uri[len - 1] = '\0'; + } return domain; } @@ -224,6 +239,7 @@ domain_free (HelpDomain *domain) g_free (domain->help_domain); g_free (domain->help_uri); + g_free (domain->help_root); g_free (domain); } @@ -354,10 +370,9 @@ domain_locale_parse (HelpDomain *domain, { GMarkupParseContext *context; DomainParser *parser; - gchar *basedir; + GIOChannel *io; gchar *filename; gboolean success; - GIOChannel *io; g_return_val_if_fail (domain != NULL, FALSE); g_return_val_if_fail (locale != NULL, FALSE); @@ -374,8 +389,10 @@ domain_locale_parse (HelpDomain *domain, locale->help_missing = NULL; } - basedir = g_filename_from_uri (domain->help_uri, NULL, NULL); - if (! basedir) + if (! domain->help_root) + domain->help_root = g_filename_from_uri (domain->help_uri, NULL, NULL); + + if (! domain->help_root) { g_set_error (error, 0, 0, "Cannot determine location of gimp-help.xml from '%s'", @@ -383,17 +400,16 @@ domain_locale_parse (HelpDomain *domain, return FALSE; } - filename = g_build_filename (basedir, + filename = g_build_filename (domain->help_root, locale->locale_id, "gimp-help.xml", NULL); - g_free (basedir); #ifdef GIMP_HELP_DEBUG - g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", - locale->locale_id, - filename, - domain->help_domain); + g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", + locale->locale_id, + filename, + domain->help_domain); #endif io = g_io_channel_new_file (filename, "r", error); diff --git a/plug-ins/help/domain.h b/plug-ins/help/domain.h index 210a4d6f30..f0ba55a792 100644 --- a/plug-ins/help/domain.h +++ b/plug-ins/help/domain.h @@ -29,7 +29,8 @@ typedef struct _HelpDomain HelpDomain; void domain_register (const gchar *domain_name, - const gchar *domain_uri); + const gchar *domain_uri, + const gchar *domain_root); HelpDomain * domain_lookup (const gchar *domain_name); gchar * domain_map (HelpDomain *domain, diff --git a/plug-ins/help/gimp-help-lookup.c b/plug-ins/help/gimp-help-lookup.c index 03446f529c..1d39843d7a 100644 --- a/plug-ins/help/gimp-help-lookup.c +++ b/plug-ins/help/gimp-help-lookup.c @@ -40,12 +40,14 @@ static gchar * lookup (const gchar *help_domain, static void usage (const gchar *name) { - g_print ("gimp-help-lookup version %s\n\n", GIMP_VERSION); - g_print ("Looks up a help-id in the GIMP user manual.\n" + g_print ("gimp-help-lookup version %s\n", GIMP_VERSION); + g_print ("Looks up a help-id in the GIMP user manual.\n\n" "Usage: %s [options] [help-id]\n\n", name); g_print ("Valid options are:\n" " -h, --help Output this help.\n" " -v, --version Output version info.\n" + " -b, --base Speficies base URI.\n" + " -r, --root Speficies root directory for index files.\n" " -l, --lang Specifies help language.\n" "\n"); } @@ -55,9 +57,10 @@ gint main (gint argc, gchar *argv[]) { - const gchar *help_root = g_getenv (GIMP_HELP_ENV_URI); + const gchar *help_base = g_getenv (GIMP_HELP_ENV_URI); const gchar *help_locales = GIMP_HELP_DEFAULT_LOCALE; const gchar *help_id = GIMP_HELP_DEFAULT_ID; + const gchar *help_root = NULL; gchar *uri; gint i; @@ -73,25 +76,44 @@ main (gint argc, if (*opt == '-') opt++; - switch (*opt) + switch (g_ascii_tolower (*opt)) { - case 'l': - if (i + i < argc) - { - help_locales = argv[++i]; - break; - } - /* else fallthrough */ - case 'v': g_print ("gimp-help-lookup version %s\n", GIMP_VERSION); exit (EXIT_SUCCESS); + case 'b': + if (i + 1 < argc) + { + help_base = argv[++i]; + continue; + } + break; + + case 'r': + if (i + 1 < argc) + { + help_root = argv[++i]; + continue; + } + break; + + case 'l': + if (i + 1 < argc) + { + help_locales = argv[++i]; + continue; + } + break; + case 'h': - default: + case '?': usage (argv[0]); exit (EXIT_SUCCESS); } + + g_printerr ("Error parsing the command-line options, try --help\n"); + exit (EXIT_FAILURE); } else { @@ -99,13 +121,13 @@ main (gint argc, } } - if (help_root) - uri = g_strdup (help_root); + if (help_base) + uri = g_strdup (help_base); else uri = g_filename_to_uri (DATADIR G_DIR_SEPARATOR_S GIMP_HELP_PREFIX, NULL, NULL); - domain_register (GIMP_HELP_DEFAULT_DOMAIN, uri); + domain_register (GIMP_HELP_DEFAULT_DOMAIN, uri, help_root); g_free (uri); uri = lookup (GIMP_HELP_DEFAULT_DOMAIN, help_locales, help_id); diff --git a/plug-ins/help/gimphelp.c b/plug-ins/help/gimphelp.c index 38ff2da095..42a4c9e792 100644 --- a/plug-ins/help/gimphelp.c +++ b/plug-ins/help/gimphelp.c @@ -45,6 +45,7 @@ struct _HelpDomain { gchar *help_domain; gchar *help_uri; + gchar *help_root; GHashTable *help_locales; }; @@ -60,7 +61,8 @@ struct _HelpLocale /* local function prototypes */ static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri); + const gchar *domain_uri, + const gchar *domain_root); static void domain_free (HelpDomain *domain); static HelpLocale * domain_locale_new (const gchar *locale_id); @@ -89,7 +91,8 @@ static GHashTable *domain_hash = NULL; void domain_register (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { g_return_if_fail (domain_name != NULL); g_return_if_fail (domain_uri != NULL); @@ -105,7 +108,7 @@ domain_register (const gchar *domain_name, g_hash_table_insert (domain_hash, g_strdup (domain_name), - domain_new (domain_name, domain_uri)); + domain_new (domain_name, domain_uri, domain_root)); } HelpDomain * @@ -204,12 +207,24 @@ domain_exit (void) static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { HelpDomain *domain = g_new0 (HelpDomain, 1); domain->help_domain = g_strdup (domain_name); domain->help_uri = g_strdup (domain_uri); + domain->help_root = g_strdup (domain_root); + + if (domain_uri) + { + /* strip trailing slash */ + gint len = strlen (domain_uri); + + if (len && + domain_uri[len - 1] == '/') + domain->help_uri[len - 1] = '\0'; + } return domain; } @@ -224,6 +239,7 @@ domain_free (HelpDomain *domain) g_free (domain->help_domain); g_free (domain->help_uri); + g_free (domain->help_root); g_free (domain); } @@ -354,10 +370,9 @@ domain_locale_parse (HelpDomain *domain, { GMarkupParseContext *context; DomainParser *parser; - gchar *basedir; + GIOChannel *io; gchar *filename; gboolean success; - GIOChannel *io; g_return_val_if_fail (domain != NULL, FALSE); g_return_val_if_fail (locale != NULL, FALSE); @@ -374,8 +389,10 @@ domain_locale_parse (HelpDomain *domain, locale->help_missing = NULL; } - basedir = g_filename_from_uri (domain->help_uri, NULL, NULL); - if (! basedir) + if (! domain->help_root) + domain->help_root = g_filename_from_uri (domain->help_uri, NULL, NULL); + + if (! domain->help_root) { g_set_error (error, 0, 0, "Cannot determine location of gimp-help.xml from '%s'", @@ -383,17 +400,16 @@ domain_locale_parse (HelpDomain *domain, return FALSE; } - filename = g_build_filename (basedir, + filename = g_build_filename (domain->help_root, locale->locale_id, "gimp-help.xml", NULL); - g_free (basedir); #ifdef GIMP_HELP_DEBUG - g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", - locale->locale_id, - filename, - domain->help_domain); + g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", + locale->locale_id, + filename, + domain->help_domain); #endif io = g_io_channel_new_file (filename, "r", error); diff --git a/plug-ins/help/gimphelpdomain.c b/plug-ins/help/gimphelpdomain.c index 38ff2da095..42a4c9e792 100644 --- a/plug-ins/help/gimphelpdomain.c +++ b/plug-ins/help/gimphelpdomain.c @@ -45,6 +45,7 @@ struct _HelpDomain { gchar *help_domain; gchar *help_uri; + gchar *help_root; GHashTable *help_locales; }; @@ -60,7 +61,8 @@ struct _HelpLocale /* local function prototypes */ static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri); + const gchar *domain_uri, + const gchar *domain_root); static void domain_free (HelpDomain *domain); static HelpLocale * domain_locale_new (const gchar *locale_id); @@ -89,7 +91,8 @@ static GHashTable *domain_hash = NULL; void domain_register (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { g_return_if_fail (domain_name != NULL); g_return_if_fail (domain_uri != NULL); @@ -105,7 +108,7 @@ domain_register (const gchar *domain_name, g_hash_table_insert (domain_hash, g_strdup (domain_name), - domain_new (domain_name, domain_uri)); + domain_new (domain_name, domain_uri, domain_root)); } HelpDomain * @@ -204,12 +207,24 @@ domain_exit (void) static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { HelpDomain *domain = g_new0 (HelpDomain, 1); domain->help_domain = g_strdup (domain_name); domain->help_uri = g_strdup (domain_uri); + domain->help_root = g_strdup (domain_root); + + if (domain_uri) + { + /* strip trailing slash */ + gint len = strlen (domain_uri); + + if (len && + domain_uri[len - 1] == '/') + domain->help_uri[len - 1] = '\0'; + } return domain; } @@ -224,6 +239,7 @@ domain_free (HelpDomain *domain) g_free (domain->help_domain); g_free (domain->help_uri); + g_free (domain->help_root); g_free (domain); } @@ -354,10 +370,9 @@ domain_locale_parse (HelpDomain *domain, { GMarkupParseContext *context; DomainParser *parser; - gchar *basedir; + GIOChannel *io; gchar *filename; gboolean success; - GIOChannel *io; g_return_val_if_fail (domain != NULL, FALSE); g_return_val_if_fail (locale != NULL, FALSE); @@ -374,8 +389,10 @@ domain_locale_parse (HelpDomain *domain, locale->help_missing = NULL; } - basedir = g_filename_from_uri (domain->help_uri, NULL, NULL); - if (! basedir) + if (! domain->help_root) + domain->help_root = g_filename_from_uri (domain->help_uri, NULL, NULL); + + if (! domain->help_root) { g_set_error (error, 0, 0, "Cannot determine location of gimp-help.xml from '%s'", @@ -383,17 +400,16 @@ domain_locale_parse (HelpDomain *domain, return FALSE; } - filename = g_build_filename (basedir, + filename = g_build_filename (domain->help_root, locale->locale_id, "gimp-help.xml", NULL); - g_free (basedir); #ifdef GIMP_HELP_DEBUG - g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", - locale->locale_id, - filename, - domain->help_domain); + g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", + locale->locale_id, + filename, + domain->help_domain); #endif io = g_io_channel_new_file (filename, "r", error); diff --git a/plug-ins/help/gimphelplocale.c b/plug-ins/help/gimphelplocale.c index 38ff2da095..42a4c9e792 100644 --- a/plug-ins/help/gimphelplocale.c +++ b/plug-ins/help/gimphelplocale.c @@ -45,6 +45,7 @@ struct _HelpDomain { gchar *help_domain; gchar *help_uri; + gchar *help_root; GHashTable *help_locales; }; @@ -60,7 +61,8 @@ struct _HelpLocale /* local function prototypes */ static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri); + const gchar *domain_uri, + const gchar *domain_root); static void domain_free (HelpDomain *domain); static HelpLocale * domain_locale_new (const gchar *locale_id); @@ -89,7 +91,8 @@ static GHashTable *domain_hash = NULL; void domain_register (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { g_return_if_fail (domain_name != NULL); g_return_if_fail (domain_uri != NULL); @@ -105,7 +108,7 @@ domain_register (const gchar *domain_name, g_hash_table_insert (domain_hash, g_strdup (domain_name), - domain_new (domain_name, domain_uri)); + domain_new (domain_name, domain_uri, domain_root)); } HelpDomain * @@ -204,12 +207,24 @@ domain_exit (void) static HelpDomain * domain_new (const gchar *domain_name, - const gchar *domain_uri) + const gchar *domain_uri, + const gchar *domain_root) { HelpDomain *domain = g_new0 (HelpDomain, 1); domain->help_domain = g_strdup (domain_name); domain->help_uri = g_strdup (domain_uri); + domain->help_root = g_strdup (domain_root); + + if (domain_uri) + { + /* strip trailing slash */ + gint len = strlen (domain_uri); + + if (len && + domain_uri[len - 1] == '/') + domain->help_uri[len - 1] = '\0'; + } return domain; } @@ -224,6 +239,7 @@ domain_free (HelpDomain *domain) g_free (domain->help_domain); g_free (domain->help_uri); + g_free (domain->help_root); g_free (domain); } @@ -354,10 +370,9 @@ domain_locale_parse (HelpDomain *domain, { GMarkupParseContext *context; DomainParser *parser; - gchar *basedir; + GIOChannel *io; gchar *filename; gboolean success; - GIOChannel *io; g_return_val_if_fail (domain != NULL, FALSE); g_return_val_if_fail (locale != NULL, FALSE); @@ -374,8 +389,10 @@ domain_locale_parse (HelpDomain *domain, locale->help_missing = NULL; } - basedir = g_filename_from_uri (domain->help_uri, NULL, NULL); - if (! basedir) + if (! domain->help_root) + domain->help_root = g_filename_from_uri (domain->help_uri, NULL, NULL); + + if (! domain->help_root) { g_set_error (error, 0, 0, "Cannot determine location of gimp-help.xml from '%s'", @@ -383,17 +400,16 @@ domain_locale_parse (HelpDomain *domain, return FALSE; } - filename = g_build_filename (basedir, + filename = g_build_filename (domain->help_root, locale->locale_id, "gimp-help.xml", NULL); - g_free (basedir); #ifdef GIMP_HELP_DEBUG - g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", - locale->locale_id, - filename, - domain->help_domain); + g_printerr ("help (%s): parsing '%s' for domain \"%s\"\n", + locale->locale_id, + filename, + domain->help_domain); #endif io = g_io_channel_new_file (filename, "r", error); diff --git a/plug-ins/help/help.c b/plug-ins/help/help.c index cc73aee32e..9f3c94803c 100644 --- a/plug-ins/help/help.c +++ b/plug-ins/help/help.c @@ -157,11 +157,11 @@ run (const gchar *name, { gint i; - domain_register (GIMP_HELP_DEFAULT_DOMAIN, default_domain_uri); + domain_register (GIMP_HELP_DEFAULT_DOMAIN, default_domain_uri, NULL); for (i = 0; i < num_domain_names; i++) { - domain_register (domain_names[i], domain_uris[i]); + domain_register (domain_names[i], domain_uris[i], NULL); } } else