| Index: Source/core/rendering/RenderQuote.cpp
 | 
| diff --git a/Source/core/rendering/RenderQuote.cpp b/Source/core/rendering/RenderQuote.cpp
 | 
| deleted file mode 100644
 | 
| index 9ff595ad55b0570a6a3d5fb85fe74a4d88a303d4..0000000000000000000000000000000000000000
 | 
| --- a/Source/core/rendering/RenderQuote.cpp
 | 
| +++ /dev/null
 | 
| @@ -1,408 +0,0 @@
 | 
| -/**
 | 
| - * Copyright (C) 2011 Nokia Inc.  All rights reserved.
 | 
| - * Copyright (C) 2012 Google Inc. All rights reserved.
 | 
| - *
 | 
| - * This library is free software; you can redistribute it and/or
 | 
| - * modify it under the terms of the GNU Library General Public
 | 
| - * License as published by the Free Software Foundation; either
 | 
| - * version 2 of the License, or (at your option) any later version.
 | 
| - *
 | 
| - * This library is distributed in the hope that it will be useful,
 | 
| - * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
| - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
| - * Library General Public License for more details.
 | 
| - *
 | 
| - * You should have received a copy of the GNU Library General Public License
 | 
| - * along with this library; see the file COPYING.LIB.  If not, write to
 | 
| - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 | 
| - * Boston, MA 02110-1301, USA.
 | 
| - *
 | 
| - */
 | 
| -
 | 
| -#include "config.h"
 | 
| -#include "core/rendering/RenderQuote.h"
 | 
| -
 | 
| -#include "core/rendering/RenderTextFragment.h"
 | 
| -#include "core/rendering/RenderView.h"
 | 
| -#include "wtf/StdLibExtras.h"
 | 
| -#include "wtf/text/AtomicString.h"
 | 
| -
 | 
| -#include <algorithm>
 | 
| -
 | 
| -namespace blink {
 | 
| -
 | 
| -RenderQuote::RenderQuote(Document* node, QuoteType quote)
 | 
| -    : RenderInline(0)
 | 
| -    , m_type(quote)
 | 
| -    , m_depth(0)
 | 
| -    , m_next(nullptr)
 | 
| -    , m_previous(nullptr)
 | 
| -    , m_attached(false)
 | 
| -{
 | 
| -    setDocumentForAnonymous(node);
 | 
| -}
 | 
| -
 | 
| -RenderQuote::~RenderQuote()
 | 
| -{
 | 
| -    ASSERT(!m_attached);
 | 
| -    ASSERT(!m_next && !m_previous);
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::willBeDestroyed()
 | 
| -{
 | 
| -    detachQuote();
 | 
| -    RenderInline::willBeDestroyed();
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::willBeRemovedFromTree()
 | 
| -{
 | 
| -    RenderInline::willBeRemovedFromTree();
 | 
| -    detachQuote();
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::styleDidChange(StyleDifference diff, const LayoutStyle* oldStyle)
 | 
| -{
 | 
| -    RenderInline::styleDidChange(diff, oldStyle);
 | 
| -    updateText();
 | 
| -}
 | 
| -
 | 
| -struct Language {
 | 
| -    const char* lang;
 | 
| -    UChar open1;
 | 
| -    UChar close1;
 | 
| -    UChar open2;
 | 
| -    UChar close2;
 | 
| -    QuotesData* data;
 | 
| -
 | 
| -    bool operator<(const Language& b) const { return strcmp(lang, b.lang) < 0; }
 | 
| -};
 | 
| -
 | 
| -// Table of quotes from http://www.whatwg.org/specs/web-apps/current-work/multipage/rendering.html#quote
 | 
| -Language languages[] = {
 | 
| -    { "af",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "agq",           0x201e, 0x201d, 0x201a, 0x2019, 0 },
 | 
| -    { "ak",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "am",            0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "ar",            0x201d, 0x201c, 0x2019, 0x2018, 0 },
 | 
| -    { "asa",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "az-cyrl",       0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "bas",           0x00ab, 0x00bb, 0x201e, 0x201c, 0 },
 | 
| -    { "bem",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "bez",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "bg",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "bm",            0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "bn",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "br",            0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "brx",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "bs-cyrl" ,      0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "ca",            0x201c, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "cgg",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "chr",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "cs",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "da",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "dav",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "de",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "de-ch",         0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "dje",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "dua",           0x00ab, 0x00bb, 0x2018, 0x2019, 0 },
 | 
| -    { "dyo",           0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "dz",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ebu",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ee",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "el",            0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "en",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "en-gb",         0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "es",            0x201c, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "et",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "eu",            0x201c, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "ewo",           0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "fa",            0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "ff",            0x201e, 0x201d, 0x201a, 0x2019, 0 },
 | 
| -    { "fi",            0x201d, 0x201d, 0x2019, 0x2019, 0 },
 | 
| -    { "fr",            0x00ab, 0x00bb, 0x00ab, 0x00bb, 0 },
 | 
| -    { "fr-ca",         0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "fr-ch",         0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "gsw",           0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "gu",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "guz",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ha",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "he",            0x0022, 0x0022, 0x0027, 0x0027, 0 },
 | 
| -    { "hi",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "hr",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "hu",            0x201e, 0x201d, 0x00bb, 0x00ab, 0 },
 | 
| -    { "id",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ig",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "it",            0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "ja",            0x300c, 0x300d, 0x300e, 0x300f, 0 },
 | 
| -    { "jgo",           0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "jmc",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "kab",           0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "kam",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "kde",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "kea",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "khq",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ki",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "kkj",           0x00ab, 0x00bb, 0x2039, 0x203a, 0 },
 | 
| -    { "kln",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "km",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "kn",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ko",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ksb",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ksf",           0x00ab, 0x00bb, 0x2018, 0x2019, 0 },
 | 
| -    { "lag",           0x201d, 0x201d, 0x2019, 0x2019, 0 },
 | 
| -    { "lg",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ln",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "lo",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "lt",            0x201e, 0x201c, 0x201e, 0x201c, 0 },
 | 
| -    { "lu",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "luo",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "luy",           0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "lv",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mas",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mer",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mfe",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mg",            0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "mgo",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mk",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "ml",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mr",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ms",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "mua",           0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "my",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "naq",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "nb",            0x00ab, 0x00bb, 0x2018, 0x2019, 0 },
 | 
| -    { "nd",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "nl",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "nmg",           0x201e, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "nn",            0x00ab, 0x00bb, 0x2018, 0x2019, 0 },
 | 
| -    { "nnh",           0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "nus",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "nyn",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "pl",            0x201e, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "pt",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "pt-pt",         0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "rn",            0x201d, 0x201d, 0x2019, 0x2019, 0 },
 | 
| -    { "ro",            0x201e, 0x201d, 0x00ab, 0x00bb, 0 },
 | 
| -    { "rof",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ru",            0x00ab, 0x00bb, 0x201e, 0x201c, 0 },
 | 
| -    { "rw",            0x00ab, 0x00bb, 0x2018, 0x2019, 0 },
 | 
| -    { "rwk",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "saq",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "sbp",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "seh",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ses",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "sg",            0x00ab, 0x00bb, 0x201c, 0x201d, 0 },
 | 
| -    { "shi",           0x00ab, 0x00bb, 0x201e, 0x201d, 0 },
 | 
| -    { "shi-tfng",      0x00ab, 0x00bb, 0x201e, 0x201d, 0 },
 | 
| -    { "si",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "sk",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "sl",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "sn",            0x201d, 0x201d, 0x2019, 0x2019, 0 },
 | 
| -    { "so",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "sq",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "sr",            0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "sr-latn",       0x201e, 0x201c, 0x201a, 0x2018, 0 },
 | 
| -    { "sv",            0x201d, 0x201d, 0x2019, 0x2019, 0 },
 | 
| -    { "sw",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "swc",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ta",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "te",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "teo",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "th",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "ti-er",         0x2018, 0x2019, 0x201c, 0x201d, 0 },
 | 
| -    { "to",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "tr",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "twq",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "tzm",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "uk",            0x00ab, 0x00bb, 0x201e, 0x201c, 0 },
 | 
| -    { "ur",            0x201d, 0x201c, 0x2019, 0x2018, 0 },
 | 
| -    { "vai",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "vai-latn",      0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "vi",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "vun",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "xh",            0x2018, 0x2019, 0x201c, 0x201d, 0 },
 | 
| -    { "xog",           0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "yav",           0x00ab, 0x00bb, 0x00ab, 0x00bb, 0 },
 | 
| -    { "yo",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "zh",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -    { "zh-hant",       0x300c, 0x300d, 0x300e, 0x300f, 0 },
 | 
| -    { "zu",            0x201c, 0x201d, 0x2018, 0x2019, 0 },
 | 
| -};
 | 
| -
 | 
| -const QuotesData* quotesDataForLanguage(const AtomicString& lang)
 | 
| -{
 | 
| -    if (lang.isNull())
 | 
| -        return 0;
 | 
| -
 | 
| -    // This could be just a hash table, but doing that adds 200k to RenderQuote.o
 | 
| -    Language* languagesEnd = languages + WTF_ARRAY_LENGTH(languages);
 | 
| -    CString lowercaseLang = lang.lower().utf8();
 | 
| -    Language key = { lowercaseLang.data(), 0, 0, 0, 0, 0 };
 | 
| -    Language* match = std::lower_bound(languages, languagesEnd, key);
 | 
| -    if (match == languagesEnd || strcmp(match->lang, key.lang))
 | 
| -        return 0;
 | 
| -
 | 
| -    if (!match->data)
 | 
| -        match->data = QuotesData::create(match->open1, match->close1, match->open2, match->close2).leakRef();
 | 
| -
 | 
| -    return match->data;
 | 
| -}
 | 
| -
 | 
| -static const QuotesData* basicQuotesData()
 | 
| -{
 | 
| -    // FIXME: The default quotes should be the fancy quotes for "en".
 | 
| -    DEFINE_STATIC_REF(QuotesData, staticBasicQuotes, (QuotesData::create('"', '"', '\'', '\'')));
 | 
| -    return staticBasicQuotes;
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::updateText()
 | 
| -{
 | 
| -    String text = computeText();
 | 
| -    if (m_text == text)
 | 
| -        return;
 | 
| -
 | 
| -    m_text = text;
 | 
| -
 | 
| -    RenderTextFragment* fragment = findFragmentChild();
 | 
| -    if (fragment) {
 | 
| -        fragment->setStyle(style());
 | 
| -        fragment->setContentString(m_text.impl());
 | 
| -    } else {
 | 
| -        fragment = new RenderTextFragment(&document(), m_text.impl());
 | 
| -        fragment->setStyle(style());
 | 
| -        addChild(fragment);
 | 
| -    }
 | 
| -}
 | 
| -
 | 
| -RenderTextFragment* RenderQuote::findFragmentChild() const
 | 
| -{
 | 
| -    // We walk from the end of the child list because, if we've had a first-letter
 | 
| -    // renderer inserted then the remaining text will be at the end.
 | 
| -    while (LayoutObject* child = lastChild()) {
 | 
| -        if (child->isText() && toRenderText(child)->isTextFragment())
 | 
| -            return toRenderTextFragment(child);
 | 
| -    }
 | 
| -
 | 
| -    return nullptr;
 | 
| -}
 | 
| -
 | 
| -String RenderQuote::computeText() const
 | 
| -{
 | 
| -    switch (m_type) {
 | 
| -    case NO_OPEN_QUOTE:
 | 
| -    case NO_CLOSE_QUOTE:
 | 
| -        return emptyString();
 | 
| -    case CLOSE_QUOTE:
 | 
| -        return quotesData()->getCloseQuote(m_depth - 1).impl();
 | 
| -    case OPEN_QUOTE:
 | 
| -        return quotesData()->getOpenQuote(m_depth).impl();
 | 
| -    }
 | 
| -    ASSERT_NOT_REACHED();
 | 
| -    return emptyString();
 | 
| -}
 | 
| -
 | 
| -const QuotesData* RenderQuote::quotesData() const
 | 
| -{
 | 
| -    if (const QuotesData* customQuotes = style()->quotes())
 | 
| -        return customQuotes;
 | 
| -
 | 
| -    if (const QuotesData* quotes = quotesDataForLanguage(style()->locale()))
 | 
| -        return quotes;
 | 
| -
 | 
| -    return basicQuotesData();
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::attachQuote()
 | 
| -{
 | 
| -    ASSERT(view());
 | 
| -    ASSERT(!m_attached);
 | 
| -    ASSERT(!m_next && !m_previous);
 | 
| -    ASSERT(isRooted());
 | 
| -
 | 
| -    if (!view()->renderQuoteHead()) {
 | 
| -        view()->setRenderQuoteHead(this);
 | 
| -        m_attached = true;
 | 
| -        return;
 | 
| -    }
 | 
| -
 | 
| -    for (LayoutObject* predecessor = previousInPreOrder(); predecessor; predecessor = predecessor->previousInPreOrder()) {
 | 
| -        // Skip unattached predecessors to avoid having stale m_previous pointers
 | 
| -        // if the previous node is never attached and is then destroyed.
 | 
| -        if (!predecessor->isQuote() || !toRenderQuote(predecessor)->isAttached())
 | 
| -            continue;
 | 
| -        m_previous = toRenderQuote(predecessor);
 | 
| -        m_next = m_previous->m_next;
 | 
| -        m_previous->m_next = this;
 | 
| -        if (m_next)
 | 
| -            m_next->m_previous = this;
 | 
| -        break;
 | 
| -    }
 | 
| -
 | 
| -    if (!m_previous) {
 | 
| -        m_next = view()->renderQuoteHead();
 | 
| -        view()->setRenderQuoteHead(this);
 | 
| -        if (m_next)
 | 
| -            m_next->m_previous = this;
 | 
| -    }
 | 
| -    m_attached = true;
 | 
| -
 | 
| -    for (RenderQuote* quote = this; quote; quote = quote->m_next)
 | 
| -        quote->updateDepth();
 | 
| -
 | 
| -    ASSERT(!m_next || m_next->m_attached);
 | 
| -    ASSERT(!m_next || m_next->m_previous == this);
 | 
| -    ASSERT(!m_previous || m_previous->m_attached);
 | 
| -    ASSERT(!m_previous || m_previous->m_next == this);
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::detachQuote()
 | 
| -{
 | 
| -    ASSERT(!m_next || m_next->m_attached);
 | 
| -    ASSERT(!m_previous || m_previous->m_attached);
 | 
| -    if (!m_attached)
 | 
| -        return;
 | 
| -
 | 
| -    // Reset our attached status at this point because it's possible for
 | 
| -    // updateDepth() to call into attachQuote(). Attach quote walks the render
 | 
| -    // tree looking for quotes that are attached and does work on them.
 | 
| -    m_attached = false;
 | 
| -
 | 
| -    if (m_previous)
 | 
| -        m_previous->m_next = m_next;
 | 
| -    else if (view())
 | 
| -        view()->setRenderQuoteHead(m_next);
 | 
| -    if (m_next)
 | 
| -        m_next->m_previous = m_previous;
 | 
| -    if (!documentBeingDestroyed()) {
 | 
| -        for (RenderQuote* quote = m_next; quote; quote = quote->m_next)
 | 
| -            quote->updateDepth();
 | 
| -    }
 | 
| -    m_next = nullptr;
 | 
| -    m_previous = nullptr;
 | 
| -    m_depth = 0;
 | 
| -}
 | 
| -
 | 
| -void RenderQuote::updateDepth()
 | 
| -{
 | 
| -    ASSERT(m_attached);
 | 
| -    int oldDepth = m_depth;
 | 
| -    m_depth = 0;
 | 
| -    if (m_previous) {
 | 
| -        m_depth = m_previous->m_depth;
 | 
| -        switch (m_previous->m_type) {
 | 
| -        case OPEN_QUOTE:
 | 
| -        case NO_OPEN_QUOTE:
 | 
| -            m_depth++;
 | 
| -            break;
 | 
| -        case CLOSE_QUOTE:
 | 
| -        case NO_CLOSE_QUOTE:
 | 
| -            if (m_depth)
 | 
| -                m_depth--;
 | 
| -            break;
 | 
| -        }
 | 
| -    }
 | 
| -    if (oldDepth != m_depth)
 | 
| -        updateText();
 | 
| -}
 | 
| -
 | 
| -} // namespace blink
 | 
| 
 |