Towards working facets
[yaz-moved-to-github.git] / include / yaz / json.h
index 4cefba3..aab0159 100644 (file)
@@ -1,5 +1,5 @@
 /* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data.
+ * Copyright (C) 1995-2013 Index Data.
  * All rights reserved.
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -53,8 +53,8 @@ enum json_node_type {
 struct json_node {
     enum json_node_type type;
     union {
-        char *string; 
-        double number; 
+        char *string;
+        double number;
         struct json_node *link[2];
     } u;
 };
@@ -86,13 +86,22 @@ struct json_node *json_parser_parse(json_parser_t p, const char *json_str);
 
 /** \brief returns parser error
     \param p JSON parser handle
-    \returns parse error msg 
+    \returns parse error msg
 
     This function should be called if json_parser_parse returns NULL .
 */
 YAZ_EXPORT
 const char *json_parser_get_errmsg(json_parser_t p);
 
+/** \brief returns parser position
+    \param p JSON parser handle
+    \returns number of bytes read from parser
+
+    This function should be called if json_parser_parse returns NULL .
+*/
+YAZ_EXPORT
+size_t json_parser_get_position(json_parser_t p);
+
 /** \brief parses JSON string
     \param json_str JSON string
     \param errmsg pointer to error message string
@@ -104,6 +113,19 @@ const char *json_parser_get_errmsg(json_parser_t p);
 YAZ_EXPORT
 struct json_node *json_parse(const char *json_str, const char **errmsg);
 
+/** \brief parses JSON string
+    \param json_str JSON string
+    \param errmsg pointer to error message string
+    \param pos position of parser stop (probably error)
+    \returns JSON tree or NULL if parse error occurred.
+
+    The resulting tree should be removed with a call to json_remove_node.
+    The errmsg may be NULL in which case the error message is not returned.
+*/
+YAZ_EXPORT
+struct json_node *json_parse2(const char *json_str, const char **errmsg,
+                              size_t *pos);
+
 /** \brief destroys JSON tree node and its children
     \param n JSON node
 */
@@ -153,7 +175,7 @@ int json_append_array(struct json_node *dst, struct json_node *src);
 /** \brief configure subst rule
     \param p JSON parser
     \param idx (%id)
-    \param node node to be substituted for idx (%idx)
+    \param n node to be substituted for idx (%idx)
 */
 YAZ_EXPORT
 void json_parser_subst(json_parser_t p, int idx, struct json_node *n);
@@ -165,6 +187,20 @@ void json_parser_subst(json_parser_t p, int idx, struct json_node *n);
 YAZ_EXPORT
 void json_write_wrbuf(struct json_node *node, WRBUF result);
 
+/** \brief writes JSON tree with indentation (pretty print)
+    \param node JSON tree
+    \param result resulting JSON string buffer
+*/
+YAZ_EXPORT
+void json_write_wrbuf_pretty(struct json_node *node, WRBUF result);
+
+/** \brief writes JSON text to WRBUF with escaping
+    \param b result
+    \param str input string to be encoded
+*/
+YAZ_EXPORT
+void wrbuf_json_puts(WRBUF b, const char *str);
+
 YAZ_END_CDECL
 
 #endif