| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights |
| 3 * reserved. | 3 * reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 1842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1853 } | 1853 } |
| 1854 | 1854 |
| 1855 VisiblePositionInFlatTree startOfParagraph( | 1855 VisiblePositionInFlatTree startOfParagraph( |
| 1856 const VisiblePositionInFlatTree& c, | 1856 const VisiblePositionInFlatTree& c, |
| 1857 EditingBoundaryCrossingRule boundaryCrossingRule) { | 1857 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 1858 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>( | 1858 return startOfParagraphAlgorithm<EditingInFlatTreeStrategy>( |
| 1859 c, boundaryCrossingRule); | 1859 c, boundaryCrossingRule); |
| 1860 } | 1860 } |
| 1861 | 1861 |
| 1862 template <typename Strategy> | 1862 template <typename Strategy> |
| 1863 VisiblePositionTemplate<Strategy> startOfParagraphAlgorithmDeprecated( | |
| 1864 const VisiblePositionTemplate<Strategy>& visiblePosition, | |
| 1865 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 1866 return createVisiblePositionDeprecated(startOfParagraphAlgorithm( | |
| 1867 visiblePosition.deepEquivalent(), boundaryCrossingRule)); | |
| 1868 } | |
| 1869 | |
| 1870 VisiblePosition startOfParagraphDeprecated( | |
| 1871 const VisiblePosition& c, | |
| 1872 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 1873 return startOfParagraphAlgorithmDeprecated<EditingStrategy>( | |
| 1874 c, boundaryCrossingRule); | |
| 1875 } | |
| 1876 | |
| 1877 VisiblePositionInFlatTree startOfParagraphDeprecated( | |
| 1878 const VisiblePositionInFlatTree& c, | |
| 1879 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 1880 return startOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>( | |
| 1881 c, boundaryCrossingRule); | |
| 1882 } | |
| 1883 | |
| 1884 template <typename Strategy> | |
| 1885 static PositionTemplate<Strategy> endOfParagraphAlgorithm( | 1863 static PositionTemplate<Strategy> endOfParagraphAlgorithm( |
| 1886 const PositionTemplate<Strategy>& position, | 1864 const PositionTemplate<Strategy>& position, |
| 1887 EditingBoundaryCrossingRule boundaryCrossingRule) { | 1865 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 1888 Node* const startNode = position.anchorNode(); | 1866 Node* const startNode = position.anchorNode(); |
| 1889 | 1867 |
| 1890 if (!startNode) | 1868 if (!startNode) |
| 1891 return PositionTemplate<Strategy>(); | 1869 return PositionTemplate<Strategy>(); |
| 1892 | 1870 |
| 1893 if (isRenderedAsNonInlineTableImageOrHR(startNode)) | 1871 if (isRenderedAsNonInlineTableImageOrHR(startNode)) |
| 1894 return PositionTemplate<Strategy>::afterNode(startNode); | 1872 return PositionTemplate<Strategy>::afterNode(startNode); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1984 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); | 1962 return endOfParagraphAlgorithm<EditingStrategy>(c, boundaryCrossingRule); |
| 1985 } | 1963 } |
| 1986 | 1964 |
| 1987 VisiblePositionInFlatTree endOfParagraph( | 1965 VisiblePositionInFlatTree endOfParagraph( |
| 1988 const VisiblePositionInFlatTree& c, | 1966 const VisiblePositionInFlatTree& c, |
| 1989 EditingBoundaryCrossingRule boundaryCrossingRule) { | 1967 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 1990 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>( | 1968 return endOfParagraphAlgorithm<EditingInFlatTreeStrategy>( |
| 1991 c, boundaryCrossingRule); | 1969 c, boundaryCrossingRule); |
| 1992 } | 1970 } |
| 1993 | 1971 |
| 1994 template <typename Strategy> | |
| 1995 static VisiblePositionTemplate<Strategy> endOfParagraphAlgorithmDeprecated( | |
| 1996 const VisiblePositionTemplate<Strategy>& visiblePosition, | |
| 1997 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 1998 return createVisiblePositionDeprecated(endOfParagraphAlgorithm( | |
| 1999 visiblePosition.deepEquivalent(), boundaryCrossingRule)); | |
| 2000 } | |
| 2001 | |
| 2002 VisiblePosition endOfParagraphDeprecated( | |
| 2003 const VisiblePosition& c, | |
| 2004 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2005 return endOfParagraphAlgorithmDeprecated<EditingStrategy>( | |
| 2006 c, boundaryCrossingRule); | |
| 2007 } | |
| 2008 | |
| 2009 VisiblePositionInFlatTree endOfParagraphDeprecated( | |
| 2010 const VisiblePositionInFlatTree& c, | |
| 2011 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2012 return endOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>( | |
| 2013 c, boundaryCrossingRule); | |
| 2014 } | |
| 2015 | |
| 2016 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true | 1972 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true |
| 2017 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) { | 1973 VisiblePosition startOfNextParagraph(const VisiblePosition& visiblePosition) { |
| 2018 DCHECK(visiblePosition.isValid()) << visiblePosition; | 1974 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 2019 VisiblePosition paragraphEnd( | 1975 VisiblePosition paragraphEnd( |
| 2020 endOfParagraph(visiblePosition, CanSkipOverEditingBoundary)); | 1976 endOfParagraph(visiblePosition, CanSkipOverEditingBoundary)); |
| 2021 VisiblePosition afterParagraphEnd( | 1977 VisiblePosition afterParagraphEnd( |
| 2022 nextPositionOf(paragraphEnd, CannotCrossEditingBoundary)); | 1978 nextPositionOf(paragraphEnd, CannotCrossEditingBoundary)); |
| 2023 // The position after the last position in the last cell of a table | 1979 // The position after the last position in the last cell of a table |
| 2024 // is not the start of the next paragraph. | 1980 // is not the start of the next paragraph. |
| 2025 if (tableElementJustBefore(afterParagraphEnd)) | 1981 if (tableElementJustBefore(afterParagraphEnd)) |
| 2026 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); | 1982 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); |
| 2027 return afterParagraphEnd; | 1983 return afterParagraphEnd; |
| 2028 } | 1984 } |
| 2029 | 1985 |
| 2030 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true | 1986 // FIXME: isStartOfParagraph(startOfNextParagraph(pos)) is not always true |
| 2031 VisiblePosition startOfNextParagraphDeprecated( | |
| 2032 const VisiblePosition& visiblePosition) { | |
| 2033 VisiblePosition paragraphEnd( | |
| 2034 endOfParagraphDeprecated(visiblePosition, CanSkipOverEditingBoundary)); | |
| 2035 VisiblePosition afterParagraphEnd( | |
| 2036 nextPositionOf(paragraphEnd, CannotCrossEditingBoundary)); | |
| 2037 // The position after the last position in the last cell of a table | |
| 2038 // is not the start of the next paragraph. | |
| 2039 if (tableElementJustBefore(afterParagraphEnd)) | |
| 2040 return nextPositionOf(afterParagraphEnd, CannotCrossEditingBoundary); | |
| 2041 return afterParagraphEnd; | |
| 2042 } | |
| 2043 | |
| 2044 bool inSameParagraph(const VisiblePosition& a, | 1987 bool inSameParagraph(const VisiblePosition& a, |
| 2045 const VisiblePosition& b, | 1988 const VisiblePosition& b, |
| 2046 EditingBoundaryCrossingRule boundaryCrossingRule) { | 1989 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2047 DCHECK(a.isValid()) << a; | 1990 DCHECK(a.isValid()) << a; |
| 2048 DCHECK(b.isValid()) << b; | 1991 DCHECK(b.isValid()) << b; |
| 2049 return a.isNotNull() && | 1992 return a.isNotNull() && |
| 2050 startOfParagraph(a, boundaryCrossingRule).deepEquivalent() == | 1993 startOfParagraph(a, boundaryCrossingRule).deepEquivalent() == |
| 2051 startOfParagraph(b, boundaryCrossingRule).deepEquivalent(); | 1994 startOfParagraph(b, boundaryCrossingRule).deepEquivalent(); |
| 2052 } | 1995 } |
| 2053 | 1996 |
| 2054 bool inSameParagraphDeprecated( | |
| 2055 const VisiblePosition& a, | |
| 2056 const VisiblePosition& b, | |
| 2057 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2058 return a.isNotNull() && | |
| 2059 startOfParagraphDeprecated(a, boundaryCrossingRule).deepEquivalent() == | |
| 2060 startOfParagraphDeprecated(b, boundaryCrossingRule) | |
| 2061 .deepEquivalent(); | |
| 2062 } | |
| 2063 | |
| 2064 template <typename Strategy> | 1997 template <typename Strategy> |
| 2065 static bool isStartOfParagraphAlgorithm( | 1998 static bool isStartOfParagraphAlgorithm( |
| 2066 const VisiblePositionTemplate<Strategy>& pos, | 1999 const VisiblePositionTemplate<Strategy>& pos, |
| 2067 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2000 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2068 DCHECK(pos.isValid()) << pos; | 2001 DCHECK(pos.isValid()) << pos; |
| 2069 return pos.isNotNull() && | 2002 return pos.isNotNull() && |
| 2070 pos.deepEquivalent() == | 2003 pos.deepEquivalent() == |
| 2071 startOfParagraph(pos, boundaryCrossingRule).deepEquivalent(); | 2004 startOfParagraph(pos, boundaryCrossingRule).deepEquivalent(); |
| 2072 } | 2005 } |
| 2073 | 2006 |
| 2074 bool isStartOfParagraph(const VisiblePosition& pos, | 2007 bool isStartOfParagraph(const VisiblePosition& pos, |
| 2075 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2008 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2076 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, | 2009 return isStartOfParagraphAlgorithm<EditingStrategy>(pos, |
| 2077 boundaryCrossingRule); | 2010 boundaryCrossingRule); |
| 2078 } | 2011 } |
| 2079 | 2012 |
| 2080 bool isStartOfParagraph(const VisiblePositionInFlatTree& pos, | 2013 bool isStartOfParagraph(const VisiblePositionInFlatTree& pos, |
| 2081 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2014 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2082 return isStartOfParagraphAlgorithm<EditingInFlatTreeStrategy>( | 2015 return isStartOfParagraphAlgorithm<EditingInFlatTreeStrategy>( |
| 2083 pos, boundaryCrossingRule); | 2016 pos, boundaryCrossingRule); |
| 2084 } | 2017 } |
| 2085 | 2018 |
| 2086 template <typename Strategy> | 2019 template <typename Strategy> |
| 2087 static bool isStartOfParagraphAlgorithmDeprecated( | |
| 2088 const VisiblePositionTemplate<Strategy>& pos, | |
| 2089 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2090 return pos.isNotNull() && | |
| 2091 pos.deepEquivalent() == | |
| 2092 startOfParagraphDeprecated(pos, boundaryCrossingRule) | |
| 2093 .deepEquivalent(); | |
| 2094 } | |
| 2095 | |
| 2096 bool isStartOfParagraphDeprecated( | |
| 2097 const VisiblePosition& pos, | |
| 2098 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2099 return isStartOfParagraphAlgorithmDeprecated<EditingStrategy>( | |
| 2100 pos, boundaryCrossingRule); | |
| 2101 } | |
| 2102 | |
| 2103 bool isStartOfParagraphDeprecated( | |
| 2104 const VisiblePositionInFlatTree& pos, | |
| 2105 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2106 return isStartOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>( | |
| 2107 pos, boundaryCrossingRule); | |
| 2108 } | |
| 2109 | |
| 2110 template <typename Strategy> | |
| 2111 static bool isEndOfParagraphAlgorithm( | 2020 static bool isEndOfParagraphAlgorithm( |
| 2112 const VisiblePositionTemplate<Strategy>& pos, | 2021 const VisiblePositionTemplate<Strategy>& pos, |
| 2113 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2022 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2114 DCHECK(pos.isValid()) << pos; | 2023 DCHECK(pos.isValid()) << pos; |
| 2115 return pos.isNotNull() && | 2024 return pos.isNotNull() && |
| 2116 pos.deepEquivalent() == | 2025 pos.deepEquivalent() == |
| 2117 endOfParagraph(pos, boundaryCrossingRule).deepEquivalent(); | 2026 endOfParagraph(pos, boundaryCrossingRule).deepEquivalent(); |
| 2118 } | 2027 } |
| 2119 | 2028 |
| 2120 bool isEndOfParagraph(const VisiblePosition& pos, | 2029 bool isEndOfParagraph(const VisiblePosition& pos, |
| 2121 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2030 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2122 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule); | 2031 return isEndOfParagraphAlgorithm<EditingStrategy>(pos, boundaryCrossingRule); |
| 2123 } | 2032 } |
| 2124 | 2033 |
| 2125 bool isEndOfParagraph(const VisiblePositionInFlatTree& pos, | 2034 bool isEndOfParagraph(const VisiblePositionInFlatTree& pos, |
| 2126 EditingBoundaryCrossingRule boundaryCrossingRule) { | 2035 EditingBoundaryCrossingRule boundaryCrossingRule) { |
| 2127 return isEndOfParagraphAlgorithm<EditingInFlatTreeStrategy>( | 2036 return isEndOfParagraphAlgorithm<EditingInFlatTreeStrategy>( |
| 2128 pos, boundaryCrossingRule); | 2037 pos, boundaryCrossingRule); |
| 2129 } | 2038 } |
| 2130 | 2039 |
| 2131 template <typename Strategy> | |
| 2132 static bool isEndOfParagraphAlgorithmDeprecated( | |
| 2133 const VisiblePositionTemplate<Strategy>& pos, | |
| 2134 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2135 return pos.isNotNull() && | |
| 2136 pos.deepEquivalent() == | |
| 2137 endOfParagraphDeprecated(pos, boundaryCrossingRule) | |
| 2138 .deepEquivalent(); | |
| 2139 } | |
| 2140 | |
| 2141 bool isEndOfParagraphDeprecated( | |
| 2142 const VisiblePosition& pos, | |
| 2143 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2144 return isEndOfParagraphAlgorithmDeprecated<EditingStrategy>( | |
| 2145 pos, boundaryCrossingRule); | |
| 2146 } | |
| 2147 | |
| 2148 bool isEndOfParagraphDeprecated( | |
| 2149 const VisiblePositionInFlatTree& pos, | |
| 2150 EditingBoundaryCrossingRule boundaryCrossingRule) { | |
| 2151 return isEndOfParagraphAlgorithmDeprecated<EditingInFlatTreeStrategy>( | |
| 2152 pos, boundaryCrossingRule); | |
| 2153 } | |
| 2154 | |
| 2155 VisiblePosition previousParagraphPosition(const VisiblePosition& p, | 2040 VisiblePosition previousParagraphPosition(const VisiblePosition& p, |
| 2156 LayoutUnit x) { | 2041 LayoutUnit x) { |
| 2157 DCHECK(p.isValid()) << p; | 2042 DCHECK(p.isValid()) << p; |
| 2158 VisiblePosition pos = p; | 2043 VisiblePosition pos = p; |
| 2159 do { | 2044 do { |
| 2160 VisiblePosition n = previousLinePosition(pos, x); | 2045 VisiblePosition n = previousLinePosition(pos, x); |
| 2161 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) | 2046 if (n.isNull() || n.deepEquivalent() == pos.deepEquivalent()) |
| 2162 break; | 2047 break; |
| 2163 pos = n; | 2048 pos = n; |
| 2164 } while (inSameParagraph(p, pos)); | 2049 } while (inSameParagraph(p, pos)); |
| (...skipping 1715 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3880 } | 3765 } |
| 3881 | 3766 |
| 3882 VisiblePositionInFlatTree nextPositionOf( | 3767 VisiblePositionInFlatTree nextPositionOf( |
| 3883 const VisiblePositionInFlatTree& visiblePosition, | 3768 const VisiblePositionInFlatTree& visiblePosition, |
| 3884 EditingBoundaryCrossingRule rule) { | 3769 EditingBoundaryCrossingRule rule) { |
| 3885 DCHECK(visiblePosition.isValid()) << visiblePosition; | 3770 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 3886 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>( | 3771 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>( |
| 3887 visiblePosition.toPositionWithAffinity(), rule); | 3772 visiblePosition.toPositionWithAffinity(), rule); |
| 3888 } | 3773 } |
| 3889 | 3774 |
| 3890 VisiblePosition nextPositionOfDeprecated(const VisiblePosition& visiblePosition, | |
| 3891 EditingBoundaryCrossingRule rule) { | |
| 3892 if (visiblePosition.isNull()) | |
| 3893 return VisiblePosition(); | |
| 3894 visiblePosition.deepEquivalent() | |
| 3895 .document() | |
| 3896 ->updateStyleAndLayoutIgnorePendingStylesheets(); | |
| 3897 return nextPositionOfAlgorithm<EditingStrategy>( | |
| 3898 visiblePosition.toPositionWithAffinity(), rule); | |
| 3899 } | |
| 3900 | |
| 3901 VisiblePositionInFlatTree nextPositionOfDeprecated( | |
| 3902 const VisiblePositionInFlatTree& visiblePosition, | |
| 3903 EditingBoundaryCrossingRule rule) { | |
| 3904 if (visiblePosition.isNull()) | |
| 3905 return VisiblePositionInFlatTree(); | |
| 3906 visiblePosition.deepEquivalent() | |
| 3907 .document() | |
| 3908 ->updateStyleAndLayoutIgnorePendingStylesheets(); | |
| 3909 return nextPositionOfAlgorithm<EditingInFlatTreeStrategy>( | |
| 3910 visiblePosition.toPositionWithAffinity(), rule); | |
| 3911 } | |
| 3912 | |
| 3913 template <typename Strategy> | 3775 template <typename Strategy> |
| 3914 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary( | 3776 static VisiblePositionTemplate<Strategy> skipToStartOfEditingBoundary( |
| 3915 const VisiblePositionTemplate<Strategy>& pos, | 3777 const VisiblePositionTemplate<Strategy>& pos, |
| 3916 const PositionTemplate<Strategy>& anchor) { | 3778 const PositionTemplate<Strategy>& anchor) { |
| 3917 DCHECK(pos.isValid()) << pos; | 3779 DCHECK(pos.isValid()) << pos; |
| 3918 if (pos.isNull()) | 3780 if (pos.isNull()) |
| 3919 return pos; | 3781 return pos; |
| 3920 | 3782 |
| 3921 ContainerNode* highestRoot = highestEditableRoot(anchor); | 3783 ContainerNode* highestRoot = highestEditableRoot(anchor); |
| 3922 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); | 3784 ContainerNode* highestRootOfPos = highestEditableRoot(pos.deepEquivalent()); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3981 } | 3843 } |
| 3982 | 3844 |
| 3983 VisiblePositionInFlatTree previousPositionOf( | 3845 VisiblePositionInFlatTree previousPositionOf( |
| 3984 const VisiblePositionInFlatTree& visiblePosition, | 3846 const VisiblePositionInFlatTree& visiblePosition, |
| 3985 EditingBoundaryCrossingRule rule) { | 3847 EditingBoundaryCrossingRule rule) { |
| 3986 DCHECK(visiblePosition.isValid()) << visiblePosition; | 3848 DCHECK(visiblePosition.isValid()) << visiblePosition; |
| 3987 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>( | 3849 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>( |
| 3988 visiblePosition.deepEquivalent(), rule); | 3850 visiblePosition.deepEquivalent(), rule); |
| 3989 } | 3851 } |
| 3990 | 3852 |
| 3991 VisiblePosition previousPositionOfDeprecated( | |
| 3992 const VisiblePosition& visiblePosition, | |
| 3993 EditingBoundaryCrossingRule rule) { | |
| 3994 if (visiblePosition.isNull()) | |
| 3995 return VisiblePosition(); | |
| 3996 visiblePosition.deepEquivalent() | |
| 3997 .document() | |
| 3998 ->updateStyleAndLayoutIgnorePendingStylesheets(); | |
| 3999 return previousPositionOfAlgorithm<EditingStrategy>( | |
| 4000 visiblePosition.deepEquivalent(), rule); | |
| 4001 } | |
| 4002 | |
| 4003 VisiblePositionInFlatTree previousPositionOfDeprecated( | |
| 4004 const VisiblePositionInFlatTree& visiblePosition, | |
| 4005 EditingBoundaryCrossingRule rule) { | |
| 4006 if (visiblePosition.isNull()) | |
| 4007 return VisiblePositionInFlatTree(); | |
| 4008 visiblePosition.deepEquivalent() | |
| 4009 .document() | |
| 4010 ->updateStyleAndLayoutIgnorePendingStylesheets(); | |
| 4011 return previousPositionOfAlgorithm<EditingInFlatTreeStrategy>( | |
| 4012 visiblePosition.deepEquivalent(), rule); | |
| 4013 } | |
| 4014 | |
| 4015 } // namespace blink | 3853 } // namespace blink |
| OLD | NEW |