Home | History | Annotate | Download | only in rendering
      1 /*
      2  * Copyright (C) 2004, 2005, 2009 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 SVGRenderTreeAsText_h
     27 #define SVGRenderTreeAsText_h
     28 
     29 #if ENABLE(SVG)
     30 
     31 #include "TextStream.h"
     32 
     33 namespace WebCore {
     34 
     35     class Color;
     36     class FloatPoint;
     37     class FloatRect;
     38     class FloatSize;
     39     class IntPoint;
     40     class IntRect;
     41     class Node;
     42     class RenderBlock;
     43     class RenderImage;
     44     class RenderObject;
     45     class RenderPath;
     46     class RenderSVGRoot;
     47     class RenderText;
     48     class AffineTransform;
     49 
     50 // functions used by the main RenderTreeAsText code
     51 void write(TextStream&, const RenderPath&, int indent);
     52 void write(TextStream&, const RenderSVGRoot&, int indent);
     53 void writeSVGContainer(TextStream&, const RenderObject&, int indent);
     54 void writeSVGImage(TextStream&, const RenderImage&, int indent);
     55 void writeSVGInlineText(TextStream&, const RenderText&, int indent);
     56 void writeSVGText(TextStream&, const RenderBlock&, int indent);
     57 
     58 void writeRenderResources(TextStream&, Node* parent);
     59 
     60 // helper operators defined used in various classes to dump the render tree.
     61 TextStream& operator<<(TextStream&, const AffineTransform&);
     62 TextStream& operator<<(TextStream&, const IntRect&);
     63 TextStream& operator<<(TextStream&, const Color&);
     64 TextStream& operator<<(TextStream&, const IntPoint&);
     65 TextStream& operator<<(TextStream&, const FloatSize&);
     66 TextStream& operator<<(TextStream&, const FloatRect&);
     67 TextStream& operator<<(TextStream&, const FloatPoint&);
     68 
     69 // helper operators specific to dumping the render tree. these are used in various classes to dump the render tree
     70 // these could be defined in separate namespace to avoid matching these generic signatures unintentionally.
     71 
     72 template<typename Item>
     73 TextStream& operator<<(TextStream& ts, const Vector<Item*>& v)
     74 {
     75     ts << "[";
     76 
     77     for (unsigned i = 0; i < v.size(); i++) {
     78         ts << *v[i];
     79         if (i < v.size() - 1)
     80             ts << ", ";
     81     }
     82 
     83     ts << "]";
     84     return ts;
     85 }
     86 
     87 template<typename Item>
     88 TextStream& operator<<(TextStream& ts, const Vector<Item>& v)
     89 {
     90     ts << "[";
     91 
     92     for (unsigned i = 0; i < v.size(); i++) {
     93         ts << v[i];
     94         if (i < v.size() - 1)
     95             ts << ", ";
     96     }
     97 
     98     ts << "]";
     99     return ts;
    100 }
    101 
    102 template<typename Pointer>
    103 TextStream& operator<<(TextStream& ts, Pointer* t)
    104 {
    105     ts << reinterpret_cast<intptr_t>(t);
    106     return ts;
    107 }
    108 
    109 } // namespace WebCore
    110 
    111 #endif // ENABLE(SVG)
    112 
    113 #endif // SVGRenderTreeAsText_h
    114