X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fglib-compile-schemas.c;h=e42949b85d540ba7c52c264faacce3bdee7da5d8;hb=2a53b4d0e2c98a14aedf31e38f0ad1fb2e8fe26f;hp=a301dff9a071258acb4d98d5514feb2edb7ccfa8;hpb=631d0c3534661e549f7df18fbb9832bdf19c5eaf;p=platform%2Fupstream%2Fglib.git
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c
index a301dff..e42949b 100644
--- a/gio/glib-compile-schemas.c
+++ b/gio/glib-compile-schemas.c
@@ -12,15 +12,12 @@
* 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
@@ -30,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
{
@@ -54,7 +67,7 @@ enum_state_free (gpointer data)
g_slice_free (EnumState, state);
}
-EnumState *
+static EnumState *
enum_state_new (gboolean is_flags)
{
EnumState *state;
@@ -464,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;
}
@@ -630,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;
@@ -762,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;
}
@@ -770,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;
}
@@ -780,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;
}
@@ -882,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;
}
@@ -1090,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;
}
}
@@ -1106,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;
}
@@ -1172,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);
@@ -1418,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 */
@@ -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;
}