;ň
¸0sDc           @   sĆ  d  Z  d k l Z d k l Z l Z l Z l Z l Z l	 Z	 d k
 l Z l Z d k l Z l Z l Z l Z l Z l Z l Z d k l Z e e d  Z d   Z d e f d	     YZ d
 e f d     YZ d e f d     YZ d   Z d   Z d   Z d e e f d     YZ  e! d j o d k" l# Z# d k l Z d Z$ e d d  Z% e% i& e  d d d d d d d f d e d d d d  d! d" d# d$   e% i' d% d& g d' d( d) d*  n d+ S(,   s4    $Id: grids.py 2385 2004-06-17 15:26:05Z rgbecker $ (   s   colors(   s   isNumbers   isColorOrNones	   isBooleans   isListOfNumberss   OneOfs   isListOfColors(   s   AttrMaps   AttrMapValue(   s   Drawings   Groups   Lines   Rects	   LineShapes
   definePaths   EmptyClipPath(   s   Widgetc         C   sÂ   | t j o |  d } d }  n | t j o
 d } n g  } | | d } xk n oc |  t |  | } | d j o
 | | j o Pn  | d j  o
 | | j o Pn | i |  qV W| Sd S(   s6   A range function, that does accept float increments...f0.0f1.0f0.0001i   i    N(   s   ends   Nones   starts   incs   Ls   lens   nexts   append(   s   starts   ends   incs   Ls   next(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   frange   s"     


 c         C   sL   g  } x; t t |  d    D]# } | i |  | d |  |  q W| Sd S(   s}   Returns a list of distances between adjacent numbers in some input list.

    E.g. [1, 1, 2, 3, 5, 7] -> [0, 1, 1, 2, 2]
    i˙˙˙˙i   N(   s   ds   ranges   lens   lists   is   append(   s   lists   is   d(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   makeDistancesList#   s      !s   Gridc        $   B   s  t  Z d  Z e d e e d d d e e d d d e e d d d e e d d	 d
 e e d d f  d d d e e d d f  d d d e e d d f  d d d e e d d d e e d d d e e d d d e e d d d e e	 d d d e e	 d d d  e e d d! d" e e	 d d# d$ e e	 d d%  Z
 d&   Z d'   Z d(   Z d d)  Z d*   Z d+   Z d,   Z RS(-   s  This makes a rectangular grid of equidistant stripes.

    The grid contains an outer border rectangle, and stripes
    inside which can be drawn with lines and/or as solid tiles.
    The drawing order is: outer rectangle, then lines and tiles.

    The stripes' width is indicated as 'delta'. The sequence of
    stripes can have an offset named 'delta0'. Both values need
    to be positive!
    s   xs   descs!   The grid's lower-left x position.s   ys!   The grid's lower-left y position.s   widths   The grid's width.s   heights   The grid's height.s   orientations   verticals
   horizontals1   Determines if stripes are vertical or horizontal.s   useLinesi    i   s+   Determines if stripes are drawn with lines.s   useRectss6   Determines if stripes are drawn with solid rectangles.s   deltas+   Determines the width/height of the stripes.s   delta0s3   Determines the stripes initial width/height offset.s
   deltaStepss%   List of deltas to be used cyclically.s   stripeColorss:   Colors applied cyclically in the right or upper direction.s	   fillColors&   Background color for entire rectangle.s   strokeColors   Color used for lines.s   strokeWidths   Width used for lines.s   rectStrokeColors   Color for outer rect stroke.s   rectStrokeWidths   Width for outer rect stroke.c         C   s   d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ d |  _	 g  |  _
 t i |  _ t i t i t i g |  _ t i |  _ d |  _ d  S(   Ni    id   s   verticali   i   i   (   s   selfs   xs   ys   widths   heights   orientations   useLiness   useRectss   deltas   delta0s
   deltaStepss   colorss   whites	   fillColors   reds   greens   blues   stripeColorss   blacks   strokeColors   strokeWidth(   s   self(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   __init__Y   s    										c         C   s-   t  d d  } t   } | i |  | Sd  S(   Nid   (   s   Drawings   Ds   Grids   gs   add(   s   selfs   Ds   g(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   demoj   s    	c         C   s   t  |  d |  i  } t  |  d |  i  } |  i p | o | oG t |  i |  i |  i |  i	  } |  i | _ | | _ | | _ | Sn t Sd  S(   Ns   rectStrokeColors   rectStrokeWidth(   s   getattrs   selfs   strokeColors   strokeWidths	   fillColors   Rects   xs   ys   widths   heights   rects   None(   s   selfs   strokeWidths   rects   strokeColor(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   makeOuterRectr   s    !		c         C   s  |  i |  i f \ } } | o
 | } n | } |  i o} | |  i	 g } d } x n oX | d | | j o | d =Pn | i | d |  i | t |  i   | d } qY Wn! t | |  i	 | | |  i  } | i | |  |  i	 d j o | i d |  n | Sd S(   s1   Returns a list of positions where to place lines.i    i   i˙˙˙˙N(   s   selfs   widths   heights   ws   hs   isXs   lengths
   deltaStepss   starts   delta0s   rs   is   appends   lens   franges   deltas   insert(   s   selfs   starts   isXs   is   hs   lengths   rs   w(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   makeLinePosList~   s(     

 ) c         C   s?  t    } |  i |  i f \ } } |  i d j o|  i d j oq |  i	 |  i
 d d } x× | D]J } t | |  i | |  i |  } |  i | _ |  i | _ | i |  q` Wq7|  i d j oq |  i	 |  i d d } xV | D]J } t |  i
 | |  i
 | |  } |  i | _ |  i | _ | i |  qá Wq7n | Sd  S(   Ni   s   verticals   isXs
   horizontali    (   s   Groups   groups   selfs   widths   heights   ws   hs   useLiness   orientations   makeLinePosLists   xs   rs   Lines   ys   lines   strokeColors   strokeWidths   add(   s   selfs   hs   rs   ws   xs   ys   groups   line(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   makeInnerLines   s(    	  c         C   sx  t    }
 |  i |  i f \ } } |  i d j o?|  i } |  i
 d j o |  i |  i d d } n- |  i
 d j o |  i |  i d d } n t |  } d } xÉ t t |   D]ą } |  i
 d j o* | | } t | |  i | | |  } n; |  i
 d j o* | | }	 t |  i |	 | | |  } n | | t |  | _ t | _ |
 i |  | d } qˇ Wn |
 Sd  S(   Ni   s   verticals   isXs
   horizontali    (   s   Groups   groups   selfs   widths   heights   ws   hs   useRectss   stripeColorss   colss   orientations   makeLinePosLists   xs   rs   ys   makeDistancesLists   dists   is   ranges   lens   js   Rects   stripes	   fillColors   Nones   strokeColors   add(   s   selfs   is   hs   js   colss   rs   stripes   ws   xs   ys   groups   dist(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   makeInnerTiles˛   s.    		 
 
 	c         C   sP   t    } | i |  i    | i |  i    | i |  i   d d | Sd  S(   Ns   names
   _gridLines(   s   Groups   groups   adds   selfs   makeOuterRects   makeInnerTiless   makeInnerLines(   s   selfs   group(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   drawÓ   s
    	(   s   __name__s
   __module__s   __doc__s   AttrMaps   AttrMapValues   isNumbers   OneOfs   isListOfNumberss   isListOfColorss   isColorOrNones   _attrMaps   __init__s   demos   makeOuterRects   makeLinePosLists   makeInnerLiness   makeInnerTiless   draw(    (    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   Grid0   sD   
 																						!s
   DoubleGridc           B   s   t  Z d  Z e d e e d d d e e d d d e e d d d e e d d	 d
 e e d d d e e d d  Z d   Z d   Z	 d   Z
 RS(   sF   This combines two ordinary Grid objects orthogonal to each other.
    s   xs   descs!   The grid's lower-left x position.s   ys!   The grid's lower-left y position.s   widths   The grid's width.s   heights   The grid's height.s   grid0s   The first grid component.s   grid1s   The second grid component.c         C   s  d |  _ d |  _ d |  _ d |  _ t   } |  i | _ |  i | _ |  i | _ |  i | _ d | _ d | _ d | _	 d | _
 d | _ g  | _ t i | _ t i t i t i g | _ t i | _ d | _ t   } |  i | _ |  i | _ |  i | _ |  i | _ d | _ d | _ d | _	 d | _
 d | _ g  | _ t i | _ t i t i t i g | _ t i | _ d | _ | |  _ | |  _ d  S(   Ni    id   s   verticali   i   s
   horizontal(   s   selfs   xs   ys   widths   heights   Grids   g0s   orientations   useLiness   useRectss   deltas   delta0s
   deltaStepss   colorss   whites	   fillColors   reds   greens   blues   stripeColorss   blacks   strokeColors   strokeWidths   g1s   grid0s   grid1(   s   selfs   g1s   g0(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   __init__ë   sH    																					c         C   s-   t  d d  } t   } | i |  | Sd  S(   Nid   (   s   Drawings   Ds
   DoubleGrids   gs   add(   s   selfs   Ds   g(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   demo  s    	c         C   sĂ   t    } |  i |  i f \ } } | i d j o | i d j o
 | | f p
 | | f } x! | D] } | i
 | i    qa Wx: | D]2 } | i
 | i    | i
 | i   d d q W| Sd  S(   Ni   i    s   names
   _gridLines(   s   Groups   groups   selfs   grid0s   grid1s   g0s   g1s   useRectss   Gs   gs   adds   makeOuterRects   makeInnerTiless   makeInnerLines(   s   selfs   g1s   Gs   g0s   gs   group(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   draw$  s    	9  (   s   __name__s
   __module__s   __doc__s   AttrMaps   AttrMapValues   isNumbers   Nones   _attrMaps   __init__s   demos   draw(    (    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys
   DoubleGridŢ   s    	2	s
   ShadedRectc           B   s  t  Z d  Z e d e e d d d e e d d d e e d d d e e d d	 d
 e e d d f  d d d e e d d d e e d d d e e d d d e e d d d e e d d d e e d d  Z	 d   Z
 d   Z d   Z d   Z RS(   s  This makes a rectangle with shaded colors between two colors.

    Colors are interpolated linearly between 'fillColorStart'
    and 'fillColorEnd', both of which appear at the margins.
    If 'numShades' is set to one, though, only 'fillColorStart'
    is used.
    s   xs   descs!   The grid's lower-left x position.s   ys!   The grid's lower-left y position.s   widths   The grid's width.s   heights   The grid's height.s   orientations   verticals
   horizontals1   Determines if stripes are vertical or horizontal.s	   numShadess#   The number of interpolating colors.s   fillColorStarts   Start value of the color shade.s   fillColorEnds   End value of the color shade.s   strokeColors   Color used for border line.s   strokeWidths   Width used for lines.s   cylinderModes#   True if shading reverses in middle.c         K   s}   d |  _ d |  _ d |  _ d |  _ d |  _ d |  _ t i |  _	 t i
 |  _ t i
 |  _ d |  _ d |  _ |  i |  d  S(   Ni    id   s   verticali   i   (   s   selfs   xs   ys   widths   heights   orientations	   numShadess   colorss   pinks   fillColorStarts   blacks   fillColorEnds   strokeColors   strokeWidths   cylinderModes   setPropertiess   kw(   s   selfs   kw(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   __init__K  s    								c         C   s-   t  d d  } t   } | i |  | Sd  S(   Nid   (   s   Drawings   Ds
   ShadedRects   gs   add(   s   selfs   Ds   g(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   demoY  s    	c         C   s@  |  i |  i |  i |  i |  i |  i f \ } } } } } } | d j  o
 | d j o; | | } | } |  i d j o | | f \ } } q&n | d j  o
 | d j o; | | } | } |  i d j o | | f \ } } q&nA | d j  o
 | d j  o& | | } | } | | } | } n | | | | | | f Sd S(   s8   Flip rectangle's corners if width or height is negative.i    s   verticals
   horizontalN(   s   selfs   xs   ys   widths   heights   fillColorStarts   fillColorEnds   orientation(   s   selfs   fillColorStarts   heights   widths   ys   xs   fillColorEnd(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   _flipRectCorners`  s$     <
 
 

c         C   se  t    } |  i   \ } } } }	 } } |  i
 }
 |  i o0 |
 d o |
 d }
 n |
 d d d } n t |
  } |  i d j } | o8 |
 d j o | g } qř t | | | | |  } n5 |
 d j o | g } n t | | |	 |	 |  } x| D]ů } | o t | | | | |	  p t | | | |	 |  } |  i od | i |  | j o' t i | | | | | d |  } qĐt i | | | d | | |  } n$ t i | | | d | d |  } | | _ | | _ d | _ | i |  q˙ W|  i o |  i d j oG t | | | |	  } |  i | _ |  i | _ t | _ | i |  n | Sd  S(   Ni   i   s   verticali˙˙˙˙i    (    s   Groups   groups   selfs   _flipRectCornerss   xs   ys   ws   hs   c0s   c1s	   numShadess   cylinderModes   halfNumShadess   floats   nums   orientations   verticals   Vs   franges   vs   Rects   stripes   indexs   colorss   linearlyInterpolatedColors   cols	   fillColors   strokeColors   strokeWidths   adds   rects   None(   s   selfs   nums   groups   verticals   stripes   Vs   c1s   c0s   rects   hs	   numShadess   ws   vs   ys   xs   halfNumShadess   col(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   drawr  sF    		
  :
''#				(   s   __name__s
   __module__s   __doc__s   AttrMaps   AttrMapValues   isNumbers   OneOfs   isColorOrNones	   isBooleans   _attrMaps   __init__s   demos   _flipRectCornerss   draw(    (    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys
   ShadedRect4  s     			c         C   sz   | d j o |  g Sn g  } | d j oG | d } x: t |  D]( } | i t i |  | d | |   qB Wn | Sd S(   s7   Return a range of intermediate colors between c0 and c1i   i    N(
   s   ns   c0s   Cs   lims   ranges   is   appends   colorss   linearlyInterpolatedColors   c1(   s   c0s   c1s   ns   Cs   is   lim(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys
   colorRange  s      
 *c         C   s,   t  t t |    d  |  d d f  Sd S(   s(   compute average point of a set of pointsc         C   s*   |  d | d | |  d | d | f S(   Ni    i   (   s   xs   ys   fn(   s   xs   ys   fn(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   <lambda>Ť  s    i    N(   s   reduces   floats   lens   P(   s   P(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   centroidŠ  s     c         C   s\  d k  l }
 l } l } l } t |   \ } } | d |
 } | |  | |  f \ } } | | | | d  }	 | | | | d  } t |	 |   } | i   | d | d f \ } } t | |   } | i   | d | d f \ } } | | | f \ | _ | _ | | | f \ | _ | _ t d | | | | | | f  } | i |  | Sd S(	   sU  
    given P a sequence P of x,y coordinate pairs and an angle in degrees
    find the centroid of P and the axis at angle theta through it
    find the extreme points of P wrt axis parallel distance and axis
    orthogonal distance. Then compute the least rectangle that will still
    enclose P when rotated by angle.

    The class R
    (   s   pis   coss   sins   tanf180.0c         C   s(   |  \ } } | | | | | | Sd  S(   N(   s   xs   ys   ss   y0s   cs   x0(   s   .0s   ss   cs   x0s   y0s   xs   y(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   parallelAxisDistť  s   c         C   s(   |  \ } } | | | | | | Sd  S(   N(   s   xs   ys   cs   y0s   ss   x0(   s   .0s   ss   cs   x0s   y0s   xs   y(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   orthogonalAxisDist˝  s   i    i˙˙˙˙s	   transformN(   s   maths   pis   coss   sins   tans   centroids   Ps   x0s   y0s   angles   thetas   ss   cs   parallelAxisDists   orthogonalAxisDists   maps   Ls   sorts   a0s   a1s   b0s   b1s   rects   xs   widths   ys   heights   Groups   gs   add(   s   Ps   angles   rects   b0s   b1s   y0s   tans   orthogonalAxisDists   thetas   parallelAxisDists   pis   sins   cs   Ls   a1s   a0s   x0s   coss   gs   s(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   rotatedEnclosingRect­  s$    	 

"s   ShadedPolygonc           B   s   t  Z e d e d e e d d d e e  d e e  d e e d d d	 e e d d
 d e e   Z	 d   Z
 d   Z RS(   Ns   BASEs   angles   descs   Shading angles   fillColorStarts   fillColorEnds	   numShadess#   The number of interpolating colors.s   cylinderModes#   True if shading reverses in middle.s   pointsc         K   sb   d |  _ t i |  _ t i |  _ d |  _ d |  _ d d d d d d g |  _	 t
 i |  |  d  S(   NiZ   i    i2   i˙˙˙˙i   i   (   s   selfs   angles   colorss   reds   fillColorStarts   greens   fillColorEnds   cylinderModes	   numShadess   pointss	   LineShapes   __init__s   kw(   s   selfs   kw(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   __init__Ő  s    			c         C   sF  |  i } t | d  t d t |  d   } t d f | d g t d   | d  d g d t d	 t } d | _	 t
   } | i |  t d
 d d	 t  } x3 d d d d f D] } t | | t |  |   q¸ W| i t | |  i |   | i t  | i   } d | _	 |  i | _ |  i | _ | i |  | Sd  S(   Nc         C   s   | |  | |  d f S(   Ni   (   s   Ps   i(   s   is   P(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   <lambda>ŕ  s    i    i   s   moveToc         C   s   d f |  S(   Ns   lineTo(   s   x(   s   x(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   <lambda>á  s    i   s	   closePaths	   fillColors   strokeColors   strokeWidths   fillColorStarts   fillColorEnds	   numShadess   cylinderMode(   s   selfs   pointss   Ps   maps   xranges   lens
   definePaths   Nones   paths
   isClipPaths   Groups   gs   adds
   ShadedRects   rects   ks   setattrs   getattrs   rotatedEnclosingRects   angles   EmptyClipPaths   copys   strokeColors   strokeWidth(   s   selfs   gs   Ps   paths   ks   rect(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   drawŢ  s&    	'/		 	(   s   __name__s
   __module__s   AttrMaps	   LineShapes   AttrMapValues   isNumbers   isColorOrNones	   isBooleans   isListOfNumberss   _attrMaps   __init__s   draw(    (    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   ShadedPolygonË  s   			s   __main__(   s   blue(   s   Drawingi-   ix   s   pointsi
   i<   in   s   strokeColors   strokeWidthi   s   angleiZ   s	   numShadesi2   s   cylinderModei    s   formatss   gifs   fnRoots   shobjs   outDirs   /tmpN((   s   __version__s   reportlab.libs   colorss   reportlab.lib.validatorss   isNumbers   isColorOrNones	   isBooleans   isListOfNumberss   OneOfs   isListOfColorss   reportlab.lib.attrmaps   AttrMaps   AttrMapValues   reportlab.graphics.shapess   Drawings   Groups   Lines   Rects	   LineShapes
   definePaths   EmptyClipPaths   reportlab.graphics.widgetbases   Widgets   Nones   franges   makeDistancesLists   Grids
   DoubleGrids
   ShadedRects
   colorRanges   centroids   rotatedEnclosingRects   ShadedPolygons   __name__s   reportlab.lib.colorss   blues   angles   Ds   adds   save(   s   OneOfs   Groups   isColorOrNones   isListOfNumberss   colorss   AttrMaps   AttrMapValues   blues   Widgets   franges   angles	   isBooleans
   definePaths   Grids
   DoubleGrids   centroids   Lines   __version__s   Rects   ShadedPolygons	   LineShapes   Ds   isListOfColorss   isNumbers   Drawings   EmptyClipPaths   makeDistancesLists
   ShadedRects   rotatedEnclosingRects
   colorRange(    (    sJ   /home/packages/reportlab/reportlab_2_0/reportlab/graphics/widgets/grids.pys   ?   s*   +1	ŽVi			'F