[seed] xml: Move xpathNewContext to XMLDocument class. Also add XMLXPathContext.eval
- From: Robert Carr <racarr src gnome org>
- To: svn-commits-list gnome org
- Subject: [seed] xml: Move xpathNewContext to XMLDocument class. Also add XMLXPathContext.eval
- Date: Tue, 12 May 2009 02:45:12 -0400 (EDT)
commit 4fffcc242989f088c599aefd20938f0c048a6421
Author: Robert Carr <racarr svn gnome org>
Date: Tue May 12 02:45:00 2009 -0400
xml: Move xpathNewContext to XMLDocument class. Also add XMLXPathContext.eval
---
modules/libxml/libxml.c | 56 +++++++++++++++++++++++++++++++---------------
1 files changed, 38 insertions(+), 18 deletions(-)
diff --git a/modules/libxml/libxml.c b/modules/libxml/libxml.c
index b750cc4..ec2c044 100644
--- a/modules/libxml/libxml.c
+++ b/modules/libxml/libxml.c
@@ -261,7 +261,36 @@ seed_xml_node_finalize (SeedObject object)
seed_value_unprotect (eng->context, node->doc->_private);
}
-static SeedObject
+static SeedValue
+seed_xml_xpath_eval (SeedContext ctx,
+ SeedObject function,
+ SeedObject this_object,
+ gsize argument_count,
+ const SeedValue arguments[],
+ SeedException * exception)
+{
+ xmlXPathObjectPtr xpath_obj;
+ xmlXPathContextPtr xpath_ctx;
+ gchar *xpath;
+
+ xpath_ctx = XML_XPATH_PRIV (this_object);
+
+ if (argument_count != 1)
+ {
+ seed_make_exception (ctx, exception,
+ "ArgumentError",
+ "xpathEval expected 1 argument, got %d",
+ argument_count);
+ return seed_make_null (ctx);
+ }
+ xpath = seed_value_to_string (ctx, arguments[0], exception);
+ xpath_obj = xmlXPathEval (xpath, xpath_ctx);
+ g_free (xpath);
+
+ return seed_make_object (ctx, xml_xpathobj_class, xpath_obj);
+}
+
+static SeedValue
seed_xml_construct_xpath_context (SeedContext ctx,
SeedObject function,
SeedObject this_object,
@@ -272,19 +301,7 @@ seed_xml_construct_xpath_context (SeedContext ctx,
xmlXPathContextPtr xpath;
xmlDocPtr doc;
- if (argument_count != 1)
- {
- seed_make_exception (ctx, exception, "ArgumentError", "XPathContext constructor expects"
- "1 argument, got %d", argument_count);
- return seed_make_null (ctx);
- }
- if (!seed_value_is_object (ctx, arguments[0]))
- {
- seed_make_exception (ctx, exception, "ArgumentError", "XPathContext constructor expects"
- " XMLDocument object as argument");
- return seed_make_null (ctx);
- }
- doc = XML_DOC_PRIV (arguments[0]);
+ doc = XML_DOC_PRIV (this_object);
xpath = xmlXPathNewContext (arguments[0]);
return seed_make_object (ctx, xml_xpath_class, xpath);
@@ -305,7 +322,7 @@ seed_xml_xpathobj_finalize (SeedObject object)
}
seed_static_function doc_funcs[] = {
- {0, 0, 0}
+ {"xpathNewContext", seed_xml_construct_xpath_context, 0}
};
seed_static_value doc_values[] = {
@@ -355,6 +372,11 @@ seed_static_value attr_values[] = {
{0, 0, 0, 0}
};
+seed_static_function xpath_funcs[] = {
+ {"xpathEval", seed_xml_xpath_eval, 0},
+ {0, 0, 0}
+};
+
static void
seed_libxml_define_stuff ()
{
@@ -387,6 +409,7 @@ seed_libxml_define_stuff ()
xml_xpath_class_def.class_name = "XMLXPathContext";
xml_xpath_class_def.finalize = seed_xml_xpath_finalize;
+ xml_xpath_class_def.static_functions = xpath_funcs;
xml_xpath_class = seed_create_class (&xml_xpath_class_def);
xml_xpathobj_class_def.class_name = "XMLXPathObj";
@@ -397,9 +420,6 @@ seed_libxml_define_stuff ()
(SeedFunctionCallback) seed_xml_parse_file,
namespace_ref);
- seed_create_function (eng->context, "xpathNewContext",
- (SeedFunctionCallback) seed_xml_construct_xpath_context,
- namespace_ref);
}
SeedObject
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]