X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fglib-compile-schemas.c;h=e42949b85d540ba7c52c264faacce3bdee7da5d8;hb=2a53b4d0e2c98a14aedf31e38f0ad1fb2e8fe26f;hp=038a51c96c043967bb51304ab2f7f830833efcde;hpb=ec3653be00725556625072e39e032e8b9e7c7e34;p=platform%2Fupstream%2Fglib.git diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index 038a51c..e42949b 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -12,9 +12,7 @@ * 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 */ @@ -29,13 +27,29 @@ #include #include -#ifdef HAVE_UNISTD_H -#include -#endif - #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 { @@ -53,7 +67,7 @@ enum_state_free (gpointer data) g_slice_free (EnumState, state); } -EnumState * +static EnumState * enum_state_new (gboolean is_flags) { EnumState *state; @@ -629,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; @@ -761,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; } @@ -769,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; } @@ -779,7 +810,7 @@ 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; } @@ -1089,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; } } @@ -1105,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; } @@ -1171,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); @@ -1417,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 */ @@ -1498,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 */ @@ -1604,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, @@ -1667,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); @@ -1800,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) @@ -1826,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); @@ -1854,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); @@ -1882,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); @@ -1929,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; @@ -1939,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,7 +2002,6 @@ main (int argc, char **argv) }; #ifdef G_OS_WIN32 - extern gchar *_glib_get_locale_dir (void); gchar *tmp; #endif