| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. | 2 * Copyright (C) 2004, 2005, 2006 Apple Computer, Inc. All rights reserved. |
| 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 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 m_extent = visiblePosition.deepEquivalent(); | 126 m_extent = visiblePosition.deepEquivalent(); |
| 127 validate(); | 127 validate(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 PassRefPtr<Range> VisibleSelection::firstRange() const | 130 PassRefPtr<Range> VisibleSelection::firstRange() const |
| 131 { | 131 { |
| 132 if (isNone()) | 132 if (isNone()) |
| 133 return 0; | 133 return 0; |
| 134 Position start = m_start.parentAnchoredEquivalent(); | 134 Position start = m_start.parentAnchoredEquivalent(); |
| 135 Position end = m_end.parentAnchoredEquivalent(); | 135 Position end = m_end.parentAnchoredEquivalent(); |
| 136 return Range::create(&start.anchorNode()->document(), start, end); | 136 return Range::create(start.anchorNode()->document(), start, end); |
| 137 } | 137 } |
| 138 | 138 |
| 139 PassRefPtr<Range> VisibleSelection::toNormalizedRange() const | 139 PassRefPtr<Range> VisibleSelection::toNormalizedRange() const |
| 140 { | 140 { |
| 141 if (isNone()) | 141 if (isNone()) |
| 142 return 0; | 142 return 0; |
| 143 | 143 |
| 144 // Make sure we have an updated layout since this function is called | 144 // Make sure we have an updated layout since this function is called |
| 145 // in the course of running edit commands which modify the DOM. | 145 // in the course of running edit commands which modify the DOM. |
| 146 // Failing to call this can result in equivalentXXXPosition calls returning | 146 // Failing to call this can result in equivalentXXXPosition calls returning |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 } | 182 } |
| 183 s = s.parentAnchoredEquivalent(); | 183 s = s.parentAnchoredEquivalent(); |
| 184 e = e.parentAnchoredEquivalent(); | 184 e = e.parentAnchoredEquivalent(); |
| 185 } | 185 } |
| 186 | 186 |
| 187 if (!s.containerNode() || !e.containerNode()) | 187 if (!s.containerNode() || !e.containerNode()) |
| 188 return 0; | 188 return 0; |
| 189 | 189 |
| 190 // VisibleSelections are supposed to always be valid. This constructor will
ASSERT | 190 // VisibleSelections are supposed to always be valid. This constructor will
ASSERT |
| 191 // if a valid range could not be created, which is fine for this callsite. | 191 // if a valid range could not be created, which is fine for this callsite. |
| 192 return Range::create(&s.anchorNode()->document(), s, e); | 192 return Range::create(s.anchorNode()->document(), s, e); |
| 193 } | 193 } |
| 194 | 194 |
| 195 bool VisibleSelection::expandUsingGranularity(TextGranularity granularity) | 195 bool VisibleSelection::expandUsingGranularity(TextGranularity granularity) |
| 196 { | 196 { |
| 197 if (isNone()) | 197 if (isNone()) |
| 198 return false; | 198 return false; |
| 199 | 199 |
| 200 validate(granularity); | 200 validate(granularity); |
| 201 return true; | 201 return true; |
| 202 } | 202 } |
| 203 | 203 |
| 204 static PassRefPtr<Range> makeSearchRange(const Position& pos) | 204 static PassRefPtr<Range> makeSearchRange(const Position& pos) |
| 205 { | 205 { |
| 206 Node* n = pos.deprecatedNode(); | 206 Node* n = pos.deprecatedNode(); |
| 207 if (!n) | 207 if (!n) |
| 208 return 0; | 208 return 0; |
| 209 Document& d = n->document(); | 209 Document& d = n->document(); |
| 210 Node* de = d.documentElement(); | 210 Node* de = d.documentElement(); |
| 211 if (!de) | 211 if (!de) |
| 212 return 0; | 212 return 0; |
| 213 Node* boundary = n->enclosingBlockFlowElement(); | 213 Node* boundary = n->enclosingBlockFlowElement(); |
| 214 if (!boundary) | 214 if (!boundary) |
| 215 return 0; | 215 return 0; |
| 216 | 216 |
| 217 RefPtr<Range> searchRange(Range::create(&d)); | 217 RefPtr<Range> searchRange(Range::create(d)); |
| 218 TrackExceptionState es; | 218 TrackExceptionState es; |
| 219 | 219 |
| 220 Position start(pos.parentAnchoredEquivalent()); | 220 Position start(pos.parentAnchoredEquivalent()); |
| 221 searchRange->selectNodeContents(boundary, es); | 221 searchRange->selectNodeContents(boundary, es); |
| 222 searchRange->setStart(start.containerNode(), start.offsetInContainerNode(),
es); | 222 searchRange->setStart(start.containerNode(), start.offsetInContainerNode(),
es); |
| 223 | 223 |
| 224 ASSERT(!es.hadException()); | 224 ASSERT(!es.hadException()); |
| 225 if (es.hadException()) | 225 if (es.hadException()) |
| 226 return 0; | 226 return 0; |
| 227 | 227 |
| (...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 737 sel.showTreeForThis(); | 737 sel.showTreeForThis(); |
| 738 } | 738 } |
| 739 | 739 |
| 740 void showTree(const WebCore::VisibleSelection* sel) | 740 void showTree(const WebCore::VisibleSelection* sel) |
| 741 { | 741 { |
| 742 if (sel) | 742 if (sel) |
| 743 sel->showTreeForThis(); | 743 sel->showTreeForThis(); |
| 744 } | 744 } |
| 745 | 745 |
| 746 #endif | 746 #endif |
| OLD | NEW |