Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlAsText.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 "XMLList.hxx"
15
16 extern "C"
17 {
18 #include "gw_xml.h"
19 #include "Scierror.h"
20 #include "api_scilab.h"
21 #include "xml_mlist.h"
22 #include "localization.h"
23 }
24
25 using namespace org_modules_xml;
26
27 /*--------------------------------------------------------------------------*/
28 int sci_xmlAsText(char *fname, unsigned long fname_len)
29 {
30     int id;
31     SciErr err;
32     int *addr = 0;
33     XMLList *list = 0;
34     const char **pstStrings = 0;
35
36     CheckLhs(1, 1);
37     CheckRhs(1, 1);
38
39     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
40     if (err.iErr)
41     {
42         printError(&err, 0);
43         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
44         return 0;
45     }
46
47     if (!isXMLList(addr, pvApiCtx) && !isXMLSet(addr, pvApiCtx))
48     {
49         Scierror(999, gettext("%s: Wrong type for input argument #%i: XMLSet or XMLList expected.\n"), fname, 1);
50         return 0;
51     }
52
53     id = getXMLObjectId(addr, pvApiCtx);
54     list = XMLObject::getFromId < XMLList > (id);
55     if (!list)
56     {
57         Scierror(999, gettext("%s: XMLSet or XMLList does not exist.\n"), fname);
58         return 0;
59     }
60
61     pstStrings = list->getContentFromList();
62
63     if (list->getSize())
64     {
65         err = createMatrixOfString(pvApiCtx, Rhs + 1, 1, list->getSize(), const_cast < const char * const *>(pstStrings));
66         for (int i = 0; i < list->getSize(); i++)
67         {
68             xmlFree(const_cast < char *>(pstStrings[i]));
69         }
70         delete[]pstStrings;
71
72         if (err.iErr)
73         {
74             printError(&err, 0);
75             Scierror(999, _("%s: Memory allocation error.\n"), fname);
76             return 0;
77         }
78     }
79     else
80     {
81         createEmptyMatrix(pvApiCtx, Rhs + 1);
82     }
83
84     LhsVar(1) = Rhs + 1;
85     PutLhsVar();
86     return 0;
87 }
88
89 /*--------------------------------------------------------------------------*/