1 /*
2  * Copyright (C) 2003, 2006, 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25 
26 #ifndef RenderTreeAsText_h
27 #define RenderTreeAsText_h
28 #include "TextStream.h"
29 
30 #include <wtf/Forward.h>
31 #include <wtf/MathExtras.h>
32 
33 namespace WebCore {
34 
35 class Element;
36 class FloatPoint;
37 class FloatSize;
38 class Frame;
39 class IntPoint;
40 class IntRect;
41 class RenderObject;
42 class TextStream;
43 
44 enum RenderAsTextBehaviorFlags {
45     RenderAsTextBehaviorNormal = 0,
46     RenderAsTextShowAllLayers = 1 << 0, // Dump all layers, not just those that would paint.
47     RenderAsTextShowLayerNesting = 1 << 1, // Annotate the layer lists.
48     RenderAsTextShowCompositedLayers = 1 << 2, // Show which layers are composited.
49     RenderAsTextShowAddresses = 1 << 3, // Show layer and renderer addresses.
50     RenderAsTextShowIDAndClass = 1 << 4, // Show id and class attributes
51     RenderAsTextPrintingMode = 1 << 5, // Dump the tree in printing mode.
52     RenderAsTextDontUpdateLayout = 1 << 6, // Don't update layout, to make it safe to call showLayerTree() from the debugger inside layout or painting code.
53     RenderAsTextShowLayoutState = 1 << 7 // Print the various 'needs layout' bits on renderers.
54 };
55 typedef unsigned RenderAsTextBehavior;
56 
57 // You don't need pageWidthInPixels if you don't specify RenderAsTextInPrintingMode.
58 String externalRepresentation(Frame*, RenderAsTextBehavior = RenderAsTextBehaviorNormal);
59 void write(TextStream&, const RenderObject&, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal);
60 void writeIndent(TextStream&, int indent);
61 
62 class RenderTreeAsText {
63 // FIXME: This is a cheesy hack to allow easy access to RenderStyle colors.  It won't be needed if we convert
64 // it to use visitedDependentColor instead. (This just involves rebaselining many results though, so for now it's
65 // not being done).
66 public:
67 static void writeRenderObject(TextStream& ts, const RenderObject& o, RenderAsTextBehavior behavior);
68 };
69 
70 TextStream& operator<<(TextStream&, const IntPoint&);
71 TextStream& operator<<(TextStream&, const IntRect&);
72 TextStream& operator<<(TextStream&, const FloatPoint&);
73 TextStream& operator<<(TextStream&, const FloatSize&);
74 
75 template<typename Item>
76 TextStream& operator<<(TextStream& ts, const Vector<Item>& vector)
77 {
78     ts << "[";
79 
80     unsigned size = vector.size();
81     for (unsigned i = 0; i < size; ++i) {
82         ts << vector[i];
83         if (i < size - 1)
84             ts << ", ";
85     }
86 
87     ts << "]";
88     return ts;
89 }
90 
91 // Helper function shared with SVGRenderTreeAsText
92 String quoteAndEscapeNonPrintables(const String&);
93 
94 String counterValueForElement(Element*);
95 
96 String markerTextForListItem(Element*);
97 
98 bool hasFractions(double val);
99 
100 } // namespace WebCore
101 
102 #endif // RenderTreeAsText_h
103