RefPtr<Text> Text::splitText(unsigned offset, ExceptionCode& ec) { ec = 0; // INDEX_SIZE_ERR: Raised if the specified offset is negative or greater than // the number of 16-bit units in data. if (offset > length()) { ec = INDEX_SIZE_ERR; return 0; } EventQueueScope scope; String oldStr = data(); Ref<Text> newText = virtualCreate(oldStr.substring(offset)); setDataWithoutUpdate(oldStr.substring(0, offset)); dispatchModifiedEvent(oldStr); if (parentNode()) parentNode()->insertBefore(newText.ptr(), nextSibling(), ec); if (ec) return 0; if (parentNode()) document().textNodeSplit(this); if (renderer()) renderer()->setTextWithOffset(data(), 0, oldStr.length()); return WTF::move(newText); }
PassRefPtr<Text> Text::splitText(unsigned offset, ExceptionCode& ec) { ec = 0; if (this->parent()) {if (!RO_check(this->parent())) return 0;} // INDEX_SIZE_ERR: Raised if the specified offset is negative or greater than // the number of 16-bit units in data. if (offset > length()) { ec = INDEX_SIZE_ERR; return 0; } RefPtr<StringImpl> oldStr = dataImpl(); RefPtr<Text> newText = virtualCreate(oldStr->substring(offset)); setDataImpl(oldStr->substring(0, offset)); dispatchModifiedEvent(oldStr.get()); if (parentNode()) parentNode()->insertBefore(newText.get(), nextSibling(), ec); if (ec) return 0; if (parentNode()) document()->textNodeSplit(this); if (renderer()) toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr->length()); return newText.release(); }