gboolean xml_reader_move_to_attribute (XmlReader *reader, const gchar *name) { g_return_val_if_fail (XML_IS_READER (reader), FALSE); return (xmlTextReaderMoveToAttribute (reader->xml, CHAR_TO_XML (name)) == 1); }
/** * xml_writer_write_start_element_with_ns: * @writer: A #XmlWriter * @name: element name * @prefix: namespace prefix or NULL * @ns: namespace uri or NULL * * Start an xml element with namespace support. */ void xml_writer_write_start_element_with_ns (XmlWriter *writer, const gchar *name, const gchar *prefix, const gchar *ns) { XmlWriterPrivate *priv; g_return_if_fail (XML_IS_WRITER (writer)); priv = writer->priv; if (priv->writer) xmlTextWriterStartElementNS (priv->writer, CHAR_TO_XML (prefix), CHAR_TO_XML (name), CHAR_TO_XML (ns)); }
gchar * xml_reader_get_attribute (XmlReader *reader, const gchar *name) { g_return_val_if_fail (XML_IS_READER (reader), NULL); g_return_val_if_fail (reader->xml != NULL, NULL); RETURN_STRDUP_AND_XMLFREE (xmlTextReaderGetAttribute (reader->xml, CHAR_TO_XML (name))); }
/** * xml_writer_write_string: * @writer: A #XmlWriter * @value: a string * * Writes @string to the output */ void xml_writer_write_string (XmlWriter *writer, const gchar *value) { XmlWriterPrivate *priv; g_return_if_fail (XML_IS_WRITER (writer)); priv = writer->priv; if (priv->writer) xmlTextWriterWriteString (priv->writer, CHAR_TO_XML (value)); }
/** * xml_writer_write_start_attribute: * @writer: A #XmlWriter * @name: attribute name * * Starts an xml attribute on the current element */ void xml_writer_write_start_attribute (XmlWriter *writer, const gchar *name) { XmlWriterPrivate *priv; g_return_if_fail (XML_IS_WRITER (writer)); priv = writer->priv; if (priv->writer) xmlTextWriterStartAttribute (priv->writer, CHAR_TO_XML (name)); }
static gboolean gstyle_palette_xml_get_header (xmlTextReaderPtr reader, gchar **id, gchar **name, gchar **domain) { g_assert (reader != NULL); g_assert (id != NULL); g_assert (name != NULL); g_assert (domain != NULL); *id = *name = *domain = NULL; if (xmlTextReaderRead(reader) == 1 && xmlTextReaderNodeType (reader) == XML_READER_TYPE_ELEMENT && !g_strcmp0 (XML_TO_CHAR (xmlTextReaderConstName (reader)), "palette") && xmlTextReaderDepth (reader) == 0) { *id = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("id"))); *name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("name"))); if (*name == NULL) { *name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("_name"))); *domain = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("gettext-domain"))); } if (gstyle_str_empty0 (*id) || gstyle_utf8_is_spaces (*id)) { g_warning ("Palette '%s'has an empty or NULL id\n", *name); return FALSE; } if (gstyle_utf8_is_spaces (*name)) g_clear_pointer (name, g_free); } return (*id != NULL); }
static GstyleColor * gstyle_palette_xml_get_color (xmlTextReaderPtr reader) { GstyleColor *color = NULL; g_autofree gchar *name; g_autofree gchar *value; g_assert (reader != NULL); if (xmlTextReaderNodeType (reader) == XML_READER_TYPE_ELEMENT && !g_strcmp0 (XML_TO_CHAR (xmlTextReaderConstName (reader)), "color") && xmlTextReaderDepth (reader) == 1) { name = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("name"))); if (gstyle_utf8_is_spaces (name)) g_clear_pointer (&name, g_free); value = strdup_and_xmlfree (xmlTextReaderGetAttribute (reader, CHAR_TO_XML ("value"))); if (!gstyle_str_empty0 (value)) color = gstyle_color_new_from_string (name, value); } return color; }
/** * gstyle_palette_save_to_xml: * @self: a #GstylePalette * @file: a #GFile * @error: (nullable): a #GError location or %NULL * * Save a palette to Gnome-Builder .xml palette format. * * Returns: %TRUE if succesfull, %FALSE otherwise. */ gboolean gstyle_palette_save_to_xml (GstylePalette *self, GFile *file, GError **error) { g_autofree gchar *file_path = NULL; const gchar *id; const gchar *name; xmlDocPtr doc; xmlNodePtr root_node; xmlNodePtr palette_node; xmlNodePtr color_node; gint n_colors; gint succes; gchar *header = "Copyright (C) 2016 GNOME Builder Team at irc.gimp.net/#gnome-builder\n" \ "This program is free software: you can redistribute it and/or modify\n" \ "it under the terms of the GNU General Public License as published by\n" \ "the Free Software Foundation, either version 3 of the License, or\n" \ "(at your option) any later version.\n\n" \ "This program is distributed in the hope that it will be useful,\n" \ "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" \ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" \ "GNU General Public License for more details.\n\n" \ "You should have received a copy of the GNU General Public License\n" \ "along with this program. If not, see <http://www.gnu.org/licenses/>\n"; g_return_val_if_fail (GSTYLE_IS_PALETTE (self), FALSE); g_return_val_if_fail (G_IS_FILE (file), FALSE); doc = xmlNewDoc(CHAR_TO_XML ("1.0")); root_node = xmlNewDocComment (doc, CHAR_TO_XML (header)); xmlDocSetRootElement(doc, root_node); palette_node = xmlNewNode (NULL, CHAR_TO_XML ("palette")); xmlAddSibling (root_node, palette_node); id = gstyle_palette_get_id (self); name = gstyle_palette_get_name (self); xmlNewProp (palette_node, CHAR_TO_XML ("id"), CHAR_TO_XML (id)); if (self->gettext_domain) { xmlNewProp (palette_node, CHAR_TO_XML ("_name"), CHAR_TO_XML (name)); xmlNewProp (palette_node, CHAR_TO_XML ("gettext-domain"), CHAR_TO_XML (self->gettext_domain)); } else xmlNewProp (palette_node, CHAR_TO_XML ("name"), CHAR_TO_XML (name)); n_colors = gstyle_palette_get_len (self); for (gint i = 0; i < n_colors; ++i) { const GstyleColor *color; const gchar *color_name; g_autofree gchar *color_string = NULL; color = gstyle_palette_get_color_at_index (self, i); color_name = gstyle_color_get_name ((GstyleColor *)color); if (gstyle_color_get_kind ((GstyleColor *)color) == GSTYLE_COLOR_KIND_PREDEFINED) color_string = gstyle_color_to_string ((GstyleColor *)color, GSTYLE_COLOR_KIND_RGB_HEX6); else color_string = gstyle_color_to_string ((GstyleColor *)color, GSTYLE_COLOR_KIND_ORIGINAL); color_node = xmlNewChild (palette_node, NULL, CHAR_TO_XML ("color"), NULL); xmlNewProp (color_node, CHAR_TO_XML ("name"), CHAR_TO_XML (color_name)); xmlNewProp (color_node, CHAR_TO_XML ("value"), CHAR_TO_XML (color_string)); } file_path = g_file_get_path (file); succes = xmlSaveFormatFileEnc (file_path, doc, "UTF-8", 1); xmlFreeDoc(doc); if (succes == -1) { g_set_error (error, GSTYLE_PALETTE_ERROR, GSTYLE_PALETTE_ERROR_FILE, _("Unable to save %s\n"), file_path); return FALSE; } else { gstyle_palette_set_changed (self, FALSE); return TRUE; } }