#include "V8CharacterData.h" #include "V8Node.h" namespace Arabica { namespace DOM { v8::Persistent V8CharacterData::Tmpl; v8::Handle V8CharacterData::dataAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::String::New(privData->arabicaThis->getData().c_str()); } void V8CharacterData::dataAttrSetter(v8::Local property, v8::Local value, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localData(value); privData->arabicaThis->setData(*localData); } v8::Handle V8CharacterData::lengthAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Integer::New(privData->arabicaThis->getLength()); } v8::Handle V8CharacterData::substringDataCallback(const v8::Arguments& args) { if (args.Length() < 2) throw V8Exception("Wrong number of arguments in substringData"); v8::Local self = args.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); unsigned long localOffset = args[0]->ToNumber()->Uint32Value(); unsigned long localCount = args[1]->ToNumber()->Uint32Value(); std::string retVal = privData->arabicaThis->substringData(localOffset, localCount); return v8::String::New(retVal.c_str()); } v8::Handle V8CharacterData::appendDataCallback(const v8::Arguments& args) { if (args.Length() < 1) throw V8Exception("Wrong number of arguments in appendData"); v8::Local self = args.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localArg(args[0]); privData->arabicaThis->appendData(*localArg); return v8::Undefined(); } v8::Handle V8CharacterData::insertDataCallback(const v8::Arguments& args) { if (args.Length() < 2) throw V8Exception("Wrong number of arguments in insertData"); v8::Local self = args.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); unsigned long localOffset = args[0]->ToNumber()->Uint32Value(); v8::String::AsciiValue localArg(args[1]); privData->arabicaThis->insertData(localOffset, *localArg); return v8::Undefined(); } v8::Handle V8CharacterData::deleteDataCallback(const v8::Arguments& args) { if (args.Length() < 2) throw V8Exception("Wrong number of arguments in deleteData"); v8::Local self = args.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); unsigned long localOffset = args[0]->ToNumber()->Uint32Value(); unsigned long localCount = args[1]->ToNumber()->Uint32Value(); privData->arabicaThis->deleteData(localOffset, localCount); return v8::Undefined(); } v8::Handle V8CharacterData::replaceDataCallback(const v8::Arguments& args) { if (args.Length() < 3) throw V8Exception("Wrong number of arguments in replaceData"); v8::Local self = args.Holder(); V8CharacterDataPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); unsigned long localOffset = args[0]->ToNumber()->Uint32Value(); unsigned long localCount = args[1]->ToNumber()->Uint32Value(); v8::String::AsciiValue localArg(args[2]); privData->arabicaThis->replaceData(localOffset, localCount, *localArg); return v8::Undefined(); } bool V8CharacterData::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }