1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
/*
* Scilab ( https://www.scilab.org/ ) - This file is part of Scilab
* Copyright (C) 2011 - Scilab Enterprises - Calixte DENIZET
*
* Copyright (C) 2012 - 2016 - Scilab Enterprises
*
* This file is hereby licensed under the terms of the GNU GPL v2.0,
* pursuant to article 5.3.4 of the CeCILL v.2.1.
* This file was originally licensed under the terms of the CeCILL v2.1,
* and continues to be available under such terms.
* For more information, see the COPYING file which you should have received
* along with this program.
*
*/
#include "XMLObject.hxx"
#include "XMLDocument.hxx"
#include "XMLElement.hxx"
#include "libxml/tree.h"
extern "C"
{
#include "gw_xml.h"
#include "Scierror.h"
#include "api_scilab.h"
#include "xml_mlist.h"
#include "localization.h"
}
using namespace org_modules_xml;
/*--------------------------------------------------------------------------*/
int sci_xmlElement(char *fname, void* pvApiCtx)
{
org_modules_xml::XMLDocument * doc = 0;
XMLElement *elem = 0;
SciErr err;
int *addr = 0;
char *name = 0;
CheckLhs(0, 1);
CheckRhs(2, 2);
err = getVarAddressFromPosition(pvApiCtx, 1, &addr);
if (err.iErr)
{
printError(&err, 0);
Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
return 0;
}
if (!isXMLDoc(addr, pvApiCtx))
{
Scierror(999, gettext("%s: Wrong type for input argument #%d: A %s expected.\n"), fname, 1, "XMLDoc");
return 0;
}
doc = XMLObject::getFromId < org_modules_xml::XMLDocument > (getXMLObjectId(addr, pvApiCtx));
if (!doc)
{
Scierror(999, gettext("%s: XML document does not exist.\n"), fname);
return 0;
}
err = getVarAddressFromPosition(pvApiCtx, 2, &addr);
if (err.iErr)
{
printError(&err, 0);
Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 2);
return 0;
}
if (!isStringType(pvApiCtx, addr) || !checkVarDimension(pvApiCtx, addr, 1, 1))
{
Scierror(999, gettext("%s: Wrong type for input argument #%d: string expected.\n"), fname, 2);
return 0;
}
if (getAllocatedSingleString(pvApiCtx, addr, &name) != 0)
{
Scierror(999, _("%s: No more memory.\n"), fname);
return 0;
}
if (!strlen(name) || xmlValidateName((const xmlChar *)name, 0))
{
freeAllocatedSingleString(name);
Scierror(999, gettext("%s: Bad input argument #%d: A valid XML name expected.\n"), fname, 2);
return 0;
}
elem = new XMLElement(*doc, name);
freeAllocatedSingleString(name);
if (!elem->createOnStack(Rhs + 1, pvApiCtx))
{
return 0;
}
LhsVar(1) = Rhs + 1;
PutLhsVar();
return 0;
}
/*--------------------------------------------------------------------------*/
|