Skip site navigation (1)Skip section navigation (2)

  
 
  

home | help
LIBFYAML-CORE(3)		    libfyaml			LIBFYAML-CORE(3)

NAME
     libfyaml-core - libfyaml core API

CORE
     This  is  the  single top-level include for the entire libfyaml public API.
     Including it pulls in all subsystem headers:

     * Core YAML parser, document tree, emitter, and diagnostics  (libfyaml/lib-
       fyaml-core.h)

     * General-purpose	 utilities   and   portability	 macros   (libfyaml/lib-
       fyaml-util.h)

     * YAML path expression parser and executor (libfyaml/libfyaml-path-exec.h)

     * Document  builder:  event-stream  to   tree   conversion   (libfyaml/lib-
       fyaml-docbuild.h)

     * Document   iterator:  tree  traversal  and  event  replay  (libfyaml/lib-
       fyaml-dociter.h)

     * Composer: callback-driven,  path-aware  event  processing  (libfyaml/lib-
       fyaml-composer.h)

     * Pluggable memory allocators (libfyaml/libfyaml-allocator.h)

     * Thread pool for parallel work (libfyaml/libfyaml-thread.h)

     * BLAKE3 cryptographic hashing (libfyaml/libfyaml-blake3.h)

     * Alignment macros and helpers (libfyaml/libfyaml-align.h)

     * Portable endian detection (libfyaml/libfyaml-endian.h)

     * Portable atomic operations (libfyaml/libfyaml-atomics.h)

     * Variable-length size encoding (libfyaml/libfyaml-vlsize.h)

     For faster compilation you may include only the subsystem headers you need.
     All  public  symbols are prefixed with fy_ (functions/types) or FY_ (macros
     and constants).

YAML PARSER, DOCUMENT AND EMITTER
     This header provides the complete YAML 1.2 / JSON	parser,  document  tree,
     and  emitter  API	a the core of libfyaml.  It is the largest and most fre-
     quently used part of the public interface.

     Three complementary APIs cover the full lifecycle of a YAML document:

     Event-based parsing (fy_parser_*): A streaming interface similar to libyam-
     las.  The parser produces a sequence of typed events  (stream-start,  docu-
     ment-start, scalar, sequence-start, a|) without building an in-memory tree.
     Ideal for large documents, filters, and transcoding pipelines.

     Document  tree (fy_document_*, fy_node_*): Builds a fully navigable in-mem-
     ory tree from a YAML or JSON  source.   Nodes  can  be  queried,  modified,
     merged,  and  serialised.	 Path-expression  helpers  (fy_document_scanf(),
     fy_document_insert_at(), a|) provide XPath-like access into the tree.

     Emitter (fy_emitter_*): Serialises documents or raw event streams	back  to
     YAML  or  JSON  with  full  control over formatting style, indentation, and
     quoting.  Supports streaming output to files, memory buffers, or  user-sup-
     plied callbacks.

     Diagnostics  (fy_diag_*):	A  structured error-reporting subsystem that at-
     tributes messages to precise source locations and integrates with	IDE/com-
     piler toolchains via a standard file:line:col: level: text format.

     All  types  are  opaque pointers (struct fy_parser *, struct fy_document *,
     struct fy_node *, a|) so the ABI is stable across minor releases.

   struct fy_version
     struct fy_version
	    The YAML version

   Definition
	struct fy_version {
	    int major;
	    int minor;
	}

   Members
     major  Major version number

     minor  Major version number

   Description
     The parser fills it according to the %YAML directive found in the document.

   fy_version_compare
     int fy_version_compare(const struct fy_version *va, const struct fy_version
     *vb)
	    Compare two yaml versions

	    Parameters

		   * va (const struct fy_version*) a The first version, if  NULL
		     use default version

		   * vb (const struct fy_version*) a The second version, if NULL
		     use default version

   Description
     Compare the versions

   Return
     0 if versions are equal, > 0 if version va is higher than vb < 0 if version
     va is lower than vb

   fy_version_default
     const struct fy_version *fy_version_default(void)
	    Get the default version of the library

	    Parameters

		   * void a no arguments

   Description
     Return  the default version of the library, i.e. the highest stable version
     that is supported.

   Return
     The default YAML version of this library

   fy_version_is_supported
     bool fy_version_is_supported(const struct fy_version *vers)
	    Check if supported version

	    Parameters

		   * vers (const struct fy_version*) a	The  version  to  check,
		     NULL means default version.

   Description
     Check if the given YAML version is supported.

   Return
     true if version supported, false otherwise.

   fy_version_supported_iterate
     const struct fy_version *fy_version_supported_iterate(void **prevp)
	    Iterate over the supported YAML versions

	    Parameters

		   * prevp (void**) a The previous version iterator

   Description
     This  method iterates over the supported YAML versions of this ibrary.  The
     start of the iteration is signalled by a NULL in *prevp.

   Return
     The next node in sequence or NULL at the end of the sequence.

   fy_shutdown
     void fy_shutdown(void)
	    Final cleanup before exit

	    Parameters

		   * void a no arguments

   Description
     Some libraries cough*libclang* need explicit cleanup calls at  the  end  of
     program execution, even if youave never called any of their functions.

     This method will make sure it calls their cleanup functions so that no mem-
     ory leaks are reported in valgrind etc.

   struct fy_tag
     struct fy_tag
	    The YAML tag structure.

   Definition
	struct fy_tag {
	    const char *handle;
	    const char *prefix;
	}

   Members
     handle
	    Handle of the tag (i.e. ^a!!^a)

     prefix
	    The  prefix  of the tag (i.e. ^atag:yaml.org,2002:^a) The parser fills
	    it according to the %TAG directives encountered during parsing.

   struct fy_mark
     struct fy_mark
	    marker holding information about a location in a struct fy_input

   Definition
	struct fy_mark {
	    size_t input_pos;
	    int line;
	    int column;
	}

   Members
     input_pos
	    Position of the mark (from the start of the current input)

     line   Line position (0 index based)

     column
	    Column position (0 index based)

   enum fy_error_type
     enum fy_error_type
	    The supported diagnostic/error types

   Definition
	enum fy_error_type {
	    FYET_DEBUG,
	    FYET_INFO,
	    FYET_NOTICE,
	    FYET_WARNING,
	    FYET_ERROR,
	    FYET_MAX
	};

   Constants
     FYET_DEBUG
	    Debug level (disabled if library is not compiled in debug mode)

     FYET_INFO
	    Informational level

     FYET_NOTICE
	    Notice level

     FYET_WARNING
	    Warning level

     FYET_ERROR
	    Error level - error reporting is using this level

     FYET_MAX
	    Non inclusive maximum fy_error_type value

   enum fy_error_module
     enum fy_error_module
	    Module which generated the diagnostic/error

   Definition
	enum fy_error_module {
	    FYEM_UNKNOWN,
	    FYEM_ATOM,
	    FYEM_SCAN,
	    FYEM_PARSE,
	    FYEM_DOC,
	    FYEM_BUILD,
	    FYEM_INTERNAL,
	    FYEM_SYSTEM,
	    FYEM_EMIT,
	    FYEM_TYPESET,
	    FYEM_DECODE,
	    FYEM_ENCODE,
	    FYEM_REFLECTION,
	    FYEM_MAX
	};

   Constants
     FYEM_UNKNOWN
	    Unknown, default if not specific

     FYEM_ATOM
	    Atom module, used by atom chunking

     FYEM_SCAN
	    Scanner module

     FYEM_PARSE
	    Parser module

     FYEM_DOC
	    Document module

     FYEM_BUILD
	    Build document module (after tree is constructed)

     FYEM_INTERNAL
	    Internal error/diagnostic module

     FYEM_SYSTEM
	    System error/diagnostic module

     FYEM_EMIT
	    Emitter module

     FYEM_TYPESET
	    Prepare types module (C reflection)

     FYEM_DECODE
	    Decode, serialization -> internal form module

     FYEM_ENCODE
	    Encode, internal form -> serialized form module

     FYEM_REFLECTION
	    Generic reflection module messages

     FYEM_MAX
	    Non inclusive maximum fy_error_module value

   enum fy_parse_cfg_flags
     enum fy_parse_cfg_flags
	    Parse configuration flags

   Definition
	enum fy_parse_cfg_flags {
	    FYPCF_QUIET,
	    FYPCF_COLLECT_DIAG,
	    FYPCF_RESOLVE_DOCUMENT,
	    FYPCF_DISABLE_MMAP_OPT,
	    FYPCF_DISABLE_RECYCLING,
	    FYPCF_PARSE_COMMENTS,
	    FYPCF_DISABLE_DEPTH_LIMIT,
	    FYPCF_DISABLE_ACCELERATORS,
	    FYPCF_DISABLE_BUFFERING,
	    FYPCF_DEFAULT_VERSION_AUTO,
	    FYPCF_DEFAULT_VERSION_1_1,
	    FYPCF_DEFAULT_VERSION_1_2,
	    FYPCF_DEFAULT_VERSION_1_3,
	    FYPCF_SLOPPY_FLOW_INDENTATION,
	    FYPCF_PREFER_RECURSIVE,
	    FYPCF_JSON_AUTO,
	    FYPCF_JSON_NONE,
	    FYPCF_JSON_FORCE,
	    FYPCF_YPATH_ALIASES,
	    FYPCF_ALLOW_DUPLICATE_KEYS
	};

   Constants
     FYPCF_QUIET
	    Quiet, do not output any information messages

     FYPCF_COLLECT_DIAG
	    Collect diagnostic/error messages

     FYPCF_RESOLVE_DOCUMENT
	    When producing documents, automatically resolve them

     FYPCF_DISABLE_MMAP_OPT
	    Disable mmap optimization

     FYPCF_DISABLE_RECYCLING
	    Disable recycling optimization

     FYPCF_PARSE_COMMENTS
	    Enable parsing of comments (experimental)

     FYPCF_DISABLE_DEPTH_LIMIT
	    Disable depth limit check, use with enlarged stack

     FYPCF_DISABLE_ACCELERATORS
	    Disable use of access accelerators (saves memory)

     FYPCF_DISABLE_BUFFERING
	    Disable use of buffering where possible

     FYPCF_DEFAULT_VERSION_AUTO
	    Automatically use the most recent version the library supports

     FYPCF_DEFAULT_VERSION_1_1
	    Default version is YAML 1.1

     FYPCF_DEFAULT_VERSION_1_2
	    Default version is YAML 1.2

     FYPCF_DEFAULT_VERSION_1_3
	    Default version is YAML 1.3 (experimental)

     FYPCF_SLOPPY_FLOW_INDENTATION
	    Allow sloppy indentation in flow mode

     FYPCF_PREFER_RECURSIVE
	    Prefer recursive algorighms instead of iterative whenever possible

     FYPCF_JSON_AUTO
	    Automatically enable JSON mode (when extension is .json)

     FYPCF_JSON_NONE
	    Never enable JSON input mode

     FYPCF_JSON_FORCE
	    Force JSON mode always

     FYPCF_YPATH_ALIASES
	    Enable YPATH aliases mode

     FYPCF_ALLOW_DUPLICATE_KEYS
	    Allow duplicate keys on mappings

   Description
     These flags control the operation of the parse and the debugging output/er-
     ror reporting via filling in the fy_parse_cfg->flags member.

   struct fy_parse_cfg
     struct fy_parse_cfg
	    parser configuration structure.

   Definition
	struct fy_parse_cfg {
	    const char *search_path;
	    enum fy_parse_cfg_flags flags;
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     search_path
	    Search path when accessing files, seperate with a:a

     flags  Configuration flags

     userdata
	    Opaque user data pointer

     diag   Optional diagnostic interface to use

   Description
     Argument to the fy_parser_create() method which  perform  parsing	of  YAML
     files.

   enum fy_event_type
     enum fy_event_type
	    Event types

   Definition
	enum fy_event_type {
	    FYET_NONE,
	    FYET_STREAM_START,
	    FYET_STREAM_END,
	    FYET_DOCUMENT_START,
	    FYET_DOCUMENT_END,
	    FYET_MAPPING_START,
	    FYET_MAPPING_END,
	    FYET_SEQUENCE_START,
	    FYET_SEQUENCE_END,
	    FYET_SCALAR,
	    FYET_ALIAS
	};

   Constants
     FYET_NONE
	    No event

     FYET_STREAM_START
	    Stream start event

     FYET_STREAM_END
	    Stream end event

     FYET_DOCUMENT_START
	    Document start event

     FYET_DOCUMENT_END
	    Document end event

     FYET_MAPPING_START
	    YAML mapping start event

     FYET_MAPPING_END
	    YAML mapping end event

     FYET_SEQUENCE_START
	    YAML sequence start event

     FYET_SEQUENCE_END
	    YAML sequence end event

     FYET_SCALAR
	    YAML scalar event

     FYET_ALIAS
	    YAML alias event

   fy_event_type_get_text
     const char *fy_event_type_get_text(enum fy_event_type type)
	    Return text of an event type

	    Parameters

		   * type (enum fy_event_type) a The event type to get text from

   Return
     A pointer to a text, i.e for FYET_SCALAR a=VALa.

   enum fy_collection_style
     enum fy_collection_style
	    Collection styles supported by the parser/emitter

   Definition
	enum fy_collection_style {
	    FYCS_ANY,
	    FYCS_BLOCK,
	    FYCS_FLOW,
	    FYCS_MAX
	};

   Constants
     FYCS_ANY
	    Any collection style, not generated by the parser.	Lets the emitter
	    to choose

     FYCS_BLOCK
	    Block style (not {}[])

     FYCS_FLOW
	    Flow style {}[]

     FYCS_MAX
	    marks end of scalar styles

   enum fy_scalar_style
     enum fy_scalar_style
	    Scalar styles supported by the parser/emitter

   Definition
	enum fy_scalar_style {
	    FYSS_ANY,
	    FYSS_PLAIN,
	    FYSS_SINGLE_QUOTED,
	    FYSS_DOUBLE_QUOTED,
	    FYSS_LITERAL,
	    FYSS_FOLDED,
	    FYSS_MAX
	};

   Constants
     FYSS_ANY
	    Any  scalar style, not generated by the parser.  Lets the emitter to
	    choose

     FYSS_PLAIN
	    Plain scalar style

     FYSS_SINGLE_QUOTED
	    Single quoted style

     FYSS_DOUBLE_QUOTED
	    Double quoted style

     FYSS_LITERAL
	    YAML literal block style

     FYSS_FOLDED
	    YAML folded block style

     FYSS_MAX
	    marks end of scalar styles

   struct fy_event_stream_start_data
     struct fy_event_stream_start_data
	    stream start event data

   Definition
	struct fy_event_stream_start_data {
	    struct fy_token *stream_start;
	}

   Members
     stream_start
	    The token that started the stream

   struct fy_event_stream_end_data
     struct fy_event_stream_end_data
	    stream end event data

   Definition
	struct fy_event_stream_end_data {
	    struct fy_token *stream_end;
	}

   Members
     stream_end
	    The token that ended the stream

   struct fy_event_document_start_data
     struct fy_event_document_start_data
	    doument start event data

   Definition
	struct fy_event_document_start_data {
	    struct fy_token *document_start;
	    struct fy_document_state *document_state;
	    bool implicit;
	}

   Members
     document_start
	    The token that started the document, or NULL if the document was im-
	    plicitly started.

     document_state
	    The state of the document (i.e. information about the  YAML  version
	    and configured tags)

     implicit
	    True if the document started implicitly

   struct fy_event_document_end_data
     struct fy_event_document_end_data
	    doument end event data

   Definition
	struct fy_event_document_end_data {
	    struct fy_token *document_end;
	    bool implicit;
	}

   Members
     document_end
	    The  token	that ended the document, or NULL if the document was im-
	    plicitly ended

     implicit
	    True if the document ended implicitly

   struct fy_event_alias_data
     struct fy_event_alias_data
	    alias event data

   Definition
	struct fy_event_alias_data {
	    struct fy_token *anchor;
	}

   Members
     anchor
	    The anchor token definining this alias.

   struct fy_event_scalar_data
     struct fy_event_scalar_data
	    scalar event data

   Definition
	struct fy_event_scalar_data {
	    struct fy_token *anchor;
	    struct fy_token *tag;
	    struct fy_token *value;
	    bool tag_implicit;
	}

   Members
     anchor
	    anchor token or NULL

     tag    tag token or NULL

     value  scalar value token (cannot be NULL)

     tag_implicit
	    true if the tag was implicit or explicit

   struct fy_event_sequence_start_data
     struct fy_event_sequence_start_data
	    sequence start event data

   Definition
	struct fy_event_sequence_start_data {
	    struct fy_token *anchor;
	    struct fy_token *tag;
	    struct fy_token *sequence_start;
	}

   Members
     anchor
	    anchor token or NULL

     tag    tag token or NULL

     sequence_start
	    sequence start value token or NULL if the sequence was  started  im-
	    plicitly

   struct fy_event_sequence_end_data
     struct fy_event_sequence_end_data
	    sequence end event data

   Definition
	struct fy_event_sequence_end_data {
	    struct fy_token *sequence_end;
	}

   Members
     sequence_end
	    The  token	that ended the sequence, or NULL if the sequence was im-
	    plicitly ended

   struct fy_event_mapping_start_data
     struct fy_event_mapping_start_data
	    mapping start event data

   Definition
	struct fy_event_mapping_start_data {
	    struct fy_token *anchor;
	    struct fy_token *tag;
	    struct fy_token *mapping_start;
	}

   Members
     anchor
	    anchor token or NULL

     tag    tag token or NULL

     mapping_start
	    mapping start value token or NULL if the mapping was started implic-
	    itly

   struct fy_event_mapping_end_data
     struct fy_event_mapping_end_data
	    mapping end event data

   Definition
	struct fy_event_mapping_end_data {
	    struct fy_token *mapping_end;
	}

   Members
     mapping_end
	    The token that ended the mapping, or NULL if the mapping was implic-
	    itly ended

   struct fy_event
     struct fy_event
	    Event generated by the parser

   Definition
	struct fy_event {
	    enum fy_event_type type;
	    union {
		struct fy_event_stream_start_data stream_start;
		struct fy_event_stream_end_data stream_end;
		struct fy_event_document_start_data document_start;
		struct fy_event_document_end_data document_end;
		struct fy_event_alias_data alias;
		struct fy_event_scalar_data scalar;
		struct fy_event_sequence_start_data sequence_start;
		struct fy_event_sequence_end_data sequence_end;
		struct fy_event_mapping_start_data mapping_start;
		struct fy_event_mapping_end_data mapping_end;
	    } ;
	}

   Members
     type   Type of the event, see enum fy_event_type

     {unnamed_union}
	    anonymous

     stream_start
	    Stream start information, it is valid when	fy_event->type	is  enum
	    FYET_STREAM_START

     stream_end
	    Stream  end  information,  it  is  valid when fy_event->type is enum
	    FYET_STREAM_END

     document_start
	    Document start information, it is valid when fy_event->type is  enum
	    FYET_DOCUMENT_START

     document_end
	    Document  end  information,  it is valid when fy_event->type is enum
	    FYET_DOCUMENT_END

     alias  Alias  information,  it  is  valid	when  fy_event->type   is   enum
	    FYET_ALIAS

     scalar
	    Scalar   information,  it  is  valid  when	fy_event->type	is  enum
	    FYET_SCALAR

     sequence_start
	    Sequence start information, it is valid when fy_event->type is  enum
	    FYET_SEQUENCE_START

     sequence_end
	    Sequence  end  information,  it is valid when fy_event->type is enum
	    FYET_SEQUENCE_END

     mapping_start
	    Mapping start information, it is valid when fy_event->type	is  enum
	    FYET_MAPPING_START

     mapping_end
	    Mapping  end  information,	it  is valid when fy_event->type is enum
	    FYET_MAPPING_END

   Description
     This structure is generated by the parser by each call to fy_parser_parse()
     and release by fy_parser_event_free()

   enum fy_event_part
     enum fy_event_part
	    Select part of the event

   Definition
	enum fy_event_part {
	    FYEP_VALUE,
	    FYEP_TAG,
	    FYEP_ANCHOR
	};

   Constants
     FYEP_VALUE
	    The value of the event (the main token)

     FYEP_TAG
	    The tag of the event

     FYEP_ANCHOR
	    The anchor of the event

   fy_event_get_type
     enum fy_event_type fy_event_get_type(const struct fy_event *fye)
	    Get the eventas type

	    Parameters

		   * fye (const struct fy_event*) a The event

   Description
     Return the type of the event

   Return
     The event type, or FYET_NONE when the event is invalid

   fy_event_data
     void *fy_event_data(struct fy_event *fye)
	    Get a pointer to the event data

	    Parameters

		   * fye (struct fy_event*) a The event

   Description
     Some languages cough*golang*cough really donat like unions,  and  anonymous
     unions in particular.

     You should not have to use this in other language bindings.

   Return
     A pointer to the event data structure, or NULL if the event is invalid

   fy_library_version
     const char *fy_library_version(void)
	    Return the library version string

	    Parameters

		   * void a no arguments

   Return
     A	pointer  to a version string of the form <MAJOR>.<MINOR>[[.<PATCH>][-EX-
     TRA-VERSION-INFO]]

   fy_string_to_error_type
     enum fy_error_type fy_string_to_error_type(const char *str)
	    Return the error type from a string

	    Parameters

		   * str (const char*) a The string to convert to an error type

   Return
     The error type if greater or equal to zero, FYET_MAX otherwise

   fy_error_type_to_string
     const char *fy_error_type_to_string(enum fy_error_type type)
	    Convert an error type to string

	    Parameters

		   * type (enum fy_error_type) a The error type to convert

   Return
     The string value of the error type or the empty string aa on error

   fy_string_to_error_module
     enum fy_error_module fy_string_to_error_module(const char *str)
	    Return the error module from a string

	    Parameters

		   * str (const char*) a The string to convert to an error  mod-
		     ule

   Return
     The error type if greater or equal to zero, FYEM_MAX otherwise

   fy_error_module_to_string
     const char *fy_error_module_to_string(enum fy_error_module module)
	    Convert an error module to string

	    Parameters

		   * module (enum fy_error_module) a The error module to convert

   Return
     The string value of the error module or the empty string aa on error

   fy_event_is_implicit
     bool fy_event_is_implicit(struct fy_event *fye)
	    Check whether the given event is an implicit one

	    Parameters

		   * fye  (struct fy_event*) a A pointer to a struct fy_event to
		     check.

   Return
     true if the event is an implicit one.

   fy_document_event_is_implicit
     bool fy_document_event_is_implicit(const struct fy_event *fye)
	    Check whether the given document event is an implicit one

	    Parameters

		   * fye (const struct	fy_event*)  a  A  pointer  to  a  struct
		     fy_event  to  check.  It must be either a document start or
		     document end event.

   Return
     true if the event is an implicit one.

   fy_parser_create
     struct fy_parser *fy_parser_create(const struct fy_parse_cfg *cfg)
	    Create a parser.

	    Parameters

		   * cfg (const struct fy_parse_cfg*) a  The  configuration  for
		     the parser

   Description
     Creates  a parser with its configuration cfg The parser may be destroyed by
     a corresponding call to fy_parser_destroy().

   Return
     A pointer to the parser or NULL in case of an error.

   fy_parser_destroy
     void fy_parser_destroy(struct fy_parser *fyp)
	    Destroy the given parser

	    Parameters

		   * fyp (struct fy_parser*) a The parser to destroy

   Description
     Destroy a parser created earlier via fy_parser_create().

   fy_parser_get_cfg
     const struct fy_parse_cfg *fy_parser_get_cfg(struct fy_parser *fyp)
	    Get the configuration of a parser

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Return
     The configuration of the parser

   fy_parser_get_diag
     struct fy_diag *fy_parser_get_diag(struct fy_parser *fyp)
	    Get the diagnostic object of a parser

	    Parameters

		   * fyp (struct fy_parser*) a The parser to get the  diagnostic
		     object

   Description
     Return  a	pointer  to the diagnostic object of a parser object.  Note that
     the  returned  diag  object  has  a   reference   taken   so   you   should
     fy_diag_unref() it when youare done with it.

   Return
     A pointer to a refaed diagnostic object or NULL in case of an error.

   fy_parser_set_diag
     int fy_parser_set_diag(struct fy_parser *fyp, struct fy_diag *diag)
	    Set the diagnostic object of a parser

	    Parameters

		   * fyp  (struct  fy_parser*) a The parser to replace the diag-
		     nostic object

		   * diag (struct fy_diag*) a The parseras  new  diagnostic  ob-
		     ject, NULL for default

   Description
     Replace the parseras current diagnostic object with the one given as an ar-
     gument.  The  previous diagnostic object will be unrefaed (and freed if its
     reference gets to 0).  Also note that the diag argument shall take a refer-
     ence too.

   Return
     0 if everything OK, -1 otherwise

   fy_parser_reset
     int fy_parser_reset(struct fy_parser *fyp)
	    Reset a parser completely

	    Parameters

		   * fyp (struct fy_parser*) a The parser to reset

   Description
     Completely reset a parser, including after an error that  caused  a  parser
     error to be emitted.

   Return
     0 if the reset was successful, -1 otherwise

   fy_parser_set_input_file
     int fy_parser_set_input_file(struct fy_parser *fyp, const char *file)
	    Set the parser to process the given file

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * file (const char*) a The file to parse.

   Description
     Point  the  parser to the given file for processing. The file is located by
     honoring the search path of the configuration set by the  earlier	call  to
     fy_parser_create().   While  the  parser  is  in  use the file will must be
     available.

   Return
     zero on success, -1 on error

   fy_parser_set_string
     int fy_parser_set_string(struct fy_parser *fyp, const char *str, size_t
     len)
	    Set the parser to process the given string.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * str (const char*) a The YAML string to parse.

		   * len (size_t) a The length of the string (or -1 if a0a  ter-
		     minated)

   Description
     Point the parser to the given (NULL terminated) string. Note that while the
     parser is active the string must not go out of scope.

   Return
     zero on success, -1 on error

   fy_parser_set_malloc_string
     int fy_parser_set_malloc_string(struct fy_parser *fyp, char *str, size_t
     len)
	    Set the parser to process the given malloced string.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * str (char*) a The YAML string to parse (allocated).

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Point the parser to the given (possible NULL terminated) string. Note  that
     the  string  is  expected	to  be	allocated via malloc(3) and ownership is
     transferred to the created input. When the input is freeaed the memory will
     be automatically freed.

     In case of an error the string is not freed.

   Return
     zero on success, -1 on error

   fy_parser_set_input_fp
     int fy_parser_set_input_fp(struct fy_parser *fyp, const char *name, FILE
     *fp)
	    Set the parser to process the given file

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * name (const char*) a The label of the stream

		   * fp (FILE*) a The FILE pointer, it	must  be  open	in  read
		     mode.

   Description
     Point the parser to use fp for processing.

   Return
     zero on success, -1 on error

   fy_parser_set_input_callback
     int fy_parser_set_input_callback(struct fy_parser *fyp, void *user, ssize_t
     (*callback)(void *user, void *buf, size_t count))
	    Set the parser to process via a callback

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * user (void*) a The user data pointer

		   * callback (ssize_t (*)(void *user, void *buf, size_t count))
		     a The callback method to request data with

   Description
     Point the parser to use a callback for input.

   Return
     zero on success, -1 on error

   fy_parser_set_input_fd
     int fy_parser_set_input_fd(struct fy_parser *fyp, int fd)
	    Set the parser to process the given file descriptor

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fd (int) a The file descriptor to use

   Description
     Point the parser to use fd for processing.

   Return
     zero on success, -1 on error

   fy_parser_parse
     struct fy_event *fy_parser_parse(struct fy_parser *fyp)
	    Parse and return the next event.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Each  call  to fy_parser_parse() returns the next event from the configured
     input of the parser, or NULL at the end of the stream. The  returned  event
     must be released via a matching call to fy_parser_event_free().

   Return
     The next event in the stream or NULL.

   fy_parser_parse_peek
     const struct fy_event *fy_parser_parse_peek(struct fy_parser *fyp)
	    Parse and peek at the next event.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     It  will  return the next event that a call to fy_parser_parse would gener-
     ate, but as read-only.

     You must not free this event.

   Return
     A peek at the next event in the stream or NULL.

   fy_parser_skip
     int fy_parser_skip(struct fy_parser *fyp)
	    Skip the current scalar/collection

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Skips the current scalar or collection.

   Return
     0 on success, -1 on error

   fy_parser_count_sequence_items
     int fy_parser_count_sequence_items(struct fy_parser *fyp)
	    Count the sequence items

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Counts the number of sequence items. Parser must already be in  a	sequence
     state.  Note that this uses backtracking so it might not be very efficient.

   Return
     The  number of sequence items on success, -1 on error Note if the number of
     items exceeds INT_MAX, INT_MAX will be returned.

   fy_parser_count_mapping_items
     int fy_parser_count_mapping_items(struct fy_parser *fyp)
	    Count the mapping items

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Counts the number of mapping items. Parser must already  be  in  a  mapping
     state.  Note that this uses backtracking so it might not be very efficient.

   Return
     The  number  of mapping items on success, -1 on error Note if the number of
     items exceeds INT_MAX, INT_MAX will be returned.

   fy_parser_event_free
     void fy_parser_event_free(struct fy_parser *fyp, struct fy_event *fye)
	    Free an event

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event to free (may be NULL)

   Description
     Free a previously returned event from fy_parser_parse().

   fy_parser_get_stream_error
     bool fy_parser_get_stream_error(struct fy_parser *fyp)
	    Check the parser for stream errors

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Return
     true in case of a stream error, false otherwise.

   fy_parser_get_mode
     enum fy_parser_mode fy_parser_get_mode(struct fy_parser *fyp)
	    Get the parser mode

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Retrieve the current mode of the parser, which indicates the  YAML  version
     or format being parsed (YAML 1.1, 1.2, 1.3, or JSON).

   Return
     The parser mode

   fy_parser_vlog
     void fy_parser_vlog(struct fy_parser *fyp, enum fy_error_type type, const
     char *fmt, va_list ap)
	    Log using the parsers diagnostics printf style (va_arg)

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a log on the parser diagnostic output

   fy_parser_log
     void fy_parser_log(struct fy_parser *fyp, enum fy_error_type type, const
     char *fmt, ...)
	    Log using the parsers diagnostics printf style

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments

   Description
     Output a report on the parseras diagnostics

   fy_parser_vreport
     void fy_parser_vreport(struct fy_parser *fyp, enum fy_error_type type,
     struct fy_token *fyt, const char *fmt, va_list ap)
	    Report  using  the	parsers  diagnostics printf style and mark token
	    (va_arg)

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_error_type) a The error type

		   * fyt (struct fy_token*) a The token

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report on the parser and indicate the tokenas position

   fy_parser_report
     void fy_parser_report(struct fy_parser *fyp, enum fy_error_type type,
     struct fy_token *fyt, const char *fmt, ...)
	    Report using the parsers diagnostics printf style and mark token

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_error_type) a The error type

		   * fyt (struct fy_token*) a The token

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments

   Description
     Output a report on the parser and indicate the tokenas position

   fy_token_scalar_style
     enum fy_scalar_style fy_token_scalar_style(struct fy_token *fyt)
	    Get the style of a scalar token

	    Parameters

		   * fyt (struct fy_token*) a  The  scalar  token  to  get  itas
		     style. Note that a NULL token is a enum FYSS_PLAIN.

   Return
     The scalar style of the token, or FYSS_PLAIN on each other case

   fy_token_collection_style
     enum fy_collection_style fy_token_collection_style(struct fy_token *fyt)
	    Get the style of a collection token

	    Parameters

		   * fyt  (struct  fy_token*) a The collection token to get itas
		     style. Note that a NULL token is a enum FYCS_ANY.

   Return
     The collection style of the token, or FYCS_ANY

   fy_token_scalar_is_null
     bool fy_token_scalar_is_null(struct fy_token *fyt)
	    Test whether the scalar is null (content)

	    Parameters

		   * fyt (struct fy_token*) a The scalar token to check for NUL-
		     Lity.

   Description
     Note that this is different than null of the YAML type system.  It is  null
     as in null content. It is also different than an empty scalar.

   Return
     true if is a null scalar, false otherwise

   fy_token_get_text
     const char *fy_token_get_text(struct fy_token *fyt, size_t *lenp)
	    Get text (and length of it) of a token

	    Parameters

		   * fyt  (struct  fy_token*)  a The token out of which the text
		     pointer will be returned.

		   * lenp (size_t*) a Pointer to a variable that will  hold  the
		     returned length

   Description
     This  method  will  return  a pointer to the text of a token along with the
     length of it. Note that this text is not NULL terminated.	If  you  need  a
     NULL terminated pointer use fy_token_get_text0().

     In  case  that  the token is asimplea enough (i.e. a plain scalar) or some-
     thing similar the returned pointer is a direct pointer to the space of  the
     input that contains the token.

     That  means that the pointer is not guaranteed to be valid after the parser
     is destroyed.

     If the token is acomplexa enough, then space shall be allocated, filled and
     returned.

     Note that the concept of asimplea and acomplexa is  vague,  and  thatas  on
     purpose.

   Return
     A	pointer  to the text representation of the token, while lenp will be as-
     signed the character length of said representation.  NULL in case of an er-
     ror.

   fy_token_get_text0
     const char *fy_token_get_text0(struct fy_token *fyt)
	    Get zero terminated text of a token

	    Parameters

		   * fyt (struct fy_token*) a The token out of	which  the  text
		     pointer will be returned.

   Description
     This method will return a pointer to the text of a token which is zero ter-
     minated.  It  will allocate memory to hold it in the token structure so try
     to use fy_token_get_text() instead if possible.

   Return
     A pointer to a zero terminated text representation of the token.	NULL  in
     case of an error.

   fy_token_get_text_length
     size_t fy_token_get_text_length(struct fy_token *fyt)
	    Get length of the text of a token

	    Parameters

		   * fyt (struct fy_token*) a The token

   Description
     This method will return the length of the text representation of a token.

   Return
     The  size	of  the  text representation of a token, -1 in case of an error.
     Note that the NULL token will return a length of zero.

   enum fy_comment_placement
     enum fy_comment_placement
	    Comment placement relative to token

   Definition
	enum fy_comment_placement {
	    fycp_top,
	    fycp_right,
	    fycp_bottom
	};

   Constants
     fycp_top
	    Comment on top of token

     fycp_right
	    Comment to the right of the token

     fycp_bottom
	    Comment to the bottom of the token

   fy_token_get_comment
     const char *fy_token_get_comment(struct fy_token *fyt, enum
     fy_comment_placement which)
	    Get zero terminated comment of a token

	    Parameters

		   * fyt (struct fy_token*) a The token out of which the comment
		     text will be returned.

		   * which (enum fy_comment_placement) a The comment placement

   Description
     Get the comment that is attached at a token having the given placement.

   Return
     A pointer to a zero terminated text representation of  the  token	comment.
     NULL in case of an error or if the token has no comment.

   fy_token_get_comments
     const char *fy_token_get_comments(struct fy_token *fyt)
	    Get all comments of a token

	    Parameters

		   * fyt (struct fy_token*) a The token

   Description
     Get all the comments that are attached on a token

   Return
     A	pointer  to  a	zero terminated text representation of all the comments.
     The comments of all the placements are concatenated and  returned	as  one.
     NULL in case of an error or if the event has no comments.

   fy_token_set_comment
     int fy_token_set_comment(struct fy_token *fyt, enum fy_comment_placement
     which, const char *text, size_t len)
	    Attach a comment to a token

	    Parameters

		   * fyt (struct fy_token*) a The token out of which the comment
		     text will be attached

		   * which (enum fy_comment_placement) a The placement

		   * text (const char*) a The text of the comment

		   * len  (size_t)  a The length of the comment (FY_NT means the
		     length of text)

   Description
     Attach the given comment on the token at the specified placement.	 If  an-
     other comment is already present it will be overriden.  If text is NULL the
     comment is removed.

   Return
     0 on success, -1 on failure.

   fy_event_get_comments
     const char *fy_event_get_comments(struct fy_event *fye)
	    Get all comments of an event

	    Parameters

		   * fye (struct fy_event*) a The event

   Return
     A	pointer  to  a	zero terminated text representation of all the comments.
     The comments of all the placements are concatenated and  returned	as  one.
     NULL in case of an error or if the event has no comments.	The pointer must
     be freeaed if itas not NULL via a call to free()

   fy_node_get_comment
     const char *fy_node_get_comment(struct fy_node *fyn, enum
     fy_comment_placement which)
	    Get comment of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * which  (enum  fy_comment_placement)  a The placement of the
		     comment

   Return
     A pointer to a zero terminated text representation of the comment.  NULL in
     case of an error or if the event has no such comments.

   fy_node_get_comments
     const char *fy_node_get_comments(struct fy_node *fyn)
	    Get all comments of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Return
     A pointer to a zero terminated text representation  of  all  the  comments.
     The  comments  of	all the placements are concatenated and returned as one.
     NULL in case of an error or if the event has no comments.

   struct fy_iter_chunk
     struct fy_iter_chunk
	    An iteration chunk

   Definition
	struct fy_iter_chunk {
	    const char *str;
	    size_t len;
	}

   Members
     str    Pointer to the start of the chunk

     len    The size of the chunk

   Description
     The iterator produces a stream of chunks which cover the whole object.

   fy_token_iter_create
     struct fy_token_iter *fy_token_iter_create(struct fy_token *fyt)
	    Create a token iterator

	    Parameters

		   * fyt (struct fy_token*) a The token to iterate, or NULL.

   Description
     Create an iterator for operating on the given token, or a generic	iterator
     for  use with fy_token_iter_start().  The iterator must be destroyed with a
     matching call to fy_token_iter_destroy().

   Return
     A pointer to the newly created iterator, or NULL in case of an error.

   fy_token_iter_destroy
     void fy_token_iter_destroy(struct fy_token_iter *iter)
	    Destroy the iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator to destroy.

   Description
     Destroy the iterator created by fy_token_iter_create().

   fy_token_iter_start
     void fy_token_iter_start(struct fy_token *fyt, struct fy_token_iter *iter)
	    Start iterating over the contents of a token

	    Parameters

		   * fyt (struct fy_token*) a The token to iterate over

		   * iter (struct fy_token_iter*) a The iterator to prepare.

   Description
     Prepare an iterator for operating on the given token.  The iterator must be
     created via a previous call to fy_token_iter_create() for	user  level  API
     access.

   fy_token_iter_finish
     void fy_token_iter_finish(struct fy_token_iter *iter)
	    Stop iterating over the contents of a token

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Stop the iteration operation.

   fy_token_iter_peek_chunk
     const struct fy_iter_chunk *fy_token_iter_peek_chunk(struct fy_token_iter
     *iter)
	    Peek at the next iterator chunk

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Peek at the next iterator chunk

   Return
     A pointer to the next iterator chunk, or NULL in case thereas no other.

   fy_token_iter_chunk_next
     const struct fy_iter_chunk *fy_token_iter_chunk_next(struct fy_token_iter
     *iter, const struct fy_iter_chunk *curr, int *errp)
	    Get next iterator chunk

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

		   * curr  (const struct fy_iter_chunk*) a The current chunk, or
		     NULL for the first one.

		   * errp (int*) a Pointer to an error return value or NULL

   Description
     Get the next iterator chunk in sequence,

   Return
     A pointer to the next iterator chunk, or NULL in  case  thereas  no  other.
     When  the return value is NULL, the errp variable will be filled with 0 for
     normal end, or -1 in case of an error.

   fy_token_iter_advance
     void fy_token_iter_advance(struct fy_token_iter *iter, size_t len)
	    Advance the iterator position

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

		   * len (size_t) a Number of bytes to advance the iterator  po-
		     sition

   Description
     Advance  the  read pointer of the iterator.  Note that mixing calls of this
     with any call of fy_token_iter_ungetc() / fy_token_iter_utf8_unget()  in  a
     single iterator sequence leads to undefined behavior.

   fy_token_iter_read
     ssize_t fy_token_iter_read(struct fy_token_iter *iter, void *buf, size_t
     count)
	    Read a block from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

		   * buf  (void*)  a Pointer to a block of memory to receive the
		     data. Must be at least count bytes long.

		   * count (size_t) a Amount of bytes to read.

   Description
     Read a block from an iterator. Note than mixing calls of this  and  any  of
     the ungetc methods leads to undefined behavior.

   Return
     The amount of data read, or -1 in case of an error.

   fy_token_iter_getc
     int fy_token_iter_getc(struct fy_token_iter *iter)
	    Get a single character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Reads  a single character from an iterator. If the iterator is finished, it
     will return -1. If any calls to ungetc have pushed a character in the iter-
     ator it shall return that.

   Return
     The next character in the iterator, or -1 in case of an error,  or  end  of
     stream.

   fy_token_iter_ungetc
     int fy_token_iter_ungetc(struct fy_token_iter *iter, int c)
	    Ungets a single character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

		   * c	(int)  a  The character to push back, or -1 to reset the
		     pushback buffer.

   Description
     Pushes back a single character to an iterator stream. It will  be	returned
     in  subsequent calls of fy_token_iter_getc(). Currently only a single char-
     acter is allowed to be pushed back, and any further calls	to  ungetc  will
     return an error.

   Return
     The pushed back character given as argument, or -1 in case of an error.  If
     the pushed back character was -1, then 0 will be returned.

   fy_token_iter_peekc
     int fy_token_iter_peekc(struct fy_token_iter *iter)
	    Peeks at single character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Peeks  at	the  next  character to get from an iterator. If the iterator is
     finished, it will return -1. If any calls to ungetc have pushed a character
     in the iterator it shall return that. The character is not removed from the
     iterator stream.

   Return
     The next character in the iterator, or -1 in case of an error,  or  end  of
     stream.

   fy_token_iter_utf8_get
     int fy_token_iter_utf8_get(struct fy_token_iter *iter)
	    Get a single utf8 character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Reads  a  single  utf8  character from an iterator. If the iterator is fin-
     ished, it will return -1. If any calls to ungetc have pushed a character in
     the iterator it shall return that.

   Return
     The next utf8 character in the iterator, or -1 in case of an error, or  end
     of stream.

   fy_token_iter_utf8_unget
     int fy_token_iter_utf8_unget(struct fy_token_iter *iter, int c)
	    Ungets a single utf8 character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

		   * c	(int)  a  The character to push back, or -1 to reset the
		     pushback buffer.

   Description
     Pushes back a single utf8 character to an iterator stream. It will  be  re-
     turned  in  subsequent calls of fy_token_iter_utf8_getc(). Currently only a
     single character is allowed to be pushed back, and  any  further  calls  to
     ungetc will return an error.

   Return
     The  pushed  back utf8 character given as argument, or -1 in case of an er-
     ror.  If the pushed back utf8 character was -1, then 0 will be returned.

   fy_token_iter_utf8_peek
     int fy_token_iter_utf8_peek(struct fy_token_iter *iter)
	    Peeks at single utf8 character from an iterator

	    Parameters

		   * iter (struct fy_token_iter*) a The iterator.

   Description
     Peeks at the next utf8 character to get from an iterator. If  the	iterator
     is  finished, it will return -1. If any calls to ungetc have pushed a char-
     acter in the iterator it shall return that. The character	is  not  removed
     from the iterator stream.

   Return
     The  next utf8 character in the iterator, or -1 in case of an error, or end
     of stream.

   fy_parse_load_document
     struct fy_document *fy_parse_load_document(struct fy_parser *fyp)
	    Parse the next document from the parser stream

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     This method performs parsing on a parser stream and returns the next  docu-
     ment. This means that for a compound document with multiple documents, each
     call will return the next document.

   Return
     The next document from the parser stream.

   fy_parse_document_destroy
     void fy_parse_document_destroy(struct fy_parser *fyp, struct fy_document
     *fyd)
	    Destroy a document created by fy_parse_load_document()

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fyd (struct fy_document*) a The document to destroy

   fy_document_resolve
     int fy_document_resolve(struct fy_document *fyd)
	    Resolve anchors and merge keys

	    Parameters

		   * fyd (struct fy_document*) a The document to resolve

   Description
     This  method performs resolution of the given document, by replacing refer-
     ences to anchors with their contents and handling merge keys (<<)

   Return
     zero on success, -1 on error

   fy_document_has_directives
     bool fy_document_has_directives(const struct fy_document *fyd)
	    Document directive check

	    Parameters

		   * fyd (const struct fy_document*) a The document to check for
		     directives existence

   Description
     Checks whether the given document has any directives, i.e.  TAG or VERSION.

   Return
     true if directives exist, false if not

   fy_document_has_explicit_document_start
     bool fy_document_has_explicit_document_start(const struct fy_document *fyd)
	    Explicit document start check

	    Parameters

		   * fyd (const struct fy_document*) a The document to check for
		     explicit start marker

   Description
     Checks whether the given document has an explicit	document  start  marker,
     i.e. a

   Return
     true if document has an explicit document start marker, false if not

   fy_document_has_explicit_document_end
     bool fy_document_has_explicit_document_end(const struct fy_document *fyd)
	    Explicit document end check

	    Parameters

		   * fyd (const struct fy_document*) a The document to check for
		     explicit end marker

   Description
     Checks whether the given document has an explicit document end marker, i.e.
     a|

   Return
     true if document has an explicit document end marker, false if not

   fy_node_document
     struct fy_document *fy_node_document(struct fy_node *fyn)
	    Retreive the document the node belong to

	    Parameters

		   * fyn (struct fy_node*) a The node to retreive itas document

   Description
     Returns  the  document  of  the  node;  note that while the node may not be
     reachable via a path expression, it may still be member of a document.

   Return
     The document of the node, or NULL in case of an error, or when the node has
     no document attached.

   enum fy_emitter_write_type
     enum fy_emitter_write_type
	    Type of the emitted output

   Definition
	enum fy_emitter_write_type {
	    fyewt_document_indicator,
	    fyewt_tag_directive,
	    fyewt_version_directive,
	    fyewt_indent,
	    fyewt_indicator,
	    fyewt_whitespace,
	    fyewt_plain_scalar,
	    fyewt_single_quoted_scalar,
	    fyewt_double_quoted_scalar,
	    fyewt_literal_scalar,
	    fyewt_folded_scalar,
	    fyewt_anchor,
	    fyewt_tag,
	    fyewt_linebreak,
	    fyewt_alias,
	    fyewt_terminating_zero,
	    fyewt_plain_scalar_key,
	    fyewt_single_quoted_scalar_key,
	    fyewt_double_quoted_scalar_key,
	    fyewt_comment,
	    fyewt_indicator_question_mark,
	    fyewt_indicator_colon,
	    fyewt_indicator_dash,
	    fyewt_indicator_left_bracket,
	    fyewt_indicator_right_bracket,
	    fyewt_indicator_left_brace,
	    fyewt_indicator_right_brace,
	    fyewt_indicator_comma,
	    fyewt_indicator_bar,
	    fyewt_indicator_greater,
	    fyewt_indicator_single_quote_start,
	    fyewt_indicator_single_quote_end,
	    fyewt_indicator_double_quote_start,
	    fyewt_indicator_double_quote_end,
	    fyewt_indicator_ambersand,
	    fyewt_indicator_star,
	    fyewt_indicator_chomp,
	    fyewt_indicator_explicit_indent
	};

   Constants
     fyewt_document_indicator
	    Output chunk is a document indicator

     fyewt_tag_directive
	    Output chunk is a tag directive

     fyewt_version_directive
	    Output chunk is a version directive

     fyewt_indent
	    Output chunk is a document indicator

     fyewt_indicator
	    Output chunk is an indicator

     fyewt_whitespace
	    Output chunk is white space

     fyewt_plain_scalar
	    Output chunk is a plain scalar

     fyewt_single_quoted_scalar
	    Output chunk is a single quoted scalar

     fyewt_double_quoted_scalar
	    Output chunk is a double quoted scalar

     fyewt_literal_scalar
	    Output chunk is a literal block scalar

     fyewt_folded_scalar
	    Output chunk is a folded block scalar

     fyewt_anchor
	    Output chunk is an anchor

     fyewt_tag
	    Output chunk is a tag

     fyewt_linebreak
	    Output chunk is a linebreak

     fyewt_alias
	    Output chunk is an alias

     fyewt_terminating_zero
	    Output chunk is a terminating zero

     fyewt_plain_scalar_key
	    Output chunk is an plain scalar key

     fyewt_single_quoted_scalar_key
	    Output chunk is an single quoted scalar key

     fyewt_double_quoted_scalar_key
	    Output chunk is an double quoted scalar key

     fyewt_comment
	    Output chunk is a comment

     fyewt_indicator_question_mark
	    ? indicator

     fyewt_indicator_colon
	    : indicator

     fyewt_indicator_dash

	    * indicator

     fyewt_indicator_left_bracket
	    [ indicator

     fyewt_indicator_right_bracket
	    ] indicator

     fyewt_indicator_left_brace
	    { indicator

     fyewt_indicator_right_brace
	    } indicator

     fyewt_indicator_comma
	    , indicator

     fyewt_indicator_bar
	    indicator

     fyewt_indicator_greater
	    > indicator

     fyewt_indicator_single_quote_start
	    a indicator

     fyewt_indicator_single_quote_end
	    a indicator

     fyewt_indicator_double_quote_start
	    a indicator

     fyewt_indicator_double_quote_end
	    a indicator

     fyewt_indicator_ambersand
	    & indicator

     fyewt_indicator_star

	    * indicator

     fyewt_indicator_chomp
	    chomp indicator (- or +)

     fyewt_indicator_explicit_indent
	    explicit indent indicator (0-9)

   Description
     Describes the kind of emitted output, which makes it possible  to	colorize
     the output, or do some other content related filtering.

   enum fy_emitter_cfg_flags
     enum fy_emitter_cfg_flags
	    Emitter configuration flags

   Definition
	enum fy_emitter_cfg_flags {
	    FYECF_SORT_KEYS,
	    FYECF_OUTPUT_COMMENTS,
	    FYECF_STRIP_LABELS,
	    FYECF_STRIP_TAGS,
	    FYECF_STRIP_DOC,
	    FYECF_NO_ENDING_NEWLINE,
	    FYECF_STRIP_EMPTY_KV,
	    FYECF_EXTENDED_CFG,
	    FYECF_INDENT_DEFAULT,
	    FYECF_INDENT_1,
	    FYECF_INDENT_2,
	    FYECF_INDENT_3,
	    FYECF_INDENT_4,
	    FYECF_INDENT_5,
	    FYECF_INDENT_6,
	    FYECF_INDENT_7,
	    FYECF_INDENT_8,
	    FYECF_INDENT_9,
	    FYECF_WIDTH_DEFAULT,
	    FYECF_WIDTH_80,
	    FYECF_WIDTH_132,
	    FYECF_WIDTH_INF,
	    FYECF_MODE_ORIGINAL,
	    FYECF_MODE_BLOCK,
	    FYECF_MODE_FLOW,
	    FYECF_MODE_FLOW_ONELINE,
	    FYECF_MODE_JSON,
	    FYECF_MODE_JSON_TP,
	    FYECF_MODE_JSON_ONELINE,
	    FYECF_MODE_DEJSON,
	    FYECF_MODE_PRETTY,
	    FYECF_MODE_MANUAL,
	    FYECF_MODE_FLOW_COMPACT,
	    FYECF_MODE_JSON_COMPACT,
	    FYECF_DOC_START_MARK_AUTO,
	    FYECF_DOC_START_MARK_OFF,
	    FYECF_DOC_START_MARK_ON,
	    FYECF_DOC_END_MARK_AUTO,
	    FYECF_DOC_END_MARK_OFF,
	    FYECF_DOC_END_MARK_ON,
	    FYECF_VERSION_DIR_AUTO,
	    FYECF_VERSION_DIR_OFF,
	    FYECF_VERSION_DIR_ON,
	    FYECF_TAG_DIR_AUTO,
	    FYECF_TAG_DIR_OFF,
	    FYECF_TAG_DIR_ON,
	    FYECF_DEFAULT
	};

   Constants
     FYECF_SORT_KEYS
	    Sort key when emitting

     FYECF_OUTPUT_COMMENTS
	    Output comments (experimental)

     FYECF_STRIP_LABELS
	    Strip labels when emitting

     FYECF_STRIP_TAGS
	    Strip tags when emitting

     FYECF_STRIP_DOC
	    Strip document tags and markers when emitting

     FYECF_NO_ENDING_NEWLINE
	    Do not output ending new line (useful for single line mode)

     FYECF_STRIP_EMPTY_KV
	    Remove  all keys with empty values from the output (not available in
	    streaming mode)

     FYECF_EXTENDED_CFG
	    Extend  configuration,  this  config  structure  is  embedded  in  a
	    fy_emitter_xcfg.

     FYECF_INDENT_DEFAULT
	    Default emit output indent

     FYECF_INDENT_1
	    Output indent is 1

     FYECF_INDENT_2
	    Output indent is 2

     FYECF_INDENT_3
	    Output indent is 3

     FYECF_INDENT_4
	    Output indent is 4

     FYECF_INDENT_5
	    Output indent is 5

     FYECF_INDENT_6
	    Output indent is 6

     FYECF_INDENT_7
	    Output indent is 7

     FYECF_INDENT_8
	    Output indent is 8

     FYECF_INDENT_9
	    Output indent is 9

     FYECF_WIDTH_DEFAULT
	    Default emit output width

     FYECF_WIDTH_80
	    Output width is 80

     FYECF_WIDTH_132
	    Output width is 132

     FYECF_WIDTH_INF
	    Output width is infinite

     FYECF_MODE_ORIGINAL
	    Emit using the same flow mode as the original

     FYECF_MODE_BLOCK
	    Emit using only the block mode

     FYECF_MODE_FLOW
	    Emit using only the flow mode

     FYECF_MODE_FLOW_ONELINE
	    Emit using only the flow mode (in one line)

     FYECF_MODE_JSON
	    Emit using JSON mode (non type preserving)

     FYECF_MODE_JSON_TP
	    Emit using JSON mode (type preserving)

     FYECF_MODE_JSON_ONELINE
	    Emit using JSON mode (non type preserving, one line)

     FYECF_MODE_DEJSON
	    Emit YAML trying to pretify JSON

     FYECF_MODE_PRETTY
	    Emit YAML that tries to look good

     FYECF_MODE_MANUAL
	    Emit YAML respecting all manual style hints (reformats if needed)

     FYECF_MODE_FLOW_COMPACT
	    Emit using only the flow mode in as much as possible compact form

     FYECF_MODE_JSON_COMPACT
	    Emit using JSON compact form

     FYECF_DOC_START_MARK_AUTO
	    Automatically generate document start markers if required

     FYECF_DOC_START_MARK_OFF
	    Do not generate document start markers

     FYECF_DOC_START_MARK_ON
	    Always generate document start markers

     FYECF_DOC_END_MARK_AUTO
	    Automatically generate document end markers if required

     FYECF_DOC_END_MARK_OFF
	    Do not generate document end markers

     FYECF_DOC_END_MARK_ON
	    Always generate document end markers

     FYECF_VERSION_DIR_AUTO
	    Automatically generate version directive

     FYECF_VERSION_DIR_OFF
	    Never generate version directive

     FYECF_VERSION_DIR_ON
	    Always generate version directive

     FYECF_TAG_DIR_AUTO
	    Automatically generate tag directives

     FYECF_TAG_DIR_OFF
	    Never generate tag directives

     FYECF_TAG_DIR_ON
	    Always generate tag directives

     FYECF_DEFAULT
	    The default emitter configuration

   Description
     These flags control the operation of the emitter

   struct fy_emitter_cfg
     struct fy_emitter_cfg
	    emitter configuration structure.

   Definition
	struct fy_emitter_cfg {
	    enum fy_emitter_cfg_flags flags;
	    int (*output)(struct fy_emitter *emit, enum fy_emitter_write_type type, const char *str, int len, void *userdata);
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     flags  Configuration flags

     output
	    Pointer to the method that will perform output.

     userdata
	    Opaque user data pointer

     diag   Diagnostic interface

   Description
     Argument  to  the	fy_emitter_create() method which is the way to convert a
     runtime document structure back to YAML.

   enum fy_emitter_xcfg_flags
     enum fy_emitter_xcfg_flags
	    Emitter extended configuration flags

   Definition
	enum fy_emitter_xcfg_flags {
	    FYEXCF_COLOR_AUTO,
	    FYEXCF_COLOR_NONE,
	    FYEXCF_COLOR_FORCE,
	    FYEXCF_OUTPUT_STDOUT,
	    FYEXCF_OUTPUT_STDERR,
	    FYEXCF_OUTPUT_FILE,
	    FYEXCF_OUTPUT_FD,
	    FYEXCF_NULL_OUTPUT,
	    FYEXCF_OUTPUT_FILENAME,
	    FYEXCF_VISIBLE_WS,
	    FYEXCF_EXTENDED_INDICATORS,
	    FYEXCF_INDENTED_SEQ_IN_MAP,
	    FYEXCF_PRESERVE_FLOW_LAYOUT
	};

   Constants
     FYEXCF_COLOR_AUTO
	    Automatically colorize if on a terminal

     FYEXCF_COLOR_NONE
	    Do not colorize output

     FYEXCF_COLOR_FORCE
	    Force color generation

     FYEXCF_OUTPUT_STDOUT
	    Output to stdout (default)

     FYEXCF_OUTPUT_STDERR
	    Output to stderr, instead of stdout

     FYEXCF_OUTPUT_FILE
	    Output to the fp FILE pointer

     FYEXCF_OUTPUT_FD
	    Output to the fd file descriptor

     FYEXCF_NULL_OUTPUT
	    No output

     FYEXCF_OUTPUT_FILENAME
	    Output to the given filename

     FYEXCF_VISIBLE_WS
	    Make white space visible

     FYEXCF_EXTENDED_INDICATORS
	    Extend the indicators generated

     FYEXCF_INDENTED_SEQ_IN_MAP
	    Indent block sequences that are mapping values

     FYEXCF_PRESERVE_FLOW_LAYOUT
	    Preserve oneline flow collections in streaming mode

   Description
     These flags control the operation of the emitter.	If no extended	configu-
     ration mode is enabled all the flags are assumed 0.

   struct fy_emitter_xcfg
     struct fy_emitter_xcfg
	    emitter extended configuration structure.

   Definition
	struct fy_emitter_xcfg {
	    struct fy_emitter_cfg cfg;
	    enum fy_emitter_xcfg_flags xflags;
	    const char *colors[FYEWT_COUNT];
	    union {
		FILE *output_fp;
		int output_fd;
		const char *output_filename;
	    } ;
	}

   Members
     cfg    The standard emitter configuration

     xflags
	    Extra configuration flags

     colors
	    ANSI color overrides for the default output method

     {unnamed_union}
	    anonymous

     output_fp
	    The output FILE *, FYEXCF_FILE_OUTPUT must be set

     output_fd
	    The output file descriptor, FYEXCF_FD_OUTPUT must be set

     output_filename
	    The output filename, FYEXCF_FILENAME_OUTPUT must be set

   Description
     Argument to the fy_emitter create when FYECF_EXTENDED_CFG bit is set.

   fy_emitter_create
     struct fy_emitter *fy_emitter_create(const struct fy_emitter_cfg *cfg)
	    Create an emitter

	    Parameters

		   * cfg (const struct fy_emitter_cfg*) a The emitter configura-
		     tion

   Description
     Creates an emitter using the supplied configuration

   Return
     The newly created emitter or NULL on error.

   fy_emitter_destroy
     void fy_emitter_destroy(struct fy_emitter *emit)
	    Destroy an emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to destroy

   Description
     Destroy an emitter previously created by fy_emitter_create()

   fy_emitter_get_cfg
     const struct fy_emitter_cfg *fy_emitter_get_cfg(struct fy_emitter *emit)
	    Get the configuration of an emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

   Return
     The configuration of the emitter

   fy_emitter_get_diag
     struct fy_diag *fy_emitter_get_diag(struct fy_emitter *emit)
	    Get the diagnostic object of an emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to get the diagnos-
		     tic object

   Description
     Return  a pointer to the diagnostic object of an emitter object.  Note that
     the  returned  diag  object  has  a   reference   taken   so   you   should
     fy_diag_unref() it when youare done with it.

   Return
     A pointer to a refaed diagnostic object or NULL in case of an error.

   fy_emitter_set_diag
     int fy_emitter_set_diag(struct fy_emitter *emit, struct fy_diag *diag)
	    Set the diagnostic object of an emitter

	    Parameters

		   * emit  (struct fy_emitter*) a The emitter to replace the di-
		     agnostic object

		   * diag (struct fy_diag*) a The emitteras new  diagnostic  ob-
		     ject, NULL for default

   Description
     Replace  the  emittersas current diagnostic object with the one given as an
     argument. The previous diagnostic object will be unrefaed (and freed if its
     reference gets to 0).  Also note that the diag argument shall take a refer-
     ence too.

   Return
     0 if everything OK, -1 otherwise

   fy_emitter_set_finalizer
     void fy_emitter_set_finalizer(struct fy_emitter *emit, void (*final-
     izer)(struct fy_emitter *emit))
	    Set emitter finalizer

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to replace the  di-
		     agnostic object

		   * finalizer	(void (*)(struct fy_emitter *emit)) a The final-
		     izer callback

   Description
     Set a method callback to be called when the emitter is disposed of. If  fi-
     nalizer is NULL, then the method is removed.

   struct fy_emitter_default_output_data
     struct fy_emitter_default_output_data
	    emitter default output configuration

   Definition
	struct fy_emitter_default_output_data {
	    FILE *fp;
	    bool colorize;
	    bool visible;
	}

   Members
     fp     File where the output is directed to

     colorize
	    Use ANSI color sequences to colorize the output

     visible
	    Make whitespace visible (requires a UTF8 capable terminal)

   Description
     This is the argument to the default output method of the emitter.

   fy_emitter_default_output
     int fy_emitter_default_output(struct fy_emitter *fye, enum
     fy_emitter_write_type type, const char *str, int len, void *userdata)
	    The default colorizing output method

	    Parameters

		   * fye (struct fy_emitter*) a The emitter

		   * type  (enum  fy_emitter_write_type)  a  Type of the emitted
		     output

		   * str (const char*) a Pointer to the string to output

		   * len (int) a Length of the string

		   * userdata (void*) a Must point to a  fy_emitter_default_out-
		     put_data structure

   Description
     This is the default colorizing output method.  Will be used when the output
     field of the emitter configuration is NULL.

   Return
     0 on success, -1 on error

   fy_document_default_emit_to_fp
     int fy_document_default_emit_to_fp(struct fy_document *fyd, FILE *fp)
	    Emit a document to a file, using defaults

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * fp (FILE*) a The file where the output is sent

   Description
     Simple  one  shot emitter to a file, using the default emitter output.  The
     output will be colorized if the the file points to a tty.

   Return
     0 on success, -1 on error

   fy_emit_event
     int fy_emit_event(struct fy_emitter *emit, struct fy_event *fye)
	    Queue (and possibly emit) an event

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to use

		   * fye (struct fy_event*) a The event to queue for emission

   Description
     Queue and output using the emitter. This is  the  streaming  output  method
     which does not require creating a document.

   Return
     0 on success, -1 on error

   fy_emit_vevent
     int fy_emit_vevent(struct fy_emitter *emit, enum fy_event_type type,
     va_list ap)
	    Queue (and possibly emit) an event using varargs

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to use

		   * type (enum fy_event_type) a The event type to create

		   * ap (va_list) a The variable argument list pointer.

   Description
     Queue and output using the emitter. The format is identical to the one used
     in fy_emit_event_vcreate().

   Return
     0 on success, -1 on error

   fy_emit_eventf
     int fy_emit_eventf(struct fy_emitter *emit, enum fy_event_type type, ...)
	    Queue (and possibly emit) an event using variable args

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to use

		   * type (enum fy_event_type) a The event type to create

		   * ellipsis (ellipsis) a The optional extra arguments

   Description
     Queue and output using the emitter. The format is identical to the one used
     in fy_emit_event_create().

   Return
     0 on success, -1 on error

   fy_emit_scalar_write
     int fy_emit_scalar_write(struct fy_emitter *fye, enum fy_scalar_style
     style, const char *anchor, const char *tag, const char *buf, size_t count)
	    Emit a scalar with write semantics

	    Parameters

		   * fye (struct fy_emitter*) a The emitter to use

		   * style (enum fy_scalar_style) a The scalar style to use

		   * anchor (const char*) a The anchor or NULL

		   * tag (const char*) a The tag or NULL

		   * buf (const char*) a Pointer to the buffer

		   * count (size_t) a The number of bytes to write

   Description
     Queue  and  output using the emitter a scalar using a standard write inter-
     face.

   Return
     0 on success, -1 on error

   fy_emit_scalar_vprintf
     int fy_emit_scalar_vprintf(struct fy_emitter *fye, enum fy_scalar_style
     style, const char *anchor, const char *tag, const char *fmt, va_list ap)
	    Emit a scalar with vprintf semantics

	    Parameters

		   * fye (struct fy_emitter*) a The emitter to use

		   * style (enum fy_scalar_style) a The scalar style to use

		   * anchor (const char*) a The anchor or NULL

		   * tag (const char*) a The tag or NULL

		   * fmt (const char*) a The printf like format string

		   * ap (va_list) a The argument list

   Description
     Queue and output using the emitter a scalar using a standard vprintf inter-
     face.

   Return
     0 on success, -1 on error

   fy_emit_scalar_printf
     int fy_emit_scalar_printf(struct fy_emitter *fye, enum fy_scalar_style
     style, const char *anchor, const char *tag, const char *fmt, ...)
	    Emit a scalar with printf semantics

	    Parameters

		   * fye (struct fy_emitter*) a The emitter to use

		   * style (enum fy_scalar_style) a The scalar style to use

		   * anchor (const char*) a The anchor or NULL

		   * tag (const char*) a The tag or NULL

		   * fmt (const char*) a The printf like format string

		   * ellipsis (ellipsis) a The extra arguments

   Description
     Queue and output using the emitter a scalar using a standard printf  inter-
     face.

   Return
     0 on success, -1 on error

   fy_emit_event_from_parser
     int fy_emit_event_from_parser(struct fy_emitter *emit, struct fy_parser
     *fyp, struct fy_event *fye)
	    Queue (and possibly emit) an event generated by the parser.

	    Parameters

		   * emit (struct fy_emitter*) a The emitter to use

		   * fyp  (struct  fy_parser*)	a  The parser that generated the
		     event

		   * fye (struct fy_event*) a The event to queue for emission

   Description
     Queue and output using the emitter. This is  the  streaming  output  method
     which does not require creating a document.  Similar to fy_emit_event() but
     it is more efficient.

   Return
     0 on success, -1 on error

   fy_emit_document
     int fy_emit_document(struct fy_emitter *emit, struct fy_document *fyd)
	    Emit the document using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fyd (struct fy_document*) a The document to emit

   Description
     Emits a document in YAML format using the emitter.

   Return
     0 on success, -1 on error

   fy_emit_document_start
     int fy_emit_document_start(struct fy_emitter *emit, struct fy_document
     *fyd, struct fy_node *fyn)
	    Emit document start using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fyd  (struct  fy_document*) a The document to use for emit-
		     ting itas start

		   * fyn (struct fy_node*) a The root (or  NULL  for  using  the
		     documentas root)

   Description
     Emits  a  document  start	using the emitter. This is used in case you need
     finer control over the emitting output.

   Return
     0 on success, -1 on error

   fy_emit_document_end
     int fy_emit_document_end(struct fy_emitter *emit)
	    Emit document end using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

   Description
     Emits a document end using the emitter. This is used in case you need finer
     control over the emitting output.

   Return
     0 on success, -1 on error

   fy_emit_node
     int fy_emit_node(struct fy_emitter *emit, struct fy_node *fyn)
	    Emit a single node using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fyn (struct fy_node*) a The node to emit

   Description
     Emits a single node using the emitter. This is used in case you need  finer
     control over the emitting output.

   Return
     0 on success, -1 on error

   fy_emit_root_node
     int fy_emit_root_node(struct fy_emitter *emit, struct fy_node *fyn)
	    Emit a single root node using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fyn (struct fy_node*) a The root node to emit

   Description
     Emits  a  single root node using the emitter. This is used in case you need
     finer control over the emitting output.

   Return
     0 on success, -1 on error

   fy_emit_body_node
     int fy_emit_body_node(struct fy_emitter *emit, struct fy_node *fyn)
	    Emit a single body node using the emitter

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fyn (struct fy_node*) a The body node to emit

   Description
     Emits a single body node using the emitter. This is used in case  you  need
     finer control over the emitting output.  No stream and document events will
     be generated at all.

   Return
     0 on success, -1 on error

   fy_emit_explicit_document_end
     int fy_emit_explicit_document_end(struct fy_emitter *emit)
	    Emit an explicit document end

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

   Description
     Emits  an	explicit  document end, i.e. a| . Use this if you you need finer
     control over the emitting output.

   Return
     0 on success, -1 on error

   fy_emit_document_to_fp
     int fy_emit_document_to_fp(struct fy_document *fyd, enum
     fy_emitter_cfg_flags flags, FILE *fp)
	    Emit a document to an file pointer

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * flags (enum fy_emitter_cfg_flags) a The  emitter  flags  to
		     use

		   * fp (FILE*) a The file pointer to output to

   Description
     Emits a document from the root to the given file pointer.

   Return
     0 on success, -1 on error

   fy_emit_document_to_file
     int fy_emit_document_to_file(struct fy_document *fyd, enum
     fy_emitter_cfg_flags flags, const char *filename)
	    Emit a document to file

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * flags  (enum  fy_emitter_cfg_flags)  a The emitter flags to
		     use

		   * filename (const char*) a The filename to output to, or NULL
		     for stdout

   Description
     Emits a document from the root to the given file.	The file will  be  fope-
     naed using a awaa mode.

   Return
     0 on success, -1 on error

   fy_emit_document_to_fd
     int fy_emit_document_to_fd(struct fy_document *fyd, enum
     fy_emitter_cfg_flags flags, int fd)
	    Emit a document to a file descriptor

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * flags  (enum  fy_emitter_cfg_flags)  a The emitter flags to
		     use

		   * fd (int) a The file descriptor to output to

   Description
     Emits a document from the root to the given file descriptor

   Return
     0 on success, -1 on error

   fy_emit_document_to_buffer
     int fy_emit_document_to_buffer(struct fy_document *fyd, enum
     fy_emitter_cfg_flags flags, char *buf, size_t size)
	    Emit a document to a buffer

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * flags (enum fy_emitter_cfg_flags) a The  emitter  flags  to
		     use

		   * buf (char*) a Pointer to the buffer area to fill

		   * size (size_t) a Size of the buffer

   Description
     Emits  an document from the root to the given buffer.  If the document does
     not fit, an error will be returned.

   Return
     A positive number, which is the size of the emitted document on the  buffer
     on success, -1 on error

   fy_emit_document_to_string
     char *fy_emit_document_to_string(struct fy_document *fyd, enum
     fy_emitter_cfg_flags flags)
	    Emit a document to an allocated string

	    Parameters

		   * fyd (struct fy_document*) a The document to emit

		   * flags  (enum  fy_emitter_cfg_flags)  a The emitter flags to
		     use

   Description
     Emits an document from the root to a string which will be dynamically allo-
     cated.

   Return
     A pointer to the allocated string, or NULL in case of an error

   fy_emit_node_to_buffer
     int fy_emit_node_to_buffer(struct fy_node *fyn, enum fy_emitter_cfg_flags
     flags, char *buf, size_t size)
	    Emit a node (recursively) to a buffer

	    Parameters

		   * fyn (struct fy_node*) a The node to emit

		   * flags (enum fy_emitter_cfg_flags) a The  emitter  flags  to
		     use

		   * buf (char*) a Pointer to the buffer area to fill

		   * size (size_t) a Size of the buffer

   Description
     Emits  a  node  recursively  to the given buffer.	If the document does not
     fit, an error will be returned.

   Return
     A positive number, which is the size of the emitted node on the  buffer  on
     success, -1 on error

   fy_emit_node_to_string
     char *fy_emit_node_to_string(struct fy_node *fyn, enum fy_emitter_cfg_flags
     flags)
	    Emit a node to an allocated string

	    Parameters

		   * fyn (struct fy_node*) a The node to emit

		   * flags  (enum  fy_emitter_cfg_flags)  a The emitter flags to
		     use

   Description
     Emits a node recursively to a string which will be dynamically allocated.

   Return
     A pointer to the allocated string, or NULL in case of an error

   fy_emit_to_buffer
     struct fy_emitter *fy_emit_to_buffer(enum fy_emitter_cfg_flags flags, char
     *buf, size_t size)
	    Create an emitter for buffer output.

	    Parameters

		   * flags (enum fy_emitter_cfg_flags) a The  emitter  flags  to
		     use

		   * buf (char*) a Pointer to the buffer area to fill

		   * size (size_t) a Size of the buffer

   Description
     Creates   a   special   purpose   emitter	for  buffer  output.   Calls  to
     fy_emit_event() populate the buffer.  The contents are retreived by a  call
     to fy_emit_to_buffer_collect()

   Return
     The newly created emitter or NULL on error.

   fy_emit_to_buffer_collect
     char *fy_emit_to_buffer_collect(struct fy_emitter *emit, size_t *sizep)
	    Collect the buffer emitter output

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * sizep (size_t*) a Pointer to the size to be filled

   Description
     Collects the output of the emitter which was created by fy_emit_to_buffer()
     and  populated  using  fy_emit_event() calls.  The NULL terminated returned
     buffer is the same as the one used in the fy_emit_to_buffer() call and  the
     sizep argument will be filled with the size of the buffer.

   Return
     The buffer or NULL in case of an error.

   fy_emit_to_string
     struct fy_emitter *fy_emit_to_string(enum fy_emitter_cfg_flags flags)
	    Create an emitter to create a dynamically allocated string.

	    Parameters

		   * flags  (enum  fy_emitter_cfg_flags)  a The emitter flags to
		     use

   Description
     Creates a special purpose emitter for output  to  a  dynamically  allocated
     string.   Calls  to  fy_emit_event() populate the buffer.	The contents are
     retreived by a call to fy_emit_to_string_collect()

   Return
     The newly created emitter or NULL on error.

   fy_emit_to_string_collect
     char *fy_emit_to_string_collect(struct fy_emitter *emit, size_t *sizep)
	    Collect the string emitter output

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * sizep (size_t*) a Pointer to the size to be filled

   Description
     Collects the output of the emitter which was created by fy_emit_to_string()
     and populated using fy_emit_event() calls.  The  NULL  terminated	returned
     buffer  is  dynamically  allocated  and must be freed via a call to free().
     The sizep argument will be filled with the size of the buffer.

   Return
     The dynamically allocated string or NULL in case of an error.

   fy_node_copy
     struct fy_node *fy_node_copy(struct fy_document *fyd, struct fy_node
     *fyn_from)
	    Copy a node, associating the new node with the given document

	    Parameters

		   * fyd (struct fy_document*) a The document which the  result-
		     ing node will be associated with

		   * fyn_from (struct fy_node*) a The source node to recursively
		     copy

   Description
     Make  a  deep copy of a node, associating the copy with the given document.
     Note that no content copying takes place as the contents of the  nodes  are
     reference counted. This means that the operation is relatively inexpensive.

     Note  that  the  copy  includes all anchors contained in the subtree of the
     source, so this call will register them with the document.

   Return
     The copied node on success, NULL on error

   fy_document_clone
     struct fy_document *fy_document_clone(struct fy_document *fydsrc)
	    Clones a document

	    Parameters

		   * fydsrc (struct fy_document*) a The source document to clone

   Description
     Clone a document, by making a deep copy of the source.  Note that	no  con-
     tent  copying  takes  place  as  the  contents  of  the nodes are reference
     counted. This means that the operation is relatively inexpensive.

   Return
     The newly created clone document, or NULL in case of an error

   fy_node_insert
     int fy_node_insert(struct fy_node *fyn_to, struct fy_node *fyn_from)
	    Insert a node to the given node

	    Parameters

		   * fyn_to (struct fy_node*) a The target node

		   * fyn_from (struct fy_node*) a The source node

   Description
     Insert a node to another node. If fyn_from is NULL then this operation will
     delete the fyn_to node.

   The operation varies according to the types of the arguments
     from: scalar

     to: another-scalar -> scalar to: { key: value } -> scalar to: [ seq0,  seq1
     ] -> scalar

     from:  [ seq2 ] to: scalar -> [ seq2 ] to: { key: value } -> [ seq2 ] to: [
     seq0, seq1 ] -> [ seq0, seq1, sec2 ]

     from: { another-key: another-value }  to:	scalar	->  {  another-key:  an-
     other-value  }  to:  {  key:  value  }  ->  {  key: value, another-key: an-
     other-value } to: [ seq0, seq1 ] -> { another-key: another-value }

     from: { key: another-value } to: scalar -> { key:	another-value  }  to:  {
     key:  value  }  ->  { key: another-value } to: [ seq0, seq1 ] -> { key: an-
     other-value }

   The rules are
     * If target node changes type, source ovewrites target.

     * If source or target node are scalars, source it overwrites target.

     * If target and source are sequences the items of the source  sequence  are
       appended to the target sequence.

     * If  target and source are maps the key, value pairs of the source are ap-
       pended to the target map. If the target map  contains  a  key-value  pair
       that is present in the source map, it is overwriten by it.

   Return
     0 on success, -1 on error

   fy_node_delete
     int fy_node_delete(struct fy_node *fyn)
	    Delete a node from a document

	    Parameters

		   * fyn (struct fy_node*) a The node to delete.

   Description
     Delete  the given node.  If itas part of a sequence it will be removed from
     it.  If itas the value of a node key value pair, it will  be  removed  from
     the mapping.

     This is an alias for fy_document_insert_at(fyn, NULL)

     Note  that it is expected this node is attached to a document.  Do not call
     this to free a node, because if itas part of a collection it  will  not  be
     properly removed.

   Return
     0 on success, -1 on error

   fy_document_insert_at
     int fy_document_insert_at(struct fy_document *fyd, const char *path, size_t
     pathlen, struct fy_node *fyn)
	    Insert a node to the given path in the document

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * path  (const  char*)  a The path where the insert operation
		     will target

		   * pathlen (size_t) a The length of the path	(or  -1  if  a0a
		     terminated)

		   * fyn (struct fy_node*) a The source node

   Description
     Insert  a	node  to a given point in the document. If fyn is NULL then this
     operation will delete the target node.

     Please see fy_node_insert for details of operation.

     Note that in any case the fyn node will be unrefaed.  So if  the  operation
     fails,  and  the  reference  is 0 the node will be freed. If you want it to
     stick around take a reference before.

   Return
     0 on success, -1 on error

   enum fy_node_type
     enum fy_node_type
	    Node type

   Definition
	enum fy_node_type {
	    FYNT_SCALAR,
	    FYNT_SEQUENCE,
	    FYNT_MAPPING
	};

   Constants
     FYNT_SCALAR
	    Node is a scalar

     FYNT_SEQUENCE
	    Node is a sequence

     FYNT_MAPPING
	    Node is a mapping

   Description
     Each node may be one of the following types

   enum fy_node_style
     enum fy_node_style
	    Node style

   Definition
	enum fy_node_style {
	    FYNS_ANY,
	    FYNS_FLOW,
	    FYNS_BLOCK,
	    FYNS_PLAIN,
	    FYNS_SINGLE_QUOTED,
	    FYNS_DOUBLE_QUOTED,
	    FYNS_LITERAL,
	    FYNS_FOLDED,
	    FYNS_ALIAS
	};

   Constants
     FYNS_ANY
	    No hint, let the emitter decide

     FYNS_FLOW
	    Prefer flow style (for sequence/mappings)

     FYNS_BLOCK
	    Prefer block style (for sequence/mappings)

     FYNS_PLAIN
	    Plain style preferred

     FYNS_SINGLE_QUOTED
	    Single quoted style preferred

     FYNS_DOUBLE_QUOTED
	    Double quoted style preferred

     FYNS_LITERAL
	    Literal style preferred (valid in block context)

     FYNS_FOLDED
	    Folded style preferred (valid in block context)

     FYNS_ALIAS
	    Itas an alias

   Description
     A node may contain a hint of how it should be rendered, encoded as a style.

   enum fy_node_walk_flags
     enum fy_node_walk_flags
	    Node walk flags

   Definition
	enum fy_node_walk_flags {
	    FYNWF_DONT_FOLLOW,
	    FYNWF_FOLLOW,
	    FYNWF_PTR_YAML,
	    FYNWF_PTR_JSON,
	    FYNWF_PTR_RELJSON,
	    FYNWF_PTR_YPATH,
	    FYNWF_URI_ENCODED,
	    FYNWF_MAXDEPTH_DEFAULT,
	    FYNWF_MARKER_DEFAULT,
	    FYNWF_PTR_DEFAULT
	};

   Constants
     FYNWF_DONT_FOLLOW
	    Donat follow aliases during pathwalk

     FYNWF_FOLLOW
	    Follow aliases during pathwalk

     FYNWF_PTR_YAML
	    YAML pointer path walks

     FYNWF_PTR_JSON
	    JSON pointer path walks

     FYNWF_PTR_RELJSON
	    Relative JSON pointer path walks

     FYNWF_PTR_YPATH
	    YPATH pointer path walks

     FYNWF_URI_ENCODED
	    The path is URI encoded

     FYNWF_MAXDEPTH_DEFAULT
	    Max follow depth is automatically determined

     FYNWF_MARKER_DEFAULT
	    Default marker to use when scanning

     FYNWF_PTR_DEFAULT
	    Default path type

   fy_node_style_from_scalar_style
     enum fy_node_style fy_node_style_from_scalar_style(enum fy_scalar_style
     sstyle)
	    Convert from scalar to node style

	    Parameters

		   * sstyle (enum fy_scalar_style) a The input scalar style

   Description
     Convert a scalar style to a node style.

   Return
     The matching node style

   typedef fy_node_mapping_sort_fn
     int fy_node_mapping_sort_fn(const struct fy_node_pair *fynp_a, const struct
     fy_node_pair *fynp_b, void *arg)
	    Mapping sorting method function

	    Parameters

		   * fynp_a (const struct fy_node_pair*) a The	first  node_pair
		     used in the comparison

		   * fynp_b  (const struct fy_node_pair*) a The second node_pair
		     used in the comparison

		   * arg (void*) a The opaque user provided pointer to the  sort
		     operation

   Return
     <0  if  fynp_a  is  less  than  fynp_b 0 if fynp_a is equal to fynp_b >0 if
     fynp_a is greater than fynp_b

   typedef fy_node_scalar_compare_fn
     int fy_node_scalar_compare_fn(struct fy_node *fyn_a, struct fy_node *fyn_b,
     void *arg)
	    Node compare method function for scalars

	    Parameters

		   * fyn_a (struct fy_node*) a The first scalar node used in the
		     comparison

		   * fyn_b (struct fy_node*) a The second scalar  node	used  in
		     the comparison

		   * arg  (void*) a The opaque user provided pointer to the com-
		     pare operation

   Return
     <0 if fyn_a is less than fyn_b 0 if fyn_a is equal to fyn_b >0 if fyn_a  is
     greater than fyn_b

   fy_node_compare
     bool fy_node_compare(struct fy_node *fyn1, struct fy_node *fyn2)
	    Compare two nodes for equality

	    Parameters

		   * fyn1  (struct fy_node*) a The first node to use in the com-
		     parison

		   * fyn2 (struct fy_node*) a The second node to use in the com-
		     parison

   Description
     Compare two nodes for equality.  The comparison is adeepa, i.e. it recurses
     in subnodes, and orders the keys of maps using default libc  strcmp  order-
     ing.  For	scalar	the comparison is performed after any escaping so itas a
     true content comparison.

   Return
     true if the nodes contain the same content, false otherwise

   fy_node_compare_user
     bool fy_node_compare_user(struct fy_node *fyn1, struct fy_node *fyn2,
     fy_node_mapping_sort_fn sort_fn, void *sort_fn_arg,
     fy_node_scalar_compare_fn cmp_fn, void *cmp_fn_arg)
	    Compare two nodes for equality using user supplied sort  and  scalar
	    compare methods

	    Parameters

		   * fyn1  (struct fy_node*) a The first node to use in the com-
		     parison

		   * fyn2 (struct fy_node*) a The second node to use in the com-
		     parison

		   * sort_fn (fy_node_mapping_sort_fn) a The method to	use  for
		     sorting maps, or NULL for the default

		   * sort_fn_arg  (void*)  a The extra user supplied argument to
		     the sort_fn

		   * cmp_fn (fy_node_scalar_compare_fn) a The method to use  for
		     comparing scalars, or NULL for the default

		   * cmp_fn_arg  (void*)  a  The extra user supplied argument to
		     the cmp_fn

   Description
     Compare two nodes for equality using user supplied sot and  scalar  compare
     methods.	The  comparison is adeepa, i.e. it recurses in subnodes, and or-
     ders the keys of maps using the supplied mapping sort method for  ordering.
     For scalars the comparison is performed using the supplied scalar node com-
     pare methods.

   Return
     true if the nodes contain the same content, false otherwise

   fy_node_compare_string
     bool fy_node_compare_string(struct fy_node *fyn, const char *str, size_t
     len)
	    Compare a node for equality with a YAML string

	    Parameters

		   * fyn (struct fy_node*) a The node to use in the comparison

		   * str (const char*) a The YAML string to compare against

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Compare a node for equality with a YAML string.   The  comparison	is  per-
     formed  using fy_node_compare() with the first node supplied as an argument
     and the second being  generated  by  calling  fy_document_build_from_string
     with the YAML string.

   Return
     true if the node and the string are equal.

   fy_node_compare_token
     bool fy_node_compare_token(struct fy_node *fyn, struct fy_token *fyt)
	    Compare a node for equality against a token

	    Parameters

		   * fyn (struct fy_node*) a The node to use in the comparison

		   * fyt (struct fy_token*) a The scalar token

   Description
     Compare  a  node  for  equality with a token.  Both the node and the tokens
     must be a scalars.

   Return
     true if the node and the token are equal.

   fy_node_compare_text
     bool fy_node_compare_text(struct fy_node *fyn, const char *text, size_t
     len)
	    Compare a node for equality with a raw C text

	    Parameters

		   * fyn (struct fy_node*) a The node to use in the comparison

		   * text (const char*) a The raw C text to compare against

		   * len (size_t) a The length of the text (or -1 if a0a  termi-
		     nated)

   Description
     Compare  a  node  for  equality  with  a  raw C string.  The node must be a
     scalar.

   Return
     true if the node and the text are equal.

   fy_document_create
     struct fy_document *fy_document_create(const struct fy_parse_cfg *cfg)
	    Create an empty document

	    Parameters

		   * cfg (const struct fy_parse_cfg*) a The parse  configuration
		     to use or NULL for the default.

   Description
     Create  an empty document using the provided parser configuration.  If NULL
     use the default parse configuration.

   Return
     The created empty document, or NULL on error.

   fy_document_destroy
     void fy_document_destroy(struct fy_document *fyd)
	    Destroy a document previously created via fy_document_create()

	    Parameters

		   * fyd (struct fy_document*) a The document to destroy

   Description
     Destroy a document (along with all children documents)

   fy_document_get_cfg
     const struct fy_parse_cfg *fy_document_get_cfg(struct fy_document *fyd)
	    Get the configuration of a document

	    Parameters

		   * fyd (struct fy_document*) a The document

   Return
     The configuration of the document

   fy_document_get_diag
     struct fy_diag *fy_document_get_diag(struct fy_document *fyd)
	    Get the diagnostic object of a document

	    Parameters

		   * fyd (struct fy_document*) a The document to get  the  diag-
		     nostic object

   Description
     Return  a pointer to the diagnostic object of a document object.  Note that
     the  returned  diag  object  has  a   reference   taken   so   you   should
     fy_diag_unref() it when youare done with it.

   Return
     A pointer to a refaed diagnostic object or NULL in case of an error.

   fy_document_set_diag
     int fy_document_set_diag(struct fy_document *fyd, struct fy_diag *diag)
	    Set the diagnostic object of a document

	    Parameters

		   * fyd (struct fy_document*) a The document to replace the di-
		     agnostic object

		   * diag  (struct fy_diag*) a The documentas new diagnostic ob-
		     ject, NULL for default

   Description
     Replace the documentsas current diagnostic object with the one given as  an
     argument. The previous diagnostic object will be unrefaed (and freed if its
     reference gets to 0).  Also note that the diag argument shall take a refer-
     ence too.

   Return
     0 if everything OK, -1 otherwise

   fy_document_set_parent
     int fy_document_set_parent(struct fy_document *fyd, struct fy_document
     *fyd_child)
	    Make a document a child of another

	    Parameters

		   * fyd (struct fy_document*) a The parent document

		   * fyd_child (struct fy_document*) a The child document

   Description
     Set the parent of fyd_child document to be fyd

   Return
     0 if all OK, -1 on error.

   fy_document_build_from_string
     struct fy_document *fy_document_build_from_string(const struct fy_parse_cfg
     *cfg, const char *str, size_t len)
	    Create a document using the provided YAML source.

	    Parameters

		   * cfg  (const struct fy_parse_cfg*) a The parse configuration
		     to use or NULL for the default.

		   * str (const char*) a The YAML source to use.

		   * len (size_t) a The length of the string (or -1 if a0a  ter-
		     minated)

   Description
     Create a document parsing the provided string as a YAML source.

   Return
     The created document, or NULL on error.

   fy_document_build_from_malloc_string
     struct fy_document *fy_document_build_from_malloc_string(const struct
     fy_parse_cfg *cfg, char *str, size_t len)
	    Create a document using the provided YAML source which was malloced.

	    Parameters

		   * cfg  (const struct fy_parse_cfg*) a The parse configuration
		     to use or NULL for the default.

		   * str (char*) a The YAML source to use.

		   * len (size_t) a The length of the string (or -1 if a0a  ter-
		     minated)

   Description
     Create  a document parsing the provided string as a YAML source. The string
     is expected to have been allocated by malloc(3) and when  the  document  is
     destroyed it will be automatically freed.

   Return
     The created document, or NULL on error.

   fy_document_build_from_file
     struct fy_document *fy_document_build_from_file(const struct fy_parse_cfg
     *cfg, const char *file)
	    Create a document parsing the given file

	    Parameters

		   * cfg  (const struct fy_parse_cfg*) a The parse configuration
		     to use or NULL for the default.

		   * file (const char*) a The name of the file to parse

   Description
     Create a document parsing the provided file as a YAML source.

   Return
     The created document, or NULL on error.

   fy_document_build_from_fp
     struct fy_document *fy_document_build_from_fp(const struct fy_parse_cfg
     *cfg, FILE *fp)
	    Create a document parsing the given file pointer

	    Parameters

		   * cfg (const struct fy_parse_cfg*) a The parse  configuration
		     to use or NULL for the default.

		   * fp (FILE*) a The file pointer

   Description
     Create a document parsing the provided file pointer as a YAML source.

   Return
     The created document, or NULL on error.

   fy_document_vbuildf
     struct fy_document *fy_document_vbuildf(const struct fy_parse_cfg *cfg,
     const char *fmt, va_list ap)
	    Create a document using the provided YAML via vprintf formatting

	    Parameters

		   * cfg  (const struct fy_parse_cfg*) a The parse configuration
		     to use or NULL for the default.

		   * fmt (const char*) a The format  string  creating  the  YAML
		     source to use.

		   * ap (va_list) a The va_list argument pointer

   Description
     Create  a document parsing the provided string as a YAML source. The string
     is created by applying vprintf formatting.

   Return
     The created document, or NULL on error.

   fy_document_buildf
     struct fy_document *fy_document_buildf(const struct fy_parse_cfg *cfg,
     const char *fmt, ...)
	    Create a document using the provided YAML source via printf  format-
	    ting

	    Parameters

		   * cfg  (const struct fy_parse_cfg*) a The parse configuration
		     to use or NULL for the default.

		   * fmt (const char*) a The format  string  creating  the  YAML
		     source to use.

		   * ellipsis (ellipsis) a The printf arguments

   Description
     Create  a document parsing the provided string as a YAML source. The string
     is created by applying printf formatting.

   Return
     The created document, or NULL on error.

   fy_flow_document_build_from_string
     struct fy_document *fy_flow_document_build_from_string(const struct
     fy_parse_cfg *cfg, const char *str, size_t len, size_t *consumed)
	    Create a document using the provided YAML source.

	    Parameters

		   * cfg (const struct fy_parse_cfg*) a The parse  configuration
		     to use or NULL for the default.

		   * str (const char*) a The YAML source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

		   * consumed (size_t*) a A pointer to the consumed amount

   Description
     Create a document parsing the provided string as a YAML source.

     The document is a flow document, i.e. does not contain  any  block  content
     and is usually laid out in a single line.

   Example of flow documents
     plain-scalar  adouble-quoted-scalara  asingle-quoted-scalara { foo: bar } [
     0, 1, 2 ]

     A flow document is important because parsing stops at the end of it, and so
     can be placed in other non-yaml content.

   Return
     The created document, or NULL on error.

   fy_block_document_build_from_string
     struct fy_document *fy_block_document_build_from_string(const struct
     fy_parse_cfg *cfg, const char *str, size_t len, size_t *consumed)
	    Create a document using the provided YAML source.

	    Parameters

		   * cfg (const struct fy_parse_cfg*) a The parse  configuration
		     to use or NULL for the default.

		   * str (const char*) a The YAML source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

		   * consumed (size_t*) a A pointer to the consumed amount

   Description
     Create a document parsing the provided string as a YAML source.

     The document is a block document, and it terminates  when	indentation  ap-
     pears to do so.

     Example of block documents:

	this-is-yaml
	  foo: bar    <- starts here
	  baz: [1, 2]
	this-is-yaml-no-more

   Return
     The created document, or NULL on error.

   fy_document_root
     struct fy_node *fy_document_root(struct fy_document *fyd)
	    Return the root node of the document

	    Parameters

		   * fyd (struct fy_document*) a The document

   Description
     Returns the root of the document. If the document is empty NULL will be re-
     turned instead.

   Return
     The root of the document, or NULL if the document is empty.

   fy_document_set_root
     int fy_document_set_root(struct fy_document *fyd, struct fy_node *fyn)
	    Set the root of the document

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyn (struct fy_node*) a The new root of the document.

   Description
     Set the root of a document. If the document was not empty the old root will
     be freed. If fyn is NULL then the document is set to empty.

   Return
     0 on success, -1 on error

   fy_node_get_type
     enum fy_node_type fy_node_get_type(struct fy_node *fyn)
	    Get the node type

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve  the  node  type.  It  is  one  of  FYNT_SCALAR,	FYNT_SEQUENCE or
     FYNT_MAPPING. A NULL node argument is a FYNT_SCALAR.

   Return
     The node type

   fy_node_get_style
     enum fy_node_style fy_node_get_style(struct fy_node *fyn)
	    Get the node style

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the node rendering style.  If the node is NULL then the  style  is
     FYNS_PLAIN.

   Return
     The node style

   fy_node_set_style
     enum fy_node_style fy_node_set_style(struct fy_node *fyn, enum
     fy_node_style style)
	    Set the node style

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * style  (enum  fy_node_style) a The requested node rendering
		     style

   Description
     Try to set the node rendering style of a node.  If the style of node is il-
     legal (for example you canat set an arbitrary scalar that	contains  zeroes
     to plain) then the actual style that was set will be returned.

   Return
     The final node style

   fy_node_get_start_token
     struct fy_token *fy_node_get_start_token(struct fy_node *fyn)
	    Get the node start token

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the node start token.

     For scalars, this is the same as the end token.

   Return
     The node start token

   fy_node_get_end_token
     struct fy_token *fy_node_get_end_token(struct fy_node *fyn)
	    Get the node end token

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the node end token.

     For scalars, this is the same as the start token.

   Return
     The node end token

   fy_node_is_scalar
     bool fy_node_is_scalar(struct fy_node *fyn)
	    Check whether the node is a scalar

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Convenience method for checking whether a node is a scalar.

   Return
     true if the node is a scalar, false otherwise

   fy_node_is_sequence
     bool fy_node_is_sequence(struct fy_node *fyn)
	    Check whether the node is a sequence

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Convenience method for checking whether a node is a sequence.

   Return
     true if the node is a sequence, false otherwise

   fy_node_is_mapping
     bool fy_node_is_mapping(struct fy_node *fyn)
	    Check whether the node is a mapping

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Convenience method for checking whether a node is a mapping.

   Return
     true if the node is a mapping, false otherwise

   fy_node_is_alias
     bool fy_node_is_alias(struct fy_node *fyn)
	    Check whether the node is an alias

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Convenience method for checking whether a node is an alias.

   Return
     true if the node is an alias, false otherwise

   fy_node_is_null
     bool fy_node_is_null(struct fy_node *fyn)
	    Check whether the node is a NULL

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Convenience  method  for  checking  whether a node is a NULL scalar..  Note
     that a NULL node argument returns truea|

   Return
     true if the node is a NULL scalar, false otherwise

   fy_node_is_attached
     bool fy_node_is_attached(struct fy_node *fyn)
	    Check whether the node is attached

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Checks whether a node is attached in a  document  structure.   An	attached
     node may not be freed, before being detached.  Note that there is no method
     that explicitly detaches a node, since this is handled internaly by the se-
     quence and mapping removal methods.

   Return
     true if the node is attached, false otherwise

   fy_node_get_tag_token
     struct fy_token *fy_node_get_tag_token(struct fy_node *fyn)
	    Gets the tag token of a node (if it exists)

	    Parameters

		   * fyn (struct fy_node*) a The node which has the tag token to
		     be returned

   Description
     Gets the tag token of a node, if it exists

   Return
     The tag token of the given node, or NULL if the tag does not exist.

   fy_node_get_scalar_token
     struct fy_token *fy_node_get_scalar_token(struct fy_node *fyn)
	    Gets the scalar token of a node (if it exists)

	    Parameters

		   * fyn (struct fy_node*) a The node which has the scalar token
		     to be returned

   Description
     Gets  the	scalar	token  of  a  node, if it exists and the node is a valid
     scalar node. Note that aliases are scalars, so if this call is issued on an
     alias node the return shall be of an alias token.

   Return
     The scalar token of the given node, or NULL if the node is not a scalar.

   fy_node_resolve_alias
     struct fy_node *fy_node_resolve_alias(struct fy_node *fyn)
	    Resolve an alias node

	    Parameters

		   * fyn (struct fy_node*) a The alias node to be resolved

   Description
     Resolve an alias node, following any subsequent aliases until a  non  alias
     node has been found. This call performs cycle detection and excessive redi-
     rections checks so itas safe to call in any context.

   Return
     The  resolved alias node, or NULL if either fyn is not an alias, or resolu-
     tion fails due to a graph cycle.

   fy_node_dereference
     struct fy_node *fy_node_dereference(struct fy_node *fyn)
	    Dereference a single alias node

	    Parameters

		   * fyn (struct fy_node*) a The alias node to be dereferenced

   Description
     Dereference an alias node. This is different than resolution in  that  will
     only  perform  a  single alias follow call and it will fail if the input is
     not an alias.  This call performs cycle detection	and  excessive	redirec-
     tions checks so itas safe to call in any context.

   Return
     The dereferenced alias node, or NULL if either fyn is not an alias, or res-
     olution fails due to a graph cycle.

   fy_node_free
     int fy_node_free(struct fy_node *fyn)
	    Free a node

	    Parameters

		   * fyn (struct fy_node*) a The node to free

   Description
     Recursively frees the given node releasing the memory it uses, removing any
     anchors on the document it contains, and releasing references on the tokens
     it contains.

     This method will return an error if the node is attached, or if not NULL it
     is not a member of a document.

   Return
     0 on success, -1 on error.

   fy_node_build_from_string
     struct fy_node *fy_node_build_from_string(struct fy_document *fyd, const
     char *str, size_t len)
	    Create a node using the provided YAML source.

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * str (const char*) a The YAML source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Create a node parsing the provided string as a YAML source. The  node  cre-
     ated will be associated with the provided document.

   Return
     The created node, or NULL on error.

   fy_node_build_from_malloc_string
     struct fy_node *fy_node_build_from_malloc_string(struct fy_document *fyd,
     char *str, size_t len)
	    Create a node using the provided YAML source which was malloced.

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * str (char*) a The YAML source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Create a node parsing the provided string as a YAML source. The  node  cre-
     ated  will be associated with the provided document. The string is expected
     to have been allocated by malloc(3) and when the document is  destroyed  it
     will be automatically freed.

   Return
     The created node, or NULL on error.

   fy_node_build_from_file
     struct fy_node *fy_node_build_from_file(struct fy_document *fyd, const char
     *file)
	    Create a node using the provided YAML file.

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * file (const char*) a The name of the file to parse

   Description
     Create  a node parsing the provided file as a YAML source. The node created
     will be associated with the provided document.

   Return
     The created node, or NULL on error.

   fy_node_build_from_fp
     struct fy_node *fy_node_build_from_fp(struct fy_document *fyd, FILE *fp)
	    Create a node using the provided file pointer.

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fp (FILE*) a The file pointer

   Description
     Create a node parsing the provided file pointer as a YAML source. The  node
     created will be associated with the provided document.

   Return
     The created node, or NULL on error.

   fy_node_vbuildf
     struct fy_node *fy_node_vbuildf(struct fy_document *fyd, const char *fmt,
     va_list ap)
	    Create a node using the provided YAML source via vprintf formatting

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fmt  (const  char*)  a  The format string creating the YAML
		     source to use.

		   * ap (va_list) a The va_list argument pointer

   Description
     Create a node parsing the resulting string as a YAML source. The string  is
     created by applying vprintf formatting.

   Return
     The created node, or NULL on error.

   fy_node_buildf
     struct fy_node *fy_node_buildf(struct fy_document *fyd, const char *fmt,
     ...)
	    Create a node using the provided YAML source via printf formatting

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fmt  (const  char*)  a  The format string creating the YAML
		     source to use.

		   * ellipsis (ellipsis) a The printf arguments

   Description
     Create a node parsing the resulting string as a YAML source. The string  is
     created by applying printf formatting.

   Return
     The created node, or NULL on error.

   fy_node_by_path
     struct fy_node *fy_node_by_path(struct fy_node *fyn, const char *path,
     size_t len, enum fy_node_walk_flags flags)
	    Retrieve a node using the provided path spec.

	    Parameters

		   * fyn  (struct  fy_node*)  a  The node to use as start of the
		     traversal operation

		   * path (const char*) a The path spec to use in the  traversal
		     operation

		   * len  (size_t) a The length of the path (or -1 if a0a termi-
		     nated)

		   * flags (enum fy_node_walk_flags) a The extra path walk flags

   Description
     This method will retrieve a node relative to the given node using the  pro-
     vided path spec.

     Path specs are comprised of keys seperated by slashes a/a.  Keys are either
     regular YAML expressions in flow format for traversing mappings, or indexes
     in  brackets for traversing sequences.  Path specs may start with a/a which
     is silently ignored.

     A few examples will make this clear:

	fyn = { foo: bar } - fy_node_by_path(fyn, "/foo") -> bar
	fyn = [ foo, bar ] - fy_node_by_path(fyn, "1") -> bar
	fyn = { { foo: bar }: baz } - fy_node_by_path(fyn, "{foo: bar}") -> baz
	fyn = [ foo, { bar: baz } } - fy_node_by_path(fyn, "1/bar") -> baz

     Note that the special characters /{}[] are not escaped in plain  style,  so
     you  will not be able to use them as path traversal keys.	In that case you
     can easily use either the single, or double quoted forms:

	fyn = { foo/bar: baz } - fy_node_by_path(fyn, "'foo/bar'") -> baz

   Return
     The retrieved node, or NULL if not possible to be found.

   fy_node_get_path
     char *fy_node_get_path(struct fy_node *fyn)
	    Get the path of this node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the given nodeas path address relative to the document root.   The
     address  is dynamically allocated and should be freed when youare done with
     it.

   Return
     The nodeas address, or NULL if fyn is the root.

   fy_node_get_parent
     struct fy_node *fy_node_get_parent(struct fy_node *fyn)
	    Get the parent node of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Get the parent node of a node. The parent of a documentas root is NULL, and
     so is the parent of the root of a key nodeas of a mapping.  This is because
     the nodes of a key may not be addressed using a path expression.

   Return
     The nodeas parent, or NULL if fyn is the root, or the root of  a  key  map-
     ping.

   fy_node_get_document_parent
     struct fy_node *fy_node_get_document_parent(struct fy_node *fyn)
	    Get the document parent node of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Get  the  document  parent node of a node. The document parent differs than
     the regular parent in that a keyas root node of  a  mapping  is  not  NULL,
     rather it points to the actual node parent.

   Return
     The nodeas document parent, or NULL if fyn is the root

   fy_node_get_parent_address
     char *fy_node_get_parent_address(struct fy_node *fyn)
	    Get the path address of this nodeas parent

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve  the  given  nodeas parent path address The address is dynamically
     allocated and should be freed when youare done with it.

   Return
     The parentas address, or NULL if fyn is the root.

   fy_node_get_path_relative_to
     char *fy_node_get_path_relative_to(struct fy_node *fyn_parent, struct
     fy_node *fyn)
	    Get a path address of a node relative to one of itas parents

	    Parameters

		   * fyn_parent  (struct  fy_node*)  a	The  node  parent/grand-
		     parenta|

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve  the  given nodeas path address relative to an arbitrary parent in
     the tree.	The address is dynamically allocated and should  be  freed  when
     youare done with it.

   Return
     The relative address from the parent to the node

   fy_node_get_short_path
     char *fy_node_get_short_path(struct fy_node *fyn)
	    Get a path address of a node in the shortest path possible

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve  the given nodes short path address relative to the closest anchor
     (either on this node, or its parent).  If no such parent is found then  re-
     turns the absolute path from the start of the document.

     Example:

	--- &foo
	foo: &bar
	    bar
	baz

	- The short path of /foo is \*foo
	- The short path of /foo/bar is \*bar
	- The short path of /baz is \*foo/baz

     The  address  is dynamically allocated and should be freed when youare done
     with it.

   Return
     The shortest path describing the node

   fy_node_get_reference
     char *fy_node_get_reference(struct fy_node *fyn)
	    Get a textual reference to a node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the given nodeas textual reference. If the node contains an anchor
     the expression that references the anchor will be	returned,  otherwise  an
     absolute  path  reference	relative to the root of the document will be re-
     turned.

     The address is dynamically allocated and should be freed when  youare  done
     with it.

   Return
     The nodeas text reference.

   fy_node_create_reference
     struct fy_node *fy_node_create_reference(struct fy_node *fyn)
	    Create an alias reference node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Create  an alias node reference. If the node contains an anchor the expres-
     sion that references the alias will use the anchor, otherwise  an	absolute
     path reference relative to the root of the document will be created.

   Return
     An alias node referencing the argument node

   fy_node_get_relative_reference
     char *fy_node_get_relative_reference(struct fy_node *fyn_base, struct
     fy_node *fyn)
	    Get a textual reference to a node relative to a base node.

	    Parameters

		   * fyn_base (struct fy_node*) a The base node

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the given nodeas textual reference as generated using another par-
     ent  (or  grand  parent) as a base.  If the node contains an anchor the ex-
     pression that references the anchor will be returned.   If  the  base  node
     contains  an  anchor  the reference will be relative to it otherwise an ab-
     solute path reference will be returned.

     The address is dynamically allocated and should be freed when  youare  done
     with it.

   Return
     The nodeas text reference.

   fy_node_create_relative_reference
     struct fy_node *fy_node_create_relative_reference(struct fy_node *fyn_base,
     struct fy_node *fyn)
	    Create an alias reference node

	    Parameters

		   * fyn_base (struct fy_node*) a The base node

		   * fyn (struct fy_node*) a The node

   Description
     Create  a relative alias node reference using another parent (or grand par-
     ent) as a base.  If the node contains an anchor the  alias  will  reference
     the anchor.  If the base node contains an anchor the alias will be relative
     to it otherwise an absolute path reference will be created.

   Return
     An alias node referencing the argument node relative to the base

   fy_node_create_scalar
     struct fy_node *fy_node_create_scalar(struct fy_document *fyd, const char
     *data, size_t size)
	    Create a scalar node.

	    Parameters

		   * fyd  (struct fy_document*) a The document which the result-
		     ing node will be associated with

		   * data (const char*) a Pointer to the data area

		   * size (size_t) a Size of the data area,  or  (size_t)-1  for
		     a0a terminated data.

   Description
     Create a scalar node using the provided memory area as input.  The input is
     expected  to  be regular utf8 encoded. It may contain escaped characters in
     which case the style of the scalar will be set to double quoted.

     Note that the data are not copied, merely a reference is taken, so it  must
     be available while the node is in use.

   Return
     The created node, or NULL on error.

   fy_node_create_scalar_copy
     struct fy_node *fy_node_create_scalar_copy(struct fy_document *fyd, const
     char *data, size_t size)
	    Create a scalar node copying the data.

	    Parameters

		   * fyd  (struct fy_document*) a The document which the result-
		     ing node will be associated with

		   * data (const char*) a Pointer to the data area

		   * size (size_t) a Size of the data area,  or  (size_t)-1  for
		     a0a terminated data.

   Description
     Create a scalar node using the provided memory area as input.  The input is
     expected  to  be regular utf8 encoded. It may contain escaped characters in
     which case the style of the scalar will be set to double quoted.

     A copy of the data will be made, so it is safe to free the data  after  the
     call.

   Return
     The created node, or NULL on error.

   fy_node_create_vscalarf
     struct fy_node *fy_node_create_vscalarf(struct fy_document *fyd, const char
     *fmt, va_list ap)
	    vprintf interface for creating scalars

	    Parameters

		   * fyd  (struct fy_document*) a The document which the result-
		     ing node will be associated with

		   * fmt (const char*) a The printf based format string

		   * ap (va_list) a The va_list containing the arguments

   Description
     Create a scalar node using a vprintf interface.  The input is  expected  to
     be  regular  utf8	encoded. It may contain escaped characters in which case
     the style of the scalar will be set to double quoted.

   Return
     The created node, or NULL on error.

   fy_node_create_scalarf
     struct fy_node *fy_node_create_scalarf(struct fy_document *fyd, const char
     *fmt, ...)
	    printf interface for creating scalars

	    Parameters

		   * fyd (struct fy_document*) a The document which the  result-
		     ing node will be associated with

		   * fmt (const char*) a The printf based format string

		   * ellipsis (ellipsis) a The arguments

   Description
     Create a scalar node using a printf interface.  The input is expected to be
     regular  utf8  encoded. It may contain escaped characters in which case the
     style of the scalar will be set to double quoted.

   Return
     The created node, or NULL on error.

   fy_node_create_sequence
     struct fy_node *fy_node_create_sequence(struct fy_document *fyd)
	    Create an empty sequence node.

	    Parameters

		   * fyd (struct fy_document*) a The document which the  result-
		     ing node will be associated with

   Description
     Create an empty sequence node associated with the given document.

   Return
     The created node, or NULL on error.

   fy_node_create_mapping
     struct fy_node *fy_node_create_mapping(struct fy_document *fyd)
	    Create an empty mapping node.

	    Parameters

		   * fyd  (struct fy_document*) a The document which the result-
		     ing node will be associated with

   Description
     Create an empty mapping node associated with the given document.

   Return
     The created node, or NULL on error.

   fy_node_set_tag
     int fy_node_set_tag(struct fy_node *fyn, const char *data, size_t len)
	    Set the tag of node

	    Parameters

		   * fyn (struct fy_node*) a The node to set itas tag.

		   * data (const char*) a Pointer to the tag data.

		   * len (size_t) a Size of the tag data, or (size_t)-1 for  a0a
		     terminated.

   Description
     Manually  set  the tag of a node. The tag must be a valid one for the docu-
     ment the node belongs to.

     Note that the data are not copied, merely a reference is taken, so it  must
     be available while the node is in use.

     If the node already contains a tag it will be overwriten.

   Return
     0 on success, -1 on error.

   fy_node_remove_tag
     int fy_node_remove_tag(struct fy_node *fyn)
	    Remove the tag of node

	    Parameters

		   * fyn (struct fy_node*) a The node to remove itas tag.

   Description
     Remove the tag of a node.

   Return
     0 on success, -1 on error.

   fy_node_get_tag
     const char *fy_node_get_tag(struct fy_node *fyn, size_t *lenp)
	    Get the tag of the node

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

   Description
     This method will return a pointer to the text  of	a  tag	along  with  the
     length of it. Note that this text is not NULL terminated.

   Return
     A pointer to the tag of the node, while lenp will be assigned the length of
     said tag.	A NULL will be returned in case of an error.

   fy_node_get_tag0
     const char *fy_node_get_tag0(struct fy_node *fyn)
	    Get the tag of the node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     This  method will return a pointer to the text of a tag, which will be NULL
     terminated.

   Return
     A pointer to the null terminated tag of the node.	A NULL will be	returned
     in case of an error.

   fy_node_get_tag_length
     size_t fy_node_get_tag_length(struct fy_node *fyn)
	    Get the length of the tag of the node

	    Parameters

		   * fyn (struct fy_node*) a The tagged node

   Description
     This  method  will  return the size of the tag of the node.  If the node is
     not tagged it will return 0.

   Return
     The size of the tag, or 0 if node is not tagged.

   fy_node_get_scalar
     const char *fy_node_get_scalar(struct fy_node *fyn, size_t *lenp)
	    Get the scalar content of the node

	    Parameters

		   * fyn (struct fy_node*) a The scalar node

		   * lenp (size_t*) a Pointer to a variable that will  hold  the
		     returned length

   Description
     This  method  will  return a pointer to the text of the scalar content of a
     node along with the length of it.	Note that this pointer is not NULL  ter-
     minated.

   Return
     A	pointer  to  the scalar content of the node, while lenp will be assigned
     the length of said content.  A NULL will be returned in case of  an  error,
     i.e. the node is not a scalar.

   fy_node_get_scalar0
     const char *fy_node_get_scalar0(struct fy_node *fyn)
	    Get the scalar content of the node

	    Parameters

		   * fyn (struct fy_node*) a The scalar node

   Description
     This  method  will  return a pointer to the text of the scalar content of a
     node as a null terminated string.	Note that this call will allocate memory
     to hold the null terminated string so if possible use fy_node_get_scalar()

   Return
     A pointer to the scalar content of the node or NULL in returned in case  of
     an error.

   fy_node_get_scalar_length
     size_t fy_node_get_scalar_length(struct fy_node *fyn)
	    Get the length of the scalar content

	    Parameters

		   * fyn (struct fy_node*) a The scalar node

   Description
     This method will return the size of the scalar content of the node.  If the
     node is not a scalar it will return 0.

   Return
     The size of the scalar content, or 0 if node is not scalar.

   fy_node_get_scalar_utf8_length
     size_t fy_node_get_scalar_utf8_length(struct fy_node *fyn)
	    Get the length of the scalar content in utf8 characters

	    Parameters

		   * fyn (struct fy_node*) a The scalar node

   Description
     This  method will return the size of the scalar content of the node in utf8
     characters.  If the node is not a scalar it will return 0.

   Return
     The size of the scalar content in utf8 characters, or  0  if  node  is  not
     scalar.

   fy_node_sequence_iterate
     struct fy_node *fy_node_sequence_iterate(struct fy_node *fyn, void **prevp)
	    Iterate over a sequence node

	    Parameters

		   * fyn (struct fy_node*) a The sequence node

		   * prevp (void**) a The previous sequence iterator

   Description
     This  method  iterates  over  all the item nodes in the sequence node.  The
     start of the iteration is signalled by a NULL in *prevp.

   Return
     The next node in sequence or NULL at the end of the sequence.

   fy_node_sequence_reverse_iterate
     struct fy_node *fy_node_sequence_reverse_iterate(struct fy_node *fyn, void
     **prevp)
	    Iterate over a sequence node in reverse

	    Parameters

		   * fyn (struct fy_node*) a The sequence node

		   * prevp (void**) a The previous sequence iterator

   Description
     This method iterates in reverse over all the item	nodes  in  the	sequence
     node.  The start of the iteration is signalled by a NULL in *prevp.

   Return
     The next node in reverse sequence or NULL at the end of the sequence.

   fy_node_sequence_item_count
     int fy_node_sequence_item_count(struct fy_node *fyn)
	    Return the item count of the sequence

	    Parameters

		   * fyn (struct fy_node*) a The sequence node

   Description
     Get the item count of the sequence.

   Return
     The count of items in the sequence or -1 in case of an error.

   fy_node_sequence_is_empty
     bool fy_node_sequence_is_empty(struct fy_node *fyn)
	    Check whether the sequence is empty

	    Parameters

		   * fyn (struct fy_node*) a The sequence node

   Description
     Check whether the sequence contains items.

   Return
     true if the node is a sequence containing items, false otherwise

   fy_node_sequence_get_by_index
     struct fy_node *fy_node_sequence_get_by_index(struct fy_node *fyn, int in-
     dex)
	    Return a sequence item by index

	    Parameters

		   * fyn (struct fy_node*) a The sequence node

		   * index  (int)  a  The index of the node to retrieve.  - >= 0
		     counting from the start - < 0 counting from the end

   Description
     Retrieve a node in the sequence using itas index. If index is  positive  or
     zero  the	count  is from the start of the sequence, while if negative from
     the end. I.e. -1 returns the last item in the sequence.

   Return
     The node at the specified index or NULL if no such item exist.

   fy_node_sequence_append
     int fy_node_sequence_append(struct fy_node *fyn_seq, struct fy_node *fyn)
	    Append a node item to a sequence

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node

		   * fyn (struct fy_node*) a The node item to append

   Description
     Append a node item to a sequence.

   Return
     0 on success, -1 on error

   fy_node_sequence_prepend
     int fy_node_sequence_prepend(struct fy_node *fyn_seq, struct fy_node *fyn)
	    Append a node item to a sequence

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node

		   * fyn (struct fy_node*) a The node item to prepend

   Description
     Prepend a node item to a sequence.

   Return
     0 on success, -1 on error

   fy_node_sequence_insert_before
     int fy_node_sequence_insert_before(struct fy_node *fyn_seq, struct fy_node
     *fyn_mark, struct fy_node *fyn)
	    Insert a node item before another

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node

		   * fyn_mark (struct fy_node*) a The node item which  the  node
		     will be inserted before.

		   * fyn  (struct fy_node*) a The node item to insert in the se-
		     quence.

   Description
     Insert a node item before another in the sequence.

   Return
     0 on success, -1 on error

   fy_node_sequence_insert_after
     int fy_node_sequence_insert_after(struct fy_node *fyn_seq, struct fy_node
     *fyn_mark, struct fy_node *fyn)
	    Insert a node item after another

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node

		   * fyn_mark (struct fy_node*) a The node item which  the  node
		     will be inserted after.

		   * fyn  (struct fy_node*) a The node item to insert in the se-
		     quence.

   Description
     Insert a node item after another in the sequence.

   Return
     0 on success, -1 on error

   fy_node_sequence_remove
     struct fy_node *fy_node_sequence_remove(struct fy_node *fyn_seq, struct
     fy_node *fyn)
	    Remove an item from a sequence

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node

		   * fyn (struct fy_node*) a The node item to  remove  from  the
		     sequence.

   Description
     Remove a node item from a sequence and return it.

   Return
     The removed node item fyn, or NULL in case of an error.

   typedef fy_node_sequence_sort_fn
     int fy_node_sequence_sort_fn(struct fy_node *fyn_a, struct fy_node *fyn_b,
     void *arg)
	    Sequence sorting method function

	    Parameters

		   * fyn_a  (struct  fy_node*) a The first node used in the com-
		     parison

		   * fyn_b (struct fy_node*) a The second node used in the  com-
		     parison

		   * arg  (void*) a The opaque user provided pointer to the sort
		     operation

   Return
     <0 if fyn_a is less than fyn_b 0 if fyn_a is equal to fyn_b >0 if fyn_a  is
     greater than fyn_b

   fy_node_sequence_sort
     int fy_node_sequence_sort(struct fy_node *fyn_seq, fy_node_sequence_sort_fn
     cmp, void *arg)
	    Sort a sequenceas items

	    Parameters

		   * fyn_seq (struct fy_node*) a The sequence node to sort

		   * cmp (fy_node_sequence_sort_fn) a The comparison method

		   * arg  (void*)  a  An  opaque user pointer for the comparison
		     method

   Description
     Sort the items of a sequence node using the given comparison method.

   Return
     0 on success, -1 on error

   fy_node_mapping_iterate
     struct fy_node_pair *fy_node_mapping_iterate(struct fy_node *fyn, void
     **prevp)
	    Iterate over a mapping node

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * prevp (void**) a The previous sequence iterator

   Description
     This method iterates over all the node pairs  in  the  mapping  node.   The
     start of the iteration is signalled by a NULL in *prevp.

     Note  that while a mapping is an unordered collection of key/values the or-
     der of which they are created is important for presentation purposes.

   Return
     The next node pair in the mapping or NULL at the end of the mapping.

   fy_node_mapping_reverse_iterate
     struct fy_node_pair *fy_node_mapping_reverse_iterate(struct fy_node *fyn,
     void **prevp)
	    Iterate over a mapping node in reverse

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * prevp (void**) a The previous sequence iterator

   Description
     This method iterates in reverse over all the  node  pairs	in  the  mapping
     node.  The start of the iteration is signalled by a NULL in *prevp.

     Note  that while a mapping is an unordered collection of key/values the or-
     der of which they are created is important for presentation purposes.

   Return
     The next node pair in reverse sequence in the mapping or NULL at the end of
     the mapping.

   fy_node_mapping_item_count
     int fy_node_mapping_item_count(struct fy_node *fyn)
	    Return the node pair count of the mapping

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

   Description
     Get the count of the node pairs in the mapping.

   Return
     The count of node pairs in the mapping or -1 in case of an error.

   fy_node_mapping_is_empty
     bool fy_node_mapping_is_empty(struct fy_node *fyn)
	    Check whether the mapping is empty

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

   Description
     Check whether the mapping contains any node pairs.

   Return
     true if the node is a mapping containing node pairs, false otherwise

   fy_node_mapping_get_by_index
     struct fy_node_pair *fy_node_mapping_get_by_index(struct fy_node *fyn, int
     index)
	    Return a node pair by index

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * index (int) a The index of the node pair to retrieve.  - >=
		     0 counting from the start - < 0 counting from the end

   Description
     Retrieve a node pair in the mapping using its index. If index  is	positive
     or zero the count is from the start of the sequence, while if negative from
     the end. I.e. -1 returns the last node pair in the mapping.

   Return
     The node pair at the specified index or NULL if no such item exist.

   fy_node_mapping_lookup_pair_by_string
     struct fy_node_pair *fy_node_mapping_lookup_pair_by_string(struct fy_node
     *fyn, const char *key, size_t len)
	    Lookup a node pair in mapping by string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The YAML source to use as key

		   * len  (size_t)  a The length of the key (or -1 if a0a termi-
		     nated)

   Description
     This method will return the node pair that contains the same key  from  the
     YAML  node created from the key argument. The comparison of the node is us-
     ing fy_node_compare()

   Return
     The value matching the given key, or NULL if not found.

   fy_node_mapping_lookup_by_string
     struct fy_node *fy_node_mapping_lookup_by_string(struct fy_node *fyn, const
     char *key, size_t len)
	    Lookup a node value in mapping by string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The YAML source to use as key

		   * len (size_t) a The length of the key (or -1 if  a0a  termi-
		     nated)

   Description
     This  method  will return the value of node pair that contains the same key
     from the YAML node created from the key argument.	The  comparison  of  the
     node is using fy_node_compare()

   Return
     The value matching the given key, or NULL if not found.

   fy_node_mapping_lookup_value_by_string
     struct fy_node *fy_node_mapping_lookup_value_by_string(struct fy_node *fyn,
     const char *key, size_t len)
	    Lookup a node value in mapping by string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The YAML source to use as key

		   * len  (size_t)  a The length of the key (or -1 if a0a termi-
		     nated)

   Description
     This method will return the value of node pair that contains the  same  key
     from  the	YAML  node  created from the key argument. The comparison of the
     node is using fy_node_compare()

     It is synonymous with fy_node_mapping_lookup_by_string().

   Return
     The value matching the given key, or NULL if not found.

   fy_node_mapping_lookup_key_by_string
     struct fy_node *fy_node_mapping_lookup_key_by_string(struct fy_node *fyn,
     const char *key, size_t len)
	    Lookup a node key in mapping by string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The YAML source to use as key

		   * len (size_t) a The length of the key (or -1 if  a0a  termi-
		     nated)

   Description
     This  method  will  return  the key of node pair that contains the same key
     from the YAML node created from the key argument.	The  comparison  of  the
     node is using fy_node_compare()

   Return
     The key matching the given key, or NULL if not found.

   fy_node_mapping_lookup_pair_by_simple_key
     struct fy_node_pair *fy_node_mapping_lookup_pair_by_simple_key(struct
     fy_node *fyn, const char *key, size_t len)
	    Lookup a node pair in mapping by simple string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The string to use as key

		   * len  (size_t)  a The length of the key (or -1 if a0a termi-
		     nated)

   Description
     This method will return the node pair that contains the same key  from  the
     YAML  node created from the key argument. The comparison of the node is us-
     ing by comparing the strings for identity.

   Return
     The node pair matching the given key, or NULL if not found.

   fy_node_mapping_lookup_value_by_simple_key
     struct fy_node *fy_node_mapping_lookup_value_by_simple_key(struct fy_node
     *fyn, const char *key, size_t len)
	    Lookup a node value in mapping by simple string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The string to use as key

		   * len (size_t) a The length of the key (or -1 if  a0a  termi-
		     nated)

   Description
     This  method  will return the value of node pair that contains the same key
     from the YAML node created from the key argument.	The  comparison  of  the
     node is using by comparing the strings for identity.

   Return
     The value matching the given key, or NULL if not found.

   fy_node_mapping_lookup_pair_by_null_key
     struct fy_node_pair *fy_node_mapping_lookup_pair_by_null_key(struct fy_node
     *fyn)
	    Lookup a node pair in mapping that has a NULL key

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

   Description
     This  method  will  return  the  node  pair that has a NULL key.  Note this
     method is not using the mapping accelerator and arguably NULL  keys  should
     not exist. Alasa|

   Return
     The node pair with a NULL key, NULL otherwise

   fy_node_mapping_lookup_value_by_null_key
     struct fy_node *fy_node_mapping_lookup_value_by_null_key(struct fy_node
     *fyn)
	    Lookup a node value with a NULL key.

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

   Description
     Return the value of a node pair that has a NULL key.

   Return
     The  value  matching the null key, NULL otherwise.  Note that the value may
     be NULL too, but for that pathological case use the node  pair  method  in-
     stead.

   fy_node_mapping_lookup_scalar_by_simple_key
     const char *fy_node_mapping_lookup_scalar_by_simple_key(struct fy_node
     *fyn, size_t *lenp, const char *key, size_t keylen)
	    Lookup a scalar in mapping by simple string

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

		   * key (const char*) a The string to use as key

		   * keylen (size_t) a The length of the key (or -1 if a0a  ter-
		     minated)

   Description
     This method will return the scalar contents that contains the same key from
     the  YAML node created from the key argument. The comparison of the node is
     using by comparing the strings for identity.

   Return
     The scalar contents matching the given key, or NULL if not found.

   fy_node_mapping_lookup_scalar0_by_simple_key
     const char *fy_node_mapping_lookup_scalar0_by_simple_key(struct fy_node
     *fyn, const char *key, size_t keylen)
	    Lookup a scalar in mapping by simple string returning a  a0a  termi-
	    nated scalar

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * key (const char*) a The string to use as key

		   * keylen  (size_t) a The length of the key (or -1 if a0a ter-
		     minated)

   Description
     This method will return the NUL terminated scalar	contents  that	contains
     the same key from the YAML node created from the key argument. The compari-
     son of the node is using by comparing the strings for identity.

   Return
     The  NUL  terminated scalar contents matching the given key, or NULL if not
     found.

   fy_node_mapping_lookup_pair
     struct fy_node_pair *fy_node_mapping_lookup_pair(struct fy_node *fyn,
     struct fy_node *fyn_key)
	    Lookup a node pair matching the provided key

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node to use as key

   Description
     This method will return the node pair that matches the provided fyn_key

   Return
     The node pair matching the given key, or NULL if not found.

   fy_node_mapping_lookup_value_by_key
     struct fy_node *fy_node_mapping_lookup_value_by_key(struct fy_node *fyn,
     struct fy_node *fyn_key)
	    Lookup a node pairas value matching the provided key

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node to use as key

   Description
     This method will return the node pair that matches the provided fyn_key The
     key may be collection and a content match check is performed recursively in
     order to find the right key.

   Return
     The node value matching the given key, or NULL if not found.

   fy_node_mapping_lookup_key_by_key
     struct fy_node *fy_node_mapping_lookup_key_by_key(struct fy_node *fyn,
     struct fy_node *fyn_key)
	    Lookup a node pairas key matching the provided key

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node to use as key

   Description
     This method will return the node pair that matches the provided fyn_key The
     key may be collection and a content match check is performed recursively in
     order to find the right key.

   Return
     The node key matching the given key, or NULL if not found.

   fy_node_mapping_get_pair_index
     int fy_node_mapping_get_pair_index(struct fy_node *fyn, const struct
     fy_node_pair *fynp)
	    Return the node pair index in the mapping

	    Parameters

		   * fyn (struct fy_node*) a The mapping node

		   * fynp (const struct fy_node_pair*) a The node pair

   Description
     This method will return the node pair index in the  mapping  of  the  given
     node pair argument.

   Return
     The index of the node pair in the mapping or -1 in case of an error.

   fy_node_pair_key
     struct fy_node *fy_node_pair_key(struct fy_node_pair *fynp)
	    Return the key of a node pair

	    Parameters

		   * fynp (struct fy_node_pair*) a The node pair

   Description
     This  method  will return the node pairas key.  Note that this may be NULL,
     which is returned also in case the node  pair  argument  is  NULL,  so  you
     should protect against such a case.

   Return
     The node pair key

   fy_node_pair_value
     struct fy_node *fy_node_pair_value(struct fy_node_pair *fynp)
	    Return the value of a node pair

	    Parameters

		   * fynp (struct fy_node_pair*) a The node pair

   Description
     This method will return the node pairas value.  Note that this may be NULL,
     which  is	returned  also	in  case  the node pair argument is NULL, so you
     should protect against such a case.

   Return
     The node pair value

   fy_node_pair_set_key
     int fy_node_pair_set_key(struct fy_node_pair *fynp, struct fy_node *fyn)
	    Sets the key of a node pair

	    Parameters

		   * fynp (struct fy_node_pair*) a The node pair

		   * fyn (struct fy_node*) a The key node

   Description
     This method will set the key part of the node pair.  It will  ovewrite  any
     previous key.

     Note that no checks for duplicate keys are going to be performed.

   Return
     0 on success, -1 on error

   fy_node_pair_set_value
     int fy_node_pair_set_value(struct fy_node_pair *fynp, struct fy_node *fyn)
	    Sets the value of a node pair

	    Parameters

		   * fynp (struct fy_node_pair*) a The node pair

		   * fyn (struct fy_node*) a The value node

   Description
     This method will set the value part of the node pair.  It will ovewrite any
     previous value.

   Return
     0 on success, -1 on error

   fy_node_mapping_append
     int fy_node_mapping_append(struct fy_node *fyn_map, struct fy_node
     *fyn_key, struct fy_node *fyn_value)
	    Append a node item to a mapping

	    Parameters

		   * fyn_map (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node pairas key

		   * fyn_value (struct fy_node*) a The node pairas value

   Description
     Append a node pair to a mapping.

   Return
     0 on success, -1 on error

   fy_node_mapping_prepend
     int fy_node_mapping_prepend(struct fy_node *fyn_map, struct fy_node
     *fyn_key, struct fy_node *fyn_value)
	    Prepend a node item to a mapping

	    Parameters

		   * fyn_map (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node pairas key

		   * fyn_value (struct fy_node*) a The node pairas value

   Description
     Prepend a node pair to a mapping.

   Return
     0 on success, -1 on error

   fy_node_mapping_remove
     int fy_node_mapping_remove(struct fy_node *fyn_map, struct fy_node_pair
     *fynp)
	    Remove a node pair from a mapping

	    Parameters

		   * fyn_map (struct fy_node*) a The mapping node

		   * fynp (struct fy_node_pair*) a The node pair to remove

   Description
     Remove node pair from a mapping.

   Return
     0 on success, -1 on failure.

   fy_node_mapping_sort
     int fy_node_mapping_sort(struct fy_node *fyn_map, fy_node_mapping_sort_fn
     key_cmp, void *arg)
	    Sort a single mappingas keys

	    Parameters

		   * fyn_map (struct fy_node*) a The mapping node to sort

		   * key_cmp (fy_node_mapping_sort_fn) a The comparison method

		   * arg  (void*)  a  An  opaque user pointer for the comparison
		     method

   Description
     Sort the keys of a single mapping node using the  given  comparison  method
     (if  NULL	use  the default one).	Unlike fy_node_sort(), this does not re-
     curse into child nodes.

   Return
     0 on success, -1 on error

   fy_node_mapping_remove_by_key
     struct fy_node *fy_node_mapping_remove_by_key(struct fy_node *fyn_map,
     struct fy_node *fyn_key)
	    Remove a node pair from a mapping returning the value

	    Parameters

		   * fyn_map (struct fy_node*) a The mapping node

		   * fyn_key (struct fy_node*) a The node pairas key

   Description
     Remove node pair from a mapping using the supplied key.

   Return
     The value part of removed node pair, or NULL in case of an error.

   fy_node_sort
     int fy_node_sort(struct fy_node *fyn, fy_node_mapping_sort_fn key_cmp, void
     *arg)
	    Recursively sort node

	    Parameters

		   * fyn (struct fy_node*) a The node to sort

		   * key_cmp (fy_node_mapping_sort_fn) a The comparison method

		   * arg (void*) a An opaque user  pointer  for  the  comparison
		     method

   Description
     Recursively sort all mappings of the given node, using the given comparison
     method (if NULL use the default one).

   Return
     0 on success, -1 on error

   fy_node_vscanf
     int fy_node_vscanf(struct fy_node *fyn, const char *fmt, va_list ap)
	    Retrieve data via vscanf

	    Parameters

		   * fyn (struct fy_node*) a The node to use as a pathspec root

		   * fmt (const char*) a The scanf based format string

		   * ap (va_list) a The va_list containing the arguments

   Description
     This  method  easily retrieves data using a familiar vscanf interface.  The
     format string is a regular scanf format string with the following format.
	apathspec opt pathspec opta|a

     Each pathspec is separated with space from the scanf option

   For example
     fyn = { foo: 3 } -> fy_node_scanf(fyn, a/foo da, struct var) -> var = 3

   Return
     The number of scanned arguments, or -1 on error.

   fy_node_scanf
     int fy_node_scanf(struct fy_node *fyn, const char *fmt, ...)
	    Retrieve data via scanf

	    Parameters

		   * fyn (struct fy_node*) a The node to use as a pathspec root

		   * fmt (const char*) a The scanf based format string

		   * ellipsis (ellipsis) a The arguments

   Description
     This method easily retrieves data using a familiar vscanf	interface.   The
     format string is a regular scanf format string with the following format.
	apathspec opt pathspec opta|a

     Each pathspec is separated with space from the scanf option

   For example
     fyn = { foo: 3 } -> fy_node_scanf(fyn, a/foo da, struct var) -> var = 3

   Return
     The number of scanned arguments, or -1 on error.

   fy_document_vscanf
     int fy_document_vscanf(struct fy_document *fyd, const char *fmt, va_list
     ap)
	    Retrieve data via vscanf relative to document root

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fmt (const char*) a The scanf based format string

		   * ap (va_list) a The va_list containing the arguments

   Description
     This  method  easily retrieves data using a familiar vscanf interface.  The
     format string is a regular scanf format string with the following format.
	apathspec opt pathspec opta|a

     Each pathspec is separated with space from the scanf option

   For example
     fyd = { foo: 3 } -> fy_document_scanf(fyd, a/foo da, struct var) -> var = 3

   Return
     The number of scanned arguments, or -1 on error.

   fy_document_scanf
     int fy_document_scanf(struct fy_document *fyd, const char *fmt, ...)
	    Retrieve data via scanf relative to document root

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fmt (const char*) a The scanf based format string

		   * ellipsis (ellipsis) a The arguments

   Description
     This method easily retrieves data using a familiar vscanf	interface.   The
     format string is a regular scanf format string with the following format.
	apathspec opt pathspec opta|a

     Each pathspec is separated with space from the scanf option

   For example
     fyn = { foo: 3 } -> fy_node_scanf(fyd, a/foo da, struct var) -> var = 3

   Return
     The number of scanned arguments, or -1 on error.

   fy_document_tag_directive_iterate
     struct fy_token *fy_document_tag_directive_iterate(struct fy_document *fyd,
     void **prevp)
	    Iterate over a documentas tag directives

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * prevp (void**) a The previous state of the iterator

   Description
     This  method  iterates over all the documents tag directives.  The start of
     the iteration is signalled by a NULL in *prevp.

   Return
     The next tag directive token in the document or NULL at the end of them.

   fy_document_tag_directive_lookup
     struct fy_token *fy_document_tag_directive_lookup(struct fy_document *fyd,
     const char *handle)
	    Retreive a documentas tag directive

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * handle (const char*) a The handle to look for

   Description
     Retreives the matching tag directive token of  the  document  matching  the
     handle.

   Return
     The tag directive token with the given handle or NULL if not found

   fy_tag_directive_token_handle
     const char *fy_tag_directive_token_handle(struct fy_token *fyt, size_t
     *lenp)
	    Get a tag directive handle

	    Parameters

		   * fyt (struct fy_token*) a The tag directive token

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

   Description
     Retreives the tag directives token handle value. Only valid on  tag  direc-
     tive tokens.

   Return
     A	pointer  to  the tag directiveas handle, while lenp will be assigned the
     length of said handle.  A NULL will be returned in case of an error.

   fy_tag_directive_token_prefix
     const char *fy_tag_directive_token_prefix(struct fy_token *fyt, size_t
     *lenp)
	    Get a tag directive prefix

	    Parameters

		   * fyt (struct fy_token*) a The tag directive token

		   * lenp (size_t*) a Pointer to a variable that will  hold  the
		     returned length

   Description
     Retreives	the  tag directives token prefix value. Only valid on tag direc-
     tive tokens.

   Return
     A pointer to the tag directiveas prefix, while lenp will  be  assigned  the
     length of said prefix.  A NULL will be returned in case of an error.

   fy_document_tag_directive_add
     int fy_document_tag_directive_add(struct fy_document *fyd, const char *han-
     dle, const char *prefix)
	    Add a tag directive to a document

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * handle (const char*) a The handle of the tag directive

		   * prefix (const char*) a The prefix of the tag directive

   Description
     Add tag directive to the document.

   Return
     0 on success, -1 on error

   fy_document_tag_directive_remove
     int fy_document_tag_directive_remove(struct fy_document *fyd, const char
     *handle)
	    Remove a tag directive

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * handle  (const  char*) a The handle of the tag directive to
		     remove.

   Description
     Remove a tag directive from a document.  Note that removal is prohibited if
     any node is still using this tag directive.

   Return
     0 on success, -1 on error

   fy_document_lookup_anchor
     struct fy_anchor *fy_document_lookup_anchor(struct fy_document *fyd, const
     char *anchor, size_t len)
	    Lookup an anchor

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * anchor (const char*) a The anchor to look for

		   * len (size_t) a The length of the anchor (or -1 if a0a  ter-
		     minated)

   Description
     Lookup for an anchor having the name provided

   Return
     The anchor if found, NULL otherwise

   fy_document_lookup_anchor_by_token
     struct fy_anchor *fy_document_lookup_anchor_by_token(struct fy_document
     *fyd, struct fy_token *anchor)
	    Lookup an anchor by token text

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * anchor  (struct  fy_token*) a The token contains the anchor
		     text to look for

   Description
     Lookup for an anchor having the name provided from the text of the token

   Return
     The anchor if found, NULL otherwise

   fy_document_lookup_anchor_by_node
     struct fy_anchor *fy_document_lookup_anchor_by_node(struct fy_document
     *fyd, struct fy_node *fyn)
	    Lookup an anchor by node

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyn (struct fy_node*) a The node

   Description
     Lookup for an anchor located in the given node

   Return
     The anchor if found, NULL otherwise

   fy_anchor_get_text
     const char *fy_anchor_get_text(struct fy_anchor *fya, size_t *lenp)
	    Get the text of an anchor

	    Parameters

		   * fya (struct fy_anchor*) a The anchor

		   * lenp (size_t*) a Pointer to a variable that will  hold  the
		     returned length

   Description
     This  method  will return a pointer to the text of an anchor along with the
     length of it. Note that this text is not NULL terminated.

   Return
     A pointer to the text of the anchor, while lenp will be assigned the length
     of said anchor.  A NULL will be returned in case of an error.

   fy_anchor_node
     struct fy_node *fy_anchor_node(struct fy_anchor *fya)
	    Get the node of an anchor

	    Parameters

		   * fya (struct fy_anchor*) a The anchor

   Description
     This method returns the node associated with the anchor.

   Return
     The node of the anchor, or NULL in case of an error.

   fy_document_anchor_iterate
     struct fy_anchor *fy_document_anchor_iterate(struct fy_document *fyd, void
     **prevp)
	    Iterate over a documentas anchors

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * prevp (void**) a The previous state of the iterator

   Description
     This method iterates over all the documents anchors.  The start of the  it-
     eration is signalled by a NULL in *prevp.

   Return
     The next anchor in the document or NULL at the end of them.

   fy_document_set_anchor
     int fy_document_set_anchor(struct fy_document *fyd, struct fy_node *fyn,
     const char *text, size_t len)
	    Place an anchor

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyn (struct fy_node*) a The node to set the anchor to

		   * text (const char*) a Pointer to the anchor text

		   * len  (size_t)  a Size of the anchor text, or (size_t)-1 for
		     a0a terminated.

   Description
     Places an anchor to the node with the give text name.

     Note that the data are not copied, merely a reference is taken, so it  must
     be available while the node is in use.

     Also not that this method is deprecated; use fy_node_set_anchor() instead.

   Return
     0 on success, -1 on error.

   fy_node_set_anchor
     int fy_node_set_anchor(struct fy_node *fyn, const char *text, size_t len)
	    Place an anchor to the node

	    Parameters

		   * fyn (struct fy_node*) a The node to set the anchor to

		   * text (const char*) a Pointer to the anchor text

		   * len  (size_t)  a Size of the anchor text, or (size_t)-1 for
		     a0a terminated.

   Description
     Places an anchor to the node with the give text name.

     Note that the data are not copied, merely a reference is taken, so it  must
     be available while the node is in use.

     This  is  similar	to fy_document_set_anchor() with the document set to the
     document of the fyn node.

   Return
     0 on success, -1 on error.

   fy_node_set_anchor_copy
     int fy_node_set_anchor_copy(struct fy_node *fyn, const char *text, size_t
     len)
	    Place an anchor to the node copying the text

	    Parameters

		   * fyn (struct fy_node*) a The node to set the anchor to

		   * text (const char*) a Pointer to the anchor text

		   * len (size_t) a Size of the anchor text, or  (size_t)-1  for
		     a0a terminated.

   Description
     Places an anchor to the node with the give text name, which will be copied,
     so itas safe to dispose the text after the call.

   Return
     0 on success, -1 on error.

   fy_node_set_vanchorf
     int fy_node_set_vanchorf(struct fy_node *fyn, const char *fmt, va_list ap)
	    Place an anchor to the node using a vprintf interface.

	    Parameters

		   * fyn (struct fy_node*) a The node to set the anchor to

		   * fmt (const char*) a Pointer to the anchor format string

		   * ap (va_list) a The argument list.

   Description
     Places an anchor to the node with the give text name as created via vprint-
     faing the arguments.

   Return
     0 on success, -1 on error.

   fy_node_set_anchorf
     int fy_node_set_anchorf(struct fy_node *fyn, const char *fmt, ...)
	    Place an anchor to the node using a printf interface.

	    Parameters

		   * fyn (struct fy_node*) a The node to set the anchor to

		   * fmt (const char*) a Pointer to the anchor format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Places  an anchor to the node with the give text name as created via print-
     faing the arguments.

   Return
     0 on success, -1 on error.

   fy_node_remove_anchor
     int fy_node_remove_anchor(struct fy_node *fyn)
	    Remove an anchor

	    Parameters

		   * fyn (struct fy_node*) a The node to remove anchors from

   Description
     Remove an anchor for the given node (if it exists)

   Return
     0 on success, -1 on error.

   fy_node_get_anchor
     struct fy_anchor *fy_node_get_anchor(struct fy_node *fyn)
	    Get the anchor of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the anchor of the given node (if it exists)

   Return
     The anchor if thereas one at the node, or NULL otherwise

   fy_node_get_nearest_anchor
     struct fy_anchor *fy_node_get_nearest_anchor(struct fy_node *fyn)
	    Get the nearest anchor of the node

	    Parameters

		   * fyn (struct fy_node*) a The node

   Description
     Retrieve the anchor of the nearest parent of the given node  or  the  given
     node if it has one.

   Return
     The nearest anchor if thereas one, or NULL otherwise

   fy_node_get_nearest_child_of
     struct fy_node *fy_node_get_nearest_child_of(struct fy_node *fyn_base,
     struct fy_node *fyn)
	    Get the nearest node which is a child of the base

	    Parameters

		   * fyn_base (struct fy_node*) a The base node

		   * fyn (struct fy_node*) a The node to start from

   Description
     Retrieve  the nearest node which is a child of fyn_base starting at fyn and
     working upwards.

   Return
     The nearest child of the base if thereas one, or NULL otherwise

   fy_node_create_alias
     struct fy_node *fy_node_create_alias(struct fy_document *fyd, const char
     *alias, size_t len)
	    Create an alias node

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * alias (const char*) a The alias text

		   * len (size_t) a The length of the alias (or -1 if a0a termi-
		     nated)

   Description
     Create an alias on the given document

     Note that the data are not copied, merely a reference is taken, so it  must
     be available while the node is in use.

   Return
     The created alias node, or NULL in case of an error

   fy_node_create_alias_copy
     struct fy_node *fy_node_create_alias_copy(struct fy_document *fyd, const
     char *alias, size_t len)
	    Create an alias node copying the data

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * alias (const char*) a The alias text

		   * len (size_t) a The length of the alias (or -1 if a0a termi-
		     nated)

   Description
     Create an alias on the given document

     A	copy  of the data will be made, so it is safe to free the data after the
     call.

   Return
     The created alias node, or NULL in case of an error

   fy_node_get_meta
     void *fy_node_get_meta(struct fy_node *fyn)
	    Get the meta pointer of a node

	    Parameters

		   * fyn (struct fy_node*) a The node to get meta data from

   Description
     Return the meta pointer of a node.

   Return
     The stored meta data pointer

   fy_node_set_meta
     int fy_node_set_meta(struct fy_node *fyn, void *meta)
	    Set the meta pointer of a node

	    Parameters

		   * fyn (struct fy_node*) a The node to set meta data

		   * meta (void*) a The meta data pointer

   Description
     Set the meta pointer of a node. If meta is NULL then clear the meta data.

   Return
     0 on success, -1 on error

   fy_node_clear_meta
     void fy_node_clear_meta(struct fy_node *fyn)
	    Clear the meta data of a node

	    Parameters

		   * fyn (struct fy_node*) a The node to clear meta data

   Description
     Clears the meta data of a node.

   typedef fy_node_meta_clear_fn
     void fy_node_meta_clear_fn(struct fy_node *fyn, void *meta, void *user)
	    Meta data clear method

	    Parameters

		   * fyn (struct fy_node*) a The node which the meta data is be-
		     ing cleared

		   * meta (void*) a The meta  data  of	the  node  assigned  via
		     fy_node_set_meta()

		   * user      (void*)	   a	 The	 user	  pointer     of
		     fy_document_register_meta()

   Description
     This is the callback called when meta data are cleared.

   fy_document_register_meta
     int fy_document_register_meta(struct fy_document *fyd,
     fy_node_meta_clear_fn clear_fn, void *user)
	    Register a meta cleanup hook

	    Parameters

		   * fyd (struct fy_document*) a The document which the hook  is
		     registered to

		   * clear_fn (fy_node_meta_clear_fn) a The clear hook method

		   * user  (void*)  a  Opaque user provided pointer to the clear
		     method

   Description
     Register a meta data cleanup hook, to be called when the node is freed  via
     a final call to fy_node_free().  The hook is active for all nodes belonging
     to the document.

   Return
     0 on success, -1 if another hook is already registered.

   fy_document_unregister_meta
     void fy_document_unregister_meta(struct fy_document *fyd)
	    Unregister a meta cleanup hook

	    Parameters

		   * fyd (struct fy_document*) a The document to unregister itas
		     meta cleanup hook.

   Description
     Unregister  the  currently  active meta cleanup hook.  The previous cleanup
     hook will be called for every node in the document.

   fy_node_set_marker
     bool fy_node_set_marker(struct fy_node *fyn, unsigned int marker)
	    Set a marker of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * marker (unsigned int) a The marker to set

   Description
     Sets the marker of the given node, while returning the  previous  state  of
     the  marker.  Note  that  the markers use the same space as the node follow
     markers.

   Return
     The previous value of the marker

   fy_node_clear_marker
     bool fy_node_clear_marker(struct fy_node *fyn, unsigned int marker)
	    Clear a marker of a node

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * marker (unsigned int) a The marker to clear

   Description
     Clears the marker of the given node, while returning the previous state  of
     the  marker.  Note  that  the markers use the same space as the node follow
     markers.

   Return
     The previous value of the marker

   fy_node_is_marker_set
     bool fy_node_is_marker_set(struct fy_node *fyn, unsigned int marker)
	    Checks whether a marker is set

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * marker (unsigned int) a The marker index (must be less that
		     FYNWF_MAX_USER_MARKER)

   Description
     Check the state of the given marker.

   Return
     The value of the marker (invalid markers return false)

   fy_node_vreport
     void fy_node_vreport(struct fy_node *fyn, enum fy_error_type type, const
     char *fmt, va_list ap)
	    Report about a node vprintf style

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document.

   fy_node_report
     void fy_node_report(struct fy_node *fyn, enum fy_error_type type, const
     char *fmt, ...)
	    Report about a node printf style

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document.

   fy_node_override_vreport
     void fy_node_override_vreport(struct fy_node *fyn, enum fy_error_type type,
     const char *file, int line, int column, const char *fmt, va_list ap)
	    Report about a node vprintf style, overriding file, line and  column
	    info

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given node via the specific error type, and using
     the  reporting  configuration  of the nodeas document. This method will use
     the overrides provided in order to massage the reporting  information.   If
     file  is NULL, no file location will be reported.	If either line or column
     is negative no location will be reported.

   fy_node_override_report
     void fy_node_override_report(struct fy_node *fyn, enum fy_error_type type,
     const char *file, int line, int column, const char *fmt, ...)
	    Report about a node printf style, overriding file, line  and  column
	    info

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given node via the specific error type, and using
     the  reporting  configuration  of the nodeas document. This method will use
     the overrides provided in order to massage the reporting  information.   If
     file  is NULL, no file location will be reported.	If either line or column
     is negative no location will be reported.

   fy_event_vreport
     void fy_event_vreport(struct fy_parser *fyp, struct fy_event *fye, enum
     fy_event_part fyep, enum fy_error_type type, const char *fmt, va_list ap)
	    Report about an event vprintf style

	    Parameters

		   * fyp (struct fy_parser*) a The parser of which the event was
		     generated from

		   * fye (struct fy_event*) a The event

		   * fyep (enum fy_event_part) a The event part which the report
		     is about

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given event via the specific error type, focusing
     at the given event part.

   fy_event_report
     void fy_event_report(struct fy_parser *fyp, struct fy_event *fye, enum
     fy_event_part fyep, enum fy_error_type type, const char *fmt, ...)
	    Report about an event printf style

	    Parameters

		   * fyp (struct fy_parser*) a The parser of which the event was
		     generated from

		   * fye (struct fy_event*) a The event

		   * fyep (enum fy_event_part) a The event part which the report
		     is about

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given event via the specific error type, focusing
     at the given event part.

   struct fy_diag_cfg
     struct fy_diag_cfg
	    The diagnostics configuration

   Definition
	struct fy_diag_cfg {
	    FILE *fp;
	    fy_diag_output_fn output_fn;
	    void *user;
	    enum fy_error_type level;
	    unsigned int module_mask;
	    bool colorize : 1;
	    bool show_source : 1;
	    bool show_position : 1;
	    bool show_type : 1;
	    bool show_module : 1;
	    int source_width;
	    int position_width;
	    int type_width;
	    int module_width;
	}

   Members
     fp     File descriptor of the error output

     output_fn
	    Callback to use when fp is NULL

     user   User pointer to pass to the output_fn

     level  The minimum debugging level

     module_mask
	    A bitmask of the enabled modules

     colorize
	    true if output should be colorized using ANSI sequences

     show_source
	    true if source location should be displayed

     show_position
	    true if position should be displayed

     show_type
	    true if the type should be displayed

     show_module
	    true if the module should be displayed

     source_width
	    Width of the source field

     position_width
	    Width of the position field

     type_width
	    Width of the type field

     module_width
	    Width of the module field

   Description
     This structure contains the configuration of the diagnostic object.

   struct fy_diag_error
     struct fy_diag_error
	    A collected diagnostic error

   Definition
	struct fy_diag_error {
	    enum fy_error_type type;
	    enum fy_error_module module;
	    struct fy_token *fyt;
	    const char *msg;
	    const char *file;
	    int line;
	    int column;
	}

   Members
     type   Error type

     module
	    The module

     fyt    The token (may be NULL)

     msg    The message to be output alongside

     file   The file which contained the input

     line   The line at the error

     column
	    The column at the error

   Description
     This structure contains information about an error being collected  by  the
     diagnostic object.

   fy_diag_create
     struct fy_diag *fy_diag_create(const struct fy_diag_cfg *cfg)
	    Create a diagnostic object

	    Parameters

		   * cfg (const struct fy_diag_cfg*) a The configuration for the
		     diagnostic object (NULL is default)

   Description
     Creates a diagnostic object using the provided configuration.

   Return
     A pointer to the diagnostic object or NULL in case of an error.

   fy_diag_destroy
     void fy_diag_destroy(struct fy_diag *diag)
	    Destroy a diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to destroy

   Description
     Destroy  a  diagnostic object; note that the actual destruction only occurs
     when no more references to the object are present. However no  output  will
     be generated after this call.

   fy_diag_get_cfg
     const struct fy_diag_cfg *fy_diag_get_cfg(struct fy_diag *diag)
	    Get a diagnostic objectas configuration

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

   Description
     Return the current configuration of a diagnostic object

   Return
     A	const  pointer	to  the diagnostic object configuration, or NULL in case
     where diag is NULL

   fy_diag_set_cfg
     void fy_diag_set_cfg(struct fy_diag *diag, const struct fy_diag_cfg *cfg)
	    Set a diagnostic objectas configuration

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * cfg (const struct fy_diag_cfg*) a The diagnostic configura-
		     tion

   Description
     Replace the current diagnostic configuration with the  given  configuration
     passed as an argument.

   fy_diag_set_level
     void fy_diag_set_level(struct fy_diag *diag, enum fy_error_type level)
	    Set a diagnostic objectas debug error level

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * level (enum fy_error_type) a The debugging level to set

   fy_diag_set_colorize
     void fy_diag_set_colorize(struct fy_diag *diag, bool colorize)
	    Set a diagnostic objectas colorize option

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * colorize (bool) a The colorize option

   fy_diag_ref
     struct fy_diag *fy_diag_ref(struct fy_diag *diag)
	    Increment that reference counter of a diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to reference

   Description
     Increment the reference.

   Return
     Always returns the diag argument

   fy_diag_unref
     void fy_diag_unref(struct fy_diag *diag)
	    Take away a ref from a diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to unref

   Description
     Take away a reference, if it gets to 0, the diagnostic object is freed.

   fy_diag_got_error
     bool fy_diag_got_error(struct fy_diag *diag)
	    Test whether an error level diagnostic has been produced

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

   Description
     Tests whether an error diagnostic has been produced.

   Return
     true if an error has been produced, false otherwise

   fy_diag_set_error
     void fy_diag_set_error(struct fy_diag *diag, bool on_error)
	    Sets the error produced state

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * on_error (bool) a The set error state

   Description
     Sets the error produced state

   fy_diag_reset_error
     void fy_diag_reset_error(struct fy_diag *diag)
	    Reset the error flag of the diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

   Description
     Clears the error flag which was set by an output of an error level diagnos-
     tic

   fy_diag_set_collect_errors
     void fy_diag_set_collect_errors(struct fy_diag *diag, bool collect_errors)
	    Collect errors instead of outputting

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * collect_errors (bool) a The collect errors mode

   Description
     Set  the  collect errors mode. When true instead of outputting to the diag-
     nostic interface, errors are collected for later retrieval.

   fy_diag_get_collect_errors
     bool fy_diag_get_collect_errors(struct fy_diag *diag)
	    Get collect errors state

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

   Description
     Get the collect errors mode.

   Return
     true collecting errors, false otherwise

   fy_diag_cfg_default
     void fy_diag_cfg_default(struct fy_diag_cfg *cfg)
	    Fill in the configuration structure with defaults

	    Parameters

		   * cfg (struct fy_diag_cfg*) a  The  diagnostic  configuration
		     structure

   Description
     Fills  the  configuration structure with defaults. The default always asso-
     ciates the file descriptor to stderr.

   fy_diag_cfg_from_parser_flags
     void fy_diag_cfg_from_parser_flags(struct fy_diag_cfg *cfg, enum
     fy_parse_cfg_flags pflags)
	    Fill partial diagnostic config structure from parser config flags

	    Parameters

		   * cfg (struct fy_diag_cfg*) a  The  diagnostic  configuration
		     structure

		   * pflags (enum fy_parse_cfg_flags) a The parser flags

   Description
     Fills in part of the configuration structure using parser flags.  Since the
     parser  flags  do not contain debugging flags anymore this method is depre-
     cated.

   fy_diag_vprintf
     int fy_diag_vprintf(struct fy_diag *diag, const char *fmt, va_list ap)
	    vprintf raw interface to diagnostics

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to use

		   * fmt (const char*) a The vprintf format string

		   * ap (va_list) a The arguments

   Description
     Raw output to the diagnostic object using	a  standard  vprintf  interface.
     Note  that  this  is  the lowest level interface, and as such is not recom-
     mended for use, since no formatting or coloring will take place.

   Return
     The number of characters output, or -1 in case of	an  error  Note  that  0
     shall  be	returned if the diagnostic object has been destroyed but not yet
     freed.

   fy_diag_printf
     int fy_diag_printf(struct fy_diag *diag, const char *fmt, ...)
	    printf raw interface to diagnostics

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to use

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The arguments

   Description
     Raw output to the diagnostic object using a standard printf interface. Note
     that this is the lowest level interface, and as such is not recommended for
     use, since no formatting or coloring will take place.

   Return
     The number of characters output, or -1 in case of	an  error  Note  that  0
     shall  be	returned if the diagnostic object has been destroyed but not yet
     freed.

   struct fy_diag_ctx
     struct fy_diag_ctx
	    The diagnostics context

   Definition
	struct fy_diag_ctx {
	    enum fy_error_type level;
	    enum fy_error_module module;
	    const char *source_func;
	    const char *source_file;
	    int source_line;
	    const char *file;
	    int line;
	    int column;
	}

   Members
     level  The level of the diagnostic

     module
	    The module of the diagnostic

     source_func
	    The source function

     source_file
	    The source file

     source_line
	    The source line

     file   The file that caused the error

     line   The line where the diagnostic occured

     column
	    The column where the diagnostic occured

   Description
     This structure contains the diagnostic context

   fy_vdiag
     int fy_vdiag(struct fy_diag *diag, const struct fy_diag_ctx *fydc, const
     char *fmt, va_list ap)
	    context aware diagnostic output like vprintf

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to use

		   * fydc (const struct fy_diag_ctx*) a The diagnostic context

		   * fmt (const char*) a The vprintf format string

		   * ap (va_list) a The arguments

   Description
     Context aware output to the diagnostic object using a standard vprintf  in-
     terface.

   Return
     The  number  of  characters  output,  or -1 in case of an error Note that 0
     shall be returned if the diagnostic object has been destroyed but	not  yet
     freed.

   fy_diagf
     int fy_diagf(struct fy_diag *diag, const struct fy_diag_ctx *fydc, const
     char *fmt, ...)
	    context aware diagnostic output like printf

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object to use

		   * fydc (const struct fy_diag_ctx*) a The diagnostic context

		   * fmt (const char*) a The vprintf format string

		   * ellipsis (ellipsis) a variable arguments

   Description
     Context  aware  output to the diagnostic object using a standard printf in-
     terface.

   Return
     The number of characters output, or -1 in case of	an  error  Note  that  0
     shall  be	returned if the diagnostic object has been destroyed but not yet
     freed.

   fy_diag_token_vreport
     void fy_diag_token_vreport(struct fy_diag *diag, struct fy_token *fyt, enum
     fy_error_type type, const char *fmt, va_list ap)
	    Report about a token vprintf style using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyt (struct fy_token*) a The token

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given token via the specific error type, and  us-
     ing the reporting configuration of the tokenas document.

   fy_diag_token_report
     void fy_diag_token_report(struct fy_diag *diag, struct fy_token *fye, enum
     fy_error_type type, const char *fmt, ...)
	    Report about a token printf style using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fye (struct fy_token*) a The token

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output  a report about the given token via the specific error type, and us-
     ing the reporting configuration of the tokenas document.

   fy_diag_token_override_vreport
     void fy_diag_token_override_vreport(struct fy_diag *diag, struct fy_token
     *fyt, enum fy_error_type type, const char *file, int line, int column,
     const char *fmt, va_list ap)
	    Report about a token vprintf style, overriding file, line and column
	    info using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyt (struct fy_token*) a The token

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given token via the specific error type, and  us-
     ing  the  reporting configuration of the tokenas document. This method will
     use the overrides provided in order to massage the  reporting  information.
     If file is NULL, no file location will be reported.  If either line or col-
     umn is negative no location will be reported.

   fy_diag_token_override_report
     void fy_diag_token_override_report(struct fy_diag *diag, struct fy_token
     *fyt, enum fy_error_type type, const char *file, int line, int column,
     const char *fmt, ...)
	    Report  about a token printf style, overriding file, line and column
	    info using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyt (struct fy_token*) a The token

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given token via the specific error type, and  us-
     ing  the  reporting configuration of the tokenas document. This method will
     use the overrides provided in order to massage the  reporting  information.
     If file is NULL, no file location will be reported.  If either line or col-
     umn is negative no location will be reported.

   fy_diag_node_vreport
     void fy_diag_node_vreport(struct fy_diag *diag, struct fy_node *fyn, enum
     fy_error_type type, const char *fmt, va_list ap)
	    Report about a node vprintf style using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document.

   fy_diag_node_report
     void fy_diag_node_report(struct fy_diag *diag, struct fy_node *fyn, enum
     fy_error_type type, const char *fmt, ...)
	    Report about a node printf style using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document.

   fy_diag_node_override_vreport
     void fy_diag_node_override_vreport(struct fy_diag *diag, struct fy_node
     *fyn, enum fy_error_type type, const char *file, int line, int column,
     const char *fmt, va_list ap)
	    Report  about a node vprintf style, overriding file, line and column
	    info using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document. This  method  will  use
     the  overrides  provided in order to massage the reporting information.  If
     file is NULL, no file location will be reported.  If either line or  column
     is negative no location will be reported.

   fy_diag_node_override_report
     void fy_diag_node_override_report(struct fy_diag *diag, struct fy_node
     *fyn, enum fy_error_type type, const char *file, int line, int column,
     const char *fmt, ...)
	    Report  about  a node printf style, overriding file, line and column
	    info using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fyn (struct fy_node*) a The node

		   * type (enum fy_error_type) a The error type

		   * file (const char*) a The file override

		   * line (int) a The line override

		   * column (int) a The column override

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given node via the specific error type, and using
     the reporting configuration of the nodeas document. This  method  will  use
     the  overrides  provided in order to massage the reporting information.  If
     file is NULL, no file location will be reported.  If either line or  column
     is negative no location will be reported.

   fy_diag_event_vreport
     void fy_diag_event_vreport(struct fy_diag *diag, struct fy_event *fye, enum
     fy_event_part fyep, enum fy_error_type type, const char *fmt, va_list ap)
	    Report  about  an event vprintf style using the given diagnostic ob-
	    ject

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fye (struct fy_event*) a The event

		   * fyep (enum fy_event_part) a The event part

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ap (va_list) a The argument list

   Description
     Output a report about the given event part via the specific error type.

   fy_diag_event_report
     void fy_diag_event_report(struct fy_diag *diag, struct fy_event *fye, enum
     fy_event_part fyep, enum fy_error_type type, const char *fmt, ...)
	    Report about a event printf style using the given diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diag object

		   * fye (struct fy_event*) a The event

		   * fyep (enum fy_event_part) a The event part

		   * type (enum fy_error_type) a The error type

		   * fmt (const char*) a The printf format string

		   * ellipsis (ellipsis) a The extra arguments.

   Description
     Output a report about the given event part via the specific error type.

   fy_diag_errors_iterate
     struct fy_diag_error *fy_diag_errors_iterate(struct fy_diag *diag, void
     **prevp)
	    Iterate over the errors of a diagnostic object

	    Parameters

		   * diag (struct fy_diag*) a The diagnostic object

		   * prevp (void**) a The previous result iterator

   Description
     This method iterates over all the errors collected on  the  diagnostic  ob-
     ject.  The start of the iteration is signalled by a NULL in *prevp.

   Return
     The next errors or NULL when there are not any more.

   fy_parser_checkpoint_create
     struct fy_parser_checkpoint *fy_parser_checkpoint_create(struct fy_parser
     *fyp)
	    Create a parser checkpoint

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Create  a checkpoint of the parseras current state. This allows you to save
     the  parser  state  and  potentially  roll   back	 to   it   later   using
     fy_parser_rollback().    The    checkpoint    must    be	 destroyed   via
     fy_parser_checkpoint_destroy() when no longer needed.

   Return
     A pointer to the checkpoint, or NULL in case of an error

   fy_parser_checkpoint_destroy
     void fy_parser_checkpoint_destroy(struct fy_parser_checkpoint *fypchk)
	    Destroy a parser checkpoint

	    Parameters

		   * fypchk (struct fy_parser_checkpoint*) a The  checkpoint  to
		     destroy

   Description
     Destroy a checkpoint created earlier via fy_parser_checkpoint_create().

   fy_parser_rollback
     int fy_parser_rollback(struct fy_parser *fyp, struct fy_parser_checkpoint
     *fypc)
	    Roll back the parser to a checkpoint

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fypc  (struct  fy_parser_checkpoint*)  a  The checkpoint to
		     roll back to

   Description
     Roll back the parser state to a previously created checkpoint. This  allows
     you  to revert the parser to an earlier state and re-parse from that point.
     The checkpoint remains valid after rollback and can be used  again  or  de-
     stroyed via fy_parser_checkpoint_destroy().

   Return
     0 on success, -1 on error

   enum fy_token_type
     enum fy_token_type
	    Token types

   Definition
	enum fy_token_type {
	    FYTT_NONE,
	    FYTT_STREAM_START,
	    FYTT_STREAM_END,
	    FYTT_VERSION_DIRECTIVE,
	    FYTT_TAG_DIRECTIVE,
	    FYTT_DOCUMENT_START,
	    FYTT_DOCUMENT_END,
	    FYTT_BLOCK_SEQUENCE_START,
	    FYTT_BLOCK_MAPPING_START,
	    FYTT_BLOCK_END,
	    FYTT_FLOW_SEQUENCE_START,
	    FYTT_FLOW_SEQUENCE_END,
	    FYTT_FLOW_MAPPING_START,
	    FYTT_FLOW_MAPPING_END,
	    FYTT_BLOCK_ENTRY,
	    FYTT_FLOW_ENTRY,
	    FYTT_KEY,
	    FYTT_VALUE,
	    FYTT_ALIAS,
	    FYTT_ANCHOR,
	    FYTT_TAG,
	    FYTT_SCALAR,
	    FYTT_INPUT_MARKER,
	    FYTT_PE_SLASH,
	    FYTT_PE_ROOT,
	    FYTT_PE_THIS,
	    FYTT_PE_PARENT,
	    FYTT_PE_MAP_KEY,
	    FYTT_PE_SEQ_INDEX,
	    FYTT_PE_SEQ_SLICE,
	    FYTT_PE_SCALAR_FILTER,
	    FYTT_PE_COLLECTION_FILTER,
	    FYTT_PE_SEQ_FILTER,
	    FYTT_PE_MAP_FILTER,
	    FYTT_PE_UNIQUE_FILTER,
	    FYTT_PE_EVERY_CHILD,
	    FYTT_PE_EVERY_CHILD_R,
	    FYTT_PE_ALIAS,
	    FYTT_PE_SIBLING,
	    FYTT_PE_COMMA,
	    FYTT_PE_BARBAR,
	    FYTT_PE_AMPAMP,
	    FYTT_PE_LPAREN,
	    FYTT_PE_RPAREN,
	    FYTT_PE_EQEQ,
	    FYTT_PE_NOTEQ,
	    FYTT_PE_LT,
	    FYTT_PE_GT,
	    FYTT_PE_LTE,
	    FYTT_PE_GTE,
	    FYTT_SE_PLUS,
	    FYTT_SE_MINUS,
	    FYTT_SE_MULT,
	    FYTT_SE_DIV,
	    FYTT_PE_METHOD,
	    FYTT_SE_METHOD,
	    FYTT_PE_BANG,
	    FYTT_PE_AT
	};

   Constants
     FYTT_NONE
	    No token

     FYTT_STREAM_START
	    Stream start token

     FYTT_STREAM_END
	    Stream end token

     FYTT_VERSION_DIRECTIVE
	    Version directive token

     FYTT_TAG_DIRECTIVE
	    Tag directive token

     FYTT_DOCUMENT_START
	    Document start token

     FYTT_DOCUMENT_END
	    Document end token

     FYTT_BLOCK_SEQUENCE_START
	    Block sequence start token

     FYTT_BLOCK_MAPPING_START
	    Block mapping start token

     FYTT_BLOCK_END
	    Block end token

     FYTT_FLOW_SEQUENCE_START
	    Flow sequence start token

     FYTT_FLOW_SEQUENCE_END
	    Flow sequence end token

     FYTT_FLOW_MAPPING_START
	    Flow mapping start token

     FYTT_FLOW_MAPPING_END
	    Flow mapping end token

     FYTT_BLOCK_ENTRY
	    Block entry token

     FYTT_FLOW_ENTRY
	    Flow entry token

     FYTT_KEY
	    Key token

     FYTT_VALUE
	    Value token

     FYTT_ALIAS
	    Alias token

     FYTT_ANCHOR
	    Anchor token

     FYTT_TAG
	    Tag token

     FYTT_SCALAR
	    Scalar token

     FYTT_INPUT_MARKER
	    Input marker token

     FYTT_PE_SLASH
	    Path expression slash token

     FYTT_PE_ROOT
	    Path expression root token

     FYTT_PE_THIS
	    Path expression this token

     FYTT_PE_PARENT
	    Path expression parent token

     FYTT_PE_MAP_KEY
	    Path expression map key token

     FYTT_PE_SEQ_INDEX
	    Path expression sequence index token

     FYTT_PE_SEQ_SLICE
	    Path expression sequence slice token

     FYTT_PE_SCALAR_FILTER
	    Path expression scalar filter token

     FYTT_PE_COLLECTION_FILTER
	    Path expression collection filter token

     FYTT_PE_SEQ_FILTER
	    Path expression sequence filter token

     FYTT_PE_MAP_FILTER
	    Path expression map filter token

     FYTT_PE_UNIQUE_FILTER
	    Path expression unique filter token

     FYTT_PE_EVERY_CHILD
	    Path expression every child token

     FYTT_PE_EVERY_CHILD_R
	    Path expression every child recursive token

     FYTT_PE_ALIAS
	    Path expression alias token

     FYTT_PE_SIBLING
	    Path expression sibling token

     FYTT_PE_COMMA
	    Path expression comma token

     FYTT_PE_BARBAR
	    Path expression || token

     FYTT_PE_AMPAMP
	    Path expression && token

     FYTT_PE_LPAREN
	    Path expression ( token

     FYTT_PE_RPAREN
	    Path expression ) token

     FYTT_PE_EQEQ
	    Path expression == token

     FYTT_PE_NOTEQ
	    Path expression != token

     FYTT_PE_LT
	    Path expression < token

     FYTT_PE_GT
	    Path expression > token

     FYTT_PE_LTE
	    Path expression <= token

     FYTT_PE_GTE
	    Path expression >= token

     FYTT_SE_PLUS
	    Scalar expression + token

     FYTT_SE_MINUS
	    Scalar expression - token

     FYTT_SE_MULT
	    Scalar expression * token

     FYTT_SE_DIV
	    Scalar expression / token

     FYTT_PE_METHOD
	    Path expression method token

     FYTT_SE_METHOD
	    Scalar expression method token

     FYTT_PE_BANG
	    Path expression ! token

     FYTT_PE_AT
	    Path expression @ token

   fy_token_type_is_valid
     bool fy_token_type_is_valid(enum fy_token_type type)
	    Check token type validity

	    Parameters

		   * type (enum fy_token_type) a The token type

   Description
     Check if argument token type is a valid one.

   Return
     true if the token type is valid, false otherwise

   fy_token_type_is_yaml
     bool fy_token_type_is_yaml(enum fy_token_type type)
	    Check if token type is valid for YAML

	    Parameters

		   * type (enum fy_token_type) a The token type

   Description
     Check if argument token type is a valid YAML one.

   Return
     true if the token type is a valid YAML one, false otherwise

   fy_token_type_is_content
     bool fy_token_type_is_content(enum fy_token_type type)
	    Check if token type is valid for YAML content

	    Parameters

		   * type (enum fy_token_type) a The token type

   Description
     Check if argument token type is a valid YAML content one.

   Return
     true if the token type is a valid YAML content one, false otherwise

   fy_token_type_is_path_expr
     bool fy_token_type_is_path_expr(enum fy_token_type type)
	    Check if token type is valid for a YPATH expression

	    Parameters

		   * type (enum fy_token_type) a The token type

   Description
     Check if argument token type is a valid YPATH parse expression token

   Return
     true if the token type is a valid YPATH one, false otherwise

   fy_token_type_is_scalar_expr
     bool fy_token_type_is_scalar_expr(enum fy_token_type type)
	    Check if token type is valid for a YPATH scalar expression

	    Parameters

		   * type (enum fy_token_type) a The token type

   Description
     Check if argument token type is a valid YPATH parse scalar expression token

   Return
     true if the token type is a valid YPATH scalar one, false otherwise

   fy_token_get_type
     enum fy_token_type fy_token_get_type(struct fy_token *fyt)
	    Return the tokenas type

	    Parameters

		   * fyt (struct fy_token*) a The token

   Description
     Return the tokenas type; if NULL then FYTT_NONE is returned

   Return
     The tokenas type; FYTT_NONE if not a valid token (or NULL)

   fy_token_start_mark
     const struct fy_mark *fy_token_start_mark(struct fy_token *fyt)
	    Get tokenas start marker

	    Parameters

		   * fyt (struct fy_token*) a The token to get its start marker

   Description
     Return  the  tokenas  start marker if it exists. Note it is permissable for
     some token types to have no start marker because they are without content.

   Return
     The tokenas start marker, NULL if not available.

   fy_token_end_mark
     const struct fy_mark *fy_token_end_mark(struct fy_token *fyt)
	    Get tokenas end marker

	    Parameters

		   * fyt (struct fy_token*) a The token to get its end marker

   Description
     Return the tokenas end marker if it exists. Note it is permissable for some
     token types to have no end marker because they are without content.

   Return
     The tokenas end marker, NULL if not available.

   fy_token_style_start_mark
     const struct fy_mark *fy_token_style_start_mark(struct fy_token *fyt)
	    Get tokenas start marker (style)

	    Parameters

		   * fyt (struct fy_token*) a The token to get its  style  start
		     marker

   Description
     Return  the  tokenas start marker if it exists, including the style indica-
     tors. Note it is permissable for some token types to have no  start  marker
     because they are without content.

   Return
     The tokenas style start marker, NULL if not available.

   fy_token_style_end_mark
     const struct fy_mark *fy_token_style_end_mark(struct fy_token *fyt)
	    Get tokenas end marker (style

	    Parameters

		   * fyt  (struct  fy_token*)  a  The token to get its style end
		     marker

   Description
     Return the tokenas end marker if it exists, including the style indicators.
     Note it is permissable for some token types to have no end  marker  because
     they are without content.

   Return
     The tokenas style end marker, NULL if not available.

   fy_scan
     struct fy_token *fy_scan(struct fy_parser *fyp)
	    Low level access to the scanner

	    Parameters

		   * fyp  (struct fy_parser*) a The parser to get the next token
		     from.

   Description
     Return the next scanner token. Note this is a very low level interface, in-
     tended for users that want/need to implement their own YAML parser. The re-
     turned token is expected to be disposed using fy_scan_token_free()

   Return
     The next token, or NULL if no more tokens are available.

   fy_scan_token_free
     void fy_scan_token_free(struct fy_parser *fyp, struct fy_token *fyt)
	    Free the token returned by fy_scan()

	    Parameters

		   * fyp (struct fy_parser*) a The parser of which the token was
		     returned by fy_scan()

		   * fyt (struct fy_token*) a The token to free

   Description
     Free the token returned by fy_scan().

   fy_tag_directive_token_prefix0
     const char *fy_tag_directive_token_prefix0(struct fy_token *fyt)
	    Get the prefix contained in the tag directive token as  zero  termi-
	    nated string

	    Parameters

		   * fyt  (struct  fy_token*)  a  The tag directive token out of
		     which the prefix pointer will be returned.

   Description
     Retrieve the tag directiveas prefix contents as a zero  terminated  string.
     It  is similar to fy_tag_directive_token_prefix(), with the difference that
     the returned string is zero terminated and memory may be allocated to  hold
     it associated with the token.

   Return
     A	pointer  to the zero terminated text representation of the prefix token.
     NULL in case of an error.

   fy_tag_directive_token_handle0
     const char *fy_tag_directive_token_handle0(struct fy_token *fyt)
	    Get the handle contained in the tag directive token as  zero  termi-
	    nated string

	    Parameters

		   * fyt  (struct  fy_token*)  a  The tag directive token out of
		     which the handle pointer will be returned.

   Description
     Retrieve the tag directiveas handle contents as a zero  terminated  string.
     It  is similar to fy_tag_directive_token_handle(), with the difference that
     the returned string is zero terminated and memory may be allocated to  hold
     it associated with the token.

   Return
     A	pointer  to the zero terminated text representation of the handle token.
     NULL in case of an error.

   fy_tag_token_handle
     const char *fy_tag_token_handle(struct fy_token *fyt, size_t *lenp)
	    Get the handle contained in the tag token

	    Parameters

		   * fyt (struct fy_token*) a The tag token  out  of  which  the
		     handle pointer will be returned.

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

   Description
     Retrieve the tag handle contents. Will fail if token is not a tag token, or
     if a memory error happens.

   Return
     A pointer to the text representation of the handle token, while  lenp  will
     be  assigned  the character length of said representation.  NULL in case of
     an error.

   fy_tag_token_suffix
     const char *fy_tag_token_suffix(struct fy_token *fyt, size_t *lenp)
	    Get the suffix contained in the tag token

	    Parameters

		   * fyt (struct fy_token*) a The tag token  out  of  which  the
		     suffix pointer will be returned.

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

   Description
     Retrieve the tag suffix contents. Will fail if token is not a tag token, or
     if a memory error happens.

   Return
     A pointer to the text representation of the suffix token, while  lenp  will
     be  assigned  the character length of said representation.  NULL in case of
     an error.

   fy_tag_token_short
     const char *fy_tag_token_short(struct fy_token *fyt, size_t *lenp)
	    Get the short tag of the tag token

	    Parameters

		   * fyt (struct fy_token*) a The tag token  out  of  which  the
		     short pointer will be returned.

		   * lenp  (size_t*)  a Pointer to a variable that will hold the
		     returned length

   Description
     Retrieve the short tag contents. The short tag is the same  one  that  will
     need  to be emitted.  Will fail if token is not a tag token, or if a memory
     error happens.

   Return
     A pointer to the text representation of the short tag, while lenp	will  be
     assigned  the  character length of said representation.  NULL in case of an
     error.

   fy_tag_token_handle0
     const char *fy_tag_token_handle0(struct fy_token *fyt)
	    Get the handle contained in the tag token as zero terminated string

	    Parameters

		   * fyt (struct fy_token*) a The tag token  out  of  which  the
		     handle pointer will be returned.

   Description
     Retrieve  the tag handle contents as a zero terminated string.  It is simi-
     lar to fy_tag_token_handle(), with the difference that the returned  string
     is  zero  terminated and memory may be allocated to hold it associated with
     the token.

   Return
     A pointer to the zero terminated text representation of the  handle  token.
     NULL in case of an error.

   fy_tag_token_short0
     const char *fy_tag_token_short0(struct fy_token *fyt)
	    Get the short tag of the tag token as zero terminated string.

	    Parameters

		   * fyt  (struct  fy_token*)  a  The tag token out of which the
		     short pointer will be returned.

   Description
     Retrieve the short tag contents. The short tag is the same  one  that  will
     need  to be emitted.  Will fail if token is not a tag token, or if a memory
     error happens.

   Return
     A pointer to the null terminated text  representation  of	the  short  tag.
     NULL in case of an error.

   fy_tag_token_suffix0
     const char *fy_tag_token_suffix0(struct fy_token *fyt)
	    Get the suffix contained in the tag token as zero terminated string

	    Parameters

		   * fyt  (struct  fy_token*)  a  The tag token out of which the
		     suffix pointer will be returned.

   Description
     Retrieve the tag suffix contents as a zero terminated string.  It is  simi-
     lar  to fy_tag_token_suffix(), with the difference that the returned string
     is zero terminated and memory may be allocated to hold it	associated  with
     the token.

   Return
     A	pointer  to the zero terminated text representation of the suffix token.
     NULL in case of an error.

   fy_version_directive_token_version
     const struct fy_version *fy_version_directive_token_version(struct fy_token
     *fyt)
	    Return the version of a version directive token

	    Parameters

		   * fyt (struct fy_token*) a The version directive token

   Description
     Retrieve the version stored in a version directive token.

   Return
     A pointer to the version stored in the version directive token, or NULL  in
     case of an error, or the token not being a version directive token.

   fy_scalar_token_get_style
     enum fy_scalar_style fy_scalar_token_get_style(struct fy_token *fyt)
	    Return the style of a scalar token

	    Parameters

		   * fyt (struct fy_token*) a The scalar token

   Description
     Retrieve the style of a scalar token.

   Return
     The scalar style of the token, or FYSS_ANY for an error

   fy_tag_token_tag
     const struct fy_tag *fy_tag_token_tag(struct fy_token *fyt)
	    Get tag of a tag token

	    Parameters

		   * fyt (struct fy_token*) a The tag token

   Description
     Retrieve the tag of a tag token.

   Return
     A pointer to the tag or NULL in case of an error

   fy_tag_directive_token_tag
     const struct fy_tag *fy_tag_directive_token_tag(struct fy_token *fyt)
	    Get tag of a tag directive token

	    Parameters

		   * fyt (struct fy_token*) a The tag directive token

   Description
     Retrieve the tag of a tag directive token.

   Return
     A pointer to the tag or NULL in case of an error

   fy_event_get_token
     struct fy_token *fy_event_get_token(struct fy_event *fye)
	    Return the main token of an event

	    Parameters

		   * fye (struct fy_event*) a The event to get its main token

   Description
     Retrieve  the  main  token (i.e. not the tag or the anchor) of an event. It
     may be NULL in case of an implicit event.

   Return
     The main token if it exists, NULL otherwise or in case of an error

   fy_event_get_anchor_token
     struct fy_token *fy_event_get_anchor_token(struct fy_event *fye)
	    Return the anchor token of an event

	    Parameters

		   * fye (struct fy_event*) a The event to get its anchor token

   Description
     Retrieve the anchor token if it exists.  Only  valid  for	mapping/sequence
     start and scalar events.

   Return
     The anchor token if it exists, NULL otherwise or in case of an error

   fy_event_get_tag_token
     struct fy_token *fy_event_get_tag_token(struct fy_event *fye)
	    Return the tag token of an event

	    Parameters

		   * fye (struct fy_event*) a The event to get its tag token

   Description
     Retrieve  the tag token if it exists. Only valid for mapping/sequence start
     and scalar events.

   Return
     The tag token if it exists, NULL otherwise or in case of an error

   fy_event_start_mark
     const struct fy_mark *fy_event_start_mark(struct fy_event *fye)
	    Get eventas start marker

	    Parameters

		   * fye (struct fy_event*) a The event to get its start marker

   Description
     Return the eventas start marker if it exists. The start marker is	the  one
     of the eventas main token.

   Return
     The eventas start marker, NULL if not available.

   fy_event_end_mark
     const struct fy_mark *fy_event_end_mark(struct fy_event *fye)
	    Get eventas end marker

	    Parameters

		   * fye (struct fy_event*) a The event to get its end marker

   Description
     Return  the  eventas  end marker if it exists. The end marker is the one of
     the eventas main token.

   Return
     The eventas end marker, NULL if not available.

   fy_event_style_start_mark
     const struct fy_mark *fy_event_style_start_mark(struct fy_event *fye)
	    Get eventas start marker (style)

	    Parameters

		   * fye (struct fy_event*) a The event to get its  style  start
		     marker

   Description
     Return the eventas style start marker if it exists. The start marker is the
     one  of the eventas main token, including the style marks. But if the event
     contains a tag then the start mark is the start of the tag token.

   Return
     The eventas start marker, NULL if not available.

   fy_event_style_end_mark
     const struct fy_mark *fy_event_style_end_mark(struct fy_event *fye)
	    Get eventas end marker (style)

	    Parameters

		   * fye (struct fy_event*) a The event to get its end marker

   Description
     Return the eventas style end marker if it exists. The end marker is the one
     of the eventas main token.

   Return
     The eventas end marker, NULL if not available.

   fy_event_get_node_style
     enum fy_node_style fy_event_get_node_style(struct fy_event *fye)
	    Get the node style of an event

	    Parameters

		   * fye (struct fy_event*) a The event to get itas node style

   Description
     Return the node style (FYNS_*) of an event.  May  return  FYNS_ANY  if  the
     event is implicit.  For collection start events the only possible values is
     FYNS_ANY, FYNS_FLOW, FYNS_BLOCK.  A scalar event may return any.

   Return
     The eventas end marker, NULL if not available.

   fy_document_start_event_version
     const struct fy_version *fy_document_start_event_version(struct fy_event
     *fye)
	    Return the version of a document start event

	    Parameters

		   * fye (struct fy_event*) a The document start event

   Description
     Retrieve the version stored in a document start event

   Return
     A pointer to the version, or NULL in case of an error, or the event not be-
     ing a document start event.

   fy_document_state_version
     const struct fy_version *fy_document_state_version(struct fy_document_state
     *fyds)
	    Return the version of a document state object

	    Parameters

		   * fyds  (struct  fy_document_state*) a The document state ob-
		     ject

   Description
     Retrieve the version stored in a document state object

   Return
     A pointer to the version, or NULL in case of an error

   fy_document_state_start_mark
     const struct fy_mark *fy_document_state_start_mark(struct fy_document_state
     *fyds)
	    Get document stateas start mark

	    Parameters

		   * fyds (struct fy_document_state*) a The document  state  ob-
		     ject

   Description
     Return  the  document  stateas start mark (if it exists).	Note that purely
     synthetic documents do not contain one

   Return
     The documentas start marker, NULL if not available.

   fy_document_state_end_mark
     const struct fy_mark *fy_document_state_end_mark(struct fy_document_state
     *fyds)
	    Get document stateas end mark

	    Parameters

		   * fyds (struct fy_document_state*) a The document  state  ob-
		     ject

   Description
     Return the document stateas end mark (if it exists).  Note that purely syn-
     thetic documents do not contain one

   Return
     The documentas end marker, NULL if not available.

   fy_document_state_version_explicit
     bool fy_document_state_version_explicit(struct fy_document_state *fyds)
	    Version explicit?

	    Parameters

		   * fyds  (struct  fy_document_state*) a The document state ob-
		     ject

   Description
     Find out if a document state objectas version was	explicitly  set  in  the
     document.	Note that for synthetic documents this method returns false.

   Return
     true if version was set explicitly, false otherwise

   fy_document_state_tags_explicit
     bool fy_document_state_tags_explicit(struct fy_document_state *fyds)
	    Tags explicit?

	    Parameters

		   * fyds  (struct  fy_document_state*) a The document state ob-
		     ject

   Description
     Find out if a document state objectas tags were explicitly set in the docu-
     ment.  Note that for synthetic documents this method returns false.

   Return
     true if document had tags set explicitly, false otherwise

   fy_document_state_start_implicit
     bool fy_document_state_start_implicit(struct fy_document_state *fyds)
	    Started implicitly?

	    Parameters

		   * fyds (struct fy_document_state*) a The document  state  ob-
		     ject

   Description
     Find  out	if  a  document  state objectas document was started implicitly.
     Note that for synthetic documents this method returns false.

   Return
     true if document was started implicitly, false otherwise

   fy_document_state_end_implicit
     bool fy_document_state_end_implicit(struct fy_document_state *fyds)
	    Started implicitly?

	    Parameters

		   * fyds (struct fy_document_state*) a The document  state  ob-
		     ject

   Description
     Find  out if a document state objectas document was ended implicitly.  Note
     that for synthetic documents this method returns false.

   Return
     true if document was ended implicitly, false otherwise

   fy_document_state_json_mode
     bool fy_document_state_json_mode(struct fy_document_state *fyds)
	    Input was JSON?

	    Parameters

		   * fyds (struct fy_document_state*) a The document  state  ob-
		     ject

   Description
     Find out if a document state objectas document was created by a JSON input.
     Note that for synthetic documents this method returns false.

   Return
     true if document was created in JSON mode, false otherwise

   fy_document_state_tag_directive_iterate
     const struct fy_tag *fy_document_state_tag_directive_iterate(struct fy_doc-
     ument_state *fyds, void **prevp)
	    Iterate over the tag directives of a document state object

	    Parameters

		   * fyds (struct fy_document_state*) a The document state

		   * prevp (void**) a The previous iterator

   Description
     This  method  iterates  over  all	the tag directives nodes in the document
     state object.  The start of the iteration is signalled by a NULL in *prevp.

   Return
     The next tag or NULL at the end of the iteration sequence.

   fy_document_state_tag_directives
     struct fy_tag **fy_document_state_tag_directives(struct fy_document_state
     *fyds)
	    Get all the tag directives in a mallocaed array

	    Parameters

		   * fyds (struct fy_document_state*) a The document state

   Description
     Return all the tag directives in a dynamically  allocated	area.	Must  be
     free()ad when not in use.

   Return
     An  array of fy_tag pointer structures, terminated with a NULL pointer NULL
     on error

   fy_document_state_tag_is_default
     bool fy_document_state_tag_is_default(struct fy_document_state *fyds, const
     struct fy_tag *tag)
	    Test whether the given tag is a default one

	    Parameters

		   * fyds (struct fy_document_state*) a The document state

		   * tag (const struct fy_tag*) a The tag to check

   Description
     Test whether a tag is a default (i.e. impliciticly set)

   Return
     true in case that the tag is a default one, false otherwise

   fy_parser_get_document_state
     struct fy_document_state *fy_parser_get_document_state(struct fy_parser
     *fyp)
	    Get the document state of a parser object

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Retrieve the document state object of a parser.  Note  that  this	is  only
     valid during parsing.

   Return
     The active document state object of the parser, NULL otherwise

   fy_document_get_document_state
     struct fy_document_state *fy_document_get_document_state(struct fy_document
     *fyd)
	    Get the document state of a document

	    Parameters

		   * fyd (struct fy_document*) a The document

   Description
     Retrieve the document state object of a document.

   Return
     The document state object of the document, NULL otherwise

   fy_document_set_document_state
     int fy_document_set_document_state(struct fy_document *fyd, struct fy_docu-
     ment_state *fyds)
	    Set the document state of a document

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyds  (struct  fy_document_state*)  a The document state to
		     use, or NULL for default

   Description
     Set the document state of a document

   Return
     0 if set operation was successful, -1 otherwise

   fy_document_create_from_event
     struct fy_document *fy_document_create_from_event(struct fy_parser *fyp,
     struct fy_event *fye)
	    Create an empty document using the event

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event

   Description
     Create an empty document using the FYET_DOCUMENT_START event  generated  by
     the parser.

   Return
     The created empty document, or NULL on error.

   fy_document_update_from_event
     int fy_document_update_from_event(struct fy_document *fyd, struct fy_parser
     *fyp, struct fy_event *fye)
	    Update the document with the event

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event

   Description
     Update  the  document  using  the	FYET_DOCUMENT_END event generated by the
     parser.

   Return
     0 on success, -1 on error

   fy_node_create_from_event
     struct fy_node *fy_node_create_from_event(struct fy_document *fyd, struct
     fy_parser *fyp, struct fy_event *fye)
	    Create a node using the event

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event

   Description
     Create  a	new  node  using  the  supplied  event.   Allowed   events   are
     FYET_SCALAR, FYET_ALIAS, FYET_MAPPING_START & FYET_SEQUENCE_START

   Return
     The newly created node, or NULL on error

   fy_node_update_from_event
     int fy_node_update_from_event(struct fy_node *fyn, struct fy_parser *fyp,
     struct fy_event *fye)
	    Update a node using the event

	    Parameters

		   * fyn (struct fy_node*) a The node

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event

   Description
     Update  information  of  node created using fy_node_create_from_event() Al-
     lowed events are FYET_MAPPING_END & FYET_SEQUENCE_END

   Return
     0 on success, -1 on error

   fy_node_pair_create_with_key
     struct fy_node_pair *fy_node_pair_create_with_key(struct fy_document *fyd,
     struct fy_node *fyn_parent, struct fy_node *fyn)
	    Create a new node pair and set itas key

	    Parameters

		   * fyd (struct fy_document*) a The document

		   * fyn_parent (struct fy_node*) a The mapping

		   * fyn (struct fy_node*) a The node pair key

   Description
     Create a new node pair using the supplied fyn_parent mapping and  fyn  node
     as  a  key.  Note	that  the nodes _must_ have been created by fy_node_cre-
     ate_from_event and they are not interchangeable with other node pair  meth-
     ods.

     The  node	pair  will  be added to the fyn_parent mapping with a subsequent
     call to fy_node_pair_update_with_value().

   Return
     The newly created node pair, or NULL on error

   fy_node_pair_update_with_value
     int fy_node_pair_update_with_value(struct fy_node_pair *fynp, struct
     fy_node *fyn)
	    Update a node pair with a value and add it to the parent mapping

	    Parameters

		   * fynp (struct fy_node_pair*) a The node pair

		   * fyn (struct fy_node*) a The node pair value

   Description
     Update the node pair with the given value and add it to the parent mapping.
     Note  that  the  fyn  node  _must_  have  been  created   by   fy_node_cre-
     ate_from_event and the node pair created by fy_node_pair_create_with_key().
     Do not intermix other node pair manipulation methods.

   Return
     0 on success, -1 on error

   fy_node_sequence_add_item
     int fy_node_sequence_add_item(struct fy_node *fyn_parent, struct fy_node
     *fyn)
	    Add an item node to a sequence node

	    Parameters

		   * fyn_parent (struct fy_node*) a The parent sequence node

		   * fyn (struct fy_node*) a The node pair item

   Description
     Add  an  item  to	the  end of the sequence node fyn_parent.  Note that the
     fyn_parent  and  fyn  nodes  _must_  have	been  created  by   fy_node_cre-
     ate_from_event.  Do not intermix other sequence node manipulation methods.

   Return
     0 on success, -1 on error

   fy_emitter_get_document_state
     struct fy_document_state *fy_emitter_get_document_state(struct fy_emitter
     *emit)
	    Get the document state of an emitter  object

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

   Description
     Retrieve  the  document  state object of an emitter. Note that this is only
     valid during emitting.

   Return
     The active document state object of the emitter, NULL otherwise

   fy_emit_event_create
     struct fy_event *fy_emit_event_create(struct fy_emitter *emit, enum
     fy_event_type type, ...)
	    Create an emit event.

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * type (enum fy_event_type) a The event type to create

		   * ellipsis (ellipsis) a The optional extra arguments

   Description
     Create an emit event to pass to fy_emit_event() The extra arguments  differ
     according to the event to be created

   FYET_STREAM_START
	* None

   FYET_STREAM_END
	* None

   FYET_DOCUMENT_START
	*

	  int implicit
		 true if document start should be marked implicit false if docu-
		 ment start should not be marked implicit

	*

	  const struct fy_version *vers
		 Pointer to version to use for the document, or NULL for default

	*

	  const struct fy_tag * const *tags
		 Pointer  to a NULL terminated array of tag pointers (like argv)
		 NULL if no extra tags are to be used

   FYET_DOCUMENT_END
	*

	  int implicit
		 true if document end should be marked implicit false  if  docu-
		 ment end should not be marked implicit

   FYET_MAPPING_START
	*

	  enum fy_node_style style
		 Style of the mapping (one of FYNS_ANY, FYNS_BLOCK or FYNS_FLOW)

	*

	  const char *anchor
		 Anchor to place at the mapping, or NULL for none

	*

	  const char *tag
		 Tag to place at the mapping, or NULL for none

   FYET_MAPPING_END
	* None

   FYET_SEQUENCE_START
	*

	  enum fy_node_style style
		 Style	 of   the  sequence  (one  of  FYNS_ANY,  FYNS_BLOCK  or
		 FYNS_FLOW)

	*

	  const char *anchor
		 Anchor to place at the sequence, or NULL for none

	*

	  const char *tag
		 Tag to place at the sequence, or NULL for none

   FYET_SEQUENCE_END
	* None

   FYET_SCALAR
	*

	  enum fy_scalar_style style
		 Style of the scalar, any valid FYSS_* value Note  that  certain
		 styles may not be used according to the contents of the data

	*

	  const char *value
		 Pointer to the scalar contents.

	*

	  size_t len
		 Length of the scalar contents, of FY_NT (-1) for strlen(value)

	*

	  const char *anchor
		 Anchor to place at the scalar, or NULL for none

	*

	  const char *tag
		 Tag to place at the scalar, or NULL for none

   FYET_ALIAS
	*

	  const char *value
		 Pointer to the alias.

   Return
     The created event or NULL in case of an error

   fy_emit_event_vcreate
     struct fy_event *fy_emit_event_vcreate(struct fy_emitter *emit, enum
     fy_event_type type, va_list ap)
	    Create an emit event using varargs.

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * type (enum fy_event_type) a The event type to create

		   * ap (va_list) a The variable argument list pointer.

   Description
     Create  an  emit  event to pass to fy_emit_event() The varargs analogous to
     fy_emit_event_create().

   Return
     The created event or NULL in case of an error

   fy_emit_event_free
     void fy_emit_event_free(struct fy_emitter *emit, struct fy_event *fye)
	    Free an event created via fy_emit_event_create()

	    Parameters

		   * emit (struct fy_emitter*) a The emitter

		   * fye (struct fy_event*) a The event to free

   Description
     Free an event previously created via fy_emit_event_create(). Note that usu-
     ally you donat have to call this method since if  you  pass  the  event  to
     fy_emit_event()  it shall be disposed properly.  Only use is error recovery
     and cleanup.

   fy_parse_event_create
     struct fy_event *fy_parse_event_create(struct fy_parser *fyp, enum
     fy_event_type type, ...)
	    Create an emit event.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_event_type) a The event type to create

		   * ellipsis (ellipsis) a variable arguments

   Description
     See fy_emit_event_create()a|

   Return
     The created event or NULL in case of an error

   fy_parse_event_vcreate
     struct fy_event *fy_parse_event_vcreate(struct fy_parser *fyp, enum
     fy_event_type type, va_list ap)
	    Create an emit event using varargs.

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * type (enum fy_event_type) a The event type to create

		   * ap (va_list) a The variable argument list pointer.

   Description
     Create an emit event to pass to fy_emit_event() The  varargs  analogous  to
     fy_parse_event_create().

   Return
     The created event or NULL in case of an error

PATH EXECUTION
     This  header  provides  the ypath subsystem a a JSONPath / XPath-like query
     language for navigating YAML document trees.

     A ypath expression such as /servers/0/host is first parsed into a	compiled
     struct fy_path_expr and then executed against a starting node in any struct
     fy_document  to  produce a result set of matching nodes.  Filter predicates
     and wildcards are also supported.

     Typical workflow:

	// 1. Create a path parser
	struct fy_path_parser *fypp = fy_path_parser_create(NULL);

	// 2. Compile an expression
	struct fy_path_expr *expr =
	    fy_path_parse_expr_from_string(fypp, "/servers/0/host", -1);

	// 3. Create an executor and run the expression
	struct fy_path_exec *fypx = fy_path_exec_create(NULL);
	fy_path_exec_execute(fypx, expr, fy_document_root(fyd));

	// 4. Iterate results
	void *iter = NULL;
	struct fy_node *fyn;
	while ((fyn = fy_path_exec_results_iterate(fypx, &iter)) != NULL)
	    process(fyn);

	// 5. Cleanup
	fy_path_exec_destroy(fypx);
	fy_path_expr_free(expr);
	fy_path_parser_destroy(fypp);

     For one-shot use, fy_path_expr_build_from_string() wraps steps 1 and 2 into
     a single call.

     The executor can be reset and re-used for multiple executions  against  the
     same or different documents.  The compiled expression is independent of any
     document and may be executed repeatedly.

   enum fy_path_parse_cfg_flags
     enum fy_path_parse_cfg_flags
	    Path parse configuration flags

   Definition
	enum fy_path_parse_cfg_flags {
	    FYPPCF_QUIET,
	    FYPPCF_DISABLE_RECYCLING,
	    FYPPCF_DISABLE_ACCELERATORS
	};

   Constants
     FYPPCF_QUIET
	    Quiet, do not output any information messages

     FYPPCF_DISABLE_RECYCLING
	    Disable recycling optimization

     FYPPCF_DISABLE_ACCELERATORS
	    Disable use of access accelerators (saves memory)

   Description
     These flags control the operation of the path parse

   struct fy_path_parse_cfg
     struct fy_path_parse_cfg
	    path parser configuration structure.

   Definition
	struct fy_path_parse_cfg {
	    enum fy_path_parse_cfg_flags flags;
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     flags  Configuration flags

     userdata
	    Opaque user data pointer

     diag   Optional diagnostic interface to use

   Description
     Argument  to the fy_path_parser_create() method which performs parsing of a
     ypath expression

   fy_path_parser_create
     struct fy_path_parser *fy_path_parser_create(const struct fy_path_parse_cfg
     *cfg)
	    Create a ypath parser.

	    Parameters

		   * cfg (const struct fy_path_parse_cfg*) a  The  configuration
		     for the path parser

   Description
     Creates a path parser with its configuration cfg The path parser may be de-
     stroyed  by  a  corresponding  call to fy_path_parser_destroy().  If cfg is
     NULL a default yaml parser is created.

   Return
     A pointer to the path parser or NULL in case of an error.

   fy_path_parser_destroy
     void fy_path_parser_destroy(struct fy_path_parser *fypp)
	    Destroy the given path parser

	    Parameters

		   * fypp (struct fy_path_parser*) a The path parser to destroy

   Description
     Destroy a path parser created earlier via fy_path_parser_create().

   fy_path_parser_reset
     int fy_path_parser_reset(struct fy_path_parser *fypp)
	    Reset a path parser completely

	    Parameters

		   * fypp (struct fy_path_parser*) a The path parser to reset

   Description
     Completely reset a path parser, including after  an  error  that  caused  a
     parser error to be emitted.

   Return
     0 if the reset was successful, -1 otherwise

   fy_path_parse_expr_from_string
     struct fy_path_expr *fy_path_parse_expr_from_string(struct fy_path_parser
     *fypp, const char *str, size_t len)
	    Parse an expression from a given string

	    Parameters

		   * fypp (struct fy_path_parser*) a The path parser to use

		   * str (const char*) a The ypath source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Create a path expression from a string using the provided path parser.

   Return
     The created path expression or NULL on error.

   fy_path_expr_build_from_string
     struct fy_path_expr *fy_path_expr_build_from_string(const struct
     fy_path_parse_cfg *pcfg, const char *str, size_t len)
	    Parse an expression from a given string

	    Parameters

		   * pcfg (const struct fy_path_parse_cfg*) a  The  path  parser
		     configuration to use, or NULL for default

		   * str (const char*) a The ypath source to use.

		   * len  (size_t) a The length of the string (or -1 if a0a ter-
		     minated)

   Description
     Create a path expression from a string using the provided path parser  con-
     figuration.

   Return
     The created path expression or NULL on error.

   fy_path_expr_free
     void fy_path_expr_free(struct fy_path_expr *expr)
	    Free a path expression

	    Parameters

		   * expr  (struct  fy_path_expr*) a The expression to free (may
		     be NULL)

   Description
     Free a previously returned expression from any of the path  parser  methods
     like fy_path_expr_build_from_string()

   fy_path_expr_dump
     void fy_path_expr_dump(struct fy_path_expr *expr, struct fy_diag *diag,
     enum fy_error_type errlevel, int level, const char *banner)
	    Dump the contents of a path expression to the diagnostic object

	    Parameters

		   * expr (struct fy_path_expr*) a The expression to dump

		   * diag (struct fy_diag*) a The diagnostic object to use

		   * errlevel  (enum  fy_error_type) a The error level which the
		     diagnostic will use

		   * level (int) a The nest level; should be set to 0

		   * banner (const char*) a The banner to display on level 0

   Description
     Dumps the expression using the provided error level.

   fy_path_expr_to_document
     struct fy_document *fy_path_expr_to_document(struct fy_path_expr *expr)
	    Converts the path expression to a YAML document

	    Parameters

		   * expr (struct fy_path_expr*) a The expression to convert  to
		     a document

   Description
     Converts  the expression to a YAML document which is useful for understand-
     ing what the expression evaluates to.

   Return
     The document of the expression or NULL on error.

   enum fy_path_exec_cfg_flags
     enum fy_path_exec_cfg_flags
	    Path executor configuration flags

   Definition
	enum fy_path_exec_cfg_flags {
	    FYPXCF_QUIET,
	    FYPXCF_DISABLE_RECYCLING,
	    FYPXCF_DISABLE_ACCELERATORS
	};

   Constants
     FYPXCF_QUIET
	    Quiet, do not output any information messages

     FYPXCF_DISABLE_RECYCLING
	    Disable recycling optimization

     FYPXCF_DISABLE_ACCELERATORS
	    Disable use of access accelerators (saves memory)

   Description
     These flags control the operation of the path expression executor

   struct fy_path_exec_cfg
     struct fy_path_exec_cfg
	    path expression executor configuration structure.

   Definition
	struct fy_path_exec_cfg {
	    enum fy_path_exec_cfg_flags flags;
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     flags  Configuration flags

     userdata
	    Opaque user data pointer

     diag   Optional diagnostic interface to use

   Description
     Argument to the fy_path_exec_create() method which performs execution of  a
     ypath expression

   fy_path_exec_create
     struct fy_path_exec *fy_path_exec_create(const struct fy_path_exec_cfg
     *xcfg)
	    Create a ypath expression executor.

	    Parameters

		   * xcfg  (const  struct fy_path_exec_cfg*) a The configuration
		     for the executor

   Description
     Creates a ypath expression parser with its configuration cfg  The	executor
     may be destroyed by a corresponding call to fy_path_exec_destroy().

   Return
     A pointer to the executor or NULL in case of an error.

   fy_path_exec_destroy
     void fy_path_exec_destroy(struct fy_path_exec *fypx)
	    Destroy the given path expression executor

	    Parameters

		   * fypx (struct fy_path_exec*) a The path parser to destroy

   Description
     Destroy ane executor  created earlier via fy_path_exec_create().

   fy_path_exec_reset
     int fy_path_exec_reset(struct fy_path_exec *fypx)
	    Reset an executor

	    Parameters

		   * fypx (struct fy_path_exec*) a The executor to reset

   Description
     Completely reset an executor without releasing it.

   Return
     0 if the reset was successful, -1 otherwise

   fy_path_exec_execute
     int fy_path_exec_execute(struct fy_path_exec *fypx, struct fy_path_expr
     *expr, struct fy_node *fyn_start)
	    Execute a path expression starting at the given start node

	    Parameters

		   * fypx (struct fy_path_exec*) a The executor to use

		   * expr (struct fy_path_expr*) a The expression to use

		   * fyn_start (struct fy_node*) a The node on which the expres-
		     sion will begin.

   Description
     Execute  the  expression  starting at fyn_start. If execution is successful
     the results are available via fy_path_exec_results_iterate()

     Note that it is illegal to modify the state of the document  that	the  re-
     sults reside between this call and the results collection.

   Return
     0 if the execution was successful, -1 otherwise

     Note  that the execution may be successful but no results were produced, in
     which case the iterator will return NULL.

   fy_path_exec_results_iterate
     struct fy_node *fy_path_exec_results_iterate(struct fy_path_exec *fypx,
     void **prevp)
	    Iterate over the results of execution

	    Parameters

		   * fypx (struct fy_path_exec*) a The executor

		   * prevp (void**) a The previous result iterator

   Description
     This method iterates over all the results in the executor.   The  start  of
     the iteration is signalled by a NULL in *prevp.

   Return
     The next node in the result set or NULL at the end of the results.

DOCUMENT ITERATION
     This  header  provides struct fy_document_iterator, which traverses a docu-
     ment tree depth-first without using  system  stack  recursion.   Two  usage
     modes are supported:

     Node iteration a visit every node in a subtree in document order:

	struct fy_document_iterator *fydi = fy_document_iterator_create();
	fy_document_iterator_node_start(fydi, fy_document_root(fyd));
	struct fy_node *fyn;
	while ((fyn = fy_document_iterator_node_next(fydi)) != NULL)
	    process(fyn);
	fy_document_iterator_destroy(fydi);

     Event replay a regenerate the YAML event stream that produced the document,
     suitable for feeding into a parser, emitter, or composer:

	struct fy_document_iterator *fydi =
	    fy_document_iterator_create_on_document(fyd);
	struct fy_event *fye;
	while ((fye = fy_document_iterator_generate_next(fydi)) != NULL) {
	    process_event(fye);
	    fy_document_iterator_event_free(fydi, fye);
	}
	fy_document_iterator_destroy(fydi);

     The   iterator   can   also   be	attached   to  a  struct  fy_parser  via
     fy_parser_set_document_iterator(), making a parser transparently replay the
     events of an existing document rather than parsing fresh input.

     Events emitted by the iterator are in the same order as those  that  origi-
     nally created the document, so round-trip fidelity is preserved.

   enum fy_document_iterator_cfg_flags
     enum fy_document_iterator_cfg_flags
	    Document iterator configuration flags

   Definition
	enum fy_document_iterator_cfg_flags {
	    FYDICF_WANT_BODY_EVENTS,
	    FYDICF_WANT_DOCUMENT_BODY_EVENTS,
	    FYDICF_WANT_STREAM_DOCUMENT_BODY_EVENTS
	};

   Constants
     FYDICF_WANT_BODY_EVENTS
	    Generate body events

     FYDICF_WANT_DOCUMENT_BODY_EVENTS
	    Generate document and body events

     FYDICF_WANT_STREAM_DOCUMENT_BODY_EVENTS
	    Generate stream, document and body events

   Description
     These flags control the operation of the document iterator

   struct fy_document_iterator_cfg
     struct fy_document_iterator_cfg
	    document iterator configuration structure.

   Definition
	struct fy_document_iterator_cfg {
	    enum fy_document_iterator_cfg_flags flags;
	    struct fy_document *fyd;
	    struct fy_node *iterate_root;
	}

   Members
     flags  The document iterator flags

     fyd    The document to iterate on (or NULL if iterate_root is set)

     iterate_root
	    The root of iteration (NULL when fyd is not NULL)

   Description
     Argument to the fy_document_iterator_create_cfg() method.

   fy_document_iterator_create
     struct fy_document_iterator *fy_document_iterator_create(void)
	    Create a document iterator

	    Parameters

		   * void a no arguments

   Description
     Creates  a document iterator, that can trawl through a document without us-
     ing recursion.

   Return
     The newly created document iterator or NULL on error

   fy_document_iterator_create_cfg
     struct fy_document_iterator *fy_document_iterator_create_cfg(const struct
     fy_document_iterator_cfg *cfg)
	    Create a document iterator using config

	    Parameters

		   * cfg (const struct fy_document_iterator_cfg*) a The document
		     iterator to destroy

   Description
     Creates a document iterator, that can trawl through a document without  us-
     ing  recursion.  The iterator will generate all the events that created the
     given document starting at iterator root.

   Return
     The newly created document iterator or NULL on error

   fy_document_iterator_create_on_document
     struct fy_document_iterator *fy_document_iterator_create_on_document(struct
     fy_document *fyd)
	    Create a document iterator on document

	    Parameters

		   * fyd (struct fy_document*) a The document to iterate on

   Description
     Creates a document iterator, starting at the root of the given document.

   Return
     The newly created document iterator or NULL on error

   fy_document_iterator_create_on_node
     struct fy_document_iterator *fy_document_iterator_create_on_node(struct
     fy_node *fyn)
	    Create a document iterator on node

	    Parameters

		   * fyn (struct fy_node*) a The node to iterate on

   Description
     Creates a document iterator, starting at the given node

   Return
     The newly created document iterator or NULL on error

   fy_document_iterator_destroy
     void fy_document_iterator_destroy(struct fy_document_iterator *fydi)
	    Destroy the given document iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to destroy

   Description
     Destroy	 a     document      iterator	   created	earlier      via
     fy_document_iterator_create().

   fy_document_iterator_event_free
     void fy_document_iterator_event_free(struct fy_document_iterator *fydi,
     struct fy_event *fye)
	    Free an event that was created by a document iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     that created the event

		   * fye (struct fy_event*) a The event

   Description
     Free (possibly recycling) an event that was created by a document iterator.

   fy_document_iterator_stream_start
     struct fy_event *fy_document_iterator_stream_start(struct fy_document_iter-
     ator *fydi)
	    Create a stream start event using the iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

   Description
     Creates  a stream start event on the document iterator and advances the in-
     ternal state of it accordingly.

   Return
     The newly created stream start event, or NULL on error.

   fy_document_iterator_stream_end
     struct fy_event *fy_document_iterator_stream_end(struct fy_document_itera-
     tor *fydi)
	    Create a stream end event using the iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

   Description
     Creates a stream end event on the document iterator and advances the inter-
     nal state of it accordingly.

   Return
     The newly created stream end event, or NULL on error.

   fy_document_iterator_document_start
     struct fy_event *fy_document_iterator_document_start(struct fy_document_it-
     erator *fydi, struct fy_document *fyd)
	    Create a document start event using the iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

		   * fyd (struct fy_document*) a  The  document  containing  the
		     document state that is used in the event

   Description
     Creates  a  document  start event on the document iterator and advances the
     internal state of it accordingly. The document must not be  released  until
     an error, cleanup or a call to fy_document_iterator_document_end().

   Return
     The newly created document start event, or NULL on error.

   fy_document_iterator_document_end
     struct fy_event *fy_document_iterator_document_end(struct fy_document_iter-
     ator *fydi)
	    Create a document end event using the iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

   Description
     Creates  a document end event on the document iterator and advances the in-
     ternal state of it accordingly. The document that was used earlier  in  the
     call of fy_document_iterator_document_start() can now be released.

   Return
     The newly created document end event, or NULL on error.

   fy_document_iterator_body_next
     struct fy_event *fy_document_iterator_body_next(struct fy_document_iterator
     *fydi)
	    Create document body events until the end

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

   Description
     Creates  the next document body, depth first until the end of the document.
     The events are created depth first and are in same exact sequence that  the
     original events that created the document.

     That  means  that	the  finite  event stream that generated the document is
     losslesly preserved in such a way that the document tree representation  is
     functionally equivalent.

     Repeated  calls  to  this function will generate a stream of SCALAR, ALIAS,
     SEQUENCE START, SEQUENCE END, MAPPING START and MAPPING END events, return-
     ing NULL at the end of the body event stream.

   Return
     The newly created document body event or NULL at an error, or an end of the
     event stream. Use fy_document_iterator_get_error() to check if an error oc-
     cured.

   fy_document_iterator_node_start
     void fy_document_iterator_node_start(struct fy_document_iterator *fydi,
     struct fy_node *fyn)
	    Start a document node iteration run using a starting point

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to run with

		   * fyn (struct fy_node*) a The iterator root for the iteration

   Description
     Starts an iteration run starting at the given node.

   fy_document_iterator_node_next
     struct fy_node *fy_document_iterator_node_next(struct fy_document_iterator
     *fydi)
	    Return the next node in the iteration sequence

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to use for the iteration

   Description
     Returns a pointer to the next node iterating using  as  a	start  the  node
     given at fy_document_iterator_node_start(). The first node returned will be
     that, followed by all the remaing nodes in the subtree.

   Return
     The  next node in the iteration sequence or NULL at the end, or if an error
     occured.

   fy_document_iterator_generate_next
     struct fy_event *fy_document_iterator_generate_next(struct fy_document_it-
     erator *fydi)
	    Create events from document iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to create the event

   Description
     This is a method that will handle the complex state of  generating  stream,
     document and body events on the given iterator.

     When generation is complete a NULL event will be generated.

   Return
     The newly created event or NULL at an error, or an end of the event stream.
     Use fy_document_iterator_get_error() to check if an error occured.

   fy_document_iterator_get_error
     bool fy_document_iterator_get_error(struct fy_document_iterator *fydi)
	    Get the error state of the document iterator

	    Parameters

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to use for checking itas error state.

   Description
     Returns  the  error  state  of the iterator. If itas in error state, return
     true and reset the iterator to the state just after creation.

   Return
     true if it was in an error state, false otherwise.

   enum fy_parser_event_generator_flags
     enum fy_parser_event_generator_flags
	    The parser event generator flags

   Definition
	enum fy_parser_event_generator_flags {
	    FYPEGF_GENERATE_DOCUMENT_EVENTS,
	    FYPEGF_GENERATE_STREAM_EVENTS,
	    FYPEGF_GENERATE_ALL_EVENTS
	};

   Constants
     FYPEGF_GENERATE_DOCUMENT_EVENTS
	    generate document events

     FYPEGF_GENERATE_STREAM_EVENTS
	    generate stream events

     FYPEGF_GENERATE_ALL_EVENTS
	    generate all events

   fy_parser_set_document_iterator
     int fy_parser_set_document_iterator(struct fy_parser *fyp, enum
     fy_parser_event_generator_flags flags, struct fy_document_iterator *fydi)
	    Associate a parser with a document iterator

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * flags (enum fy_parser_event_generator_flags)  a  The  event
		     generation flags

		   * fydi (struct fy_document_iterator*) a The document iterator
		     to associate

   Description
     Associate a parser with a document iterator, that is instead of parsing the
     events will be generated by the document iterator.

   Return
     0 on success, -1 on error

DOCUMENT BUILDER
     This  header  provides  struct  fy_document_builder, which accumulates YAML
     parser events and assembles them into a struct fy_document tree.

     The builder supports two operating modes:

     Pull mode a the builder drives a parser internally:

	struct fy_document_builder *fydb =
	    fy_document_builder_create_on_parser(fyp);
	struct fy_document *fyd;
	while ((fyd = fy_document_builder_load_document(fydb, fyp)) != NULL) {
	    process(fyd);
	    fy_document_destroy(fyd);
	}
	fy_document_builder_destroy(fydb);

     Push mode a the caller feeds events one at a time and takes ownership  when
     the document is complete:

	fy_document_builder_set_in_stream(fydb);
	struct fy_event *fye;
	while ((fye = get_next_event()) != NULL) {
	    fy_document_builder_process_event(fydb, fye);
	    if (fy_document_builder_is_document_complete(fydb)) {
		struct fy_document *fyd =
		    fy_document_builder_take_document(fydb);
		process(fyd);
		fy_document_destroy(fyd);
	    }
	}

     Push  mode  is  useful  when  events arrive asynchronously or from a source
     other than a libfyaml parser, such as a  document	iterator  or  a  network
     stream.

     fy_parse_load_document_with_builder()  provides  the  simplest interface: a
     single call that returns the next complete document from a parser.

   struct fy_document_builder_cfg
     struct fy_document_builder_cfg
	    document builder configuration structure.

   Definition
	struct fy_document_builder_cfg {
	    struct fy_parse_cfg parse_cfg;
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     parse_cfg
	    Parser configuration

     userdata
	    Opaque user data pointer

     diag   Optional diagnostic interface to use

   Description
     Argument to the fy_document_builder_create() method

   fy_document_builder_create
     struct fy_document_builder *fy_document_builder_create(const struct
     fy_document_builder_cfg *cfg)
	    Create a document builder

	    Parameters

		   * cfg (const struct fy_document_builder_cfg*) a The	configu-
		     ration for the document builder

   Description
     Creates  a document builder with its configuration cfg The document builder
     may be destroyed by a corresponding call to fy_document_builder_destroy().

   Return
     A pointer to the document builder or NULL in case of an error.

   fy_document_builder_create_on_parser
     struct fy_document_builder *fy_document_builder_create_on_parser(struct
     fy_parser *fyp)
	    Create a document builder pulling state from the parser

	    Parameters

		   * fyp (struct fy_parser*) a The parser to associate with

   Description
     Creates a document builder pulling state from the given parser

   Return
     A pointer to the document builder or NULL in case of an error.

   fy_document_builder_reset
     void fy_document_builder_reset(struct fy_document_builder *fydb)
	    Reset a document builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Resets a document builder without destroying it

   fy_document_builder_destroy
     void fy_document_builder_destroy(struct fy_document_builder *fydb)
	    Destroy a document builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Destroy a document builder

   fy_document_builder_get_document
     struct fy_document *fy_document_builder_get_document(struct fy_docu-
     ment_builder *fydb)
	    Get the document of a builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Retrieve the document of a document builder. This document  may  be  incom-
     plete.	 If	 you	  need	    to	    take      ownership      use
     fy_document_builder_take_document().

   Return
     The document that the builder built, or NULL in case of an error

   fy_document_builder_is_in_stream
     bool fy_document_builder_is_in_stream(struct fy_document_builder *fydb)
	    Test document builder in stream

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Find out if the document builder is in astreama state,  i.e.  after  stream
     start but before stream end events are generated.

   Return
     true if in stream, false otherwise

   fy_document_builder_is_in_document
     bool fy_document_builder_is_in_document(struct fy_document_builder *fydb)
	    Test document builder in document

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Find  out	if the document builder is in adocumenta state, i.e. after docu-
     ment start but before document end events are generated.

   Return
     true if in document, false otherwise

   fy_document_builder_is_document_complete
     bool fy_document_builder_is_document_complete(struct fy_document_builder
     *fydb)
	    Test document builder complete

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Find out if the document of the builder is complete.   If	it  is	complete
     then  a call to fy_document_builder_take_document() will transfer ownership
     of the document to the caller.

   Return
     true if document complete, false otherwise

   fy_document_builder_take_document
     struct fy_document *fy_document_builder_take_document(struct fy_docu-
     ment_builder *fydb)
	    Take ownership the document of a builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Take ownership of	the  document  of  a  document	builder.   The	document
     builderas document must be complete.

   Return
     The document that the builder built, or NULL in case of an error

   fy_document_builder_peek_document
     struct fy_document *fy_document_builder_peek_document(struct fy_docu-
     ment_builder *fydb)
	    Peek at the document of a builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Peek  at  the document of a document builder.  Ownership still remains with
     the builder.

   Return
     A peek to the document that the builder built, or NULL in case of an error

   fy_document_builder_set_in_stream
     void fy_document_builder_set_in_stream(struct fy_document_builder *fydb)
	    Set the builders state in astreama

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

   Description
     Set the document builders state to in astreama

   fy_document_builder_set_in_document
     int fy_document_builder_set_in_document(struct fy_document_builder *fydb,
     struct fy_document_state *fyds, bool single)
	    Set the builders state in adocumenta

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

		   * fyds (struct fy_document_state*) a The document state

		   * single (bool) a Single document mode

   Description
     Set the document builders state to in adocumenta

   Return
     0 on success, -1 on error

   fy_document_builder_load_document
     struct fy_document *fy_document_builder_load_document(struct fy_docu-
     ment_builder *fydb, struct fy_parser *fyp)
	    Create a document from parser events

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

		   * fyp (struct fy_parser*) a The parser

   Description
     Load a document by pumping the parser for events and then	processing  them
     with the builder.

   Return
     The  document that results from the parser, or NULL in case of an error (or
     EOF)

   fy_parse_load_document_with_builder
     struct fy_document *fy_parse_load_document_with_builder(struct fy_parser
     *fyp)
	    Parse a document via built-in builder

	    Parameters

		   * fyp (struct fy_parser*) a The parser

   Description
     Load a document by pumping the parser for events and then	processing  them
     with the in-parser builder.

   Return
     The  document that results from the parser, or NULL in case of an error (or
     EOF)

   fy_document_builder_process_event
     int fy_document_builder_process_event(struct fy_document_builder *fydb,
     struct fy_event *fye)
	    Process an event with a builder

	    Parameters

		   * fydb (struct fy_document_builder*) a The document builder

		   * fye (struct fy_event*) a The event

   Description
     Pump an event to a document builder for processing.

   Return
     0 on success, -1 on error

COMPOSER
     This header provides two complementary interfaces for processing YAML event
     streams with awareness of the current position in the  document  hierarchy,
     without committing to building a full in-memory tree.

     Simple  callback  interface  a fy_parse_compose() calls a user function for
     each event, passing both the event and the current struct	fy_path  so  the
     callback  can  make  intelligent decisions without maintaining its own path
     stack:

	enum fy_composer_return my_cb(struct fy_parser *fyp,
				      struct fy_event *fye,
				      struct fy_path *path,
				      void *userdata)
	{
	    if (fy_path_depth(path) > 3)
		return FYCR_OK_START_SKIP;
	    process(fye);
	    return FYCR_OK_CONTINUE;
	}
	fy_parse_compose(fyp, my_cb, ctx);

     Object-based interface a struct fy_composer wraps the same mechanism  in  a
     reusable  object with ops callbacks, optional document builder integration,
     and helpers for navigating the path hierarchy.

     Path  inspection  helpers	a  functions   such   as   fy_path_in_mapping(),
     fy_path_depth(),  fy_path_component_is_sequence(),  and  the  user-data at-
     tach/retrieve pairs let callbacks annotate and query the  live  path  stack
     without any external bookkeeping.

     Callbacks control event processing by returning one of:

     * FYCR_OK_CONTINUE    a consume the event and continue

     * FYCR_OK_STOP	   a consume the event and stop

     * FYCR_OK_START_SKIP  a start skipping the current subtree

     * FYCR_OK_STOP_SKIP   a stop an active skip and resume processing

     * FYCR_ERROR	   a abort with an error

   enum fy_composer_return
     enum fy_composer_return
	    The returns of the composer callback

   Definition
	enum fy_composer_return {
	    FYCR_OK_CONTINUE,
	    FYCR_OK_STOP,
	    FYCR_OK_START_SKIP,
	    FYCR_OK_STOP_SKIP,
	    FYCR_ERROR
	};

   Constants
     FYCR_OK_CONTINUE
	    continue processing, event processed

     FYCR_OK_STOP
	    stop processing, event processed

     FYCR_OK_START_SKIP
	    start skip object(s), event processed

     FYCR_OK_STOP_SKIP
	    stop skipping of objects, event processed

     FYCR_ERROR
	    error, stop processing

   fy_composer_return_is_ok
     bool fy_composer_return_is_ok(enum fy_composer_return ret)
	    Check if the return code is OK

	    Parameters

		   * ret  (enum  fy_composer_return)  a  the  composer return to
		     check

   Description
     Convenience method for checking if itas OK to continue

   Return
     true if non error or skip condition

   typedef fy_parse_composer_cb
     enum fy_composer_return fy_parse_composer_cb(struct fy_parser *fyp, struct
     fy_event *fye, struct fy_path *path, void *userdata)
	    composer callback method

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * fye (struct fy_event*) a The event

		   * path (struct fy_path*) a The path that the parser	is  pro-
		     cessing

		   * userdata  (void*) a The user data of the fy_parse_compose()
		     method

   Description
     This method is called by the fy_parse_compose() method when an  event  must
     be processed.

   Return
     fy_composer_return code telling the parser what to do

   fy_parse_compose
     int fy_parse_compose(struct fy_parser *fyp, fy_parse_composer_cb cb, void
     *userdata)
	    Parse using a compose callback

	    Parameters

		   * fyp (struct fy_parser*) a The parser

		   * cb  (fy_parse_composer_cb)  a  The  callback  that  will be
		     called

		   * userdata (void*) a user pointer to pass to the callback

   Description
     Alternative parsing method using a composer callback.

     The parser will construct a path argument that is used by the  callback  to
     make intelligent decisions about creating a document and/or DOM.

   Return
     0 if no error occured -1 on error

   fy_path_component_is_mapping
     bool fy_path_component_is_mapping(struct fy_path_component *fypc)
	    Check if the component is a mapping

	    Parameters

		   * fypc  (struct  fy_path_component*)  a The path component to
		     check

   Return
     true if the path component is a mapping, false otherwise

   fy_path_component_is_sequence
     bool fy_path_component_is_sequence(struct fy_path_component *fypc)
	    Check if the component is a sequence

	    Parameters

		   * fypc (struct fy_path_component*) a The  path  component  to
		     check

   Return
     true if the path component is a sequence, false otherwise

   fy_path_component_sequence_get_index
     int fy_path_component_sequence_get_index(struct fy_path_component *fypc)
	    Get the index of sequence path component

	    Parameters

		   * fypc (struct fy_path_component*) a The sequence path compo-
		     nent to return itas index value

   Return
     >=  0  the  sequence  index -1 if the component is either not in the proper
     mode, or not a sequence

   fy_path_component_mapping_get_scalar_key
     struct fy_token *fy_path_component_mapping_get_scalar_key(struct
     fy_path_component *fypc)
	    Get the scalar key of a mapping

	    Parameters

		   * fypc (struct fy_path_component*) a The mapping path  compo-
		     nent to return itas scalar key

   Return
     a	non NULL scalar or alias token if the mapping contains a scalar key NULL
     in case of an error, or if the component has a complex key

   fy_path_component_mapping_get_scalar_key_tag
     struct fy_token *fy_path_component_mapping_get_scalar_key_tag(struct
     fy_path_component *fypc)
	    Get the scalar keyas tag of a mapping

	    Parameters

		   * fypc (struct fy_path_component*) a The mapping path  compo-
		     nent to return itas scalar keyas tag

   Return
     a	non  NULL  tag	token if the mapping contains a scalar key with a tag or
     NULL in case of an error, or if the component has a complex key

   fy_path_component_mapping_get_complex_key
     struct fy_document *fy_path_component_mapping_get_complex_key(struct
     fy_path_component *fypc)
	    Get the complex key of a mapping

	    Parameters

		   * fypc (struct fy_path_component*) a The mapping path  compo-
		     nent to return itas complex key

   Return
     a	non  NULL document if the mapping contains a complex key NULL in case of
     an error, or if the component has a simple key

   fy_path_component_get_text
     char *fy_path_component_get_text(struct fy_path_component *fypc)
	    Get the textual representation of a path component

	    Parameters

		   * fypc (struct fy_path_component*) a The  path  component  to
		     get itas textual representation

   Description
     Given  a  path component, return a mallocaed string which contains the tex-
     tual representation of it.

     Note that this method will only return fully completed components	and  not
     ones that are in the building process.

   Return
     The  textual representation of the path component, NULL on error, or if the
     component has not been completely built during the composition of a complex
     key.  The string must be freeaed using free.

   fy_path_depth
     int fy_path_depth(struct fy_path *fypp)
	    Get the depth of a path

	    Parameters

		   * fypp (struct fy_path*) a The path to query

   Return
     The depth of the path, or -1 on error

   fy_path_parent
     struct fy_path *fy_path_parent(struct fy_path *fypp)
	    Get the parent of a path

	    Parameters

		   * fypp (struct fy_path*) a The path to return itas parent

   Description
     Paths may contain parents when traversing complex keys.   This  method  re-
     turns the immediate parent.

   Return
     The path parent or NULL on error, if it doesnat exist

   fy_path_get_text
     char *fy_path_get_text(struct fy_path *fypp)
	    Get the textual representation of a path

	    Parameters

		   * fypp  (struct fy_path*) a The path to get itas textual rep-
		     resentation

   Description
     Given a path, return a mallocaed string which contains the  textual  repre-
     sentation of it.

     Note  that  during  processing, complex key paths are simply indicative and
     not to be used for addressing.

   Return
     The textual representation of the path, NULL on error.  The string must  be
     freeaed using free.

   fy_path_in_root
     bool fy_path_in_root(struct fy_path *fypp)
	    Check if the path is in the root of the document

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     true if the path is located within the root of the document

   fy_path_in_mapping
     bool fy_path_in_mapping(struct fy_path *fypp)
	    Check if the path is in a mapping

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     true if the path is located within a mapping

   fy_path_in_sequence
     bool fy_path_in_sequence(struct fy_path *fypp)
	    Check if the path is in a sequence

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     true if the path is located within a sequence

   fy_path_in_mapping_key
     bool fy_path_in_mapping_key(struct fy_path *fypp)
	    Check if the path is in a mapping key state

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     true if the path is located within a mapping key state

   fy_path_in_mapping_value
     bool fy_path_in_mapping_value(struct fy_path *fypp)
	    Check if the path is in a mapping value state

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     true if the path is located within a mapping value state

   fy_path_in_collection_root
     bool fy_path_in_collection_root(struct fy_path *fypp)
	    Check if the path is in a collection root

	    Parameters

		   * fypp (struct fy_path*) a The path

   Description
     A	collection  root  state is when the path points to a sequence or mapping
     but the state does not allow setting keys, values or adding items.

     This occurs on MAPPING/SEQUENCE START/END events.

   Return
     true if the path is located within a collectin root state

   fy_path_get_root_user_data
     void *fy_path_get_root_user_data(struct fy_path *fypp)
	    Return the userdata associated with the path root

	    Parameters

		   * fypp (struct fy_path*) a The path

   Return
     The user data associated with the root of the path, or NULL if no path

   fy_path_set_root_user_data
     void fy_path_set_root_user_data(struct fy_path *fypp, void *data)
	    Set the user data associated with the root

	    Parameters

		   * fypp (struct fy_path*) a The path

		   * data (void*) a The data to set as root data

   Description
     Note, no error condition if not a path

   fy_path_component_get_mapping_user_data
     void *fy_path_component_get_mapping_user_data(struct fy_path_component
     *fypc)
	    Return the userdata associated with the mapping

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

   Return
     The user data associated with the mapping, or NULL if not a mapping or  the
     user data are NULL

   fy_path_component_get_mapping_key_user_data
     void *fy_path_component_get_mapping_key_user_data(struct fy_path_component
     *fypc)
	    Return the userdata associated with the mapping key

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

   Return
     The  user data associated with the mapping key, or NULL if not a mapping or
     the user data are NULL

   fy_path_component_get_sequence_user_data
     void *fy_path_component_get_sequence_user_data(struct fy_path_component
     *fypc)
	    Return the userdata associated with the sequence

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

   Return
     The user data associated with the sequence, or NULL if not  a  sequence  or
     the user data are NULL

   fy_path_component_set_mapping_user_data
     void fy_path_component_set_mapping_user_data(struct fy_path_component
     *fypc, void *data)
	    Set the user data associated with a mapping

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

		   * data (void*) a The data to set as mapping data

   Description
     Note, no error condition if not a mapping

   fy_path_component_set_mapping_key_user_data
     void fy_path_component_set_mapping_key_user_data(struct fy_path_component
     *fypc, void *data)
	    Set the user data associated with a mapping key

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

		   * data (void*) a The data to set as mapping key data

   Description
     Note, no error condition if not in a mapping key state

   fy_path_component_set_sequence_user_data
     void fy_path_component_set_sequence_user_data(struct fy_path_component
     *fypc, void *data)
	    Set the user data associated with a sequence

	    Parameters

		   * fypc (struct fy_path_component*) a The path component

		   * data (void*) a The data to set as sequence data

   Description
     Note, no error condition if not a sequence

   fy_path_get_parent_user_data
     void *fy_path_get_parent_user_data(struct fy_path *path)
	    Return the userdata of the parent collection

	    Parameters

		   * path (struct fy_path*) a The path

   Return
     The user data associated with the parent collection of the path, or NULL if
     no path

   fy_path_set_parent_user_data
     void fy_path_set_parent_user_data(struct fy_path *path, void *data)
	    Set the user data associated with the parent collection

	    Parameters

		   * path (struct fy_path*) a The path

		   * data (void*) a The data to set as parent collection data

   Description
     Note, no error condition if not a path

   fy_path_get_last_user_data
     void *fy_path_get_last_user_data(struct fy_path *path)
	    Return the userdata of the last collection

	    Parameters

		   * path (struct fy_path*) a The path

   Return
     The  user	data associated with the last collection of the path, or NULL if
     no path

   fy_path_set_last_user_data
     void fy_path_set_last_user_data(struct fy_path *path, void *data)
	    Set the user data associated with the last collection

	    Parameters

		   * path (struct fy_path*) a The path

		   * data (void*) a The data to set as last collection data

   Description
     Note, no error condition if not a path

   fy_path_last_component
     struct fy_path_component *fy_path_last_component(struct fy_path *fypp)
	    Get the very last component of a path

	    Parameters

		   * fypp (struct fy_path*) a The path

   Description
     Returns the last component of a path.

   Return
     The last path component (which may be a collection root component), or NULL
     if it does not exist

   fy_path_last_not_collection_root_component
     struct fy_path_component *fy_path_last_not_collection_root_component(struct
     fy_path *fypp)
	    Get the last non collection root component of a path

	    Parameters

		   * fypp (struct fy_path*) a The path

   Description
     Returns the last non collection root component of a path. This may  not  be
     the last component that is returned by fy_path_last_component().

     The  difference  is  present on MAPPING/SEQUENCE START/END events where the
     last component is present but not usuable as a object parent.

   Return
     The last non collection root component, or NULL if it does not exist

   struct fy_composer_ops
     struct fy_composer_ops
	    Composer operation callbacks

   Definition
	struct fy_composer_ops {
	    enum fy_composer_return (*process_event)(struct fy_composer *fyc, struct fy_path *path, struct fy_event *fye);
	    struct fy_document_builder *(*create_document_builder)(struct fy_composer *fyc);
	}

   Members
     process_event
	    Callback for processing a single YAML event with path context

     create_document_builder
	    Callback for creating a document builder instance

   Description
     Callbacks used by the  composer  to  process  events  and	create	document
     builders.

   struct fy_composer_cfg
     struct fy_composer_cfg
	    Composer configuration structure

   Definition
	struct fy_composer_cfg {
	    const struct fy_composer_ops *ops;
	    void *userdata;
	    struct fy_diag *diag;
	}

   Members
     ops    Pointer to composer operation callbacks

     userdata
	    Opaque user data pointer passed to callbacks

     diag   Optional diagnostic interface to use, NULL for default

   Description
     Configuration structure for creating a composer instance.

   fy_composer_create
     struct fy_composer *fy_composer_create(struct fy_composer_cfg *cfg)
	    Create a composer

	    Parameters

		   * cfg  (struct  fy_composer_cfg*) a The configuration for the
		     composer

   Description
     Creates a composer with the given	configuration.	The  composer  processes
     YAML  events  using callback methods and maintains path information for in-
     telligent document composition. The composer may be destroyed by  a  corre-
     sponding call to fy_composer_destroy().

   Return
     A pointer to the composer or NULL in case of an error.

   fy_composer_destroy
     void fy_composer_destroy(struct fy_composer *fyc)
	    Destroy the given composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer to destroy

   Description
     Destroy a composer created earlier via fy_composer_create().

   fy_composer_process_event
     enum fy_composer_return fy_composer_process_event(struct fy_composer *fyc,
     struct fy_event *fye)
	    Process a YAML event through the composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer

		   * fye (struct fy_event*) a The event to process

   Description
     Process  a YAML event by calling the configured process_event callback with
     path context. The composer maintains the current path and	provides  it  to
     the callback for intelligent processing decisions.

   Return
     A	fy_composer_return code indicating how to proceed (continue, stop, skip,
     or error)

   fy_composer_get_cfg
     struct fy_composer_cfg *fy_composer_get_cfg(struct fy_composer *fyc)
	    Get the configuration of a composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer

   Return
     The configuration of the composer

   fy_composer_get_cfg_userdata
     void *fy_composer_get_cfg_userdata(struct fy_composer *fyc)
	    Get the userdata from composer configuration

	    Parameters

		   * fyc (struct fy_composer*) a The composer

   Description
     Retrieve the opaque userdata pointer from the composeras configuration.

   Return
     The userdata pointer from the configuration

   fy_composer_get_diag
     struct fy_diag *fy_composer_get_diag(struct fy_composer *fyc)
	    Get the diagnostic object of a composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer to get  the  diag-
		     nostic object

   Description
     Return  a pointer to the diagnostic object of a composer object.  Note that
     the  returned  diag  object  has  a   reference   taken   so   you   should
     fy_diag_unref() it when youare done with it.

   Return
     A pointer to a refaed diagnostic object or NULL in case of an error.

   fy_composer_get_path
     struct fy_path *fy_composer_get_path(struct fy_composer *fyc)
	    Get the current path of the composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer

   Description
     Retrieve the current path being processed by the composer.  The path repre-
     sents  the  location  in  the YAML document structure where the composer is
     currently positioned.

   Return
     The current path, or NULL if no path is active

   fy_composer_get_root_path
     struct fy_path *fy_composer_get_root_path(struct fy_composer *fyc)
	    Get the root path of the composer

	    Parameters

		   * fyc (struct fy_composer*) a The composer

   Description
     Retrieve the root path of the composeras path hierarchy.

   Return
     The root path, or NULL if no root exists

   fy_composer_get_next_path
     struct fy_path *fy_composer_get_next_path(struct fy_composer *fyc, struct
     fy_path *fypp)
	    Get the next path in the composeras path list

	    Parameters

		   * fyc (struct fy_composer*) a The composer

		   * fypp (struct fy_path*) a The previous path, or NULL to  get
		     the first path

   Description
     Iterate  through the composeras path list. Pass NULL to get the first path,
     or pass the previous path to get the next one.

   Return
     The next path in the list, or NULL if no more paths exist

COPYRIGHT
     2019-2026, Pantelis Antoniou

				  Mar 15, 2026			LIBFYAML-CORE(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=libfyaml-core&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help