o
    µ+ke:  ã                   @   sf   d dl Z d dlZddlmZ G dd„ dƒZdd„ Zddd	„ZG d
d„ dƒZdd„ Zdej	fdd„Z
dS )é    Né   )Úis_terminalc                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
TextPeckerc                 C   s   || _ d| _d S )Nr   ©ÚstrÚi)ÚselfÚs© r
   ú0usr/lib/python3.10/site-packages/borg/nanorst.pyÚ__init__   s   
zTextPecker.__init__c                 C   s$   |  j |7  _ | j| j | | j … S ©N)r   r   ©r   Únr
   r
   r   Úread   s   zTextPecker.readc                 C   s<   |dkr| j | j| j| … S | j | j| d | jd … S )Nr   r   r   r   r
   r
   r   Úpeek   s   zTextPecker.peekc                 C   s\   d}| j }|t| jƒk r,| j| dkr,|| j| 7 }|d7 }|t| jƒk r,| j| dks|S )NÚ Ú
r   )r   Úlenr   )r   Úoutr   r
   r
   r   Úpeekline   s   þzTextPecker.peeklinec                 C   s   |   ¡ }|  jt|ƒ7  _|S r   )r   r   r   )r   r   r
   r
   r   Úreadline   s   zTextPecker.readlineN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r
   r
   r
   r   r      s    r   c                 C   s†   | dkr|dkr|dd|ƒ |  d¡ |dd|ƒ d S |dd|ƒ |  |  ¡ ¡ |  d¡ |dd|ƒ |rA|  |¡ |  d¡ d S d S )NÚ	containerZexperimentalÚtextú**z++ Experimental ++ú:
r   )ÚwriteÚtitle)Ú	directiveÚ	argumentsr   Ú
state_hookr
   r
   r   Úprocess_directive$   s   


þr$   c                 C   sÂ  |pdd„ }|p	i }d}d}t | ƒ} t ¡ }d}	 |  d¡}|s"n°|  d¡}|dkr<|dkr8|  d¡|v r8q|  d	¡dkrõ||v rP||krP||||ƒ |}q||  krZd
krjn n||d|ƒ d}|  d¡ q||  krtdkr„n n||d|ƒ d}|  d¡ q|  d	¡ ¡ r×|dkr×|  d¡dkr×|  d¡ d}		 |  d¡}|dkr­|  d¡ n|dkr·|  d¡ q|	|  d¡7 }	qžz	| ||	 ¡ W n tyÕ   td|	 ƒ‚w q|dkrõ|  d¡dkrõ|  d¡ ||d|ƒ d}| d¡ q|  d¡dv r<||  kr	dkr<n n1|  d¡ |  	¡  
d¡\}
}}|  d¡ |s2|
dkr*d}n|
dkr1d}qt|
| ¡ ||ƒ q||v rY||krY||d|ƒ d}|dkrX| d¡ q|dkr„||  krjdkr„n n||d|ƒ d}|  d¡ |dkrƒ| d¡ q|dkr¥||  kr•d
kr¥n n||d|ƒ d}|  d¡ q|dkrÌ||  kr¶dkrÌn n|  d¡dd … dkrÌ||d|ƒ d}| |¡ q|dksÝJ d!| ƒ‚| ¡ S )"zÜ
    Convert rST to a more human text form.

    This is a very loose conversion. No advanced rST features are supported.
    The generated output directly depends on the input (e.g. indentation of
    admonitions).
    c                 S   s   d S r   r
   ©Z	old_stateZ	new_stater   r
   r
   r   Ú<lambda>;   s    zrst_to_text.<locals>.<lambda>r   Úreplace)Ú*ú`Tr   ú\éÿÿÿÿr(   r   r)   ú``ú:é   zref:`r   r   um   Undefined reference in Archiver help: %r â€” please add reference substitution to 'rst_plain_text_references'é   r   z
code-blockéþÿÿÿ)z

r   Ú.z::znanorst: inline-fillÚfillznanorst: inline-replacez  z    Nz>Invalid final state %r (This usually indicates unmatched */**))r   ÚioÚStringIOr   r   Úisspacer   ÚKeyErrorÚ
ValueErrorr   Ú	partitionr$   ÚstripÚgetvalue)r   r#   Ú
referencesÚstateZinline_moder   Zinline_singleÚcharÚnextÚrefr!   Zis_directiver"   r
   r
   r   Úrst_to_text3   s¼   




$



ø	ÿÿ

,





&


&
>
¦\r@   c                   @   sJ   e Zd Zddd„Zedd„ ƒZdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dS )ÚRstToTextLazyNc                 C   s   || _ || _|| _d | _d S r   )r   r#   r;   Ú_rst)r   r   r#   r;   r
   r
   r   r   ¥   s   
zRstToTextLazy.__init__c                 C   s$   | j d u rt| j| j| jƒ| _ | j S r   )rB   r@   r   r#   r;   ©r   r
   r
   r   Úrst«   s   
zRstToTextLazy.rstc                 C   s   t | j|ƒS r   )ÚgetattrrD   ©r   Úitemr
   r
   r   Ú__getattr__±   s   zRstToTextLazy.__getattr__c                 C   s   | j S r   ©rD   rC   r
   r
   r   Ú__str__´   s   zRstToTextLazy.__str__c                 C   s
   | j | S r   rI   )r   Úotherr
   r
   r   Ú__add__·   ó   
zRstToTextLazy.__add__c                 C   s
   t | jƒS r   )ÚiterrD   rC   r
   r
   r   Ú__iter__º   rM   zRstToTextLazy.__iter__c                 C   s
   || j v S r   rI   rF   r
   r
   r   Ú__contains__½   rM   zRstToTextLazy.__contains__©NN)r   r   r   r   ÚpropertyrD   rH   rJ   rL   rO   rP   r
   r
   r
   r   rA   ¤   s    

rA   c                 C   sZ   | dkr|dv r|  d¡ | dkr|dkr|  d¡ | dv r)|dkr+|  d¡ d S d S d S )Nr   )r(   r)   r,   z[4mr   z[1m)r(   r)   r,   r   z[0m)r   r%   r
   r
   r   Úansi_escapesÁ   s   

ÿrS   c                 C   s   t |ƒrt}nd}t| ||ƒS )z·
    Convert *rst* to a lazy string.

    If *destination* is a file-like object connected to a terminal,
    enrich text with suitable ANSI escapes. Otherwise return plain text.
    N)r   rS   rA   )rD   r;   ZdestinationZrst_state_hookr
   r
   r   Úrst_to_terminalÊ   s   rT   rQ   )r3   ÚsysÚhelpersr   r   r$   r@   rA   rS   ÚstdoutrT   r
   r
   r
   r   Ú<module>   s    
q	