Assertion failure in WebCore::BidiRun::BidiRun()
[WebKit-https.git] / Source / WebCore / rendering / line / TrailingObjects.h
1 /*
2  * Copyright (C) 2000 Lars Knoll (knoll@kde.org)
3  * Copyright (C) 2003, 2004, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All right reserved.
4  * Copyright (C) 2010 Google Inc. All rights reserved.
5  * Copyright (C) 2013 ChangSeok Oh <shivamidow@gmail.com>
6  * Copyright (C) 2013 Adobe Systems Inc. All right reserved.
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Library General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * Library General Public License for more details.
17  *
18  * You should have received a copy of the GNU Library General Public License
19  * along with this library; see the file COPYING.LIB.  If not, write to
20  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21  * Boston, MA 02110-1301, USA.
22  *
23  */
24
25 #ifndef TrailingObjects_h
26 #define TrailingObjects_h
27
28 #include <wtf/Vector.h>
29
30 namespace WebCore {
31
32 class InlineIterator;
33 class RenderBoxModelObject;
34 class RenderText;
35
36 struct BidiRun;
37
38 template <class Iterator, class Run> class BidiResolver;
39 template <class Iterator> class MidpointState;
40 typedef BidiResolver<InlineIterator, BidiRun> InlineBidiResolver;
41 typedef MidpointState<InlineIterator> LineMidpointState;
42
43 class TrailingObjects {
44 public:
45     TrailingObjects()
46         : m_whitespace(0)
47     { }
48
49     void setTrailingWhitespace(RenderText* whitespace)
50     {
51         ASSERT(whitespace);
52         m_whitespace = whitespace;
53     }
54
55     void clear()
56     {
57         m_whitespace = 0;
58         m_boxes.shrink(0); // Use shrink(0) instead of clear() to retain our capacity.
59     }
60
61     void appendBoxIfNeeded(RenderBoxModelObject* box)
62     {
63         if (m_whitespace)
64             m_boxes.append(box);
65     }
66
67     enum CollapseFirstSpaceOrNot { DoNotCollapseFirstSpace, CollapseFirstSpace };
68
69     void updateMidpointsForTrailingBoxes(LineMidpointState&, const InlineIterator& lBreak, CollapseFirstSpaceOrNot);
70
71 private:
72     RenderText* m_whitespace;
73     Vector<RenderBoxModelObject*, 4> m_boxes;
74 };
75
76 }
77
78 #endif // TrailingObjects_h