X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fglib-compile-schemas.c;h=e42949b85d540ba7c52c264faacce3bdee7da5d8;hb=356a3987cee7ceddcb3fe623edf0bd2881895add;hp=7a684ad6b8adaa8e0856dc9853552817ebecabdb;hpb=3498d58289ed833aeae59bfc76db0f5fa5840481;p=platform%2Fupstream%2Fglib.git diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index 7a684ad..e42949b 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -12,28 +12,44 @@ * 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. + * License along with this library; if not, see . * * Author: Ryan Lortie */ /* Prologue {{{1 */ -#define _GNU_SOURCE #include "config.h" #include -#include +#include + #include -#include #include - -#include +#include #include "gvdb/gvdb-builder.h" #include "strinfo.c" +#ifdef G_OS_WIN32 +#include "glib/glib-private.h" +#endif + +static void +strip_string (GString *string) +{ + gint i; + + for (i = 0; g_ascii_isspace (string->str[i]); i++); + g_string_erase (string, 0, i); + + if (string->len > 0) + { + /* len > 0, so there must be at least one non-whitespace character */ + for (i = string->len - 1; g_ascii_isspace (string->str[i]); i--); + g_string_truncate (string, i + 1); + } +} + /* Handling of {{{1 */ typedef struct { @@ -51,7 +67,7 @@ enum_state_free (gpointer data) g_slice_free (EnumState, state); } -EnumState * +static EnumState * enum_state_new (gboolean is_flags) { EnumState *state; @@ -461,7 +477,7 @@ key_state_start_choices (KeyState *state, { g_set_error_literal (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - " can not be specified for keys " + " cannot be specified for keys " "tagged as having an enumerated type"); return; } @@ -627,6 +643,23 @@ key_state_serialise (KeyState *state) /* translation */ if (state->l10n) { + /* We are going to store the untranslated default for + * runtime translation according to the current locale. + * We need to strip leading and trailing whitespace from + * the string so that it's exactly the same as the one + * that ended up in the .po file for translation. + * + * We want to do this so that + * + * + * ['a', 'b', 'c'] + * + * + * ends up in the .po file like "['a', 'b', 'c']", + * omitting the extra whitespace at the start and end. + */ + strip_string (state->unparsed_default_value); + if (state->l10n_context) { gint len; @@ -759,7 +792,7 @@ is_valid_keyname (const gchar *key, { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, _("invalid name '%s': invalid character '%c'; " - "only lowercase letters, numbers and dash ('-') " + "only lowercase letters, numbers and hyphen ('-') " "are permitted."), key, key[i]); return FALSE; } @@ -767,7 +800,7 @@ is_valid_keyname (const gchar *key, if (key[i] == '-' && key[i + 1] == '-') { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _("invalid name '%s': two successive dashes ('--') " + _("invalid name '%s': two successive hyphens ('--') " "are not permitted."), key); return FALSE; } @@ -777,14 +810,14 @@ is_valid_keyname (const gchar *key, { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, _("invalid name '%s': the last character may not be a " - "dash ('-')."), key); + "hyphen ('-')."), key); return FALSE; } - if (i > 32) + if (i > 1024) { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _("invalid name '%s': maximum length is 32"), key); + _("invalid name '%s': maximum length is 1024"), key); return FALSE; } @@ -879,7 +912,7 @@ schema_state_add_key (SchemaState *state, { g_set_error_literal (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _("can not add keys to a 'list-of' schema")); + _("cannot add keys to a 'list-of' schema")); return NULL; } @@ -1087,8 +1120,8 @@ parse_state_start_schema (ParseState *state, { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _(" extends not yet " - "existing schema '%s'"), id, extends_name); + _(" extends not yet existing " + "schema '%s'"), id, extends_name); return; } } @@ -1103,8 +1136,8 @@ parse_state_start_schema (ParseState *state, { g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _(" is list of not yet " - "existing schema '%s'"), id, list_of); + _(" is list of not yet existing " + "schema '%s'"), id, list_of); return; } @@ -1169,6 +1202,12 @@ parse_state_start_schema (ParseState *state, return; } + if (path && (g_str_has_prefix (path, "/apps/") || + g_str_has_prefix (path, "/desktop/") || + g_str_has_prefix (path, "/system/"))) + g_printerr ("warning: Schema '%s' has path '%s'. Paths starting with " + "'/apps/', '/desktop/' or '/system/' are deprecated.\n", id, path); + state->schema_state = schema_state_new (path, gettext_domain, extends, extends_name, list_of); @@ -1415,7 +1454,7 @@ start_element (GMarkupParseContext *context, element_name, container); else g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_UNKNOWN_ELEMENT, - _("Element <%s> not allowed at toplevel"), element_name); + _("Element <%s> not allowed at the top level"), element_name); } /* 2}}} */ /* End element {{{2 */ @@ -1442,9 +1481,6 @@ static void schema_state_end (SchemaState **state_ptr, GError **error) { - SchemaState *state; - - state = *state_ptr; *state_ptr = NULL; } @@ -1499,21 +1535,38 @@ text (GMarkupParseContext *context, GError **error) { ParseState *state = user_data; - gsize i; - for (i = 0; i < text_len; i++) - if (!g_ascii_isspace (text[i])) - { - if (state->string) - g_string_append_len (state->string, text, text_len); - - else - g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, - _("text may not appear inside <%s>"), - g_markup_parse_context_get_element (context)); + if (state->string) + { + /* we are expecting a string, so store the text data. + * + * we store the data verbatim here and deal with whitespace + * later on. there are two reasons for that: + * + * 1) whitespace is handled differently depending on the tag + * type. + * + * 2) we could do leading whitespace removal by refusing to + * insert it into state->string if it's at the start, but for + * trailing whitespace, we have no idea if there is another + * text() call coming or not. + */ + g_string_append_len (state->string, text, text_len); + } + else + { + /* string is not expected: accept (and ignore) pure whitespace */ + gsize i; - break; - } + for (i = 0; i < text_len; i++) + if (!g_ascii_isspace (text[i])) + { + g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT, + _("text may not appear inside <%s>"), + g_markup_parse_context_get_element (context)); + break; + } + } } /* Write to GVDB {{{1 */ @@ -1605,7 +1658,7 @@ output_schema (gpointer key, if (state->list_of) gvdb_hash_table_insert_string (data.pair.table, ".list-of", - state->extends_name); + state->list_of); if (data.l10n) gvdb_hash_table_insert_string (data.pair.table, @@ -1668,7 +1721,9 @@ parse_gschema_files (gchar **files, } context = g_markup_parse_context_new (&parser, - G_MARKUP_PREFIX_ERROR_POSITION, + G_MARKUP_TREAT_CDATA_AS_TEXT | + G_MARKUP_PREFIX_ERROR_POSITION | + G_MARKUP_IGNORE_QUALIFIED, &state, NULL); @@ -1801,8 +1856,8 @@ set_overrides (GHashTable *schema_table, if (state == NULL) { - fprintf (stderr, _("No such key `%s' in schema `%s' as " - "specified in override file `%s'"), + fprintf (stderr, _("No such key '%s' in schema '%s' as " + "specified in override file '%s'"), key, group, filename); if (!strict) @@ -1827,9 +1882,9 @@ set_overrides (GHashTable *schema_table, if (value == NULL) { - fprintf (stderr, _("error parsing key `%s' in schema `%s' " - "as specified in override file `%s': " - "%s. "), + fprintf (stderr, _("error parsing key '%s' in schema '%s' " + "as specified in override file '%s': " + "%s."), key, group, filename, error->message); g_clear_error (&error); @@ -1855,8 +1910,8 @@ set_overrides (GHashTable *schema_table, g_variant_compare (value, state->maximum) > 0) { fprintf (stderr, - _("override for key `%s' in schema `%s' in " - "override file `%s' is out of the range " + _("override for key '%s' in schema '%s' in " + "override file '%s' is outside the range " "given in the schema"), key, group, filename); @@ -1883,8 +1938,8 @@ set_overrides (GHashTable *schema_table, if (!is_valid_choices (value, state->strinfo)) { fprintf (stderr, - _("override for key `%s' in schema `%s' in " - "override file `%s' is not in the list " + _("override for key '%s' in schema '%s' in " + "override file '%s' is not in the list " "of valid choices"), key, group, filename); @@ -1930,7 +1985,6 @@ main (int argc, char **argv) gchar *srcdir; gchar *targetdir = NULL; gchar *target; - gboolean uninstall = FALSE; gboolean dry_run = FALSE; gboolean strict = FALSE; gchar **schema_files = NULL; @@ -1940,7 +1994,6 @@ main (int argc, char **argv) { "targetdir", 0, 0, G_OPTION_ARG_FILENAME, &targetdir, N_("where to store the gschemas.compiled file"), N_("DIRECTORY") }, { "strict", 0, 0, G_OPTION_ARG_NONE, &strict, N_("Abort on any errors in schemas"), NULL }, { "dry-run", 0, 0, G_OPTION_ARG_NONE, &dry_run, N_("Do not write the gschema.compiled file"), NULL }, - { "uninstall", 0, 0, G_OPTION_ARG_NONE, &uninstall, N_("This option will be removed soon.") }, { "allow-any-name", 0, 0, G_OPTION_ARG_NONE, &allow_any_name, N_("Do not enforce key name restrictions") }, /* These options are only for use in the gschema-compile tests */ @@ -1948,11 +2001,15 @@ main (int argc, char **argv) { NULL } }; +#ifdef G_OS_WIN32 + gchar *tmp; +#endif + setlocale (LC_ALL, ""); textdomain (GETTEXT_PACKAGE); + #ifdef G_OS_WIN32 - extern gchar *_glib_get_locale_dir (void); - gchar *tmp = _glib_get_locale_dir (); + tmp = _glib_get_locale_dir (); bindtextdomain (GETTEXT_PACKAGE, tmp); g_free (tmp); #else @@ -2021,13 +2078,13 @@ main (int argc, char **argv) if (files->len == 0) { - fprintf (stderr, _("No schema files found: ")); + fprintf (stdout, _("No schema files found: ")); if (g_unlink (target)) - fprintf (stderr, _("doing nothing.\n")); + fprintf (stdout, _("doing nothing.\n")); else - fprintf (stderr, _("removed existing output file.\n")); + fprintf (stdout, _("removed existing output file.\n")); return 0; }