| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 1592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1603 | 1603 |
| 1604 if (candidateType == PositionAnchorType::OffsetInAnchor) | 1604 if (candidateType == PositionAnchorType::OffsetInAnchor) |
| 1605 return PositionTemplate<Strategy>(candidateNode, candidateOffset); | 1605 return PositionTemplate<Strategy>(candidateNode, candidateOffset); |
| 1606 | 1606 |
| 1607 return PositionTemplate<Strategy>(candidateNode, candidateType); | 1607 return PositionTemplate<Strategy>(candidateNode, candidateType); |
| 1608 } | 1608 } |
| 1609 | 1609 |
| 1610 template <typename Strategy> | 1610 template <typename Strategy> |
| 1611 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithm(const VisiblePositio
nTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossi
ngRule) | 1611 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithm(const VisiblePositio
nTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryCrossi
ngRule) |
| 1612 { | 1612 { |
| 1613 // TODO(xiaochengh): Ensure that this function is called with a valid | 1613 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 1614 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|; | 1614 return createVisiblePosition(startOfParagraphAlgorithm(visiblePosition.deepE
quivalent(), boundaryCrossingRule)); |
| 1615 return createVisiblePositionDeprecated(startOfParagraphAlgorithm(visiblePosi
tion.deepEquivalent(), boundaryCrossingRule)); | |
| 1616 } | 1615 } |
| 1617 | 1616 |
| 1618 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi
ngRule boundaryCrossingRule) | 1617 VisiblePosition startOfParagraph(const VisiblePosition& c, EditingBoundaryCrossi
ngRule boundaryCrossingRule) |
| 1619 { | 1618 { |
| 1620 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); | 1619 return startOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); |
| 1621 } | 1620 } |
| 1622 | 1621 |
| 1623 VisiblePositionInFlatTree startOfParagraph(const VisiblePositionInFlatTree& c, E
ditingBoundaryCrossingRule boundaryCrossingRule) | 1622 VisiblePositionInFlatTree startOfParagraph(const VisiblePositionInFlatTree& c, E
ditingBoundaryCrossingRule boundaryCrossingRule) |
| 1624 { | 1623 { |
| 1625 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCross
ingRule); | 1624 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCross
ingRule); |
| 1626 } | 1625 } |
| 1627 | 1626 |
| 1628 template <typename Strategy> | 1627 template <typename Strategy> |
| 1628 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithmDeprecated(const Visi
blePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boun
daryCrossingRule) |
| 1629 { |
| 1630 return createVisiblePositionDeprecated(startOfParagraphAlgorithm(visiblePosi
tion.deepEquivalent(), boundaryCrossingRule)); |
| 1631 } |
| 1632 |
| 1633 VisiblePosition startOfParagraphDeprecated(const VisiblePosition& c, EditingBoun
daryCrossingRule boundaryCrossingRule) |
| 1634 { |
| 1635 return startOfParagraphAlgorithmDeprecated<EditingStrategy>(c, boundaryCross
ingRule); |
| 1636 } |
| 1637 |
| 1638 VisiblePositionInFlatTree startOfParagraphDeprecated(const VisiblePositionInFlat
Tree& c, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1639 { |
| 1640 return startOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>(c, bou
ndaryCrossingRule); |
| 1641 } |
| 1642 |
| 1643 template <typename Strategy> |
| 1629 static PositionTemplate<Strategy> endOfParagraphAlgorithm(const PositionTemplate
<Strategy>& position, EditingBoundaryCrossingRule boundaryCrossingRule) | 1644 static PositionTemplate<Strategy> endOfParagraphAlgorithm(const PositionTemplate
<Strategy>& position, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1630 { | 1645 { |
| 1631 Node* const startNode = position.anchorNode(); | 1646 Node* const startNode = position.anchorNode(); |
| 1632 | 1647 |
| 1633 if (!startNode) | 1648 if (!startNode) |
| 1634 return PositionTemplate<Strategy>(); | 1649 return PositionTemplate<Strategy>(); |
| 1635 | 1650 |
| 1636 if (isRenderedAsNonInlineTableImageOrHR(startNode)) | 1651 if (isRenderedAsNonInlineTableImageOrHR(startNode)) |
| 1637 return PositionTemplate<Strategy>::afterNode(startNode); | 1652 return PositionTemplate<Strategy>::afterNode(startNode); |
| 1638 | 1653 |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1696 | 1711 |
| 1697 if (candidateType == PositionAnchorType::OffsetInAnchor) | 1712 if (candidateType == PositionAnchorType::OffsetInAnchor) |
| 1698 return PositionTemplate<Strategy>(candidateNode, candidateOffset); | 1713 return PositionTemplate<Strategy>(candidateNode, candidateOffset); |
| 1699 | 1714 |
| 1700 return PositionTemplate<Strategy>(candidateNode, candidateType); | 1715 return PositionTemplate<Strategy>(candidateNode, candidateType); |
| 1701 } | 1716 } |
| 1702 | 1717 |
| 1703 template <typename Strategy> | 1718 template <typename Strategy> |
| 1704 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo
sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryC
rossingRule) | 1719 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithm(const VisiblePo
sitionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule boundaryC
rossingRule) |
| 1705 { | 1720 { |
| 1706 // TODO(xiaochengh): Ensure that this function is called with a valid | 1721 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 1707 // |visiblePosition|, and add |DCHECK(visiblePosition.isValid())|; | |
| 1708 return createVisiblePositionDeprecated(endOfParagraphAlgorithm(visiblePositi
on.deepEquivalent(), boundaryCrossingRule)); | 1722 return createVisiblePositionDeprecated(endOfParagraphAlgorithm(visiblePositi
on.deepEquivalent(), boundaryCrossingRule)); |
| 1709 } | 1723 } |
| 1710 | 1724 |
| 1711 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing
Rule boundaryCrossingRule) | 1725 VisiblePosition endOfParagraph(const VisiblePosition& c, EditingBoundaryCrossing
Rule boundaryCrossingRule) |
| 1712 { | 1726 { |
| 1713 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); | 1727 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); |
| 1714 } | 1728 } |
| 1715 | 1729 |
| 1716 VisiblePositionInFlatTree endOfParagraph(const VisiblePositionInFlatTree& c, Edi
tingBoundaryCrossingRule boundaryCrossingRule) | 1730 VisiblePositionInFlatTree endOfParagraph(const VisiblePositionInFlatTree& c, Edi
tingBoundaryCrossingRule boundaryCrossingRule) |
| 1717 { | 1731 { |
| 1718 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCrossin
gRule); | 1732 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>(c, boundaryCrossin
gRule); |
| 1719 } | 1733 } |
| 1720 | 1734 |
| 1735 template <typename Strategy> |
| 1736 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithmDeprecated(const
VisiblePositionTemplate<Strategy>& visiblePosition, EditingBoundaryCrossingRule
boundaryCrossingRule) |
| 1737 { |
| 1738 return createVisiblePositionDeprecated(endOfParagraphAlgorithm(visiblePositi
on.deepEquivalent(), boundaryCrossingRule)); |
| 1739 } |
| 1740 |
| 1741 VisiblePosition endOfParagraphDeprecated(const VisiblePosition& c, EditingBounda
ryCrossingRule boundaryCrossingRule) |
| 1742 { |
| 1743 return endOfParagraphAlgorithmDeprecated<EditingStrategy>(c, boundaryCrossin
gRule); |
| 1744 } |
| 1745 |
| 1746 VisiblePositionInFlatTree endOfParagraphDeprecated(const VisiblePositionInFlatTr
ee& c, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1747 { |
| 1748 return endOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>(c, bound
aryCrossingRule); |
| 1749 } |
| 1750 |
| 1721 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true | 1751 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true |
| 1722 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) | 1752 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) |
| 1723 { | 1753 { |
| 1754 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 1724 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit
ingBoundary)); | 1755 VisiblePosition paragraphEnd(endOfParagraph(visiblePosition, CanSkipOverEdit
ingBoundary)); |
| 1725 VisiblePosition afterParagraphEnd(nextPositionOf(paragraphEnd, CannotCrossEd
itingBoundary)); | 1756 VisiblePosition afterParagraphEnd(nextPositionOf(paragraphEnd, CannotCrossEd
itingBoundary)); |
| 1726 // The position after the last position in the last cell of a table | 1757 // The position after the last position in the last cell of a table |
| 1727 // is not the start of the next paragraph. | 1758 // is not the start of the next paragraph. |
| 1728 if (tableElementJustBefore(afterParagraphEnd)) | 1759 if (tableElementJustBefore(afterParagraphEnd)) |
| 1729 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); | 1760 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); |
| 1730 return afterParagraphEnd; | 1761 return afterParagraphEnd; |
| 1731 } | 1762 } |
| 1732 | 1763 |
| 1764 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true |
| 1765 VisiblePosition startOfNextParagraphDeprecated(const VisiblePosition& visiblePos
ition) |
| 1766 { |
| 1767 VisiblePosition paragraphEnd(endOfParagraphDeprecated(visiblePosition, CanSk
ipOverEditingBoundary)); |
| 1768 VisiblePosition afterParagraphEnd(nextPositionOf(paragraphEnd, CannotCrossEd
itingBoundary)); |
| 1769 // The position after the last position in the last cell of a table |
| 1770 // is not the start of the next paragraph. |
| 1771 if (tableElementJustBefore(afterParagraphEnd)) |
| 1772 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); |
| 1773 return afterParagraphEnd; |
| 1774 } |
| 1775 |
| 1733 bool inSameParagraph(const VisiblePosition& a, const VisiblePosition& b, Editing
BoundaryCrossingRule boundaryCrossingRule) | 1776 bool inSameParagraph(const VisiblePosition& a, const VisiblePosition& b, Editing
BoundaryCrossingRule boundaryCrossingRule) |
| 1734 { | 1777 { |
| 1778 DCHECK(a.isValid()) << a; |
| 1779 DCHECK(b.isValid()) << b; |
| 1735 return a.isNotNull() && startOfParagraph(a, boundaryCrossingRule).deepEquiva
lent() == startOfParagraph(b, boundaryCrossingRule).deepEquivalent(); | 1780 return a.isNotNull() && startOfParagraph(a, boundaryCrossingRule).deepEquiva
lent() == startOfParagraph(b, boundaryCrossingRule).deepEquivalent(); |
| 1736 } | 1781 } |
| 1737 | 1782 |
| 1783 bool inSameParagraphDeprecated(const VisiblePosition& a, const VisiblePosition&
b, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1784 { |
| 1785 return a.isNotNull() && startOfParagraphDeprecated(a, boundaryCrossingRule).
deepEquivalent() == startOfParagraphDeprecated(b, boundaryCrossingRule).deepEqui
valent(); |
| 1786 } |
| 1787 |
| 1738 template <typename Strategy> | 1788 template <typename Strategy> |
| 1739 static bool isStartOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>&
pos, EditingBoundaryCrossingRule boundaryCrossingRule) | 1789 static bool isStartOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>&
pos, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1740 { | 1790 { |
| 1791 DCHECK(pos.isValid()) << pos; |
| 1741 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun
daryCrossingRule).deepEquivalent(); | 1792 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraph(pos, boun
daryCrossingRule).deepEquivalent(); |
| 1742 } | 1793 } |
| 1743 | 1794 |
| 1744 bool isStartOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule
boundaryCrossingRule) | 1795 bool isStartOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule
boundaryCrossingRule) |
| 1745 { | 1796 { |
| 1746 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRul
e); | 1797 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRul
e); |
| 1747 } | 1798 } |
| 1748 | 1799 |
| 1749 bool isStartOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCro
ssingRule boundaryCrossingRule) | 1800 bool isStartOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCro
ssingRule boundaryCrossingRule) |
| 1750 { | 1801 { |
| 1751 return isStartOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryC
rossingRule); | 1802 return isStartOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryC
rossingRule); |
| 1752 } | 1803 } |
| 1753 | 1804 |
| 1754 template <typename Strategy> | 1805 template <typename Strategy> |
| 1806 static bool isStartOfParagraphAlgorithmDeprecated(const VisiblePositionTemplate<
Strategy>& pos, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1807 { |
| 1808 return pos.isNotNull() && pos.deepEquivalent() == startOfParagraphDeprecated
(pos, boundaryCrossingRule).deepEquivalent(); |
| 1809 } |
| 1810 |
| 1811 bool isStartOfParagraphDeprecated(const VisiblePosition& pos, EditingBoundaryCro
ssingRule boundaryCrossingRule) |
| 1812 { |
| 1813 return isStartOfParagraphAlgorithmDeprecated<EditingStrategy>(pos, boundaryC
rossingRule); |
| 1814 } |
| 1815 |
| 1816 bool isStartOfParagraphDeprecated(const VisiblePositionInFlatTree& pos, EditingB
oundaryCrossingRule boundaryCrossingRule) |
| 1817 { |
| 1818 return isStartOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>(pos,
boundaryCrossingRule); |
| 1819 } |
| 1820 |
| 1821 template <typename Strategy> |
| 1755 static bool isEndOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& p
os, EditingBoundaryCrossingRule boundaryCrossingRule) | 1822 static bool isEndOfParagraphAlgorithm(const VisiblePositionTemplate<Strategy>& p
os, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1756 { | 1823 { |
| 1824 DCHECK(pos.isValid()) << pos; |
| 1757 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda
ryCrossingRule).deepEquivalent(); | 1825 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraph(pos, bounda
ryCrossingRule).deepEquivalent(); |
| 1758 } | 1826 } |
| 1759 | 1827 |
| 1760 bool isEndOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule bo
undaryCrossingRule) | 1828 bool isEndOfParagraph(const VisiblePosition& pos, EditingBoundaryCrossingRule bo
undaryCrossingRule) |
| 1761 { | 1829 { |
| 1762 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule)
; | 1830 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule)
; |
| 1763 } | 1831 } |
| 1764 | 1832 |
| 1765 bool isEndOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCross
ingRule boundaryCrossingRule) | 1833 bool isEndOfParagraph(const VisiblePositionInFlatTree& pos, EditingBoundaryCross
ingRule boundaryCrossingRule) |
| 1766 { | 1834 { |
| 1767 return isEndOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryCro
ssingRule); | 1835 return isEndOfParagraphAlgorithm<EditingInFlatTreeStrategy>(pos, boundaryCro
ssingRule); |
| 1768 } | 1836 } |
| 1769 | 1837 |
| 1838 template <typename Strategy> |
| 1839 static bool isEndOfParagraphAlgorithmDeprecated(const VisiblePositionTemplate<St
rategy>& pos, EditingBoundaryCrossingRule boundaryCrossingRule) |
| 1840 { |
| 1841 return pos.isNotNull() && pos.deepEquivalent() == endOfParagraphDeprecated(p
os, boundaryCrossingRule).deepEquivalent(); |
| 1842 } |
| 1843 |
| 1844 bool isEndOfParagraphDeprecated(const VisiblePosition& pos, EditingBoundaryCross
ingRule boundaryCrossingRule) |
| 1845 { |
| 1846 return isEndOfParagraphAlgorithmDeprecated<EditingStrategy>(pos, boundaryCro
ssingRule); |
| 1847 } |
| 1848 |
| 1849 bool isEndOfParagraphDeprecated(const VisiblePositionInFlatTree& pos, EditingBou
ndaryCrossingRule boundaryCrossingRule) |
| 1850 { |
| 1851 return isEndOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>(pos, b
oundaryCrossingRule); |
| 1852 } |
| 1853 |
| 1770 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x
) | 1854 VisiblePosition previousParagraphPosition(const VisiblePosition& p, LayoutUnit x
) |
| 1771 { | 1855 { |
| 1772 VisiblePosition pos = p; | 1856 VisiblePosition pos = p; |
| 1773 do { | 1857 do { |
| 1774 VisiblePosition n = previousLinePosition(pos, x); | 1858 VisiblePosition n = previousLinePosition(pos, x); |
| 1775 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) | 1859 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) |
| 1776 break; | 1860 break; |
| 1777 pos = n; | 1861 pos = n; |
| 1778 } while (inSameParagraph(p, pos)); | 1862 } while (inSameParagraph(p, pos)); |
| 1779 return pos; | 1863 return pos; |
| (...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3344 { | 3428 { |
| 3345 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); | 3429 return previousPositionOfAlgorithm<EditingStrategy>(visiblePosition, rule); |
| 3346 } | 3430 } |
| 3347 | 3431 |
| 3348 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi
siblePosition, EditingBoundaryCrossingRule rule) | 3432 VisiblePositionInFlatTree previousPositionOf(const VisiblePositionInFlatTree& vi
siblePosition, EditingBoundaryCrossingRule rule) |
| 3349 { | 3433 { |
| 3350 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio
n, rule); | 3434 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>(visiblePositio
n, rule); |
| 3351 } | 3435 } |
| 3352 | 3436 |
| 3353 } // namespace blink | 3437 } // namespace blink |
| OLD | NEW |