ó
ïO(Oc           @   s;   d  d l  Z  d  d l Z d  d l Z d d d „  ƒ  YZ d S(   iÿÿÿÿNt   ListsHandlerc           B   s}   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d d	 „ Z d
 „  Z d „  Z d „  Z RS(   s&   Handler of Bulleted and Numbered Listsc         C   s   | |  _  d S(   s   Lists Handler bootN(   t   dad(   t   selfR   (    (    s   modules/lists.pyt   __init__   s    c   	      C   sž  |  j  j j ƒ  r= |  j  j j ƒ  \ } } | j ƒ  d } n' d } |  j  j j |  j  j j ƒ  ƒ } |  j | ƒ } | d d	 k rvt	 } x| sž | | k  rrt
 } |  j | ƒ \ } } | sú |  j  j j |  j  j j ƒ  ƒ } |  j  j j | d ƒ PnV |  j | ƒ r| j ƒ  d } n4 | j ƒ  d d } |  j  j j | d ƒ | d 7} |  j  j j | ƒ } | sŒ PqŒ qŒ Wn$| d d k r¤|  j d	 | d d d ƒ nö | d d k rt	 } xÝ | sÏ| | k  r{t
 } |  j | ƒ \ } } |  j | ƒ r| j ƒ  d } nM | j ƒ  d d } | j ƒ  } | j d ƒ |  j  j j | | ƒ | d 8} |  j  j j | ƒ } | s½Pq½q½Wn |  j d	 | d d d ƒ d	 S(
   s   Handler of the ToDo Listi   i    s   [ ] i   i   t   bul2todiÿÿÿÿt   num2todN(   R   t   curr_buffert   get_has_selectiont   get_selection_boundst
   get_offsett   get_iter_at_markt
   get_insertt   get_paragraph_list_infot   Nonet   Truet   Falset   get_paragraph_iterst   insertt   is_list_indented_continuationt   get_iter_at_offsett   list_adjust_aheadt   copyt   forward_charst   delete(	   R   t
   iter_startt   sel_endt
   end_offsett	   list_infot   first_iterationt   new_par_offsett   iter_endt   iter_end_deletion(    (    s   modules/lists.pyt   list_todo_handler"   sR    !!
 
 c   	      C   s²  |  j  j j ƒ  r= |  j  j j ƒ  \ } } | j ƒ  d } n' d } |  j  j j |  j  j j ƒ  ƒ } |  j | ƒ } | d d k rŠt	 } x"| sž | | k  r†t
 } |  j | ƒ \ } } | s|  j  j j |  j  j j ƒ  ƒ } |  j  j j | t j t j ƒ Pn` |  j | ƒ r&| j ƒ  d } n> | j ƒ  d d } |  j  j j | t j t j ƒ | d 7} |  j  j j | ƒ } | sŒ PqŒ qŒ Wn$| d d k ret	 } x| sµ| | k  rat
 } |  j | ƒ \ } } |  j | ƒ rò| j ƒ  d } nM | j ƒ  d d } | j ƒ  } | j d ƒ |  j  j j | | ƒ | d 8} |  j  j j | ƒ } | s£Pq£q£WnI | d d k r“|  j d | d d d ƒ n |  j d | d d d ƒ d S(   s   Handler of the Bulleted Listi   i    i   iÿÿÿÿt   tod2bult   num2bulN(   R   R   R   R   R	   R
   R   R   R   R   R   R   R   t   const   CHAR_LISTBULt
   CHAR_SPACER   R   R   R   R   R   (	   R   R   R   R   R   R   R   R   R   (    (    s   modules/lists.pyt   list_bulleted_handlerV   sR    !!  
 
 c         C   sÞ  |  j  j j ƒ  r= |  j  j j ƒ  \ } } | j ƒ  d } n' d } |  j  j j |  j  j j ƒ  ƒ } |  j | ƒ } | d d	 k r–d } xN| d k s¤ | | k  r’| d 7} |  j	 | ƒ \ } } | s|  j  j j |  j  j j ƒ  ƒ } |  j  j j
 | d ƒ Pnl |  j | ƒ r&| j ƒ  d } nJ d | } | j ƒ  t | ƒ d } |  j  j j
 | | ƒ | t | ƒ 7} |  j  j j | ƒ } | sŒ PqŒ qŒ WnD| d d k rÄ|  j d | d d d ƒ n| d d k rò|  j d | d d d ƒ nè t }	 xß |	 s| | k  rÙt }	 |  j	 | ƒ \ } } d | d } |  j | ƒ rX| j ƒ  d } n_ | j ƒ  t | ƒ d } | j ƒ  }
 |
 j t | ƒ ƒ |  j  j j | |
 ƒ | t | ƒ 8} |  j  j j | ƒ } | sûPqûqûWd	 S(
   s   Handler of the Numbered Listi   i    s   1. s   %s. i   t   bul2numiÿÿÿÿt   tod2numN(   R   R   R   R   R	   R
   R   R   R   R   R   R   t   lenR   R   R   R   R   R   R   (   R   R   R   R   R   t   leading_num_countR   R   t   leading_strR   R   (    (    s   modules/lists.pyt   list_numbered_handlerŠ   sV    !
!
  c         C   sF  | d k r` |  j  j j | ƒ } x) | j ƒ  t j k rL | j ƒ  s$ d Sq$ W| j ƒ  su d Sn |  j  j j d ƒ } | j ƒ  t j k rï | j ƒ  rè | j ƒ  t j k rè | j ƒ  rè | j ƒ  t j k rè |  j | | j	 ƒ  | ƒ qBd SnS| d d !d k rŠt
 j d | j ƒ  ƒ } | s$d S| j ƒ  } x( | j ƒ  rZt
 j d | j ƒ  ƒ rZq3W| j ƒ  d k rqd S|  j | | | | ƒ n¸ | d d !d k rÛ| j ƒ  t j k r¶d S| j ƒ  } |  j | | | | ƒ ng | d d !d	 k r9| j ƒ  t j k rd S| j ƒ  } | j d
 ƒ |  j | | | | ƒ n	 d G| GHd S(   s   Adjust the Following Numberingi    Ni   t   nums   [1-9]s   [0-9]t   .t   bult   todi   s   bad adj_type(   R   R   R   t   get_charR#   t   CHAR_NEWLINEt   forward_charR%   R   R	   t   ret   matchR   t   list_adjust_ahead_write_inR$   t   CHAR_SQ_BR_OPENR   (   R   t   curr_numt   offset_startt   adj_typeR   R5   R   (    (    s   modules/lists.pyR   À   sF      !! '    c         C   s  | j  ƒ  |  j j j | | ƒ | d d k rp | d 7} |  j j j | d | ƒ |  j | | j ƒ  | ƒ n | d d k rµ |  j j j | t j ƒ |  j d	 | j ƒ  | ƒ nK | d d k r÷ |  j j j | d ƒ |  j d	 | j ƒ  | ƒ n	 d G| GHd	 S(
   s!   Write a Replacement of List PointiýÿÿÿR-   i   s   %s.R/   R0   s   [ ]s   bad adj_typeN(
   R3   R   R   R   R   R   R	   R#   R$   R   (   R   R   R   R8   R:   (    (    s   modules/lists.pyR6   à   s    

c         C   sï   | j  ƒ  } | j ƒ  } | t j k r+ d S| t j k rn | j  ƒ  } | j d ƒ rn | j ƒ  d k rn d Sn  t j d | ƒ } | sŠ d S| } x8 | j	 ƒ  rÊ t j d | j ƒ  ƒ rÊ | | j ƒ  7} q“ W| j ƒ  d k rç t
 | ƒ Sd Sd S(	   s2   Returns a Number or None (0 fot the bulleted list)i    i   t   ]iÿÿÿÿs   [1-9]s   [0-9]R.   N(   R   R1   R#   R$   R7   R   R4   R5   R   R3   t   int(   R   t   iter_first_paragraphR   t   chart   iter_tmpR5   t
   number_str(    (    s   modules/lists.pyt   list_get_numberð   s"     ! ' 
c         C   sC  | j  ƒ  t j k r" | j ƒ  n  t } x? | d k ri | j  ƒ  t j k rP Pq+ | j ƒ  s+ t } Pq+ q+ W| s} | j ƒ  n  |  j | ƒ } | d k r« | t | j	 ƒ  g S| j  ƒ  t j
 k r6| j ƒ  r6| j  ƒ  t j
 k r6| j ƒ  r6| j  ƒ  t j
 k r6| j d ƒ |  j | ƒ } | d t | d g Sn  d d d g S(   s“   Returns [Number, Whether multiple line, List Start Iter Offset]
           Number == 0 if bulleted list, >=1 if numbered list or None if not a listi   i    i   N(   R1   R#   R2   t   backward_charR   R   R   R3   RA   R	   R%   t   backward_charsR   (   R   R   t   buffer_startt   numberR   (    (    s   modules/lists.pyR     s*        !!c         C   sO  | r4 |  j  j j ƒ  r4 |  j  j j ƒ  \ } } nƒ | s^ |  j  j j |  j  j j ƒ  ƒ } n | j ƒ  } | j ƒ  } | j ƒ  t j	 k r· | j
 ƒ  s› d S| j ƒ  t j	 k r· d Sn  x? | d k rø | j ƒ  } | t j	 k rå Pqº | j ƒ  sº Pqº qº WxI | d k rD| j ƒ  } | t j	 k r1| j ƒ  Pqü | j
 ƒ  sü Pqü qü W| | f S(   s?   Generates and Returns two iters indicating the paragraph boundsN(   NN(   NN(   R   R   R   R   R
   R   R   R1   R#   R2   RB   R   R3   (   R   t
   force_iterR   R   R>   (    (    s   modules/lists.pyR     s2     $    
 c         C   s   | s
 t  S| j ƒ  } | j ƒ  t j k r/ t  S| j ƒ  sQ | j ƒ  t j k rU t  S| j ƒ  sw | j ƒ  t j k r{ t  St S(   s8   The given iter is the beginning of an indented list item(   R   R   R1   R#   R%   R3   R   (   R   t   iter_inR   (    (    s   modules/lists.pyR   2  s      " " c         C   s•   | j  ƒ  } | j ƒ  rD | j ƒ  t j k r= | j d ƒ qN t Sn
 | j ƒ  | j ƒ  t j t j	 g k r‘ | j ƒ  r‘ | j ƒ  t j
 k r‘ t St S(   s   Check if it is [X] or [ ]i   (   R   RB   R1   R#   R2   R   R   R3   R%   t   CHAR_Xt   CHAR_SQ_BR_CLOSER   (   R   t   square_bracket_open_itert	   text_iter(    (    s   modules/lists.pyt   is_list_todo_beginning;  s    
!c         C   s7  | j  ƒ  | j ƒ  } |  j j j | ƒ j ƒ  t j k rŽ |  j j j | |  j j j | d ƒ ƒ |  j j j	 |  j j j | ƒ t j
 ƒ nQ |  j j j | |  j j j | d ƒ ƒ |  j j j	 |  j j j | ƒ t j ƒ | d 7} |  j j j | ƒ } | sd Sx(| j ƒ  } x, | j  ƒ  s*Pn  | j ƒ  t j k rPqq| j | ƒ rYd S| j ƒ  } |  j j j |  j j j ƒ  | ƒ |  j j j |  j j j ƒ  | ƒ |  j j ƒ  |  j j j | d ƒ } | o)| j ƒ  t j k o)| j  ƒ  o)| j ƒ  t j k o)| j  ƒ  o)| j ƒ  t j k sPqqd S(   s   From [ ] to [X] or vice-versai   i   N(   R3   R	   R   R   R   R1   R#   R%   R   R   RH   R   R2   t   equalt	   move_markR   t   get_selection_boundt   apply_tag_strikethrough(   R   RJ   t   iter_offsetR   R   (    (    s   modules/lists.pyt   todo_list_invert_checked_statusH  s:    
$)+)(
    ""!!N(   t   __name__t
   __module__t   __doc__R   R    R&   R,   R   R6   RA   R   R   R   R   RL   RR   (    (    (    s   modules/lists.pyR       s   		4	4	6	 						(    (   t   gtkR4   R#   R    (    (    (    s   modules/lists.pyt   <module>   s   