18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CharacterData.h" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "EventNames.h" 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ExceptionCode.h" 27a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch#include "InspectorInstrumentation.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "MutationEvent.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderText.h" 3081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "TextBreakIterator.h" 3181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 3281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochusing namespace std; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CharacterData::setData(const String& data, ExceptionCode&) 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project StringImpl* dataImpl = data.impl() ? data.impl() : StringImpl::empty(); 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (equal(m_data.get(), dataImpl)) 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch unsigned oldLength = length(); 43ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 44cad810f21b803229eb11403f9209855525a25d57Steve Block setDataAndUpdate(dataImpl, 0, oldLength, dataImpl->length()); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->textRemoved(this, 0, oldLength); 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CharacterData::substringData(unsigned offset, unsigned count, ExceptionCode& ec) 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkCharDataOperation(offset, ec); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ec) 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return String(); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_data->substring(offset, count); 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochunsigned CharacterData::parserAppendData(const UChar* data, unsigned dataLength, unsigned lengthLimit) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned oldLength = m_data->length(); 6081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch unsigned end = min(dataLength, lengthLimit - oldLength); 6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 6381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Check that we are not on an unbreakable boundary. 6481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Some text break iterator implementations work best if the passed buffer is as small as possible, 6581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // see <https://bugs.webkit.org/show_bug.cgi?id=29092>. 6681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // We need at least two characters look-ahead to account for UTF-16 surrogates. 6781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (end < dataLength) { 6881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch TextBreakIterator* it = characterBreakIterator(data, (end + 2 > dataLength) ? dataLength : end + 2); 6981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!isTextBreak(it, end)) 7081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch end = textBreakPreceding(it, end); 7181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!end) 7481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return 0; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch String newStr = m_data; 7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch newStr.append(data, end); 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data = newStr.impl(); 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 80f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch updateRenderer(oldLength, 0); 81967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // We don't call dispatchModifiedEvent here because we don't want the 82967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch // parser to dispatch DOM mutation events. 83967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch if (parentNode()) 84967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch parentNode()->childrenChanged(); 8581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 8681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return end; 87967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch} 88967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch 89967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid CharacterData::appendData(const String& data, ExceptionCode&) 90967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch{ 91f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch String newStr = m_data; 92f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch newStr.append(data); 93f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 94cad810f21b803229eb11403f9209855525a25d57Steve Block setDataAndUpdate(newStr.impl(), m_data->length(), 0, data.length()); 95f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 96f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // FIXME: Should we call textInserted here? 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 99967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid CharacterData::insertData(unsigned offset, const String& data, ExceptionCode& ec) 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkCharDataOperation(offset, ec); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ec) 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String newStr = m_data; 106967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch newStr.insert(data, offset); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 108cad810f21b803229eb11403f9209855525a25d57Steve Block setDataAndUpdate(newStr.impl(), offset, 0, data.length()); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 110967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch document()->textInserted(this, offset, data.length()); 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CharacterData::deleteData(unsigned offset, unsigned count, ExceptionCode& ec) 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkCharDataOperation(offset, ec); 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ec) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned realCount; 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (offset + count > length()) 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project realCount = length() - offset; 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project realCount = count; 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String newStr = m_data; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newStr.remove(offset, realCount); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 128cad810f21b803229eb11403f9209855525a25d57Steve Block setDataAndUpdate(newStr.impl(), offset, count, 0); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->textRemoved(this, offset, realCount); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 133967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid CharacterData::replaceData(unsigned offset, unsigned count, const String& data, ExceptionCode& ec) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project checkCharDataOperation(offset, ec); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ec) 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned realCount; 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (offset + count > length()) 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project realCount = length() - offset; 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project realCount = count; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String newStr = m_data; 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newStr.remove(offset, realCount); 147967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch newStr.insert(data, offset); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 149cad810f21b803229eb11403f9209855525a25d57Steve Block setDataAndUpdate(newStr.impl(), offset, count, data.length()); 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // update the markers for spell checking and grammar checking 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project document()->textRemoved(this, offset, realCount); 153967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch document()->textInserted(this, offset, data.length()); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString CharacterData::nodeValue() const 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_data; 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CharacterData::containsOnlyWhitespace() const 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !m_data || m_data->containsOnlyWhitespace(); 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CharacterData::setNodeValue(const String& nodeValue, ExceptionCode& ec) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setData(nodeValue, ec); 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 171cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid CharacterData::setDataAndUpdate(PassRefPtr<StringImpl> newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength) 172f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 173cad810f21b803229eb11403f9209855525a25d57Steve Block if (document()->frame()) 174cad810f21b803229eb11403f9209855525a25d57Steve Block document()->frame()->selection()->textWillBeReplaced(this, offsetOfReplacedData, oldLength, newLength); 175f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RefPtr<StringImpl> oldData = m_data; 176f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_data = newData; 177cad810f21b803229eb11403f9209855525a25d57Steve Block updateRenderer(offsetOfReplacedData, oldLength); 178f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch dispatchModifiedEvent(oldData.get()); 179f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 180f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 181f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid CharacterData::updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData) 182f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 183f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if ((!renderer() || !rendererIsNeeded(renderer()->style())) && attached()) { 184f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch detach(); 185f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch attach(); 186f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } else if (renderer()) 187f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch toRenderText(renderer())->setTextWithOffset(m_data, offsetOfReplacedData, lengthOfReplacedData); 188f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 189f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 190f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid CharacterData::dispatchModifiedEvent(StringImpl* oldData) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (parentNode()) 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parentNode()->childrenChanged(); 194231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (document()->hasListenerType(Document::DOMCHARACTERDATAMODIFIED_LISTENER)) 195f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch dispatchEvent(MutationEvent::create(eventNames().DOMCharacterDataModifiedEvent, true, 0, oldData, m_data)); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project dispatchSubtreeModifiedEvent(); 197bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if ENABLE(INSPECTOR) 198a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch InspectorInstrumentation::characterDataModified(document(), this); 199bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid CharacterData::checkCharDataOperation(unsigned offset, ExceptionCode& ec) 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = 0; 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // INDEX_SIZE_ERR: Raised if the specified offset is negative or greater than the number of 16-bit 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // units in data. 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (offset > length()) { 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ec = INDEX_SIZE_ERR; 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint CharacterData::maxCharacterOffset() const 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return static_cast<int>(length()); 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CharacterData::rendererIsNeeded(RenderStyle *style) 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_data || !length()) 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return Node::rendererIsNeeded(style); 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool CharacterData::offsetInCharacters() const 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 232