[gxml] Add missing GParser implementation file
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Add missing GParser implementation file
- Date: Thu, 21 Mar 2019 19:17:52 +0000 (UTC)
commit 73d6869e2dfac4b58edb8f25f928ad796565969e
Author: Daniel Espinosa <esodan gmail com>
Date: Thu Mar 21 13:17:09 2019 -0600
Add missing GParser implementation file
gxml/GXmlParser.vala | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 111 insertions(+)
---
diff --git a/gxml/GXmlParser.vala b/gxml/GXmlParser.vala
new file mode 100644
index 0000000..d39a517
--- /dev/null
+++ b/gxml/GXmlParser.vala
@@ -0,0 +1,111 @@
+/* -*- Mode: vala; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
+/*
+ *
+ * Copyright (C) 2019 Daniel Espinosa <esodan gmail com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors:
+ * Daniel Espinosa <esodan gmail com>
+ */
+
+
+private class GXml.GParser : Object, Parser {
+ private GDocument document;
+
+ public GParser (GDocument doc) {
+ document = doc;
+ }
+
+ // Parser Interface
+ public GXml.DomElement? create_element (GXml.DomNode parent) throws GLib.Error { return null; }
+ public GLib.InputStream create_stream () throws GLib.Error {
+ string str = document.libxml_to_string ();
+ return new MemoryInputStream.from_data ((uint8[]) str);
+ }
+ public async GLib.InputStream create_stream_async () throws GLib.Error {
+ Idle.add (create_stream_async.callback);
+ yield;
+ return create_stream ();
+ }
+ public bool current_is_document () { return false; }
+ public bool current_is_element () { return false; }
+ public bool current_is_empty_element () { return false; }
+ public string current_node_name () { return node.node_name; }
+ public bool move_next_node () throws GLib.Error { return false; }
+ public bool read_child_node (GXml.DomNode parent) throws GLib.Error { return false; }
+ public void read_child_nodes_stream (GLib.InputStream istream) throws GLib.Error {}
+ public void read_element (GXml.DomElement element) throws GLib.Error {}
+ public void read_stream (GLib.InputStream stream) throws GLib.Error
+ {
+ var b = new MemoryOutputStream.resizable ();
+ b.splice (stream, 0);
+ if (b.data == null)
+ throw new DocumentError.INVALID_DOCUMENT_ERROR (_("stream doesn't provide data"));
+ read_string ((string) b.data);
+ }
+ public async void read_stream_async (GLib.InputStream stream) throws GLib.Error
+ {
+ Idle.add (read_stream_async.callback);
+ yield;
+ read_stream (stream);
+ }
+ public void read_string (string str) throws GLib.Error
+ {
+ Xml.reset_last_error ();
+ document.doc = Xml.Parser.parse_memory (str, (int) str.length);
+ var e = Xml.get_last_error ();
+ if (e != null) {
+ var errmsg = _("Parser Error for string");
+ string s = GNode.libxml2_error_to_string (e);
+ if (s != null)
+ errmsg = ". ";
+ throw new GXml.Error.PARSER (errmsg);
+ }
+ if (document.doc == null)
+ document.doc = new Xml.Doc ();
+ }
+ public async void read_string_async (string str) throws GLib.Error
+ {
+ Idle.add (read_string_async.callback);
+ yield;
+ read_string (str);
+ }
+ public string read_unparsed () throws GLib.Error {
+ return "";
+ }
+ public void write_stream (GLib.OutputStream stream) throws GLib.Error
+ {
+ var istream = create_stream ();
+ stream.splice (istream, OutputStreamSpliceFlags.CLOSE_SOURCE, cancellable);
+ }
+ public async void write_stream_async (GLib.OutputStream stream) throws GLib.Error
+ {
+ var istream = yield create_stream_async ();
+ yield stream.splice_async (istream, OutputStreamSpliceFlags.CLOSE_SOURCE, 0, cancellable);
+ }
+ public string write_string () throws GLib.Error {
+ return document.libxml_to_string ();
+ }
+ public async string write_string_async () throws GLib.Error {
+ Idle.add (write_string_async.callback);
+ yield;
+ return write_string ();
+ }
+ public bool backup { get; set; }
+ public bool indent { get; set; }
+ public GXml.DomNode node { get; }
+ public Cancellable? cancellable { get; set; }
+}
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]