Copyright | Will Thompson Iñaki García Etxebarria and Jonas Platte |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria (garetxe@gmail.com) |
Safe Haskell | None |
Language | Haskell2010 |
A parse context is used to parse a stream of bytes that you expect to contain marked-up text.
See markupParseContextNew
, MarkupParser
, and so
on for more details.
Synopsis
- newtype MarkupParseContext = MarkupParseContext (ManagedPtr MarkupParseContext)
- noMarkupParseContext :: Maybe MarkupParseContext
- markupParseContextEndParse :: (HasCallStack, MonadIO m) => MarkupParseContext -> m ()
- markupParseContextFree :: (HasCallStack, MonadIO m) => MarkupParseContext -> m ()
- markupParseContextGetElement :: (HasCallStack, MonadIO m) => MarkupParseContext -> m Text
- markupParseContextGetUserData :: (HasCallStack, MonadIO m) => MarkupParseContext -> m (Ptr ())
- markupParseContextNew :: (HasCallStack, MonadIO m) => MarkupParser -> [MarkupParseFlags] -> Ptr () -> DestroyNotify -> m MarkupParseContext
- markupParseContextParse :: (HasCallStack, MonadIO m) => MarkupParseContext -> Text -> Int64 -> m ()
- markupParseContextPop :: (HasCallStack, MonadIO m) => MarkupParseContext -> m (Ptr ())
- markupParseContextPush :: (HasCallStack, MonadIO m) => MarkupParseContext -> MarkupParser -> Ptr () -> m ()
- markupParseContextRef :: (HasCallStack, MonadIO m) => MarkupParseContext -> m MarkupParseContext
- markupParseContextUnref :: (HasCallStack, MonadIO m) => MarkupParseContext -> m ()
Exported types
newtype MarkupParseContext Source #
Memory-managed wrapper type.
Instances
BoxedObject MarkupParseContext Source # | |
Defined in GI.GLib.Structs.MarkupParseContext boxedType :: MarkupParseContext -> IO GType # |
noMarkupParseContext :: Maybe MarkupParseContext Source #
A convenience alias for Nothing
:: Maybe
MarkupParseContext
.
Methods
endParse
markupParseContextEndParse Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m () | (Can throw |
Signals to the MarkupParseContext
that all data has been
fed into the parse context with markupParseContextParse
.
This function reports an error if the document isn't complete, for example if elements are still open.
free
markupParseContextFree Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m () |
Frees a MarkupParseContext
.
This function can't be called from inside one of the
MarkupParser
functions or while a subparser is pushed.
getElement
markupParseContextGetElement Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m Text | Returns: the name of the currently open element, or |
Retrieves the name of the currently open element.
If called from the start_element or end_element handlers this will
give the element_name as passed to those functions. For the parent
elements, see g_markup_parse_context_get_element_stack()
.
Since: 2.2
getUserData
markupParseContextGetUserData Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m (Ptr ()) | Returns: the provided user_data. The returned data belongs to
the markup context and will be freed when
|
Returns the user_data associated with context
.
This will either be the user_data that was provided to
markupParseContextNew
or to the most recent call
of markupParseContextPush
.
Since: 2.18
new
markupParseContextNew Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParser |
|
-> [MarkupParseFlags] |
|
-> Ptr () |
|
-> DestroyNotify |
|
-> m MarkupParseContext | Returns: a new |
Creates a new parse context. A parse context is used to parse marked-up documents. You can feed any number of documents into a context, as long as no errors occur; once an error occurs, the parse context can't continue to parse text (you have to free it and create a new parse context).
parse
markupParseContextParse Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> Text |
|
-> Int64 |
|
-> m () | (Can throw |
Feed some data to the MarkupParseContext
.
The data need not be valid UTF-8; an error will be signaled if
it's invalid. The data need not be an entire document; you can
feed a document into the parser incrementally, via multiple calls
to this function. Typically, as you receive data from a network
connection or file, you feed each received chunk of data into this
function, aborting the process if an error occurs. Once an error
is reported, no further data may be fed to the MarkupParseContext
;
all errors are fatal.
pop
markupParseContextPop Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m (Ptr ()) | Returns: the user data passed to |
Completes the process of a temporary sub-parser redirection.
This function exists to collect the user_data allocated by a
matching call to markupParseContextPush
. It must be called
in the end_element handler corresponding to the start_element
handler during which markupParseContextPush
was called.
You must not call this function from the error callback -- the
userData
is provided directly to the callback in that case.
This function is not intended to be directly called by users interested in invoking subparsers. Instead, it is intended to be used by the subparsers themselves to implement a higher-level interface.
Since: 2.18
push
markupParseContextPush Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> MarkupParser |
|
-> Ptr () |
|
-> m () |
Temporarily redirects markup data to a sub-parser.
This function may only be called from the start_element handler of
a MarkupParser
. It must be matched with a corresponding call to
markupParseContextPop
in the matching end_element handler
(except in the case that the parser aborts due to an error).
All tags, text and other data between the matching tags is
redirected to the subparser given by parser
. userData
is used
as the user_data for that parser. userData
is also passed to the
error callback in the event that an error occurs. This includes
errors that occur in subparsers of the subparser.
The end tag matching the start tag for which this call was made is
handled by the previous parser (which is given its own user_data)
which is why markupParseContextPop
is provided to allow "one
last access" to the userData
provided to this function. In the
case of error, the userData
provided here is passed directly to
the error callback of the subparser and markupParseContextPop
should not be called. In either case, if userData
was allocated
then it ought to be freed from both of these locations.
This function is not intended to be directly called by users interested in invoking subparsers. Instead, it is intended to be used by the subparsers themselves to implement a higher-level interface.
As an example, see the following implementation of a simple parser that counts the number of tags encountered.
C code
typedef struct { gint tag_count; } CounterData; static void counter_start_element (GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { CounterData *data = user_data; data->tag_count++; } static void counter_error (GMarkupParseContext *context, GError *error, gpointer user_data) { CounterData *data = user_data; g_slice_free (CounterData, data); } static GMarkupParser counter_subparser = { counter_start_element, NULL, NULL, NULL, counter_error };
In order to allow this parser to be easily used as a subparser, the following interface is provided:
C code
void start_counting (GMarkupParseContext *context) { CounterData *data = g_slice_new (CounterData); data->tag_count = 0; g_markup_parse_context_push (context, &counter_subparser, data); } gint end_counting (GMarkupParseContext *context) { CounterData *data = g_markup_parse_context_pop (context); int result; result = data->tag_count; g_slice_free (CounterData, data); return result; }
The subparser would then be used as follows:
C code
static void start_element (context, element_name, ...) { if (strcmp (element_name, "count-these") == 0) start_counting (context); // else, handle other tags... } static void end_element (context, element_name, ...) { if (strcmp (element_name, "count-these") == 0) g_print ("Counted %d tags\n", end_counting (context)); // else, handle other tags... }
Since: 2.18
ref
markupParseContextRef Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m MarkupParseContext | Returns: the same |
Increases the reference count of context
.
Since: 2.36
unref
markupParseContextUnref Source #
:: (HasCallStack, MonadIO m) | |
=> MarkupParseContext |
|
-> m () |
Decreases the reference count of context
. When its reference count
drops to 0, it is freed.
Since: 2.36