ó
    Žã¡j¹  ã            
       ó>  • S r SSKrSSKJr  SSKJr  \" S5      r\" \5      r	S\
S\
4S jrS\
S\4S	 jrS\
S\4S
 jrS\
S\4S jrS\\
   S\\\\
\\\4      4S jrS\
S\\\\
\\4      4S jrS\
S\\\\
\\4      4S jrS\4S jr\S:X  a  \" \" 5       5      eg)zWCheck that RST title underlines (and overlines) have the same length as the title text.é    N)Ú	getLogger)ÚPathz !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ÚlineÚreturnc                 ó$   • U R                  S5      $ )z9Strip the Unicode BOM (U+FEFF) that some generators emit.u   ï»¿)Úlstrip©r   s    Ú¦C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\scripts/check_rst_titles.pyÚ
_strip_bomr      s   € à�;‰;�xÓ Ð ó    c                 ó\   • U (       d  gU S   [         ;  a  g[        [        U 5      5      S:H  $ )zQReturn True if *line* is composed entirely of one repeated RST section character.Fr   é   )ÚRST_SECTION_CHARSÚlenÚsetr	   s    r
   Ú_is_section_liner      s+   € æØØˆA�wÔ'Ó'ØÜŒs�4‹y‹>˜QÑÐr   c                 ó¢   • U (       a	  U S   S:X  a  g[        U 5      (       a  gU R                  S5      (       d  U R                  S5      (       a  gg)z4Return True if *line* could be an RST section title.r   Ú Fz>>>z...T)r   Ú
startswithr	   s    r
   Ú_is_title_candidater      sC   € æ�4˜‘7˜c“>ØÜ˜×ÑØØ‡��u×Ñ §¡°×!7Ñ!7ØØr   c                 ó*   • [        [        U 5      5      $ )zLength ignoring BOM characters.)r   r   r	   s    r
   Ú_visible_lenr   '   s   € äŒz˜$ÓÓ Ð r   Úlinesc           
      óJ  • [        U 5      n/ n[        5       nSnXA:  Gaƒ  X   n[        U5      (       a	  US   S:X  a  US-  nM*  US-   U:  a  [        XS-      5      OSnUS-   U:  aË  [	        U5      (       a»  [        XS-      5      (       a¦  XS-      S   US   :X  a•  Un[        U5      n[        U5      U:w  a  UR                  XGU[        U5      S45        [        XS-      5      U:w  a&  UR                  US-   Xx[        XS-      5      S45        UR                  XDS-   US-   15        US-  nGM  US:”  a]  XC;  aX  [        XS-
     5      n	[	        U	5      (       a8  [        U	5      n[        U5      U:w  a  UR                  XIU[        U5      S45        US-  nXA:  a  GMƒ  U$ )	zVReturn ``(marker_idx, title, title_len, marker_len, is_overline)`` for every mismatch.r   r   r   Ú é   TFé   )r   r   r   r   r   ÚappendÚupdate)
r   ÚnÚerrorsÚconsumedÚir   Útitle_candidateÚtitleÚ	title_lenÚprevs
             r
   Ú_scanr(   ,   s£  € äˆE‹
€AØ35€FÜ›€Hà	€AØ
Œ%Ø‰xˆä ×%Ñ%¨¨a©°C«Ø�‰FˆAÙð 78¸!±e¸a³iœ* U¨q©5¡\Ô2ÀRˆà�‰E�A‹IÜ# O×4Ñ4Ü  ¨1¡u¡×.Ñ.Ø˜!‘e‘˜Q‘ 4¨¡7Ó*à#ˆEÜ˜E›
ˆIä�4‹y˜IÓ%Ø—‘˜q¨´C¸³I¸tÐDÔEÜ�5˜Q™‘<Ó  IÓ-Ø—‘˜q 1™u e¼¸EÀaÁ%¹LÓ8IÈ5ÐQÔRØ�O‰O˜Q A¡ q¨1¡uÐ-Ô.Ø�‰FˆAÚð ˆq‹5�QÓ&Ü˜e¨¡E™lÓ+ˆDÜ" 4×(Ñ(Ü ›I�	Ü�t“9 	Ó)Ø—M‘M 1¨I´s¸4³yÀ%Ð"HÔIà	ˆQ‰ˆðE Ž%ðH €Mr   Úfilepathc                 ó  • [        U 5       nUR                  5       nSSS5        W Vs/ s H  o3R                  S5      PM     nn[        U5      n/ n0 nU H*  u  p‰p«nUR	                  US-   XšU45        XH   S   U
-  Xx'   M,     U(       aY  [        U S5       n[        U5       H3  u  pÞX×;   a  UR                  X}   S-   5        M"  UR                  U5        M5     SSS5        U$ U$ ! , (       d  f       NÏ= fs  snf ! , (       d  f       U$ = f)zPFix marker lines in-place and return the list of mismatches that were corrected.Nú
r   r   ÚwÚ
)ÚopenÚ	readlinesÚrstripr(   r   Ú	enumerateÚwrite)r)   ÚfhÚ	raw_linesÚrawr   Ú
mismatchesÚreportedÚfixed_indicesÚ
marker_idxr%   r&   Ú
marker_lenÚ_is_overÚidxÚraw_lines                  r
   Úfix_filer>   Z   sý   € ä	ˆhŒ˜2Ø—L‘L“Nˆ	÷ 
ñ ,5Ó5ª9 C�Z‰Z˜Ö©9€EÐ5Ü�u“€Jà02€HØ$&€MÛ>HÑ:ˆ
˜9°(Ø�‰˜ a™¨¸:ÐFÔGØ$)Ñ$5°aÑ$8¸9Ñ$DˆÓ!ñ ?Iö Ü�(˜CÔ  BÜ!*¨9Ö!5‘�ØÓ'Ø—H‘H˜]Ñ/°$Ñ6Ö7à—H‘H˜XÖ&ñ	 "6÷ !ð €Oˆ8€O÷) 
�üò 6÷ !Ô ð €Oús   ŒC&©C7ÂAC<Ã&
C4Ã<
Dc                 ó$  • [        U 5       nUR                  5       nSSS5        W Vs/ s H  o3R                  S5      PM     nn[        U5       VVVVV	s/ s H  u  pVpxn	US-   XgU4PM     sn	nnnn$ ! , (       d  f       N\= fs  snf s  sn	nnnnf )zSReturn ``(lineno, title, title_len, marker_len)`` for every mismatch in *filepath*.Nr+   r   )r.   r/   r0   r(   )
r)   r3   r4   r5   r   r9   r%   r&   r:   Ú_s
             r
   Ú
check_filerA   s   s‚   € ä	ˆhŒ˜2Ø—L‘L“Nˆ	÷ 
ñ ,5Ó5ª9 C�Z‰Z˜Ö©9€EÐ5ô <AÀ¼<÷â;GÑ7ˆJ˜y°að 
�a‰˜¨:Ó6Ù;Gõð ÷	 
�üò 6ùös   ŒA3©BÁB	Á3
Bc                  ó>  • [         R                  " [        S9n U R                  SSSS9  U R                  SSSS	9  U R	                  5       nUR
                  =(       d4    [        S
5      R                  S5       Vs/ s H  n[        U5      PM     snnUR                  (       a  [        O[        nSn[        U5       HO  nU" U5       H@  u  pxpšUR                  (       a  SOSn[        U SU SU SU	< SU
< SU< S35        US-  nMB     MQ     U(       a  S$ S$ s  snf )N)ÚdescriptionÚfilesÚ*z/RST files to check (default: all docs/**/*.rst))ÚnargsÚhelpz--fixÚ
store_truezFix underlines in-place)ÚactionrG   Údocsz*.rstr   ÚfixedÚfoundÚ:z#: title/underline length mismatch (z	): title z != marker z  (Ú)r   )ÚargparseÚArgumentParserÚ__doc__Úadd_argumentÚ
parse_argsrD   r   ÚrglobÚstrÚfixr>   rA   ÚsortedÚprint)ÚparserÚargsÚpÚpathsÚhandlerÚfailuresÚpathÚlinenor%   r&   r:   Úverbs               r
   Úmainrb      s"  € Ü×$Ò$´Ñ9€FØ
×ÑØ�sÐ!Rð ñ ð ×Ñ˜¨Ð;TÐÑUØ×ÑÓ€Dà�J‰J×G¬4°«<×+=Ñ+=¸gÔ+FÓGÒ+F aœ3˜qž6Ñ+FÑG€EàŸ(Ÿ(�h¬
€GØ€HÜ�u–ˆÙ4;¸D¶MÑ0ˆF˜9Ø"ŸhŸh‘7¨GˆDÜØ�&˜˜&˜Ð!DÀTÀFð KØ"™ [°±ð ?Ø‘9˜Aðôð
 ˜‰MŠHó 5Bñ ö ˆ1Ð˜aÐùò Hs   Á:DÚ__main__)rQ   rO   Úloggingr   Úpathlibr   Ú	frozensetr   Ú__name__ÚloggerrU   r   Úboolr   r   Úintr   ÚlistÚtupler(   r>   rA   rb   Ú
SystemExit© r   r
   Ú<module>ro      s  ðá ]ã å Ý áÐBÓCÐ á	�8Ó	€ð!�Sð !˜Sô !ð
˜3ð  4ô ð˜cð  dô ð!�sð !˜sô !ð
+��c‘ð +˜t E¨#¨s°C¸¸cÐ*AÑ$BÑCô +ð\�sð ˜t E¨#¨s°C¸Ð*<Ñ$=Ñ>ô ð2	˜ð 	  e¨C°°c¸3Ð,>Ñ&?Ñ!@ô 	ð ˆcô  ð2 ˆzÓÙ
‘T“VÓ
Ðð r   