XML: data extraction near the end 04/4704/2
Calixte DENIZET [Thu, 11 Aug 2011 14:58:04 +0000 (16:58 +0200)]
Change-Id: I287db736e90d1b2554cc42d3b0e81d47bfd4c034

43 files changed:
scilab/modules/xml/Makefile.am
scilab/modules/xml/Makefile.in
scilab/modules/xml/includes/gw_xml.h
scilab/modules/xml/includes/xml.h [new file with mode: 0644]
scilab/modules/xml/includes/xml_constants.h [new file with mode: 0644]
scilab/modules/xml/includes/xml_mlist.h [new file with mode: 0644]
scilab/modules/xml/sci_gateway/c/gw_xml.c
scilab/modules/xml/sci_gateway/cpp/sci_extraction.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_e.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_e.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_size.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_print.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_xmlClose.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_xmlDump.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_xmlGetOpenStreams.cpp [new file with mode: 0644]
scilab/modules/xml/sci_gateway/cpp/sci_xmlRead.cpp
scilab/modules/xml/sci_gateway/cpp/sci_xmlXPath.cpp
scilab/modules/xml/sci_gateway/xml_gateway.xml
scilab/modules/xml/src/c/createMlists.c [new file with mode: 0644]
scilab/modules/xml/src/c/xmlread.c [new file with mode: 0644]
scilab/modules/xml/src/cpp/VariableScope.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/VariableScope.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLAttr.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLAttr.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLDocument.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLDocument.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLElement.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLElement.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLList.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLList.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNodeList.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNodeList.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNodeSet.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNodeSet.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNotHandledElement.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNotHandledElement.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNs.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLNs.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLObject.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLObject.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLXPath.cpp [new file with mode: 0644]
scilab/modules/xml/src/cpp/XMLXPath.hxx [new file with mode: 0644]
scilab/modules/xml/src/cpp/extraction.hpp [new file with mode: 0644]

index 128c7e5..c5f156e 100644 (file)
@@ -28,23 +28,48 @@ include $(top_srcdir)/Makefile.incl.am
 
 XML_JNI_SOURCES = 
 
-XML_C_SOURCES = 
-
-XML_CPP_SOURCES = 
-
+XML_C_SOURCES = src/c/createMlists.c
+
+XML_CPP_SOURCES = src/cpp/VariableScope.cpp \
+                 src/cpp/XMLObject.cpp \
+                 src/cpp/XMLDocument.cpp \
+                  src/cpp/XMLElement.cpp \
+                  src/cpp/XMLAttr.cpp \
+                  src/cpp/XMLNs.cpp \
+                  src/cpp/XMLNodeList.cpp \
+                  src/cpp/XMLNodeSet.cpp \
+                  src/cpp/XMLXPath.cpp \
+                  src/cpp/XMLList.cpp \
+                  src/cpp/XMLNotHandledElement.cpp
 
 GATEWAY_C_SOURCES = sci_gateway/c/gw_xml.c
 
 GATEWAY_CPP_SOURCES = sci_gateway/cpp/sci_xmlRead.cpp \
-sci_gateway/cpp/sci_xmlXPath.cpp
+                      sci_gateway/cpp/sci_xmlXPath.cpp \
+                     sci_gateway/cpp/sci_extraction.cpp \
+                     sci_gateway/cpp/sci_print.cpp \
+                     sci_gateway/cpp/sci_xmlGetOpenStreams.cpp \
+                     sci_gateway/cpp/sci_xmlClose.cpp \
+                     sci_gateway/cpp/sci_xmlDump.cpp \
+                     sci_gateway/cpp/sci_percent_XMLList_e.cpp \
+                     sci_gateway/cpp/sci_percent_XMLAttr_e.cpp \
+                     sci_gateway/cpp/sci_percent_XMLList_size.cpp
+
+libscixml_la_CFLAGS= -I$(srcdir)/includes/ \
+                    -I$(top_srcdir)/libs/MALLOC/includes/ \
+                     -I$(top_srcdir)/modules/core/includes \
+                    -I$(top_srcdir)/modules/api_scilab/includes \
+                    -I$(top_srcdir)/modules/output_stream/includes \
+                    -I$(top_srcdir)/modules/fileio/includes
 
-libscixml_la_CFLAGS= -I$(top_srcdir)/libs/MALLOC/includes/ \
-    -I$(top_srcdir)/modules/core/includes
 
 libscixml_la_CPPFLAGS = -I$(srcdir)/includes/ \
     -I$(srcdir)/src/cpp/ \
     -I$(srcdir)/src/c/ \
-    -I$(top_srcdir)/modules/api_scilab/includes
+    -I$(top_srcdir)/modules/api_scilab/includes \
+    -I$(top_srcdir)/modules/output_stream/includes \
+    -I$(top_srcdir)/modules/fileio/includes \
+    $(XML_FLAGS)
 
 # Without the xml module 
 libscixml_disable_la_CFLAGS = -Iincludes/
@@ -72,8 +97,9 @@ INCLUDE_FLAGS = $(libscixml_la_CFLAGS)
 
 
 libscixml_la_LIBADD = libscixml-algo.la \
-    $(top_builddir)/libs/MALLOC/libscimalloc.la
-
+    $(top_builddir)/libs/MALLOC/libscimalloc.la \
+    $(top_builddir)/modules/output_stream/libscioutput_stream.la \
+    $(top_builddir)/modules/fileio/libscifileio.la
 
 #### xml : gateway declaration ####
 libscixml_la_sci_gatewaydir = $(mydatadir)/sci_gateway
index 6dd2160..46823db 100644 (file)
@@ -79,10 +79,10 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/backtrace.m4 \
        $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
        $(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/macosx.m4 \
        $(top_srcdir)/m4/ocaml.m4 $(top_srcdir)/m4/pcre.m4 \
-       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/pvm.m4 \
-       $(top_srcdir)/m4/relocatable.m4 $(top_srcdir)/m4/swig.m4 \
-       $(top_srcdir)/m4/symlinks.m4 $(top_srcdir)/m4/tcltk.m4 \
-       $(top_srcdir)/m4/umfpack.m4 $(top_srcdir)/configure.ac
+       $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/relocatable.m4 \
+       $(top_srcdir)/m4/swig.m4 $(top_srcdir)/m4/symlinks.m4 \
+       $(top_srcdir)/m4/tcltk.m4 $(top_srcdir)/m4/umfpack.m4 \
+       $(top_srcdir)/configure.ac
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
        $(ACLOCAL_M4)
 mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs
@@ -116,14 +116,19 @@ am__installdirs = "$(DESTDIR)$(pkglibdir)" \
        "$(DESTDIR)$(libscixml_la_sci_gatewaydir)"
 LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES)
 libscixml_algo_la_LIBADD =
-am__objects_1 =
-am_libscixml_algo_la_OBJECTS = $(am__objects_1) $(am__objects_1) \
-       $(am__objects_1)
+am__objects_1 = libscixml_algo_la-createMlists.lo
+am__objects_2 =
+am__objects_3 = libscixml_algo_la-VariableScope.lo \
+       libscixml_algo_la-XMLObject.lo \
+       libscixml_algo_la-XMLDocument.lo \
+       libscixml_algo_la-XMLElement.lo libscixml_algo_la-XMLAttr.lo \
+       libscixml_algo_la-XMLNs.lo libscixml_algo_la-XMLNodeList.lo \
+       libscixml_algo_la-XMLNodeSet.lo libscixml_algo_la-XMLXPath.lo \
+       libscixml_algo_la-XMLList.lo \
+       libscixml_algo_la-XMLNotHandledElement.lo
+am_libscixml_algo_la_OBJECTS = $(am__objects_1) $(am__objects_2) \
+       $(am__objects_3)
 libscixml_algo_la_OBJECTS = $(am_libscixml_algo_la_OBJECTS)
-libscixml_algo_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
-       $(LIBTOOLFLAGS) --mode=link $(CCLD) \
-       $(libscixml_algo_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-       -o $@
 @GUI_TRUE@am_libscixml_algo_la_rpath =
 libscixml_disable_la_LIBADD =
 am_libscixml_disable_la_OBJECTS =
@@ -133,11 +138,19 @@ libscixml_disable_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
        $(libscixml_disable_la_CFLAGS) $(CFLAGS) \
        $(libscixml_disable_la_LDFLAGS) $(LDFLAGS) -o $@
 libscixml_la_DEPENDENCIES = libscixml-algo.la \
-       $(top_builddir)/libs/MALLOC/libscimalloc.la
-am__objects_2 = libscixml_la-gw_xml.lo
-am__objects_3 = libscixml_la-sci_xmlRead.lo \
-       libscixml_la-sci_xmlXPath.lo
-am_libscixml_la_OBJECTS = $(am__objects_2) $(am__objects_3)
+       $(top_builddir)/libs/MALLOC/libscimalloc.la \
+       $(top_builddir)/modules/output_stream/libscioutput_stream.la \
+       $(top_builddir)/modules/fileio/libscifileio.la
+am__objects_4 = libscixml_la-gw_xml.lo
+am__objects_5 = libscixml_la-sci_xmlRead.lo \
+       libscixml_la-sci_xmlXPath.lo libscixml_la-sci_extraction.lo \
+       libscixml_la-sci_print.lo \
+       libscixml_la-sci_xmlGetOpenStreams.lo \
+       libscixml_la-sci_xmlClose.lo libscixml_la-sci_xmlDump.lo \
+       libscixml_la-sci_percent_XMLList_e.lo \
+       libscixml_la-sci_percent_XMLAttr_e.lo \
+       libscixml_la-sci_percent_XMLList_size.lo
+am_libscixml_la_OBJECTS = $(am__objects_4) $(am__objects_5)
 libscixml_la_OBJECTS = $(am_libscixml_la_OBJECTS)
 libscixml_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
@@ -322,11 +335,6 @@ PCRE_VERSION = @PCRE_VERSION@
 PKG_CONFIG = @PKG_CONFIG@
 POSUB = @POSUB@
 POW_LIB = @POW_LIB@
-PVMGETARCH = @PVMGETARCH@
-PVM_ARCH = @PVM_ARCH@
-PVM_ENABLE = @PVM_ENABLE@
-PVM_INCLUDE = @PVM_INCLUDE@
-PVM_LIB = @PVM_LIB@
 PYTHON = @PYTHON@
 QDOX = @QDOX@
 RANLIB = @RANLIB@
@@ -504,19 +512,45 @@ HELP_CHAPTERDIR = help/
 HELP_CHAPTERFILE = addchapter.sce
 HELP_CHAPTERLANG = en_US fr_FR pt_BR
 XML_JNI_SOURCES = 
-XML_C_SOURCES = 
-XML_CPP_SOURCES = 
+XML_C_SOURCES = src/c/createMlists.c
+XML_CPP_SOURCES = src/cpp/VariableScope.cpp \
+                 src/cpp/XMLObject.cpp \
+                 src/cpp/XMLDocument.cpp \
+                  src/cpp/XMLElement.cpp \
+                  src/cpp/XMLAttr.cpp \
+                  src/cpp/XMLNs.cpp \
+                  src/cpp/XMLNodeList.cpp \
+                  src/cpp/XMLNodeSet.cpp \
+                  src/cpp/XMLXPath.cpp \
+                  src/cpp/XMLList.cpp \
+                  src/cpp/XMLNotHandledElement.cpp
+
 GATEWAY_C_SOURCES = sci_gateway/c/gw_xml.c
 GATEWAY_CPP_SOURCES = sci_gateway/cpp/sci_xmlRead.cpp \
-sci_gateway/cpp/sci_xmlXPath.cpp
-
-libscixml_la_CFLAGS = -I$(top_srcdir)/libs/MALLOC/includes/ \
-    -I$(top_srcdir)/modules/core/includes
+                      sci_gateway/cpp/sci_xmlXPath.cpp \
+                     sci_gateway/cpp/sci_extraction.cpp \
+                     sci_gateway/cpp/sci_print.cpp \
+                     sci_gateway/cpp/sci_xmlGetOpenStreams.cpp \
+                     sci_gateway/cpp/sci_xmlClose.cpp \
+                     sci_gateway/cpp/sci_xmlDump.cpp \
+                     sci_gateway/cpp/sci_percent_XMLList_e.cpp \
+                     sci_gateway/cpp/sci_percent_XMLAttr_e.cpp \
+                     sci_gateway/cpp/sci_percent_XMLList_size.cpp
+
+libscixml_la_CFLAGS = -I$(srcdir)/includes/ \
+                    -I$(top_srcdir)/libs/MALLOC/includes/ \
+                     -I$(top_srcdir)/modules/core/includes \
+                    -I$(top_srcdir)/modules/api_scilab/includes \
+                    -I$(top_srcdir)/modules/output_stream/includes \
+                    -I$(top_srcdir)/modules/fileio/includes
 
 libscixml_la_CPPFLAGS = -I$(srcdir)/includes/ \
     -I$(srcdir)/src/cpp/ \
     -I$(srcdir)/src/c/ \
-    -I$(top_srcdir)/modules/api_scilab/includes
+    -I$(top_srcdir)/modules/api_scilab/includes \
+    -I$(top_srcdir)/modules/output_stream/includes \
+    -I$(top_srcdir)/modules/fileio/includes \
+    $(XML_FLAGS)
 
 
 # Without the xml module 
@@ -535,7 +569,9 @@ libscixml_algo_la_CPPFLAGS = $(libscixml_la_CPPFLAGS)
 CHECK_SRC = $(XML_C_SOURCES) $(GATEWAY_C_SOURCES)
 INCLUDE_FLAGS = $(libscixml_la_CFLAGS)
 libscixml_la_LIBADD = libscixml-algo.la \
-    $(top_builddir)/libs/MALLOC/libscimalloc.la
+    $(top_builddir)/libs/MALLOC/libscimalloc.la \
+    $(top_builddir)/modules/output_stream/libscioutput_stream.la \
+    $(top_builddir)/modules/fileio/libscifileio.la
 
 
 #### xml : gateway declaration ####
@@ -616,7 +652,7 @@ clean-pkglibLTLIBRARIES:
          rm -f "$${dir}/so_locations"; \
        done
 libscixml-algo.la: $(libscixml_algo_la_OBJECTS) $(libscixml_algo_la_DEPENDENCIES) 
-       $(libscixml_algo_la_LINK) $(am_libscixml_algo_la_rpath) $(libscixml_algo_la_OBJECTS) $(libscixml_algo_la_LIBADD) $(LIBS)
+       $(CXXLINK) $(am_libscixml_algo_la_rpath) $(libscixml_algo_la_OBJECTS) $(libscixml_algo_la_LIBADD) $(LIBS)
 libscixml-disable.la: $(libscixml_disable_la_OBJECTS) $(libscixml_disable_la_DEPENDENCIES) 
        $(libscixml_disable_la_LINK) -rpath $(pkglibdir) $(libscixml_disable_la_OBJECTS) $(libscixml_disable_la_LIBADD) $(LIBS)
 libscixml.la: $(libscixml_la_OBJECTS) $(libscixml_la_DEPENDENCIES) 
@@ -628,7 +664,27 @@ mostlyclean-compile:
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-VariableScope.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLAttr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLDocument.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLElement.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLList.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLNodeList.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLNodeSet.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLNotHandledElement.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLNs.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLObject.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-XMLXPath.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_algo_la-createMlists.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-gw_xml.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_extraction.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_percent_XMLAttr_e.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_percent_XMLList_e.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_percent_XMLList_size.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_print.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_xmlClose.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_xmlDump.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_xmlGetOpenStreams.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_xmlRead.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libscixml_la-sci_xmlXPath.Plo@am__quote@
 
@@ -653,6 +709,13 @@ distclean-compile:
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LTCOMPILE) -c -o $@ $<
 
+libscixml_algo_la-createMlists.lo: src/c/createMlists.c
+@am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(libscixml_algo_la_CFLAGS) $(CFLAGS) -MT libscixml_algo_la-createMlists.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-createMlists.Tpo -c -o libscixml_algo_la-createMlists.lo `test -f 'src/c/createMlists.c' || echo '$(srcdir)/'`src/c/createMlists.c
+@am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscixml_algo_la-createMlists.Tpo $(DEPDIR)/libscixml_algo_la-createMlists.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='src/c/createMlists.c' object='libscixml_algo_la-createMlists.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(libscixml_algo_la_CFLAGS) $(CFLAGS) -c -o libscixml_algo_la-createMlists.lo `test -f 'src/c/createMlists.c' || echo '$(srcdir)/'`src/c/createMlists.c
+
 libscixml_la-gw_xml.lo: sci_gateway/c/gw_xml.c
 @am__fastdepCC_TRUE@   $(LIBTOOL)  --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(libscixml_la_CFLAGS) $(CFLAGS) -MT libscixml_la-gw_xml.lo -MD -MP -MF $(DEPDIR)/libscixml_la-gw_xml.Tpo -c -o libscixml_la-gw_xml.lo `test -f 'sci_gateway/c/gw_xml.c' || echo '$(srcdir)/'`sci_gateway/c/gw_xml.c
 @am__fastdepCC_TRUE@   $(am__mv) $(DEPDIR)/libscixml_la-gw_xml.Tpo $(DEPDIR)/libscixml_la-gw_xml.Plo
@@ -681,6 +744,83 @@ libscixml_la-gw_xml.lo: sci_gateway/c/gw_xml.c
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(LTCXXCOMPILE) -c -o $@ $<
 
+libscixml_algo_la-VariableScope.lo: src/cpp/VariableScope.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-VariableScope.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-VariableScope.Tpo -c -o libscixml_algo_la-VariableScope.lo `test -f 'src/cpp/VariableScope.cpp' || echo '$(srcdir)/'`src/cpp/VariableScope.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-VariableScope.Tpo $(DEPDIR)/libscixml_algo_la-VariableScope.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/VariableScope.cpp' object='libscixml_algo_la-VariableScope.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-VariableScope.lo `test -f 'src/cpp/VariableScope.cpp' || echo '$(srcdir)/'`src/cpp/VariableScope.cpp
+
+libscixml_algo_la-XMLObject.lo: src/cpp/XMLObject.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLObject.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLObject.Tpo -c -o libscixml_algo_la-XMLObject.lo `test -f 'src/cpp/XMLObject.cpp' || echo '$(srcdir)/'`src/cpp/XMLObject.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLObject.Tpo $(DEPDIR)/libscixml_algo_la-XMLObject.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLObject.cpp' object='libscixml_algo_la-XMLObject.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLObject.lo `test -f 'src/cpp/XMLObject.cpp' || echo '$(srcdir)/'`src/cpp/XMLObject.cpp
+
+libscixml_algo_la-XMLDocument.lo: src/cpp/XMLDocument.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLDocument.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLDocument.Tpo -c -o libscixml_algo_la-XMLDocument.lo `test -f 'src/cpp/XMLDocument.cpp' || echo '$(srcdir)/'`src/cpp/XMLDocument.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLDocument.Tpo $(DEPDIR)/libscixml_algo_la-XMLDocument.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLDocument.cpp' object='libscixml_algo_la-XMLDocument.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLDocument.lo `test -f 'src/cpp/XMLDocument.cpp' || echo '$(srcdir)/'`src/cpp/XMLDocument.cpp
+
+libscixml_algo_la-XMLElement.lo: src/cpp/XMLElement.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLElement.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLElement.Tpo -c -o libscixml_algo_la-XMLElement.lo `test -f 'src/cpp/XMLElement.cpp' || echo '$(srcdir)/'`src/cpp/XMLElement.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLElement.Tpo $(DEPDIR)/libscixml_algo_la-XMLElement.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLElement.cpp' object='libscixml_algo_la-XMLElement.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLElement.lo `test -f 'src/cpp/XMLElement.cpp' || echo '$(srcdir)/'`src/cpp/XMLElement.cpp
+
+libscixml_algo_la-XMLAttr.lo: src/cpp/XMLAttr.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLAttr.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLAttr.Tpo -c -o libscixml_algo_la-XMLAttr.lo `test -f 'src/cpp/XMLAttr.cpp' || echo '$(srcdir)/'`src/cpp/XMLAttr.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLAttr.Tpo $(DEPDIR)/libscixml_algo_la-XMLAttr.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLAttr.cpp' object='libscixml_algo_la-XMLAttr.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLAttr.lo `test -f 'src/cpp/XMLAttr.cpp' || echo '$(srcdir)/'`src/cpp/XMLAttr.cpp
+
+libscixml_algo_la-XMLNs.lo: src/cpp/XMLNs.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLNs.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLNs.Tpo -c -o libscixml_algo_la-XMLNs.lo `test -f 'src/cpp/XMLNs.cpp' || echo '$(srcdir)/'`src/cpp/XMLNs.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLNs.Tpo $(DEPDIR)/libscixml_algo_la-XMLNs.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLNs.cpp' object='libscixml_algo_la-XMLNs.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLNs.lo `test -f 'src/cpp/XMLNs.cpp' || echo '$(srcdir)/'`src/cpp/XMLNs.cpp
+
+libscixml_algo_la-XMLNodeList.lo: src/cpp/XMLNodeList.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLNodeList.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLNodeList.Tpo -c -o libscixml_algo_la-XMLNodeList.lo `test -f 'src/cpp/XMLNodeList.cpp' || echo '$(srcdir)/'`src/cpp/XMLNodeList.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLNodeList.Tpo $(DEPDIR)/libscixml_algo_la-XMLNodeList.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLNodeList.cpp' object='libscixml_algo_la-XMLNodeList.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLNodeList.lo `test -f 'src/cpp/XMLNodeList.cpp' || echo '$(srcdir)/'`src/cpp/XMLNodeList.cpp
+
+libscixml_algo_la-XMLNodeSet.lo: src/cpp/XMLNodeSet.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLNodeSet.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLNodeSet.Tpo -c -o libscixml_algo_la-XMLNodeSet.lo `test -f 'src/cpp/XMLNodeSet.cpp' || echo '$(srcdir)/'`src/cpp/XMLNodeSet.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLNodeSet.Tpo $(DEPDIR)/libscixml_algo_la-XMLNodeSet.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLNodeSet.cpp' object='libscixml_algo_la-XMLNodeSet.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLNodeSet.lo `test -f 'src/cpp/XMLNodeSet.cpp' || echo '$(srcdir)/'`src/cpp/XMLNodeSet.cpp
+
+libscixml_algo_la-XMLXPath.lo: src/cpp/XMLXPath.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLXPath.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLXPath.Tpo -c -o libscixml_algo_la-XMLXPath.lo `test -f 'src/cpp/XMLXPath.cpp' || echo '$(srcdir)/'`src/cpp/XMLXPath.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLXPath.Tpo $(DEPDIR)/libscixml_algo_la-XMLXPath.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLXPath.cpp' object='libscixml_algo_la-XMLXPath.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLXPath.lo `test -f 'src/cpp/XMLXPath.cpp' || echo '$(srcdir)/'`src/cpp/XMLXPath.cpp
+
+libscixml_algo_la-XMLList.lo: src/cpp/XMLList.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLList.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLList.Tpo -c -o libscixml_algo_la-XMLList.lo `test -f 'src/cpp/XMLList.cpp' || echo '$(srcdir)/'`src/cpp/XMLList.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLList.Tpo $(DEPDIR)/libscixml_algo_la-XMLList.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLList.cpp' object='libscixml_algo_la-XMLList.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLList.lo `test -f 'src/cpp/XMLList.cpp' || echo '$(srcdir)/'`src/cpp/XMLList.cpp
+
+libscixml_algo_la-XMLNotHandledElement.lo: src/cpp/XMLNotHandledElement.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_algo_la-XMLNotHandledElement.lo -MD -MP -MF $(DEPDIR)/libscixml_algo_la-XMLNotHandledElement.Tpo -c -o libscixml_algo_la-XMLNotHandledElement.lo `test -f 'src/cpp/XMLNotHandledElement.cpp' || echo '$(srcdir)/'`src/cpp/XMLNotHandledElement.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_algo_la-XMLNotHandledElement.Tpo $(DEPDIR)/libscixml_algo_la-XMLNotHandledElement.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='src/cpp/XMLNotHandledElement.cpp' object='libscixml_algo_la-XMLNotHandledElement.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_algo_la-XMLNotHandledElement.lo `test -f 'src/cpp/XMLNotHandledElement.cpp' || echo '$(srcdir)/'`src/cpp/XMLNotHandledElement.cpp
+
 libscixml_la-sci_xmlRead.lo: sci_gateway/cpp/sci_xmlRead.cpp
 @am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_xmlRead.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_xmlRead.Tpo -c -o libscixml_la-sci_xmlRead.lo `test -f 'sci_gateway/cpp/sci_xmlRead.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlRead.cpp
 @am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_xmlRead.Tpo $(DEPDIR)/libscixml_la-sci_xmlRead.Plo
@@ -695,6 +835,62 @@ libscixml_la-sci_xmlXPath.lo: sci_gateway/cpp/sci_xmlXPath.cpp
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_xmlXPath.lo `test -f 'sci_gateway/cpp/sci_xmlXPath.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlXPath.cpp
 
+libscixml_la-sci_extraction.lo: sci_gateway/cpp/sci_extraction.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_extraction.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_extraction.Tpo -c -o libscixml_la-sci_extraction.lo `test -f 'sci_gateway/cpp/sci_extraction.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_extraction.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_extraction.Tpo $(DEPDIR)/libscixml_la-sci_extraction.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_extraction.cpp' object='libscixml_la-sci_extraction.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_extraction.lo `test -f 'sci_gateway/cpp/sci_extraction.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_extraction.cpp
+
+libscixml_la-sci_print.lo: sci_gateway/cpp/sci_print.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_print.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_print.Tpo -c -o libscixml_la-sci_print.lo `test -f 'sci_gateway/cpp/sci_print.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_print.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_print.Tpo $(DEPDIR)/libscixml_la-sci_print.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_print.cpp' object='libscixml_la-sci_print.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_print.lo `test -f 'sci_gateway/cpp/sci_print.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_print.cpp
+
+libscixml_la-sci_xmlGetOpenStreams.lo: sci_gateway/cpp/sci_xmlGetOpenStreams.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_xmlGetOpenStreams.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_xmlGetOpenStreams.Tpo -c -o libscixml_la-sci_xmlGetOpenStreams.lo `test -f 'sci_gateway/cpp/sci_xmlGetOpenStreams.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlGetOpenStreams.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_xmlGetOpenStreams.Tpo $(DEPDIR)/libscixml_la-sci_xmlGetOpenStreams.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_xmlGetOpenStreams.cpp' object='libscixml_la-sci_xmlGetOpenStreams.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_xmlGetOpenStreams.lo `test -f 'sci_gateway/cpp/sci_xmlGetOpenStreams.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlGetOpenStreams.cpp
+
+libscixml_la-sci_xmlClose.lo: sci_gateway/cpp/sci_xmlClose.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_xmlClose.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_xmlClose.Tpo -c -o libscixml_la-sci_xmlClose.lo `test -f 'sci_gateway/cpp/sci_xmlClose.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlClose.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_xmlClose.Tpo $(DEPDIR)/libscixml_la-sci_xmlClose.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_xmlClose.cpp' object='libscixml_la-sci_xmlClose.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_xmlClose.lo `test -f 'sci_gateway/cpp/sci_xmlClose.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlClose.cpp
+
+libscixml_la-sci_xmlDump.lo: sci_gateway/cpp/sci_xmlDump.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_xmlDump.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_xmlDump.Tpo -c -o libscixml_la-sci_xmlDump.lo `test -f 'sci_gateway/cpp/sci_xmlDump.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlDump.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_xmlDump.Tpo $(DEPDIR)/libscixml_la-sci_xmlDump.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_xmlDump.cpp' object='libscixml_la-sci_xmlDump.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_xmlDump.lo `test -f 'sci_gateway/cpp/sci_xmlDump.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_xmlDump.cpp
+
+libscixml_la-sci_percent_XMLList_e.lo: sci_gateway/cpp/sci_percent_XMLList_e.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_percent_XMLList_e.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_percent_XMLList_e.Tpo -c -o libscixml_la-sci_percent_XMLList_e.lo `test -f 'sci_gateway/cpp/sci_percent_XMLList_e.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLList_e.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_percent_XMLList_e.Tpo $(DEPDIR)/libscixml_la-sci_percent_XMLList_e.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_percent_XMLList_e.cpp' object='libscixml_la-sci_percent_XMLList_e.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_percent_XMLList_e.lo `test -f 'sci_gateway/cpp/sci_percent_XMLList_e.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLList_e.cpp
+
+libscixml_la-sci_percent_XMLAttr_e.lo: sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_percent_XMLAttr_e.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_percent_XMLAttr_e.Tpo -c -o libscixml_la-sci_percent_XMLAttr_e.lo `test -f 'sci_gateway/cpp/sci_percent_XMLAttr_e.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_percent_XMLAttr_e.Tpo $(DEPDIR)/libscixml_la-sci_percent_XMLAttr_e.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_percent_XMLAttr_e.cpp' object='libscixml_la-sci_percent_XMLAttr_e.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_percent_XMLAttr_e.lo `test -f 'sci_gateway/cpp/sci_percent_XMLAttr_e.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
+
+libscixml_la-sci_percent_XMLList_size.lo: sci_gateway/cpp/sci_percent_XMLList_size.cpp
+@am__fastdepCXX_TRUE@  $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libscixml_la-sci_percent_XMLList_size.lo -MD -MP -MF $(DEPDIR)/libscixml_la-sci_percent_XMLList_size.Tpo -c -o libscixml_la-sci_percent_XMLList_size.lo `test -f 'sci_gateway/cpp/sci_percent_XMLList_size.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLList_size.cpp
+@am__fastdepCXX_TRUE@  $(am__mv) $(DEPDIR)/libscixml_la-sci_percent_XMLList_size.Tpo $(DEPDIR)/libscixml_la-sci_percent_XMLList_size.Plo
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     source='sci_gateway/cpp/sci_percent_XMLList_size.cpp' object='libscixml_la-sci_percent_XMLList_size.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(LIBTOOL)  --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscixml_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libscixml_la-sci_percent_XMLList_size.lo `test -f 'sci_gateway/cpp/sci_percent_XMLList_size.cpp' || echo '$(srcdir)/'`sci_gateway/cpp/sci_percent_XMLList_size.cpp
+
 mostlyclean-libtool:
        -rm -f *.lo
 
index f668e93..b90c852 100644 (file)
 XML_SCILAB_IMPEXP int gw_xml(void);
 /*--------------------------------------------------------------------------*/ 
 XML_SCILAB_IMPEXP int sci_xmlRead(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_xmlClose(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_xmlDump(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_xmlGetOpenStreams(char *fname, unsigned long fname_len);
 XML_SCILAB_IMPEXP int sci_xmlXPath(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLDoc_e(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLElem_e(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLNs_e(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLAttr_e(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLList_e(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLDoc_p(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLElem_p(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLNs_p(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLList_p(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLAttr_p(char *fname, unsigned long fname_len);
+XML_SCILAB_IMPEXP int sci_percent_XMLList_size(char *fname, unsigned long fname_len);
 /*--------------------------------------------------------------------------*/ 
 #endif /* __GW_XML_H__ */
 /*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/includes/xml.h b/scilab/modules/xml/includes/xml.h
new file mode 100644 (file)
index 0000000..e8782cb
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+extern "C"
+{
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+}
diff --git a/scilab/modules/xml/includes/xml_constants.h b/scilab/modules/xml/includes/xml_constants.h
new file mode 100644 (file)
index 0000000..bcaa5f7
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+const char * nodes_type[] = { "XML_ELEMENT_NODE",
+                              "XML_ATTRIBUTE_NODE",
+                              "XML_TEXT_NODE",
+                              "XML_CDATA_SECTION_NODE",
+                              "XML_ENTITY_REF_NODE",
+                              "XML_ENTITY_NODE",
+                              "XML_PI_NODE",
+                              "XML_COMMENT_NODE",
+                              "XML_DOCUMENT_NODE",
+                              "XML_DOCUMENT_TYPE_NODE",
+                              "XML_DOCUMENT_FRAG_NODE",
+                              "XML_NOTATION_NODE",
+                              "XML_HTML_DOCUMENT_NODE",
+                              "XML_DTD_NODE",
+                              "XML_ELEMENT_DECL",
+                              "XML_ATTRIBUTE_DECL",
+                              "XML_ENTITY_DECL",
+                              "XML_NAMESPACE_DECL",
+                              "XML_XINCLUDE_START",
+                              "XML_XINCLUDE_END",
+                              "XML_DOCB_DOCUMENT_NODE" };
diff --git a/scilab/modules/xml/includes/xml_mlist.h b/scilab/modules/xml/includes/xml_mlist.h
new file mode 100644 (file)
index 0000000..21651b5
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#define XMLDOCUMENT 1
+#define XMLELEMENT 2
+#define XMLATTRIBUTE 3
+#define XMLNAMESPACE 4
+#define XMLLIST 5
+#define XMLNOTHANDLED 6
+
+#ifndef XML_MLIST_H
+#define XML_MLIST_H
+int createXMLObjectAtPos(int type, int pos, int id);
+int createXMLObjectAtPosInList(int * list, int stackPos, int type, int pos, int id);
+int isXMLDoc(int * mlist);
+int isXMLElem(int * mlist);
+int isXMLAttr(int * mlist);
+int isXMLNs(int * mlist);
+int isXMLList(int * mlist);
+int isXMLObject(int * mlist);
+int isXMLNotHandled(int * mlist);
+int getXMLObjectId(int * mlist);
+
+#endif
index aebd494..3cad774 100644 (file)
 static gw_generic_table Tab[] =
 {
     {sci_xmlRead, "xmlRead"},
-    {sci_xmlXPath, "xmlXPath"}
+    {sci_xmlClose, "xmlClose"},
+    {sci_xmlDump, "xmlDump"},
+    {sci_xmlGetOpenStreams, "xmlGetOpenStreams"},
+    {sci_xmlXPath, "xmlXPath"},
+    {sci_percent_XMLDoc_e, "%XMLDoc_e"},
+    {sci_percent_XMLElem_e, "%XMLElem_e"},
+    {sci_percent_XMLNs_e, "%XMLNs_e"},
+    {sci_percent_XMLAttr_e, "%XMLAttr_e"},
+    {sci_percent_XMLList_e, "%XMLList_e"},
+    {sci_percent_XMLDoc_p, "%XMLDoc_p"},
+    {sci_percent_XMLElem_p, "%XMLElem_p"},
+    {sci_percent_XMLNs_p, "%XMLNs_p"},
+    {sci_percent_XMLList_p, "%XMLList_p"},
+    {sci_percent_XMLAttr_p, "%XMLAttr_p"},
+    {sci_percent_XMLList_size, "%XMLList_size"}
 };
 /*--------------------------------------------------------------------------*/
 int gw_xml(void)
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_extraction.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_extraction.cpp
new file mode 100644 (file)
index 0000000..ac4cf0b
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "extraction.hpp"
+
+using namespace org_modules_xml;
+
+int sci_percent_XMLDoc_e(char *fname, unsigned long fname_len)
+{
+    return sci_extraction<XMLDocument>(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLElem_e(char *fname, unsigned long fname_len)
+{
+    return sci_extraction<XMLElement>(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLNs_e(char *fname, unsigned long fname_len)
+{
+    return sci_extraction<XMLNs>(fname, fname_len);
+}
+/*--------------------------------------------------------------------------
+int sci_percent_XMLAttr_e(char *fname, unsigned long fname_len)
+{
+    return sci_extraction<XMLAttr>(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_e.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLAttr_e.cpp
new file mode 100644 (file)
index 0000000..e7d8f96
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLElement.hxx"
+#include "XMLNs.hxx"
+#include "XMLAttr.hxx"
+
+extern "C"
+{
+#include <stdio.h>
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLAttr_e(char * fname, unsigned long fname_len)
+{
+    XMLAttr * attr;
+    int id;
+    SciErr err;
+    int * prefixaddr = 0;
+    int * nameaddr = 0;
+    int * mlistaddr = 0;
+    char * name = 0;
+    char * prefix = 0;
+    const char * value;
+
+    CheckLhs(1, 1);
+    CheckRhs(2, 3);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &prefixaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isStringType(pvApiCtx, prefixaddr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: String expected\n", fname, 1);
+        return 0;
+    }
+
+    getAllocatedSingleString(pvApiCtx, prefixaddr, &prefix);
+
+    if (Rhs == 3)
+    {
+        err = getVarAddressFromPosition(pvApiCtx, 2, &nameaddr);
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            return 0;
+        }
+
+        if (!isStringType(pvApiCtx, nameaddr))
+        {
+            Scierror(999, "%s: Wrong type for input argument %i: String expected\n", fname, 1);
+            return 0;
+        }
+
+        getAllocatedSingleString(pvApiCtx, nameaddr, &name);
+    }
+
+    err = getVarAddressFromPosition(pvApiCtx, Rhs, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    id = getXMLObjectId(mlistaddr);
+    attr = XMLObject::getFromId<XMLAttr>(id);
+
+    if (attr)
+    {
+        if (Rhs == 3)
+        {
+            value = attr->getAttributeValue(const_cast<const char *>(prefix), const_cast<const char *>(name));
+        }
+        else
+        {
+            name = prefix;
+            value = attr->getAttributeValue(const_cast<const char *>(name));
+        }
+
+        if (!value)
+        {
+            value = "";
+        }
+
+        err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, const_cast<const char * const *>(&value));
+        if (err.iErr)
+        {
+            printError(&err, 0);
+            return 0;
+        }
+    }
+    else
+    {
+        Scierror(999, "%s: XML object do not exist\n", fname);
+        return 0;
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+
+    return 0;
+}
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_e.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_e.cpp
new file mode 100644 (file)
index 0000000..4d78925
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLNodeList.hxx"
+
+extern "C"
+{
+#include <stdio.h>
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+int sci_percent_XMLList_e(char * fname, unsigned long fname_len)
+{
+    XMLList * xmlList = 0;
+    XMLObject * elem;
+    int id;
+    SciErr err;
+    double * dvalue = 0;
+    int * mlistaddr = 0;
+    int * daddr = 0;
+    int typ = 0;
+    int row;
+    int col;
+    int index;
+
+    CheckLhs(1, 1);
+    CheckRhs(2, 2);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &daddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = getVarDimension(pvApiCtx, daddr, &row, &col);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = getVarType(pvApiCtx, daddr, &typ);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (row != 1 || col != 1 || typ != sci_matrix)
+    {
+        Scierror(999, "%s: Wrong dimension for input argument %i: Single double expected\n", fname, 1);
+        return 0;
+    }
+
+    if (isVarComplex(pvApiCtx, daddr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: double expected\n", fname, 1);
+        return 0;
+    }
+
+    err = getMatrixOfDouble(pvApiCtx, daddr, &row, &col, &dvalue);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = getVarAddressFromPosition(pvApiCtx, 2, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    id = getXMLObjectId(mlistaddr);
+    xmlList = XMLObject::getFromId<XMLList>(id);
+    if (!xmlList)
+    {
+        Scierror(999, "%s: XML object do not exist\n", fname);
+        return 0;
+    }
+
+    index = (int)(*dvalue);
+    elem = xmlList->getListElement(index);
+    if (!elem)
+    {
+        Scierror(999, "%s: Wrong index\n", fname);
+        return 0;
+    }
+
+    if (!elem->createOnStack(Rhs + 1))
+    {
+        return 0;
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+
+    return 0;
+}
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_size.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_percent_XMLList_size.cpp
new file mode 100644 (file)
index 0000000..7a64c94
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLList.hxx"
+
+extern "C"
+{
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLList_size(char * fname, unsigned long fname_len)
+{
+    int id;
+    SciErr err;
+    double d;
+    int * addr = 0;
+    XMLList * list;
+
+    CheckLhs(1, 1);
+    CheckRhs(1, 1);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isXMLList(addr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: %s expected\n", fname, 1, "XMLDoc");
+        return 0;
+
+    }
+
+    id = getXMLObjectId(addr);
+    list = XMLObject::getFromId<XMLList>(id);
+    if (!list)
+    {
+        Scierror(999, "%s: XML list does not exist\n", fname);
+        return 0;
+    }
+
+    d = (double) list->getSize();
+    createScalarDouble(pvApiCtx, Rhs + 1, d);
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+    return 0;
+}
+/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_print.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_print.cpp
new file mode 100644 (file)
index 0000000..d316bb9
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLElement.hxx"
+#include "XMLNs.hxx"
+#include "XMLAttr.hxx"
+#include "XMLNodeList.hxx"
+
+extern "C"
+{
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "sciprint.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_print(char * fname, unsigned long fname_len)
+{
+    XMLObject * obj;
+    int id;
+    SciErr err;
+    int *mlistaddr = 0;
+    int ret;
+
+    CheckRhs(1, 1);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    id = getXMLObjectId(mlistaddr);
+    obj = XMLObject::getFromId<XMLObject>(id);
+    if (!obj)
+    {
+        Scierror(999, "%s: XML object does not exist\n", fname);
+        return 0;
+    }
+
+    std::string * str = obj->toString();
+    sciprint("%s\n", str->c_str());
+    delete str;
+
+    return 0;
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLDoc_p(char *fname, unsigned long fname_len)
+{
+    return sci_print(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLElem_p(char *fname, unsigned long fname_len)
+{
+    return sci_print(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLNs_p(char *fname, unsigned long fname_len)
+{
+    return sci_print(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLList_p(char *fname, unsigned long fname_len)
+{
+    return sci_print(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
+int sci_percent_XMLAttr_p(char *fname, unsigned long fname_len)
+{
+    return sci_print(fname, fname_len);
+}
+/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_xmlClose.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_xmlClose.cpp
new file mode 100644 (file)
index 0000000..b3c076a
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+
+extern "C"
+{
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_xmlClose(char * fname, unsigned long fname_len)
+{
+    int id;
+    SciErr err;
+    int * addr = 0;
+    XMLDocument * doc;
+
+    CheckLhs(1, 1);
+    CheckRhs(1, 1);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (isXMLDoc(addr))
+    {
+        id = getXMLObjectId(addr);
+        doc = XMLObject::getFromId<XMLDocument>(id);
+        if (!doc)
+        {
+            Scierror(999, "%s: XML document does not exist\n", fname);
+            return 0;
+        }
+        delete doc;
+    }
+    else
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: %s expected\n", fname, 1, "XMLDoc");
+        return 0;
+    }
+
+    LhsVar(1) = 0;
+    PutLhsVar();
+    return 0;
+}
+/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_xmlDump.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_xmlDump.cpp
new file mode 100644 (file)
index 0000000..d8e6036
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLElement.hxx"
+#include "XMLNs.hxx"
+#include "XMLAttr.hxx"
+
+extern "C"
+{
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_xmlDump(char *fname, unsigned long fname_len)
+{
+    int id;
+    int type;
+    SciErr err;
+    int *addr = 0;
+    const char * dump;
+    std::string * str;
+
+    CheckLhs(1, 1);
+    CheckRhs(1, 1);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    type = isXMLObject(addr);
+    if (!type)
+    {
+       Scierror(999, "%s: Wrong type for input argument %i: %s expected\n", fname, 1, "XML object");
+       return 0;
+    }
+
+    id = getXMLObjectId(addr);
+    str = XMLObject::getFromId<XMLObject>(id)->dump();
+    dump = str->c_str();
+    
+    err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, 1, const_cast<const char * const *>(&dump));
+    delete str;
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+    return 0;
+}
+/*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/xml/sci_gateway/cpp/sci_xmlGetOpenStreams.cpp b/scilab/modules/xml/sci_gateway/cpp/sci_xmlGetOpenStreams.cpp
new file mode 100644 (file)
index 0000000..2fa97ee
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+
+extern "C"
+{
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_xmlGetOpenStreams(char *fname, unsigned long fname_len)
+{
+    int id;
+    int j = 1;
+    SciErr err;
+    int *addr = 0;
+
+    CheckLhs(1, 1);
+    CheckRhs(0, 0);
+
+    std::list<XMLDocument *> & openDocs = XMLDocument::getOpenDocuments();
+
+    err = createList(pvApiCtx, Rhs + 1, openDocs.size(), &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    for (std::list<XMLDocument *>::iterator i = openDocs.begin(); i != openDocs.end(); i++, j++)
+    {
+        createXMLObjectAtPosInList(addr, Rhs + 1, XMLDOCUMENT, j, (*i)->getId());
+    }
+
+    LhsVar(1) = Rhs + 1;
+    PutLhsVar();
+    return 0;
+}
+/*--------------------------------------------------------------------------*/
index 211fbfe..8ecb3e1 100644 (file)
  *
  */
 
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include <iostream>
+
 extern "C"
 {
 #include "gw_xml.h"
 #include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
 }
 
+using namespace org_modules_xml;
+
 /*--------------------------------------------------------------------------*/
 int sci_xmlRead(char *fname, unsigned long fname_len)
 {
+    XMLDocument *doc;
+    int id;
+    SciErr err;
+    int *addr = 0;
+    char *path = 0;
+    char *error = 0;
+    
     CheckLhs(1, 1);
+    CheckRhs(1, 1);
+   
+    err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isStringType(pvApiCtx, addr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: String expected\n", fname, 1);
+        return 0;
+    }
+    
+    getAllocatedSingleString(pvApiCtx, addr, &path);
+    
+    doc = new XMLDocument((const char *) path, &error);
+    freeAllocatedSingleString(path);
+
+    if (error)
+    {
+       delete doc;
+       Scierror(999, "%s: Cannot read the file:\n%s", fname, error);
+        return 0;
+    }
+
+    if (!doc->createOnStack(Rhs + 1))
+    {
+       return 0;
+    }
 
-    LhsVar(1) = 0;
+    LhsVar(1) = Rhs + 1;
     PutLhsVar();
     return 0;
 }
index ec0d3a3..e1ea0ea 100644 (file)
  *
  */
 
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLXPath.hxx"
+#include "XMLNodeSet.hxx"
+
 extern "C"
 {
 #include "gw_xml.h"
 #include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
 }
 
-int sci_xmlXPath(char *fname, unsigned long fname_len)
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int sci_xmlXPath(char * fname, unsigned long fname_len)
 {
+    int id;
+    SciErr err;
+    XMLDocument * doc;
+    XMLXPath * xpath;
+    XMLNodeSet * set;
+    int b;
+    double d;
+    const char * str;
+    int *addr = 0;
+    char * query = 0;
+    char *error = 0;
+
     CheckLhs(1, 1);
+    CheckRhs(2, 2);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isXMLDoc(addr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: %s expected\n", fname, 1, "XMLDoc");
+        return 0;
+    }
+
+    id = getXMLObjectId(addr);
+    doc = XMLObject::getFromId<XMLDocument>(id);
+
+    if (!doc)
+    {
+        Scierror(999, "%s: XML document does not exist\n", fname);
+        return 0;
+    }
+
+    err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isStringType(pvApiCtx, addr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: String expected\n", fname, 2);
+        return 0;
+    }
+
+    getAllocatedSingleString(pvApiCtx, addr, &query);
+
+    xpath = doc->makeXPathQuery(const_cast<const char *>(query), &error);
+
+    if (error)
+    {
+       Scierror(999, "%s: Bad XPath query:\n%s", fname, error);
+        return 0;
+    }
 
-    LhsVar(1) = 0;
+    switch (xpath->getResultType())
+    {
+    case XPATH_NODESET :;
+       set = xpath->getNodeSet();
+       id = set->getId();
+        if (!createXMLObjectAtPos(XMLLIST, Rhs + 1, id))
+        {
+            return 0;
+        }
+       break;
+    case XPATH_BOOLEAN :;
+       b = xpath->getBooleanValue();
+       createScalarBoolean(pvApiCtx, Rhs + 1, b);
+       break;
+    case XPATH_NUMBER :;
+       d = xpath->getFloatValue();
+       createScalarDouble(pvApiCtx, Rhs + 1, d);
+       break;
+    case XPATH_STRING :;
+       str = xpath->getStringValue();
+       createSingleString(pvApiCtx, Rhs + 1, str);
+       break;
+    default :;
+       Scierror(999, "%s: XPath query returned a not handled type: %i\n", fname, xpath->getResultType());
+        return 0;
+    }
+    
+    LhsVar(1) = Rhs + 1;
     PutLhsVar();
     return 0;
 }
index 247b4a3..0ba16f5 100644 (file)
 
 -->
 <PRIMITIVE gatewayId="68" primitiveId="1" primitiveName="xmlRead" />
-<PRIMITIVE gatewayId="68" primitiveId="2" primitiveName="xmlXPath" />
-
+<PRIMITIVE gatewayId="68" primitiveId="2" primitiveName="xmlClose" />
+<PRIMITIVE gatewayId="68" primitiveId="3" primitiveName="xmlDump" />
+<PRIMITIVE gatewayId="68" primitiveId="4" primitiveName="xmlGetOpenStreams" />
+<PRIMITIVE gatewayId="68" primitiveId="5" primitiveName="xmlXPath" />
+<PRIMITIVE gatewayId="68" primitiveId="6" primitiveName="%XMLDoc_e" />
+<PRIMITIVE gatewayId="68" primitiveId="7" primitiveName="%XMLElem_e" />
+<PRIMITIVE gatewayId="68" primitiveId="8" primitiveName="%XMLNs_e" />
+<PRIMITIVE gatewayId="68" primitiveId="9" primitiveName="%XMLAttr_e" />
+<PRIMITIVE gatewayId="68" primitiveId="10" primitiveName="%XMLList_e" />
+<PRIMITIVE gatewayId="68" primitiveId="11" primitiveName="%XMLDoc_p" />
+<PRIMITIVE gatewayId="68" primitiveId="12" primitiveName="%XMLElem_p" />
+<PRIMITIVE gatewayId="68" primitiveId="13" primitiveName="%XMLNs_p" />
+<PRIMITIVE gatewayId="68" primitiveId="14" primitiveName="%XMLList_p" />
+<PRIMITIVE gatewayId="68" primitiveId="15" primitiveName="%XMLAttr_p" />
+<PRIMITIVE gatewayId="68" primitiveId="16" primitiveName="%XMLList_size" />
 </GATEWAY>
diff --git a/scilab/modules/xml/src/c/createMlists.c b/scilab/modules/xml/src/c/createMlists.c
new file mode 100644 (file)
index 0000000..fc1787a
--- /dev/null
@@ -0,0 +1,259 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "xml_mlist.h"
+#include "api_scilab.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "MALLOC.h"
+
+#define NB_XMLOBJECTS 6
+static const char *XMLObjects[] = { "XMLDoc", "XMLElem", "XMLAttr", "XMLNs", "XMLList", "XMLNH" };
+
+static const char *_XMLDoc[] = { "XMLDoc", "_id" };
+static const char *_XMLElem[] = { "XMLElem", "_id" };
+static const char *_XMLAttr[] = { "XMLAttr", "_id" };
+static const char *_XMLNs[] = { "XMLNs", "_id" };
+static const char *_XMLList[] = { "XMLList", "_id" };
+static const char *_XMLNotHandled[] = { "XMLNH", "_id" };
+
+/*--------------------------------------------------------------------------*/
+/**
+ * Create a XML Object at the given position on the stack
+ */
+int createXMLObjectAtPos(int type, int pos, int id)
+{
+    const char **fields = NULL;
+    int *mlistaddr = NULL;
+    SciErr err;
+
+    switch (type)
+    {
+    case XMLDOCUMENT:;
+        fields = _XMLDoc;
+        break;
+    case XMLELEMENT:;
+        fields = _XMLElem;
+        break;
+    case XMLATTRIBUTE:;
+        fields = _XMLAttr;
+        break;
+    case XMLNAMESPACE:;
+        fields = _XMLNs;
+        break;
+    case XMLLIST:;
+        fields = _XMLList;
+        break;
+    case XMLNOTHANDLED:;
+        fields = _XMLNotHandled;
+        break;
+    }
+
+    err = createMList(pvApiCtx, pos, 2, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = createMatrixOfStringInList(pvApiCtx, pos, mlistaddr, 1, 1, 2, fields);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = createMatrixOfInteger32InList(pvApiCtx, pos, mlistaddr, 2, 1, 1, &id);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    return 1;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ *
+ */
+int createXMLObjectAtPosInList(int *list, int stackPos, int type, int pos, int id)
+{
+    const char **fields = NULL;
+    int *mlistaddr = NULL;
+    SciErr err;
+
+    err = createMListInList(pvApiCtx, stackPos, list, pos, 2, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    switch (type)
+    {
+    case XMLDOCUMENT:;
+        fields = _XMLDoc;
+        break;
+    case XMLELEMENT:;
+        fields = _XMLElem;
+        break;
+    case XMLATTRIBUTE:;
+        fields = _XMLAttr;
+        break;
+    case XMLNAMESPACE:;
+        fields = _XMLNs;
+        break;
+    case XMLLIST:;
+        fields = _XMLList;
+        break;
+    case XMLNOTHANDLED:;
+        fields = _XMLNotHandled;
+        break;
+    }
+
+    err = createMatrixOfStringInList(pvApiCtx, pos, mlistaddr, 1, 1, 2, fields);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    err = createMatrixOfInteger32InList(pvApiCtx, pos, mlistaddr, 2, 1, 1, &id);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    return 1;
+}
+
+/*--------------------------------------------------------------------------*/
+/**
+ * Compare a string to the mlist type
+ */
+static int compareStrToMlistType(const char **str, int nb, int *mlist)
+{
+    char **mlist_type = NULL;
+    int i = 0, type;
+    int rows, cols;
+    int *lengths = NULL;
+    int cmp = 0;
+
+    SciErr err = getVarType(pvApiCtx, mlist, &type);
+
+    if (err.iErr || type != sci_mlist)
+    {
+        return 0;
+    }
+
+    err = getMatrixOfStringInList(pvApiCtx, mlist, 1, &rows, &cols, NULL, NULL);
+    if (err.iErr || rows != 1 || cols <= 0)
+    {
+        return 0;
+    }
+
+    lengths = (int *)MALLOC(sizeof(int) * rows * cols);
+    err = getMatrixOfStringInList(pvApiCtx, mlist, 1, &rows, &cols, lengths, NULL);
+    if (err.iErr)
+    {
+        return 0;
+    }
+
+    mlist_type = (char **)MALLOC(sizeof(char *) * rows * cols);
+    for (; i < rows * cols; i++)
+    {
+        mlist_type[i] = (char *)MALLOC(sizeof(char) * (lengths[i] + 1));
+    }
+
+    err = getMatrixOfStringInList(pvApiCtx, mlist, 1, &rows, &cols, lengths, mlist_type);
+    if (err.iErr)
+    {
+        return 0;
+    }
+
+    for (i = 0; i < nb && !cmp; i++)
+    {
+        cmp = !strcmp(mlist_type[0], str[i]);
+    }
+
+    freeAllocatedMatrixOfString(rows, cols, mlist_type);
+    FREE(lengths);
+
+    if (cmp)
+    {
+        // useful when called by isXMLObject
+        cmp = i;
+    }
+
+    return cmp;
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLDoc(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLElem(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects + 1, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLAttr(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects + 2, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLNs(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects + 3, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLList(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects + 4, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLNotHandled(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects + 5, 1, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int isXMLObject(int *mlist)
+{
+    return compareStrToMlistType(XMLObjects, NB_XMLOBJECTS, mlist);
+}
+
+/*--------------------------------------------------------------------------*/
+int getXMLObjectId(int *mlist)
+{
+    int *id = NULL;
+    int row, col;
+
+    SciErr err = getMatrixOfInteger32InList(pvApiCtx, mlist, 2, &row, &col, &id);
+
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return -1;
+    }
+
+    return *id;
+}
diff --git a/scilab/modules/xml/src/c/xmlread.c b/scilab/modules/xml/src/c/xmlread.c
new file mode 100644 (file)
index 0000000..b5ab5d5
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+
+int xmlread(char *path, xmlDoc **doc) 
+{
+    LIBXML_TEST_VERSION
+
+    *doc = xmlReadFile(path, NULL, 0);
+}
diff --git a/scilab/modules/xml/src/cpp/VariableScope.cpp b/scilab/modules/xml/src/cpp/VariableScope.cpp
new file mode 100644 (file)
index 0000000..d6814c7
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "VariableScope.hxx"
+#include "XMLObject.hxx"
+
+namespace org_modules_xml
+{
+    VariableScope::VariableScope(int initialSize_)
+    {
+        position = -1;
+        this->initialSize = initialSize_;
+        this->scope = new XMLObject*[initialSize_];
+       std::fill(this->scope, this->scope + initialSize_, static_cast<XMLObject *>(0));
+       this->freePlaces = new std::stack<int>();
+    }
+
+    VariableScope::~VariableScope()
+    {
+        for (int i = 0; i <= position; i++)
+        {
+            if (scope[i])
+            {
+                delete scope[i];
+            }
+        }
+        delete[] scope;
+        delete freePlaces;
+    }
+
+    int VariableScope::getVariableId(const XMLObject & obj)
+    {
+        int returnValue;
+
+        if (freePlaces->size() != 0)
+        {
+            returnValue = freePlaces->top();
+            freePlaces->pop();
+        }
+        else
+        {
+            if (position == initialSize - 1)
+            {
+                int newSize = initialSize * 2;
+                XMLObject ** newScope = new XMLObject*[newSize];
+               std::fill(this->scope, this->scope + initialSize, static_cast<XMLObject *>(0));
+               for (int i = 0; i < initialSize; i++)
+                {
+                    newScope[i] = scope[i];
+                }
+                delete[] scope;
+                initialSize = newSize;
+                scope = newScope;
+            }
+            returnValue = ++position;
+        }
+        scope[returnValue] = const_cast<XMLObject*>(&obj);
+
+        return returnValue;
+    }
+
+    XMLObject * VariableScope::getVariableFromId(int id)
+    {
+        if (id >= 0 && id < initialSize)
+        {
+            return scope[id];
+        }
+
+        return 0;
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/VariableScope.hxx b/scilab/modules/xml/src/cpp/VariableScope.hxx
new file mode 100644 (file)
index 0000000..2c52a1a
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <stack>
+#include <iostream>
+
+namespace org_modules_xml
+{
+    class XMLObject;
+
+    class VariableScope
+    {
+
+        XMLObject **scope;
+        int position;
+        int initialSize;
+        std::stack<int> *freePlaces;
+
+    public :
+        VariableScope(int initialSize);
+        ~VariableScope();
+
+        int getVariableId(const XMLObject & obj);
+        XMLObject * getVariableFromId(int id);
+       
+        template <class T> void removeId(int id)
+           {
+               if (id >= 0 && id < initialSize && scope[id])
+               {
+                   removeDependencies<T>(scope[id]);
+                   scope[id] = static_cast<XMLObject *>(0);
+                   freePlaces->push(id);
+               }
+           }
+
+    private :
+       template <class T> void removeDependencies(XMLObject * obj)
+           {
+               for (int i = 0; i <= position; i++)
+               {
+                   if (scope[i] && reinterpret_cast<T *>(scope[i])->getXMLObjectParent() == obj)
+                   {
+                       delete reinterpret_cast<T *>(scope[i]);
+                   }
+               }
+           }
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLAttr.cpp b/scilab/modules/xml/src/cpp/XMLAttr.cpp
new file mode 100644 (file)
index 0000000..c973417
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+#include <string.h>
+
+#include "XMLObject.hxx"
+#include "XMLAttr.hxx"
+#include "XMLElement.hxx"
+#include "VariableScope.hxx"
+
+namespace org_modules_xml
+{
+    XMLAttr::XMLAttr(XMLElement * elem)
+        : XMLObject()
+    {
+        this->elem = elem;
+       scilabType = XMLATTRIBUTE;
+    }
+
+    XMLAttr::~XMLAttr()
+    {
+        scope.removeId<XMLAttr>(id);
+    }
+
+    XMLObject * XMLAttr::getXMLObjectParent()
+    {
+        return elem;
+    }
+
+    const char * XMLAttr::getAttributeValue(const char * name)
+    {
+        xmlNode * node = elem->getRealNode();
+        xmlAttr * attrs = xmlHasProp(node, (const xmlChar *)name);
+        if (attrs)
+        {
+            return (const char *)attrs->children->content;
+        }
+
+        return 0;
+    }
+
+    const char * XMLAttr::getAttributeValue(const char * ns, const char * name)
+    {
+        xmlNode * node = elem->getRealNode();
+        xmlAttr * attrs = 0;
+        for (xmlAttr * cur = node->properties; cur; cur = cur->next)
+        {
+            if (cur->ns && !strcmp(name, (const char *)cur->name) && (!strcmp(ns, (const char *)cur->ns->prefix) || !strcmp(ns, (const char *)cur->ns->href)))
+            {
+                attrs = cur;
+                break;
+            }
+        }
+
+        if (attrs)
+        {
+            return (const char *)attrs->children->content;
+        }
+
+        return 0;
+    }
+
+    std::string * XMLAttr::toString()
+    {
+       std::string str = "XML Attributes\n";
+       xmlNode * node = elem->getRealNode();
+        xmlAttr * attrs = 0;
+
+        for (xmlAttr * cur = node->properties; cur; cur = cur->next)
+        {
+           if (cur->ns)
+           {
+               str += " " + std::string((const char *)cur->ns->prefix) + ":" + std::string((const char *)cur->name) + " --> " + std::string((const char *)cur->children->content) + "\n"; 
+           }
+           else
+           {
+               str += " " + std::string((const char *)cur->name) + " --> " + std::string((const char *)cur->children->content) + "\n"; 
+           }
+       }
+
+       return new std::string(str);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLAttr.hxx b/scilab/modules/xml/src/cpp/XMLAttr.hxx
new file mode 100644 (file)
index 0000000..07a7119
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLElement;
+    class XMLObject;
+
+    class XMLAttr : public XMLObject
+    {
+       XMLElement * elem;
+
+    public :
+       XMLAttr(XMLElement * elem);
+       ~XMLAttr();
+
+       const char * getAttributeValue(const char * name);
+       const char * getAttributeValue(const char * prefix, const char * name);
+       XMLObject * getXMLObjectParent();
+       std::string * toString();
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLDocument.cpp b/scilab/modules/xml/src/cpp/XMLDocument.cpp
new file mode 100644 (file)
index 0000000..1796033
--- /dev/null
@@ -0,0 +1,199 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLElement.hxx"
+#include "XMLXPath.hxx"
+#include "VariableScope.hxx"
+
+extern "C" {
+#include "expandPathVariable.h"
+#include "MALLOC.h"
+}
+
+#define BUFFER_SIZE 1024
+
+namespace org_modules_xml
+{
+    std::string * XMLDocument::errorBuffer = 0;
+    std::string * XMLDocument::errorXPathBuffer = 0;
+    std::list<XMLDocument *> & XMLDocument::openDocs = *new std::list<XMLDocument *>();
+
+    /**
+     * Default constructor
+     * @param path the path to the file (can be an url)
+     * @param error will contain parsing errors if exists
+     */
+    XMLDocument::XMLDocument(const char * path, char ** error)
+        : XMLObject()
+    {
+        char * expandedPath = expandPathVariable(const_cast<char *>(path));
+        document = readDocument(const_cast<const char *>(expandedPath), error);
+        FREE(expandedPath);
+        if (document)
+        {
+            openDocs.push_back(this);
+        }
+       scilabType = XMLDOCUMENT;
+    }
+
+    /**
+     * Destructor
+     */
+    XMLDocument::~XMLDocument()
+    {
+        scope.removeId<XMLDocument>(id);
+        if (document)
+        {
+            openDocs.remove(this);
+            xmlFreeDoc(document);
+        }
+        if (errorBuffer)
+        {
+            delete errorBuffer;
+            errorBuffer = 0;
+        }
+        if (errorXPathBuffer)
+        {
+            delete errorXPathBuffer;
+            errorXPathBuffer = 0;
+        }
+    }
+
+    XMLXPath * XMLDocument::makeXPathQuery(const char * query, char ** error)
+    {
+        if (errorXPathBuffer)
+        {
+            delete errorXPathBuffer;
+        }
+        errorXPathBuffer = new std::string();
+
+        xmlXPathContext * ctxt = xmlXPathNewContext(document);
+        if (!ctxt)
+        {
+            *error = const_cast<char *>("Cannot create a parser context");
+            return 0;
+        }
+
+        xmlSetStructuredErrorFunc(ctxt, XMLDocument::errorXPathFunction);
+        xmlXPathCompExpr * expr = xmlXPathCtxtCompile(ctxt, (const xmlChar *)query);
+        if (!expr)
+        {
+            *error = const_cast<char *>(errorXPathBuffer->c_str());
+            return 0;
+        }
+
+        xmlXPathObject * xpath = xmlXPathCompiledEval(expr, ctxt);
+        if (!xpath)
+        {
+            *error = const_cast<char *>(errorXPathBuffer->c_str());
+            return 0;
+        }
+
+        return new XMLXPath(this, xpath);
+    }
+
+    XMLObject * XMLDocument::getXMLObjectParent()
+    {
+        return 0;
+    }
+
+    std::string  * XMLDocument::toString()
+    {
+        std::string str = "XML Document\n";
+        str += "URL: " + std::string(getDocumentURL());
+
+        return new std::string(str);
+    }
+
+    std::string * XMLDocument::dump()
+    {
+        xmlChar * buffer = 0;
+        int size = 0;
+        xmlDocDumpFormatMemory(document, &buffer, &size, 1);
+        std::string * str = new std::string((const char *)buffer);
+        xmlFree(buffer);
+
+        return str;
+    }
+
+    /**
+     * @return the root element of this XMLDocument
+     */
+    XMLElement * XMLDocument::getRoot(void)
+    {
+        return new XMLElement(this, xmlDocGetRootElement(document));
+    }
+
+    std::list<XMLDocument *> & XMLDocument::getOpenDocuments()
+    {
+        return openDocs;
+    }
+
+    /**
+     * Read and parse a document
+     * @param filename the file name
+     * @param error a string where to write the parsing errors
+     * @return a pointer on a xmlDoc
+     */
+    xmlDoc * XMLDocument::readDocument(const char * filename, char **error)
+    {
+        xmlParserCtxtPtr ctxt;
+        xmlDoc * doc;
+
+        if (errorBuffer)
+        {
+            delete errorBuffer;
+        }
+        errorBuffer = new std::string();
+
+        ctxt = xmlNewParserCtxt();
+        if (!ctxt)
+        {
+            *error = const_cast<char *>("Cannot create a parser context");
+            return 0;
+        }
+
+        xmlSetGenericErrorFunc(ctxt, XMLDocument::errorFunction);
+
+        doc = xmlCtxtReadFile(ctxt, filename, 0, 0);
+        if (!doc)
+        {
+            *error = const_cast<char *>(errorBuffer->c_str());
+        }
+
+        return doc;
+    }
+
+    /**
+     * Error function to use in the parser (see xmlSetGenericErrorFunc)
+     * @param ctx the context
+     * @param msg the error message
+     * @param ... the arguments to format the error message
+     */
+    void XMLDocument::errorFunction(void * ctx, const char * msg, ...)
+    {
+        char str[BUFFER_SIZE];
+        va_list args;
+
+        va_start(args, msg);
+        std::vsnprintf(str, BUFFER_SIZE, msg, args);
+        va_end(args);
+        errorBuffer->append(str);
+    }
+
+    void XMLDocument::errorXPathFunction(void * ctx, xmlError * error)
+    {
+        errorXPathBuffer->append(error->message);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLDocument.hxx b/scilab/modules/xml/src/cpp/XMLDocument.hxx
new file mode 100644 (file)
index 0000000..a5b4a24
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <cstdio>
+#include <list>
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLElement;
+    class XMLObject;
+    class XMLXPath;
+
+    class XMLDocument : public XMLObject
+    {
+       static std::list<XMLDocument *> & openDocs;
+        xmlDoc * document;
+       
+    public :
+        XMLDocument(const char * path, char **error);
+       ~XMLDocument();
+
+       static std::list<XMLDocument *> & getOpenDocuments();
+
+       xmlDoc * getRealDocument() { return document; }
+        XMLElement * getRoot();
+       XMLXPath * makeXPathQuery(const char * query, char ** error);
+        const char * getDocumentURL() { return (const char *)document->URL; }
+        XMLObject * getXMLObjectParent();
+       std::string * dump();
+       std::string * toString();
+
+    private :
+       static void errorFunction(void * ctx, const char * msg, ...);
+       static void errorXPathFunction(void * ctx, xmlError * error);
+       static xmlDoc * readDocument(const char * filename, char ** error);
+
+       static std::string * errorBuffer;
+       static std::string * errorXPathBuffer;
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLElement.cpp b/scilab/modules/xml/src/cpp/XMLElement.cpp
new file mode 100644 (file)
index 0000000..9844514
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLElement.hxx"
+#include "XMLDocument.hxx"
+#include "XMLNodeList.hxx"
+#include "XMLNs.hxx"
+#include "XMLAttr.hxx"
+#include "VariableScope.hxx"
+
+extern "C" {
+    extern const char * nodes_type[];
+}
+
+namespace org_modules_xml
+{
+    XMLElement::XMLElement(XMLDocument * doc, xmlNode * node)
+        : XMLObject()
+    {
+        this->node = node;
+        this->doc = doc;
+       scilabType = XMLELEMENT;
+    }
+
+    XMLElement::~XMLElement()
+    {
+        scope.removeId<XMLElement>(id);
+    }
+
+    XMLObject * XMLElement::getXMLObjectParent()
+    {
+        return doc;
+    }
+
+    const char * XMLElement::getNodeContent()
+    {
+        return (const char *)xmlNodeGetContent(node);
+    }
+
+    std::string * XMLElement::dump()
+    {
+        xmlBufferPtr buffer = xmlBufferCreate();
+        xmlNodeDump(buffer, doc->getRealDocument(), node, 0, 1);
+       std::string * str = new std::string((const char *)buffer->content);
+        xmlBufferFree(buffer);
+
+        return str;
+    }
+
+    std::string * XMLElement::toString()
+    {
+       std::string ns = "";
+       std::string prefix = "";
+
+       if (node->ns)
+       {
+           if (node->ns->href)
+           {
+               ns = std::string((const char *)node->ns->href);
+           }
+
+           if (node->ns->prefix)
+           {
+               prefix = std::string((const char *)node->ns->prefix);
+           }
+       }
+
+        std::string str = "XML Element\n";
+        str += "name: " + std::string(getNodeName()) + "\n";
+       str += "namespace URI: " + ns + "\n";
+        str += "namespace prefix: " + prefix + "\n";
+       str += "type: " + std::string(nodes_type[getNodeType() - 1]) + "\n";
+        str += "definition line: " + intToStr(node->line);
+       
+        return new std::string(str);
+    }
+
+    XMLNs * XMLElement::getNodeNameSpace(void)
+    {
+        return new XMLNs(this, node->ns);
+    }
+
+    XMLNodeList * XMLElement::getChildren(void)
+    {
+        return new XMLNodeList(new XMLElement(doc, node->children));
+    }
+
+    XMLAttr * XMLElement::getAttributes(void)
+    {
+        return new XMLAttr(this);
+    }
+
+    XMLElement * XMLElement::getParentElement(void)
+    {
+        return new XMLElement(doc, node->parent);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLElement.hxx b/scilab/modules/xml/src/cpp/XMLElement.hxx
new file mode 100644 (file)
index 0000000..3831b03
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLObject;
+    class XMLDocument;
+    class XMLNodeList;
+    class XMLNs;
+    class XMLAttr;
+
+    class XMLElement : public XMLObject
+    {
+        xmlNode * node;
+        XMLDocument * doc;
+
+    public:
+        XMLElement(XMLDocument * doc, xmlNode * node);
+        ~XMLElement();
+
+        const char * getNodeName(void) { return (const char *)node->name; }
+        XMLNs * getNodeNameSpace(void);
+        const char * getNodeContent(void);
+        int getNodeType(void) { return node->type; }
+        XMLAttr * getAttributes(void);
+        XMLElement * getParentElement(void);
+        XMLNodeList * getChildren(void);
+        xmlNode * getRealNode() { return node; }
+        XMLDocument * getXMLDocument() { return doc; }
+       XMLObject * getXMLObjectParent();
+       std::string * dump();
+        std::string * toString();
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLList.cpp b/scilab/modules/xml/src/cpp/XMLList.cpp
new file mode 100644 (file)
index 0000000..5dd81b6
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLList.hxx"
+
+namespace org_modules_xml
+{
+    XMLList::XMLList()
+        : XMLObject()
+    {
+       scilabType = XMLLIST;
+    }
+
+    std::string * XMLList::toString()
+    {
+       std::string str = "XML List\n";
+        str += "size: " + intToStr(getSize());
+       
+        return new std::string(str);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLList.hxx b/scilab/modules/xml/src/cpp/XMLList.hxx
new file mode 100644 (file)
index 0000000..1d8a9cb
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLObject;
+
+    class XMLList : public XMLObject
+    {
+
+    public :
+       XMLList();
+
+       virtual XMLObject * getListElement(int index) = 0;
+
+       int getSize() { return size; }
+       std::string * toString();
+
+    protected :
+       int size;
+
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNodeList.cpp b/scilab/modules/xml/src/cpp/XMLNodeList.cpp
new file mode 100644 (file)
index 0000000..6aac247
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "XMLObject.hxx"
+#include "XMLElement.hxx"
+#include "XMLNodeList.hxx"
+#include "VariableScope.hxx"
+
+namespace org_modules_xml
+{
+
+    int XMLNodeList::getNodeListSize(xmlNode * node)
+    {
+        xmlNode * n = node;
+        int i = 0;
+        for (; n; n = n->next, i++);
+
+        return i;
+    }
+
+    XMLNodeList::XMLNodeList(XMLElement * elem)
+        : XMLList()
+    {
+        this->elem = elem;
+        this->size = getNodeListSize(elem->getRealNode());
+        this->prev = 1;
+        this->prevNode = elem->getRealNode();
+    }
+
+    XMLNodeList::~XMLNodeList()
+    {
+        scope.removeId<XMLNodeList>(id);
+    }
+
+    XMLObject * XMLNodeList::getXMLObjectParent()
+    {
+        return elem;
+    }
+
+    XMLObject * XMLNodeList::getListElement(int index)
+    {
+        if (index >= 1 && index <= size)
+        {
+            if (index != prev)
+            {
+                if (index < prev)
+                {
+                    for (int i = prev; i > index; i--, prevNode = prevNode->prev);
+                }
+                else
+                {
+                    for (int i = prev; i < index; i++, prevNode = prevNode->next);
+                }
+                prev = index;
+            }
+
+            return new XMLElement(elem->getXMLDocument(), prevNode);
+        }
+
+        return 0;
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNodeList.hxx b/scilab/modules/xml/src/cpp/XMLNodeList.hxx
new file mode 100644 (file)
index 0000000..806ef4f
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLList.hxx"
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLElement;
+    
+    class XMLNodeList : public XMLList
+    {
+       
+       XMLElement * elem;
+       int prev;
+       xmlNode * prevNode; 
+
+    public :
+       XMLNodeList(XMLElement * elem);
+       ~XMLNodeList();
+
+       XMLObject * getListElement(int index);
+       XMLObject * getXMLObjectParent();
+
+    private :
+       static int getNodeListSize(xmlNode * node);
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNodeSet.cpp b/scilab/modules/xml/src/cpp/XMLNodeSet.cpp
new file mode 100644 (file)
index 0000000..5908954
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "XMLObject.hxx"
+#include "XMLElement.hxx"
+#include "XMLDocument.hxx"
+#include "XMLAttr.hxx"
+#include "XMLNs.hxx"
+#include "XMLNotHandledElement.hxx"
+#include "XMLNodeSet.hxx"
+#include "VariableScope.hxx"
+
+namespace org_modules_xml
+{
+
+    XMLNodeSet::XMLNodeSet(XMLDocument * doc, xmlNodeSet * nodeSet)
+        : XMLList()
+    {
+        this->doc = doc;
+        this->nodeSet = nodeSet;
+       if (nodeSet)
+       {
+           this->size = nodeSet->nodeNr;
+       }
+       else
+       {
+           this->size = 0;
+       }
+    }
+
+    XMLNodeSet::~XMLNodeSet()
+    {
+        scope.removeId<XMLNodeSet>(id);
+    }
+
+    XMLObject * XMLNodeSet::getXMLObjectParent()
+    {
+        return doc;
+    }
+
+    XMLObject * XMLNodeSet::getListElement(int index)
+    {
+        if (nodeSet && index >= 1 && index <= size)
+        {
+           xmlNode * node = nodeSet->nodeTab[index - 1];
+           switch (node->type)
+           {
+           case XML_ELEMENT_NODE :
+           case XML_TEXT_NODE :
+           case XML_CDATA_SECTION_NODE :
+           case XML_COMMENT_NODE :
+               return new XMLElement(doc, node);
+           case XML_ATTRIBUTE_NODE :
+               return new XMLAttr(new XMLElement(doc, node->parent));
+           case XML_NAMESPACE_DECL :
+               return new XMLNs(doc, (xmlNs *) node);
+           case XML_ELEMENT_DECL :
+           case XML_ATTRIBUTE_DECL :
+           case XML_ENTITY_DECL :
+           case XML_XINCLUDE_START :
+           case XML_XINCLUDE_END:
+               return new XMLNotHandledElement(doc, node);
+           }
+
+       }
+       
+        return 0;
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNodeSet.hxx b/scilab/modules/xml/src/cpp/XMLNodeSet.hxx
new file mode 100644 (file)
index 0000000..df2d3db
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "xml.h"
+#include "XMLList.hxx"
+
+namespace org_modules_xml
+{
+    class XMLDocument;
+    class XMLElement;
+
+    class XMLNodeSet : public XMLList
+    {
+
+        XMLDocument * doc;
+        xmlNodeSet * nodeSet;
+
+    public :
+        XMLNodeSet(XMLDocument * doc, xmlNodeSet * nodeSet);
+        ~XMLNodeSet();
+
+       XMLObject * getXMLObjectParent();
+        XMLObject * getListElement(int index);
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNotHandledElement.cpp b/scilab/modules/xml/src/cpp/XMLNotHandledElement.cpp
new file mode 100644 (file)
index 0000000..0cb0810
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLNotHandledElement.hxx"
+#include "VariableScope.hxx"
+
+extern "C" {
+    extern const char * nodes_type[];
+}
+
+namespace org_modules_xml
+{
+    XMLNotHandledElement::XMLNotHandledElement(XMLObject * parent_, xmlNode * node_)
+        : XMLObject()
+    {
+        this->parent = parent_;
+       this->node = node_;
+       scilabType = XMLNOTHANDLED;
+    }
+
+    XMLNotHandledElement::~XMLNotHandledElement()
+    {
+        scope.removeId<XMLNotHandledElement>(id);
+    }
+
+    XMLObject * XMLNotHandledElement::getXMLObjectParent()
+    {
+        return parent;
+    }
+
+    std::string * XMLNotHandledElement::toString()
+    {
+        return new std::string("Not handled XML Element\ntype" + std::string(nodes_type[node->type - 1]));
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNotHandledElement.hxx b/scilab/modules/xml/src/cpp/XMLNotHandledElement.hxx
new file mode 100644 (file)
index 0000000..0af4601
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLObject;
+    
+    class XMLNotHandledElement : public XMLObject
+    {
+       XMLObject * parent;
+       xmlNode * node;
+       
+    public:
+       XMLNotHandledElement(XMLObject * parent, xmlNode * node);
+       ~XMLNotHandledElement();
+       
+       XMLObject * getXMLObjectParent();
+       std::string * toString();
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNs.cpp b/scilab/modules/xml/src/cpp/XMLNs.cpp
new file mode 100644 (file)
index 0000000..7497fb1
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLElement.hxx"
+#include "XMLNs.hxx"
+#include "VariableScope.hxx"
+
+namespace org_modules_xml
+{
+    XMLNs::XMLNs(XMLObject * parent, xmlNs * ns)
+        : XMLObject()
+    {
+        this->ns = ns;
+        this->parent = parent;
+       scilabType = XMLNAMESPACE;
+    }
+
+    XMLNs::~XMLNs()
+    {
+        scope.removeId<XMLNs>(id);
+    }
+
+    XMLObject * XMLNs::getXMLObjectParent()
+    {
+        return parent;
+    }
+
+    std::string * XMLNs::toString()
+    {
+        std::string str = "XML Namespace\n";
+        str += "uri: " + std::string(this->getURI()) + "\n";
+        str += "prefix: " + std::string(this->getPrefix());
+
+        return new std::string(str);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLNs.hxx b/scilab/modules/xml/src/cpp/XMLNs.hxx
new file mode 100644 (file)
index 0000000..a3582e4
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLElement;
+    class XMLObject;
+    
+    class XMLNs : public XMLObject
+    {
+       XMLObject * parent;
+       xmlNs * ns;
+       
+    public:
+       XMLNs(XMLObject * parent, xmlNs * ns);
+       ~XMLNs();
+       
+       const char * getURI(void) { return ns == 0 ? "" : (const char *)ns->href; }
+       const char * getPrefix(void) { return ns == 0 ? "" : (const char *)ns->prefix; }
+       XMLObject * getXMLObjectParent();
+       std::string * toString();
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLObject.cpp b/scilab/modules/xml/src/cpp/XMLObject.cpp
new file mode 100644 (file)
index 0000000..60e7417
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "VariableScope.hxx"
+#include "XMLObject.hxx"
+
+#define SCOPE_SIZE 1024
+
+namespace org_modules_xml
+{
+    VariableScope & XMLObject::scope = *new VariableScope(SCOPE_SIZE);
+
+    XMLObject::XMLObject()
+    {
+       this->id = scope.getVariableId(*this);
+       scilabType = -1;
+    }
+
+    XMLObject * XMLObject::getVariableFromId(int id)
+    {
+       return scope.getVariableFromId(id);
+    }
+
+    int XMLObject::createOnStack(int pos)
+    {
+       if (scilabType != -1)
+       {
+           return createXMLObjectAtPos(scilabType, pos, id);
+       }
+
+       return 0;
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLObject.hxx b/scilab/modules/xml/src/cpp/XMLObject.hxx
new file mode 100644 (file)
index 0000000..2bd20f8
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+#include <sstream>
+
+extern "C" {
+#include "xml_mlist.h"
+}
+
+namespace org_modules_xml
+{
+    class VariableScope;
+
+    class XMLObject
+    {
+       
+    public :
+        XMLObject();
+        virtual ~XMLObject() { }
+
+        virtual XMLObject * getXMLObjectParent() = 0;
+       virtual std::string * toString() { }
+       virtual std::string * dump() { return new std::string(""); }
+
+       int getId() { return id; }
+       int createOnStack(int pos);
+
+        template <class T>
+        static T* getFromId(int id) { return static_cast<T*>(getVariableFromId(id)); }
+       
+       static std::string intToStr(int n)
+           {
+               std::stringstream oss;
+               oss << n;
+               return oss.str();
+           }
+
+    protected :
+        int id;
+       int scilabType;
+       
+        static VariableScope & scope;
+
+    private :
+        static XMLObject * getVariableFromId(int id);
+
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/XMLXPath.cpp b/scilab/modules/xml/src/cpp/XMLXPath.cpp
new file mode 100644 (file)
index 0000000..d44dcf5
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLElement.hxx"
+#include "XMLXPath.hxx"
+#include "XMLNodeSet.hxx"
+#include "VariableScope.hxx"
+
+namespace org_modules_xml
+{
+    XMLXPath::XMLXPath(XMLDocument * doc, xmlXPathObject * xpath)
+        : XMLObject()
+    {
+        this->doc = doc;
+        this->xpath = xpath;
+    }
+
+    XMLXPath::~XMLXPath()
+    {
+        scope.removeId<XMLXPath>(id);
+    }
+
+    XMLObject * XMLXPath::getXMLObjectParent()
+    {
+        return doc;
+    }
+
+    XMLNodeSet * XMLXPath::getNodeSet()
+    {
+       return new XMLNodeSet(doc, xpath->nodesetval);
+    }
+}
diff --git a/scilab/modules/xml/src/cpp/XMLXPath.hxx b/scilab/modules/xml/src/cpp/XMLXPath.hxx
new file mode 100644 (file)
index 0000000..1960692
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include <string>
+
+#include "xml.h"
+
+namespace org_modules_xml
+{
+    class XMLDocument;
+    class XMLObject;
+    class XMLNodeSet;
+
+    class XMLXPath : public XMLObject
+    {
+        XMLDocument * doc;
+        xmlXPathObject * xpath;
+
+    public:
+        XMLXPath(XMLDocument * doc, xmlXPathObject * xpath);
+        ~XMLXPath();
+
+        int getBooleanValue(void) { return xpath->boolval; }
+        double getFloatValue(void) { return xpath->floatval; }
+        const char * getStringValue(void) { return (const char *)xpath->stringval; }
+        int getResultType(void) { return xpath->type; }
+        XMLNodeSet * getNodeSet(void);
+        XMLObject * getXMLObjectParent();
+    };
+}
diff --git a/scilab/modules/xml/src/cpp/extraction.hpp b/scilab/modules/xml/src/cpp/extraction.hpp
new file mode 100644 (file)
index 0000000..124c305
--- /dev/null
@@ -0,0 +1,200 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2011 - DIGITEO - Calixte DENIZET
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ *
+ */
+
+#include "XMLObject.hxx"
+#include "XMLDocument.hxx"
+#include "XMLElement.hxx"
+#include "XMLNs.hxx"
+#include "XMLAttr.hxx"
+#include "XMLNodeList.hxx"
+
+extern "C"
+{
+#include <stdio.h>
+#include "gw_xml.h"
+#include "stack-c.h"
+#include "Scierror.h"
+#include "api_scilab.h"
+#include "xml_mlist.h"
+#include "xml_constants.h"
+}
+
+using namespace org_modules_xml;
+
+/*--------------------------------------------------------------------------*/
+int createStringOnStack(char * fname, const char * str, int pos)
+{
+    SciErr err;
+
+    if (!str)
+    {
+        str = "";
+    }
+    err = createMatrixOfString(pvApiCtx, pos, 1, 1, const_cast<const char * const *>(&str));
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    return 1;
+}
+/*--------------------------------------------------------------------------*/
+int createVariableOnStack(char * fname, XMLDocument & doc, const char * field, int pos)
+{
+    if (!strcmp("root", field))
+    {
+       return doc.getRoot()->createOnStack(pos);
+    }
+    else if (!strcmp("url", field))
+    {
+        return createStringOnStack(fname, doc.getDocumentURL(), pos);
+    }
+    else
+    {
+        Scierror(999, "%s: Unknown field: %s\n", fname, field);
+        return 0;
+    }
+
+    return 1;
+}
+/*--------------------------------------------------------------------------*/
+int createVariableOnStack(char * fname, XMLElement & elem, const char * field, int pos)
+{
+    if (!strcmp("name", field))
+    {
+        createStringOnStack(fname, elem.getNodeName(), pos);
+    }
+    else if (!strcmp("namespace", field))
+    {
+        return elem.getNodeNameSpace()->createOnStack(pos);
+    }
+    else if (!strcmp("content", field))
+    {
+        const char * content = elem.getNodeContent();
+        createStringOnStack(fname, content, pos);
+        xmlFree(const_cast<char *>(content));
+    }
+    else if (!strcmp("type", field))
+    {
+        createStringOnStack(fname, nodes_type[elem.getNodeType() - 1], pos);
+    }
+    else if (!strcmp("parent", field))
+    {
+        return elem.getParentElement()->createOnStack(pos);
+    }
+    else if (!strcmp("attributes", field))
+    {
+        return elem.getAttributes()->createOnStack(pos);
+    }
+    else if (!strcmp("children", field))
+    {
+        return elem.getChildren()->createOnStack(pos);
+    }
+    else
+    {
+        Scierror(999, "%s: Unknown field: %s\n", fname, field);
+        return 0;
+    }
+}
+/*--------------------------------------------------------------------------*/
+int createVariableOnStack(char * fname, XMLNs & ns, const char * field, int pos)
+{
+    SciErr err;
+
+    if (!strcmp("uri", field))
+    {
+        createStringOnStack(fname, ns.getURI(), pos);
+    }
+    else if (!strcmp("prefix", field))
+    {
+        createStringOnStack(fname, ns.getPrefix(), pos);
+    }
+    else
+    {
+        Scierror(999, "%s: Unknown field: %s\n", fname, field);
+        return 0;
+    }
+
+    return 1;
+}
+/*--------------------------------------------------------------------------*/
+int createVariableOnStack(char * fname, XMLAttr & attr, const char * field, int pos)
+{
+    const char * value = attr.getAttributeValue(field);
+    int ret = createStringOnStack(fname, value, pos);
+    if (value)
+    {
+        xmlFree(const_cast<char *>(value));
+    }
+
+    return ret;
+}
+/*--------------------------------------------------------------------------*/
+template<class T>
+int sci_extraction(char * fname, unsigned long fname_len)
+{
+    T * t;
+    int id;
+    SciErr err;
+    int * fieldaddr = 0;
+    int *mlistaddr = 0;
+    char * field = 0;
+    int ret;
+
+    CheckLhs(1, 1);
+    CheckRhs(2, 2);
+
+    err = getVarAddressFromPosition(pvApiCtx, 1, &fieldaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    if (!isStringType(pvApiCtx, fieldaddr))
+    {
+        Scierror(999, "%s: Wrong type for input argument %i: String expected\n", fname, 1);
+        return 0;
+    }
+
+    err = getVarAddressFromPosition(pvApiCtx, 2, &mlistaddr);
+    if (err.iErr)
+    {
+        printError(&err, 0);
+        return 0;
+    }
+
+    getAllocatedSingleString(pvApiCtx, fieldaddr, &field);
+    id = getXMLObjectId(mlistaddr);
+
+    t = XMLObject::getFromId<T>(id);
+
+    if (!t)
+    {
+        Scierror(999, "%s: XML object does not exist\n", fname);
+        return 0;
+    }
+
+    ret = createVariableOnStack(fname, *t, const_cast<char *>(field), Rhs + 1);
+    if (ret)
+    {
+        LhsVar(1) = Rhs + 1;
+    }
+    else
+    {
+        LhsVar(1) = 0;
+    }
+    PutLhsVar();
+
+    return 0;
+}