| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All right r
eserved. | 3 * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010 Apple Inc. All right r
eserved. |
| 4 * Copyright (C) 2010 Google Inc. All rights reserved. | 4 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "core/rendering/RenderText.h" | 28 #include "core/rendering/RenderText.h" |
| 29 #include "wtf/StdLibExtras.h" | 29 #include "wtf/StdLibExtras.h" |
| 30 | 30 |
| 31 namespace WebCore { | 31 namespace WebCore { |
| 32 | 32 |
| 33 // This class is used to RenderInline subtrees, stepping by character within the | 33 // This class is used to RenderInline subtrees, stepping by character within the |
| 34 // text children. InlineIterator will use bidiNext to find the next RenderText | 34 // text children. InlineIterator will use bidiNext to find the next RenderText |
| 35 // optionally notifying a BidiResolver every time it steps into/out of a RenderI
nline. | 35 // optionally notifying a BidiResolver every time it steps into/out of a RenderI
nline. |
| 36 class InlineIterator { | 36 class InlineIterator { |
| 37 public: | 37 public: |
| 38 enum IncrementRule { |
| 39 FastIncrementInlineRenderer, |
| 40 FastIncrementInTextNode |
| 41 }; |
| 42 |
| 38 InlineIterator() | 43 InlineIterator() |
| 39 : m_root(0) | 44 : m_root(0) |
| 40 , m_obj(0) | 45 , m_obj(0) |
| 41 , m_pos(0) | 46 , m_pos(0) |
| 42 , m_nextBreakablePosition(-1) | 47 , m_nextBreakablePosition(-1) |
| 43 { | 48 { |
| 44 } | 49 } |
| 45 | 50 |
| 46 InlineIterator(RenderObject* root, RenderObject* o, unsigned p) | 51 InlineIterator(RenderObject* root, RenderObject* o, unsigned p) |
| 47 : m_root(root) | 52 : m_root(root) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 63 m_obj = object; | 68 m_obj = object; |
| 64 m_pos = offset; | 69 m_pos = offset; |
| 65 m_nextBreakablePosition = nextBreak; | 70 m_nextBreakablePosition = nextBreak; |
| 66 } | 71 } |
| 67 | 72 |
| 68 RenderObject* object() const { return m_obj; } | 73 RenderObject* object() const { return m_obj; } |
| 69 unsigned offset() const { return m_pos; } | 74 unsigned offset() const { return m_pos; } |
| 70 RenderObject* root() const { return m_root; } | 75 RenderObject* root() const { return m_root; } |
| 71 | 76 |
| 72 void fastIncrementInTextNode(); | 77 void fastIncrementInTextNode(); |
| 73 void increment(InlineBidiResolver* = 0); | 78 void increment(InlineBidiResolver* = 0, IncrementRule = FastIncrementInTextN
ode); |
| 74 bool atEnd() const; | 79 bool atEnd() const; |
| 75 | 80 |
| 76 inline bool atTextParagraphSeparator() | 81 inline bool atTextParagraphSeparator() |
| 77 { | 82 { |
| 78 return m_obj && m_obj->preservesNewline() && m_obj->isText() && toRender
Text(m_obj)->textLength() | 83 return m_obj && m_obj->preservesNewline() && m_obj->isText() && toRender
Text(m_obj)->textLength() |
| 79 && !toRenderText(m_obj)->isWordBreak() && toRenderText(m_obj)->chara
cterAt(m_pos) == '\n'; | 84 && !toRenderText(m_obj)->isWordBreak() && toRenderText(m_obj)->chara
cterAt(m_pos) == '\n'; |
| 80 } | 85 } |
| 81 | 86 |
| 82 inline bool atParagraphSeparator() | 87 inline bool atParagraphSeparator() |
| 83 { | 88 { |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 // FIXME: Support SkipEmptyInlines and observer parameters. | 350 // FIXME: Support SkipEmptyInlines and observer parameters. |
| 346 m_current = bidiNextIncludingEmptyInlines(m_root, m_current, &m_atEndOfI
nline); | 351 m_current = bidiNextIncludingEmptyInlines(m_root, m_current, &m_atEndOfI
nline); |
| 347 return m_current; | 352 return m_current; |
| 348 } | 353 } |
| 349 private: | 354 private: |
| 350 RenderObject* m_root; | 355 RenderObject* m_root; |
| 351 RenderObject* m_current; | 356 RenderObject* m_current; |
| 352 bool m_atEndOfInline; | 357 bool m_atEndOfInline; |
| 353 }; | 358 }; |
| 354 | 359 |
| 355 inline void InlineIterator::increment(InlineBidiResolver* resolver) | 360 inline void InlineIterator::increment(InlineBidiResolver* resolver, IncrementRul
e rule) |
| 356 { | 361 { |
| 357 if (!m_obj) | 362 if (!m_obj) |
| 358 return; | 363 return; |
| 359 if (m_obj->isText()) { | 364 if (m_obj->isText() && rule == FastIncrementInTextNode) { |
| 360 fastIncrementInTextNode(); | 365 fastIncrementInTextNode(); |
| 361 if (m_pos < toRenderText(m_obj)->textLength()) | 366 if (m_pos < toRenderText(m_obj)->textLength()) |
| 362 return; | 367 return; |
| 363 } | 368 } |
| 364 // bidiNext can return 0, so use moveTo instead of moveToStartOf | 369 // bidiNext can return 0, so use moveTo instead of moveToStartOf |
| 365 moveTo(bidiNextSkippingEmptyInlines(m_root, m_obj, resolver), 0); | 370 moveTo(bidiNextSkippingEmptyInlines(m_root, m_obj, resolver), 0); |
| 366 } | 371 } |
| 367 | 372 |
| 368 inline bool InlineIterator::atEnd() const | 373 inline bool InlineIterator::atEnd() const |
| 369 { | 374 { |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 m_sor = m_eor; | 547 m_sor = m_eor; |
| 543 } | 548 } |
| 544 | 549 |
| 545 m_direction = WTF::Unicode::OtherNeutral; | 550 m_direction = WTF::Unicode::OtherNeutral; |
| 546 m_status.eor = WTF::Unicode::OtherNeutral; | 551 m_status.eor = WTF::Unicode::OtherNeutral; |
| 547 } | 552 } |
| 548 | 553 |
| 549 } | 554 } |
| 550 | 555 |
| 551 #endif // InlineIterator_h | 556 #endif // InlineIterator_h |
| OLD | NEW |