Files
glib/gio/gmarkupreader.h
Ryan Lortie 2f6982bba0 GMarkupReader: new GIO stream-based markup parser
Add GMarkupReader which is a new GMarkup-style parser that reads from a
GInputStream and operates as a sort of iterator that gets advanced to
each token in sequence and then inspected.

The API makes it quite nice to write parsers where the function nesting
(in C) follows the nesting of the elements in the file being parsed.

It's also possible to use this new class to write async or
partially-async parsers in which the stream is advanced until reading
would block (via GPollableInputStream) and only then is an async call
made.
2014-07-28 11:17:23 +02:00

137 lines
7.5 KiB
C

/*
* Copyright © 2013 Canonical Limited
*
* 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 of the licence, 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, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Author: Ryan Lortie <desrt@desrt.ca>
*/
#ifndef __G_MARKUP_READER_H__
#define __G_MARKUP_READER_H__
#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
#error "Only <gio/gio.h> can be included directly."
#endif
#include <gio/giotypes.h>
G_BEGIN_DECLS
#define G_TYPE_MARKUP_READER (g_markup_reader_get_type ())
#define G_MARKUP_READER(inst) (G_TYPE_CHECK_INSTANCE_CAST ((inst), \
G_TYPE_MARKUP_READER, GMarkupReader))
#define G_IS_MARKUP_READER(inst) (G_TYPE_CHECK_INSTANCE_TYPE ((inst), \
G_TYPE_MARKUP_READER))
typedef struct _GMarkupReader GMarkupReader;
GLIB_AVAILABLE_IN_2_42
GType g_markup_reader_get_type (void);
GLIB_AVAILABLE_IN_2_42
GMarkupReader * g_markup_reader_new (GInputStream *stream,
GMarkupParseFlags flags);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_advance (GMarkupReader *reader,
GCancellable *cancellable,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_advance_nonblocking (GMarkupReader *reader,
GCancellable *cancellable,
GError **error);
GLIB_AVAILABLE_IN_2_42
void g_markup_reader_advance_async (GMarkupReader *reader,
GCancellable *cancellable,
GAsyncReadyCallback callback,
gpointer user_data);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_advance_finish (GMarkupReader *reader,
GAsyncResult *result,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_eof (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_start_element (GMarkupReader *reader,
const gchar *element_name);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_end_element (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_passthrough (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_text (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_is_whitespace (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
const gchar * g_markup_reader_get_element_name (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
void g_markup_reader_get_attributes (GMarkupReader *reader,
const gchar * const **attribute_names,
const gchar * const **attribute_values);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_collect_attributes (GMarkupReader *reader,
GError **error,
GMarkupCollectType first_type,
const gchar *first_name,
...);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_collect_elements (GMarkupReader *reader,
GCancellable *cancellable,
gpointer user_data,
GError **error,
const gchar *first_name,
...) G_GNUC_NULL_TERMINATED;
GLIB_AVAILABLE_IN_2_42
GBytes * g_markup_reader_get_content (GMarkupReader *reader);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_unexpected (GMarkupReader *reader,
GError **error);
GLIB_AVAILABLE_IN_2_42
gboolean g_markup_reader_expect_end (GMarkupReader *reader,
GCancellable *cancellable,
GError **error);
GLIB_AVAILABLE_IN_2_42
void g_markup_reader_set_error (GMarkupReader *reader,
GError **error,
GQuark domain,
gint code,
const gchar *format,
...);
GLIB_AVAILABLE_IN_2_42
gchar * g_markup_reader_collect_text (GMarkupReader *reader,
GCancellable *cancellable,
GError **error);
G_END_DECLS
#endif /* __G_MARKUP_READER_H__ */