gecko-dev/dom/base/ScriptableContentIterator.cpp
Csoregi Natalia 13506c036a Backed out 8 changesets (bug 181137) for bustage on FragmentOrElement.cpp:1751. CLOSED TREE
Backed out changeset 99a977d519a0 (bug 181137)
Backed out changeset 65a4b245e851 (bug 181137)
Backed out changeset 5385d5fd9b8b (bug 181137)
Backed out changeset 83bec02c21d9 (bug 181137)
Backed out changeset b7ab59bf545e (bug 181137)
Backed out changeset b6fc7a332db7 (bug 181137)
Backed out changeset 654fdbad67db (bug 181137)
Backed out changeset 90a1ff49b6b1 (bug 181137)

--HG--
rename : dom/base/ContentIterator.h => dom/base/nsContentIterator.cpp
rename : editor/spellchecker/FilteredContentIterator.cpp => editor/spellchecker/nsFilteredContentIterator.cpp
rename : editor/spellchecker/FilteredContentIterator.h => editor/spellchecker/nsFilteredContentIterator.h
2019-01-10 11:42:27 +02:00

146 lines
3.9 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "ScriptableContentIterator.h"
#include "nsINode.h"
#include "nsRange.h"
namespace mozilla {
NS_IMPL_CYCLE_COLLECTING_ADDREF(ScriptableContentIterator)
NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptableContentIterator)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(ScriptableContentIterator)
NS_INTERFACE_MAP_ENTRY(nsIScriptableContentIterator)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
NS_IMPL_CYCLE_COLLECTION(ScriptableContentIterator, mContentIterator)
ScriptableContentIterator::ScriptableContentIterator()
: mIteratorType(NOT_INITIALIZED) {}
void ScriptableContentIterator::EnsureContentIterator() {
if (mContentIterator) {
return;
}
switch (mIteratorType) {
case POST_ORDER_ITERATOR:
default:
mContentIterator = NS_NewContentIterator();
break;
case PRE_ORDER_ITERATOR:
mContentIterator = NS_NewPreContentIterator();
break;
case SUBTREE_ITERATOR:
mContentIterator = NS_NewContentSubtreeIterator();
break;
}
}
NS_IMETHODIMP
ScriptableContentIterator::InitWithRootNode(IteratorType aType,
nsINode* aRoot) {
if (aType == NOT_INITIALIZED ||
(mIteratorType != NOT_INITIALIZED && aType != mIteratorType)) {
return NS_ERROR_INVALID_ARG;
}
mIteratorType = aType;
EnsureContentIterator();
return mContentIterator->Init(aRoot);
}
NS_IMETHODIMP
ScriptableContentIterator::InitWithRange(IteratorType aType, nsRange* aRange) {
if (aType == NOT_INITIALIZED ||
(mIteratorType != NOT_INITIALIZED && aType != mIteratorType)) {
return NS_ERROR_INVALID_ARG;
}
mIteratorType = aType;
EnsureContentIterator();
return mContentIterator->Init(aRange);
}
NS_IMETHODIMP
ScriptableContentIterator::InitWithPositions(IteratorType aType,
nsINode* aStartContainer,
uint32_t aStartOffset,
nsINode* aEndContainer,
uint32_t aEndOffset) {
if (aType == NOT_INITIALIZED ||
(mIteratorType != NOT_INITIALIZED && aType != mIteratorType)) {
return NS_ERROR_INVALID_ARG;
}
mIteratorType = aType;
EnsureContentIterator();
return mContentIterator->Init(aStartContainer, aStartOffset, aEndContainer,
aEndOffset);
}
NS_IMETHODIMP
ScriptableContentIterator::First() {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
mContentIterator->First();
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::Last() {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
mContentIterator->Last();
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::Next() {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
mContentIterator->Next();
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::Prev() {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
mContentIterator->Prev();
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::GetCurrentNode(nsINode** aNode) {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
NS_IF_ADDREF(*aNode = mContentIterator->GetCurrentNode());
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::GetIsDone(bool* aIsDone) {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
*aIsDone = mContentIterator->IsDone();
return NS_OK;
}
NS_IMETHODIMP
ScriptableContentIterator::PositionAt(nsINode* aNode) {
if (!mContentIterator) {
return NS_ERROR_NOT_INITIALIZED;
}
return mContentIterator->PositionAt(aNode);
}
} // namespace mozilla