gi-glib-2.0.26: GLib bindings
CopyrightWill Thompson and Iñaki García Etxebarria
LicenseLGPL-2.1
MaintainerIñaki García Etxebarria
Safe HaskellSafe-Inferred
LanguageHaskell2010

GI.GLib.Structs.MarkupParseContext

Description

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

Exported types

Methods

Click to display all available methods, including inherited ones

Expand

Methods

endParse, free, parse, pop, push, ref, unref.

Getters

getElement, getUserData.

Setters

None.

endParse

markupParseContextEndParse Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m ()

(Can throw GError)

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a 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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m Text

Returns: the name of the currently open element, or Nothing

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m (Ptr ())

Returns: the provided user_data. The returned data belongs to the markup context and will be freed when markupParseContextFree is called.

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParser

parser: a MarkupParser

-> [MarkupParseFlags]

flags: one or more MarkupParseFlags

-> Ptr ()

userData: user data to pass to MarkupParser functions

-> DestroyNotify

userDataDnotify: user data destroy notifier called when the parse context is freed

-> m MarkupParseContext

Returns: a new MarkupParseContext

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> Text

text: chunk of text to parse

-> Int64

textLen: length of text in bytes

-> m ()

(Can throw GError)

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m (Ptr ())

Returns: the user data passed to markupParseContextPush

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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> MarkupParser

parser: a MarkupParser

-> Ptr ()

userData: user data to pass to MarkupParser functions

-> 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 #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m MarkupParseContext

Returns: the same context

Increases the reference count of context.

Since: 2.36

unref

markupParseContextUnref Source #

Arguments

:: (HasCallStack, MonadIO m) 
=> MarkupParseContext

context: a MarkupParseContext

-> m () 

Decreases the reference count of context. When its reference count drops to 0, it is freed.

Since: 2.36