00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
#include "xmlserializer.h"
00022
#include "xmlserializer.lut.h"
00023
00024
#include "dom/dom_exception.h"
00025
#include "dom/dom_doc.h"
00026
#include "xml/dom_docimpl.h"
00027
00028
#include <kdebug.h>
00029
00030
using namespace KJS;
00031
00033
00034
00035
00036
00037
00038
00039 DEFINE_PROTOTYPE(
"XMLSerializer",XMLSerializerProto)
00040 IMPLEMENT_PROTOFUNC_DOM(XMLSerializerProtoFunc)
00041 IMPLEMENT_PROTOTYPE(XMLSerializerProto,XMLSerializerProtoFunc)
00042
00043 namespace KJS {
00044
00045 XMLSerializerConstructorImp::XMLSerializerConstructorImp(ExecState *)
00046 : ObjectImp()
00047 {
00048 }
00049
00050
bool XMLSerializerConstructorImp::implementsConstruct()
const
00051
{
00052
return true;
00053 }
00054
00055 Object XMLSerializerConstructorImp::construct(ExecState *exec,
const List &)
00056 {
00057
return Object(
new XMLSerializer(exec));
00058 }
00059
00060
const ClassInfo XMLSerializer::info = {
"XMLSerializer", 0, 0, 0 };
00061
00062 XMLSerializer::XMLSerializer(ExecState *exec)
00063 :
DOMObject(XMLSerializerProto::self(exec))
00064 {
00065 }
00066
00067 Value XMLSerializerProtoFunc::tryCall(ExecState *exec, Object &thisObj,
const List &args)
00068 {
00069
if (!thisObj.inherits(&XMLSerializer::info)) {
00070 Object err = Error::create(exec,TypeError);
00071 exec->setException(err);
00072
return err;
00073 }
00074
00075
switch (
id) {
00076
case XMLSerializer::SerializeToString:
00077 {
00078
if (args.size() != 1) {
00079
return Undefined();
00080 }
00081
00082
if (!args[0].toObject(exec).inherits(&DOMDocument::info)) {
00083
return Undefined();
00084 }
00085
00086
DOM::Node docNode = static_cast<KJS::DOMDocument *>(args[0].toObject(exec).imp())->toNode();
00087 DOM::DocumentImpl *doc = static_cast<DOM::DocumentImpl *>(docNode.
handle());
00088
00089
if (!doc) {
00090
return Undefined();
00091 }
00092
00093
QString body;
00094
00095
try {
00096 body = doc->toString().string();
00097 }
catch(
DOM::DOMException& e) {
00098 Object err = Error::create(exec, GeneralError,
"Exception serializing document");
00099 exec->setException(err);
00100
return err;
00101 }
00102
00103
return getString(body);
00104 }
00105 }
00106
00107
return Undefined();
00108 }
00109
00110 }