summaryrefslogtreecommitdiffstats
path: root/WebCore/rendering/RenderTreeAsText.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/rendering/RenderTreeAsText.cpp')
-rw-r--r--WebCore/rendering/RenderTreeAsText.cpp42
1 files changed, 31 insertions, 11 deletions
diff --git a/WebCore/rendering/RenderTreeAsText.cpp b/WebCore/rendering/RenderTreeAsText.cpp
index 164a656..75c35ba 100644
--- a/WebCore/rendering/RenderTreeAsText.cpp
+++ b/WebCore/rendering/RenderTreeAsText.cpp
@@ -28,7 +28,6 @@
#include "CSSMutableStyleDeclaration.h"
#include "CharacterNames.h"
-#include "CString.h"
#include "Document.h"
#include "Frame.h"
#include "FrameView.h"
@@ -38,6 +37,7 @@
#include "RenderBR.h"
#include "RenderFileUploadControl.h"
#include "RenderInline.h"
+#include "RenderListItem.h"
#include "RenderListMarker.h"
#include "RenderPart.h"
#include "RenderTableCell.h"
@@ -178,10 +178,13 @@ String quoteAndEscapeNonPrintables(const String& s)
return String::adopt(result);
}
-static TextStream &operator<<(TextStream& ts, const RenderObject& o)
+static void writeRenderObject(TextStream& ts, const RenderObject& o, RenderAsTextBehavior behavior)
{
ts << o.renderName();
+ if (behavior & RenderAsTextShowAddresses)
+ ts << " " << &o;
+
if (o.style() && o.style()->zIndex())
ts << " zI: " << o.style()->zIndex();
@@ -254,7 +257,7 @@ static TextStream &operator<<(TextStream& ts, const RenderObject& o)
ts << " [textStrokeWidth=" << o.style()->textStrokeWidth() << "]";
if (!o.isBoxModelObject())
- return ts;
+ return;
const RenderBoxModelObject& box = *toRenderBoxModelObject(&o);
if (box.borderTop() || box.borderRight() || box.borderBottom() || box.borderLeft()) {
@@ -367,8 +370,6 @@ static TextStream &operator<<(TextStream& ts, const RenderObject& o)
}
}
#endif
-
- return ts;
}
static void writeTextRun(TextStream& ts, const RenderText& o, const InlineTextBox& run)
@@ -388,7 +389,7 @@ static void writeTextRun(TextStream& ts, const RenderText& o, const InlineTextBo
<< "\n";
}
-void write(TextStream& ts, const RenderObject& o, int indent)
+void write(TextStream& ts, const RenderObject& o, int indent, RenderAsTextBehavior behavior)
{
#if ENABLE(SVG)
if (o.isRenderPath()) {
@@ -422,7 +423,8 @@ void write(TextStream& ts, const RenderObject& o, int indent)
writeIndent(ts, indent);
- ts << o << "\n";
+ writeRenderObject(ts, o, behavior);
+ ts << "\n";
if (o.isText() && !o.isBR()) {
const RenderText& text = *toRenderText(&o);
@@ -435,7 +437,7 @@ void write(TextStream& ts, const RenderObject& o, int indent)
for (RenderObject* child = o.firstChild(); child; child = child->nextSibling()) {
if (child->hasLayer())
continue;
- write(ts, *child, indent + 1);
+ write(ts, *child, indent + 1, behavior);
}
if (o.isWidget()) {
@@ -447,7 +449,7 @@ void write(TextStream& ts, const RenderObject& o, int indent)
view->layout();
RenderLayer* l = root->layer();
if (l)
- writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), indent + 1);
+ writeLayers(ts, l, l, IntRect(l->x(), l->y(), l->width(), l->height()), indent + 1, behavior);
}
}
}
@@ -465,7 +467,12 @@ static void write(TextStream& ts, RenderLayer& l,
{
writeIndent(ts, indent);
- ts << "layer " << layerBounds;
+ ts << "layer ";
+
+ if (behavior & RenderAsTextShowAddresses)
+ ts << &l << " ";
+
+ ts << layerBounds;
if (!layerBounds.isEmpty()) {
if (!backgroundClipRect.contains(layerBounds))
@@ -504,7 +511,7 @@ static void write(TextStream& ts, RenderLayer& l,
ts << "\n";
if (paintPhase != LayerPaintPhaseBackground)
- write(ts, *l.renderer(), indent + 1);
+ write(ts, *l.renderer(), indent + 1, behavior);
}
static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLayer* l,
@@ -654,4 +661,17 @@ String counterValueForElement(Element* element)
return stream.release();
}
+String markerTextForListItem(Element* element)
+{
+ // Make sure the element is not freed during the layout.
+ RefPtr<Element> elementRef(element);
+ element->document()->updateLayout();
+
+ RenderObject* renderer = element->renderer();
+ if (!renderer || !renderer->isListItem())
+ return String();
+
+ return toRenderListItem(renderer)->markerText();
+}
+
} // namespace WebCore