;ò
½0sDc        
   @   sÍ   d  Z  d d d d d d d d d	 d
 g
 Z d Z d k l Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d f  d „  ƒ  YZ
 d f  d „  ƒ  YZ e a d „  Z d „  Z d „  Z e d j o e ƒ  n d S(   s8    $Id: sequencer.py 2423 2004-08-24 11:36:22Z rgbecker $ i    i   i	   iI   i
   i   i   i‰   iI  i   s   IVXLCDM(   s   lowerc         C   s©   |  d j  p
 |  d j o t d ‚ n d } d } xk |  oc t |  d ƒ \ }  } t | } x3 | o+ t | d ƒ \ } } t | | | } q_ W| d } q6 W| Sd  S(	   Ni    iŸ  s   illegal values    iÿÿÿÿi
   i   i   (	   s   values
   ValueErrors   strs   bases   divmods   indexs   _RN_TEMPLATESs   tmps   _RN_LETTERS(   s   values   tmps   indexs   bases   str(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys	   _format_I   s     
 c         C   s   t  t |  ƒ ƒ Sd  S(   N(   s   lowers	   _format_Is   num(   s   num(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys	   _format_i#   s    c         C   s   t  |  ƒ Sd S(   s   The simplest formatterN(   s   strs   num(   s   num(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _format_123&   s     c         C   s    |  d d } t | d ƒ Sd S(   s   Uppercase.  Wraps around at 26.i   i   iA   N(   s   nums   ns   chr(   s   nums   n(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _format_ABC*   s     c         C   s    |  d d } t | d ƒ Sd S(   s   Lowercase.  Wraps around at 26.i   i   ia   N(   s   nums   ns   chr(   s   nums   n(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _format_abc/   s     s   _Counterc           B   sY   t  Z d  Z d „  Z d „  Z e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z RS(	   s  Private class used by Sequencer.  Each counter
    knows its format, and the IDs of anything it
    resets, as well as its value. Starts at zero
    and increments just before you get the new value,
    so that it is still 'Chapter 5' and not 'Chapter 6'
    when you print 'Figure 5.1'c         C   s+   d |  _ |  i |  _ t |  _ g  |  _ d  S(   Ni    (   s   selfs   _bases   _values   _format_123s
   _formatters   _resets(   s   self(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   __init__=   s    		c         C   s   | |  _ d  S(   N(   s
   formatFuncs   selfs
   _formatter(   s   selfs
   formatFunc(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   setFormatterC   s    c         C   s$   | o | |  _ n |  i |  _ d  S(   N(   s   values   selfs   _values   _base(   s   selfs   value(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   resetF   s    c         C   s?   |  i d |  _ |  i } x |  i D] } | i ƒ  q# W| Sd  S(   Ni   (   s   selfs   _values   vs   _resetss   counters   reset(   s   selfs   counters   v(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   nextL   s    	
 c         C   s   |  i Sd  S(   N(   s   selfs   _value(   s   self(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _thisS   s    c         C   s   |  i |  i ƒ  ƒ Sd S(   s   Returns next value formattedN(   s   selfs
   _formatters   next(   s   self(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   nextfV   s     c         C   s   |  i |  i ƒ  ƒ Sd  S(   N(   s   selfs
   _formatters   _this(   s   self(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   thisfZ   s    c         C   s)   | |  i j o |  i i | ƒ n d  S(   N(   s   otherCounters   selfs   _resetss   append(   s   selfs   otherCounter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   chain]   s    (   s   __name__s
   __module__s   __doc__s   __init__s   setFormatters   Nones   resets   nexts   _thiss   nextfs   thisfs   chain(    (    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _Counter5   s    						s	   Sequencerc           B   s¤   t  Z d  Z d „  Z e d „ Z e d „ Z e d „ Z e d „ Z e d „ Z	 e d „ Z
 d „  Z d	 „  Z e d
 d „ Z d „  Z d „  Z d „  Z d „  Z RS(   sh  Something to make it easy to number paragraphs, sections,
    images and anything else.  The features include registering
    new string formats for sequences, and 'chains' whereby
    some counters are reset when their parents.
    It keeps track of a number of
    'counters', which are created on request:
    Usage:
        >>> seq = layout.Sequencer()
        >>> seq.next('Bullets')
        1
        >>> seq.next('Bullets')
        2
        >>> seq.next('Bullets')
        3
        >>> seq.reset('Bullets')
        >>> seq.next('Bullets')
        1
        >>> seq.next('Figures')
        1
        >>>
    c         C   sL   h  |  _ t |  _ h  d t <d t <d t <d t <d t <|  _	 d  S(   Ns   1s   As   as   Is   i(
   s   selfs	   _counterss   Nones   _defaultCounters   _format_123s   _format_ABCs   _format_abcs	   _format_Is	   _format_is   _formatters(   s   self(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   __init__y   s    		c         C   sC   y |  i | SWn- t j
 o! t ƒ  } | |  i | <| Sn Xd S(   s   Creates one if not presentN(   s   selfs	   _counterss   counters   KeyErrors   _Counters   cnt(   s   selfs   counters   cnt(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _getCounter†   s     	c         C   s,   | o |  i } n |  i | ƒ i ƒ  Sd S(   s_   Retrieves counter value but does not increment. For
        new counters, sets base value to 1.N(   s   counters   selfs   _defaultCounters   _getCounters   _this(   s   selfs   counter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   _this   s     c         C   s,   | o |  i } n |  i | ƒ i ƒ  Sd S(   sq   Retrieves the numeric value for the given counter, then
        increments it by one.  New counters start at one.N(   s   counters   selfs   _defaultCounters   _getCounters   next(   s   selfs   counter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   next–   s     c         C   s,   | o |  i } n |  i | ƒ i ƒ  Sd  S(   N(   s   counters   selfs   _defaultCounters   _getCounters   thisf(   s   selfs   counter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   thisf   s    c         C   s,   | o |  i } n |  i | ƒ i ƒ  Sd S(   sq   Retrieves the numeric value for the given counter, then
        increments it by one.  New counters start at one.N(   s   counters   selfs   _defaultCounters   _getCounters   nextf(   s   selfs   counter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   nextf¢   s     c         C   s   | |  _ d S(   s$   Changes the key used for the defaultN(   s   defaults   selfs   _defaultCounter(   s   selfs   default(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   setDefaultCounter©   s     c         C   s   | |  i | <d S(   s§   Registers a new formatting function.  The funtion
        must take a number as argument and return a string;
        fmt is a short menmonic string used to access it.N(   s   funcs   selfs   _formatterss   format(   s   selfs   formats   func(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   registerFormat­   s     c         C   s'   |  i | } |  i | ƒ i | ƒ d S(   sP   Specifies that the given counter should use
        the given format henceforth.N(   s   selfs   _formatterss   formats   funcs   _getCounters   counters   setFormatter(   s   selfs   counters   formats   func(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys	   setFormat³   s     i    c         C   s+   | o |  i } n | |  i | ƒ _ d  S(   N(   s   counters   selfs   _defaultCounters   bases   _getCounters   _value(   s   selfs   counters   base(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   reset¹   s    c         C   s/   |  i | ƒ } |  i | ƒ } | i | ƒ d  S(   N(   s   selfs   _getCounters   parents   ps   childs   cs   chain(   s   selfs   parents   childs   ps   c(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   chain¾   s    c         C   s=   | d d j o | d  } |  i | ƒ Sn |  i | ƒ Sd S(   sr   Allows compact notation to support the format function.
        s['key'] gets current value, s['key+'] increments.iÿÿÿÿs   +N(   s   keys   counters   selfs   nextfs   thisf(   s   selfs   keys   counter(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   __getitem__Ã   s
     
c         C   s   | |  Sd S(   s0   The crowning jewels - formats multi-level lists.N(   s   templates   self(   s   selfs   template(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   formatÌ   s     c         C   s]   |  i i ƒ  } | i ƒ  d GHx8 | D]0 \ } } d | | i ƒ  | i | i	 ƒ  f GHq% Wd S(   s-   Write current state to stdout for diagnosticss   Sequencer dump:s2       %s: value = %d, base = %d, format example = %sN(
   s   selfs	   _counterss   itemss   counterss   sorts   keys   counters   _thiss   _bases   thisf(   s   selfs   counters   keys   counters(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   dumpÐ   s     
 (   s   __name__s
   __module__s   __doc__s   __init__s   Nones   _getCounters   _thiss   nexts   thisfs   nextfs   setDefaultCounters   registerFormats	   setFormats   resets   chains   __getitem__s   formats   dump(    (    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys	   Sequencerb   s    								c           C   s"   t  t j o t ƒ  a  n t  Sd  S(   N(   s
   _sequencers   Nones	   Sequencer(    (    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   getSequencerÝ   s     c         C   s   t  } |  a  | Sd  S(   N(   s
   _sequencers   ss   seq(   s   seqs   s(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   setSequencerã   s     c          C   so  t  ƒ  } d | i ƒ  | i ƒ  | i ƒ  f GHd | i d ƒ | i d ƒ | i d ƒ f GHd | i ƒ  GH| i d ƒ d | i ƒ  | i ƒ  | i ƒ  f GH| i ƒ  d | i ƒ  | i ƒ  | i ƒ  f GHHd GH| i d	 d
 ƒ d | i d	 ƒ | i d	 ƒ | i d	 ƒ f GHd „  } Hd GH| i d | ƒ | i d d ƒ d Gx$ t d d ƒ D] }  | i d ƒ GqNWHd GH| i
 d d ƒ d | i d ƒ GHd | i d ƒ GHd | i d ƒ GHd | i d ƒ GHd | i d ƒ GHd | i d ƒ GHd | i d ƒ GHd | i d ƒ GHHd GHd | d	 GHd | d GHd | d GHd | d	 GHHd GHd GHd | GHd | GHd | GHd  S(   Ns)   Counting using default sequence: %d %d %ds1   Counting Figures: Figure %d, Figure %d, Figure %ds   figures   Back to default again: %ds   list1s   Set default to list1: %d %d %ds#   Set default to None again: %d %d %ds0   Creating Appendix counter with format A, B, C...s   Appendixs   As)       Appendix %s, Appendix %s, Appendix %sc         C   s#   d d d d d f |  d d Sd  S(   Ns   uns   deuxs   troiss   quatres   cinqi   i   (   s   num(   s   num(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   format_frenchù   s    s+   Defining a custom format with french words:s   frenchs
   FrenchLists      i   i   s:   Chaining H1 and H2 - H2 goes back to one when H1 increasess   H1s   H2s       H1 = %ds         H2 = %ds-   GetItem notation - append a plus to increments       seq["Appendix"] = %ss       seq["Appendix+"] = %ss	   Appendix+s8   Finally, string format notation for nested lists.  Cool!s>   The expression ("Figure %(Chapter)s.%(Figure+)s" % seq) gives:s"       Figure %(Chapter)s.%(Figure+)s(   s	   Sequencers   ss   nexts   setDefaultCounters	   setFormats   nextfs   format_frenchs   registerFormats   ranges   is   chain(   s   is   format_frenchs   s(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   testé   sX    	$-$
$-	 		s   __main__N(   s   __version__s   _RN_TEMPLATESs   _RN_LETTERSs   strings   lowers	   _format_Is	   _format_is   _format_123s   _format_ABCs   _format_abcs   _Counters	   Sequencers   Nones
   _sequencers   getSequencers   setSequencers   tests   __name__(   s   _format_ABCs   _format_abcs   lowers	   Sequencers   _Counters   _RN_TEMPLATESs	   _format_Is   _format_123s   tests   setSequencers   getSequencers   _RN_LETTERSs   __version__s	   _format_i(    (    sA   /home/packages/reportlab/reportlab_2_0/reportlab/lib/sequencer.pys   ?   s$    	$					-x 			2