gi-glib-2.0.30: GLib bindings

Copyright | Will Thompson and Iñaki García Etxebarria
License | LGPL-2.1
Maintainer | Iñaki García Etxebarria
Safe Haskell | None
Language | Haskell2010

GI.GLib.Structs.MarkupParseContext

Contents

- Exported types
- Methods
  - endParse
  - free
  - getElement
  - getElementStack
  - getOffset
  - getPosition
  - getUserData
  - new
  - parse
  - pop
  - push
  - ref
  - unref

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

- newtype MarkupParseContext = MarkupParseContext (ManagedPtr MarkupParseContext)
- markupParseContextEndParse :: (HasCallStack, MonadIO m) => MarkupParseContext -> m ()
- markupParseContextFree :: (HasCallStack, MonadIO m) => MarkupParseContext -> m ()
- markupParseContextGetElement :: (HasCallStack, MonadIO m) => MarkupParseContext -> m Text
- markupParseContextGetElementStack :: (HasCallStack, MonadIO m) => MarkupParseContext -> m [Text]
- markupParseContextGetOffset :: (HasCallStack, MonadIO m) => MarkupParseContext -> m CSize
- markupParseContextGetPosition :: (HasCallStack, MonadIO m) => MarkupParseContext -> m (Int32, Int32)
- 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.

Constructors

MarkupParseContext (ManagedPtr MarkupParseContext) |

#### Instances

Instances details

Eq MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext Methods (==) :: MarkupParseContext -> MarkupParseContext -> Bool Source # (/=) :: MarkupParseContext -> MarkupParseContext -> Bool Source #
GBoxed MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext
ManagedPtrNewtype MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext Methods toManagedPtr :: MarkupParseContext -> ManagedPtr MarkupParseContext Source #
TypedObject MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext Methods glibType :: IO GType Source #
HasParentTypes MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext
IsGValue (Maybe MarkupParseContext) Source # | Convert `MarkupParseContext` to and from `GValue`. See `toGValue` and `fromGValue`.
Instance details Defined in GI.GLib.Structs.MarkupParseContext Methods gvalueGType_ :: IO GType Source # gvalueSet_ :: Ptr GValue -> Maybe MarkupParseContext -> IO () Source # gvalueGet_ :: Ptr GValue -> IO (Maybe MarkupParseContext) Source #
type ParentTypes MarkupParseContext Source # |
Instance details Defined in GI.GLib.Structs.MarkupParseContext type ParentTypes MarkupParseContext = '[] :: [Type]

# Methods

### Click to display all available methods, including inherited ones

Expand

#### Methods

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

#### Getters

getElement, getElementStack, getOffset, getPosition, 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 `markupParseContextGetElementStack`.

Since: 2.2

## getElementStack

markupParseContextGetElementStack Source #

Arguments

:: (HasCallStack, MonadIO m) |
=> MarkupParseContext | `context`: a `MarkupParseContext`
-> m [Text] | Returns: the element stack, which must not be modified

Retrieves the element stack from the internal state of the parser.

The returned `SList` is a list of strings where the first item is the currently open tag (as would be returned by `markupParseContextGetElement`) and the next item is its immediate parent.

This function is intended to be used in the start_element and end_element handlers where `markupParseContextGetElement` would merely return the name of the element that is being processed.

Since: 2.16

## getOffset

markupParseContextGetOffset Source #

Arguments

:: (HasCallStack, MonadIO m) |
=> MarkupParseContext | `context`: a `MarkupParseContext`
-> m CSize | Returns: the offset

Retrieves the current offset from the beginning of the document, in bytes.

The information is meant to accompany the values returned by `markupParseContextGetPosition`, and comes with the same accuracy guarantees.

Since: 2.88

## getPosition

markupParseContextGetPosition Source #

Arguments

:: (HasCallStack, MonadIO m) |
=> MarkupParseContext | `context`: a `MarkupParseContext`
-> m (Int32, Int32) |

Retrieves the current line number and the number of the character on that line. Intended for use in error messages; there are no strict semantics for what constitutes the "current" line number other than "the best number we could come up with for error messages."

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