Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlElement.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 "XMLDocument.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 "libxml/tree.h"
24 #include "localization.h"
25 }
26
27 using namespace org_modules_xml;
28
29 /*--------------------------------------------------------------------------*/
30 int sci_xmlElement(char *fname, unsigned long fname_len)
31 {
32     org_modules_xml::XMLDocument * doc = 0;
33     XMLElement *elem = 0;
34     SciErr err;
35     int *addr = 0;
36     char *name = 0;
37
38     CheckLhs(1, 1);
39     CheckRhs(2, 2);
40
41     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
42     if (err.iErr)
43     {
44         printError(&err, 0);
45         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
46         return 0;
47     }
48
49     if (!isXMLDoc(addr, pvApiCtx))
50     {
51         Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLDoc");
52         return 0;
53     }
54
55     doc = XMLObject::getFromId < org_modules_xml::XMLDocument > (getXMLObjectId(addr, pvApiCtx));
56     if (!doc)
57     {
58         Scierror(999, gettext("%s: XML Document does not exist.\n"), fname);
59         return 0;
60     }
61
62     err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
63     if (err.iErr)
64     {
65         printError(&err, 0);
66         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
67         return 0;
68     }
69
70     if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
71     {
72         Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
73         return 0;
74     }
75
76     if (getAllocatedSingleString(pvApiCtx, addr, &name) != 0)
77     {
78         Scierror(999, _("%s: No more memory.\n"), fname);
79         return 0;
80     }
81
82     if (!strlen(name) || xmlValidateName((const xmlChar *)name, 0))
83     {
84         freeAllocatedSingleString(name);
85         Scierror(999, gettext("%s: Bad input argument #%d: A valid XML name expected.\n"), fname, 2);
86         return 0;
87     }
88
89     elem = new XMLElement(*doc, name);
90     freeAllocatedSingleString(name);
91     if (!elem->createOnStack(Rhs + 1, pvApiCtx))
92     {
93         return 0;
94     }
95
96     LhsVar(1) = Rhs + 1;
97     PutLhsVar();
98
99     return 0;
100 }
101
102 /*--------------------------------------------------------------------------*/