void RenderStyle::setContent(DOMStringImpl* s, bool add) { if (!s) return; // The string is null. Nothing to do. Just bail. ContentData* lastContent = content; while (lastContent && lastContent->_nextContent) lastContent = lastContent->_nextContent; bool reuseContent = !add; if (add) { if (!lastContent) return; // Something's wrong. We had no previous content, and we should have. if (lastContent->_contentType == CONTENT_TEXT) { // We can augment the existing string and share this ContentData node. DOMStringImpl* oldStr = lastContent->_content.text; DOMStringImpl* newStr = oldStr->copy(); newStr->ref(); oldStr->deref(); newStr->append(s); lastContent->_content.text = newStr; return; } } ContentData* newContentData = 0; if (reuseContent && content) { content->clearContent(); newContentData = content; } else newContentData = new ContentData; if (lastContent && !reuseContent) lastContent->_nextContent = newContentData; else content = newContentData; newContentData->_content.text = s; newContentData->_content.text->ref(); newContentData->_contentType = CONTENT_TEXT; }
void RenderStyle::addContent(DOM::DOMStringImpl *s) { if(!s) return; // The string is null. Nothing to do. Just bail. StyleGeneratedData *t_generated = generated.access(); ContentData *lastContent = t_generated->content; while(lastContent && lastContent->_nextContent) lastContent = lastContent->_nextContent; if(lastContent) { if(lastContent->_contentType == CONTENT_TEXT) { // We can augment the existing string and share this ContentData node. DOMStringImpl *oldStr = lastContent->_content.text; DOMStringImpl *newStr = oldStr->copy(); newStr->ref(); oldStr->deref(); newStr->append(s); lastContent->_content.text = newStr; return; } } ContentData *newContentData = new ContentData; if(lastContent) lastContent->_nextContent = newContentData; else t_generated->content = newContentData; newContentData->_content.text = s; newContentData->_content.text->ref(); newContentData->_contentType = CONTENT_TEXT; }