Use hxx extensions instead of hpp
[scilab.git] / scilab / modules / xml / sci_gateway / cpp / sci_xmlValidationFile.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 "xml.h"
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 #include "XMLObject.hxx"
27 #include "XMLValidation.hxx"
28 #include "XMLValidationDTD.hxx"
29 #include "XMLValidationSchema.hxx"
30 #include "XMLValidationRelaxNG.hxx"
31
32 using namespace org_modules_xml;
33
34 /*--------------------------------------------------------------------------*/
35 template < class T > int sci_xmlValidationFile(char *fname, void *pvApiCtx)
36 {
37     T *validation = 0;
38     SciErr err;
39     int *addr = 0;
40     char *path = 0;
41
42     std::string error;
43
44     CheckLhs(1, 1);
45     CheckRhs(1, 1);
46
47     err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
48     if (err.iErr)
49     {
50         printError(&err, 0);
51         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
52         return 0;
53     }
54
55     if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
56     {
57         Scierror(999, gettext("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
58         return 0;
59     }
60
61     if (getAllocatedSingleString(pvApiCtx, addr, &path) != 0)
62     {
63         Scierror(999, _("%s: No more memory.\n"), fname);
64         return 0;
65     }
66
67     validation = new T((const char *)path, &error);
68     freeAllocatedSingleString(path);
69
70     if (!error.empty())
71     {
72         delete validation;
73
74         Scierror(999, gettext("%s: Cannot read the file:\n%s"), fname, error.c_str());
75         return 0;
76     }
77
78     if (!validation->createOnStack(Rhs + 1, pvApiCtx))
79     {
80         return 0;
81     }
82
83     LhsVar(1) = Rhs + 1;
84     PutLhsVar();
85     return 0;
86 }
87
88 /*--------------------------------------------------------------------------*/
89 int sci_xmlDTD(char *fname, unsigned long fname_len)
90 {
91     return sci_xmlValidationFile < XMLValidationDTD > (fname, pvApiCtx);
92 }
93
94 /*--------------------------------------------------------------------------*/
95 int sci_xmlRelaxNG(char *fname, unsigned long fname_len)
96 {
97     return sci_xmlValidationFile < XMLValidationRelaxNG > (fname, pvApiCtx);
98 }
99
100 /*--------------------------------------------------------------------------*/
101 int sci_xmlSchema(char *fname, unsigned long fname_len)
102 {
103     return sci_xmlValidationFile < XMLValidationSchema > (fname, pvApiCtx);
104 }
105
106 /*--------------------------------------------------------------------------*/