| 1953 | | return InsideVisibleArea; |
|---|
| 1954 | | if (resultRect.y() < rectInFrameCoords.y()) |
|---|
| 1955 | | return BeforeVisibleArea; |
|---|
| 1956 | | if (resultRect.y() > rectInFrameCoords.y()) |
|---|
| 1957 | | return AfterVisibleArea; |
|---|
| 1958 | | |
|---|
| 1959 | | ASSERT(resultRect.y() == rectInFrameCoords.y()); |
|---|
| 1960 | | if (resultRect.x() < rectInFrameCoords.x()) |
|---|
| 1961 | | return BeforeVisibleArea; |
|---|
| 1962 | | return AfterVisibleArea; |
|---|
| 1963 | | } |
|---|
| 1964 | | |
|---|
| 1965 | | PassRefPtr<Range> Editor::firstVisibleRange(Range* startRange, const String& target, bool forward, bool caseFlag) |
|---|
| 1966 | | { |
|---|
| 1967 | | if (!forward) |
|---|
| 1968 | | return startRange; |
|---|
| 1969 | | |
|---|
| 1970 | | RefPtr<Range> resultRange = startRange; |
|---|
| | 1958 | return true; |
|---|
| | 1959 | return false; |
|---|
| | 1960 | } |
|---|
| | 1961 | |
|---|
| | 1962 | PassRefPtr<Range> Editor::firstVisibleRange(const String& target, bool caseFlag) |
|---|
| | 1963 | { |
|---|
| | 1964 | RefPtr<Range> searchRange(rangeOfContents(m_frame->document())); |
|---|
| | 1965 | RefPtr<Range> resultRange = findPlainText(searchRange.get(), target, true, caseFlag); |
|---|
| | 1966 | ExceptionCode ec = 0; |
|---|
| | 1967 | |
|---|
| | 1968 | while (!insideVisibleArea(resultRange.get())) { |
|---|
| | 1969 | searchRange->setStartAfter(resultRange->endContainer(), ec); |
|---|
| | 1970 | if (searchRange->startContainer() == searchRange->endContainer()) |
|---|
| | 1971 | return 0; |
|---|
| | 1972 | resultRange = findPlainText(searchRange.get(), target, true, caseFlag); |
|---|
| | 1973 | } |
|---|
| | 1974 | |
|---|
| | 1975 | return resultRange; |
|---|
| | 1976 | } |
|---|
| | 1977 | |
|---|
| | 1978 | PassRefPtr<Range> Editor::lastVisibleRange(const String& target, bool caseFlag) |
|---|
| | 1979 | { |
|---|
| | 1980 | RefPtr<Range> searchRange(rangeOfContents(m_frame->document())); |
|---|
| | 1981 | RefPtr<Range> resultRange = findPlainText(searchRange.get(), target, false, caseFlag); |
|---|
| | 1982 | ExceptionCode ec = 0; |
|---|
| | 1983 | |
|---|
| | 1984 | while (!insideVisibleArea(resultRange.get())) { |
|---|
| | 1985 | searchRange->setEndBefore(resultRange->startContainer(), ec); |
|---|
| | 1986 | if (searchRange->startContainer() == searchRange->endContainer()) |
|---|
| | 1987 | return 0; |
|---|
| | 1988 | resultRange = findPlainText(searchRange.get(), target, false, caseFlag); |
|---|
| | 1989 | } |
|---|
| | 1990 | |
|---|
| | 1991 | return resultRange; |
|---|
| | 1992 | } |
|---|
| | 1993 | |
|---|
| | 1994 | PassRefPtr<Range> Editor::nextVisibleRange(Range* currentRange, const String& target, bool forward, bool caseFlag) |
|---|
| | 1995 | { |
|---|
| | 1996 | RefPtr<Range> resultRange = currentRange; |
|---|
| 1973 | | |
|---|
| 1974 | | while (rangeVisibility(resultRange.get()) == BeforeVisibleArea) { |
|---|
| 1975 | | searchRange->setStartAfter(resultRange->endContainer(), ec); |
|---|
| 1976 | | if (searchRange->startContainer() == searchRange->endContainer()) |
|---|
| 1977 | | return startRange; |
|---|
| | 1999 | |
|---|
| | 2000 | while (!insideVisibleArea(resultRange.get())) { |
|---|
| | 2001 | if (forward) |
|---|
| | 2002 | searchRange->setStartAfter(resultRange->endContainer(), ec); |
|---|
| | 2003 | else |
|---|
| | 2004 | searchRange->setEndBefore(resultRange->startContainer(), ec); |
|---|
| | 2005 | |
|---|
| | 2006 | // If we have made it to the beginning or the end of the document, then either there is no search result |
|---|
| | 2007 | // or we have to wrap around to find it. |
|---|
| | 2008 | if (resultRange->startContainer()->isDocumentNode()) { |
|---|
| | 2009 | if (forward) |
|---|
| | 2010 | return firstVisibleRange(target, caseFlag); |
|---|
| | 2011 | else |
|---|
| | 2012 | return lastVisibleRange(target, caseFlag); |
|---|
| | 2013 | } |
|---|
| | 2014 | |
|---|
| 1984 | | PassRefPtr<Range> Editor::lastVisibleRange(Range* startRange, const String& target, bool forward, bool caseFlag) |
|---|
| 1985 | | { |
|---|
| 1986 | | if (forward) |
|---|
| 1987 | | return startRange; |
|---|
| 1988 | | |
|---|
| 1989 | | RefPtr<Range> resultRange = startRange; |
|---|
| 1990 | | RefPtr<Range> searchRange(rangeOfContents(m_frame->document())); |
|---|
| 1991 | | ExceptionCode ec = 0; |
|---|
| 1992 | | |
|---|
| 1993 | | while (rangeVisibility(resultRange.get()) == AfterVisibleArea) { |
|---|
| 1994 | | searchRange->setEndBefore(resultRange->startContainer(), ec); |
|---|
| 1995 | | if (searchRange->startContainer() == searchRange->endContainer()) |
|---|
| 1996 | | return startRange; |
|---|
| 1997 | | resultRange = findPlainText(searchRange.get(), target, forward, caseFlag); |
|---|
| 1998 | | } |
|---|
| 1999 | | |
|---|
| 2000 | | return resultRange; |
|---|
| 2001 | | } |
|---|
| 2002 | | |
|---|