| Index: Source/core/html/DOMTokenList.cpp
|
| diff --git a/Source/core/html/DOMTokenList.cpp b/Source/core/html/DOMTokenList.cpp
|
| deleted file mode 100644
|
| index 74f72795156d557eec5a485ddb70362d0a52a6ad..0000000000000000000000000000000000000000
|
| --- a/Source/core/html/DOMTokenList.cpp
|
| +++ /dev/null
|
| @@ -1,240 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2010 Google Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| - * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
|
| - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
| - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "core/html/DOMTokenList.h"
|
| -
|
| -#include "bindings/v8/ExceptionState.h"
|
| -#include "core/dom/ExceptionCode.h"
|
| -#include "core/html/parser/HTMLParserIdioms.h"
|
| -#include "wtf/text/StringBuilder.h"
|
| -
|
| -namespace WebCore {
|
| -
|
| -bool DOMTokenList::validateToken(const AtomicString& token, ExceptionState& es)
|
| -{
|
| - if (token.isEmpty()) {
|
| - es.throwDOMException(SyntaxError);
|
| - return false;
|
| - }
|
| -
|
| - unsigned length = token.length();
|
| - for (unsigned i = 0; i < length; ++i) {
|
| - if (isHTMLSpace(token[i])) {
|
| - es.throwDOMException(InvalidCharacterError);
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool DOMTokenList::validateTokens(const Vector<String>& tokens, ExceptionState& es)
|
| -{
|
| - for (size_t i = 0; i < tokens.size(); ++i) {
|
| - if (!validateToken(tokens[i], es))
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool DOMTokenList::contains(const AtomicString& token, ExceptionState& es) const
|
| -{
|
| - if (!validateToken(token, es))
|
| - return false;
|
| - return containsInternal(token);
|
| -}
|
| -
|
| -void DOMTokenList::add(const AtomicString& token, ExceptionState& es)
|
| -{
|
| - Vector<String> tokens;
|
| - tokens.append(token.string());
|
| - add(tokens, es);
|
| -}
|
| -
|
| -void DOMTokenList::add(const Vector<String>& tokens, ExceptionState& es)
|
| -{
|
| - Vector<String> filteredTokens;
|
| - for (size_t i = 0; i < tokens.size(); ++i) {
|
| - if (!validateToken(tokens[i], es))
|
| - return;
|
| - if (!containsInternal(tokens[i]))
|
| - filteredTokens.append(tokens[i]);
|
| - }
|
| -
|
| - if (filteredTokens.isEmpty())
|
| - return;
|
| -
|
| - setValue(addTokens(value(), filteredTokens));
|
| -}
|
| -
|
| -void DOMTokenList::remove(const AtomicString& token, ExceptionState& es)
|
| -{
|
| - Vector<String> tokens;
|
| - tokens.append(token.string());
|
| - remove(tokens, es);
|
| -}
|
| -
|
| -void DOMTokenList::remove(const Vector<String>& tokens, ExceptionState& es)
|
| -{
|
| - if (!validateTokens(tokens, es))
|
| - return;
|
| -
|
| - // Check using containsInternal first since it is a lot faster than going
|
| - // through the string character by character.
|
| - bool found = false;
|
| - for (size_t i = 0; i < tokens.size(); ++i) {
|
| - if (containsInternal(tokens[i])) {
|
| - found = true;
|
| - break;
|
| - }
|
| - }
|
| -
|
| - if (found)
|
| - setValue(removeTokens(value(), tokens));
|
| -}
|
| -
|
| -bool DOMTokenList::toggle(const AtomicString& token, ExceptionState& es)
|
| -{
|
| - if (!validateToken(token, es))
|
| - return false;
|
| -
|
| - if (containsInternal(token)) {
|
| - removeInternal(token);
|
| - return false;
|
| - }
|
| - addInternal(token);
|
| - return true;
|
| -}
|
| -
|
| -bool DOMTokenList::toggle(const AtomicString& token, bool force, ExceptionState& es)
|
| -{
|
| - if (!validateToken(token, es))
|
| - return false;
|
| -
|
| - if (force)
|
| - addInternal(token);
|
| - else
|
| - removeInternal(token);
|
| -
|
| - return force;
|
| -}
|
| -
|
| -void DOMTokenList::addInternal(const AtomicString& token)
|
| -{
|
| - if (!containsInternal(token))
|
| - setValue(addToken(value(), token));
|
| -}
|
| -
|
| -void DOMTokenList::removeInternal(const AtomicString& token)
|
| -{
|
| - // Check using contains first since it uses AtomicString comparisons instead
|
| - // of character by character testing.
|
| - if (!containsInternal(token))
|
| - return;
|
| - setValue(removeToken(value(), token));
|
| -}
|
| -
|
| -String DOMTokenList::addToken(const AtomicString& input, const AtomicString& token)
|
| -{
|
| - Vector<String> tokens;
|
| - tokens.append(token.string());
|
| - return addTokens(input, tokens);
|
| -}
|
| -
|
| -String DOMTokenList::addTokens(const AtomicString& input, const Vector<String>& tokens)
|
| -{
|
| - bool needsSpace = false;
|
| -
|
| - StringBuilder builder;
|
| - if (!input.isEmpty()) {
|
| - builder.append(input);
|
| - needsSpace = !isHTMLSpace(input[input.length() - 1]);
|
| - }
|
| -
|
| - for (size_t i = 0; i < tokens.size(); ++i) {
|
| - if (needsSpace)
|
| - builder.append(' ');
|
| - builder.append(tokens[i]);
|
| - needsSpace = true;
|
| - }
|
| -
|
| - return builder.toString();
|
| -}
|
| -
|
| -String DOMTokenList::removeToken(const AtomicString& input, const AtomicString& token)
|
| -{
|
| - Vector<String> tokens;
|
| - tokens.append(token.string());
|
| - return removeTokens(input, tokens);
|
| -}
|
| -
|
| -String DOMTokenList::removeTokens(const AtomicString& input, const Vector<String>& tokens)
|
| -{
|
| - // Algorithm defined at http://www.whatwg.org/specs/web-apps/current-work/multipage/common-microsyntaxes.html#remove-a-token-from-a-string
|
| - // New spec is at http://dom.spec.whatwg.org/#remove-a-token-from-a-string
|
| -
|
| - unsigned inputLength = input.length();
|
| - StringBuilder output; // 3
|
| - output.reserveCapacity(inputLength);
|
| - unsigned position = 0; // 4
|
| -
|
| - // Step 5
|
| - while (position < inputLength) {
|
| - if (isHTMLSpace(input[position])) { // 6
|
| - output.append(input[position++]); // 6.1, 6.2
|
| - continue; // 6.3
|
| - }
|
| -
|
| - // Step 7
|
| - StringBuilder tokenBuilder;
|
| - while (position < inputLength && isNotHTMLSpace(input[position]))
|
| - tokenBuilder.append(input[position++]);
|
| -
|
| - // Step 8
|
| - String token = tokenBuilder.toString();
|
| - if (tokens.contains(token)) {
|
| - // Step 8.1
|
| - while (position < inputLength && isHTMLSpace(input[position]))
|
| - ++position;
|
| -
|
| - // Step 8.2
|
| - size_t j = output.length();
|
| - while (j > 0 && isHTMLSpace(output[j - 1]))
|
| - --j;
|
| - output.resize(j);
|
| -
|
| - // Step 8.3
|
| - if (position < inputLength && !output.isEmpty())
|
| - output.append(' ');
|
| - } else {
|
| - output.append(token); // Step 9
|
| - }
|
| - }
|
| -
|
| - return output.toString();
|
| -}
|
| -
|
| -} // namespace WebCore
|
|
|