15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2006, 2008 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef htmlediting_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define htmlediting_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Position.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/EditingBoundary.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/text/TextDirection.h" 32e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Forward.h" 33e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/unicode/CharacterNames.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Element; 39df95704c49daea886ddad70775bda23618d6274dBen Murdochclass ExceptionState; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HTMLElement; 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Node; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Position; 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Range; 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class VisiblePosition; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class VisibleSelection; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// This file contains a set of helper functions used by the editing commands 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Node 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning Node 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* highestAncestor(Node*); 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* highestEditableRoot(const Position&, EditableType = ContentIsEditable); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* highestEnclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Node*), 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EditingBoundaryCrossingRule = CannotCrossEditingBoundary, Node* stayWithin = 0); 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochNode* highestNodeToRemoveInPruning(Node*, Node* excludeNode = 0); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* lowestEditableAncestor(Node*); 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Element* enclosingBlock(Node*, EditingBoundaryCrossingRule = CannotCrossEditingBoundary); 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* enclosingTableCell(const Position&); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* enclosingEmptyListItem(const VisiblePosition&); 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben MurdochElement* enclosingAnchorElement(const Position&); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* enclosingNodeWithTag(const Position&, const QualifiedName&); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* enclosingNodeOfType(const Position&, bool (*nodeIsOfType)(const Node*), EditingBoundaryCrossingRule = CannotCrossEditingBoundary); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* tabSpanNode(const Node*); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* isLastPositionBeforeTable(const VisiblePosition&); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* isFirstPositionAfterTable(const VisiblePosition&); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// offset functions on Node 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int lastOffsetForEditing(const Node*); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int caretMinOffset(const Node*); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int caretMaxOffset(const Node*); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// boolean functions on Node 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// FIXME: editingIgnoresContent, canHaveChildrenForEditing, and isAtomicNode 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// should be renamed to reflect its usage. 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Returns true for nodes that either have no content, or have content that is ignored (skipped over) while editing. 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// There are no VisiblePositions inside these nodes. 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool editingIgnoresContent(const Node* node) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !node->canContainRangeEndPoint(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool canHaveChildrenForEditing(const Node* node) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !node->isTextNode() && node->canContainRangeEndPoint(); 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isAtomicNode(const Node*); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isBlock(const Node*); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isInline(const Node*); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isSpecialElement(const Node*); 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isTabSpanNode(const Node*); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isTabSpanTextNode(const Node*); 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isMailBlockquote(const Node*); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isTableElement(Node*); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isTableCell(const Node*); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isEmptyTableCell(const Node*); 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isTableStructureNode(const Node*); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isListElement(Node*); 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)bool isListItem(const Node*); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isNodeRendered(const Node*); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isNodeVisiblyContainedWithin(Node*, const Range*); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isRenderedAsNonInlineTableImageOrHR(const Node*); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool areIdenticalElements(const Node*, const Node*); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isNonTableCellHTMLBlockElement(const Node*); 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)TextDirection directionOfEnclosingBlock(const Position&); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Position 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 12102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning Position 12302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position nextCandidate(const Position&); 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position previousCandidate(const Position&); 12602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position nextVisuallyDistinctCandidate(const Position&); 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position previousVisuallyDistinctCandidate(const Position&); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position positionOutsideTabSpan(const Position&); 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Position positionBeforeContainingSpecialElement(const Position&, Node** containingSpecialElement = 0); 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)Position positionAfterContainingSpecialElement(const Position&, Node** containingSpecialElement = 0); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline Position firstPositionInOrBeforeNode(Node* node) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!node) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Position(); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return editingIgnoresContent(node) ? positionBeforeNode(node) : firstPositionInNode(node); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline Position lastPositionInOrAfterNode(Node* node) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!node) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return Position(); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return editingIgnoresContent(node) ? positionAfterNode(node) : lastPositionInNode(node); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// comparision functions on Position 14902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int comparePositions(const Position&, const Position&); 151e6d4491e48613634a83c1957c72759da80987961Ben Murdochint comparePositions(const PositionWithAffinity&, const PositionWithAffinity&); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// boolean functions on Position 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum EUpdateStyle { UpdateStyle, DoNotUpdateStyle }; 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isEditablePosition(const Position&, EditableType = ContentIsEditable, EUpdateStyle = UpdateStyle); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isRichlyEditablePosition(const Position&, EditableType = ContentIsEditable); 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool lineBreakExistsAtPosition(const Position&); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isVisiblyAdjacent(const Position& first, const Position& second); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool isAtUnsplittableElement(const Position&); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// miscellaneous functions on Position 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned numEnclosingMailBlockquotes(const Position&); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void updatePositionForNodeRemoval(Position&, Node*); 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// VisiblePosition 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 17002772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning VisiblePosition 17202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisiblePosition firstEditablePositionAfterPositionInRoot(const Position&, Node*); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisiblePosition lastEditablePositionBeforePositionInRoot(const Position&, Node*); 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisiblePosition visiblePositionBeforeNode(Node*); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisiblePosition visiblePositionAfterNode(Node*); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool lineBreakExistsAtVisiblePosition(const VisiblePosition&); 17902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int comparePositions(const VisiblePosition&, const VisiblePosition&); 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int indexForVisiblePosition(const VisiblePosition&, RefPtr<ContainerNode>& scope); 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisiblePosition visiblePositionForIndex(int index, ContainerNode* scope); 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Range 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning Range 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 191df95704c49daea886ddad70775bda23618d6274dBen MurdochPassRefPtr<Range> createRange(PassRefPtr<Document>, const VisiblePosition& start, const VisiblePosition& end, ExceptionState&); 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// HTMLElement 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 19602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning HTMLElement 19802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createDefaultParagraphElement(Document*); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createBreakElement(Document*); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createOrderedListElement(Document*); 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createUnorderedListElement(Document*); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createListItemElement(Document*); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createHTMLElement(Document*, const QualifiedName&); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<HTMLElement> createHTMLElement(Document*, const AtomicString&); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLElement* enclosingList(Node*); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)HTMLElement* outermostEnclosingList(Node*, Node* rootList = 0); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Node* enclosingListChild(Node*); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Element 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 21402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning Element 21602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Element> createTabSpanElement(Document*); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Element> createTabSpanElement(Document*, PassRefPtr<Node> tabTextNode); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Element> createTabSpanElement(Document*, const String& tabText); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<Element> createBlockPlaceholderElement(Document*); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Element* editableRootForPosition(const Position&, EditableType = ContentIsEditable); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Element* unsplittableElementForPosition(const Position&); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Boolean functions on Element 22602772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool canMergeLists(Element* firstList, Element* secondList); 22802772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// VisibleSelection 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------------------------------------------------------- 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Functions returning VisibleSelection 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)VisibleSelection selectionForParagraphIteration(const VisibleSelection&); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Position adjustedSelectionStartForStyleComputation(const VisibleSelection&); 23702772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Miscellaneous functions on Text 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool isWhitespace(UChar c) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return c == noBreakSpace || c == ' ' || c == '\n' || c == '\t'; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool isAmbiguousBoundaryCharacter(UChar character) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These are characters that can behave as word boundaries, but can appear within words. 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If they are just typed, i.e. if they are immediately followed by a caret, we want to delay text checking until the next character has been typed. 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: this is required until 6853027 is fixed and text checking can do this for us. 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return character == '\'' || character == rightSingleQuotationMark || character == hebrewPunctuationGershayim; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)String stringWithRebalancedWhitespace(const String&, bool startIsStartOfParagraph, bool endIsEndOfParagraph); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const String& nonBreakingSpaceString(); 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 259