;
0sDc           @   s  d  Z  d k Z d k Z d k Z d k Z d k Z d k l Z d k l Z d k	 l
 Z
 d k l Z d k l Z d k l Z l Z l Z l Z d k l Z l Z l Z d	 k Td
 k l Z d k l Z d k l Z e i Z e i Z e i Z d Z  d Z! e i" d  Z# e i" d  Z$ d d e i" d  Z% d   Z& e' d  Z( d f  d     YZ) d e f d     YZ* d d  Z+ d   Z, d   Z- e. d j o e+   e,   e-   n d S(   s  An experimental SVG renderer for the ReportLab graphics framework.

This will create SVG code from the ReportLab Graphics API (RLG).
To read existing SVG code and convert it into ReportLab graphics
objects download the svglib module here:

  http://python.net/~gherman/#svglib
N(   s
   StringType(   s   getitem(   s   stringWidth(   s   fp_str(   s   black(   s   StateTrackers   getStateDeltas   Renderers   renderScaledDrawing(   s   STATE_DEFAULTSs   Paths   UserNode(   s   *(   s	   rl_config(   s   getStringIO(   s   getDOMImplementations8   stroke-width stroke-linecap stroke fill stroke-dasharrays   font-family font-sizec         C   s*   t    } t |  | d | | i   Sd S(   s>   Returns a SVG as a string in memory, without touching the disks   showBoundaryN(   s   getStringIOs   ss
   drawToFiles   ds   showBoundarys   getvalue(   s   ds   showBoundarys   s(    (    s   ./renderSVG.pys   drawToString&   s     	c         C   sN   t  |   }  t |  i |  i f  } t |  | d d d | | i |  d  S(   Ni    s   showBoundary(
   s   renderScaledDrawings   ds	   SVGCanvass   widths   heights   cs   draws   showBoundarys   saves   fn(   s   ds   fns   showBoundarys   c(    (    s   ./renderSVG.pys
   drawToFile,   s    i    c         C   s/   t    } | i t |   | | | d | d S(   s   As it says.s   showBoundaryN(	   s   _SVGRenderers   rs   draws   renderScaledDrawings   drawings   canvass   xs   ys   showBoundary(   s   drawings   canvass   xs   ys   showBoundarys   r(    (    s   ./renderSVG.pys   draw3   s     	c         C   sP   g  } x? t d t |   d  D]% } | i |  | |  | d f  q W| Sd S(   so   
    given a list of coordinates [x0, y0, x1, y1....]
    produce a list of points [(x0,y0), (y1,y0),....]
    i    i   i   N(   s   Ps   ranges   lens   Ls   is   append(   s   Ls   is   P(    (    s   ./renderSVG.pys   _pointsFromList;   s      #c   	      K   s   |  i |  } xh | i   D]Z \ } } t |  } | o | i | |  q | i |  } | i | | p |  q W| Sd S(   s  Transform a DOM node into new node and copy selected attributes.

    Creates a new DOM node with tag name 'newTag' for document 'doc'
    and copies selected attributes from an existing 'node' as provided
    in 'attrDict'. The source 'node' can be None. Attribute values will
    be converted to strings.

    E.g.

        n = transformNode(doc, "node1", x="0", y="1")
        -> DOM node for <node1 x="0" y="1"/>

        n = transformNode(doc, "node1", x=0, y=1+1)
        -> DOM node for <node1 x="0" y="2"/>

        n = transformNode(doc, "node1", node0, x="x0", y="x0", zoo=bar())
        -> DOM node for <node1 x="[node0.x0]" y="[node0.y0]" zoo="[bar()]"/>
    N(   s   docs   createElements   newTags   newNodes   attrDicts   itemss   newAttrs   attrs   strs   sattrs   nodes   setAttributes   getAttributes   attrVal(	   s   docs   newTags   nodes   attrDicts   attrs   newAttrs   sattrs   attrVals   newNode(    (    s   ./renderSVG.pys   transformNodeH   s      s	   SVGCanvasc           B   s  t  Z d d f d  Z e d  Z e e d  Z d d  Z d   Z d   Z d	 d
  Z	 d   Z
 d   Z g  d	 d  Z d   Z d   Z d   Z d   Z d   Z d d d  Z d d d  Z d	 d  Z d	 d d  Z d	 d  Z d   Z e e d  Z d   Z d   Z d   Z d	 d  Z d	 d  d	 d!  Z d	 d"  Z e e d#  Z d$   Z  d%   Z! d&   Z" d'   Z# d(   Z$ d)   Z% d*   Z& d+   Z' d,   Z( d-   Z) d.   Z* d/   Z+ RS(0   Ni,  c         C   sk  d |  _ | \ |  _ |  _ |  _ g  |  _ h  |  _ d |  _ t |  _	 |  _
 |  _ |  _ |  _ |  _ |  _ |  _ t d  } | i t d t  |  _ |  i i |  _ |  i i d t | d   |  i i d t |  i   |  i i d  } |  i i d  } | i |  |  i i |  |  i i d	  } |  i i d  } | i |  |  i i |  |  i t  d
 t  d  |  i! t  d  |  i" d  |  i# d  |  i$ d  t% |  i d d d } t% |  i d d d d d d |  i d |  i } | i |  |  i i |  t% |  i d d d d d |  i d d |  _( |  i i |  i(  |  i( |  _) d  S(   Ni    s    s   minidoms   svgs   widths   heights   titles   ...s   descs   fontNames   fontSizes   strokeColori   i   s   clipPaths   ids   clips   rects   xs   ys   gs   groups	   transforms   scale(1,-1) translate(0,-%d)s   styles   clip-path: url(#clip)(*   s   selfs   verboses   sizes   widths   heights   codes   styles   paths   Nones   _strokeColors
   _fillColors
   _lineWidths   _fonts	   _fontSizes   _lineCaps	   _lineJoins   _colors   getDOMImplementations   implementations   createDocuments   docs   documentElements   svgs   setAttributes   strs   createElements   titles   createTextNodes   texts   appendChilds   descs   setFonts   STATE_DEFAULTSs   setStrokeColors
   setLineCaps   setLineJoins   setLineWidths   transformNodes   clipPaths   clipRects	   groupTrees	   currGroup(   s   selfs   sizes   clipRects   titles   implementations   texts   clipPaths   desc(    (    s   ./renderSVG.pys   __init__k   sF    				:c         C   sz   t  |  t j o t | d  } n | } | i d  |  i i d d  } | i |  | | j	 o | i
   n d  S(   Ns   ws   <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd" >
s   indents       (   s   types   fs
   StringTypes   opens   files   writes   selfs   svgs   toprettyxmls   results   close(   s   selfs   fs   results   file(    (    s   ./renderSVG.pys   save   s    	c         C   s4   | p |  i } | p |  i } t | | |  Sd S(   su   Return the logical width of the string if it were drawn
        in the current font (defaults to self.font).
        N(   s   fonts   selfs   _fonts   fontSizes	   _fontSizes   stringWidths   s(   s   selfs   ss   fonts   fontSize(    (    s   ./renderSVG.pys   NOTUSED_stringWidth   s     s    c         C   s   d } t i |  } |  i i   } | o? g  } x, | D]$ } | | j o | i	 |  q8 q8 W| } n g  } x( | D]  } | i	 | |  i | f  qw Wt d   |  } t i | d  d } | Sd  S(   Ns    c         C   s   d |  d |  d f S(   Ns   %s: %si    i   (   s   i(   s   i(    (    s   ./renderSVG.pys   <lambda>   s    s   ; s   ;(   s   strs   strings   splits   includes   selfs   styles   keyss   tmps   words   appends   itemss   ks   maps   join(   s   selfs   includes   tmps   words   keyss   itemss   strs   k(    (    s   ./renderSVG.pys   _formatStyle   s"     
 c         C   sM   t  i | t d  d  } t  i | d d  } t  i | d d  } | Sd S(   s   
        return a copy of string s with special characters in postscript strings
        escaped with backslashes.
        Have not handled characters that are converted normally in python strings
        i.e. 
 -> newline
        i\   s   \\s   (s   \(s   )s   \)N(   s   strings   replaces   ss   chrs   str(   s   selfs   ss   str(    (    s   ./renderSVG.pys   _escape   s
     c         C   s   d St  | | d  } t  | | d  } | | d | | d f \ } } d } | d j o
 d }
 n d }
 | | | | | | | |
 f }	 | |	 Sd S(   sX   Calculate the path for an arc inscribed in rectangle defined
        by (x1,y1),(x2,y2).Nf2.0sI   matrix currentmatrix %s %s translate %s %s scale 0 0 1 %s %s %s setmatrixi    s   arcs   arcn(   s   abss   x2s   x1s   xScales   y2s   y1s   yScales   xs   ys   codelines   extents   arcs   startAngs   data(   s   selfs   x1s   y1s   x2s   y2s   startAngs   extents   ys   yScales   datas   arcs   codelines   xs   xScale(    (    s   ./renderSVG.pys   _genArcCode   s     "
i    c         C   sK   t  |  i d d |  i d |  i t  } |  i i |  d |  _ d  Sd  S(   Ns   paths   ds   styles    (   s   transformNodes   selfs   docs   paths   _formatStyles   LINE_STYLESs	   currGroups   appendChild(   s   selfs   codes   clips   path(    (    s   ./renderSVG.pys   _fillAndStroke   s    	c         C   sS   h  d d <d d <d d <} |  i | j o | |  _ | | |  i d <n d  S(   Ni    s   butti   s   roundi   s   squares   stroke-linecap(   s   valss   selfs   _lineCaps   vs   style(   s   selfs   vs   vals(    (    s   ./renderSVG.pys
   setLineCap  s    !	c         C   sS   h  d d <d d <d d <} |  i | j o | |  _ | | |  i d <n d  S(   Ni    s   miteri   s   roundi   s   bevels   stroke-linecap(   s   valss   selfs	   _lineJoins   vs   style(   s   selfs   vs   vals(    (    s   ./renderSVG.pys   setLineJoin  s    !	c         C   s   t  i } t |  t i t i f j o) | t t | | g  d  |  i d <nt t |  t i t i f j o t |  d j oA | d j p
 t d  | t t | | g  d  |  i d <n d S(   s7   Two notations. Pass two numbers, or an array and phase.s   , s   stroke-dasharrayi    s   phase is a length in user spaceN(   s   strings   joins   types   arrays   typess   IntTypes	   FloatTypes   maps   strs   phases   selfs   styles   ListTypes	   TupleTypes   lens   AssertionError(   s   selfs   arrays   phases   join(    (    s   ./renderSVG.pys   setDash&  s     	)2c         C   s   | |  _ |  i |  | t j o d |  i d <nH | i | i | i f \ } } } d | d | d | d f |  i d <d  S(   Ns   nones   strokes   rgb(%d%%,%d%%,%d%%)id   (   s   colors   selfs   _strokeColors   setColors   Nones   styles   reds   greens   blues   rs   gs   b(   s   selfs   colors   bs   gs   r(    (    s   ./renderSVG.pys   setStrokeColor1  s    	!c         C   s!   |  i | j o | |  _ n d  S(   N(   s   selfs   _colors   color(   s   selfs   color(    (    s   ./renderSVG.pys   setColor;  s    c         C   s   | |  _ |  i |  | t j o d |  i d <nH | i | i | i f \ } } } d | d | d | d f |  i d <d  S(   Ns   nones   fills   rgb(%d%%,%d%%,%d%%)id   (   s   colors   selfs
   _fillColors   setColors   Nones   styles   reds   greens   blues   rs   gs   b(   s   selfs   colors   bs   gs   r(    (    s   ./renderSVG.pys   setFillColor@  s    	!c         C   s.   | |  i j o | |  _ | |  i d <n d  S(   Ns   stroke-width(   s   widths   selfs
   _lineWidths   style(   s   selfs   width(    (    s   ./renderSVG.pys   setLineWidthJ  s    	c         C   sZ   |  i | j p |  i | j o6 | | f \ |  _ |  _ | |  i d <| |  i d <n d  S(   Ns   font-familys	   font-size(   s   selfs   _fonts   fonts	   _fontSizes   fontSizes   style(   s   selfs   fonts   fontSize(    (    s   ./renderSVG.pys   setFontP  s     i   c         C   sh   |  i o	 d GHn t |  i d d | d | d | | d | | d |  i t	  } |  i i |  d S(	   s)   Draw a rectangle between x1,y1 and x2,y2.s   +++ SVGCanvas.rects   rects   xs   ys   widths   heights   styleN(   s   selfs   verboses   transformNodes   docs   x1s   y1s   x2s   y2s   _formatStyles   LINE_STYLESs   rects	   currGroups   appendChild(   s   selfs   x1s   y1s   x2s   y2s   rxs   rys   rect(    (    s   ./renderSVG.pys   rectY  s     
 	 c         C   sa   t  |  i d d | d | d | | d | | d | d | d |  i	 t
  } |  i i |  d	 S(
   s   Draw a rounded rectangle between x1,y1 and x2,y2.

        Corners inset as ellipses with x-radius rx and y-radius ry.
        These should have x1<x2, y1<y2, rx>0, and ry>0.
        s   rects   xs   ys   widths   heights   rxs   rys   styleN(   s   transformNodes   selfs   docs   x1s   y1s   x2s   y2s   rxs   rys   _formatStyles   LINE_STYLESs   rects	   currGroups   appendChild(   s   selfs   x1s   y1s   x2s   y2s   rxs   rys   rect(    (    s   ./renderSVG.pys	   roundRecte  s
     ,c         C   s   |  i o	 d GHn |  i t j o |  i |  i  |  i |  } |  i t  } | d j o | d | | | f } n | d |  i d } t |  i d d | d | d	 | d
 d d | } |  i i |  } | i |  |  i i |  n d  S(   Ns   +++ SVGCanvas.drawStringi    s    rotate(%f %f %f);s
    fill: %s;s   fills   texts   xs   ys   styles	   transforms   translate(0,%d) scale(1,-1)i   (   s   selfs   verboses
   _fillColors   Nones   setColors   _escapes   ss   _formatStyles   TEXT_STYLESs   sts   angles   xs   ys   styles   transformNodes   docs   texts   createTextNodes   contents   appendChilds	   currGroup(   s   selfs   ss   xs   ys   angles   texts   sts   content(    (    s   ./renderSVG.pys
   drawStrings  s    
 	s   middlec         C   s   |  i o	 d GHn |  i t j o | d d g j oi t | |  i |  i  } | d j o | | 8} q | d j o | | d 8} q t d t |   q n |  i | | t d | d  S(	   Ns   +++ SVGCanvas.drawCentredStrings   starts	   inheriteds   ends   middlef2.0s   bad value for text_anchor s   angle(   s   selfs   verboses
   _fillColors   Nones   text_anchors   stringWidths   ss   _fonts	   _fontSizes   textLens   xs
   ValueErrors   strs
   drawStrings   ys   texts   angle(   s   selfs   ss   xs   ys   angles   text_anchors   textLen(    (    s   ./renderSVG.pys   drawCentredString  s    
 	c         C   s#   |  i | | | d | d d d  S(   Ns   angles   text_anchors   end(   s   selfs   drawCentredStrings   texts   xs   ys   angle(   s   selfs   texts   xs   ys   angle(    (    s   ./renderSVG.pys   drawRightString  s    c         C   s   |  i i |  } d S(   s   Add a comment.N(   s   selfs   docs   createComments   datas   comment(   s   selfs   datas   comment(    (    s   ./renderSVG.pys   comment  s     c         C   s   d  S(   N(    (   s   selfs   images   x1s   y1s   x2s   y2(    (    s   ./renderSVG.pys	   drawImage  s    c      	   C   s_   |  i t j oK t |  i d d d | | | | f d |  i	 t
  } |  i i |  n d  S(   Ns   paths   ds   M %f,%f L %f,%f Zs   style(   s   selfs   _strokeColors   Nones   transformNodes   docs   x1s   y1s   x2s   y2s   _formatStyles   LINE_STYLESs   paths	   currGroups   appendChild(   s   selfs   x1s   y1s   x2s   y2s   path(    (    s   ./renderSVG.pys   line  s     c         C   sm   t  |  i d d | | d d | | d d | | d d | | d d |  i t  } |  i
 i |  d S(	   s{   Draw an orthogonal ellipse inscribed within the rectangle x1,y1,x2,y2.

        These should have x1<x2 and y1<y2.
        s   ellipses   cxf2.0s   cys   rxs   rys   styleN(   s   transformNodes   selfs   docs   x1s   x2s   y1s   y2s   _formatStyles   LINE_STYLESs   ellipses	   currGroups   appendChild(   s   selfs   x1s   y1s   x2s   y2s   ellipse(    (    s   ./renderSVG.pys   ellipse  s
     8c         C   sG   t  |  i d d | d | d | d |  i t  } |  i	 i
 |  d  S(   Ns   circles   cxs   cys   rs   style(   s   transformNodes   selfs   docs   xcs   ycs   rs   _formatStyles   LINE_STYLESs   circles	   currGroups   appendChild(   s   selfs   xcs   ycs   rs   circle(    (    s   ./renderSVG.pys   circle  s    c
         C   s   d  Sd }
 t | |  t | | | | | |  f } |  i t j o, |  i |  i  |  i i |
 | d  n |  i t j o> |  i |  i  |  i i |
 | |	 o d p d d  n d  S(   Ns   %s m %s curvetos    eofills
    closepaths    s    stroke(   s   codelines   fp_strs   x1s   y1s   x2s   y2s   x3s   y3s   x4s   y4s   datas   selfs
   _fillColors   Nones   setColors   codes   appends   _strokeColors   closed(   s   selfs   x1s   y1s   x2s   y2s   x3s   y3s   x4s   y4s   closeds   codelines   data(    (    s   ./renderSVG.pys	   drawCurve  s     *ih  c         C   s  | | d | | d f \ }
 }	 | | d | | d f \ } } | t | t
 d  |
 } | t | t
 d  |	 } | t | | t
 d  |
 } | t | | t
 d  |	 } d } | o | d |
 |	 | | f } n | o- | d | | d | d j d | | f } n0 | d | | | | d | d j d | | f	 } | o | d |
 |	 f } n t |  i d	 d
 | d |  i   } |  i i |  d S(   s  Draw a partial ellipse inscribed within the rectangle x1,y1,x2,y2.

        Starting at startAng degrees and covering extent degrees. Angles
        start with 0 to the right (+x) and increase counter-clockwise.
        These should have x1<x2 and y1<y2.
        f2.0i   s    s   M %f, %f L %f, %f s   A %f, %f %d %d %d %f, %f i    s$   M %f, %f A %f, %f %d %d %d %f, %f Z s   L %f, %f Z s   paths   ds   styleN(   s   x1s   x2s   y1s   y2s   cxs   cys   rxs   rys   coss   startAngs   pis   mxs   sins   mys   extents   axs   ays   strs
   fromcenters   transformNodes   selfs   docs   _formatStyles   paths	   currGroups   appendChild(   s   selfs   x1s   y1s   x2s   y2s   startAngs   extents
   fromcenters   ays   cys   cxs   axs   rxs   rys   paths   strs   mys   mx(    (    s   ./renderSVG.pys   drawArc  s$     ""  -/c         C   s   t  |  d j p
 t d  |  i t j o |  i |  i  g  } x/ t t  |   D] } | i
 d | |  qV Wt i | d  } t |  i d d | d |  i t  } |  i i |  n d  S(   Ni   s"   Polygon must have 2 or more pointss   %f %fs   , s   polygons   pointss   style(   s   lens   pointss   AssertionErrors   selfs   _strokeColors   Nones   setColors   pairss   xranges   is   appends   strings   joins   ptss   transformNodes   docs   _formatStyles   LINE_STYLESs   polylines	   currGroups   appendChild(   s   selfs   pointss   closeds   is   pairss   polylines   pts(    (    s   ./renderSVG.pys   polygon  s     c         C   sq   d  S|  i t j oY |  i |  i  d } x@ | D]4 } |  i i | t	 | d  t	 | d  f  q1 Wn d  S(   Ns   %s m %s l strokei    i   (
   s   selfs   _strokeColors   Nones	   _setColors   codelines   lineLists   lines   codes   appends   fp_str(   s   selfs   lineLists   colors   widths   codelines   line(    (    s   ./renderSVG.pys   lines  s     c         C   s   t  |  d j p
 t d  |  i t j o |  i |  i  g  } x/ t t  |   D] } | i
 d | |  qV Wt i | d  } t |  i d d | d |  i t  } |  i i |  n d  S(   Ni   s#   Polyline must have 1 or more pointss   %f %fs   , s   polylines   pointss   style(   s   lens   pointss   AssertionErrors   selfs   _strokeColors   Nones   setColors   pairss   xranges   is   appends   strings   joins   ptss   transformNodes   docs   _formatStyles   LINE_STYLESs   polylines	   currGroups   appendChild(   s   selfs   pointss   pairss   is   polylines   pts(    (    s   ./renderSVG.pys   polyLine  s     c         C   sk   |  i o	 d GHn |  i t |  i d d d f \ } } | i |  | |  _ |  i o	 d GHn | Sd  S(   Ns   +++ begin SVGCanvas.startGroups   gs	   transforms    s   +++ end SVGCanvas.startGroup(   s   selfs   verboses	   currGroups   transformNodes   docs   groups   appendChild(   s   selfs	   currGroups   group(    (    s   ./renderSVG.pys
   startGroup   s    
 	'	
 	c         C   s3   |  i o	 d GHn | |  _ |  i o	 d GHn d  S(   Ns   +++ begin SVGCanvas.endGroups   +++ end SVGCanvas.endGroup(   s   selfs   verboses	   currGroup(   s   selfs	   currGroup(    (    s   ./renderSVG.pys   endGroup(  s
    
 		
 c   	      C   s   |  i o! d G| G| G| G| G| G| GHn |  i i	 d  } d | | | | | | f } | | | | | | f d d d d d d f j o! |  i i d d | | f  n d  S(   Ns   !!! begin SVGCanvas.transforms	   transforms   matrix(%f, %f, %f, %f, %f, %f)i   i    s   %s %s(   s   selfs   verboses   as   bs   cs   ds   es   fs	   currGroups   getAttributes   trs   ts   setAttribute(	   s   selfs   as   bs   cs   ds   es   fs   trs   t(    (    s   ./renderSVG.pys	   transform.  s    
 !1c         C   sL   d GHd  S|  i i d  } d | | f } |  i i d d | | f  d  S(   Ns   !!! begin SVGCanvas.translates	   transforms   translate(%f, %f)s   %s %s(   s   selfs	   currGroups   getAttributes   trs   xs   ys   ts   setAttribute(   s   selfs   xs   ys   trs   t(    (    s   ./renderSVG.pys	   translate6  s
    c         C   sP   d GHd  S|  i d i d  } d | | f } |  i i d d | | f  d  S(   Ns   !!! begin SVGCanvas.scaleis	   transforms   scale(%f, %f)s   %s %s(	   s   selfs   groupss   getAttributes   trs   xs   ys   ts	   currGroups   setAttribute(   s   selfs   xs   ys   trs   t(    (    s   ./renderSVG.pys   scale@  s
    c         C   s   |  i d | | f |  _ d  S(   Ns   M %f %f (   s   selfs   paths   xs   y(   s   selfs   xs   y(    (    s   ./renderSVG.pys   moveToL  s    c         C   s   |  i d | | f |  _ d  S(   Ns   L %f %f (   s   selfs   paths   xs   y(   s   selfs   xs   y(    (    s   ./renderSVG.pys   lineToP  s    c         C   s*   |  i d | | | | | | f |  _ d  S(   Ns   C %f %f %f %f %f %f (   s   selfs   paths   x1s   y1s   x2s   y2s   x3s   y3(   s   selfs   x1s   y1s   x2s   y2s   x3s   y3(    (    s   ./renderSVG.pys   curveToT  s    c         C   s   |  i d |  _ d  S(   Ns   Z (   s   selfs   path(   s   self(    (    s   ./renderSVG.pys	   closePathX  s    c         C   s   d  S(   N(    (   s   self(    (    s   ./renderSVG.pys	   saveState[  s    c         C   s   d  S(   N(    (   s   self(    (    s   ./renderSVG.pys   restoreState^  s    (,   s   __name__s
   __module__s   __init__s   Nones   saves   NOTUSED_stringWidths   _formatStyles   _escapes   _genArcCodes   _fillAndStrokes
   setLineCaps   setLineJoins   setDashs   setStrokeColors   setColors   setFillColors   setLineWidths   setFonts   rects	   roundRects
   drawStrings   drawCentredStrings   drawRightStrings   comments	   drawImages   lines   ellipses   circles	   drawCurves   drawArcs   polygons   liness   polyLines
   startGroups   endGroups	   transforms	   translates   scales   moveTos   lineTos   curveTos	   closePaths	   saveStates   restoreState(    (    (    s   ./renderSVG.pys	   SVGCanvasj   sR   0					
		
							"					
						s   _SVGRendererc           B   s   t  Z d  Z d   Z d   Z h  d d <d d <d d <d	 d
 <d d <d d <d d <Z d   Z d   Z d   Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d   Z d   Z RS(   s%   This draws onto an SVG document.
    c         C   s   t    |  _ d |  _ d  S(   Ni    (   s   StateTrackers   selfs   _trackers   verbose(   s   self(    (    s   ./renderSVG.pys   __init__e  s    c         C   s@  |  i o	 d GHn |  i i d |  |  i i } t | t  o | i	 o n t
 |  } |  i i |  |  i | h   |  i |  |  i i   } t | t  o | i	 o n |  i i d |  | |  i _ xK | i   D]= \ } } |  i i |  o t |  i |  i | |  q q W|  i o	 d GHn d S(   sG   This is the recursive method called for each node in the tree.
        s   ### begin _SVGRenderer.drawNodes   begin node %ss   end node %ss   ### end _SVGRenderer.drawNodeN(   s   selfs   verboses   _canvass   comments   nodes   _colors   colors
   isinstances   Paths
   isClipPaths   getStateDeltas   deltass   _trackers   pushs   applyStateChangess   drawNodeDispatchers   pops   rDeltass   itemss   ks   vs	   _restoress   has_keys   setattr(   s   selfs   nodes   deltass   colors   rDeltass   vs   k(    (    s   ./renderSVG.pys   drawNodei  s,     
 	 "
 s   strokeColors   _strokeColors   strokeWidths
   _lineWidths   strokeLineCaps   _lineCaps   strokeLineJoins	   _lineJoins	   fillColors
   _fillColors   fontNames   _fonts   fontSizes	   _fontSizec         C   s   |  i o	 d GHn |  i i   } |  i i   \ } } } } }	 } xG | i   D]9 }
 t |
 t  o |
 i   } n |
 } |  i |  qP W|  i i | | | | |	 |  |  i i |  |  i o	 d GHn d  S(   Ns    ### begin _SVGRenderer.drawGroups   ### end _SVGRenderer.drawGroup(   s   selfs   verboses   _canvass
   startGroups	   currGroups   _trackers   getCTMs   as   bs   cs   ds   es   fs   groups   getContentss	   childNodes
   isinstances   UserNodes   provideNodes   node2s   drawNodes	   transforms   endGroup(   s   selfs   groups   as   cs   bs   ds   fs	   currGroups   node2s   es	   childNode(    (    s   ./renderSVG.pys	   drawGroup  s    
 	! 
 c         C   s   | i | i j o
 d j n o7 |  i i  | i | i | i | i | i | i  n@ |  i i	 | i | i | i | i | i | i | i | i  d  S(   Ni    (
   s   rects   rxs   rys   selfs   _canvass   xs   ys   widths   heights	   roundRect(   s   selfs   rect(    (    s   ./renderSVG.pys   drawRect  s    $"c   
      C   s   |  i i o |  i i   } | d | i | i | i	 f \ } } } } | d d g j o} | d | d f \ }	 } t | |	 |  } | d j o | | } q | d j o | | d } q t d	 t |   n |  i i | | |  n d  S(
   Ns
   textAnchors   starts	   inheriteds   fontNames   fontSizes   ends   middlei   s   bad value for text_anchor (   s   selfs   _canvass
   _fillColors   _trackers   getStates   Ss	   stringObjs   xs   ys   texts   text_anchors   fonts   fontSizes   stringWidths   textLens
   ValueErrors   strs
   drawString(
   s   selfs	   stringObjs   textLens   text_anchors   texts   Ss   fontSizes   ys   xs   font(    (    s   ./renderSVG.pys
   drawString  s    +c         C   s:   |  i i o) |  i i | i | i | i | i  n d  S(   N(   s   selfs   _canvass   _strokeColors   lines   x1s   y1s   x2s   y2(   s   selfs   line(    (    s   ./renderSVG.pys   drawLine  s    c         C   s#   |  i i | i | i | i  d  S(   N(   s   selfs   _canvass   circles   cxs   cys   r(   s   selfs   circle(    (    s   ./renderSVG.pys
   drawCircle  s    c      	   C   s   | i | i | i | i | i f \ } }	 } } } | i p | i } | | |	 | f \ } }
 | | |	 | f \ } } | | } |  i i | |
 | | | | d d d  S(   Ns
   fromcenteri   (   s   wedges   centerxs   centerys   radiuss   startangledegreess   endangledegreess   yradiuss   x1s   y1s   x2s   y2s   extents   selfs   _canvass   drawArc(   s   selfs   wedges   y2s   endangledegreess   extents   yradiuss   x2s   radiuss   centerxs   centerys   y1s   startangledegreess   x1(    (    s   ./renderSVG.pys	   drawWedge  s    3
c         C   s.   |  i i o |  i i t | i   n d  S(   N(   s   selfs   _canvass   _strokeColors   polyLines   _pointsFromLists   ps   points(   s   selfs   p(    (    s   ./renderSVG.pys   drawPolyLine  s    c         C   s]   | i | i } | i | i } | i | i } | i | i } |  i
 i  | | | |  d  S(   N(   s   ellipses   cxs   rxs   x1s   x2s   cys   rys   y1s   y2s   selfs   _canvas(   s   selfs   ellipses   y2s   y1s   x2s   x1(    (    s   ./renderSVG.pys   drawEllipse  s
    c         C   s#   |  i i t | i  d d d  S(   Ns   closedi   (   s   selfs   _canvass   polygons   _pointsFromLists   ps   points(   s   selfs   p(    (    s   ./renderSVG.pys   drawPolygon  s    c         C   sr   d k  l } |  i } | i | i | i | i f } | | |  } | o t | _ n | i g  d | i d  S(   N(   s   _renderPaths   clip(   s   reportlab.graphics.shapess   _renderPaths   selfs   _canvass   cs   moveTos   lineTos   curveTos	   closePaths	   drawFuncss   paths   isCloseds   Nones
   _fillColors   _fillAndStrokes
   isClipPath(   s   selfs   paths   cs   _renderPaths	   drawFuncss   isClosed(    (    s   ./renderSVG.pys   drawPath  s    	c         C   sj  xc| i   D]U\ } } | d j o q | d j o |  i i |  q | d j o |  i i |  q | d j o |  i i |  q | d j o |  i i	 |  q | d j o, | o |  i i
 |  qb|  i i
   q | d j o |  i i |  q | d d	 g j oG | i d	 |  i i  } | i d |  i i  } |  i i | |  q q Wd
 S(   s\   This takes a set of states, and outputs the operators
        needed to set those propertiess	   transforms   strokeColors   strokeWidths   strokeLineCaps   strokeLineJoins   strokeDashArrays	   fillColors   fontSizes   fontNameN(   s   deltas   itemss   keys   values   selfs   _canvass   setStrokeColors   setLineWidths
   setLineCaps   setLineJoins   setDashs   setFillColors   gets   _fonts   fontnames	   _fontSizes   fontsizes   setFont(   s   selfs   deltas   newStates   fontnames   values   fontsizes   key(    (    s   ./renderSVG.pys   applyStateChanges  s.      (   s   __name__s
   __module__s   __doc__s   __init__s   drawNodes	   _restoress	   drawGroups   drawRects
   drawStrings   drawLines
   drawCircles	   drawWedges   drawPolyLines   drawEllipses   drawPolygons   drawPaths   applyStateChanges(    (    (    s   ./renderSVG.pys   _SVGRenderera  s    		 E						
					s   svgoutc   	      C   s   t  i i |   o t  i |   n d k l } g  } xg t |  D]Y } | d d !d j o? t
 d | d  } t
 d | d  } | i | | f  qE qE Wd } x@ | D]8 \ } } |  t  i d | } t | |  | d	 } q Wd  S(
   N(   s
   testshapesi    i
   s
   getDrawings   testshapes.s   ()s   .__doc__s   renderSVG_%d.svgi   (   s   oss   paths   isdirs   outdirs   mkdirs   reportlab.graphicss
   testshapess   drawingss   dirs   funcnames   evals   drawings	   docstrings   appends   is   ds   seps   filenames
   drawToFile(	   s   outdirs
   testshapess   ds   is	   docstrings   funcnames   drawingss   filenames   drawing(    (    s   ./renderSVG.pys   test0  s       c          C   s'   d k  l }  |    } t | d  d  S(   N(   s   getDrawing01s   svgout/test.svg(   s   reportlab.graphics.testshapess   getDrawing01s   ds
   drawToFile(   s   getDrawing01s   d(    (    s   ./renderSVG.pys   test1)  s    	c          C   sV   d k  l } d k l } |   }  | |  i |  i  } | i |   t	 | d  d  S(   N(   s   RL_CorpLogo(   s   Drawings   svgout/corplogo.svg(
   s   reportlab.lib.corps   RL_CorpLogos   reportlab.graphics.shapess   Drawings   rls   widths   heights   ds   adds
   drawToFile(   s   rls   RL_CorpLogos   Drawings   d(    (    s   ./renderSVG.pys   test2/  s    	s   __main__(/   s   __doc__s   maths   strings   typess   syss   oss
   StringTypes   operators   getitems   reportlab.pdfbase.pdfmetricss   stringWidths   reportlab.lib.utilss   fp_strs   reportlab.lib.colorss   blacks   reportlab.graphics.renderbases   StateTrackers   getStateDeltas   Renderers   renderScaledDrawings   reportlab.graphics.shapess   STATE_DEFAULTSs   Paths   UserNodes	   reportlabs	   rl_configs   getStringIOs   xml.doms   getDOMImplementations   sins   coss   pis   LINE_STYLESs   TEXT_STYLESs   showBoundarys   drawToStrings
   drawToFiles   draws   _pointsFromLists   Nones   transformNodes	   SVGCanvass   _SVGRenderers   test0s   test1s   test2s   __name__(#   s   test1s   test0s   test2s   getStateDeltas   transformNodes   drawToStrings   fp_strs
   StringTypes   getStringIOs   _pointsFromLists	   rl_configs   blacks   typess   Paths   pis   sins   maths   TEXT_STYLESs   draws   strings   renderScaledDrawings   UserNodes   _SVGRenderers   syss   getDOMImplementations   STATE_DEFAULTSs   coss   StateTrackers   LINE_STYLESs
   drawToFiles   stringWidths   Renderers   getitems   oss	   SVGCanvas(    (    s   ./renderSVG.pys   ?   s@   -				" 		
