Remove the internal copy of JSON-GLib
authorEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 22 Sep 2010 11:56:33 +0000 (12:56 +0100)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Wed, 29 Sep 2010 14:57:28 +0000 (15:57 +0100)
The internal copy of JSON-GLib was meant to go away right after the 1.0
release, given that JSON-GLib was still young and relatively unknown.

Nowadays, many projects started depending on this little library, and
distributions ship it and keep it up to date.

Keeping a copy of JSON-GLib means keeping it up to date; unfortunately,
this would also imply updating the code not just for the API but for the
internal implementations.

Starting with the 1.2 release, Clutter preferably dependend on the
system copy; with the 1.4 release we stopped falling back automatically.
The 1.6 cycle finally removes the internal copy and requires a copy of
JSON-GLib installed on the target system in order to compile Clutter.

20 files changed:
README
clutter/Makefile.am
clutter/clutter-json.h.in [deleted file]
clutter/clutter-script-private.h
clutter/clutter-script.c
clutter/clutter-scriptable.h
clutter/json/json-array.c [deleted file]
clutter/json/json-generator.c [deleted file]
clutter/json/json-generator.h [deleted file]
clutter/json/json-glib.h [deleted file]
clutter/json/json-marshal.c [deleted file]
clutter/json/json-marshal.h [deleted file]
clutter/json/json-node.c [deleted file]
clutter/json/json-object.c [deleted file]
clutter/json/json-parser.c [deleted file]
clutter/json/json-parser.h [deleted file]
clutter/json/json-types-private.h [deleted file]
clutter/json/json-types.h [deleted file]
configure.ac
doc/reference/clutter/Makefile.am

diff --git a/README b/README
index 5497c6f..7b8ad08 100644 (file)
--- a/README
+++ b/README
@@ -10,6 +10,7 @@ REQUIREMENTS
 Clutter currently requires:
 
   • GLib >= 2.18.0
+  • JSON-GLib >= 0.10
   • Atk >= 1.17
   • Cairo >= 1.6
   • PangoCairo >= 1.20
@@ -18,7 +19,6 @@ Clutter currently requires:
 
 Clutter also has optional dependencies:
 
-  • JSON-GLib >= 0.10 (optional, see --with-json below)
   • GDK-Pixbuf >= 2.0 (optional, see --with-imagebackend below)
 
 On X11, Clutter depends on the following extensions
@@ -197,19 +197,6 @@ Clutter has additional command line options for the configure script:
  --with-gles=[1.1/2.0]
         Select the GLES version (for EGL backends) (default=1.1)
 
- --with-json=[internal/check/system]
-        Select the JSON-GLib copy to use (default=check)
-
-        internal:
-                Use the internal copy of JSON-GLib for ClutterScript
-
-        check:
-                Check for the existence of a system copy of JSON-GLib
-                and if it is available, make Clutter depend on it
-
-        system:
-                Only use the system copy of JSON-GLib and warn if not found
-
 VERSIONING
 -------------------------------------------------------------------------------
 
index 898742c..ad18362 100644 (file)
@@ -474,36 +474,6 @@ cally_include_HEADERS = $(cally_sources_h)
 pc_files += cally/cally-$(CLUTTER_API_VERSION).pc
 EXTRA_DIST += cally/cally.pc.in
 
-# json
-if LOCAL_JSON_GLIB
-json_gir = ClutterJson-@CLUTTER_API_VERSION@.gir
-json_gir_include = --include-uninstalled=$(top_builddir)/clutter/ClutterJson-@CLUTTER_API_VERSION@.gir
-
-json_sources_h = \
-       $(srcdir)/json/json-generator.h \
-       $(srcdir)/json/json-glib.h      \
-       $(srcdir)/json/json-parser.h    \
-       $(srcdir)/json/json-types.h     \
-       $(NULL)
-
-json_sources_c = \
-       $(srcdir)/json/json-array.c     \
-       $(srcdir)/json/json-node.c      \
-       $(srcdir)/json/json-object.c    \
-       $(srcdir)/json/json-parser.c    \
-       $(NULL)
-
-json_sources_priv = \
-       $(srcdir)/json/json-marshal.c           \
-       $(srcdir)/json/json-marshal.h           \
-       $(srcdir)/json/json-types-private.h     \
-       $(NULL)
-
-INCLUDES += $(top_srcdir)/clutter/json
-else
-json_gir_include=--include=Json-1.0
-endif # LOCAL_JSON_GLIB
-
 # general build rules:
 # you should not need to modify anything below this point
 
@@ -530,7 +500,6 @@ DISTCLEANFILES += $(pc_files)
 
 clutter_include_HEADERS = $(source_h) $(top_srcdir)/clutter/clutter.h
 nodist_clutter_include_HEADERS = \
-       $(top_builddir)/clutter/clutter-json.h \
        $(top_builddir)/clutter/clutter-version.h \
        $(built_source_h)
 
@@ -558,9 +527,6 @@ libclutter_@CLUTTER_SONAME_INFIX@_@CLUTTER_API_VERSION@_la_SOURCES = \
        $(cally_sources_c) \
        $(cally_sources_h) \
        $(cally_sources_private) \
-       $(json_sources_c) \
-       $(json_sources_h) \
-       $(json_sources_priv) \
        $(NULL)
 
 nodist_libclutter_@CLUTTER_SONAME_INFIX@_@CLUTTER_API_VERSION@_la_SOURCES = \
@@ -573,7 +539,7 @@ libclutter_@CLUTTER_SONAME_INFIX@_@CLUTTER_API_VERSION@_la_LDFLAGS = \
        $(CLUTTER_LT_LDFLAGS) \
        $(GCOV_LDFLAGS) \
        -export-dynamic \
-       -export-symbols-regex "^(clutter|cogl|cally|json).*" \
+       -export-symbols-regex "^(clutter|cogl|cally).*" \
        -rpath $(libdir) \
        $(win32_resources_ldflag) \
        $(NULL)
@@ -584,24 +550,23 @@ libclutter_@CLUTTER_SONAME_INFIX@_@CLUTTER_API_VERSION@_la_LDFLAGS = \
 if HAVE_INTROSPECTION
 INTROSPECTION_GIRS += Clutter-@CLUTTER_API_VERSION@.gir
 
-Clutter-@CLUTTER_API_VERSION@.gir: libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la $(clutter_json_gir) Makefile
+Clutter-@CLUTTER_API_VERSION@.gir: libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la Makefile
 
 Clutter_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = Clutter
 Clutter_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
 Clutter_@CLUTTER_API_VERSION_AM@_gir_LIBS = libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la
 Clutter_@CLUTTER_API_VERSION_AM@_gir_FILES = $(clutter_HEADERS) $(nodist_clutter_HEADERS) $(source_c) $(built_source_c)
 Clutter_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS) -UCLUTTER_DISABLE_DEPRECATED
-Clutter_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 Atk-1.0 Pango-1.0 PangoCairo-1.0
+Clutter_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GL-1.0 GObject-2.0 Atk-1.0 Pango-1.0 PangoCairo-1.0 Json-1.0
 Clutter_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
        --warn-all \
        --c-include='clutter/clutter.h' \
        --pkg-export clutter-@CLUTTER_API_VERSION@ \
-       $(json_gir_include) \
        --include-uninstalled=$(top_builddir)/clutter/cogl/cogl/Cogl-@CLUTTER_API_VERSION@.gir
 
-# ClutterJson.gir and Cogl.gir are used included into Clutter.gir, so they
-# need to be built before the typelib is generated
-Clutter-@CLUTTER_API_VERSION@.typelib: $(json_gir) Cogl-@CLUTTER_API_VERSION@.gir
+# Cogl.gir is used included into Clutter.gir, so it needs to be built
+# before the typelib is generated
+Clutter-@CLUTTER_API_VERSION@.typelib: Cogl-@CLUTTER_API_VERSION@.gir
 
 # We build Cogl.gir in the cogl/ subdir, but it needs to reference the shared
 # library that it's built into, so we delay compiling the gir into typelib
@@ -626,29 +591,11 @@ Cally_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
        --warn-all \
        --c-include='cally/cally.h' \
        --pkg-export=cally-@CLUTTER_API_VERSION@ \
-       $(json_gir_include) \
        --include-uninstalled $(top_builddir)/clutter/Cogl-@CLUTTER_API_VERSION@.gir \
        --include-uninstalled $(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
 
 INTROSPECTION_GIRS += Cally-@CLUTTER_API_VERSION@.gir
 
-if LOCAL_JSON_GLIB
-ClutterJson-@CLUTTER_API_VERSION@.gir: libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la
-
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_NAMESPACE = ClutterJson
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_VERSION = @CLUTTER_API_VERSION@
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_LIBS = libclutter-@CLUTTER_SONAME_INFIX@-@CLUTTER_API_VERSION@.la
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_FILES = $(json_sources_c) $(json_sources_h)
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_CFLAGS = $(INCLUDES) $(CLUTTER_CFLAGS) $(AM_CPPFLAGS)
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = GObject-2.0
-ClutterJson_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
-       --warn-all \
-       --identifier-prefix=Json \
-       --symbol-prefix=json
-
-INTROSPECTION_GIRS += ClutterJson-@CLUTTER_API_VERSION@.gir
-endif # LOCAL_JSON_GLIB
-
 if SUPPORT_X11
 ClutterX11-@CLUTTER_API_VERSION@.gir: Makefile Clutter-@CLUTTER_API_VERSION@.gir Cogl-@CLUTTER_API_VERSION@.gir
 
@@ -656,7 +603,6 @@ ClutterX11_@CLUTTER_API_VERSION_AM@_gir_SCANNERFLAGS = \
        --warn-all \
        --identifier-prefix=ClutterX11 \
        --symbol-prefix=clutter_x11 \
-       $(json_gir_include) \
        --include-uninstalled=$(top_builddir)/clutter/Cogl-@CLUTTER_API_VERSION@.gir \
        --include-uninstalled=$(top_builddir)/clutter/Clutter-@CLUTTER_API_VERSION@.gir
 ClutterX11_@CLUTTER_API_VERSION_AM@_gir_INCLUDES = xlib-2.0
diff --git a/clutter/clutter-json.h.in b/clutter/clutter-json.h.in
deleted file mode 100644 (file)
index 2f58796..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef __CLUTTER_JSON_H__
-#define __CLUTTER_JSON_H__
-
-/* Include json-glib types opaquely, so that we can swap out
- * the internal copy of JSON-GLib with the installed one
- * without changing the other headers.
- */
-
-#include "@JSON_PREFIX@/json-glib.h"
-
-#endif /* __CLUTTER_JSON_H__ */
index f69410c..b86a000 100644 (file)
@@ -27,7 +27,8 @@
 #define __CLUTTER_SCRIPT_PRIVATE_H__
 
 #include <glib-object.h>
-#include "clutter-json.h"
+#include <json-glib/json-glib.h>
+
 #include "clutter-color.h"
 #include "clutter-types.h"
 #include "clutter-script.h"
index 0244390..a88691c 100644 (file)
 #include "clutter-private.h"
 #include "clutter-debug.h"
 
-#include "json/json-parser.h"
-
 enum
 {
   PROP_0,
index b7fb198..6ad24ab 100644 (file)
@@ -30,8 +30,8 @@
 #define __CLUTTER_SCRIPTABLE_H__
 
 #include <glib-object.h>
+#include <json-glib/json-glib.h>
 #include <clutter/clutter-script.h>
-#include <clutter/clutter-json.h>
 
 G_BEGIN_DECLS
 
diff --git a/clutter/json/json-array.c b/clutter/json/json-array.c
deleted file mode 100644 (file)
index f1e677e..0000000
+++ /dev/null
@@ -1,725 +0,0 @@
-/* json-array.c - JSON array implementation
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "json-types-private.h"
-
-/*
- * SECTION:json-array
- * @short_description: a JSON array representation
- *
- * #JsonArray is the representation of the array type inside JSON. It contains
- * #JsonNode<!-- -->s, which may contain fundamental types, other arrays or
- * objects.
- *
- * Since arrays can be expensive, they are reference counted. You can control
- * the lifetime of a #JsonArray using json_array_ref() and json_array_unref().
- *
- * To append an element, use json_array_add_element().
- * To extract an element at a given index, use json_array_get_element().
- * To retrieve the entire array in list form, use json_array_get_elements().
- * To retrieve the length of the array, use json_array_get_length().
- */
-
-GType
-json_array_get_type (void)
-{
-  static GType array_type = 0;
-
-  if (G_UNLIKELY (!array_type))
-    array_type = g_boxed_type_register_static (g_intern_static_string ("JsonArray"),
-                                               (GBoxedCopyFunc) json_array_ref,
-                                               (GBoxedFreeFunc) json_array_unref);
-
-  return array_type;
-}
-
-/*
- * json_array_new:
- *
- * Creates a new #JsonArray.
- *
- * Return value: the newly created #JsonArray
- */
-JsonArray *
-json_array_new (void)
-{
-  JsonArray *array;
-
-  array = g_slice_new (JsonArray);
-
-  array->ref_count = 1;
-  array->elements = g_ptr_array_new ();
-
-  return array;
-}
-
-/*
- * json_array_sized_new:
- * @n_elements: number of slots to pre-allocate
- *
- * Creates a new #JsonArray with @n_elements slots already allocated.
- *
- * Return value: the newly created #JsonArray
- */
-JsonArray *
-json_array_sized_new (guint n_elements)
-{
-  JsonArray *array;
-
-  array = g_slice_new (JsonArray);
-  
-  array->ref_count = 1;
-  array->elements = g_ptr_array_sized_new (n_elements);
-
-  return array;
-}
-
-/*
- * json_array_ref:
- * @array: a #JsonArray
- *
- * Increase by one the reference count of a #JsonArray.
- *
- * Return value: the passed #JsonArray, with the reference count
- *   increased by one.
- */
-JsonArray *
-json_array_ref (JsonArray *array)
-{
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (array->ref_count > 0, NULL);
-
-  g_atomic_int_exchange_and_add (&array->ref_count, 1);
-
-  return array;
-}
-
-/*
- * json_array_unref:
- * @array: a #JsonArray
- *
- * Decreases by one the reference count of a #JsonArray. If the
- * reference count reaches zero, the array is destroyed and all
- * its allocated resources are freed.
- */
-void
-json_array_unref (JsonArray *array)
-{
-  gint old_ref;
-
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (array->ref_count > 0);
-
-  old_ref = g_atomic_int_get (&array->ref_count);
-  if (old_ref > 1)
-    g_atomic_int_compare_and_exchange (&array->ref_count, old_ref, old_ref - 1);
-  else
-    {
-      guint i;
-
-      for (i = 0; i < array->elements->len; i++)
-        json_node_free (g_ptr_array_index (array->elements, i));
-
-      g_ptr_array_free (array->elements, TRUE);
-      array->elements = NULL;
-
-      g_slice_free (JsonArray, array);
-    }
-}
-
-/*
- * json_array_get_elements:
- * @array: a #JsonArray
- *
- * Gets the elements of a #JsonArray as a list of #JsonNode<!-- -->s.
- *
- * Return value: a #GList containing the elements of the array. The
- *   contents of the list are owned by the array and should never be
- *   modified or freed. Use g_list_free() on the returned list when
- *   done using it
- */
-GList *
-json_array_get_elements (JsonArray *array)
-{
-  GList *retval;
-  guint i;
-
-  g_return_val_if_fail (array != NULL, NULL);
-
-  retval = NULL;
-  for (i = 0; i < array->elements->len; i++)
-    retval = g_list_prepend (retval,
-                             g_ptr_array_index (array->elements, i));
-
-  return g_list_reverse (retval);
-}
-
-/*
- * json_array_dup_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Retrieves a copy of the #JsonNode containing the value of the
- * element at @index_ inside a #JsonArray
- *
- * Return value: a copy of the #JsonNode at the requested index.
- *   Use json_node_free() when done.
- *
- * Since: 0.6
- */
-JsonNode *
-json_array_dup_element (JsonArray *array,
-                        guint      index_)
-{
-  JsonNode *retval;
-
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (index_ < array->elements->len, NULL);
-
-  retval = json_array_get_element (array, index_);
-  if (!retval)
-    return NULL;
-
-  return json_node_copy (retval);
-}
-
-/*
- * json_array_get_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- * 
- * Retrieves the #JsonNode containing the value of the element at @index_
- * inside a #JsonArray.
- *
- * Return value: a pointer to the #JsonNode at the requested index
- */
-JsonNode *
-json_array_get_element (JsonArray *array,
-                        guint      index_)
-{
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (index_ < array->elements->len, NULL);
-
-  return g_ptr_array_index (array->elements, index_);
-}
-
-/*
- * json_array_get_int_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the integer value of the element at @index_
- * inside @array
- *
- * See also: json_array_get_element(), json_node_get_int()
- *
- * Return value: the integer value
- *
- * Since: 0.8
- */
-gint64
-json_array_get_int_element (JsonArray *array,
-                            guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, 0);
-  g_return_val_if_fail (index_ < array->elements->len, 0);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, 0);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0);
-
-  return json_node_get_int (node);
-}
-
-/*
- * json_array_get_double_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the floating point value of the element at
- * @index_ inside @array
- *
- * See also: json_array_get_element(), json_node_get_double()
- *
- * Return value: the floating point value
- *
- * Since: 0.8
- */
-gdouble
-json_array_get_double_element (JsonArray *array,
-                               guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, 0.0);
-  g_return_val_if_fail (index_ < array->elements->len, 0.0);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, 0.0);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0.0);
-
-  return json_node_get_double (node);
-}
-
-/*
- * json_array_get_boolean_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the boolean value of the element at @index_
- * inside @array
- *
- * See also: json_array_get_element(), json_node_get_boolean()
- *
- * Return value: the integer value
- *
- * Since: 0.8
- */
-gboolean
-json_array_get_boolean_element (JsonArray *array,
-                                guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, FALSE);
-  g_return_val_if_fail (index_ < array->elements->len, FALSE);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, FALSE);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, FALSE);
-
-  return json_node_get_boolean (node);
-}
-
-/*
- * json_array_get_string_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the string value of the element at @index_
- * inside @array
- *
- * See also: json_array_get_element(), json_node_get_string()
- *
- * Return value: the string value; the returned string is owned by
- *   the #JsonArray and should not be modified or freed
- *
- * Since: 0.8
- */
-G_CONST_RETURN gchar *
-json_array_get_string_element (JsonArray *array,
-                               guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (index_ < array->elements->len, NULL);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_VALUE (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_string (node);
-}
-
-/*
- * json_array_get_null_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves whether the element at @index_ is set to null
- *
- * See also: json_array_get_element(), JSON_NODE_TYPE(), %JSON_NODE_NULL
- *
- * Return value: %TRUE if the element is null
- *
- * Since: 0.8
- */
-gboolean
-json_array_get_null_element (JsonArray *array,
-                             guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, FALSE);
-  g_return_val_if_fail (index_ < array->elements->len, FALSE);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, FALSE);
-
-  return JSON_NODE_TYPE (node) == JSON_NODE_NULL;
-}
-
-/*
- * json_array_get_array_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the array from the element at @index_
- * inside @array
- *
- * See also: json_array_get_element(), json_node_get_array()
- *
- * Return value: the array
- *
- * Since: 0.8
- */
-JsonArray *
-json_array_get_array_element (JsonArray *array,
-                              guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (index_ < array->elements->len, NULL);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_ARRAY (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_array (node);
-}
-
-/*
- * json_array_get_object_element:
- * @array: a #JsonArray
- * @index_: the index of the element to retrieve
- *
- * Conveniently retrieves the object from the element at @index_
- * inside @array
- *
- * See also: json_array_get_element(), json_node_get_object()
- *
- * Return value: the object
- *
- * Since: 0.8
- */
-JsonObject *
-json_array_get_object_element (JsonArray *array,
-                               guint      index_)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (array != NULL, NULL);
-  g_return_val_if_fail (index_ < array->elements->len, NULL);
-
-  node = g_ptr_array_index (array->elements, index_);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_OBJECT (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_object (node);
-}
-
-/*
- * json_array_get_length:
- * @array: a #JsonArray
- *
- * Retrieves the length of a #JsonArray
- *
- * Return value: the length of the array
- */
-guint
-json_array_get_length (JsonArray *array)
-{
-  g_return_val_if_fail (array != NULL, 0);
-
-  return array->elements->len;
-}
-
-/*
- * json_array_add_element:
- * @array: a #JsonArray
- * @node: a #JsonNode
- *
- * Appends @node inside @array. The array will take ownership of the
- * #JsonNode.
- */
-void
-json_array_add_element (JsonArray *array,
-                        JsonNode  *node)
-{
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (node != NULL);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_int_element:
- * @array: a #JsonArray
- * @value: an integer value
- *
- * Conveniently adds an integer @value into @array
- *
- * See also: json_array_add_element(), json_node_set_int()
- *
- * Since: 0.8
- */
-void
-json_array_add_int_element (JsonArray *array,
-                            gint64     value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_int (node, value);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_double_element:
- * @array: a #JsonArray
- * @value: a floating point value
- *
- * Conveniently adds a floating point @value into @array
- *
- * See also: json_array_add_element(), json_node_set_double()
- *
- * Since: 0.8
- */
-void
-json_array_add_double_element (JsonArray *array,
-                               gdouble    value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_double (node, value);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_boolean_element:
- * @array: a #JsonArray
- * @value: a boolean value
- *
- * Conveniently adds a boolean @value into @array
- *
- * See also: json_array_add_element(), json_node_set_boolean()
- *
- * Since: 0.8
- */
-void
-json_array_add_boolean_element (JsonArray *array,
-                                gboolean   value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_boolean (node, value);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_string_element:
- * @array: a #JsonArray
- * @value: a string value
- *
- * Conveniently adds a string @value into @array
- *
- * See also: json_array_add_element(), json_node_set_string()
- *
- * Since: 0.8
- */
-void
-json_array_add_string_element (JsonArray   *array,
-                               const gchar *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (value != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_VALUE);
-      json_node_set_string (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_null_element:
- * @array: a #JsonArray
- *
- * Conveniently adds a null element into @array
- *
- * See also: json_array_add_element(), %JSON_NODE_NULL
- *
- * Since: 0.8
- */
-void
-json_array_add_null_element (JsonArray *array)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-
-  node = json_node_new (JSON_NODE_NULL);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_array_element:
- * @array: a #JsonArray
- * @value: a #JsonArray
- *
- * Conveniently adds an array into @array. The @array takes ownership
- * of the newly added #JsonArray
- *
- * See also: json_array_add_element(), json_node_take_array()
- *
- * Since: 0.8
- */
-void
-json_array_add_array_element (JsonArray *array,
-                              JsonArray *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (value != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_ARRAY);
-      json_node_take_array (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_add_object_element:
- * @array: a #JsonArray
- * @value: a #JsonObject
- *
- * Conveniently adds an object into @array. The @array takes ownership
- * of the newly added #JsonObject
- *
- * See also: json_array_add_element(), json_node_take_object()
- *
- * Since: 0.8
- */
-void
-json_array_add_object_element (JsonArray  *array,
-                               JsonObject *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (value != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_OBJECT);
-      json_node_take_object (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  g_ptr_array_add (array->elements, node);
-}
-
-/*
- * json_array_remove_element:
- * @array: a #JsonArray
- * @index_: the position of the element to be removed
- *
- * Removes the #JsonNode inside @array at @index_ freeing its allocated
- * resources.
- */
-void
-json_array_remove_element (JsonArray *array,
-                           guint      index_)
-{
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (index_ < array->elements->len);
-
-  json_node_free (g_ptr_array_remove_index (array->elements, index_));
-}
-
-/*
- * json_array_foreach_element:
- * @array: a #JsonArray
- * @func: the function to be called on each element
- * @data: data to be passed to the function
- *
- * Iterates over all elements of @array and calls @func on
- * each one of them.
- *
- * It is safe to change the value of a #JsonNode of the @array
- * from within the iterator @func, but it is not safe to add or
- * remove elements from the @array.
- *
- * Since: 0.8
- */
-void
-json_array_foreach_element (JsonArray        *array,
-                            JsonArrayForeach  func,
-                            gpointer          data)
-{
-  gint i;
-
-  g_return_if_fail (array != NULL);
-  g_return_if_fail (func != NULL);
-
-  for (i = 0; i < array->elements->len; i++)
-    {
-      JsonNode *element_node;
-
-      element_node = g_ptr_array_index (array->elements, i);
-
-      (* func) (array, i, element_node, data);
-    }
-}
diff --git a/clutter/json/json-generator.c b/clutter/json/json-generator.c
deleted file mode 100644 (file)
index 0766df3..0000000
+++ /dev/null
@@ -1,646 +0,0 @@
-/* json-generator.c - JSON streams generator
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-/*
- * SECTION:json-generator
- * @short_description: Generates JSON data streams
- *
- * #JsonGenerator provides an object for generating a JSON data stream and
- * put it into a buffer or a file.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "json-types-private.h"
-
-#include "json-marshal.h"
-#include "json-generator.h"
-
-#define JSON_GENERATOR_GET_PRIVATE(obj) \
-        (G_TYPE_INSTANCE_GET_PRIVATE ((obj), JSON_TYPE_GENERATOR, JsonGeneratorPrivate))
-
-struct _JsonGeneratorPrivate
-{
-  JsonNode *root;
-
-  guint indent;
-  gunichar indent_char;
-
-  guint pretty : 1;
-};
-
-enum
-{
-  PROP_0,
-
-  PROP_PRETTY,
-  PROP_INDENT,
-  PROP_ROOT,
-  PROP_INDENT_CHAR
-};
-
-static gchar *dump_value  (JsonGenerator *generator,
-                           gint           level,
-                           const gchar   *name,
-                           JsonNode      *node);
-static gchar *dump_array  (JsonGenerator *generator,
-                           gint           level,
-                           const gchar   *name,
-                           JsonArray     *array,
-                           gsize         *length);
-static gchar *dump_object (JsonGenerator *generator,
-                           gint           level,
-                           const gchar   *name,
-                           JsonObject    *object,
-                           gsize         *length);
-
-/* non-ASCII characters can't be escaped, otherwise UTF-8
- * chars will break, so we just pregenerate this table of
- * high characters and then we feed it to g_strescape()
- */
-static const char json_exceptions[] = {
-  0x7f,  0x80,  0x81,  0x82,  0x83,  0x84,  0x85,  0x86,
-  0x87,  0x88,  0x89,  0x8a,  0x8b,  0x8c,  0x8d,  0x8e,
-  0x8f,  0x90,  0x91,  0x92,  0x93,  0x94,  0x95,  0x96,
-  0x97,  0x98,  0x99,  0x9a,  0x9b,  0x9c,  0x9d,  0x9e,
-  0x9f,  0xa0,  0xa1,  0xa2,  0xa3,  0xa4,  0xa5,  0xa6,
-  0xa7,  0xa8,  0xa9,  0xaa,  0xab,  0xac,  0xad,  0xae,
-  0xaf,  0xb0,  0xb1,  0xb2,  0xb3,  0xb4,  0xb5,  0xb6,
-  0xb7,  0xb8,  0xb9,  0xba,  0xbb,  0xbc,  0xbd,  0xbe,
-  0xbf,  0xc0,  0xc1,  0xc2,  0xc3,  0xc4,  0xc5,  0xc6,
-  0xc7,  0xc8,  0xc9,  0xca,  0xcb,  0xcc,  0xcd,  0xce,
-  0xcf,  0xd0,  0xd1,  0xd2,  0xd3,  0xd4,  0xd5,  0xd6,
-  0xd7,  0xd8,  0xd9,  0xda,  0xdb,  0xdc,  0xdd,  0xde,
-  0xdf,  0xe0,  0xe1,  0xe2,  0xe3,  0xe4,  0xe5,  0xe6,
-  0xe7,  0xe8,  0xe9,  0xea,  0xeb,  0xec,  0xed,  0xee,
-  0xef,  0xf0,  0xf1,  0xf2,  0xf3,  0xf4,  0xf5,  0xf6,
-  0xf7,  0xf8,  0xf9,  0xfa,  0xfb,  0xfc,  0xfd,  0xfe,
-  0xff,
-  '\0'   /* g_strescape() expects a NUL-terminated string */
-};
-
-G_DEFINE_TYPE (JsonGenerator, json_generator, G_TYPE_OBJECT);
-
-static gchar *
-json_strescape (const gchar *str)
-{
-  return g_strescape (str, json_exceptions);
-}
-
-static void
-json_generator_finalize (GObject *gobject)
-{
-  JsonGeneratorPrivate *priv = JSON_GENERATOR_GET_PRIVATE (gobject);
-
-  if (priv->root)
-    json_node_free (priv->root);
-
-  G_OBJECT_CLASS (json_generator_parent_class)->finalize (gobject);
-}
-
-static void
-json_generator_set_property (GObject      *gobject,
-                             guint         prop_id,
-                             const GValue *value,
-                             GParamSpec   *pspec)
-{
-  JsonGeneratorPrivate *priv = JSON_GENERATOR_GET_PRIVATE (gobject);
-
-  switch (prop_id)
-    {
-    case PROP_PRETTY:
-      priv->pretty = g_value_get_boolean (value);
-      break;
-    case PROP_INDENT:
-      priv->indent = g_value_get_uint (value);
-      break;
-    case PROP_INDENT_CHAR:
-      priv->indent_char = g_value_get_uint (value);
-      break;
-    case PROP_ROOT:
-      json_generator_set_root (JSON_GENERATOR (gobject),
-                               g_value_get_boxed (value));
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-json_generator_get_property (GObject    *gobject,
-                             guint       prop_id,
-                             GValue     *value,
-                             GParamSpec *pspec)
-{
-  JsonGeneratorPrivate *priv = JSON_GENERATOR_GET_PRIVATE (gobject);
-
-  switch (prop_id)
-    {
-    case PROP_PRETTY:
-      g_value_set_boolean (value, priv->pretty);
-      break;
-    case PROP_INDENT:
-      g_value_set_uint (value, priv->indent);
-      break;
-    case PROP_INDENT_CHAR:
-      g_value_set_uint (value, priv->indent_char);
-      break;
-    case PROP_ROOT:
-      g_value_set_boxed (value, priv->root);
-      break;
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-json_generator_class_init (JsonGeneratorClass *klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  g_type_class_add_private (klass, sizeof (JsonGeneratorPrivate));
-
-  gobject_class->set_property = json_generator_set_property;
-  gobject_class->get_property = json_generator_get_property;
-  gobject_class->finalize = json_generator_finalize;
-
-  /*
-   * JsonGenerator:pretty:
-   *
-   * Whether the output should be "pretty-printed", with indentation and
-   * newlines. The indentation level can be controlled by using the
-   * JsonGenerator:indent property
-   */
-  g_object_class_install_property (gobject_class,
-                                   PROP_PRETTY,
-                                   g_param_spec_boolean ("pretty",
-                                                         "Pretty",
-                                                         "Pretty-print the output",
-                                                         FALSE,
-                                                         G_PARAM_READWRITE));
-  /*
-   * JsonGenerator:indent:
-   *
-   * Number of spaces to be used to indent when pretty printing.
-   */
-  g_object_class_install_property (gobject_class,
-                                   PROP_INDENT,
-                                   g_param_spec_uint ("indent",
-                                                      "Indent",
-                                                      "Number of indentation spaces",
-                                                      0, G_MAXUINT,
-                                                      2,
-                                                      G_PARAM_READWRITE));
-  /*
-   * JsonGenerator:root:
-   *
-   * The root #JsonNode to be used when constructing a JSON data
-   * stream.
-   *
-   * Since: 0.4
-   */
-  g_object_class_install_property (gobject_class,
-                                   PROP_ROOT,
-                                   g_param_spec_boxed ("root",
-                                                       "Root",
-                                                       "Root of the JSON data tree",
-                                                       JSON_TYPE_NODE,
-                                                       G_PARAM_READWRITE));
-  /*
-   * JsonGenerator:indent-char:
-   *
-   * The character that should be used when indenting in pretty print.
-   *
-   * Since: 0.6
-   */
-  g_object_class_install_property (gobject_class,
-                                   PROP_INDENT_CHAR,
-                                   g_param_spec_unichar ("indent-char",
-                                                         "Indent Char",
-                                                         "Character that should be used when indenting",
-                                                         ' ',
-                                                         G_PARAM_READWRITE));
-}
-
-static void
-json_generator_init (JsonGenerator *generator)
-{
-  JsonGeneratorPrivate *priv;
-
-  generator->priv = priv = JSON_GENERATOR_GET_PRIVATE (generator);
-
-  priv->pretty = FALSE;
-  priv->indent = 2;
-  priv->indent_char = ' ';
-}
-
-static gchar *
-dump_value (JsonGenerator *generator,
-            gint           level,
-            const gchar   *name,
-            JsonNode      *node)
-{
-  JsonGeneratorPrivate *priv = generator->priv;
-  gboolean pretty = priv->pretty;
-  guint indent = priv->indent;
-  GValue value = { 0, };
-  GString *buffer;
-
-  buffer = g_string_new ("");
-
-  if (pretty)
-    {
-      guint i;
-
-      for (i = 0; i < (level * indent); i++)
-        g_string_append_c (buffer, priv->indent_char);
-    }
-
-  if (name && name[0] != '\0')
-    g_string_append_printf (buffer, "\"%s\" : ", name);
-
-  json_node_get_value (node, &value);
-
-  switch (G_VALUE_TYPE (&value))
-    {
-    case G_TYPE_INT64:
-      g_string_append_printf (buffer, "%" G_GINT64_FORMAT, g_value_get_int64 (&value));
-      break;
-
-    case G_TYPE_STRING:
-      {
-        gchar *tmp;
-
-        tmp = json_strescape (g_value_get_string (&value));
-        g_string_append_printf (buffer, "\"%s\"", tmp);
-
-        g_free (tmp);
-      }
-      break;
-
-    case G_TYPE_DOUBLE:
-      {
-        gchar buf[65];
-
-        g_ascii_formatd (buf, 65, "%g", g_value_get_double (&value));
-        g_string_append (buffer, buf);
-      }
-      break;
-
-    case G_TYPE_BOOLEAN:
-      g_string_append_printf (buffer, "%s",
-                              g_value_get_boolean (&value) ? "true" : "false");
-      break;
-
-    default:
-      break;
-    }
-
-  g_value_unset (&value);
-
-  return g_string_free (buffer, FALSE);
-}
-
-static gchar *
-dump_array (JsonGenerator *generator,
-            gint           level,
-            const gchar   *name,
-            JsonArray     *array,
-            gsize         *length)
-{
-  JsonGeneratorPrivate *priv = generator->priv;
-  guint array_len = json_array_get_length (array);
-  guint i;
-  GString *buffer;
-  gboolean pretty = priv->pretty;
-  guint indent = priv->indent;
-
-  buffer = g_string_new ("");
-
-  if (pretty)
-    {
-      for (i = 0; i < (level * indent); i++)
-        g_string_append_c (buffer, priv->indent_char);
-    }
-
-  if (name && name[0] != '\0')
-    g_string_append_printf (buffer, "\"%s\" : ", name);
-
-  g_string_append_c (buffer, '[');
-
-  if (pretty)
-    g_string_append_c (buffer, '\n');
-  else
-    g_string_append_c (buffer, ' ');
-
-  for (i = 0; i < array_len; i++)
-    {
-      JsonNode *cur = json_array_get_element (array, i);
-      guint sub_level = level + 1;
-      guint j;
-      gchar *value; 
-
-      switch (JSON_NODE_TYPE (cur))
-        {
-        case JSON_NODE_NULL:
-          if (pretty)
-            {
-              for (j = 0; j < (sub_level * indent); j++)
-                g_string_append_c (buffer, priv->indent_char);
-            }
-          g_string_append (buffer, "null");
-          break;
-
-        case JSON_NODE_VALUE:
-          value = dump_value (generator, sub_level, NULL, cur);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-
-        case JSON_NODE_ARRAY:
-          value = dump_array (generator, sub_level, NULL, json_node_get_array (cur), NULL);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-
-        case JSON_NODE_OBJECT:
-          value = dump_object (generator, sub_level, NULL, json_node_get_object (cur), NULL);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-        }
-
-      if ((i + 1) != array_len)
-        g_string_append_c (buffer, ',');
-
-      if (pretty)
-        g_string_append_c (buffer, '\n');
-      else
-        g_string_append_c (buffer, ' ');
-    }
-
-  if (pretty)
-    {
-      for (i = 0; i < (level * indent); i++)
-        g_string_append_c (buffer, priv->indent_char);
-    }
-
-  g_string_append_c (buffer, ']');
-
-  if (length)
-    *length = buffer->len;
-
-  return g_string_free (buffer, FALSE);
-}
-
-static gchar *
-dump_object (JsonGenerator *generator,
-             gint           level,
-             const gchar   *name,
-             JsonObject    *object,
-             gsize         *length)
-{
-  JsonGeneratorPrivate *priv = generator->priv;
-  GList *members, *l;
-  GString *buffer;
-  gboolean pretty = priv->pretty;
-  guint indent = priv->indent;
-  guint i;
-
-  buffer = g_string_new ("");
-
-  if (pretty)
-    {
-      for (i = 0; i < (level * indent); i++)
-        g_string_append_c (buffer, priv->indent_char);
-    }
-
-  if (name && name[0] != '\0')
-    g_string_append_printf (buffer, "\"%s\" : ", name);
-
-  g_string_append_c (buffer, '{');
-
-  if (pretty)
-    g_string_append_c (buffer, '\n');
-  else
-    g_string_append_c (buffer, ' ');
-
-  members = json_object_get_members (object);
-
-  for (l = members; l != NULL; l = l->next)
-    {
-      const gchar *member_name = l->data;
-      JsonNode *cur = json_object_get_member (object, member_name);
-      guint sub_level = level + 1;
-      guint j;
-      gchar *value;
-
-      switch (JSON_NODE_TYPE (cur))
-        {
-        case JSON_NODE_NULL:
-          if (pretty)
-            {
-              for (j = 0; j < (sub_level * indent); j++)
-                g_string_append_c (buffer, priv->indent_char);
-            }
-          g_string_append_printf (buffer, "\"%s\" : null", member_name);
-          break;
-
-        case JSON_NODE_VALUE:
-          value = dump_value (generator, sub_level, member_name, cur);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-
-        case JSON_NODE_ARRAY:
-          value = dump_array (generator, sub_level, member_name,
-                              json_node_get_array (cur), NULL);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-
-        case JSON_NODE_OBJECT:
-          value = dump_object (generator, sub_level, member_name,
-                               json_node_get_object (cur), NULL);
-          g_string_append (buffer, value);
-          g_free (value);
-          break;
-        }
-
-      if (l->next != NULL)
-        g_string_append_c (buffer, ',');
-
-      if (pretty)
-        g_string_append_c (buffer, '\n');
-      else
-        g_string_append_c (buffer, ' ');
-    }
-
-  g_list_free (members);
-
-  if (pretty)
-    {
-      for (i = 0; i < (level * indent); i++)
-        g_string_append_c (buffer, priv->indent_char);
-    }
-
-  g_string_append_c (buffer, '}');
-
-  if (length)
-    *length = buffer->len;
-
-  return g_string_free (buffer, FALSE);
-}
-
-/*
- * json_generator_new:
- * 
- * Creates a new #JsonGenerator. You can use this object to generate a
- * JSON data stream starting from a data object model composed by
- * #JsonNode<!-- -->s.
- *
- * Return value: the newly created #JsonGenerator instance
- */
-JsonGenerator *
-json_generator_new (void)
-{
-  return g_object_new (JSON_TYPE_GENERATOR, NULL);
-}
-
-/*
- * json_generator_to_data:
- * @generator: a #JsonGenerator
- * @length: (out): return location for the length of the returned
- *   buffer, or %NULL
- *
- * Generates a JSON data stream from @generator and returns it as a
- * buffer.
- *
- * Return value: a newly allocated buffer holding a JSON data stream.
- *   Use g_free() to free the allocated resources.
- */
-gchar *
-json_generator_to_data (JsonGenerator *generator,
-                        gsize         *length)
-{
-  JsonNode *root;
-  gchar *retval = NULL;
-
-  g_return_val_if_fail (JSON_IS_GENERATOR (generator), NULL);
-
-  root = generator->priv->root;
-  if (!root)
-    {
-      if (length)
-        *length = 0;
-
-      return NULL;
-    }
-
-  switch (JSON_NODE_TYPE (root))
-    {
-    case JSON_NODE_ARRAY:
-      retval = dump_array (generator, 0, NULL, json_node_get_array (root), length);
-      break;
-
-    case JSON_NODE_OBJECT:
-      retval = dump_object (generator, 0, NULL, json_node_get_object (root), length);
-      break;
-
-    case JSON_NODE_NULL:
-      retval = g_strdup ("null");
-      if (length)
-        *length = 4;
-      break;
-
-    case JSON_NODE_VALUE:
-      retval = NULL;
-      break;
-    }
-
-  return retval;
-}
-
-/*
- * json_generator_to_file:
- * @generator: a #JsonGenerator
- * @filename: path to the target file
- * @error: return location for a #GError, or %NULL
- *
- * Creates a JSON data stream and puts it inside @filename, overwriting the
- * current file contents. This operation is atomic.
- *
- * Return value: %TRUE if saving was successful.
- */
-gboolean
-json_generator_to_file (JsonGenerator  *generator,
-                        const gchar    *filename,
-                        GError        **error)
-{
-  gchar *buffer;
-  gsize len;
-  gboolean retval;
-
-  g_return_val_if_fail (JSON_IS_GENERATOR (generator), FALSE);
-  g_return_val_if_fail (filename != NULL, FALSE);
-
-  buffer = json_generator_to_data (generator, &len);
-  retval = g_file_set_contents (filename, buffer, len, error);
-  g_free (buffer);
-
-  return retval;
-}
-
-/*
- * json_generator_set_root:
- * @generator: a #JsonGenerator
- * @node: a #JsonNode
- *
- * Sets @node as the root of the JSON data stream to be serialized by
- * the #JsonGenerator.
- *
- * <note>The node is copied by the generator object, so it can be safely
- * freed after calling this function.</note>
- */
-void
-json_generator_set_root (JsonGenerator *generator,
-                         JsonNode      *node)
-{
-  g_return_if_fail (JSON_IS_GENERATOR (generator));
-
-  if (generator->priv->root)
-    {
-      json_node_free (generator->priv->root);
-      generator->priv->root = NULL;
-    }
-
-  if (node)
-    generator->priv->root = json_node_copy (node);
-}
diff --git a/clutter/json/json-generator.h b/clutter/json/json-generator.h
deleted file mode 100644 (file)
index 893325b..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-/* json-generator.h - JSON streams generator
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@openedhand.com>
- */
-
-#ifndef __JSON_GENERATOR_H__
-#define __JSON_GENERATOR_H__
-
-#include <glib-object.h>
-#include "json-types.h"
-
-G_BEGIN_DECLS
-
-#define JSON_TYPE_GENERATOR             (json_generator_get_type ())
-#define JSON_GENERATOR(obj)             (G_TYPE_CHECK_INSTANCE_CAST ((obj), JSON_TYPE_GENERATOR, JsonGenerator))
-#define JSON_IS_GENERATOR(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), JSON_TYPE_GENERATOR))
-#define JSON_GENERATOR_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST ((klass), JSON_TYPE_GENERATOR, JsonGeneratorClass))
-#define JSON_IS_GENERATOR_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE ((klass), JSON_TYPE_GENERATOR))
-#define JSON_GENERATOR_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS ((obj), JSON_TYPE_GENERATOR, JsonGeneratorClass))
-
-typedef struct _JsonGenerator           JsonGenerator;
-typedef struct _JsonGeneratorPrivate    JsonGeneratorPrivate;
-typedef struct _JsonGeneratorClass      JsonGeneratorClass;
-
-/**
- * JsonGenerator:
- *
- * JSON data streams generator. The contents of the #JsonGenerator structure
- * are private and should only be accessed via the provided API.
- */
-struct _JsonGenerator
-{
-  /*< private >*/
-  GObject parent_instance;
-
-  JsonGeneratorPrivate *priv;
-};
-
-/**
- * JsonGeneratorClass:
- *
- * #JsonGenerator class
- */
-struct _JsonGeneratorClass
-{
-  /*< private >*/
-  GObjectClass parent_class;
-
-  /* padding, for future expansion */
-  void (* _json_reserved1) (void);
-  void (* _json_reserved2) (void);
-  void (* _json_reserved3) (void);
-  void (* _json_reserved4) (void);
-};
-
-GType json_generator_get_type (void) G_GNUC_CONST;
-
-JsonGenerator *json_generator_new (void);
-gchar *        json_generator_to_data  (JsonGenerator  *generator,
-                                        gsize          *length);
-gboolean       json_generator_to_file  (JsonGenerator  *generator,
-                                        const gchar    *filename,
-                                        GError        **error);
-void           json_generator_set_root (JsonGenerator  *generator,
-                                        JsonNode       *node);
-
-G_END_DECLS
-
-#endif /* __JSON_GENERATOR_H__ */
diff --git a/clutter/json/json-glib.h b/clutter/json/json-glib.h
deleted file mode 100644 (file)
index 3e75080..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __JSON_GLIB_H__
-#define __JSON_GLIB_H__
-
-#define __JSON_GLIB_INSIDE__
-
-#include "json-types.h"
-#include "json-generator.h"
-#include "json-parser.h"
-
-#undef __JSON_GLIB_INSIDE__
-
-#endif /* __JSON_GLIB_H__ */
diff --git a/clutter/json/json-marshal.c b/clutter/json/json-marshal.c
deleted file mode 100644 (file)
index 9588d29..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-#include "json-marshal.h"
-
-#include       <glib-object.h>
-
-
-#ifdef G_ENABLE_DEBUG
-#define g_marshal_value_peek_boolean(v)  g_value_get_boolean (v)
-#define g_marshal_value_peek_char(v)     g_value_get_char (v)
-#define g_marshal_value_peek_uchar(v)    g_value_get_uchar (v)
-#define g_marshal_value_peek_int(v)      g_value_get_int (v)
-#define g_marshal_value_peek_uint(v)     g_value_get_uint (v)
-#define g_marshal_value_peek_long(v)     g_value_get_long (v)
-#define g_marshal_value_peek_ulong(v)    g_value_get_ulong (v)
-#define g_marshal_value_peek_int64(v)    g_value_get_int64 (v)
-#define g_marshal_value_peek_uint64(v)   g_value_get_uint64 (v)
-#define g_marshal_value_peek_enum(v)     g_value_get_enum (v)
-#define g_marshal_value_peek_flags(v)    g_value_get_flags (v)
-#define g_marshal_value_peek_float(v)    g_value_get_float (v)
-#define g_marshal_value_peek_double(v)   g_value_get_double (v)
-#define g_marshal_value_peek_string(v)   (char*) g_value_get_string (v)
-#define g_marshal_value_peek_param(v)    g_value_get_param (v)
-#define g_marshal_value_peek_boxed(v)    g_value_get_boxed (v)
-#define g_marshal_value_peek_pointer(v)  g_value_get_pointer (v)
-#define g_marshal_value_peek_object(v)   g_value_get_object (v)
-#else /* !G_ENABLE_DEBUG */
-/* WARNING: This code accesses GValues directly, which is UNSUPPORTED API.
- *          Do not access GValues directly in your code. Instead, use the
- *          g_value_get_*() functions
- */
-#define g_marshal_value_peek_boolean(v)  (v)->data[0].v_int
-#define g_marshal_value_peek_char(v)     (v)->data[0].v_int
-#define g_marshal_value_peek_uchar(v)    (v)->data[0].v_uint
-#define g_marshal_value_peek_int(v)      (v)->data[0].v_int
-#define g_marshal_value_peek_uint(v)     (v)->data[0].v_uint
-#define g_marshal_value_peek_long(v)     (v)->data[0].v_long
-#define g_marshal_value_peek_ulong(v)    (v)->data[0].v_ulong
-#define g_marshal_value_peek_int64(v)    (v)->data[0].v_int64
-#define g_marshal_value_peek_uint64(v)   (v)->data[0].v_uint64
-#define g_marshal_value_peek_enum(v)     (v)->data[0].v_long
-#define g_marshal_value_peek_flags(v)    (v)->data[0].v_ulong
-#define g_marshal_value_peek_float(v)    (v)->data[0].v_float
-#define g_marshal_value_peek_double(v)   (v)->data[0].v_double
-#define g_marshal_value_peek_string(v)   (v)->data[0].v_pointer
-#define g_marshal_value_peek_param(v)    (v)->data[0].v_pointer
-#define g_marshal_value_peek_boxed(v)    (v)->data[0].v_pointer
-#define g_marshal_value_peek_pointer(v)  (v)->data[0].v_pointer
-#define g_marshal_value_peek_object(v)   (v)->data[0].v_pointer
-#endif /* !G_ENABLE_DEBUG */
-
-
-/* VOID:VOID (./json-marshal.list:1) */
-
-/* VOID:BOXED (./json-marshal.list:2) */
-
-/* VOID:BOXED,STRING (./json-marshal.list:3) */
-void
-_json_marshal_VOID__BOXED_STRING (GClosure     *closure,
-                                  GValue       *return_value,
-                                  guint         n_param_values,
-                                  const GValue *param_values,
-                                  gpointer      invocation_hint,
-                                  gpointer      marshal_data)
-{
-  typedef void (*GMarshalFunc_VOID__BOXED_STRING) (gpointer     data1,
-                                                   gpointer     arg_1,
-                                                   gpointer     arg_2,
-                                                   gpointer     data2);
-  register GMarshalFunc_VOID__BOXED_STRING callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_VOID__BOXED_STRING) (marshal_data ? marshal_data : cc->callback);
-
-  callback (data1,
-            g_marshal_value_peek_boxed (param_values + 1),
-            g_marshal_value_peek_string (param_values + 2),
-            data2);
-}
-
-/* VOID:BOXED,INT (./json-marshal.list:4) */
-void
-_json_marshal_VOID__BOXED_INT (GClosure     *closure,
-                               GValue       *return_value,
-                               guint         n_param_values,
-                               const GValue *param_values,
-                               gpointer      invocation_hint,
-                               gpointer      marshal_data)
-{
-  typedef void (*GMarshalFunc_VOID__BOXED_INT) (gpointer     data1,
-                                                gpointer     arg_1,
-                                                gint         arg_2,
-                                                gpointer     data2);
-  register GMarshalFunc_VOID__BOXED_INT callback;
-  register GCClosure *cc = (GCClosure*) closure;
-  register gpointer data1, data2;
-
-  g_return_if_fail (n_param_values == 3);
-
-  if (G_CCLOSURE_SWAP_DATA (closure))
-    {
-      data1 = closure->data;
-      data2 = g_value_peek_pointer (param_values + 0);
-    }
-  else
-    {
-      data1 = g_value_peek_pointer (param_values + 0);
-      data2 = closure->data;
-    }
-  callback = (GMarshalFunc_VOID__BOXED_INT) (marshal_data ? marshal_data : cc->callback);
-
-  callback (data1,
-            g_marshal_value_peek_boxed (param_values + 1),
-            g_marshal_value_peek_int (param_values + 2),
-            data2);
-}
-
-/* VOID:POINTER (./json-marshal.list:5) */
-
diff --git a/clutter/json/json-marshal.h b/clutter/json/json-marshal.h
deleted file mode 100644 (file)
index f4f7658..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef ___json_marshal_MARSHAL_H__
-#define ___json_marshal_MARSHAL_H__
-
-#include       <glib-object.h>
-
-G_BEGIN_DECLS
-
-/* VOID:VOID (./json-marshal.list:1) */
-#define _json_marshal_VOID__VOID       g_cclosure_marshal_VOID__VOID
-
-/* VOID:BOXED (./json-marshal.list:2) */
-#define _json_marshal_VOID__BOXED      g_cclosure_marshal_VOID__BOXED
-
-/* VOID:BOXED,STRING (./json-marshal.list:3) */
-extern void _json_marshal_VOID__BOXED_STRING (GClosure     *closure,
-                                              GValue       *return_value,
-                                              guint         n_param_values,
-                                              const GValue *param_values,
-                                              gpointer      invocation_hint,
-                                              gpointer      marshal_data);
-
-/* VOID:BOXED,INT (./json-marshal.list:4) */
-extern void _json_marshal_VOID__BOXED_INT (GClosure     *closure,
-                                           GValue       *return_value,
-                                           guint         n_param_values,
-                                           const GValue *param_values,
-                                           gpointer      invocation_hint,
-                                           gpointer      marshal_data);
-
-/* VOID:POINTER (./json-marshal.list:5) */
-#define _json_marshal_VOID__POINTER    g_cclosure_marshal_VOID__POINTER
-
-G_END_DECLS
-
-#endif /* ___json_marshal_MARSHAL_H__ */
-
diff --git a/clutter/json/json-node.c b/clutter/json/json-node.c
deleted file mode 100644 (file)
index a56fc74..0000000
+++ /dev/null
@@ -1,770 +0,0 @@
-/* json-node.c - JSON object model node
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "json-types-private.h"
-
-/*
- * SECTION:json-node
- * @short_description: Node in a JSON object model
- *
- * A #JsonNode is a generic container of elements inside a JSON stream.
- * It can contain fundamental types (integers, booleans, floating point
- * numbers, strings) and complex types (arrays and objects).
- *
- * When parsing a JSON data stream you extract the root node and walk
- * the node tree by retrieving the type of data contained inside the
- * node with the %JSON_NODE_TYPE macro. If the node contains a fundamental
- * type you can retrieve a copy of the #GValue holding it with the
- * json_node_get_value() function, and then use the #GValue API to extract
- * the data; if the node contains a complex type you can retrieve the
- * #JsonObject or the #JsonArray using json_node_get_object() or
- * json_node_get_array() respectively, and then retrieve the nodes
- * they contain.
- */
-
-GType
-json_node_get_type (void)
-{
-  static GType node_type = 0;
-
-  if (G_UNLIKELY (node_type == 0))
-    node_type = g_boxed_type_register_static (g_intern_static_string ("JsonNode"),
-                                              (GBoxedCopyFunc) json_node_copy,
-                                              (GBoxedFreeFunc) json_node_free);
-
-  return node_type;
-}
-
-/*
- * json_node_get_value_type:
- * @node: a #JsonNode
- *
- * Returns the #GType of the payload of the node.
- *
- * Return value: a #GType for the payload.
- *
- * Since: 0.4
- */
-GType
-json_node_get_value_type (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, G_TYPE_INVALID);
-
-  switch (node->type)
-    {
-    case JSON_NODE_OBJECT:
-      return JSON_TYPE_OBJECT;
-
-    case JSON_NODE_ARRAY:
-      return JSON_TYPE_ARRAY;
-
-    case JSON_NODE_NULL:
-      return G_TYPE_INVALID;
-
-    case JSON_NODE_VALUE:
-      return G_VALUE_TYPE (&(node->data.value));
-
-    default:
-      g_assert_not_reached ();
-      return G_TYPE_INVALID;
-    }
-}
-
-/*
- * json_node_new:
- * @type: a #JsonNodeType
- *
- * Creates a new #JsonNode of @type.
- *
- * Return value: the newly created #JsonNode
- */
-JsonNode *
-json_node_new (JsonNodeType type)
-{
-  JsonNode *data;
-
-  g_return_val_if_fail (type >= JSON_NODE_OBJECT &&
-                        type <= JSON_NODE_NULL, NULL);
-
-  data = g_slice_new0 (JsonNode);
-  data->type = type;
-
-  return data;
-}
-
-/*
- * json_node_copy:
- * @node: a #JsonNode
- *
- * Copies @node. If the node contains complex data types then the reference
- * count of the objects is increased.
- *
- * Return value: the copied #JsonNode
- */
-JsonNode *
-json_node_copy (JsonNode *node)
-{
-  JsonNode *copy;
-
-  g_return_val_if_fail (node != NULL, NULL);
-
-  copy = g_slice_new0 (JsonNode);
-  copy->type = node->type;
-
-  switch (copy->type)
-    {
-    case JSON_NODE_OBJECT:
-      if (node->data.object)
-        copy->data.object = json_object_ref (node->data.object);
-      break;
-
-    case JSON_NODE_ARRAY:
-      if (node->data.array)
-        copy->data.array = json_array_ref (node->data.array);
-      break;
-
-    case JSON_NODE_VALUE:
-      if (G_VALUE_TYPE (&(node->data.value)) != G_TYPE_INVALID)
-        {
-          g_value_init (&(copy->data.value), G_VALUE_TYPE (&(node->data.value)));
-          g_value_copy (&(node->data.value), &(copy->data.value));
-        }
-      break;
-
-    case JSON_NODE_NULL:
-      break;
-
-    default:
-      g_assert_not_reached ();
-    }
-
-  return copy;
-}
-
-/*
- * json_node_set_object:
- * @node: a #JsonNode
- * @object: a #JsonObject
- *
- * Sets @objects inside @node. The reference count of @object is increased.
- */
-void
-json_node_set_object (JsonNode   *node,
-                      JsonObject *object)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT);
-
-  if (node->data.object)
-    json_object_unref (node->data.object);
-
-  if (object)
-    node->data.object = json_object_ref (object);
-  else
-    node->data.object = NULL;
-}
-
-/*
- * json_node_take_object:
- * @node: a #JsonNode
- * @object: a #JsonObject
- *
- * Sets @object inside @node. The reference count of @object is not increased.
- */
-void
-json_node_take_object (JsonNode   *node,
-                       JsonObject *object)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT);
-
-  if (node->data.object)
-    {
-      json_object_unref (node->data.object);
-      node->data.object = NULL;
-    }
-
-  if (object)
-    node->data.object = object;
-}
-
-/*
- * json_node_get_object:
- * @node: a #JsonNode
- *
- * Retrieves the #JsonObject stored inside a #JsonNode
- *
- * Return value: the #JsonObject
- */
-JsonObject *
-json_node_get_object (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT, NULL);
-
-  return node->data.object;
-}
-
-/*
- * json_node_dup_object:
- * @node: a #JsonNode
- *
- * Retrieves the #JsonObject inside @node. The reference count of
- * the returned object is increased.
- *
- * Return value: the #JsonObject
- */
-JsonObject *
-json_node_dup_object (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_OBJECT, NULL);
-
-  if (node->data.object)
-    return json_object_ref (node->data.object);
-  
-  return NULL;
-}
-
-/*
- * json_node_set_array:
- * @node: a #JsonNode
- * @array: a #JsonArray
- *
- * Sets @array inside @node and increases the #JsonArray reference count
- */
-void
-json_node_set_array (JsonNode  *node,
-                     JsonArray *array)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY);
-
-  if (node->data.array)
-    json_array_unref (node->data.array);
-
-  if (array)
-    node->data.array = json_array_ref (array);
-  else
-    node->data.array = NULL;
-}
-
-/*
- * json_node_take_array:
- * @node: a #JsonNode
- * @array: a #JsonArray
- *
- * Sets @array into @node without increasing the #JsonArray reference count.
- */
-void
-json_node_take_array (JsonNode  *node,
-                      JsonArray *array)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY);
-
-  if (node->data.array)
-    {
-      json_array_unref (node->data.array);
-      node->data.array = NULL;
-    }
-
-  if (array)
-    node->data.array = array;
-}
-
-/*
- * json_node_get_array:
- * @node: a #JsonNode
- *
- * Retrieves the #JsonArray stored inside a #JsonNode
- *
- * Return value: the #JsonArray
- */
-JsonArray *
-json_node_get_array (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY, NULL);
-
-  return node->data.array;
-}
-
-/*
- * json_node_dup_array
- * @node: a #JsonNode
- *
- * Retrieves the #JsonArray stored inside a #JsonNode and returns it
- * with its reference count increased by one.
- *
- * Return value: the #JsonArray with its reference count increased.
- */
-JsonArray *
-json_node_dup_array (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_ARRAY, NULL);
-
-  if (node->data.array)
-    return json_array_ref (node->data.array);
-
-  return NULL;
-}
-
-/*
- * json_node_get_value:
- * @node: a #JsonNode
- * @value: return location for an uninitialized value
- *
- * Retrieves a value from a #JsonNode and copies into @value. When done
- * using it, call g_value_unset() on the #GValue.
- */
-void
-json_node_get_value (JsonNode *node,
-                     GValue   *value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-
-  if (G_VALUE_TYPE (&(node->data.value)) != G_TYPE_INVALID)
-    {
-      g_value_init (value, G_VALUE_TYPE (&(node->data.value)));
-      g_value_copy (&(node->data.value), value);
-    }
-}
-
-static void inline
-node_value_unset (JsonNode *node)
-{
-  if (G_VALUE_TYPE (&(node->data.value)) != G_TYPE_INVALID)
-    g_value_unset (&(node->data.value));
-}
-
-/*
- * json_node_set_value:
- * @node: a #JsonNode
- * @value: the #GValue to set
- *
- * Sets @value inside @node. The passed #GValue is copied into the #JsonNode
- */
-void
-json_node_set_value (JsonNode     *node,
-                     const GValue *value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-  g_return_if_fail (G_VALUE_TYPE (value) != G_TYPE_INVALID);
-
-  switch (G_VALUE_TYPE (value))
-    {
-    /* direct copy for the types we use */
-    case G_TYPE_INT64:
-    case G_TYPE_BOOLEAN:
-    case G_TYPE_DOUBLE:
-    case G_TYPE_STRING:
-      node_value_unset (node);
-      g_value_init (&(node->data.value), G_VALUE_TYPE (value));
-      g_value_copy (value, &(node->data.value));
-      break;
-
-    /* auto-promote ints to long longs */
-    case G_TYPE_INT:
-      node_value_unset (node);
-      g_value_init (&(node->data.value), G_TYPE_INT64);
-      g_value_set_int64 (&(node->data.value),
-                         g_value_get_int (value));
-      break;
-
-    /* auto-promote single precision to double precision */
-    case G_TYPE_FLOAT:
-      node_value_unset (node);
-      g_value_init (&(node->data.value), G_TYPE_DOUBLE);
-      g_value_set_double (&(node->data.value),
-                          g_value_get_float (value));
-      break;
-
-    default:
-      g_warning ("Invalid value of type '%s'",
-                 g_type_name (G_VALUE_TYPE (value)));
-      return;
-    }
-
-}
-
-/*
- * json_node_free:
- * @node: a #JsonNode
- *
- * Frees the resources allocated by @node.
- */
-void
-json_node_free (JsonNode *node)
-{
-  if (G_LIKELY (node))
-    {
-      switch (node->type)
-        {
-        case JSON_NODE_OBJECT:
-          if (node->data.object)
-            json_object_unref (node->data.object);
-          break;
-
-        case JSON_NODE_ARRAY:
-          if (node->data.array)
-            json_array_unref (node->data.array);
-          break;
-
-        case JSON_NODE_VALUE:
-          g_value_unset (&(node->data.value));
-          break;
-
-        case JSON_NODE_NULL:
-          break;
-        }
-
-      g_slice_free (JsonNode, node);
-    }
-}
-
-/*
- * json_node_type_name:
- * @node: a #JsonNode
- *
- * Retrieves the user readable name of the data type contained by @node.
- *
- * Return value: a string containing the name of the type. The returned string
- *   is owned by the node and should never be modified or freed
- */
-G_CONST_RETURN gchar *
-json_node_type_name (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, "(null)");
-
-  switch (node->type)
-    {
-    case JSON_NODE_OBJECT:
-      return "JsonObject";
-
-    case JSON_NODE_ARRAY:
-      return "JsonArray";
-
-    case JSON_NODE_NULL:
-      return "NULL";
-
-    case JSON_NODE_VALUE:
-      return g_type_name (G_VALUE_TYPE (&(node->data.value)));
-    }
-
-  return "unknown";
-}
-
-/*
- * json_node_get_parent:
- * @node: a #JsonNode
- *
- * Retrieves the parent #JsonNode of @node.
- *
- * Return value: the parent node, or %NULL if @node is the root node
- */
-JsonNode *
-json_node_get_parent (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-
-  return node->parent;
-}
-
-/*
- * json_node_set_string:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- * @value: a string value
- *
- * Sets @value as the string content of the @node, replacing any existing
- * content.
- */
-void
-json_node_set_string (JsonNode    *node,
-                      const gchar *value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_STRING)
-    g_value_set_string (&(node->data.value), value);
-  else
-    {
-      GValue copy = { 0, };
-
-      g_value_init (&copy, G_TYPE_STRING);
-      g_value_set_string (&copy, value);
-
-      json_node_set_value (node, &copy);
-
-      g_value_unset (&copy);
-    }
-}
-
-/*
- * json_node_get_string:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- *
- * Gets the string value stored inside a #JsonNode
- *
- * Return value: a string value.
- */
-G_CONST_RETURN gchar *
-json_node_get_string (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-
-  if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
-    return NULL;
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_STRING)
-    return g_value_get_string (&(node->data.value));
-
-  return NULL;
-}
-
-/*
- * json_node_dup_string:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- *
- * Gets a copy of the string value stored inside a #JsonNode
- *
- * Return value: a newly allocated string containing a copy of
- *   the #JsonNode contents
- */
-gchar *
-json_node_dup_string (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, NULL);
-
-  if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
-    return NULL;
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_STRING)
-    return g_value_dup_string (&(node->data.value));
-
-  return NULL;
-}
-
-/*
- * json_node_set_int:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- * @value: an integer value
- *
- * Sets @value as the integer content of the @node, replacing any existing
- * content.
- */
-void
-json_node_set_int (JsonNode *node,
-                   gint64    value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_INT64)
-    g_value_set_int64 (&(node->data.value), value);
-  else
-    {
-      GValue copy = { 0, };
-
-      g_value_init (&copy, G_TYPE_INT64);
-      g_value_set_int64 (&copy, value);
-
-      json_node_set_value (node, &copy);
-
-      g_value_unset (&copy);
-    }
-}
-
-/*
- * json_node_get_int:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- *
- * Gets the integer value stored inside a #JsonNode
- *
- * Return value: an integer value.
- */
-gint64
-json_node_get_int (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, 0);
-
-  if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
-    return 0;
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_INT64)
-    return g_value_get_int64 (&(node->data.value));
-
-  return 0;
-}
-
-/*
- * json_node_set_double:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- * @value: a double value
- *
- * Sets @value as the double content of the @node, replacing any existing
- * content.
- */
-void
-json_node_set_double (JsonNode *node,
-                      gdouble   value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_DOUBLE)
-    g_value_set_double (&(node->data.value), value);
-  else
-    {
-      GValue copy = { 0, };
-
-      g_value_init (&copy, G_TYPE_DOUBLE);
-      g_value_set_double (&copy, value);
-
-      json_node_set_value (node, &copy);
-
-      g_value_unset (&copy);
-    }
-}
-
-/*
- * json_node_get_double:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- *
- * Gets the double value stored inside a #JsonNode
- *
- * Return value: a double value.
- */
-gdouble
-json_node_get_double (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, 0.0);
-
-  if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
-    return 0;
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_DOUBLE)
-    return g_value_get_double (&(node->data.value));
-
-  return 0.0;
-}
-
-/*
- * json_node_set_boolean:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- * @value: a boolean value
- *
- * Sets @value as the boolean content of the @node, replacing any existing
- * content.
- */
-void
-json_node_set_boolean (JsonNode *node,
-                       gboolean  value)
-{
-  g_return_if_fail (node != NULL);
-  g_return_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE);
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_BOOLEAN)
-    g_value_set_boolean (&(node->data.value), value);
-  else
-    {
-      GValue copy = { 0, };
-
-      g_value_init (&copy, G_TYPE_BOOLEAN);
-      g_value_set_boolean (&copy, value);
-
-      json_node_set_value (node, &copy);
-
-      g_value_unset (&copy);
-    }
-}
-
-/*
- * json_node_get_boolean:
- * @node: a #JsonNode of type %JSON_NODE_VALUE
- *
- * Gets the boolean value stored inside a #JsonNode
- *
- * Return value: a boolean value.
- */
-gboolean
-json_node_get_boolean (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, FALSE);
-
-  if (JSON_NODE_TYPE (node) == JSON_NODE_NULL)
-    return FALSE;
-
-  if (G_VALUE_TYPE (&(node->data.value)) == G_TYPE_BOOLEAN)
-    return g_value_get_boolean (&(node->data.value));
-
-  return FALSE;
-}
-
-/*
- * json_node_get_node_type:
- * @node: a #JsonNode
- *
- * Retrieves the #JsonNodeType of @node
- *
- * Return value: the type of the node
- *
- * Since: 0.8
- */
-JsonNodeType
-json_node_get_node_type (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, JSON_NODE_NULL);
-
-  return node->type;
-}
-
-/*
- * json_node_is_null:
- * @node: a #JsonNode
- *
- * Checks whether @node is a %JSON_NODE_NULL
- *
- * <note>A null node is not the same as a %NULL #JsonNode</note>
- *
- * Return value: %TRUE if the node is null
- *
- * Since: 0.8
- */
-gboolean
-json_node_is_null (JsonNode *node)
-{
-  g_return_val_if_fail (node != NULL, TRUE);
-
-  return node->type == JSON_NODE_NULL;
-}
diff --git a/clutter/json/json-object.c b/clutter/json/json-object.c
deleted file mode 100644 (file)
index b60b37b..0000000
+++ /dev/null
@@ -1,888 +0,0 @@
-/* json-object.c - JSON object implementation
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <glib.h>
-
-#include "json-types-private.h"
-
-/*
- * SECTION:json-object
- * @short_description: a JSON object representation
- *
- * #JsonArray is the representation of the object type inside JSON. It contains
- * #JsonNode<!-- -->s, which may contain fundamental types, arrays or other
- * objects. Each member of an object is accessed using its name. Please note
- * that the member names are normalized internally before being used; every
- * delimiter matching the %G_STR_DELIMITER macro will be transformed into an
- * underscore, so for instance "member-name" and "member_name" are equivalent
- * for a #JsonObject.
- *
- * Since objects can be expensive, they are reference counted. You can control
- * the lifetime of a #JsonObject using json_object_ref() and json_object_unref().
- *
- * To add or overwrite a member with a given name, use json_object_set_member().
- * To extract a member with a given name, use json_object_get_member().
- * To retrieve the list of members, use json_object_get_members().
- * To retrieve the size of the object (that is, the number of members it has),
- * use json_object_get_size().
- */
-
-GType
-json_object_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (G_UNLIKELY (!object_type))
-    object_type = g_boxed_type_register_static (g_intern_static_string ("JsonObject"),
-                                                (GBoxedCopyFunc) json_object_ref,
-                                                (GBoxedFreeFunc) json_object_unref);
-
-  return object_type;
-}
-
-/*
- * json_object_new:
- * 
- * Creates a new #JsonObject, an JSON object type representation.
- *
- * Return value: the newly created #JsonObject
- */
-JsonObject *
-json_object_new (void)
-{
-  JsonObject *object;
-
-  object = g_slice_new (JsonObject);
-  
-  object->ref_count = 1;
-  object->members = g_hash_table_new_full (g_str_hash, g_str_equal,
-                                           g_free,
-                                           (GDestroyNotify) json_node_free);
-
-  return object;
-}
-
-/*
- * json_object_ref:
- * @object: a #JsonObject
- *
- * Increase by one the reference count of a #JsonObject.
- *
- * Return value: the passed #JsonObject, with the reference count
- *   increased by one.
- */
-JsonObject *
-json_object_ref (JsonObject *object)
-{
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (object->ref_count > 0, NULL);
-
-  g_atomic_int_exchange_and_add (&object->ref_count, 1);
-
-  return object;
-}
-
-/*
- * json_object_unref:
- * @object: a #JsonObject
- *
- * Decreases by one the reference count of a #JsonObject. If the
- * reference count reaches zero, the object is destroyed and all
- * its allocated resources are freed.
- */
-void
-json_object_unref (JsonObject *object)
-{
-  gint old_ref;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (object->ref_count > 0);
-
-  old_ref = g_atomic_int_get (&object->ref_count);
-  if (old_ref > 1)
-    g_atomic_int_compare_and_exchange (&object->ref_count, old_ref, old_ref - 1);
-  else
-    {
-      g_hash_table_destroy (object->members);
-      object->members = NULL;
-
-      g_slice_free (JsonObject, object);
-    }
-}
-
-static inline void
-object_set_member_internal (JsonObject  *object,
-                            const gchar *member_name,
-                            JsonNode    *node)
-{
-  g_hash_table_replace (object->members,
-                        g_strdup (member_name),
-                        node);
-}
-
-/*
- * json_object_add_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @node: the value of the member
- *
- * Adds a member named @member_name and containing @node into a #JsonObject.
- * The object will take ownership of the #JsonNode.
- *
- * This function will return if the @object already contains a member
- * @member_name.
- *
- * Deprecated: 0.8: Use json_object_set_member() instead
- */
-void
-json_object_add_member (JsonObject  *object,
-                        const gchar *member_name,
-                        JsonNode    *node)
-{
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-  g_return_if_fail (node != NULL);
-
-  if (json_object_has_member (object, member_name))
-    {
-      g_warning ("JsonObject already has a `%s' member of type `%s'",
-                 member_name,
-                 json_node_type_name (node));
-      return;
-    }
-
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @node: the value of the member
- *
- * Sets @node as the value of @member_name inside @object.
- *
- * If @object already contains a member called @member_name then
- * the member's current value is overwritten. Otherwise, a new
- * member is added to @object.
- *
- * Since: 0.8
- */
-void
-json_object_set_member (JsonObject  *object,
-                        const gchar *member_name,
-                        JsonNode    *node)
-{
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-  g_return_if_fail (node != NULL);
-
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_int_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting an integer @value of
- * @member_name inside @object.
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_int_member (JsonObject  *object,
-                            const gchar *member_name,
-                            gint64       value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_int (node, value);
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_double_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting a floating point @value
- * of @member_name inside @object.
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_double_member (JsonObject  *object,
-                               const gchar *member_name,
-                               gdouble      value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_double (node, value);
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_boolean_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting a boolean @value of
- * @member_name inside @object.
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_boolean_member (JsonObject  *object,
-                                const gchar *member_name,
-                                gboolean     value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  node = json_node_new (JSON_NODE_VALUE);
-  json_node_set_boolean (node, value);
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_string_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting a string @value of
- * @member_name inside @object.
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_string_member (JsonObject  *object,
-                               const gchar *member_name,
-                               const gchar *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_VALUE);
-      json_node_set_string (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_null_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function for setting a null @value of
- * @member_name inside @object.
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_null_member (JsonObject  *object,
-                             const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  node = json_node_new (JSON_NODE_NULL);
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_array_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting an array @value of
- * @member_name inside @object.
- *
- * The @object will take ownership of the passed #JsonArray
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_array_member (JsonObject  *object,
-                              const gchar *member_name,
-                              JsonArray   *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_ARRAY);
-      json_node_take_array (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  object_set_member_internal (object, member_name, node);
-}
-
-/*
- * json_object_set_object_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- * @value: the value of the member
- *
- * Convenience function for setting an object @value of
- * @member_name inside @object.
- *
- * The @object will take ownership of the passed #JsonObject
- *
- * See also: json_object_set_member()
- *
- * Since: 0.8
- */
-void
-json_object_set_object_member (JsonObject  *object,
-                               const gchar *member_name,
-                               JsonObject  *value)
-{
-  JsonNode *node;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  if (value != NULL)
-    {
-      node = json_node_new (JSON_NODE_OBJECT);
-      json_node_take_object (node, value);
-    }
-  else
-    node = json_node_new (JSON_NODE_NULL);
-
-  object_set_member_internal (object, member_name, node);
-}
-
-/* FIXME: yuck */
-#if GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 14
-static void
-get_keys (gpointer key,
-          gpointer value,
-          gpointer user_data)
-{
-  GList **keys = user_data;
-
-  *keys = g_list_prepend (*keys, key);
-}
-
-static void
-get_values (gpointer key,
-            gpointer value,
-            gpointer user_data)
-{
-  GList **values = user_data;
-
-  *values = g_list_prepend (*values, value);
-}
-
-static GList *
-g_hash_table_get_keys (GHashTable *hash_table)
-{
-  GList *retval = NULL;
-
-  g_return_val_if_fail (hash_table != NULL, NULL);
-
-  g_hash_table_foreach (hash_table, get_keys, &retval);
-
-  return retval;
-}
-
-static GList *
-g_hash_table_get_values (GHashTable *hash_table)
-{
-  GList *retval = NULL;
-
-  g_return_val_if_fail (hash_table != NULL, NULL);
-
-  g_hash_table_foreach (hash_table, get_values, &retval);
-
-  return retval;
-}
-#endif /* GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 14 */
-
-/*
- * json_object_get_members:
- * @object: a #JsonObject
- *
- * Retrieves all the names of the members of a #JsonObject. You can
- * obtain the value for each member using json_object_get_member().
- *
- * Return value: a #GList of member names. The content of the list
- *   is owned by the #JsonObject and should never be modified or
- *   freed. When you have finished using the returned list, use
- *   g_list_free() to free the resources it has allocated.
- */
-GList *
-json_object_get_members (JsonObject *object)
-{
-  g_return_val_if_fail (object != NULL, NULL);
-
-  return g_hash_table_get_keys (object->members);
-}
-
-/*
- * json_object_get_values:
- * @object: a #JsonObject
- *
- * Retrieves all the values of the members of a #JsonObject.
- *
- * Return value: a #GList of #JsonNode<!-- -->s. The content of the
- *   list is owned by the #JsonObject and should never be modified
- *   or freed. When you have finished using the returned list, use
- *   g_list_free() to free the resources it has allocated.
- */
-GList *
-json_object_get_values (JsonObject *object)
-{
-  g_return_val_if_fail (object != NULL, NULL);
-
-  return g_hash_table_get_values (object->members);
-}
-
-/*
- * json_object_dup_member:
- * @object: a #JsonObject
- * @member_name: the name of the JSON object member to access
- *
- * Retrieves a copy of the #JsonNode containing the value of @member_name
- * inside a #JsonObject
- *
- * Return value: a copy of the node for the requested object member
- *   or %NULL. Use json_node_free() when done.
- *
- * Since: 0.6
- */
-JsonNode *
-json_object_dup_member (JsonObject  *object,
-                        const gchar *member_name)
-{
-  JsonNode *retval;
-
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (member_name != NULL, NULL);
-
-  retval = json_object_get_member (object, member_name);
-  if (!retval)
-    return NULL;
-
-  return json_node_copy (retval);
-}
-
-static inline JsonNode *
-object_get_member_internal (JsonObject  *object,
-                            const gchar *member_name)
-{
-  return g_hash_table_lookup (object->members, member_name);
-}
-
-/*
- * json_object_get_member:
- * @object: a #JsonObject
- * @member_name: the name of the JSON object member to access
- *
- * Retrieves the #JsonNode containing the value of @member_name inside
- * a #JsonObject.
- *
- * Return value: a pointer to the node for the requested object
- *   member, or %NULL
- */
-JsonNode *
-json_object_get_member (JsonObject  *object,
-                        const gchar *member_name)
-{
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (member_name != NULL, NULL);
-
-  return object_get_member_internal (object, member_name);
-}
-
-/*
- * json_object_get_int_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the integer value
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the integer value of the object's member
- *
- * Since: 0.8
- */
-gint64
-json_object_get_int_member (JsonObject  *object,
-                            const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, 0);
-  g_return_val_if_fail (member_name != NULL, 0);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, 0);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0);
-
-  return json_node_get_int (node);
-}
-
-/*
- * json_object_get_double_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the floating point value
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the floating point value of the object's member
- *
- * Since: 0.8
- */
-gdouble
-json_object_get_double_member (JsonObject  *object,
-                               const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, 0.0);
-  g_return_val_if_fail (member_name != NULL, 0.0);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, 0.0);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, 0.0);
-
-  return json_node_get_double (node);
-}
-
-/*
- * json_object_get_boolean_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the boolean value
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the boolean value of the object's member
- *
- * Since: 0.8
- */
-gboolean
-json_object_get_boolean_member (JsonObject  *object,
-                                const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, FALSE);
-  g_return_val_if_fail (member_name != NULL, FALSE);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, FALSE);
-  g_return_val_if_fail (JSON_NODE_TYPE (node) == JSON_NODE_VALUE, FALSE);
-
-  return json_node_get_boolean (node);
-}
-
-/*
- * json_object_get_null_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that checks whether the value
- * stored in @member_name of @object is null
- *
- * See also: json_object_get_member()
- *
- * Return value: %TRUE if the value is null
- *
- * Since: 0.8
- */
-gboolean
-json_object_get_null_member (JsonObject  *object,
-                             const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, FALSE);
-  g_return_val_if_fail (member_name != NULL, FALSE);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, FALSE);
-
-  return JSON_NODE_TYPE (node) == JSON_NODE_NULL;
-}
-
-/*
- * json_object_get_string_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the string value
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the string value of the object's member
- *
- * Since: 0.8
- */
-G_CONST_RETURN gchar *
-json_object_get_string_member (JsonObject  *object,
-                               const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (member_name != NULL, NULL);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_VALUE (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_string (node);
-}
-
-/*
- * json_object_get_array_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the array
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the array inside the object's member
- *
- * Since: 0.8
- */
-JsonArray *
-json_object_get_array_member (JsonObject  *object,
-                              const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (member_name != NULL, NULL);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_ARRAY (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_array (node);
-}
-
-/*
- * json_object_get_object_member:
- * @object: a #JsonObject
- * @member_name: the name of the member
- *
- * Convenience function that retrieves the object
- * stored in @member_name of @object
- *
- * See also: json_object_get_member()
- *
- * Return value: the object inside the object's member
- *
- * Since: 0.8
- */
-JsonObject *
-json_object_get_object_member (JsonObject  *object,
-                               const gchar *member_name)
-{
-  JsonNode *node;
-
-  g_return_val_if_fail (object != NULL, NULL);
-  g_return_val_if_fail (member_name != NULL, NULL);
-
-  node = object_get_member_internal (object, member_name);
-  g_return_val_if_fail (node != NULL, NULL);
-  g_return_val_if_fail (JSON_NODE_HOLDS_OBJECT (node) || JSON_NODE_HOLDS_NULL (node), NULL);
-
-  if (JSON_NODE_HOLDS_NULL (node))
-    return NULL;
-
-  return json_node_get_object (node);
-}
-
-/*
- * json_object_has_member:
- * @object: a #JsonObject
- * @member_name: the name of a JSON object member
- *
- * Checks whether @object has a member named @member_name.
- *
- * Return value: %TRUE if the JSON object has the requested member
- */
-gboolean
-json_object_has_member (JsonObject *object,
-                        const gchar *member_name)
-{
-  g_return_val_if_fail (object != NULL, FALSE);
-  g_return_val_if_fail (member_name != NULL, FALSE);
-
-  return (g_hash_table_lookup (object->members, member_name) != NULL);
-}
-
-/*
- * json_object_get_size:
- * @object: a #JsonObject
- *
- * Retrieves the number of members of a #JsonObject.
- *
- * Return value: the number of members
- */
-guint
-json_object_get_size (JsonObject *object)
-{
-  g_return_val_if_fail (object != NULL, 0);
-
-  return g_hash_table_size (object->members);
-}
-
-/*
- * json_object_remove_member:
- * @object: a #JsonObject
- * @member_name: the name of the member to remove
- *
- * Removes @member_name from @object, freeing its allocated resources.
- */
-void
-json_object_remove_member (JsonObject  *object,
-                           const gchar *member_name)
-{
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (member_name != NULL);
-
-  g_hash_table_remove (object->members, member_name);
-}
-
-typedef struct _ForeachClosure  ForeachClosure;
-
-struct _ForeachClosure
-{
-  JsonObject *object;
-
-  JsonObjectForeach func;
-  gpointer data;
-};
-
-static void
-json_object_foreach_internal (gpointer key,
-                              gpointer value,
-                              gpointer data)
-{
-  ForeachClosure *clos = data;
-  const gchar *member_name = key;
-  JsonNode *member_node = value;
-
-  clos->func (clos->object, member_name, member_node, clos->data);
-}
-
-/*
- * json_object_foreach_member:
- * @object: a #JsonObject
- * @func: the function to be called on each member
- * @data: data to be passed to the function
- *
- * Iterates over all members of @object and calls @func on
- * each one of them.
- *
- * It is safe to change the value of a #JsonNode of the @object
- * from within the iterator @func, but it is not safe to add or
- * remove members from the @object.
- *
- * Since: 0.8
- */
-void
-json_object_foreach_member (JsonObject        *object,
-                            JsonObjectForeach  func,
-                            gpointer           data)
-{
-  ForeachClosure clos;
-
-  g_return_if_fail (object != NULL);
-  g_return_if_fail (func != NULL);
-
-  clos.object = object;
-  clos.func = func;
-  clos.data = data;
-  g_hash_table_foreach (object->members,
-                        json_object_foreach_internal,
-                        &clos);
-}
diff --git a/clutter/json/json-parser.c b/clutter/json/json-parser.c
deleted file mode 100644 (file)
index 0cd2f64..0000000
+++ /dev/null
@@ -1,1124 +0,0 @@
-/* json-parser.c - JSON streams parser
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@openedhand.com>
- */
-
-/*
- * SECTION:json-parser
- * @short_description: Parse JSON data streams
- *
- * #JsonParser provides an object for parsing a JSON data stream, either
- * inside a file or inside a static buffer.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <string.h>
-
-#include "json-types-private.h"
-
-#include "json-marshal.h"
-#include "json-parser.h"
-
-GQuark
-json_parser_error_quark (void)
-{
-  return g_quark_from_static_string ("json-parser-error");
-}
-
-#define JSON_PARSER_GET_PRIVATE(obj) \
-        (G_TYPE_INSTANCE_GET_PRIVATE ((obj), JSON_TYPE_PARSER, JsonParserPrivate))
-
-struct _JsonParserPrivate
-{
-  JsonNode *root;
-  JsonNode *current_node;
-
-  GScanner *scanner;
-
-  GError *last_error;
-};
-
-static const GScannerConfig json_scanner_config =
-{
-  ( " \t\r\n" )                /* cset_skip_characters */,
-  (
-   "_"
-   G_CSET_a_2_z
-   G_CSET_A_2_Z
-  )                    /* cset_identifier_first */,
-  (
-   G_CSET_DIGITS
-   "-_"
-   G_CSET_a_2_z
-   G_CSET_A_2_Z
-  )                    /* cset_identifier_nth */,
-  ( "#\n" )            /* cpair_comment_single */,
-  TRUE                 /* case_sensitive */,
-  TRUE                 /* skip_comment_multi */,
-  TRUE                 /* skip_comment_single */,
-  FALSE                        /* scan_comment_multi */,
-  TRUE                 /* scan_identifier */,
-  TRUE                 /* scan_identifier_1char */,
-  FALSE                        /* scan_identifier_NULL */,
-  TRUE                 /* scan_symbols */,
-  TRUE                 /* scan_binary */,
-  TRUE                 /* scan_octal */,
-  TRUE                 /* scan_float */,
-  TRUE                 /* scan_hex */,
-  TRUE                 /* scan_hex_dollar */,
-  TRUE                 /* scan_string_sq */,
-  TRUE                 /* scan_string_dq */,
-  TRUE                 /* numbers_2_int */,
-  FALSE                        /* int_2_float */,
-  FALSE                        /* identifier_2_string */,
-  TRUE                 /* char_2_token */,
-  TRUE                 /* symbol_2_token */,
-  FALSE                        /* scope_0_fallback */,
-  TRUE                  /* store_int64 */
-};
-
-
-static const gchar symbol_names[] =
-  "true\0"
-  "false\0"
-  "null\0";
-
-static const struct
-{
-  guint name_offset;
-  guint token;
-} symbols[] = {
-  {  0, JSON_TOKEN_TRUE },
-  {  5, JSON_TOKEN_FALSE },
-  { 11, JSON_TOKEN_NULL }
-};
-
-static const guint n_symbols = G_N_ELEMENTS (symbols);
-
-enum
-{
-  PARSE_START,
-  OBJECT_START,
-  OBJECT_MEMBER,
-  OBJECT_END,
-  ARRAY_START,
-  ARRAY_ELEMENT,
-  ARRAY_END,
-  PARSE_END,
-  ERROR,
-
-  LAST_SIGNAL
-};
-
-static guint parser_signals[LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (JsonParser, json_parser, G_TYPE_OBJECT);
-
-static guint json_parse_array  (JsonParser *parser,
-                                GScanner   *scanner,
-                                gboolean    nested);
-static guint json_parse_object (JsonParser *parser,
-                                GScanner   *scanner,
-                                gboolean    nested);
-
-static void
-json_parser_dispose (GObject *gobject)
-{
-  JsonParserPrivate *priv = JSON_PARSER_GET_PRIVATE (gobject);
-
-  if (priv->root)
-    {
-      json_node_free (priv->root);
-      priv->root = NULL;
-    }
-
-  if (priv->last_error)
-    {
-      g_error_free (priv->last_error);
-      priv->last_error = NULL;
-    }
-
-  G_OBJECT_CLASS (json_parser_parent_class)->dispose (gobject);
-}
-
-static void
-json_parser_class_init (JsonParserClass *klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  g_type_class_add_private (klass, sizeof (JsonParserPrivate));
-
-  gobject_class->dispose = json_parser_dispose;
-
-  /*
-   * JsonParser::parse-start:
-   * @parser: the #JsonParser that received the signal
-   * 
-   * The ::parse-start signal is emitted when the parser began parsing
-   * a JSON data stream.
-   */
-  parser_signals[PARSE_START] =
-    g_signal_new ("parse-start",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, parse_start),
-                  NULL, NULL,
-                  _json_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  /*
-   * JsonParser::parse-end:
-   * @parser: the #JsonParser that received the signal
-   *
-   * The ::parse-end signal is emitted when the parser successfully
-   * finished parsing a JSON data stream
-   */
-  parser_signals[PARSE_END] =
-    g_signal_new ("parse-end",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, parse_end),
-                  NULL, NULL,
-                  _json_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  /*
-   * JsonParser::object-start:
-   * @parser: the #JsonParser that received the signal
-   * 
-   * The ::object-start signal is emitted each time the #JsonParser
-   * starts parsing a #JsonObject.
-   */
-  parser_signals[OBJECT_START] =
-    g_signal_new ("object-start",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, object_start),
-                  NULL, NULL,
-                  _json_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  /*
-   * JsonParser::object-member:
-   * @parser: the #JsonParser that received the signal
-   * @object: a #JsonObject
-   * @member_name: the name of the newly parsed member
-   *
-   * The ::object-member signal is emitted each time the #JsonParser
-   * has successfully parsed a single member of a #JsonObject. The
-   * object and member are passed to the signal handlers.
-   */
-  parser_signals[OBJECT_MEMBER] =
-    g_signal_new ("object-member",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, object_member),
-                  NULL, NULL,
-                  _json_marshal_VOID__BOXED_STRING,
-                  G_TYPE_NONE, 2,
-                  JSON_TYPE_OBJECT,
-                  G_TYPE_STRING);
-  /*
-   * JsonParser::object-end:
-   * @parser: the #JsonParser that received the signal
-   * @object: the parsed #JsonObject
-   *
-   * The ::object-end signal is emitted each time the #JsonParser
-   * has successfully parsed an entire #JsonObject.
-   */
-  parser_signals[OBJECT_END] =
-    g_signal_new ("object-end",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, object_end),
-                  NULL, NULL,
-                  _json_marshal_VOID__BOXED,
-                  G_TYPE_NONE, 1,
-                  JSON_TYPE_OBJECT);
-  /*
-   * JsonParser::array-start:
-   * @parser: the #JsonParser that received the signal
-   *
-   * The ::array-start signal is emitted each time the #JsonParser
-   * starts parsing a #JsonArray
-   */
-  parser_signals[ARRAY_START] =
-    g_signal_new ("array-start",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, array_start),
-                  NULL, NULL,
-                  _json_marshal_VOID__VOID,
-                  G_TYPE_NONE, 0);
-  /*
-   * JsonParser::array-element:
-   * @parser: the #JsonParser that received the signal
-   * @array: a #JsonArray
-   * @index_: the index of the newly parsed element
-   *
-   * The ::array-element signal is emitted each time the #JsonParser
-   * has successfully parsed a single element of a #JsonArray. The
-   * array and element index are passed to the signal handlers.
-   */
-  parser_signals[ARRAY_ELEMENT] =
-    g_signal_new ("array-element",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, array_element),
-                  NULL, NULL,
-                  _json_marshal_VOID__BOXED_INT,
-                  G_TYPE_NONE, 2,
-                  JSON_TYPE_ARRAY,
-                  G_TYPE_INT);
-  /*
-   * JsonParser::array-end:
-   * @parser: the #JsonParser that received the signal
-   * @array: the parsed #JsonArrary
-   *
-   * The ::array-end signal is emitted each time the #JsonParser
-   * has successfully parsed an entire #JsonArray
-   */
-  parser_signals[ARRAY_END] =
-    g_signal_new ("array-end",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, array_end),
-                  NULL, NULL,
-                  _json_marshal_VOID__BOXED,
-                  G_TYPE_NONE, 1,
-                  JSON_TYPE_ARRAY);
-  /*
-   * JsonParser::error:
-   * @parser: the parser instance that received the signal
-   * @error: a pointer to the #GError
-   *
-   * The ::error signal is emitted each time a #JsonParser encounters
-   * an error in a JSON stream.
-   */
-  parser_signals[ERROR] =
-    g_signal_new ("error",
-                  G_OBJECT_CLASS_TYPE (gobject_class),
-                  G_SIGNAL_RUN_LAST,
-                  G_STRUCT_OFFSET (JsonParserClass, error),
-                  NULL, NULL,
-                  _json_marshal_VOID__POINTER,
-                  G_TYPE_NONE, 1,
-                  G_TYPE_POINTER);
-}
-
-static void
-json_parser_init (JsonParser *parser)
-{
-  JsonParserPrivate *priv;
-
-  parser->priv = priv = JSON_PARSER_GET_PRIVATE (parser);
-
-  priv->root = NULL;
-  priv->current_node = NULL;
-}
-
-static guint
-json_parse_array (JsonParser *parser,
-                  GScanner   *scanner,
-                  gboolean    nested)
-{
-  JsonParserPrivate *priv = parser->priv;
-  JsonArray *array;
-  guint token;
-
-  if (!nested)
-    {
-      /* the caller already swallowed the opening '[' */
-      token = g_scanner_get_next_token (scanner);
-      if (token != G_TOKEN_LEFT_BRACE)
-        return G_TOKEN_LEFT_BRACE;
-    }
-
-  g_signal_emit (parser, parser_signals[ARRAY_START], 0);
-
-  array = json_array_new ();
-
-  token = g_scanner_get_next_token (scanner);
-  while (token != G_TOKEN_RIGHT_BRACE)
-    {
-      JsonNode *node = NULL;
-      gboolean negative = FALSE;
-
-      /* nested object */
-      if (token == G_TOKEN_LEFT_CURLY)
-        {
-          JsonNode *old_node = priv->current_node;
-
-          priv->current_node = json_node_new (JSON_NODE_OBJECT);
-
-          token = json_parse_object (parser, scanner, TRUE);
-
-          node = priv->current_node;
-          priv->current_node = old_node;
-
-          if (token != G_TOKEN_NONE)
-            {
-              json_node_free (node);
-              json_array_unref (array);
-
-              return token;
-            }
-
-          json_array_add_element (array, node);
-          node->parent = priv->current_node;
-
-          g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
-                         array,
-                         json_array_get_length (array));
-
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_BRACE)
-            break;
-
-          if (token == G_TOKEN_COMMA)
-            {
-              token = g_scanner_get_next_token (scanner);
-              if (token == G_TOKEN_RIGHT_BRACE)
-                return G_TOKEN_SYMBOL;
-
-              continue;
-            }
-
-          json_array_unref (array);
-
-          return G_TOKEN_RIGHT_BRACE;
-        }
-
-      /* nested array */
-      if (token == G_TOKEN_LEFT_BRACE)
-        {
-          JsonNode *old_node = priv->current_node;
-
-          priv->current_node = json_node_new (JSON_NODE_ARRAY);
-
-          token = json_parse_array (parser, scanner, TRUE);
-
-          node = priv->current_node;
-          priv->current_node = old_node;
-
-          if (token != G_TOKEN_NONE)
-            {
-              json_node_free (node);
-              json_array_unref (array);
-
-              return token;
-            }
-
-          json_array_add_element (array, node);
-          node->parent = priv->current_node;
-
-          g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
-                         array,
-                         json_array_get_length (array));
-
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_BRACE)
-            break;
-
-          if (token == G_TOKEN_COMMA)
-            {
-              token = g_scanner_get_next_token (scanner);
-              if (token == G_TOKEN_RIGHT_BRACE)
-                return G_TOKEN_SYMBOL;
-
-              continue;
-            }
-
-          json_array_unref (array);
-
-          return G_TOKEN_RIGHT_BRACE;
-        }
-
-      if (token == '-')
-        {
-          guint next_token = g_scanner_peek_next_token (scanner);
-
-          if (next_token == G_TOKEN_INT ||
-              next_token == G_TOKEN_FLOAT)
-            {
-              negative = TRUE;
-              token = g_scanner_get_next_token (scanner);
-            }
-          else
-            {
-              json_array_unref (array);
-
-              return G_TOKEN_INT;
-            }
-        }
-
-      switch (token)
-        {
-        case G_TOKEN_INT:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_int (node, negative ? scanner->value.v_int64 * -1
-                                            : scanner->value.v_int64);
-          break;
-
-        case G_TOKEN_FLOAT:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_double (node, negative ? scanner->value.v_float * -1.0
-                                               : scanner->value.v_float);
-          break;
-
-        case G_TOKEN_STRING:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_string (node, scanner->value.v_string);
-          break;
-
-        case JSON_TOKEN_TRUE:
-        case JSON_TOKEN_FALSE:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_boolean (node, token == JSON_TOKEN_TRUE ? TRUE
-                                                                : FALSE);
-          break;
-
-        case JSON_TOKEN_NULL:
-          node = json_node_new (JSON_NODE_NULL);
-          break;
-
-        default:
-          json_array_unref (array);
-          return G_TOKEN_RIGHT_BRACE;
-        }
-
-      if (node)
-        {
-          json_array_add_element (array, node);
-          node->parent = priv->current_node;
-
-          g_signal_emit (parser, parser_signals[ARRAY_ELEMENT], 0,
-                         array,
-                         json_array_get_length (array));
-        }
-
-      token = g_scanner_get_next_token (scanner);
-
-      if (token == G_TOKEN_COMMA)
-        {
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_BRACE)
-            return G_TOKEN_SYMBOL;
-        }
-      else if (token != G_TOKEN_RIGHT_BRACE)
-        {
-          json_array_unref (array);
-
-          return G_TOKEN_RIGHT_BRACE;
-        }
-    }
-
-  json_node_take_array (priv->current_node, array);
-
-  g_signal_emit (parser, parser_signals[ARRAY_END], 0, array);
-
-  return G_TOKEN_NONE;
-}
-
-static guint
-json_parse_object (JsonParser *parser,
-                   GScanner   *scanner,
-                   gboolean    nested)
-{
-  JsonParserPrivate *priv = parser->priv;
-  JsonObject *object;
-  guint token;
-
-  if (!nested)
-    {
-      /* the caller already swallowed the opening '{' */
-      token = g_scanner_get_next_token (scanner);
-      if (token != G_TOKEN_LEFT_CURLY)
-        return G_TOKEN_LEFT_CURLY;
-    }
-
-  g_signal_emit (parser, parser_signals[OBJECT_START], 0);
-
-  object = json_object_new ();
-
-  token = g_scanner_get_next_token (scanner);
-  while (token != G_TOKEN_RIGHT_CURLY)
-    {
-      JsonNode *node = NULL;
-      gchar *name = NULL;
-      gboolean negative = FALSE;
-
-      if (token == G_TOKEN_STRING)
-        {
-          name = g_strdup (scanner->value.v_string);
-
-          token = g_scanner_get_next_token (scanner);
-          if (token != ':')
-            {
-              g_free (name);
-              json_object_unref (object);
-
-              return ':';
-            }
-          else
-            {
-              /* swallow the colon */
-              token = g_scanner_get_next_token (scanner);
-            }
-        }
-
-      if (!name)
-        {
-          json_object_unref (object);
-
-          return G_TOKEN_STRING;
-        }
-
-      /* nested object */
-      if (token == G_TOKEN_LEFT_CURLY)
-        {
-          JsonNode *old_node = priv->current_node;
-      
-          priv->current_node = json_node_new (JSON_NODE_OBJECT);
-
-          token = json_parse_object (parser, scanner, TRUE);
-
-          node = priv->current_node;
-          priv->current_node = old_node;
-
-          if (token != G_TOKEN_NONE)
-            {
-              g_free (name);
-              
-              if (node)
-                json_node_free (node);
-
-              json_object_unref (object);
-
-              return token;
-            }
-
-          json_object_set_member (object, name, node);
-          node->parent = priv->current_node;
-
-          g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
-                         object,
-                         name);
-
-          g_free (name);
-
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_CURLY)
-            break;
-
-          if (token == G_TOKEN_COMMA)
-            {
-              token = g_scanner_get_next_token (scanner);
-              if (token == G_TOKEN_RIGHT_CURLY)
-                return G_TOKEN_SYMBOL;
-
-              continue;
-            }
-
-          json_object_unref (object);
-
-          return G_TOKEN_RIGHT_CURLY;
-        }
-
-      /* nested array */
-      if (token == G_TOKEN_LEFT_BRACE)
-        {
-          JsonNode *old_node = priv->current_node;
-
-          priv->current_node = json_node_new (JSON_NODE_ARRAY);
-
-          token = json_parse_array (parser, scanner, TRUE);
-
-          node = priv->current_node;
-          priv->current_node = old_node;
-
-          if (token != G_TOKEN_NONE)
-            {
-              g_free (name);
-              json_node_free (node);
-              json_object_unref (object);
-
-              return token;
-            }
-
-          json_object_set_member (object, name, node);
-          node->parent = priv->current_node;
-          
-          g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
-                         object,
-                         name);
-
-          g_free (name);
-
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_CURLY)
-            break;
-
-          if (token == G_TOKEN_COMMA)
-            {
-              token = g_scanner_get_next_token (scanner);
-              if (token == G_TOKEN_RIGHT_CURLY)
-                return G_TOKEN_SYMBOL;
-
-              continue;
-            }
-
-          json_object_unref (object);
-
-          return G_TOKEN_RIGHT_CURLY;
-        }
-
-      if (token == '-')
-        {
-          guint next_token = g_scanner_peek_next_token (scanner);
-
-          if (next_token == G_TOKEN_INT || next_token == G_TOKEN_FLOAT)
-            {
-              negative = TRUE;
-              token = g_scanner_get_next_token (scanner);
-            }
-          else
-            {
-              json_object_unref (object);
-
-              return G_TOKEN_INT;
-            }
-        }
-
-      switch (token)
-        {
-        case G_TOKEN_INT:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_int (node, negative ? scanner->value.v_int64 * -1
-                                            : scanner->value.v_int64);
-          break;
-
-        case G_TOKEN_FLOAT:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_double (node, negative ? scanner->value.v_float * -1.0
-                                               : scanner->value.v_float);
-          break;
-
-        case G_TOKEN_STRING:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_string (node, scanner->value.v_string);
-          break;
-
-        case JSON_TOKEN_TRUE:
-        case JSON_TOKEN_FALSE:
-          node = json_node_new (JSON_NODE_VALUE);
-          json_node_set_boolean (node, token == JSON_TOKEN_TRUE ? TRUE
-                                                                : FALSE);
-          break;
-
-        case JSON_TOKEN_NULL:
-          node = json_node_new (JSON_NODE_NULL);
-          break;
-
-        default:
-          json_object_unref (object);
-          return G_TOKEN_SYMBOL;
-        }
-
-      if (node)
-        {
-          json_object_set_member (object, name, node);
-          node->parent = priv->current_node;
-          
-          g_signal_emit (parser, parser_signals[OBJECT_MEMBER], 0,
-                         object,
-                         name);
-        }
-
-      g_free (name);
-
-      token = g_scanner_get_next_token (scanner);
-
-      if (token == G_TOKEN_COMMA)
-        {
-          token = g_scanner_get_next_token (scanner);
-          if (token == G_TOKEN_RIGHT_CURLY)
-            return G_TOKEN_SYMBOL;
-        }
-      else if (token != G_TOKEN_RIGHT_CURLY)
-        {
-          json_object_unref (object);
-
-          return G_TOKEN_RIGHT_CURLY;
-        }
-    }
-
-  json_node_take_object (priv->current_node, object);
-
-  g_signal_emit (parser, parser_signals[OBJECT_END], 0, object);
-
-  return G_TOKEN_NONE;
-}
-
-static guint
-json_parse_statement (JsonParser *parser,
-                      GScanner   *scanner)
-{
-  JsonParserPrivate *priv = parser->priv;
-  guint token;
-
-  token = g_scanner_peek_next_token (scanner);
-  switch (token)
-    {
-    case G_TOKEN_LEFT_CURLY:
-      priv->root = priv->current_node = json_node_new (JSON_NODE_OBJECT);
-      return json_parse_object (parser, scanner, FALSE);
-
-    case G_TOKEN_LEFT_BRACE:
-      priv->root = priv->current_node = json_node_new (JSON_NODE_ARRAY);
-      return json_parse_array (parser, scanner, FALSE);
-
-    case JSON_TOKEN_NULL:
-      priv->root = priv->current_node = json_node_new (JSON_NODE_NULL);
-      return G_TOKEN_NONE;
-
-    case JSON_TOKEN_TRUE:
-    case JSON_TOKEN_FALSE:
-      priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
-      json_node_set_boolean (priv->current_node,
-                             token == JSON_TOKEN_TRUE ? TRUE : FALSE);
-      return G_TOKEN_NONE;
-
-    case '-':
-      {
-        guint next_token = g_scanner_peek_next_token (scanner);
-
-        if (next_token == G_TOKEN_INT || next_token == G_TOKEN_FLOAT)
-          {
-            priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
-            
-            token = g_scanner_get_next_token (scanner);
-            switch (token)
-              {
-              case G_TOKEN_INT:
-                json_node_set_int (priv->current_node, scanner->value.v_int64);
-                break;
-              case G_TOKEN_FLOAT:
-                json_node_set_double (priv->current_node, scanner->value.v_float);
-                break;
-              default:
-                break;
-              }
-
-            return G_TOKEN_NONE;
-          }
-        else
-          return G_TOKEN_INT;
-      }
-      break;
-
-    case G_TOKEN_INT:
-    case G_TOKEN_FLOAT:
-    case G_TOKEN_STRING:
-      priv->root = priv->current_node = json_node_new (JSON_NODE_VALUE);
-      if (token == G_TOKEN_INT)
-        json_node_set_int (priv->current_node, scanner->value.v_int64);
-      else if (token == G_TOKEN_FLOAT)
-        json_node_set_double (priv->current_node, scanner->value.v_float);
-      else
-        json_node_set_string (priv->current_node, scanner->value.v_string);
-      return G_TOKEN_NONE;
-
-    default:
-      g_scanner_get_next_token (scanner);
-      return G_TOKEN_SYMBOL;
-    }
-}
-
-static void
-json_scanner_msg_handler (GScanner *scanner,
-                          gchar    *message,
-                          gboolean  is_error)
-{
-  JsonParser *parser = scanner->user_data;
-
-  if (is_error)
-    {
-      GError *error = NULL;
-
-      g_set_error (&error, JSON_PARSER_ERROR,
-                   JSON_PARSER_ERROR_PARSE,
-                   "Parse error on line %d: %s",
-                   scanner->line,
-                   message);
-      
-      parser->priv->last_error = error;
-      g_signal_emit (parser, parser_signals[ERROR], 0, error);
-    }
-  else
-    g_warning ("Line %d: %s", scanner->line, message);
-}
-
-static GScanner *
-json_scanner_new (JsonParser *parser)
-{
-  GScanner *scanner;
-
-  scanner = g_scanner_new (&json_scanner_config);
-  scanner->msg_handler = json_scanner_msg_handler;
-  scanner->user_data = parser;
-
-  return scanner;
-}
-
-/*
- * json_parser_new:
- * 
- * Creates a new #JsonParser instance. You can use the #JsonParser to
- * load a JSON stream from either a file or a buffer and then walk the
- * hierarchy using the data types API.
- *
- * Return value: the newly created #JsonParser. Use g_object_unref()
- *   to release all the memory it allocates.
- */
-JsonParser *
-json_parser_new (void)
-{
-  return g_object_new (JSON_TYPE_PARSER, NULL);
-}
-
-/*
- * json_parser_load_from_file:
- * @parser: a #JsonParser
- * @filename: the path for the file to parse
- * @error: return location for a #GError, or %NULL
- *
- * Loads a JSON stream from the content of @filename and parses it. See
- * json_parser_load_from_data().
- *
- * Return value: %TRUE if the file was successfully loaded and parsed.
- *   In case of error, @error is set accordingly and %FALSE is returned
- */
-gboolean
-json_parser_load_from_file (JsonParser   *parser,
-                            const gchar  *filename,
-                            GError      **error)
-{
-  GError *internal_error;
-  gchar *data;
-  gsize length;
-  gboolean retval = TRUE;
-
-  g_return_val_if_fail (JSON_IS_PARSER (parser), FALSE);
-  g_return_val_if_fail (filename != NULL, FALSE);
-
-  internal_error = NULL;
-  if (!g_file_get_contents (filename, &data, &length, &internal_error))
-    {
-      g_propagate_error (error, internal_error);
-      return FALSE;
-    }
-
-  if (!json_parser_load_from_data (parser, data, length, &internal_error))
-    {
-      g_propagate_error (error, internal_error);
-      retval = FALSE;
-    }
-  
-  g_free (data);
-
-  return retval;
-}
-
-/*
- * json_parser_load_from_data:
- * @parser: a #JsonParser
- * @data: the buffer to parse
- * @length: the length of the buffer, or -1
- * @error: return location for a #GError, or %NULL
- *
- * Loads a JSON stream from a buffer and parses it. You can call this function
- * multiple times with the same #JsonParser object, but the contents of the
- * parser will be destroyed each time.
- *
- * Return value: %TRUE if the buffer was succesfully parser. In case
- *   of error, @error is set accordingly and %FALSE is returned
- */
-gboolean
-json_parser_load_from_data (JsonParser   *parser,
-                            const gchar  *data,
-                            gssize        length,
-                            GError      **error)
-{
-  GScanner *scanner;
-  gboolean done;
-  gboolean retval = TRUE;
-  gint i;
-
-  g_return_val_if_fail (JSON_IS_PARSER (parser), FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
-
-  if (length < 0)
-    length = strlen (data);
-
-  if (parser->priv->root)
-    {
-      json_node_free (parser->priv->root);
-      parser->priv->root = NULL;
-    }
-
-  scanner = json_scanner_new (parser);
-  g_scanner_input_text (scanner, data, length);
-
-  for (i = 0; i < n_symbols; i++)
-    {
-      g_scanner_scope_add_symbol (scanner, 0,
-                                  symbol_names + symbols[i].name_offset,
-                                  GINT_TO_POINTER (symbols[i].token));
-    }
-
-  parser->priv->scanner = scanner;
-
-  g_signal_emit (parser, parser_signals[PARSE_START], 0);
-
-  done = FALSE;
-  while (!done)
-    {
-      if (g_scanner_peek_next_token (scanner) == G_TOKEN_EOF)
-        done = TRUE;
-      else
-        {
-          guint expected_token;
-
-          expected_token = json_parse_statement (parser, scanner);
-          if (expected_token != G_TOKEN_NONE)
-            {
-              const gchar *symbol_name;
-              gchar *msg;
-
-              msg = NULL;
-              symbol_name = NULL;
-              if (scanner->scope_id == 0)
-                {
-                  if (expected_token > JSON_TOKEN_INVALID &&
-                      expected_token < JSON_TOKEN_LAST)
-                    {
-                      for (i = 0; i < n_symbols; i++)
-                        if (symbols[i].token == expected_token)
-                          symbol_name = symbol_names + symbols[i].name_offset;
-
-                      if (!msg)
-                        msg = g_strconcat ("e.g. '", symbol_name, "'", NULL);
-                    }
-
-                  if (scanner->token > JSON_TOKEN_INVALID &&
-                      scanner->token < JSON_TOKEN_LAST)
-                    {
-                      symbol_name = "???";
-
-                      for (i = 0; i < n_symbols; i++)
-                        if (symbols[i].token == scanner->token)
-                          symbol_name = symbol_names + symbols[i].name_offset;
-                    }
-                }
-
-              /* this will emit the ::error signal via the custom
-               * message handler we install
-               */
-              g_scanner_unexp_token (scanner, expected_token,
-                                     NULL, "keyword",
-                                     symbol_name, msg,
-                                     TRUE);
-
-              if (parser->priv->last_error)
-                {
-                  g_propagate_error (error, parser->priv->last_error);
-                  parser->priv->last_error = NULL;
-                }
-
-              retval = FALSE;
-
-              g_free (msg);
-              done = TRUE;
-            }
-        }
-    }
-
-  g_scanner_destroy (scanner);
-  parser->priv->scanner = NULL;
-  parser->priv->current_node = NULL;
-
-  g_signal_emit (parser, parser_signals[PARSE_END], 0);
-
-  return retval;
-}
-
-/*
- * json_parser_get_root:
- * @parser: a #JsonParser
- *
- * Retrieves the top level node from the parsed JSON stream.
- *
- * Return value: (transfer none): the root #JsonNode . The returned node
- *   is owned by the #JsonParser and should never be modified or freed.
- */
-JsonNode *
-json_parser_get_root (JsonParser *parser)
-{
-  g_return_val_if_fail (JSON_IS_PARSER (parser), NULL);
-
-  return parser->priv->root;
-}
-
-/*
- * json_parser_get_current_line:
- * @parser: a #JsonParser
- *
- * Retrieves the line currently parsed, starting from 1.
- *
- * Return value: the currently parsed line.
- */
-guint
-json_parser_get_current_line (JsonParser *parser)
-{
-  g_return_val_if_fail (JSON_IS_PARSER (parser), 0);
-
-  if (parser->priv->scanner)
-    return g_scanner_cur_line (parser->priv->scanner);
-
-  return 0;
-}
-
-/*
- * json_parser_get_current_pos:
- * @parser: a #JsonParser
- *
- * Retrieves the current position inside the current line, starting
- * from 0.
- *
- * Return value: the position in the current line
- */
-guint
-json_parser_get_current_pos (JsonParser *parser)
-{
-  g_return_val_if_fail (JSON_IS_PARSER (parser), 0);
-
-  if (parser->priv->scanner)
-    return g_scanner_cur_line (parser->priv->scanner);
-
-  return 0;
-}
diff --git a/clutter/json/json-parser.h b/clutter/json/json-parser.h
deleted file mode 100644 (file)
index 11638a6..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-/* json-parser.h - JSON streams parser
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@openedhand.com>
- */
-
-#ifndef __JSON_PARSER_H__
-#define __JSON_PARSER_H__
-
-#include <glib-object.h>
-#include "json-types.h"
-
-G_BEGIN_DECLS
-
-#define JSON_TYPE_PARSER                (json_parser_get_type ())
-#define JSON_PARSER(obj)                (G_TYPE_CHECK_INSTANCE_CAST ((obj), JSON_TYPE_PARSER, JsonParser))
-#define JSON_IS_PARSER(obj)             (G_TYPE_CHECK_INSTANCE_TYPE ((obj), JSON_TYPE_PARSER))
-#define JSON_PARSER_CLASS(klass)        (G_TYPE_CHECK_CLASS_CAST ((klass), JSON_TYPE_PARSER, JsonParserClass))
-#define JSON_IS_PARSER_CLASS(klass)     (G_TYPE_CHECK_CLASS_TYPE ((klass), JSON_TYPE_PARSER))
-#define JSON_PARSER_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS ((obj), JSON_TYPE_PARSER, JsonParserClass))
-
-#define JSON_PARSER_ERROR               (json_parser_error_quark ())
-
-typedef struct _JsonParser              JsonParser;
-typedef struct _JsonParserPrivate       JsonParserPrivate;
-typedef struct _JsonParserClass         JsonParserClass;
-
-/**
- * JsonParserError:
- * @JSON_PARSER_ERROR_PARSE: parse error
- * @JSON_PARSER_ERROR_UNKNOWN: unknown error
- *
- * Error enumeration for #JsonParser
- */
-typedef enum {
-  JSON_PARSER_ERROR_PARSE,
-  
-  JSON_PARSER_ERROR_UNKNOWN
-} JsonParserError;
-
-typedef enum {
-  JSON_TOKEN_INVALID = G_TOKEN_LAST,
-  JSON_TOKEN_TRUE,
-  JSON_TOKEN_FALSE,
-  JSON_TOKEN_NULL,
-  JSON_TOKEN_LAST
-} JsonTokenType;
-
-/**
- * JsonParser:
- * 
- * JSON data streams parser. The contents of the #JsonParser structure are
- * private and should only be accessed via the provided API.
- */
-struct _JsonParser
-{
-  /*< private >*/
-  GObject parent_instance;
-
-  JsonParserPrivate *priv;
-};
-
-/**
- * JsonParserClass:
- * @parse_start: class handler for the JsonParser::parse-start signal
- * @object_start: class handler for the JsonParser::object-start signal
- * @object_member: class handler for the JsonParser::object-member signal
- * @object_end: class handler for the JsonParser::object-end signal
- * @array_start: class handler for the JsonParser::array-start signal
- * @array_element: class handler for the JsonParser::array-element signal
- * @array_end: class handler for the JsonParser::array-end signal
- * @parse_end: class handler for the JsonParser::parse-end signal
- * @error: class handler for the JsonParser::error signal
- *
- * #JsonParser class.
- */
-struct _JsonParserClass
-{
-  /*< private >*/
-  GObjectClass parent_class;
-
-  /*< public  >*/
-  void (* parse_start)   (JsonParser   *parser);
-
-  void (* object_start)  (JsonParser   *parser);
-  void (* object_member) (JsonParser   *parser,
-                          JsonObject   *object,
-                          const gchar  *member_name);
-  void (* object_end)    (JsonParser   *parser,
-                          JsonObject   *object);
-
-  void (* array_start)   (JsonParser   *parser);
-  void (* array_element) (JsonParser   *parser,
-                          JsonArray    *array,
-                          gint          index_);
-  void (* array_end)     (JsonParser   *parser,
-                          JsonArray    *array);
-
-  void (* parse_end)     (JsonParser   *parser);
-  
-  void (* error)         (JsonParser   *parser,
-                          const GError *error);
-
-  /*< private >*/
-  /* padding for future expansion */
-  void (* _json_reserved1) (void);
-  void (* _json_reserved2) (void);
-  void (* _json_reserved3) (void);
-  void (* _json_reserved4) (void);
-  void (* _json_reserved5) (void);
-  void (* _json_reserved6) (void);
-  void (* _json_reserved7) (void);
-  void (* _json_reserved8) (void);
-};
-
-GQuark      json_parser_error_quark    (void);
-GType       json_parser_get_type       (void) G_GNUC_CONST;
-
-JsonParser *json_parser_new              (void);
-gboolean    json_parser_load_from_file   (JsonParser   *parser,
-                                          const gchar  *filename,
-                                          GError      **error);
-gboolean    json_parser_load_from_data   (JsonParser   *parser,
-                                          const gchar  *data,
-                                          gssize        length,
-                                          GError      **error);
-JsonNode *  json_parser_get_root         (JsonParser   *parser);
-
-guint       json_parser_get_current_line (JsonParser   *parser);
-guint       json_parser_get_current_pos  (JsonParser   *parser);
-
-G_END_DECLS
-
-#endif /* __JSON_PARSER_H__ */
diff --git a/clutter/json/json-types-private.h b/clutter/json/json-types-private.h
deleted file mode 100644 (file)
index 728b367..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/* json-types-private.h - JSON data types private header
- *
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-#ifndef __JSON_TYPES_PRIVATE_H__
-#define __JSON_TYPES_PRIVATE_H__
-
-#include "json-types.h"
-
-G_BEGIN_DECLS
-
-struct _JsonNode
-{
-  /*< private >*/
-  JsonNodeType type;
-
-  union {
-    JsonObject *object;
-    JsonArray *array;
-    GValue value;
-  } data;
-
-  JsonNode *parent;
-};
-
-struct _JsonArray
-{
-  GPtrArray *elements;
-
-  volatile gint ref_count;
-};
-
-struct _JsonObject
-{
-  GHashTable *members;
-
-  volatile gint ref_count;
-};
-
-G_END_DECLS
-
-#endif /* __JSON_TYPES_PRIVATE_H__ */
diff --git a/clutter/json/json-types.h b/clutter/json/json-types.h
deleted file mode 100644 (file)
index 5882412..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-/* json-types.h - JSON data types
- * 
- * This file is part of JSON-GLib
- * Copyright (C) 2007  OpenedHand Ltd.
- * Copyright (C) 2009  Intel Corp.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Author:
- *   Emmanuele Bassi  <ebassi@linux.intel.com>
- */
-
-#if !defined(__JSON_GLIB_INSIDE__) && !defined(JSON_COMPILATION)
-#error "Only <json-glib/json-glib.h> can be included directly."
-#endif
-
-#ifndef __JSON_TYPES_H__
-#define __JSON_TYPES_H__
-
-#include <glib-object.h>
-
-G_BEGIN_DECLS
-
-/**
- * JSON_NODE_TYPE:
- * @node: a #JsonNode
- *
- * Evaluates to the #JsonNodeType contained by @node
- */
-#define JSON_NODE_TYPE(node)    (json_node_get_node_type ((node)))
-
-#define JSON_TYPE_NODE          (json_node_get_type ())
-#define JSON_TYPE_OBJECT        (json_object_get_type ())
-#define JSON_TYPE_ARRAY         (json_array_get_type ())
-
-#define JSON_NODE_HOLDS(node,type)      (JSON_NODE_TYPE (node) == (type))
-#define JSON_NODE_HOLDS_VALUE(node)     (JSON_NODE_HOLDS (node, JSON_NODE_VALUE))
-#define JSON_NODE_HOLDS_ARRAY(node)     (JSON_NODE_HOLDS (node, JSON_NODE_ARRAY))
-#define JSON_NODE_HOLDS_OBJECT(node)    (JSON_NODE_HOLDS (node, JSON_NODE_OBJECT))
-#define JSON_NODE_HOLDS_NULL(node)      (JSON_NODE_HOLDS (node, JSON_NODE_NULL))
-
-/**
- * JsonNode:
- * @type: the type of node
- *
- * A generic container of JSON data types. The contents of the #JsonNode
- * structure are private and should only be accessed via the provided
- * functions and never directly.
- */
-typedef struct _JsonNode        JsonNode;
-
-/**
- * JsonObject:
- *
- * A JSON object type. The contents of the #JsonObject structure are private
- * and should only be accessed by the provided API
- */
-typedef struct _JsonObject      JsonObject;
-
-/**
- * JsonArray:
- *
- * A JSON array type. The contents of the #JsonArray structure are private
- * and should only be accessed by the provided API
- */
-typedef struct _JsonArray       JsonArray;
-
-/**
- * JsonNodeType:
- * @JSON_NODE_OBJECT: The node contains a #JsonObject
- * @JSON_NODE_ARRAY: The node contains a #JsonArray
- * @JSON_NODE_VALUE: The node contains a fundamental type
- * @JSON_NODE_NULL: Special type, for nodes containing null
- *
- * Indicates the content of a #JsonNode.
- */
-typedef enum {
-  JSON_NODE_OBJECT,
-  JSON_NODE_ARRAY,
-  JSON_NODE_VALUE,
-  JSON_NODE_NULL
-} JsonNodeType;
-
-/**
- * JsonObjectForeach:
- * @object: the iterated #JsonObject
- * @member_name: the name of the member
- * @member_node: a #JsonNode containing the @member_name value
- * @user_data: data passed to the function
- *
- * The function to be passed to json_object_foreach_member(). You
- * should not add or remove members to and from @object within
- * this function. It is safe to change the value of @member_node.
- *
- * Since: 0.8
- */
-typedef void (* JsonObjectForeach) (JsonObject  *object,
-                                    const gchar *member_name,
-                                    JsonNode    *member_node,
-                                    gpointer     user_data);
-
-/**
- * JsonArrayForeach:
- * @array: the iterated #JsonArray
- * @index_: the index of the element
- * @element_node: a #JsonNode containing the value at @index_
- * @user_data: data passed to the function
- *
- * The function to be passed to json_array_foreach_element(). You
- * should not add or remove elements to and from @array within
- * this function. It is safe to change the value of @element_node.
- *
- * Since: 0.8
- */
-typedef void (* JsonArrayForeach) (JsonArray  *array,
-                                   guint       index_,
-                                   JsonNode   *element_node,
-                                   gpointer    user_data);
-
-/*
- * JsonNode
- */
-GType                 json_node_get_type        (void) G_GNUC_CONST;
-JsonNode *            json_node_new             (JsonNodeType  type);
-JsonNode *            json_node_copy            (JsonNode     *node);
-void                  json_node_free            (JsonNode     *node);
-JsonNodeType          json_node_get_node_type   (JsonNode     *node);
-GType                 json_node_get_value_type  (JsonNode     *node);
-JsonNode *            json_node_get_parent      (JsonNode     *node);
-G_CONST_RETURN gchar *json_node_type_name       (JsonNode     *node);
-
-void                  json_node_set_object      (JsonNode     *node,
-                                                 JsonObject   *object);
-void                  json_node_take_object     (JsonNode     *node,
-                                                 JsonObject   *object);
-JsonObject *          json_node_get_object      (JsonNode     *node);
-JsonObject *          json_node_dup_object      (JsonNode     *node);
-void                  json_node_set_array       (JsonNode     *node,
-                                                 JsonArray    *array);
-void                  json_node_take_array      (JsonNode     *node,
-                                                 JsonArray    *array);
-JsonArray *           json_node_get_array       (JsonNode     *node);
-JsonArray *           json_node_dup_array       (JsonNode     *node);
-void                  json_node_set_value       (JsonNode     *node,
-                                                 const GValue *value);
-void                  json_node_get_value       (JsonNode     *node,
-                                                 GValue       *value);
-void                  json_node_set_string      (JsonNode     *node,
-                                                 const gchar  *value);
-G_CONST_RETURN gchar *json_node_get_string      (JsonNode     *node);
-gchar *               json_node_dup_string      (JsonNode     *node);
-void                  json_node_set_int         (JsonNode     *node,
-                                                 gint64        value);
-gint64                json_node_get_int         (JsonNode     *node);
-void                  json_node_set_double      (JsonNode     *node,
-                                                 gdouble       value);
-gdouble               json_node_get_double      (JsonNode     *node);
-void                  json_node_set_boolean     (JsonNode     *node,
-                                                 gboolean      value);
-gboolean              json_node_get_boolean     (JsonNode     *node);
-gboolean              json_node_is_null         (JsonNode     *node);
-
-/*
- * JsonObject
- */
-GType                 json_object_get_type           (void) G_GNUC_CONST;
-JsonObject *          json_object_new                (void);
-JsonObject *          json_object_ref                (JsonObject  *object);
-void                  json_object_unref              (JsonObject  *object);
-
-#ifndef JSON_DISABLE_DEPRECATED
-void                  json_object_add_member         (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      JsonNode    *node) G_GNUC_DEPRECATED;
-#endif /* JSON_DISABLE_DEPRECATED */
-
-void                  json_object_set_member         (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      JsonNode    *node);
-void                  json_object_set_int_member     (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      gint64       value);
-void                  json_object_set_double_member  (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      gdouble      value);
-void                  json_object_set_boolean_member (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      gboolean     value);
-void                  json_object_set_string_member  (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      const gchar *value);
-void                  json_object_set_null_member    (JsonObject  *object,
-                                                      const gchar *member_name);
-void                  json_object_set_array_member   (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      JsonArray   *value);
-void                  json_object_set_object_member  (JsonObject  *object,
-                                                      const gchar *member_name,
-                                                      JsonObject  *value);
-GList *               json_object_get_members        (JsonObject  *object);
-JsonNode *            json_object_get_member         (JsonObject  *object,
-                                                      const gchar *member_name);
-JsonNode *            json_object_dup_member         (JsonObject  *object,
-                                                      const gchar *member_name);
-gint64                json_object_get_int_member     (JsonObject  *object,
-                                                      const gchar *member_name);
-gdouble               json_object_get_double_member  (JsonObject  *object,
-                                                      const gchar *member_name);
-gboolean              json_object_get_boolean_member (JsonObject  *object,
-                                                      const gchar *member_name);
-G_CONST_RETURN gchar *json_object_get_string_member  (JsonObject  *object,
-                                                      const gchar *member_name);
-gboolean              json_object_get_null_member    (JsonObject  *object,
-                                                      const gchar *member_name);
-JsonArray *           json_object_get_array_member   (JsonObject  *object,
-                                                      const gchar *member_name);
-JsonObject *          json_object_get_object_member  (JsonObject  *object,
-                                                      const gchar *member_name);
-gboolean              json_object_has_member         (JsonObject  *object,
-                                                      const gchar *member_name);
-void                  json_object_remove_member      (JsonObject  *object,
-                                                      const gchar *member_name);
-GList *               json_object_get_values         (JsonObject  *object);
-guint                 json_object_get_size           (JsonObject  *object);
-void                  json_object_foreach_member     (JsonObject  *object,
-                                                      JsonObjectForeach func,
-                                                      gpointer     data);
-
-GType                 json_array_get_type            (void) G_GNUC_CONST;
-JsonArray *           json_array_new                 (void);
-JsonArray *           json_array_sized_new           (guint        n_elements);
-JsonArray *           json_array_ref                 (JsonArray   *array);
-void                  json_array_unref               (JsonArray   *array);
-void                  json_array_add_element         (JsonArray   *array,
-                                                      JsonNode    *node);
-void                  json_array_add_int_element     (JsonArray   *array,
-                                                      gint64       value);
-void                  json_array_add_double_element  (JsonArray   *array,
-                                                      gdouble      value);
-void                  json_array_add_boolean_element (JsonArray   *array,
-                                                      gboolean     value);
-void                  json_array_add_string_element  (JsonArray   *array,
-                                                      const gchar *value);
-void                  json_array_add_null_element    (JsonArray   *array);
-void                  json_array_add_array_element   (JsonArray   *array,
-                                                      JsonArray   *value);
-void                  json_array_add_object_element  (JsonArray   *array,
-                                                      JsonObject  *value);
-GList *               json_array_get_elements        (JsonArray   *array);
-JsonNode *            json_array_get_element         (JsonArray   *array,
-                                                      guint        index_);
-gint64                json_array_get_int_element     (JsonArray   *array,
-                                                      guint        index_);
-gdouble               json_array_get_double_element  (JsonArray   *array,
-                                                      guint        index_);
-gboolean              json_array_get_boolean_element (JsonArray   *array,
-                                                      guint        index_);
-G_CONST_RETURN gchar *json_array_get_string_element  (JsonArray   *array,
-                                                      guint        index_);
-gboolean              json_array_get_null_element    (JsonArray   *array,
-                                                      guint        index_);
-JsonArray *           json_array_get_array_element   (JsonArray   *array,
-                                                      guint        index_);
-JsonObject *          json_array_get_object_element  (JsonArray   *array,
-                                                      guint        index_);
-JsonNode *            json_array_dup_element         (JsonArray   *array,
-                                                      guint        index_);
-void                  json_array_remove_element      (JsonArray   *array,
-                                                      guint        index_);
-guint                 json_array_get_length          (JsonArray   *array);
-void                  json_array_foreach_element     (JsonArray   *array,
-                                                      JsonArrayForeach func,
-                                                      gpointer     data);
-
-G_END_DECLS
-
-#endif /* __JSON_TYPES_H__ */
index 95b7df4..b6d5a98 100644 (file)
@@ -795,80 +795,6 @@ AS_IF([test "x$SUPPORT_XLIB" = "x1"],
 
 AM_CONDITIONAL(X11_TESTS, [test "x$x11_tests" = "xyes"])
 
-dnl === JSON parser check =====================================================
-
-# we allow building clutter with the internal copy of json-glib
-# for platforms without it, but by default we depend on the
-# system copy
-m4_define([default_json], [system])
-AC_ARG_WITH([json],
-            AC_HELP_STRING([--with-json=@<:@internal/check/system@:>@],
-                           [Select the JSON-GLib copy to use @<:@default=default_json@:>@]),
-            [],
-            [with_json=default_json])
-
-experimental_json=no
-AS_CASE([$with_json],
-
-        [internal],
-        [
-          JSON_PREFIX=json
-          experimental_json=yes
-          have_json=no
-        ],
-
-        [system],
-        [
-          AC_MSG_CHECKING([for installed JSON-GLib])
-          PKG_CHECK_EXISTS([json-glib-1.0 >= 0.10],
-                           [have_json=yes],
-                           [have_json=no])
-          AS_IF([test "x$have_json" = "xyes"],
-                [
-                  JSON_PREFIX=json-glib
-                  JSON_GLIB_PC="json-glib-1.0 >= 0.10"
-
-                  AC_DEFINE([HAVE_JSON_GLIB],
-                            [1],
-                            [Have the JSON-GLib library installed])
-
-                  AC_MSG_RESULT([found])
-                ],
-                [AC_MSG_ERROR([not found])]
-          )
-        ],
-
-        [check],
-        [
-          AC_MSG_CHECKING([for installed JSON-GLib])
-          PKG_CHECK_EXISTS([json-glib-1.0 >= 0.8],
-                           [have_json=yes],
-                           [have_json=no])
-          AS_IF([test "x$have_json" = "xyes"],
-                [
-                  JSON_PREFIX=json-glib
-                  JSON_GLIB_PC="json-glib-1.0 >= 0.8"
-
-                  AC_DEFINE([HAVE_JSON_GLIB],
-                            [1],
-                            [Have the JSON-GLib library installed])
-
-                  AC_MSG_RESULT([found])
-                ],
-                [
-                  JSON_PREFIX=json
-                  experimental_json=yes
-                  AC_MSG_RESULT([not found, using internal copy])
-                ]
-          )
-        ],
-
-        [AC_MSG_ERROR([Unknown argument for --with-json])]
-)
-
-AC_SUBST(JSON_PREFIX)
-AM_CONDITIONAL(LOCAL_JSON_GLIB, test "x$have_json" = "xno")
-
 dnl === Enable debug level ====================================================
 
 m4_define([debug_default], [m4_if(m4_eval(clutter_minor_version % 2), [1], [yes], [minimum])])
@@ -1020,15 +946,12 @@ AS_IF([test "x$enable_maintainer_flags" = "xyes" && test "x$GCC" = "xyes"],
 AC_SUBST(MAINTAINER_CFLAGS)
 
 dnl === Dependencies, compiler flags and linker libraries =====================
-CLUTTER_REQUIRES="cairo >= 1.4 atk >= 1.7 pangocairo >= 1.20 $IMAGE_PC_FILES $BACKEND_PC_FILES $JSON_GLIB_PC"
-
+CLUTTER_REQUIRES="cairo >= 1.8 atk >= 1.7 pangocairo >= 1.20 json-glib-1.0 >= 0.10 $IMAGE_PC_FILES $BACKEND_PC_FILES"
 PKG_CHECK_MODULES(CLUTTER_DEPS, [$CLUTTER_REQUIRES])
-
 AC_SUBST(CLUTTER_REQUIRES)
 
 CLUTTER_CFLAGS="$FLAVOUR_CFLAGS $CLUTTER_DEPS_CFLAGS $CLUTTER_PROFILE_CFLAGS $GLIB_CFLAGS"
 CLUTTER_LIBS="$FLAVOUR_LIBS $CLUTTER_DEPS_LIBS $CLUTTER_PROFILE_LDFLAGS $GLIB_LIBS"
-
 AC_SUBST(CLUTTER_CFLAGS)
 AC_SUBST(CLUTTER_LIBS)
 
@@ -1117,7 +1040,6 @@ AC_CONFIG_FILES([
 
        clutter/Makefile
        clutter/clutter-version.h
-       clutter/clutter-json.h
        clutter/clutter-$CLUTTER_API_VERSION.pc:clutter/clutter.pc.in
 
        clutter/cally/cally-$CLUTTER_API_VERSION.pc:clutter/cally/cally.pc.in
@@ -1193,12 +1115,6 @@ echo " • Extra:"
 echo "        Build introspection data: ${enable_introspection}"
 echo "        Build conformance test suite: ${enable_conformance}"
 
-if test "x$have_json" = "xyes"; then
-echo "        JSON-GLib: system"
-else
-echo "        JSON-GLib: internal (WARNING: Experimental)"
-fi
-
 # COGL flags
 echo ""
 echo " • COGL Backend:"
@@ -1239,8 +1155,8 @@ echo ""
 
 # General warning about experimental features
 if test "x$experimental_backend" = "xyes" ||
-   test "x$experimental_image" = "xyes" ||
-   test "x$experimental_json" = "xyes"; then
+   test "x$experimental_image" = "xyes"
+then
 echo ""
 echo "☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠☠"
 echo " *WARNING*"
index e2509bb..1abc8d5 100644 (file)
@@ -71,7 +71,6 @@ IGNORE_HFILES=\
        clutter-deprecated.h            \
        clutter-enum-types.h            \
        clutter-id-pool.h               \
-       clutter-json.h                  \
        clutter-keysyms.h               \
        clutter-keysyms-compat.h        \
        clutter-keysyms-table.h         \
@@ -88,7 +87,6 @@ IGNORE_HFILES=\
        egl                             \
        fruity                          \
        glx                             \
-       json                            \
        osx                             \
        x11                             \
        win32