forked from AuroraMiddleware/gtk
Drop deprecated pango-utils api
Copy the few parsing functions we need.
This commit is contained in:
parent
1e1af62bee
commit
9950764f12
@ -314,6 +314,147 @@ 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)
|
||||
{
|
||||
@ -400,14 +541,13 @@ gtk_im_module_initialize (void)
|
||||
return;
|
||||
}
|
||||
|
||||
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
while (!have_error && pango_read_line (file, line_buf))
|
||||
while (!have_error && read_line (file, line_buf))
|
||||
{
|
||||
const char *p;
|
||||
|
||||
|
||||
p = line_buf->str;
|
||||
|
||||
if (!pango_skip_space (&p))
|
||||
if (!skip_space (&p))
|
||||
{
|
||||
/* Blank line marking the end of a module
|
||||
*/
|
||||
@ -417,7 +557,7 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
module = NULL;
|
||||
infos = NULL;
|
||||
}
|
||||
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -427,11 +567,9 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
*/
|
||||
module = g_object_new (GTK_TYPE_IM_MODULE, NULL);
|
||||
|
||||
if (!pango_scan_string (&p, tmp_buf) ||
|
||||
pango_skip_space (&p))
|
||||
if (!scan_string (&p, tmp_buf) || skip_space (&p))
|
||||
{
|
||||
g_warning ("Error parsing context info in '%s'\n %s",
|
||||
filename, line_buf->str);
|
||||
g_warning ("Error parsing context info in '%s'\n %s", filename, line_buf->str);
|
||||
have_error = TRUE;
|
||||
}
|
||||
|
||||
@ -444,45 +582,44 @@ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
|
||||
else
|
||||
{
|
||||
GtkIMContextInfo *info = g_new0 (GtkIMContextInfo, 1);
|
||||
|
||||
|
||||
/* Read information about a context type
|
||||
*/
|
||||
if (!pango_scan_string (&p, tmp_buf))
|
||||
if (!scan_string (&p, tmp_buf))
|
||||
goto context_error;
|
||||
info->context_id = g_strdup (tmp_buf->str);
|
||||
|
||||
if (!pango_scan_string (&p, tmp_buf))
|
||||
if (!scan_string (&p, tmp_buf))
|
||||
goto context_error;
|
||||
info->context_name = g_strdup (tmp_buf->str);
|
||||
|
||||
if (!pango_scan_string (&p, tmp_buf))
|
||||
if (!scan_string (&p, tmp_buf))
|
||||
goto context_error;
|
||||
info->domain = g_strdup (tmp_buf->str);
|
||||
|
||||
if (!pango_scan_string (&p, tmp_buf))
|
||||
if (!scan_string (&p, tmp_buf))
|
||||
goto context_error;
|
||||
|
||||
info->domain_dirname = g_strdup (tmp_buf->str);
|
||||
#ifdef G_OS_WIN32
|
||||
correct_localedir_prefix ((char **) &info->domain_dirname);
|
||||
#endif
|
||||
|
||||
if (!pango_scan_string (&p, tmp_buf))
|
||||
if (!scan_string (&p, tmp_buf))
|
||||
goto context_error;
|
||||
info->default_locales = g_strdup (tmp_buf->str);
|
||||
|
||||
if (pango_skip_space (&p))
|
||||
if (skip_space (&p))
|
||||
goto context_error;
|
||||
|
||||
infos = g_slist_prepend (infos, info);
|
||||
continue;
|
||||
|
||||
context_error:
|
||||
g_warning ("Error parsing context info in '%s'\n %s",
|
||||
filename, line_buf->str);
|
||||
g_warning ("Error parsing context info in '%s'\n %s", filename, line_buf->str);
|
||||
have_error = TRUE;
|
||||
}
|
||||
}
|
||||
G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
|
||||
if (have_error)
|
||||
{
|
||||
@ -499,8 +636,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS
|
||||
}
|
||||
|
||||
static gint
|
||||
compare_gtkimcontextinfo_name(const GtkIMContextInfo **a,
|
||||
const GtkIMContextInfo **b)
|
||||
compare_gtkimcontextinfo_name (const GtkIMContextInfo **a,
|
||||
const GtkIMContextInfo **b)
|
||||
{
|
||||
return g_utf8_collate ((*a)->context_name, (*b)->context_name);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user