Chromium Code Reviews| 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()); |
| 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()); |
| 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()); | |
| 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()); | |
|
yosin_UTC9
2016/09/26 01:29:09
nit: Could you add "<< a" for ease of debug?
Xiaocheng
2016/09/26 01:36:14
I'm thinking about having a scope that asserts VP:
| |
| 1779 DCHECK(b.isValid()); | |
|
yosin_UTC9
2016/09/26 01:29:09
nit: Could you add "<< b" for ease of debug?
| |
| 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()); | |
|
yosin_UTC9
2016/09/26 01:29:09
nit: Could you add "<< pos" for ease of debugging?
| |
| 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()); | |
| 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 |