Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlNs.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - Scilab Enterprises - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include "XMLObject.hxx"
14 #include "XMLNs.hxx"
15 #include "XMLElement.hxx"
16
17 extern "C"
18 {
19 #include "gw_xml.h"
20 #include "Scierror.h"
21 #include "api_scilab.h"
22 #include "xml_mlist.h"
23 #include "localization.h"
24 }
25
26 using namespace org_modules_xml;
27
28 /*--------------------------------------------------------------------------*/
29 int sci_xmlNs(char *fname, unsigned long fname_len)
30 {
31     int *addr = 0;
32     SciErr err;
33     XMLNs *ns = 0;
34     XMLElement *elem = 0;
35     char *prefix = 0;
36     char *href = 0;
37     int i = 0;
38     char **vars[] = { &prefix, &href };
39
40     CheckLhs(1, 1);
41     CheckRhs(3, 3);
42
43     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
44     if (err.iErr)
45     {
46         printError(&err, 0);
47         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
48         return 0;
49     }
50
51     if (!isXMLElem(addr, pvApiCtx))
52     {
53         Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLElem");
54         return 0;
55     }
56
57     elem = XMLObject::getFromId < XMLElement > (getXMLObjectId(addr, pvApiCtx));
58     if (!elem)
59     {
60         Scierror(999, gettext("%s: XML Element does not exist.\n"), fname);
61         return 0;
62     }
63
64     for (; i < Rhs - 1; i++)
65     {
66         err = getVarAddressFromPosition(pvApiCtx, i + 2, &addr);
67         if (err.iErr)
68         {
69             printError(&err, 0);
70             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, i + 2);
71             return 0;
72         }
73
74         if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
75         {
76             Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, i + 2);
77             return 0;
78         }
79
80         if (getAllocatedSingleString(pvApiCtx, addr, vars[i]) != 0)
81         {
82             Scierror(999, _("%s: No more memory.\n"), fname);
83             return 0;
84         }
85     }
86
87     ns = new XMLNs(*elem, prefix, href);
88
89     for (i = 0; i < Rhs - 1; i++)
90     {
91         freeAllocatedSingleString(*(vars[i]));
92     }
93
94     if (!ns->createOnStack(Rhs + 1, pvApiCtx))
95     {
96         return 0;
97     }
98
99     LhsVar(1) = Rhs + 1;
100     PutLhsVar();
101
102     return 0;
103 }
104
105 /*--------------------------------------------------------------------------*/