HTMLFormattingElementList.h [plain text]
#ifndef HTMLFormattingElementList_h
#define HTMLFormattingElementList_h
#include <wtf/Forward.h>
#include <wtf/RefPtr.h>
#include <wtf/Vector.h>
namespace WebCore {
class Element;
class HTMLFormattingElementList {
WTF_MAKE_NONCOPYABLE(HTMLFormattingElementList);
public:
HTMLFormattingElementList();
~HTMLFormattingElementList();
class Entry {
public:
explicit Entry(Element* element)
: m_element(element)
{
ASSERT(element);
}
enum MarkerEntryType { MarkerEntry };
Entry(MarkerEntryType)
: m_element(0)
{
}
~Entry() {}
bool isMarker() const { return !m_element; }
Element* element() const
{
ASSERT(m_element);
return m_element.get();
}
void replaceElement(PassRefPtr<Element> element) { m_element = element; }
bool operator==(Element* element) const { return m_element == element; }
bool operator!=(Element* element) const { return m_element != element; }
private:
RefPtr<Element> m_element;
};
class Bookmark {
public:
Bookmark(Entry* entry)
: m_hasBeenMoved(false)
, m_mark(entry)
{
}
void moveToAfter(Entry* before)
{
m_hasBeenMoved = true;
m_mark = before;
}
bool hasBeenMoved() const { return m_hasBeenMoved; }
Entry* mark() const { return m_mark; }
private:
bool m_hasBeenMoved;
Entry* m_mark;
};
bool isEmpty() const { return !size(); }
size_t size() const { return m_entries.size(); }
Element* closestElementInScopeWithName(const AtomicString&);
Entry* find(Element*);
bool contains(Element*);
void append(Element*);
void remove(Element*);
Bookmark bookmarkFor(Element*);
void swapTo(Element* oldElement, Element* newElement, const Bookmark&);
void appendMarker();
void clearToLastMarker();
const Entry& at(size_t i) const { return m_entries[i]; }
Entry& at(size_t i) { return m_entries[i]; }
#ifndef NDEBUG
void show();
#endif
private:
Entry* first() { return &at(0); }
Vector<Entry> m_entries;
};
}
#endif // HTMLFormattingElementList_h