/** * gimp_config_writer_comment: * @writer: a #GimpConfigWriter * @comment: the comment to write (ASCII only) * * Appends the @comment to @str and inserts linebreaks and hash-marks to * format it as a comment. Note that this function does not handle non-ASCII * characters. * * Since: GIMP 2.4 **/ void gimp_config_writer_comment (GimpConfigWriter *writer, const gchar *comment) { const gchar *s; gboolean comment_mode; gint i, len, space; #define LINE_LENGTH 75 g_return_if_fail (writer != NULL); if (writer->error) return; g_return_if_fail (writer->depth == 0); if (!comment) return; comment_mode = writer->comment; gimp_config_writer_comment_mode (writer, TRUE); len = strlen (comment); while (len > 0) { for (s = comment, i = 0, space = 0; *s != '\n' && (i <= LINE_LENGTH || space == 0) && i < len; s++, i++) { if (g_ascii_isspace (*s)) space = i; } if (i > LINE_LENGTH && space && *s != '\n') i = space; g_string_append_len (writer->buffer, comment, i); i++; comment += i; len -= i; if (len > 0) gimp_config_writer_newline (writer); } gimp_config_writer_comment_mode (writer, comment_mode); gimp_config_writer_newline (writer); if (writer->depth == 0) gimp_config_writer_flush (writer); #undef LINE_LENGTH }
void gimp_config_writer_linefeed (GimpConfigWriter *writer) { g_return_if_fail (writer != NULL); if (writer->error) return; if (writer->output && writer->buffer->len == 0 && !writer->comment) { gsize bytes_written; GError *error = NULL; if (! g_output_stream_write_all (writer->output, "\n", 1, &bytes_written, NULL, &error)) { g_set_error (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, _("Error writing to '%s': %s"), writer->file ? gimp_file_get_utf8_name (writer->file) : "output stream", error->message); g_clear_error (&error); } } else { gimp_config_writer_newline (writer); } }
/** * gimp_config_writer_open: * @writer: a #GimpConfigWriter * @name: name of the element to open * * This function writes the opening parenthese followed by @name. * It also increases the indentation level and sets a mark that * can be used by gimp_config_writer_revert(). * * Since: GIMP 2.4 **/ void gimp_config_writer_open (GimpConfigWriter *writer, const gchar *name) { g_return_if_fail (writer != NULL); g_return_if_fail (name != NULL); if (writer->error) return; /* store the current buffer length so we can revert to this state */ writer->marker = writer->buffer->len; if (writer->depth > 0) gimp_config_writer_newline (writer); writer->depth++; g_string_append_printf (writer->buffer, "(%s", name); }
void gimp_config_writer_linefeed (GimpConfigWriter *writer) { g_return_if_fail (writer != NULL); if (writer->error) return; if (writer->buffer->len == 0 && !writer->comment) { if (write (writer->fd, "\n", 1) < 0) g_set_error_literal (&writer->error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_WRITE, g_strerror (errno)); } else { gimp_config_writer_newline (writer); } }
/** * gimp_config_writer_comment_mode: * @writer: a #GimpConfigWriter * @enable: %TRUE to enable comment mode, %FALSE to disable it * * This function toggles whether the @writer should create commented * or uncommented output. This feature is used to generate the * system-wide installed gimprc that documents the default settings. * * Since comments have to start at the beginning of a line, this * function will insert a newline if necessary. * * Since: GIMP 2.4 **/ void gimp_config_writer_comment_mode (GimpConfigWriter *writer, gboolean enable) { g_return_if_fail (writer != NULL); if (writer->error) return; enable = (enable ? TRUE : FALSE); if (writer->comment == enable) return; writer->comment = enable; if (enable) { if (writer->buffer->len == 0) g_string_append_len (writer->buffer, "# ", 2); else gimp_config_writer_newline (writer); } }