§
    Ètºf#  ã                   óD   — d Z dd„Zd„ Zd„ Zdd„ZeZd„ Zd„ Zd	„ Zdd„Z	dS )z'
Miscellany of text-munging functions.
Ú c                 óX  — d}g }t          | ¦  «        t          u r¹d}|                      ¦   «         D ]¡\  }}t          ||dz   ¦  «        }t	          |¦  «        rEt          |¦  «        r|dt          d¦  «         …         }|                     |› d|› d|› �¦  «         Œl|                     |› d|› d|t          |¦  «        d	z   d…         › �¦  «         Œ¢nÂt          | ¦  «        t          u st          | ¦  «        t          u r^t          | ¦  «        t          u rd
}nd}| D ]?}t          ||dz   ¦  «        }|                     | 
                    ¦   «         dz   ¦  «         Œ@n8t          |fd„t          | ¦  «                             d¦  «        ¦  «        |dd…<   |s|                     |¦  «         |rC||d         z   |d         t          |¦  «        dz   d…         z   |d<   |d         |d         z   |d<   d                     |¦  «        }t	          |¦  «        rt          |¦  «        s|dz   }|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                 ó   — || z   S ©N© )ÚsÚis     úR/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/python/text.pyú<lambda>zstringyString.<locals>.<lambda>/   s
   € ¨Q°©U€ ó    é    é   éÿÿÿÿ)ÚtypeÚdictÚitemsÚstringyStringÚisMultilineÚendsInNewlineÚlenÚappendÚtupleÚlistÚrstripÚmapÚstrÚsplitÚjoin)ÚobjectÚindentationÚbracesÚslÚkeyÚvalueÚelementr   s           r   r   r      si  € ð €FØ	€BåˆF�|„|•tÐÐØˆØ Ÿ,š,™.œ.ð 	Sð 	S‰JˆC�Ý! %¨°uÑ)<Ñ=Ô=ˆEÝ˜5Ñ!Ô!ð SÝ  Ñ'Ô'ð 0Ø! ,¥S¨¡Y¤Y J ,Ô/�EØ—	’	˜[Ð:Ð:¨3Ð:Ð:°5Ð:Ð:Ñ;Ô;Ð;Ð;ð —	’	˜[ÐQÐQ¨3ÐQÐQ°%½¸KÑ8HÔ8HÈ1Ñ8LÐ8NÐ8NÔ2OÐQÐQÑRÔRÐRÐRð	Sõ 
ˆf‰Œ�Ð	Ð	¥$ v¡,¤,µ$Ð"6Ð"6Ý�‰<Œ<�5Ð Ð ØˆFˆFàˆFàð 	.ð 	.ˆGÝ# G¨[¸3Ñ->Ñ?Ô?ˆGØ�IŠI�g—n’nÑ&Ô&¨Ñ,Ñ-Ô-Ð-Ð-ð	.õ  Ð2Ð2Ð2µC¸±K´K×4EÒ4EÀdÑ4KÔ4KÑLÔLˆˆ1ˆ1ˆ1‰àð Ø
�	Š	�+ÑÔÐàð %Ø˜f QœiÑ'¨"¨Q¬%µ°KÑ0@Ô0@À1Ñ0DÐ0FÐ0FÔ*GÑGˆˆ1‰Ø�B”˜& œ*Ñ$ˆˆ2‰à�	Š	�"‰Œ€Aå�1�~„~ð �m¨AÑ.Ô.ð Ø�‰Hˆà€Hr   c                 ó4   — |                       d¦  «        dk    S )z=
    Returns C{True} if this string has a newline in it.
    r   r   )Úfind©r   s    r   r   r   @   s   € ð �6Š6�$‰<Œ<˜2ÒÐr   c                 ó:   — | t          d¦  «         d…         dk    S )z;
    Returns C{True} if this string ends in a newline.
    r   N)r   r+   s    r   r   r   G   s   € ð �c�$‰iŒiˆZˆ\ˆ\Œ?˜dÒ"Ð"r   éP   c                 óf  — g }|                       d¦  «        dk    rC|                      d¦  «        }|D ])}|                     t          ||¦  «        dgz   ¦  «         Œ*|S |                      ¦   «         }d}d}|r¸|t	          ||         ¦  «        z   }|dz   }||k    rM|dk    rn|dz
  }|d|…         ||d…         }}|                     d                     |¦  «        ¦  «         d}d}nFt	          |¦  «        |k    s.|                     d                     |¦  «        ¦  «         |dd…= n|dz   }|°¸|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!   )	ÚinStringÚwidthÚoutLinesÚ
paragraphsÚparaÚinWordsÚcolumnÚptr_lineÚls	            r   r0   r0   N   si  € ð €Hð ‡}‚}�VÑÔ Ò!Ð!Ø—^’^ FÑ+Ô+ˆ
Øð 	<ð 	<ˆDØ�OŠO�J t¨UÑ3Ô3°r°dÑ:Ñ;Ô;Ð;Ð;ØˆØ�nŠnÑÔ€Gà€FØ€HØ
ð  Ø�#˜g hÔ/Ñ0Ô0Ñ0ˆØ˜a‘<ˆà�EŠ>ˆ>Ø˜1Š}ˆ}àð $ a™<�Ø# A h JÔ/°¸¸¸Ô1C�ˆQØ�OŠO˜CŸHšH Q™KœKÑ(Ô(Ð(àˆHØˆFˆFÝ�g‘,”, Ò)Ð)à�OŠO˜CŸHšH WÑ-Ô-Ñ.Ô.Ð.Ø˜˜˜�
�
ð ˜a‘ZˆFð- ð  ð2 €Or   c                 ój   — g }| D ]-}|s|                      ¦   «         r|                     |¦  «         Œ.|S r	   )Ústripr   )ÚlinesÚretÚlines      r   ÚremoveLeadingBlanksr?   ƒ   sE   € Ø
€CØð ð ˆØð 	�$—*’*‘,”,ð 	Ø�JŠJ�tÑÔÐøØ€Jr   c                 óä   — t          |                      d¦  «        ¦  «        }|                     ¦   «          t          |¦  «        }|                     ¦   «          d                     |¦  «        dz   S )Nr   )r?   r    Úreverser!   )r   r<   s     r   ÚremoveLeadingTrailingBlanksrB   ‹   sW   € Ý §¢¨¡¤Ñ.Ô.€EØ	‡M‚M�O„O€OÝ Ñ&Ô&€EØ	‡M‚M�O„O€OØ�9Š9�UÑÔ˜dÑ"Ð"r   c                 óŽ  — g }d}d}|                       ¦   «         D ]©}|€ |r|d         dv r|d         }|dd…         }g }|€|                     |¦  «         Œ<|rV|d         |k    rJ|dd…         }|                     |¦  «         |                     d                     |¦  «        ¦  «         d}Œ”|                     |¦  «         Œª|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Úwords        r   ÚsplitQuotedrJ   “   sî   € ð €CØ€DØ€FØ—’‘	”	ð $ð $ˆØˆ>Øð ˜˜aœ JÐ.Ð.Ø˜A”w�Ø˜A˜B˜B”x�Ø�àˆ>Ø�JŠJ�tÑÔÐÐàð $˜˜bœ TÒ)Ð)Ø˜C˜R˜C”y�Ø—’˜dÑ#Ô#Ð#Ø—
’
˜3Ÿ8š8 FÑ+Ô+Ñ,Ô,Ð,Ø��à—’˜dÑ#Ô#Ð#Ð#à€Jr   Tc                 óÐ  —  t          | ¦  «        ¦   «         }t          t          | ¦  «        d¦  «        }|s|                      ¦   «         } 	 |                     |t          | ¦  «        z
  ¦  «        }|s|                     ¦   «         }t          |¦  «        }|dk    rdS t          |¦  «        |z   |z
  }|dk    r||z   }n||d…         |z   }|                     | ¦  «        dk    rdS Œœ)z[
    Find whether string C{p} occurs in a read()able object C{f}.

    @rtype: C{bool}
    i   r   r   FNr   T)r   Úmaxr   ÚlowerÚreadr*   )ÚpÚfÚcaseSensitiveÚbufÚbuf_lenÚrÚ
bytes_readr9   s           r   ÚstrFilerV   ¶   sç   € ð �$ˆq‰'Œ'‰)Œ)€CÝ•#�a‘&”&˜*Ñ%Ô%€GØð Ø�GŠG‰IŒIˆðØ�FŠF�7�S ™VœVÑ#Ñ$Ô$ˆØð 	Ø—’‘	”	ˆAÝ˜‘V”Vˆ
Ø˜Š?ˆ?Ø�5Ý�‰HŒH�zÑ! GÑ+ˆØ�Š6ˆ6Ø˜‘'ˆCˆCà�a�b�b”'˜A‘+ˆCØ�8Š8�A‰;Œ;˜"ÒÐØ�4ðr   N)r   )r-   )T)
Ú__doc__r   r   r   r0   ÚwordWrapr?   rB   rJ   rV   r
   r   r   ú<module>rY      sª   ððð ð
2ð 2ð 2ð 2ðjð ð ð#ð #ð #ð/ð /ð /ð /ðd €ðð ð ð#ð #ð #ð ð  ð  ðFð ð ð ð ð r   