o
    p.aM                     @   s8   d Z ddlZddlZdd ZG dd deZdd ZdS )	zPython 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.
    Nc                 C   s   |  dd dd ddS )Nz$ z$$  :z$:replace)word r   2/usr/lib/python3/dist-packages/gyp/ninja_syntax.pyescape_path   s   r	   c                   @   s   e Zd ZdddZdd Zdd Zd d	d
Zdd Z			d!ddZ		d"ddZ	dd Z
dd Zdd Zdd Zd ddZdd ZdS )#WriterN   c                 C   s   || _ || _d S N)outputwidth)selfr   r   r   r   r   __init__   s   
zWriter.__init__c                 C   s   | j d d S )N
)r   write)r   r   r   r   newline   s   zWriter.newlinec                 C   s0   t || jd D ]}| jd| d  q	d S )N   z# r   )textwrapwrapr   r   r   )r   textliner   r   r   comment   s   zWriter.commentr   c                 C   s>   |d u rd S t |trdtd |}| d||f | d S )Nr   z%s = %s)
isinstancelistjoinfilter_line)r   keyvalueindentr   r   r   variable   s
   
zWriter.variablec                 C   s"   |  d|  | jd|dd d S )Nzpool %sdepth   r!   r   r"   )r   namer#   r   r   r   pool%   s   zWriter.poolNFc                 C   s   |  d|  | jd|dd |r| jd|dd |r#| jd|dd |r-| jdddd |r7| jd	|dd |rA| jd
ddd |rK| jd|dd |	rU| jd|	dd |
ra| jd|
dd d S d S )Nzrule %scommandr$   r%   descriptiondepfile	generator1r(   restatrspfilerspfile_contentdepsr&   )r   r'   r)   r*   r+   r,   r(   r.   r/   r0   r1   r   r   r   rule)   s&   zWriter.rulec                 C   s   |  |}|  |d d  }ttt|}ttt|}|r0tt|  |}|d || |rDtt|  |}|d || | dd|d|g| f  |rwt|t	rdt
| }	nt
|}	|	D ]\}
}| j|
|dd qj|S )N|z||zbuild %s: %sr   r$   r%   )_as_listr   mapr	   appendextendr   r   r   dictiteritemsr"   )r   outputsr2   inputsimplicit
order_only	variables
all_inputsout_outputsiteratorr   valr   r   r   build?   s,   





zWriter.buildc                 C      |  d|  d S )Nz
include %sr   r   pathr   r   r   include]      zWriter.includec                 C   rE   )Nzsubninja %srF   rG   r   r   r   subninja`   rJ   zWriter.subninjac                 C   s   |  dd| |  d S )Nz
default %sr   )r   r   r4   )r   pathsr   r   r   defaultc   s   zWriter.defaultc                 C   sH   d}|d }|dkr"|| dkr"|d7 }|d8 }|dkr"|| dks|S )z<Returns the number of '$' characters right in front of s[i].r   r$   $r   )r   sidollar_countdollar_indexr   r   r   _count_dollars_before_indexf   s   z"Writer._count_dollars_before_indexc                 C   s  d| }t |t | | jkr| jt | t d }|}	 |dd|}|dk s2| ||d dkr3nq|dk rU|d }	 |d|d }|dk sS| ||d dkrTnq=|dk rZn'| j||d|  d  ||d d	 }d|d  }t |t | | jks| j|| d
  d	S )z3Write 'text' word-wrapped at self.width characters.z  z $Tr   r   r   r$   z $
Nr   )lenr   rfindrS   findr   r   )r   r   r!   leading_spaceavailable_spacespacer   r   r   r   o   s2   zWriter._linec                 C   sN   |d u rg S t |tr|S zt |trt|W S W |gS  ty&   Y |gS w r   )r   r   r5   	TypeError)r   inputr   r   r   r4      s   


zWriter._as_list)r   )r   )NNFNFNNN)NNNN)__name__
__module____qualname__r   r   r   r"   r(   r2   rD   rI   rK   rM   rS   r   r4   r   r   r   r   r
      s&    




	$r
   c                 C   s   d| vsJ d|  ddS )zbEscape a string such that it can be embedded into a Ninja file without
    further interpretation.r   z$Ninja syntax does not allow newlinesrN   z$$r   )stringr   r   r   escape   s   r`   )__doc__r   rer	   objectr
   r`   r   r   r   r   <module>   s    