mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-09-07 00:18:44 +02:00
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.
137 lines
7.5 KiB
C
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__ */
|