U
    Kë]j#  ã                   @   sR   d Z ddd„Zdd„ Zdd„ Zdd	d
„ZeZdd„ Zdd„ Zdd„ Zddd„Z	dS )z'
Miscellany of text-munging functions.
Ú c              
   C   sœ  d}g }t | ƒtkr¢d}|  ¡ D ]~\}}t||d ƒ}t|ƒrtt|ƒrX|dtdƒ … }| |› d|› d|› �¡ q | |› d|› d|t|ƒd	 d… › �¡ q n~t | ƒtksºt | ƒt	krüt | ƒtkrÌd
}nd}| D ]$}t||d ƒ}| | 
¡ d ¡ qÔn$t|fdd„t| ƒ d¡ƒ|dd…< |�s0| |¡ |�rr||d  |d t|ƒd d…  |d< |d |d  |d< d |¡}t|ƒ�r˜t|ƒ�s˜|d }|S )al  
    Expansive string formatting for sequence types.

    C{list.__str__} and C{dict.__str__} use C{repr()} to display their
    elements.  This function also turns these sequence types
    into strings, but uses C{str()} on their elements instead.

    Sequence elements are also displayed on separate lines, and nested
    sequences have nested indentation.
    r   z{}z   NÚ
ú z:
z: é   z()z[]ú,c                 S   s   ||  S ©N© )ÚsÚir   r   ú\c:\users\psant\downloads\hotstarbackend\school\venv\Lib\site-packages\twisted/python/text.pyÚ<lambda>/   ó    zstringyString.<locals>.<lambda>é    é   éÿÿÿÿ)ÚtypeÚdictÚitemsÚstringyStringÚisMultilineÚendsInNewlineÚlenÚappendÚtupleÚlistÚrstripÚmapÚstrÚsplitÚjoin)ÚobjectÚindentationZbracesÚslÚkeyÚvalueÚelementr   r   r   r
   r      s8    .$
(
r   c                 C   s   |   d¡dkS )z=
    Returns C{True} if this string has a newline in it.
    r   r   )Úfind©r   r   r   r
   r   @   s    r   c                 C   s   | t dƒ d… dkS )z;
    Returns C{True} if this string ends in a newline.
    r   N)r   r&   r   r   r
   r   G   s    r   éP   c           	      C   sð   g }|   d¡dkr@|  d¡}|D ]}| t||ƒdg ¡ q |S |  ¡ }d}d}|rì|t|| ƒ }|d }||krº|dkr~n|d }|d|… ||d…  }}| d |¡¡ d}d}qPt|ƒ|ksâ| d |¡¡ |dd…= qP|d }qP|S )a  
    Given a string and a column width, return a list of lines.

    Caveat: I'm use a stupid greedy word-wrapping
    algorythm.  I won't put two spaces at the end
    of a sentence.  I don't do full justification.
    And no, I've never even *heard* of hypenation.
    z

r   r   r   Nr   )r%   r   ÚextendÚ
greedyWrapr   r   r   )	ZinStringÚwidthZoutLinesZ
paragraphsÚparaZinWordsÚcolumnZptr_lineÚlr   r   r
   r)   N   s2    


r)   c                 C   s(   g }| D ]}|s|  ¡ r| |¡ q|S r   )Ústripr   )ÚlinesÚretÚliner   r   r
   ÚremoveLeadingBlanksƒ   s
    r2   c                 C   s4   t |  d¡ƒ}| ¡  t |ƒ}| ¡  d |¡d S )Nr   )r2   r   Úreverser   )r   r/   r   r   r
   ÚremoveLeadingTrailingBlanks‹   s
    r4   c                 C   s¨   g }d}d}|   ¡ D ]Ž}|dkrH|rH|d dkrH|d }|dd… }g }|dkr\| |¡ q|r˜|d |kr˜|dd… }| |¡ | d |¡¡ d}q| |¡ q|S )a=  
    Like a string split, but don't break substrings inside quotes.

    >>> splitQuoted('the "hairy monkey" likes pie')
    ['the', 'hairy monkey', 'likes', 'pie']

    Another one of those "someone must have a better solution for
    this" things.  This implementation is a VERY DUMB hack done too
    quickly.
    Nr   )ú"ú'r   r   r   )r   r   r   )r   ÚoutÚquotÚphraseÚwordr   r   r
   ÚsplitQuoted“   s$    
r;   Tc                 C   s    t | ƒƒ }tt| ƒdƒ}|s$|  ¡ } | |t| ƒ ¡}|sB| ¡ }t|ƒ}|dkrVdS t|ƒ| | }|dkrx|| }n||d… | }| | ¡dkr$dS q$dS )z[
    Find whether string C{p} occurs in a read()able object C{f}.

    @rtype: C{bool}
    i   r   FNr   T)r   Úmaxr   ÚlowerÚreadr%   )ÚpÚfZcaseSensitiveÚbufÚbuf_lenÚrÚ
bytes_readr-   r   r   r
   ÚstrFile¶   s     

rE   N)r   )r'   )T)
Ú__doc__r   r   r   r)   ZwordWrapr2   r4   r;   rE   r   r   r   r
   Ú<module>   s   
5
2#