summaryrefslogtreecommitdiff
path: root/gtk/gtkimmodule.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2016-03-26 18:12:16 -0400
committerMatthias Clasen <mclasen@redhat.com>2016-03-26 18:12:16 -0400
commit6994fe03ee3f533583b6717ad979937143157c9f (patch)
tree1bd87834432cfe26879ef066438ec9f26e12df1e /gtk/gtkimmodule.c
parente2d89b9931f45df01308be236d7deecf515faf49 (diff)
downloadgtk+-6994fe03ee3f533583b6717ad979937143157c9f.tar.gz
Split off copied pango utils in their own source
This will make it easier to use them in more than one place.
Diffstat (limited to 'gtk/gtkimmodule.c')
-rw-r--r--gtk/gtkimmodule.c160
1 files changed, 10 insertions, 150 deletions
diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c
index 065d5ba3e8..24a5f62302 100644
--- a/gtk/gtkimmodule.c
+++ b/gtk/gtkimmodule.c
@@ -35,6 +35,7 @@
#include "gtkimcontextsimple.h"
#include "gtksettings.h"
#include "gtkprivate.h"
+#include "gtkutilsprivate.h"
#include "gtkintl.h"
#ifdef GDK_WINDOWING_X11
@@ -331,147 +332,6 @@ add_builtin_module (const gchar *module_name,
return module;
}
-static gboolean
-scan_string (const char **pos, GString *out)
-{
- const char *p = *pos, *q = *pos;
- char *tmp, *tmp2;
- gboolean quoted;
-
- while (g_ascii_isspace (*p))
- p++;
-
- if (!*p)
- return FALSE;
- else if (*p == '"')
- {
- p++;
- quoted = FALSE;
- for (q = p; (*q != '"') || quoted; q++)
- {
- if (!*q)
- return FALSE;
- quoted = (*q == '\\') && !quoted;
- }
-
- tmp = g_strndup (p, q - p);
- tmp2 = g_strcompress (tmp);
- g_string_truncate (out, 0);
- g_string_append (out, tmp2);
- g_free (tmp);
- g_free (tmp2);
- }
-
- q++;
- *pos = q;
-
- return TRUE;
-}
-
-static gboolean
-skip_space (const char **pos)
-{
- const char *p = *pos;
-
- while (g_ascii_isspace (*p))
- p++;
-
- *pos = p;
-
- return !(*p == '\0');
-}
-
-static gint
-read_line (FILE *stream, GString *str)
-{
- gboolean quoted = FALSE;
- gboolean comment = FALSE;
- int n_read = 0;
- int lines = 1;
-
- flockfile (stream);
-
- g_string_truncate (str, 0);
-
- while (1)
- {
- int c;
-
- c = getc_unlocked (stream);
-
- if (c == EOF)
- {
- if (quoted)
- g_string_append_c (str, '\\');
-
- goto done;
- }
- else
- n_read++;
-
- if (quoted)
- {
- quoted = FALSE;
-
- switch (c)
- {
- case '#':
- g_string_append_c (str, '#');
- break;
- case '\r':
- case '\n':
- {
- int next_c = getc_unlocked (stream);
-
- if (!(next_c == EOF ||
- (c == '\r' && next_c == '\n') ||
- (c == '\n' && next_c == '\r')))
- ungetc (next_c, stream);
-
- lines++;
-
- break;
- }
- default:
- g_string_append_c (str, '\\');
- g_string_append_c (str, c);
- }
- }
- else
- {
- switch (c)
- {
- case '#':
- comment = TRUE;
- break;
- case '\\':
- if (!comment)
- quoted = TRUE;
- break;
- case '\n':
- {
- int next_c = getc_unlocked (stream);
-
- if (!(c == EOF ||
- (c == '\r' && next_c == '\n') ||
- (c == '\n' && next_c == '\r')))
- ungetc (next_c, stream);
-
- goto done;
- }
- default:
- if (!comment)
- g_string_append_c (str, c);
- }
- }
- }
-
- done:
- funlockfile (stream);
-
- return (n_read > 0) ? lines : 0;
-}
-
static void
gtk_im_module_initialize (void)
{
@@ -558,13 +418,13 @@ gtk_im_module_initialize (void)
return;
}
- while (!have_error && read_line (file, line_buf))
+ while (!have_error && gtk_read_line (file, line_buf))
{
const char *p;
p = line_buf->str;
- if (!skip_space (&p))
+ if (!gtk_skip_space (&p))
{
/* Blank line marking the end of a module
*/
@@ -584,7 +444,7 @@ gtk_im_module_initialize (void)
*/
module = g_object_new (GTK_TYPE_IM_MODULE, NULL);
- if (!scan_string (&p, tmp_buf) || skip_space (&p))
+ if (!gtk_scan_string (&p, tmp_buf) || gtk_skip_space (&p))
{
g_warning ("Error parsing context info in '%s'\n %s", filename, line_buf->str);
have_error = TRUE;
@@ -602,19 +462,19 @@ gtk_im_module_initialize (void)
/* Read information about a context type
*/
- if (!scan_string (&p, tmp_buf))
+ if (!gtk_scan_string (&p, tmp_buf))
goto context_error;
info->context_id = g_strdup (tmp_buf->str);
- if (!scan_string (&p, tmp_buf))
+ if (!gtk_scan_string (&p, tmp_buf))
goto context_error;
info->context_name = g_strdup (tmp_buf->str);
- if (!scan_string (&p, tmp_buf))
+ if (!gtk_scan_string (&p, tmp_buf))
goto context_error;
info->domain = g_strdup (tmp_buf->str);
- if (!scan_string (&p, tmp_buf))
+ if (!gtk_scan_string (&p, tmp_buf))
goto context_error;
info->domain_dirname = g_strdup (tmp_buf->str);
@@ -622,11 +482,11 @@ gtk_im_module_initialize (void)
correct_localedir_prefix ((char **) &info->domain_dirname);
#endif
- if (!scan_string (&p, tmp_buf))
+ if (!gtk_scan_string (&p, tmp_buf))
goto context_error;
info->default_locales = g_strdup (tmp_buf->str);
- if (skip_space (&p))
+ if (gtk_skip_space (&p))
goto context_error;
infos = g_slist_prepend (infos, info);