Index: libyaml/trunk/include/yaml/yaml.h
===================================================================
--- libyaml/trunk/include/yaml/yaml.h	(revision 182)
+++ libyaml/trunk/include/yaml/yaml.h	(revision 183)
@@ -21,4 +21,25 @@
 
 /**
+ * @defgroup Export Definitions
+ * @{
+ */
+
+/** The public API declaration. */
+
+#ifdef WIN32
+#   if defined(YAML_DECLARE_STATIC)
+#       define  YAML_DECLARE(type)  type
+#   elif defined(YAML_DECLARE_EXPORT)
+#       define  YAML_DECLARE(type)  __declspec(dllexport) type
+#   else
+#       define  YAML_DECLARE(type)  __declspec(dllimport) type
+#   endif
+#else
+#   define  YAML_DECLARE(type)  type
+#endif
+
+/** @} */
+
+/**
  * @defgroup version Version Information
  * @{
@@ -33,5 +54,5 @@
  */
 
-const char *
+YAML_DECLARE(const char *)
 yaml_get_version_string(void);
 
@@ -44,5 +65,5 @@
  */
 
-void
+YAML_DECLARE(void)
 yaml_get_version(int *major, int *minor, int *patch);
 
@@ -54,5 +75,5 @@
  */
 
-/** The character type. */
+/** The character type (UTF-8 octet). */
 typedef unsigned char yaml_char_t;
 
@@ -79,29 +100,61 @@
 } yaml_error_type_t;
 
+/** The pointer position. */
+typedef struct {
+    /** The position index. */
+    size_t index;
+
+    /** The position line. */
+    size_t line;
+
+    /** The position column. */
+    size_t column;
+} yaml_mark_t;
+
 /** @} */
 
-/*
-
+/**
+ * @defgroup Node Styles
+ * @{
+ */
+
+/** Scalar styles. */
 typedef enum {
     YAML_ANY_SCALAR_STYLE,
+
     YAML_PLAIN_SCALAR_STYLE,
+
     YAML_SINGLE_QUOTED_SCALAR_STYLE,
     YAML_DOUBLE_QUOTED_SCALAR_STYLE,
+
     YAML_LITERAL_SCALAR_STYLE,
     YAML_FOLDED_SCALAR_STYLE
 } yaml_scalar_style_t;
 
+
+/** Sequence styles. */
 typedef enum {
     YAML_ANY_SEQUENCE_STYLE,
+
     YAML_BLOCK_SEQUENCE_STYLE,
     YAML_FLOW_SEQUENCE_STYLE
 } yaml_sequence_style_t;
 
+/** Mapping styles. */
 typedef enum {
     YAML_ANY_MAPPING_STYLE,
+
     YAML_BLOCK_MAPPING_STYLE,
     YAML_FLOW_MAPPING_STYLE
 } yaml_mapping_style_t;
 
+/** @} */
+
+/**
+ * @defgroup Tokens
+ * @{
+ */
+
+/** Token types. */
 typedef enum {
     YAML_STREAM_START_TOKEN,
@@ -133,4 +186,240 @@
 } yaml_token_type_t;
 
+/** The token structure. */
+typedef struct {
+
+    /** The token type. */
+    yaml_token_type_t type;
+
+    /** The token data. */
+    union {
+
+        /** The stream encoding (for @c YAML_STREAM_START_TOKEN). */
+        yaml_encoding_t encoding;
+
+        /** The anchor (for @c YAML_ALIAS_TOKEN and @c YAML_ANCHOR_TOKEN). */
+        yaml_char_t *anchor;
+
+        /** The tag (for @c YAML_TAG_TOKEN). */
+        struct {
+            /** The tag handle. */
+            yaml_char_t *handle;
+
+            /** The tag suffix. */
+            yaml_char_t *suffix;
+        } tag;
+
+        /** The scalar value (for @c YAML_SCALAR_TOKEN). */
+        struct {
+
+            /** The scalar value. */
+            yaml_char_t *value;
+
+            /** The length of the scalar value. */
+            size_t length;
+
+            /** The scalar style. */
+            yaml_scalar_style_t style;
+        } scalar;
+
+        /** The version directive (for @c YAML_VERSION_DIRECTIVE_TOKEN). */
+        struct {
+            /** The major version number. */
+            int major;
+
+            /** The minor version number. */
+            int minor;
+        } version_directive;
+
+        /** The tag directive (for @c YAML_TAG_DIRECTIVE_TOKEN). */
+        struct {
+            /** The tag handle. */
+            yaml_char_t *handle;
+
+            /** The tag prefix. */
+            yaml_char_t *prefix;
+        } tag_directive;
+    } data;
+
+    /** The beginning of the token. */
+    yaml_mark_t start_mark;
+
+    /** The end of the token. */
+    yaml_mark_t end_mark;
+
+} yaml_token_t;
+
+/**
+ * Create a new token without assigning any data.
+ *
+ * This function can be used for constructing indicator tokens:
+ * @c YAML_DOCUMENT_START, @c YAML_DOCUMENT_END,
+ * @c YAML_BLOCK_SEQUENCE_START_TOKEN, @c YAML_BLOCK_MAPPING_START_TOKEN,
+ * @c YAML_BLOCK_END_TOKEN,
+ * @c YAML_FLOW_SEQUENCE_START_TOKEN, @c YAML_FLOW_SEQUENCE_END_TOKEN,
+ * @c YAML_FLOW_MAPPING_START_TOKEN, @c YAML_FLOW_MAPPING_END_TOKEN,
+ * @c YAML_BLOCK_ENTRY_TOKEN, @c YAML_FLOW_ENTRY_TOKEN,
+ * @c YAML_KEY_TOKEN, @c YAML_VALUE_TOKEN.
+ *
+ * @param[in]   type        The token type.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_token_new(yaml_token_type_t type,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_STREAM_START_TOKEN token with the specified encoding.
+ *
+ * @param[in]   encoding    The stream encoding.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_stream_start_token_new(yaml_encoding_t encoding,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_STREAM_END_TOKEN token.
+ *
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_stream_end_token_new(yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_VERSION_DIRECTIVE_TOKEN token with the specified
+ * version numbers.
+ *
+ * @param[in]   major       The major version number.
+ * @param[in]   minor       The minor version number.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_version_directive_token_new(int major, int minor,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_TAG_DIRECTIVE_TOKEN token with the specified tag
+ * handle and prefix.
+ *
+ * Note that the @a handle and the @a prefix pointers will be freed by
+ * the token descructor.
+ *
+ * @param[in]   handle      The tag handle.
+ * @param[in]   prefix      The tag prefix.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_tag_directive_token_new(yaml_char_t *handle, yaml_char_t *prefix,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_ALIAS_TOKEN token with the specified anchor.
+ *
+ * Note that the @a anchor pointer will be freed by the token descructor.
+ *
+ * @param[in]   anchor      The anchor.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_alias_token_new(yaml_char_t *anchor,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_ANCHOR_TOKEN token with the specified anchor.
+ *
+ * Note that the @a anchor pointer will be freed by the token descructor.
+ *
+ * @param[in]   anchor      The anchor.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_anchor_token_new(yaml_char_t *anchor,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_TAG_TOKEN token with the specified tag handle and
+ * suffix.
+ *
+ * Note that the @a handle and the @a suffix pointers will be freed by
+ * the token descructor.
+ *
+ * @param[in]   handle      The tag handle.
+ * @param[in]   suffix      The tag suffix.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_tag_token_new(yaml_char_t *handle, yaml_char_t *suffix,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Create a new @c YAML_SCALAR_TOKEN token with the specified scalar value,
+ * length, and style.
+ *
+ * Note that the scalar value may contain the @c NUL character, therefore
+ * the value length is also required.  The scalar value always ends with
+ * @c NUL.
+ *
+ * Note that the @a value pointer will be freed by the token descructor.
+ *
+ * @param[in]   value       The scalar value.
+ * @param[in]   length      The value length.
+ * @param[in]   style       The scalar style.
+ * @param[in]   start_mark  The beginning of the token.
+ * @param[in]   end_mark    The end of the token.
+ *
+ * @returns A new token object, or @c NULL on error.
+ */
+
+YAML_DECLARE(yaml_token_t *)
+yaml_scalar_token_new(yaml_char_t *value, size_t length,
+        yaml_scalar_style_t style,
+        yaml_mark_t start_mark, yaml_mark_t end_mark);
+
+/**
+ * Destroy a token object.
+ *
+ * @param[in]   token   A token object.
+ */
+
+YAML_DECLARE(void)
+yaml_token_delete(yaml_token_t *token);
+
+/** @} */
+
+/*
+
 typedef enum {
     YAML_STREAM_START_EVENT,
@@ -149,43 +438,4 @@
     YAML_MAPPING_END_EVENT
 } yaml_event_type_t;
-
-typedef struct {
-    size_t offset;
-    size_t index;
-    size_t line;
-    size_t column;
-} yaml_mark_t;
-
-typedef struct {
-    yaml_error_type_t type;
-    char *context;
-    yaml_mark_t context_mark;
-    char *problem;
-    yaml_mark_t problem_mark;
-} yaml_error_t;
-
-typedef struct {
-    yaml_token_type_t type;
-    union {
-        yaml_encoding_t encoding;
-        char *anchor;
-        char *tag;
-        struct {
-            char *value;
-            size_t length;
-            yaml_scalar_style_t style;
-        } scalar;
-        struct {
-            int major;
-            int minor;
-        } version;
-        struct {
-          char *handle;
-          char *prefix;
-        } tag_pair;
-    } data;
-    yaml_mark_t start_mark;
-    yaml_mark_t end_mark;
-} yaml_token_t;
 
 typedef struct {
@@ -273,6 +523,11 @@
 
 typedef struct {
+    /** The string start pointer. */
     unsigned char *start;
+
+    /** The string end pointer. */
     unsigned char *end;
+
+    /** The string current position. */
     unsigned char *current;
 } yaml_string_input_t;
@@ -376,5 +631,5 @@
  */
 
-yaml_parser_t *
+YAML_DECLARE(yaml_parser_t *)
 yaml_parser_new(void);
 
@@ -385,5 +640,5 @@
  */
 
-void
+YAML_DECLARE(void)
 yaml_parser_delete(yaml_parser_t *parser);
 
@@ -397,8 +652,8 @@
  * @param[in]   parser  A parser object.
  * @param[in]   input   A source data.
- * @param[in]   length  The length of the source data in bytes.
- */
-
-void
+ * @param[in]   size    The length of the source data in bytes.
+ */
+
+YAML_DECLARE(void)
 yaml_parser_set_input_string(yaml_parser_t *parser,
         unsigned char *input, size_t size);
@@ -415,5 +670,5 @@
  */
 
-void
+YAML_DECLARE(void)
 yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file);
 
@@ -426,5 +681,5 @@
  */
 
-void
+YAML_DECLARE(void)
 yaml_parser_set_input(yaml_parser_t *parser,
         yaml_read_handler_t *handler, void *data);
@@ -433,8 +688,9 @@
  * Set the source encoding.
  *
+ * @param[in]   parser      A parser object.
  * @param[in]   encoding    The source encoding.
  */
 
-void
+YAML_DECLARE(void)
 yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding);
 
@@ -460,5 +716,5 @@
  */
 
-void *
+YAML_DECLARE(void *)
 yaml_malloc(size_t size);
 
@@ -474,5 +730,5 @@
  */
 
-void *
+YAML_DECLARE(void *)
 yaml_realloc(void *ptr, size_t size);
 
@@ -484,5 +740,5 @@
  */
 
-void
+YAML_DECLARE(void)
 yaml_free(void *ptr);
 
@@ -508,5 +764,5 @@
  */
 
-int
+YAML_DECLARE(int)
 yaml_parser_update_buffer(yaml_parser_t *parser, size_t length);
 
