Blame glib/glib/gmarkup.h

Packit db3073
/* gmarkup.h - Simple XML-like string parser/writer
Packit db3073
 *
Packit db3073
 *  Copyright 2000 Red Hat, Inc.
Packit db3073
 *
Packit db3073
 * GLib is free software; you can redistribute it and/or modify it
Packit db3073
 * under the terms of the GNU Lesser General Public License as
Packit db3073
 * published by the Free Software Foundation; either version 2 of the
Packit db3073
 * License, or (at your option) any later version.
Packit db3073
 *
Packit db3073
 * GLib is distributed in the hope that it will be useful,
Packit db3073
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit db3073
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit db3073
 * Lesser General Public License for more details.
Packit db3073
 *
Packit db3073
 * You should have received a copy of the GNU Lesser General Public
Packit db3073
 * License along with GLib; see the file COPYING.LIB.  If not,
Packit db3073
 * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Packit db3073
 *   Boston, MA 02111-1307, USA.
Packit db3073
 */
Packit db3073
Packit db3073
#if !defined (__GLIB_H_INSIDE__) && !defined (GLIB_COMPILATION)
Packit db3073
#error "Only <glib.h> can be included directly."
Packit db3073
#endif
Packit db3073
Packit db3073
#ifndef __G_MARKUP_H__
Packit db3073
#define __G_MARKUP_H__
Packit db3073
Packit db3073
#include <stdarg.h>
Packit db3073
Packit db3073
#include <glib/gerror.h>
Packit db3073
#include <glib/gslist.h>
Packit db3073
Packit db3073
G_BEGIN_DECLS
Packit db3073
Packit db3073
/**
Packit db3073
 * GMarkupError:
Packit db3073
 * @G_MARKUP_ERROR_BAD_UTF8: text being parsed was not valid UTF-8
Packit db3073
 * @G_MARKUP_ERROR_EMPTY: document contained nothing, or only whitespace
Packit db3073
 * @G_MARKUP_ERROR_PARSE: document was ill-formed
Packit db3073
 * @G_MARKUP_ERROR_UNKNOWN_ELEMENT: error should be set by #GMarkupParser
Packit db3073
 *     functions; element wasn't known
Packit db3073
 * @G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE: error should be set by #GMarkupParser
Packit db3073
 *     functions; attribute wasn't known
Packit db3073
 * @G_MARKUP_ERROR_INVALID_CONTENT: error should be set by #GMarkupParser
Packit db3073
 *     functions; content was invalid
Packit db3073
 * @G_MARKUP_ERROR_MISSING_ATTRIBUTE: error should be set by #GMarkupParser
Packit db3073
 *     functions; a required attribute was missing
Packit db3073
 *
Packit db3073
 * Error codes returned by markup parsing.
Packit db3073
 */
Packit db3073
typedef enum
Packit db3073
{
Packit db3073
  G_MARKUP_ERROR_BAD_UTF8,
Packit db3073
  G_MARKUP_ERROR_EMPTY,
Packit db3073
  G_MARKUP_ERROR_PARSE,
Packit db3073
  /* The following are primarily intended for specific GMarkupParser
Packit db3073
   * implementations to set.
Packit db3073
   */
Packit db3073
  G_MARKUP_ERROR_UNKNOWN_ELEMENT,
Packit db3073
  G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE,
Packit db3073
  G_MARKUP_ERROR_INVALID_CONTENT,
Packit db3073
  G_MARKUP_ERROR_MISSING_ATTRIBUTE
Packit db3073
} GMarkupError;
Packit db3073
Packit db3073
/**
Packit db3073
 * G_MARKUP_ERROR:
Packit db3073
 *
Packit db3073
 * Error domain for markup parsing.
Packit db3073
 * Errors in this domain will be from the #GMarkupError enumeration.
Packit db3073
 * See #GError for information on error domains.
Packit db3073
 */
Packit db3073
#define G_MARKUP_ERROR g_markup_error_quark ()
Packit db3073
Packit db3073
GQuark g_markup_error_quark (void);
Packit db3073
Packit db3073
/**
Packit db3073
 * GMarkupParseFlags:
Packit db3073
 * @G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG: flag you should not use
Packit db3073
 * @G_MARKUP_TREAT_CDATA_AS_TEXT: When this flag is set, CDATA marked
Packit db3073
 *     sections are not passed literally to the @passthrough function of
Packit db3073
 *     the parser. Instead, the content of the section (without the
Packit db3073
 *     <literal><![CDATA[</literal> and <literal>]]></literal>) is
Packit db3073
 *     passed to the @text function. This flag was added in GLib 2.12
Packit db3073
 * @G_MARKUP_PREFIX_ERROR_POSITION: Normally errors caught by GMarkup
Packit db3073
 *     itself have line/column information prefixed to them to let the
Packit db3073
 *     caller know the location of the error. When this flag is set the
Packit db3073
 *     location information is also prefixed to errors generated by the
Packit db3073
 *     #GMarkupParser implementation functions
Packit db3073
 *
Packit db3073
 * Flags that affect the behaviour of the parser.
Packit db3073
 */
Packit db3073
typedef enum
Packit db3073
{
Packit db3073
  G_MARKUP_DO_NOT_USE_THIS_UNSUPPORTED_FLAG = 1 << 0,
Packit db3073
  G_MARKUP_TREAT_CDATA_AS_TEXT              = 1 << 1,
Packit db3073
  G_MARKUP_PREFIX_ERROR_POSITION            = 1 << 2
Packit db3073
} GMarkupParseFlags;
Packit db3073
Packit db3073
/**
Packit db3073
 * GMarkupParseContext:
Packit db3073
 *
Packit db3073
 * A parse context is used to parse a stream of bytes that
Packit db3073
 * you expect to contain marked-up text.
Packit db3073
 *
Packit db3073
 * See g_markup_parse_context_new(), #GMarkupParser, and so
Packit db3073
 * on for more details.
Packit db3073
 */
Packit db3073
typedef struct _GMarkupParseContext GMarkupParseContext;
Packit db3073
typedef struct _GMarkupParser GMarkupParser;
Packit db3073
Packit db3073
/**
Packit db3073
 * GMarkupParser:
Packit db3073
 * @start_element: Callback to invoke when the opening tag of an element
Packit db3073
 *     is seen.
Packit db3073
 * @end_element: Callback to invoke when the closing tag of an element
Packit db3073
 *     is seen. Note that this is also called for empty tags like
Packit db3073
 *     <literal><empty/></literal>.
Packit db3073
 * @text: Callback to invoke when some text is seen (text is always
Packit db3073
 *     inside an element). Note that the text of an element may be spread
Packit db3073
 *     over multiple calls of this function. If the
Packit db3073
 *     %G_MARKUP_TREAT_CDATA_AS_TEXT flag is set, this function is also
Packit db3073
 *     called for the content of CDATA marked sections.
Packit db3073
 * @passthrough: Callback to invoke for comments, processing instructions
Packit db3073
 *     and doctype declarations; if you're re-writing the parsed document,
Packit db3073
 *     write the passthrough text back out in the same position. If the
Packit db3073
 *     %G_MARKUP_TREAT_CDATA_AS_TEXT flag is not set, this function is also
Packit db3073
 *     called for CDATA marked sections.
Packit db3073
 * @error: Callback to invoke when an error occurs.
Packit db3073
 *
Packit db3073
 * Any of the fields in #GMarkupParser can be %NULL, in which case they
Packit db3073
 * will be ignored. Except for the @error function, any of these callbacks
Packit db3073
 * can set an error; in particular the %G_MARKUP_ERROR_UNKNOWN_ELEMENT,
Packit db3073
 * %G_MARKUP_ERROR_UNKNOWN_ATTRIBUTE, and %G_MARKUP_ERROR_INVALID_CONTENT
Packit db3073
 * errors are intended to be set from these callbacks. If you set an error
Packit db3073
 * from a callback, g_markup_parse_context_parse() will report that error
Packit db3073
 * back to its caller.
Packit db3073
 */
Packit db3073
struct _GMarkupParser
Packit db3073
{
Packit db3073
  /* Called for open tags <foo bar="baz"> */
Packit db3073
  void (*start_element)  (GMarkupParseContext *context,
Packit db3073
                          const gchar         *element_name,
Packit db3073
                          const gchar        **attribute_names,
Packit db3073
                          const gchar        **attribute_values,
Packit db3073
                          gpointer             user_data,
Packit db3073
                          GError             **error);
Packit db3073
Packit db3073
  /* Called for close tags </foo> */
Packit db3073
  void (*end_element)    (GMarkupParseContext *context,
Packit db3073
                          const gchar         *element_name,
Packit db3073
                          gpointer             user_data,
Packit db3073
                          GError             **error);
Packit db3073
Packit db3073
  /* Called for character data */
Packit db3073
  /* text is not nul-terminated */
Packit db3073
  void (*text)           (GMarkupParseContext *context,
Packit db3073
                          const gchar         *text,
Packit db3073
                          gsize                text_len,
Packit db3073
                          gpointer             user_data,
Packit db3073
                          GError             **error);
Packit db3073
Packit db3073
  /* Called for strings that should be re-saved verbatim in this same
Packit db3073
   * position, but are not otherwise interpretable.  At the moment
Packit db3073
   * this includes comments and processing instructions.
Packit db3073
   */
Packit db3073
  /* text is not nul-terminated. */
Packit db3073
  void (*passthrough)    (GMarkupParseContext *context,
Packit db3073
                          const gchar         *passthrough_text,
Packit db3073
                          gsize                text_len,
Packit db3073
                          gpointer             user_data,
Packit db3073
                          GError             **error);
Packit db3073
Packit db3073
  /* Called on error, including one set by other
Packit db3073
   * methods in the vtable. The GError should not be freed.
Packit db3073
   */
Packit db3073
  void (*error)          (GMarkupParseContext *context,
Packit db3073
                          GError              *error,
Packit db3073
                          gpointer             user_data);
Packit db3073
};
Packit db3073
Packit db3073
GMarkupParseContext *g_markup_parse_context_new   (const GMarkupParser *parser,
Packit db3073
                                                   GMarkupParseFlags    flags,
Packit db3073
                                                   gpointer             user_data,
Packit db3073
                                                   GDestroyNotify       user_data_dnotify);
Packit db3073
void                 g_markup_parse_context_free  (GMarkupParseContext *context);
Packit db3073
gboolean             g_markup_parse_context_parse (GMarkupParseContext *context,
Packit db3073
                                                   const gchar         *text,
Packit db3073
                                                   gssize               text_len,
Packit db3073
                                                   GError             **error);
Packit db3073
void                 g_markup_parse_context_push  (GMarkupParseContext *context,
Packit db3073
                                                   const GMarkupParser *parser,
Packit db3073
                                                   gpointer             user_data);
Packit db3073
gpointer             g_markup_parse_context_pop   (GMarkupParseContext *context);
Packit db3073
Packit db3073
gboolean             g_markup_parse_context_end_parse (GMarkupParseContext *context,
Packit db3073
                                                       GError             **error);
Packit db3073
const gchar *        g_markup_parse_context_get_element (GMarkupParseContext *context);
Packit db3073
const GSList *       g_markup_parse_context_get_element_stack (GMarkupParseContext *context);
Packit db3073
Packit db3073
/* For user-constructed error messages, has no precise semantics */
Packit db3073
void                 g_markup_parse_context_get_position (GMarkupParseContext *context,
Packit db3073
                                                          gint                *line_number,
Packit db3073
                                                          gint                *char_number);
Packit db3073
gpointer             g_markup_parse_context_get_user_data (GMarkupParseContext *context);
Packit db3073
Packit db3073
/* useful when saving */
Packit db3073
gchar* g_markup_escape_text (const gchar *text,
Packit db3073
                             gssize       length);
Packit db3073
Packit db3073
gchar *g_markup_printf_escaped (const char *format,
Packit db3073
				...) G_GNUC_PRINTF (1, 2);
Packit db3073
gchar *g_markup_vprintf_escaped (const char *format,
Packit db3073
				 va_list     args);
Packit db3073
Packit db3073
typedef enum
Packit db3073
{
Packit db3073
  G_MARKUP_COLLECT_INVALID,
Packit db3073
  G_MARKUP_COLLECT_STRING,
Packit db3073
  G_MARKUP_COLLECT_STRDUP,
Packit db3073
  G_MARKUP_COLLECT_BOOLEAN,
Packit db3073
  G_MARKUP_COLLECT_TRISTATE,
Packit db3073
Packit db3073
  G_MARKUP_COLLECT_OPTIONAL = (1 << 16)
Packit db3073
} GMarkupCollectType;
Packit db3073
Packit db3073
Packit db3073
/* useful from start_element */
Packit db3073
gboolean   g_markup_collect_attributes (const gchar         *element_name,
Packit db3073
                                        const gchar        **attribute_names,
Packit db3073
                                        const gchar        **attribute_values,
Packit db3073
                                        GError             **error,
Packit db3073
                                        GMarkupCollectType   first_type,
Packit db3073
                                        const gchar         *first_attr,
Packit db3073
                                        ...);
Packit db3073
Packit db3073
G_END_DECLS
Packit db3073
Packit db3073
#endif /* __G_MARKUP_H__ */