#include "xmlserializer.h"
#include "xmlserializer.lut.h"
#include "dom/dom_exception.h"
#include "dom/dom_doc.h"
#include "xml/dom_docimpl.h"
#include <kdebug.h>
using DOM::NodeImpl;
using namespace KJS;
DEFINE_PROTOTYPE("XMLSerializer",XMLSerializerProto)
IMPLEMENT_PROTOFUNC(XMLSerializerProtoFunc)
IMPLEMENT_PROTOTYPE(XMLSerializerProto,XMLSerializerProtoFunc)
namespace KJS {
XMLSerializerConstructorImp::XMLSerializerConstructorImp(ExecState *)
: ObjectImp()
{
}
bool XMLSerializerConstructorImp::implementsConstruct() const
{
return true;
}
Object XMLSerializerConstructorImp::construct(ExecState *exec, const List &)
{
return Object(new XMLSerializer(exec));
}
const ClassInfo XMLSerializer::info = { "XMLSerializer", 0, &XMLSerializerTable, 0 };
XMLSerializer::XMLSerializer(ExecState *exec)
{
setPrototype(XMLSerializerProto::self(exec));
}
Value XMLSerializerProtoFunc::tryCall(ExecState *exec, Object &thisObj, const List &args)
{
if (!thisObj.inherits(&XMLSerializer::info)) {
Object err = Error::create(exec,TypeError);
exec->setException(err);
return err;
}
switch (id) {
case XMLSerializer::SerializeToString:
{
if (args.size() != 1) {
return Undefined();
}
if (!args[0].toObject(exec).inherits(&DOMNode::info)) {
return Undefined();
}
NodeImpl *node = static_cast<NodeImpl *>(static_cast<DOMNode *>(args[0].toObject(exec).imp())->toNode().handle());
if (!node) {
return Undefined();
}
QString body;
try {
body = node->toString().string();
} catch(DOM::DOMException& e) {
Object err = Error::create(exec, GeneralError, "Exception serializing document");
exec->setException(err);
return err;
}
return getStringOrNull(body);
}
}
return Undefined();
}
};