ó
ÓnäZc           @   sJ   d  Z  d d l Z d d l Z d „  Z d e f d „  ƒ  YZ d „  Z d S(   sÁ   Python module for generating .ninja files.

Note that this is emphatically not a required piece of Ninja; it's
just a helpful utility for build-file-generation systems that already
use Python.
iÿÿÿÿNc         C   s(   |  j  d d ƒ j  d d ƒ j  d d ƒ S(   Ns   $ s   $$ t    t   :s   $:(   t   replace(   t   word(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   escape_path   s    t   Writerc        	   B   sª   e  Z d  d „ Z d „  Z d „  Z d d „ Z d „  Z d d e d e d d d d „ Z	 d d d d d „ Z
 d	 „  Z d
 „  Z d „  Z d „  Z d d „ Z d „  Z RS(   iN   c         C   s   | |  _  | |  _ d  S(   N(   t   outputt   width(   t   selfR   R   (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   __init__   s    	c         C   s   |  j  j d ƒ d  S(   Ns   
(   R   t   write(   R   (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   newline   s    c         C   s@   x9 t  j | |  j d ƒ D] } |  j j d | d ƒ q Wd  S(   Ni   s   # s   
(   t   textwrapt   wrapR   R   R
   (   R   t   textt   line(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   comment   s     i    c         C   sX   | d  k r d  St | t ƒ r: d j t d  | ƒ ƒ } n  |  j d | | f | ƒ d  S(   NR    s   %s = %s(   t   Nonet
   isinstancet   listt   joint   filtert   _line(   R   t   keyt   valuet   indent(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   variable   s
    c         C   s+   |  j  d | ƒ |  j d | d d ƒd  S(   Ns   pool %st   depthR   i   (   R   R   (   R   t   nameR   (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   pool%   s    c         C   s#  |  j  d | ƒ |  j d | d d ƒ| rF |  j d | d d ƒn  | re |  j d | d d ƒn  | r„ |  j d d d d ƒn  | r£ |  j d	 | d d ƒn  | rÂ |  j d
 d d d ƒn  | rá |  j d | d d ƒn  |	 r |  j d |	 d d ƒn  |
 r|  j d |
 d d ƒn  d  S(   Ns   rule %st   commandR   i   t   descriptiont   depfilet	   generatort   1R   t   restatt   rspfilet   rspfile_contentt   deps(   R   R   (   R   R   R   R   R    R!   R   R#   R$   R%   R&   (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   rule)   s$    c         C   sY  |  j  | ƒ } |  j  | ƒ } t t t | ƒ ƒ } t t t | ƒ ƒ } | r„ t t |  j  | ƒ ƒ } | j d ƒ | j | ƒ n  | r¿ t t |  j  | ƒ ƒ } | j d ƒ | j | ƒ n  |  j d d j | ƒ d j | g | ƒ f ƒ | rUt | t	 ƒ rt
 | j ƒ  ƒ }	 n t
 | ƒ }	 x- |	 D]" \ }
 } |  j |
 | d d ƒq,Wn  | S(   Nt   |s   ||s   build %s: %sR    R   i   (   t   _as_listR   t   mapR   t   appendt   extendR   R   R   t   dictt   itert   itemsR   (   R   t   outputsR'   t   inputst   implicitt
   order_onlyt	   variablest
   all_inputst   out_outputst   iteratorR   t   val(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   build?   s*    c         C   s   |  j  d | ƒ d  S(   Ns
   include %s(   R   (   R   t   path(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   include]   s    c         C   s   |  j  d | ƒ d  S(   Ns   subninja %s(   R   (   R   R:   (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   subninja`   s    c         C   s'   |  j  d d j |  j | ƒ ƒ ƒ d  S(   Ns
   default %sR    (   R   R   R)   (   R   t   paths(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   defaultc   s    c         C   sK   d } | d } x4 | d k rF | | d k rF | d 7} | d 8} q W| S(   s<   Returns the number of '$' characters right in front of s[i].i    i   t   $(    (   R   t   st   it   dollar_countt   dollar_index(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   _count_dollars_before_indexf   s    

c         C   sp  d | } xGt  | ƒ t  | ƒ |  j k rS|  j t  | ƒ t  d ƒ } | } xK t rœ | j d d | ƒ } | d k  s• |  j | | ƒ d d k rR PqR qR W| d k  r| d } xO t r| j d | d ƒ } | d k  sú |  j | | ƒ d d k r¶ Pq¶ q¶ Wn  | d k  rPn  |  j j | | d | !d ƒ | | d } d | d } q W|  j j | | d ƒ d	 S(
   s3   Write 'text' word-wrapped at self.width characters.s     s    $R    i    i   i   s    $
s   
N(   t   lenR   t   Truet   rfindRD   t   findR   R
   (   R   R   R   t   leading_spacet   available_spacet   space(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyR   o   s,    
"	
	c         C   s*   | d  k r g  St | t ƒ r# | S| g S(   N(   R   R   R   (   R   t   input(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyR)   “   s
    N(   t   __name__t
   __module__R	   R   R   R   R   R   t   FalseR'   R9   R;   R<   R>   RD   R   R)   (    (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyR      s    									$c         C   s(   d |  k s t  d ƒ ‚ |  j d d ƒ S(   sb   Escape a string such that it can be embedded into a Ninja file without
    further interpretation.s   
s$   Ninja syntax does not allow newlinesR?   s   $$(   t   AssertionErrorR   (   t   string(    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   escape›   s    (   t   __doc__R   t   reR   t   objectR   RR   (    (    (    s4   /usr/lib/python2.7/dist-packages/gyp/ninja_syntax.pyt   <module>
   s
   	‰