ó
    Ãu„j\4  ã                  óx  • S r SSKJr  SSKJr  SSKJr  SSKJr  / SQr	SSK
r
SSKJr  SS	KJrJrJrJr  SS
KJr  SSKJr  SSKJrJrJrJrJrJrJr  SSKJr  \(       a  SSK J!r!   " S S\"5      r#\" SSS\\\\SS9RI                  S5      RK                  S5      RM                  S5      r'\" SSSS9RM                  5       r(\" SSSSSS S!S"S#S$SS%S&S'9RI                  S5      RK                  S5      r) " S( S)\5      r*\" S*SS\\\\SS%S&S+9
RK                  S5      r+ " S, S-\5      r,1 S.kr-S/S0S1S2S3S4S5S6.r.\\/   r0\\0/\/4   r1\\1\//\/4   r2\
Rf                  " S75      Rh                  4     S>S8 jjr5S?S@S9 jjr6  SA       SBS: jjr7  SA       SBS; jjr8\9S<:X  a  SS=K:J;r;  \;" 5       r<\<R{                  5         gg)Cz'
Utilities related to content markup.

é    )Úannotations)Ú
itemgetter)Úsubstitute_references)ÚUnexpectedEnd)ÚMarkupErrorÚescapeÚ
to_contentN)ÚTemplate)ÚTYPE_CHECKINGÚCallableÚMappingÚMatch)Ú
active_app)ÚColor)ÚCOLORÚPERCENTÚTOKENÚVARIABLE_REFÚExpectÚTokenizerStateÚtokenize_values)ÚStyle)ÚContentc                  ó   • \ rS rSrSrSrg)r   é$   z)An error occurred parsing content markup.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r   ó    ÚœC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\textual/markup.pyr   r   $   s   † Ü3r#   r   zmarkup style valuez	(?<!\\)\]z[@a-zA-Z_-][a-zA-Z0-9_-]*=z\s+)Úend_tagÚkeyÚpercentÚcolorÚtokenÚvariable_refÚ
whitespaceTFz
markup tagz
(?<!\\)\[/z	(?<!\\)\[)Úopen_closing_tagÚopen_tagzmarkup valuez[\w\.]+z\(z\)ú\[z\]z\{z\}Ú,z\".*?\"z'.*?')r%   ÚwordÚround_startÚ	round_endÚsquare_startÚ
square_endÚcurly_startÚ	curly_endÚcommar+   Údouble_stringÚsingle_stringc                  ó^   • \ rS rSrSr\R                  5       r\\\\	S.r
\	\	\	S.rSSSS.rS	rg
)ÚMarkupTokenizeréS   zTokenizes content markup.)r-   r,   r%   r&   ©r1   r3   r5   r1   r3   r5   )r2   r4   r6   r   N)r   r   r   r    r!   Úexpect_markupÚ
expect_eofÚEXPECTÚexpect_markup_tagÚexpect_markup_expressionÚ	STATE_MAPÚ
STATE_PUSHÚ	STATE_POPr"   r   r#   r$   r;   r;   S   sJ   † Ù#à×%Ñ%Ó'€Fà%Ø-Ø Ø'ñ	€Ið 0Ø0Ø/ñ€Jð #Ø$Ø"ñƒIr#   r;   zstyle token)	r%   r&   r'   r(   r)   r*   r+   r8   r9   c                  óL   • \ rS rSrSr\R                  5       rS\0r	\\\S.r
Srg)ÚStyleTokenizeréw   zTokenizes a styler&   r=   r   N)r   r   r   r    r!   Úexpect_styler?   r@   rB   rC   rD   r"   r   r#   r$   rG   rG   w   s.   † Ùà×$Ñ$Ó&€FØÐ0Ð1€Ià/Ø0Ø/ñƒJr#   rG   >   ÚdimÚboldÚblinkÚitalicÚstrikeÚreverseÚ	underlineÚ
underline2rK   rJ   rM   rP   rQ   rO   rN   )ÚbÚdÚiÚuÚuuÚrÚsz(\\*)(\[[a-z#/@][^[]*?])c                ó‚   • SS jnU" X 5      n U R                  S5      (       a  U R                  S5      (       d  U S-   $ U $ )z®Escapes text so that it won't be interpreted as markup.

Args:
    markup (str): Content to be inserted in to markup.

Returns:
    str: Markup with square brackets escaped.
c                ó8   • U R                  5       u  pU U SU 3$ )z!Called by re.sub replace matches.Ú\)Úgroups)ÚmatchÚbackslashesÚtexts      r$   Úescape_backslashesÚ"escape.<locals>.escape_backslashes©   s%   € à!ŸL™L›NÑˆØ�˜{˜m¨2¨d¨VÐ4Ð4r#   r[   z\\)r]   z
Match[str]ÚreturnÚstr)Úendswith)ÚmarkupÚ_escaper`   s      r$   r   r   œ   s@   € ô5ñ
 Ð'Ó0€FØ‡��t×Ñ V§_¡_°V×%<Ñ%<Ø˜‰}Ðà€Mr#   c                ó:  • 0 nSnSnSnSn[        5       n0 nUc-   [        R                  " 5       n	U	R                  R                  n
O[        U5      n
[        [        U" U S5      U
5      5      nU GHÕ  nUR                  nUR                  nUS:X  Ga+  UR                  S5      n/ n/ n[        U5      nUR                  S;   a  UR                  SS	 X�'     GOsUR                  UR                  5        U H�  nUR                  S
:X  a	  U(       d    OwUR                  UR                  5        UR                  S;   a  UR                  UR                  5        Md  UR                  S;   d  Mv  UR                  5         U(       a  M�    O   UR                  [         R                   5        SR#                  U5      nUX�'   GMN  US:X  aM  U(       a#  [$        R&                  " UR                  5      nGM~  [$        R&                  " UR                  5      nGM¡  US:X  aÐ  US:X  a  SU;  a  SUS'   GM»  GM¾  US:X  a  SnGMÉ  US:X  a7  U(       a  [$        R(                  " 5       nGMî  [$        R(                  " 5       nGM  US:X  a  SnGM  U[*        ;   a	  XbU'   SnGM$  U[,        ;   a  Xb[,        U   '   SnGM>  U(       a  [$        R&                  " U5      nGM^  [$        R&                  " U5      nGMw  US:X  d  GM€  [/        UR                  S5      5      S-  nU(       a  Ub  UR1                  U5      nGM»  GM¾  Uc  GMÄ  UR1                  U5      nGMØ     [3        XC4SUR                  SS5      0UD6nU(       a  U[2        R4                  " U5      -  nU$ ! [
         a    0 n
 GNGf = f)z¿Parse a style with substituted variables.

Args:
    style: Style encoded in a string.
    variables: Mapping of variables, or `None` to import from active app.

Returns:
    A Style object.
NFT)zinline styleÚ r&   Ú=>   r8   r9   é   éÿÿÿÿr+   >   r5   r1   r3   >   r6   r2   r4   rh   r(   r)   ÚlinkÚonÚautoÚnotr'   Ú%g      Y@)rG   r   ÚgetÚ
stylesheetÚ_variable_tokensÚLookupErrorr   Úiterr   ÚnameÚvalueÚrstripÚnextÚappendÚpopÚexpectr@   Újoinr   ÚparseÚ	automaticÚSTYLESÚSTYLE_ABBREVIATIONSÚintÚmultiply_alphar   Ú	from_meta)ÚstyleÚ	variablesÚstylesr(   Ú
backgroundÚis_backgroundÚstyle_stateÚ	tokenizerÚmetaÚappÚreference_tokensÚiter_tokensr)   Ú
token_nameÚtoken_valuer&   ÚparenthesisÚ
value_textÚfirst_tokenrw   r'   Úparsed_styles                         r$   Úparse_styler–   µ   s)  € ð &(€FØ€EØ#€JØ€MØ€KäÓ €IØ€DàÑð	?Ü—.’.Ó"ˆCð  #Ÿ~™~×>Ñ>Ñä*¨9Ó5ÐäÜÙ�eÐ1Ó2Øó	
ó€Kô ˆØ—Z‘Zˆ
Ø—k‘kˆØ˜ÔØ×$Ñ$ SÓ)ˆCØ%'ˆKØ$&ˆJÜ˜{Ó+ˆKØ×ÑÐ#EÓEØ'×-Ñ-¨a°Ð3�‘	Úà×!Ñ! +×"3Ñ"3Ô4Û(�EØ—z‘z \Ó1¾+ÙØ×%Ñ% e§k¡kÔ2Ø—z‘zÐ%SÓSØ#×*Ñ*¨5¯;©;Ö7ØŸ™Ð'OÕOØ#Ÿ™Ô)ß*˜{Ù!ñ )ð × Ñ ¤×!6Ñ!6Ô7àŸ™ 
Ó+�Ø!�”	à˜7Ó"ÞÜ"Ÿ[š[¨¯©Ó5“
äŸš E§K¡KÓ0“à˜7Ó"Ø˜fÓ$Ø Ó%Ø#%�D˜”Lò &à Ó$Ø $“Ø Ó&Þ Ü!&§¢Ó!2“Jä!ŸOšOÓ-“EØ Ó%Ø#“Ø¤Ó&Ø&1�{Ñ#Ø"“ØÔ 3Ó3Ø;FÔ*¨;Ñ7Ñ8Ø"“æ Ü!&§¢¨[Ó!9“Jä!ŸKšK¨Ó4“Eà˜9Ö$Ü˜+×,Ñ,¨SÓ1Ó2°UÑ:ˆGÞØÑ)Ø!+×!:Ñ!:¸7Ó!C“Jò *ð Ô$Ø!×0Ñ0°Ó9“EñE ôH ˜ÑR°·±¸&À$Ó1GÐRÈ6ÑR€LæØœŸš¨Ó-Ñ-ˆØÐøôm ó 	"Ø!Óð	"ús   ›N
 Î
NÎNc                ó˜   • Sn [        XU5      $ ! [         a    [        S5      Se[         a  n[        [	        U5      5      SeSnAff = f)a  Convert markup to Content.

Args:
    markup: String containing markup.
    style: Optional base style.
    template_variables: Mapping of string.Template variables

Raises:
    MarkupError: If the markup is invalid.

Returns:
    Content that renders the markup.
TzCUnexpected end of markup; are you missing a closing square bracket?N)Ú_to_contentr   r   Ú	Exceptionrc   )re   r…   Útemplate_variablesÚ_rich_traceback_omitÚerrors        r$   r	   r	   %  s[   € ð$  Ðð0Ü˜6Ð*<Ó=Ð=øÜó ÜØQó
àð	ô ó 0äœ#˜e›*Ó%¨4Ð/ûð0ús   „ �A	¯AÁA	c                ót  ^• SSK JnJn  [        5       n/ nUR                  n[        U" U S5      5      n/ n	/ n
Sn[        R                  nTc  S nOSU4S jjnU GH’  nUR                  nUS:X  a:  U" UR                  R                  SS5      5      nU" U5        U[        U5      -  nMP  US	:X  Ga  / nS
nS
nU HU  nUR                  S:X  a    ODUR                  S:X  a  SnOUR                  S:X  a  SnUR	                  UR                  5        MW     U(       d  U(       a8  SSR                  U5       3U(       a  SOS-   nU" U5        U[        U5      -  nMþ  SR                  U5      nUR                  5       (       d  SU S3nU" U5        U[        U5      -  nGMC  U	R	                  UUU" UR                  5       5      45        GMn  US:X  d  GMw  / nU H0  nUR                  S:X  a    OUR	                  UR                  5        M2     SR                  U5      R                  5       nU" U5      nU(       am  [        [        U	5      S5       HE  u  nu  nnnUU:X  d  M  U	R!                  U* 5        UU:w  a  U
R	                  U" UUU5      5          GM9     [#        SU S35      eU	(       d  [#        S5      eU	R!                  5       u  nnnUU:w  d  GMy  U
R	                  U" UUU5      5        GM•     SR                  U5      n[        U5      n U	(       aJ  U (       aC  U
R%                  [        U	5       VVVs/ s H  u  nnnUU :w  d  M  U" UU U5      PM     snnn5        U
R'                  5         U
R)                  [+        S5      S9  U" UU(       a  U (       a  U" SU U5      /U
Q5      n!U!$ U
5      n!U!$ s  snnnf )a  Internal function to convert markup to Content.

Args:
    markup: String containing markup.
    style: Optional base style.
    template_variables: Mapping of string.Template variables

Raises:
    MarkupError: If the markup is invalid.

Returns:
    Content that renders the markup.
r   )r   ÚSpan)Úinlinerh   c                ó   • U $ ©Nr   )r_   s    r$   Ú<lambda>Ú_to_content.<locals>.<lambda>g  s   € ¡Dr#   c               óH   >• SU ;   a  [        U 5      R                  T5      $ U $ )NÚ$)r
   Úsafe_substitute)Útemplate_textrš   s    €r$   Úprocess_textÚ!_to_content.<locals>.process_textk  s(   ø€ Ø�mÓ#Ü Ó.×>Ñ>Ð?QÓRÐRØ Ð r#   r_   r.   Ú[r-   Fr%   TÚeofrh   Ú]r,   rj   zclosing tag '[/z]' does not match any open tagz-auto closing tag ('[/]') has nothing to close)r&   )r§   rc   rb   rc   )Útextual.contentr   rž   r;   rz   ru   r   Ú_normalize_markup_tagrv   rw   ÚreplaceÚlenr}   ÚstripÚ	enumerateÚreversedr{   r   ÚextendrO   Úsortr   )"re   r…   rš   r   rž   r‹   r_   Útext_appendr�   Ústyle_stackÚspansÚpositionÚnormalize_markup_tagr¨   r)   r�   rw   Útag_textr«   Úcontains_textÚtext_contentÚopening_tagÚ	blank_tagÚclosing_tagÚnormalized_closing_tagÚindexÚtag_positionÚtag_bodyÚnormalized_tag_bodyÚopen_positionÚ_Úcontent_textÚtext_lengthÚcontents"     `                               r$   r˜   r˜   C  s�  ø€ ÷& .äÓ!€IØ€DØ—+‘+€KÜ‘y ¨Ó8Ó9€Kà.0€Kà€Eà€Hô !×6Ñ6ÐàÑ!Ù(‰÷	!ô
 ˆØ—Z‘Zˆ
Ø˜ÓÙ  §¡×!4Ñ!4°U¸CÓ!@ÓAˆEÙ˜ÔØœ˜E›
Ñ"ŠHà˜:Ô%ØˆHàˆCØ!ˆMÛ$�Ø—:‘: Ó*ÙØ—Z‘Z 6Ó)Ø$(‘MØ—Z‘Z 5Ó(Ø�CØ—‘ §¡Ö,ñ %ö ¦à!" 2§7¡7¨8Ó#4Ð"5Ð6Æ¹"ÈÑM�Ù˜LÔ)ØœC Ó-Ñ-’à Ÿg™g hÓ/�à"×(Ñ(×*Ñ*Ø"# K =°Ð 2�IÙ 	Ô*Ø¤ I£Ñ.“Hà×&Ñ&à$Ø'Ù0°×1BÑ1BÓ1DÓEð÷ð Ð-Ö-ØˆHÛ$�Ø—:‘: Ó*ÙØ—‘ §¡Ö,ñ %ð Ÿ'™' (Ó+×1Ñ1Ó3ˆKÙ%9¸+Ó%FÐ"Þ%ÜLUÜ˜[Ó)¨1öMÑH�EÑH˜L¨(Ð4Gð +Ð.DÕDØ#Ÿ™¨¨Ô/Ø'¨8Ó3Ø!ŸL™L©¨l¸HÀhÓ)OÔPÛñMô &Ø)¨+¨Ð6TÐUóð ö
 #Ü%Ð&UÓVÐVØ-8¯_©_Ó->Ñ*�˜x¨Ø  HÖ,Ø—L‘L¡ m°X¸xÓ!H×IñI ðL —7‘7˜4“=€LÜ�lÓ#€KÞ–{Ø�‰ô .6°kÔ-Bõâ-BÑ)�H˜h¨Ø˜{Ñ*ó 6‘�X˜{¨HÖ5Ù-Bóô	
ð 
‡M�M„OØ	‡J�J”:˜a“=€JÑ!áØÞ27¾K‰ˆa�˜eÓ	$Ð- uÐ-ó€Gð
 €Nð OTó€Gð
 €Nùôs   Ì6N3ÍN3Ú__main__)ÚMarkupPlayground)re   rc   rf   Ú_EscapeSubMethodrb   rc   r¡   )r…   rc   r†   zdict[str, str] | Nonerb   r   )rh   N)re   rc   r…   zstr | Stylerš   zMapping[str, object] | Nonerb   r   )>r!   Ú
__future__r   Úoperatorr   Útextual.css.parser   Útextual.css.tokenizerr   Ú__all__ÚreÚstringr
   Útypingr   r   r   r   Útextual._contextr   Útextual.colorr   Útextual.css.tokenizer   r   r   r   r   r   r   Útextual.styler   r­   r   r™   r   r?   Úexpect_semicolonÚextract_textrA   r>   rB   r;   rI   rG   r€   r�   rc   Ú_ReStringMatchÚ_ReSubCallablerÍ   ÚcompileÚsubr   r–   r	   r˜   r   Útextual._markup_playgroundrÌ   r�   Úrunr   r#   r$   Ú<module>râ      s|  ðñõ
 #å å 3Ý /â
1€ã 	Ý ß :Ó :å 'Ý ÷÷ ñ õ  æÝ'ô4�)ô 4ñ
 ØØØ)ØØØØ!Øñ	÷ �Z�ÓßÑ�eÓß�\�$Óð ñ  ØØ"Øñ÷ �,ƒ.ð	 ñ ØØØØØØØØØØØØ Øñ÷ �Z�ÓßÑ�eÓð# ô*�nô ñ, ØØØ%ØØ
Ø
ØØØØñ÷ Ñ�5Óð ô	�^ô 	ò	
€ð 
Ø	Ø	Ø	Ø
Ø	Ø	ñÐ ð �s‘€Ø˜>Ð*¨CÐ/Ñ0€Ø˜^¨SÐ1°3Ð6Ñ7Ð ð
 !#§
¢
Ð+FÓ G× KÑ KðØðàðð 	õö2mðd Ø6:ð0Øð0àð0ð 4ð0ð õ	0ð@ Ø6:ðEØðEàðEð 4ðEð õ	EðP ˆzÓÝ;á
Ó
€CØ‡G�G…Ið	 r#   