Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlReadStr.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 "XMLRhsValue.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_xmlReadStr(char *fname, unsigned long fname_len)
30 {
31     org_modules_xml::XMLDocument * doc;
32     SciErr err;
33     int *addr = 0;
34
35     std::string * code;
36     std::string error;
37     bool validate = false;
38     int validateParam;
39
40     CheckLhs(1, 1);
41     CheckRhs(1, 2);
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 (!isStringType(pvApiCtx, addr))
52     {
53         Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
54         return 0;
55     }
56
57     if (!XMLRhsValue::get(fname, addr, &code, pvApiCtx))
58     {
59         return 0;
60     }
61
62     if (Rhs == 2)
63     {
64         err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
65         if (err.iErr)
66         {
67             delete code;
68
69             printError(&err, 0);
70             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
71             return 0;
72         }
73
74         if (!isBooleanType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
75         {
76             delete code;
77
78             Scierror(999, gettext("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 2);
79             return 0;
80         }
81
82         getScalarBoolean(pvApiCtx, addr, &validateParam);
83         validate = validateParam != 0;
84     }
85
86     doc = new org_modules_xml::XMLDocument(*code, validate, &error);
87     delete code;
88
89     if (!error.empty())
90     {
91         delete doc;
92
93         Scierror(999, gettext("%s: Cannot parse the string:\n%s"), fname, error.c_str());
94         return 0;
95     }
96
97     if (!doc->createOnStack(Rhs + 1, pvApiCtx))
98     {
99         return 0;
100     }
101
102     LhsVar(1) = Rhs + 1;
103     PutLhsVar();
104     return 0;
105 }
106
107 /*--------------------------------------------------------------------------*/