removed gimp_scanner_parse_string_list() since the format it read wasn't

2003-03-10  Sven Neumann  <sven@gimp.org>

	* app/config/gimpscanner.[ch]: removed gimp_scanner_parse_string_list()
	since the format it read wasn't proper s-expressions syntax.

	* app/config/gimpconfigwriter.c: a couple of minor cleanups.

	* app/gui/color-history.[ch]
	* app/gui/session.c
	* app/widgets/gimpdialogfactory.[ch]: use GimpConfigWriter to
	write the sessionrc. Had to do some minor changes to the file
	format.
This commit is contained in:
Sven Neumann
2003-03-10 19:01:07 +00:00
committed by Sven Neumann
parent a85179e735
commit 3ab2e64809
12 changed files with 199 additions and 239 deletions

View File

@ -1,3 +1,16 @@
2003-03-10 Sven Neumann <sven@gimp.org>
* app/config/gimpscanner.[ch]: removed gimp_scanner_parse_string_list()
since the format it read wasn't proper s-expressions syntax.
* app/config/gimpconfigwriter.c: a couple of minor cleanups.
* app/gui/color-history.[ch]
* app/gui/session.c
* app/widgets/gimpdialogfactory.[ch]: use GimpConfigWriter to
write the sessionrc. Had to do some minor changes to the file
format.
2003-03-10 Michael Natterer <mitch@gimp.org> 2003-03-10 Michael Natterer <mitch@gimp.org>
* app/core/gimppalette.[ch]: added GimpData::duplicate() * app/core/gimppalette.[ch]: added GimpData::duplicate()

View File

@ -24,6 +24,7 @@
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -128,6 +129,7 @@ gimp_config_writer_open (GimpConfigWriter *writer,
const gchar *name) const gchar *name)
{ {
g_return_if_fail (writer != NULL); g_return_if_fail (writer != NULL);
g_return_if_fail (name != NULL);
if (writer->error) if (writer->error)
return; return;
@ -160,9 +162,11 @@ gimp_config_writer_print (GimpConfigWriter *writer,
if (len < 0) if (len < 0)
len = strlen (string); len = strlen (string);
if (len)
{
g_string_append_c (writer->buffer, ' '); g_string_append_c (writer->buffer, ' ');
g_string_append_len (writer->buffer, string, len); g_string_append_len (writer->buffer, string, len);
}
} }
void void
@ -179,12 +183,11 @@ gimp_config_writer_printf (GimpConfigWriter *writer,
if (writer->error) if (writer->error)
return; return;
g_string_append_c (writer->buffer, ' ');
va_start (args, format); va_start (args, format);
buffer = g_strdup_vprintf (format, args); buffer = g_strdup_vprintf (format, args);
va_end (args); va_end (args);
g_string_append_c (writer->buffer, ' ');
g_string_append (writer->buffer, buffer); g_string_append (writer->buffer, buffer);
g_free (buffer); g_free (buffer);
@ -245,7 +248,8 @@ gimp_config_writer_close (GimpConfigWriter *writer)
g_string_append_c (writer->buffer, '\n'); g_string_append_c (writer->buffer, '\n');
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0) if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
g_string_truncate (writer->buffer, 0); g_string_truncate (writer->buffer, 0);
@ -301,7 +305,8 @@ gimp_config_writer_linefeed (GimpConfigWriter *writer)
if (writer->buffer->len == 0) if (writer->buffer->len == 0)
{ {
if (write (writer->fd, "\n", 1) < 0) if (write (writer->fd, "\n", 1) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
} }
else else
@ -328,7 +333,8 @@ gimp_config_writer_comment (GimpConfigWriter *writer,
gimp_config_serialize_comment (writer->buffer, comment); gimp_config_serialize_comment (writer->buffer, comment);
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0) if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
g_string_truncate (writer->buffer, 0); g_string_truncate (writer->buffer, 0);

View File

@ -336,67 +336,6 @@ gimp_scanner_parse_color (GScanner *scanner,
return (token == G_TOKEN_NONE); return (token == G_TOKEN_NONE);
} }
gboolean
gimp_scanner_parse_string_list (GScanner *scanner,
GList **dest)
{
GTokenType token;
GList *list = NULL;
token = G_TOKEN_LEFT_PAREN;
while (g_scanner_peek_next_token (scanner) == token)
{
token = g_scanner_get_next_token (scanner);
switch (token)
{
case G_TOKEN_LEFT_PAREN:
token = G_TOKEN_STRING;
break;
case G_TOKEN_STRING:
do
{
list = g_list_append (list, g_strdup (scanner->value.v_string));
token = g_scanner_peek_next_token (scanner);
if (token == G_TOKEN_STRING)
g_scanner_get_next_token (scanner);
}
while (token == G_TOKEN_STRING);
token = G_TOKEN_RIGHT_PAREN;
break;
case G_TOKEN_RIGHT_PAREN:
token = G_TOKEN_NONE; /* indicates success */
goto finish;
default: /* do nothing */
break;
}
}
finish:
if (token != G_TOKEN_NONE)
{
g_list_foreach (list, (GFunc) g_free, NULL);
g_list_free (list);
list = NULL;
g_scanner_get_next_token (scanner);
g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
_("fatal parse error"), TRUE);
}
else
{
*dest = list;
}
return (token == G_TOKEN_NONE);
}
/* private functions */ /* private functions */

View File

@ -42,8 +42,6 @@ gboolean gimp_scanner_parse_float (GScanner *scanner,
gdouble *dest); gdouble *dest);
gboolean gimp_scanner_parse_color (GScanner *scanner, gboolean gimp_scanner_parse_color (GScanner *scanner,
GimpRGB *dest); GimpRGB *dest);
gboolean gimp_scanner_parse_string_list (GScanner *scanner,
GList **dest);
#endif /* __GIMP_SCANNER_H__ */ #endif /* __GIMP_SCANNER_H__ */

View File

@ -27,6 +27,8 @@
#include "gui-types.h" #include "gui-types.h"
#include "config/gimpconfigwriter.h"
#include "color-history.h" #include "color-history.h"
@ -55,14 +57,14 @@ color_history_add_from_rc (GimpRGB *color)
} }
void void
color_history_write (FILE *fp) color_history_write (GimpConfigWriter *writer)
{ {
gint i; gint i;
if (! color_history_initialized) if (! color_history_initialized)
color_history_init (); color_history_init ();
fprintf (fp, "(color-history"); gimp_config_writer_open (writer, "color-history");
for (i = 0; i < COLOR_HISTORY_SIZE; i++) for (i = 0; i < COLOR_HISTORY_SIZE; i++)
{ {
@ -77,11 +79,13 @@ color_history_write (FILE *fp)
g_ascii_formatd (buf[3], g_ascii_formatd (buf[3],
G_ASCII_DTOSTR_BUF_SIZE, "%f", color_history[i].a); G_ASCII_DTOSTR_BUF_SIZE, "%f", color_history[i].a);
fprintf (fp, "\n (color-rgba %s %s %s %s)", gimp_config_writer_open (writer, "color-rgba");
gimp_config_writer_printf (writer, "%s %s %s %s",
buf[0], buf[1], buf[2], buf[3]); buf[0], buf[1], buf[2], buf[3]);
gimp_config_writer_close (writer);
} }
fprintf (fp, ")\n\n"); gimp_config_writer_close (writer);
} }
void void

View File

@ -22,8 +22,6 @@
#ifndef __COLOR_HISTORY_H__ #ifndef __COLOR_HISTORY_H__
#define __COLOR_HISTORY_H__ #define __COLOR_HISTORY_H__
#include <stdio.h> /* FILE */
#define COLOR_HISTORY_SIZE 16 #define COLOR_HISTORY_SIZE 16
@ -34,7 +32,7 @@ void color_history_get (gint index,
GimpRGB *rgb); GimpRGB *rgb);
void color_history_add_from_rc (GimpRGB *color); void color_history_add_from_rc (GimpRGB *color);
void color_history_write (FILE *fp); void color_history_write (GimpConfigWriter *writer);
#endif /* __COLOR_HISTORY_H__ */ #endif /* __COLOR_HISTORY_H__ */

View File

@ -34,6 +34,7 @@
#include "core/gimp.h" #include "core/gimp.h"
#include "config/gimpconfigwriter.h"
#include "config/gimpscanner.h" #include "config/gimpscanner.h"
#include "widgets/gimpdialogfactory.h" #include "widgets/gimpdialogfactory.h"
@ -48,7 +49,8 @@
static GTokenType session_info_deserialize (GScanner *scanner, static GTokenType session_info_deserialize (GScanner *scanner,
Gimp *gimp); Gimp *gimp);
static GTokenType session_info_dock_deserialize (GScanner *scanner,
GimpSessionInfo *info);
/* public functions */ /* public functions */
@ -62,7 +64,9 @@ enum
SESSION_INFO_SIZE, SESSION_INFO_SIZE,
SESSION_INFO_OPEN, SESSION_INFO_OPEN,
SESSION_INFO_AUX, SESSION_INFO_AUX,
SESSION_INFO_DOCK SESSION_INFO_DOCK,
SESSION_INFO_DOCK_BOOK
}; };
void void
@ -106,6 +110,9 @@ session_init (Gimp *gimp)
g_scanner_scope_add_symbol (scanner, SESSION_INFO, "dock", g_scanner_scope_add_symbol (scanner, SESSION_INFO, "dock",
GINT_TO_POINTER (SESSION_INFO_DOCK)); GINT_TO_POINTER (SESSION_INFO_DOCK));
g_scanner_scope_add_symbol (scanner, SESSION_INFO_DOCK, "book",
GINT_TO_POINTER (SESSION_INFO_DOCK_BOOK));
token = G_TOKEN_LEFT_PAREN; token = G_TOKEN_LEFT_PAREN;
while (g_scanner_peek_next_token (scanner) == token) while (g_scanner_peek_next_token (scanner) == token)
@ -191,35 +198,42 @@ session_restore (Gimp *gimp)
void void
session_save (Gimp *gimp) session_save (Gimp *gimp)
{ {
GimpConfigWriter *writer;
gchar *filename; gchar *filename;
FILE *fp;
g_return_if_fail (GIMP_IS_GIMP (gimp)); g_return_if_fail (GIMP_IS_GIMP (gimp));
filename = gimp_personal_rc_file ("sessionrc"); filename = gimp_personal_rc_file ("sessionrc");
fp = fopen (filename, "wt"); writer = gimp_config_writer_new (filename,
g_free (filename); TRUE,
if (!fp) "GIMP sessionrc\n\n"
"This file takes session-specific info "
"(that is info, you want to keep between "
"two gimp-sessions). You are not supposed "
"to edit it manually, but of course you "
"can do.\n"
"This file will be entirely rewritten "
"every time you quit the gimp. If this "
"file isn't found, defaults are used.",
NULL);
if (!writer)
return; return;
fprintf (fp, ("# GIMP sessionrc\n" gimp_dialog_factories_session_save (writer);
"# This file takes session-specific info (that is info,\n" gimp_config_writer_linefeed (writer);
"# you want to keep between two gimp-sessions). You are\n"
"# not supposed to edit it manually, but of course you\n"
"# can do. This file will be entirely rewritten every time\n"
"# you quit the gimp. If this file isn't found, defaults\n"
"# are used.\n\n"));
gimp_dialog_factories_session_save (fp);
/* save last tip shown */ /* save last tip shown */
fprintf (fp, "(last-tip-shown %d)\n\n", gimp_config_writer_open (writer, "last-tip-shown");
gimp_config_writer_printf (writer, "%d",
GIMP_GUI_CONFIG (gimp->config)->last_tip + 1); GIMP_GUI_CONFIG (gimp->config)->last_tip + 1);
gimp_config_writer_close (writer);
gimp_config_writer_linefeed (writer);
color_history_write (fp); color_history_write (writer);
fclose (fp); gimp_config_writer_finish (writer, "end of sessionrc", NULL);
} }
@ -234,6 +248,7 @@ session_info_deserialize (GScanner *scanner,
GTokenType token; GTokenType token;
gchar *factory_name; gchar *factory_name;
gchar *entry_name; gchar *entry_name;
gchar *string;
token = G_TOKEN_STRING; token = G_TOKEN_STRING;
@ -301,29 +316,22 @@ session_info_deserialize (GScanner *scanner,
break; break;
case SESSION_INFO_AUX: case SESSION_INFO_AUX:
if (! gimp_scanner_parse_string_list (scanner, &info->aux_info)) while (gimp_scanner_parse_string (scanner, &string))
{ info->aux_info = g_list_append (info->aux_info, string);
token = G_TOKEN_NONE;
goto error;
}
break; break;
case SESSION_INFO_DOCK: case SESSION_INFO_DOCK:
if (info->toplevel_entry) if (info->toplevel_entry)
goto error; goto error;
while (g_scanner_peek_next_token (scanner) == G_TOKEN_LEFT_PAREN) g_scanner_set_scope (scanner, SESSION_INFO_DOCK);
{ token = session_info_dock_deserialize (scanner, info);
GList *list = NULL;
if (! gimp_scanner_parse_string_list (scanner, &list)) if (token == G_TOKEN_LEFT_PAREN)
{ g_scanner_set_scope (scanner, SESSION_INFO);
token = G_TOKEN_NONE; else
goto error; goto error;
}
info->sub_dialogs = g_list_append (info->sub_dialogs, list);
}
break; break;
default: default:
@ -370,3 +378,54 @@ session_info_deserialize (GScanner *scanner,
return token; return token;
} }
static GTokenType
session_info_dock_deserialize (GScanner *scanner,
GimpSessionInfo *info)
{
GList *list;
gchar *string;
GTokenType token;
token = G_TOKEN_LEFT_PAREN;
while (g_scanner_peek_next_token (scanner) == token)
{
token = g_scanner_get_next_token (scanner);
switch (token)
{
case G_TOKEN_LEFT_PAREN:
token = G_TOKEN_SYMBOL;
break;
case G_TOKEN_SYMBOL:
switch (GPOINTER_TO_INT (scanner->value.v_symbol))
{
case SESSION_INFO_DOCK_BOOK:
list = NULL;
while (gimp_scanner_parse_string (scanner, &string))
list = g_list_append (list, string);
if (list)
info->sub_dialogs = g_list_append (info->sub_dialogs, list);
token = G_TOKEN_RIGHT_PAREN;
break;
default:
return token;
}
break;
case G_TOKEN_RIGHT_PAREN:
token = G_TOKEN_LEFT_PAREN;
break;
default:
break;
}
}
return token;
}

View File

@ -32,6 +32,8 @@
#include "core/gimpcontext.h" #include "core/gimpcontext.h"
#include "config/gimpconfigwriter.h"
#include "gimpcontainerview.h" #include "gimpcontainerview.h"
#include "gimpcontainerview-utils.h" #include "gimpcontainerview-utils.h"
#include "gimpcursor.h" #include "gimpcursor.h"
@ -75,7 +77,7 @@ static void gimp_dialog_factory_finalize (GObject *object
static void gimp_dialog_factories_save_foreach (gchar *name, static void gimp_dialog_factories_save_foreach (gchar *name,
GimpDialogFactory *factory, GimpDialogFactory *factory,
FILE *fp); GimpConfigWriter *writer);
static void gimp_dialog_factories_restore_foreach (gchar *name, static void gimp_dialog_factories_restore_foreach (gchar *name,
GimpDialogFactory *factory, GimpDialogFactory *factory,
gpointer data); gpointer data);
@ -886,17 +888,17 @@ gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
} }
void void
gimp_dialog_factories_session_save (FILE *file) gimp_dialog_factories_session_save (GimpConfigWriter *writer)
{ {
GimpDialogFactoryClass *factory_class; GimpDialogFactoryClass *factory_class;
g_return_if_fail (file != NULL); g_return_if_fail (writer != NULL);
factory_class = g_type_class_peek (GIMP_TYPE_DIALOG_FACTORY); factory_class = g_type_class_peek (GIMP_TYPE_DIALOG_FACTORY);
g_hash_table_foreach (factory_class->factories, g_hash_table_foreach (factory_class->factories,
(GHFunc) gimp_dialog_factories_save_foreach, (GHFunc) gimp_dialog_factories_save_foreach,
file); writer);
} }
void void
@ -999,7 +1001,7 @@ gimp_dialog_factories_unidle (void)
static void static void
gimp_dialog_factories_save_foreach (gchar *name, gimp_dialog_factories_save_foreach (gchar *name,
GimpDialogFactory *factory, GimpDialogFactory *factory,
FILE *fp) GimpConfigWriter *writer)
{ {
GList *list; GList *list;
@ -1022,22 +1024,31 @@ gimp_dialog_factories_save_foreach (gchar *name,
gimp_dialog_factory_get_window_info (info->widget, info); gimp_dialog_factory_get_window_info (info->widget, info);
if (info->toplevel_entry) if (info->toplevel_entry)
{
dialog_name = info->toplevel_entry->identifier; dialog_name = info->toplevel_entry->identifier;
}
else else
{
dialog_name = "dock"; dialog_name = "dock";
}
fprintf (fp, "(session-info \"%s\" \"%s\"\n", name, dialog_name); gimp_config_writer_open (writer, "session-info");
fprintf (fp, " (position %d %d)", info->x, info->y); gimp_config_writer_string (writer, name);
gimp_config_writer_string (writer, dialog_name);
gimp_config_writer_open (writer, "position");
gimp_config_writer_printf (writer, "%d %d", info->x, info->y);
gimp_config_writer_close (writer);
if (info->width > 0 && info->height > 0) if (info->width > 0 && info->height > 0)
fprintf (fp, "\n (size %d %d)", info->width, info->height); {
gimp_config_writer_open (writer, "size");
gimp_config_writer_printf (writer, "%d %d",
info->width, info->height);
gimp_config_writer_close (writer);
}
if (info->open) if (info->open)
fprintf (fp, "\n (open-on-exit)"); {
gimp_config_writer_open (writer, "open-on-exit");
gimp_config_writer_close (writer);
}
/* save aux-info */ /* save aux-info */
if (info->widget) if (info->widget)
@ -1048,21 +1059,12 @@ gimp_dialog_factories_save_foreach (gchar *name,
{ {
GList *aux; GList *aux;
fprintf (fp, "\n (aux-info ("); gimp_config_writer_open (writer, "aux-info");
for (aux = info->aux_info; aux; aux = g_list_next (aux)) for (aux = info->aux_info; aux; aux = g_list_next (aux))
{ gimp_config_writer_string (writer, (gchar *) aux->data);
gchar *str;
str = (gchar *) aux->data; gimp_config_writer_close (writer);
if (aux->prev)
fprintf (fp, " \"%s\"", str);
else
fprintf (fp, "\"%s\"", str);
}
fprintf (fp, "))");
g_list_foreach (info->aux_info, (GFunc) g_free, NULL); g_list_foreach (info->aux_info, (GFunc) g_free, NULL);
g_list_free (info->aux_info); g_list_free (info->aux_info);
@ -1077,7 +1079,7 @@ gimp_dialog_factories_save_foreach (gchar *name,
dock = GIMP_DOCK (info->widget); dock = GIMP_DOCK (info->widget);
fprintf (fp, "\n (dock "); gimp_config_writer_open (writer, "dock");
for (books = dock->dockbooks; books; books = g_list_next (books)) for (books = dock->dockbooks; books; books = g_list_next (books))
{ {
@ -1087,7 +1089,7 @@ gimp_dialog_factories_save_foreach (gchar *name,
dockbook = (GimpDockbook *) books->data; dockbook = (GimpDockbook *) books->data;
fprintf (fp, "("); gimp_config_writer_open (writer, "book");
children = gtk_container_get_children (GTK_CONTAINER (dockbook)); children = gtk_container_get_children (GTK_CONTAINER (dockbook));
@ -1106,6 +1108,8 @@ gimp_dialog_factories_save_foreach (gchar *name,
GimpContainerView *view; GimpContainerView *view;
gint preview_size = -1; gint preview_size = -1;
gimp_config_writer_linefeed (writer);
view = gimp_container_view_get_by_dockable (dockable); view = gimp_container_view_get_by_dockable (dockable);
if (view && view->preview_size >= GIMP_PREVIEW_SIZE_TINY) if (view && view->preview_size >= GIMP_PREVIEW_SIZE_TINY)
@ -1116,29 +1120,27 @@ gimp_dialog_factories_save_foreach (gchar *name,
if (preview_size > 0 && if (preview_size > 0 &&
preview_size != entry->preview_size) preview_size != entry->preview_size)
{ {
fprintf (fp, "\"%s@%d\"", gimp_config_writer_printf (writer, "\"%s@%d\"",
entry->identifier, preview_size); entry->identifier,
preview_size);
} }
else else
{ {
fprintf (fp, "\"%s\"", gimp_config_writer_printf (writer, "\"%s\"",
entry->identifier); entry->identifier);
} }
if (pages->next)
fprintf (fp, " ");
} }
} }
g_list_free (children); g_list_free (children);
fprintf (fp, ")%s", books->next ? "\n " : ""); gimp_config_writer_close (writer); /* book */
} }
fprintf (fp, ")"); gimp_config_writer_close (writer); /* dock */
} }
fprintf (fp, ")\n\n"); gimp_config_writer_close (writer); /* session-info */
} }
} }

View File

@ -23,8 +23,6 @@
#define __GIMP_DIALOG_FACTORY_H__ #define __GIMP_DIALOG_FACTORY_H__
#include <stdio.h>
#include "core/gimpobject.h" #include "core/gimpobject.h"
@ -145,7 +143,7 @@ void gimp_dialog_factory_add_dialog (GimpDialogFactory *factory,
void gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory, void gimp_dialog_factory_remove_dialog (GimpDialogFactory *factory,
GtkWidget *dialog); GtkWidget *dialog);
void gimp_dialog_factories_session_save (FILE *file); void gimp_dialog_factories_session_save (GimpConfigWriter *writer);
void gimp_dialog_factories_session_restore (void); void gimp_dialog_factories_session_restore (void);
void gimp_dialog_factories_session_clear (void); void gimp_dialog_factories_session_clear (void);

View File

@ -24,6 +24,7 @@
#include <errno.h> #include <errno.h>
#include <fcntl.h> #include <fcntl.h>
#include <stdio.h> #include <stdio.h>
#include <string.h>
#ifdef HAVE_UNISTD_H #ifdef HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -128,6 +129,7 @@ gimp_config_writer_open (GimpConfigWriter *writer,
const gchar *name) const gchar *name)
{ {
g_return_if_fail (writer != NULL); g_return_if_fail (writer != NULL);
g_return_if_fail (name != NULL);
if (writer->error) if (writer->error)
return; return;
@ -160,9 +162,11 @@ gimp_config_writer_print (GimpConfigWriter *writer,
if (len < 0) if (len < 0)
len = strlen (string); len = strlen (string);
if (len)
{
g_string_append_c (writer->buffer, ' '); g_string_append_c (writer->buffer, ' ');
g_string_append_len (writer->buffer, string, len); g_string_append_len (writer->buffer, string, len);
}
} }
void void
@ -179,12 +183,11 @@ gimp_config_writer_printf (GimpConfigWriter *writer,
if (writer->error) if (writer->error)
return; return;
g_string_append_c (writer->buffer, ' ');
va_start (args, format); va_start (args, format);
buffer = g_strdup_vprintf (format, args); buffer = g_strdup_vprintf (format, args);
va_end (args); va_end (args);
g_string_append_c (writer->buffer, ' ');
g_string_append (writer->buffer, buffer); g_string_append (writer->buffer, buffer);
g_free (buffer); g_free (buffer);
@ -245,7 +248,8 @@ gimp_config_writer_close (GimpConfigWriter *writer)
g_string_append_c (writer->buffer, '\n'); g_string_append_c (writer->buffer, '\n');
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0) if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
g_string_truncate (writer->buffer, 0); g_string_truncate (writer->buffer, 0);
@ -301,7 +305,8 @@ gimp_config_writer_linefeed (GimpConfigWriter *writer)
if (writer->buffer->len == 0) if (writer->buffer->len == 0)
{ {
if (write (writer->fd, "\n", 1) < 0) if (write (writer->fd, "\n", 1) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
} }
else else
@ -328,7 +333,8 @@ gimp_config_writer_comment (GimpConfigWriter *writer,
gimp_config_serialize_comment (writer->buffer, comment); gimp_config_serialize_comment (writer->buffer, comment);
if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0) if (write (writer->fd, writer->buffer->str, writer->buffer->len) < 0)
g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_set_error (&writer->error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE,
g_strerror (errno)); g_strerror (errno));
g_string_truncate (writer->buffer, 0); g_string_truncate (writer->buffer, 0);

View File

@ -336,67 +336,6 @@ gimp_scanner_parse_color (GScanner *scanner,
return (token == G_TOKEN_NONE); return (token == G_TOKEN_NONE);
} }
gboolean
gimp_scanner_parse_string_list (GScanner *scanner,
GList **dest)
{
GTokenType token;
GList *list = NULL;
token = G_TOKEN_LEFT_PAREN;
while (g_scanner_peek_next_token (scanner) == token)
{
token = g_scanner_get_next_token (scanner);
switch (token)
{
case G_TOKEN_LEFT_PAREN:
token = G_TOKEN_STRING;
break;
case G_TOKEN_STRING:
do
{
list = g_list_append (list, g_strdup (scanner->value.v_string));
token = g_scanner_peek_next_token (scanner);
if (token == G_TOKEN_STRING)
g_scanner_get_next_token (scanner);
}
while (token == G_TOKEN_STRING);
token = G_TOKEN_RIGHT_PAREN;
break;
case G_TOKEN_RIGHT_PAREN:
token = G_TOKEN_NONE; /* indicates success */
goto finish;
default: /* do nothing */
break;
}
}
finish:
if (token != G_TOKEN_NONE)
{
g_list_foreach (list, (GFunc) g_free, NULL);
g_list_free (list);
list = NULL;
g_scanner_get_next_token (scanner);
g_scanner_unexp_token (scanner, token, NULL, NULL, NULL,
_("fatal parse error"), TRUE);
}
else
{
*dest = list;
}
return (token == G_TOKEN_NONE);
}
/* private functions */ /* private functions */

View File

@ -42,8 +42,6 @@ gboolean gimp_scanner_parse_float (GScanner *scanner,
gdouble *dest); gdouble *dest);
gboolean gimp_scanner_parse_color (GScanner *scanner, gboolean gimp_scanner_parse_color (GScanner *scanner,
GimpRGB *dest); GimpRGB *dest);
gboolean gimp_scanner_parse_string_list (GScanner *scanner,
GList **dest);
#endif /* __GIMP_SCANNER_H__ */ #endif /* __GIMP_SCANNER_H__ */