Ë
    Dü´j™&  ã                  ó4  — U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZmZ d	d
dœZded<   dZ ej(                  dej*                  «      Z ej(                  dej*                  «      Z ej(                  dej*                  «      Z ej(                  dej2                  «      Z ej(                  dej*                  «      Z ej(                  dej*                  «      Z e edd«      «      ZdZ dd„Z!dd„Z"dd„Z#	 	 	 	 	 	 	 	 dd„Z$d d„Z%y)!z<Stage 1b: charset declaration extraction (HTML/XML/PEP 263).é    )ÚannotationsN)Údecodes_without_error)ÚEncodingEra)ÚDETERMINISTIC_CONFIDENCEÚDetectionResultÚPipelineContext)Úcompute_structural_score)ÚREGISTRYÚlookup_encoding)Ú	shift_jisÚcp932)Úeuc_krÚcp949)Úshift_jis_2004r   zdict[str, tuple[str, str]]Ú_MARKUP_SUPERSET_PROMOTIONSi   s*   <\?xml[^>]+encoding\s*=\s*['"]([^'"]+)['"]s,   <meta[^>]+charset\s*=\s*['"]?\s*([^\s'">;]+)s6   <meta[^>]+content\s*=\s*['"][^'"]*charset=([^\s'">;]+)s&   ^[ \t\f]*#.*?coding[:=][ \t]*([-\w.]+)z<(?:meta|\?xml)[^>]*zI(?:charset|encoding)\s*=\s*[^\sA-Za-z0-9._-]?\s*([A-Za-z][A-Za-z0-9._-]+)é€   é   g      Ð?c                ó  — t        | «      t        | j                  dt        «      «      z
  }|t        | «      t        z  k  ry| j	                  dd¬«      }t
        j                  |«      D ]ž  }t        j                  |j                  d«      «      D ]u  }t        |j                  d«      j                  «       «      }|€Œ.t        |   j                  t        j                  z  sŒSt        | |«      sŒ`t!        |t"        dd¬«      c c S  Œ  y)	uÕ  Look for a charset declaration in EBCDIC-encoded markup.

    The ASCII regexes cannot see declarations in EBCDIC bytes, so when the
    head looks like EBCDIC text (dominated by high bytes), decode it through
    cp037 â€” the EBCDIC page whose letter and digit positions are shared by
    all variants â€” and scan the decoded text.  Only declarations naming a
    MAINFRAME-era encoding are honoured, and the declared encoding must
    actually decode the head.
    NÚcp037Úreplace)Úerrorsr   é   ú	text/html©ÚencodingÚ
confidenceÚlanguageÚ	mime_type)ÚlenÚ	translateÚ_MARKUP_HIGH_BYTESÚ_EBCDIC_SCAN_MIN_HIGH_FRACTIONÚdecodeÚ_EBCDIC_TAG_REÚfinditerÚ_EBCDIC_DECL_REÚgroupr   Ústripr
   Úerar   Ú	MAINFRAMEr   r   r   )ÚheadÚ
high_countÚdecodedÚtagÚmatchr   s         úU/root/workspace/ytshorts/venv/lib/python3.12/site-packages/chardet/pipeline/markup.pyÚ_detect_ebcdic_declarationr1   I   sê   € ô �T“œS §¡°Ô6HÓ!IÓJÑJ€JØ”C˜“IÔ >Ñ>Ò>ØØ�k‰k˜'¨)ˆkÓ4€Gô
 ×&Ñ& wÓ/ò ˆÜ$×-Ñ-¨c¯i©i¸«lÓ;ò 	ˆEÜ& u§{¡{°1£~×';Ñ';Ó'=Ó>ˆHàÑ$Ü˜XÑ&×*Ñ*¬[×-BÑ-BÓBÜ)¨$°Õ9ä&Ø%Ü7Ø!Ø)ô	ô ñ	ðð ó    c                ój  — d| dd vrydj                  | j                  dd«      dd «      }t        j                  |«      }|r[	 |j	                  d«      j                  d«      j                  «       }t        |«      }|�t        | |«      rt        |t        dd¬	«      S y# t        t        f$ r Y yw xY w)
aB  Check the first two lines of *data* for a PEP 263 encoding declaration.

    PEP 263 declarations (e.g. ``# -*- coding: utf-8 -*-``) are only valid
    on line 1 or line 2 of a Python source file.

    :param data: The raw byte data to scan.
    :returns: A :class:`DetectionResult` with confidence 0.95, or ``None``.
    ó   #NéÈ   ó   
é   r   Úasciiztext/x-pythonr   )ÚjoinÚsplitÚ
_PEP263_REÚsearchr'   r#   r(   ÚUnicodeDecodeErrorÚ
ValueErrorr   Ú_validate_bytesr   r   )ÚdataÚfirst_two_linesr/   Úraw_namer   s        r0   Ú_detect_pep263rC   l   sÀ   € ð �4˜˜�:ÑØà—j‘j §¡¨E°1Ó!5°b°qÐ!9Ó:€OÜ×Ñ˜oÓ.€EÙð	Ø—{‘{ 1“~×,Ñ,¨WÓ5×;Ñ;Ó=ˆHô # 8Ó,ˆØÐ¤O°D¸(Ô$CÜ"Ø!Ü3ØØ)ô	ð ð øô #¤JÐ/ò 	Ùð	ús   Á.B  Â B2Â1B2c                ó   — | sy| dt          }t        t        t        fD ]€  }|j	                  |«      }|sŒ	 |j                  d«      j                  d«      j                  «       }t        |«      }|€ŒTt        | |«      sŒa|t        u rdnd}t        |t        d|¬«      c S  t        |«      }|�|S t        | «      S # t        t        f$ r Y Œ®w xY w)a–  Scan the first bytes of *data* for a charset declaration.

    Checks for:

    1. ``<?xml ... encoding="..."?>``
    2. ``<meta charset="...">``
    3. ``<meta http-equiv="Content-Type" content="...; charset=...">``
    4. PEP 263 ``# -*- coding: ... -*-`` (first two lines only)

    :param data: The raw byte data to scan.
    :returns: A :class:`DetectionResult` with confidence 0.95, or ``None``.
    Nr   r8   ztext/xmlr   r   )Ú_SCAN_LIMITÚ_XML_ENCODING_REÚ_HTML5_CHARSET_REÚ_HTML4_CONTENT_TYPE_REr<   r'   r#   r(   r=   r>   r   r?   r   r   r1   rC   )r@   r+   Úpatternr/   rB   r   r   Úebcdic_results           r0   Údetect_markup_charsetrK   ‹   sä   € ñ Øà�”Ð€Dä$Ô&7Ô9OÐPò ˆØ—‘˜tÓ$ˆÚðØ Ÿ;™; q›>×0Ñ0°Ó9×?Ñ?ÓA�ô ' xÓ0ˆHØÑ#¬¸¸hÕ(GØ*1Ô5EÑ*E™JÈ;�	Ü&Ø%Ü7Ø!Ø'ô	ò ðô" /¨tÓ4€MØÐ ØÐä˜$ÓÐøô! '¬
Ð3ò Ùðús   ¶.B;Â;CÃCc                óè  — |j                   €|S t        j                  |j                   «      }|€|S |\  }}||vr|S t        |   }t	        | |«      s|S t	        | |«      s,t        ||j                  |j                  |j                  «      S t        «       }t        | t        |j                      |«      }t        | ||«      }	|	|kD  r,t        ||j                  |j                  |j                  «      S |S )a„  Promote a markup-declared encoding to its superset when structural evidence supports it.

    If the declared encoding has a known superset (per
    :data:`_MARKUP_SUPERSET_PROMOTIONS`), the superset validates the data,
    and the superset's structural score is materially better, return a new
    result using the superset encoding.  Otherwise return *markup_result*
    unchanged.
    )r   r   Úgetr
   r   r   r   r   r   r   r	   )
r@   Úmarkup_resultÚallowedÚ	promotionÚreported_codecÚsuperset_nameÚsuperset_infoÚctxÚ
base_scoreÚsuperset_scores
             r0   Úpromote_markup_supersetrW   µ   s  € ð ×ÑÐ%ØÐÜ+×/Ñ/°×0FÑ0FÓG€IØÐØÐØ$-Ñ!€N�MØ˜GÑ#ØÐÜ˜]Ñ+€Mä   }Ô5ØÐô
 !  ~Ô6ÜØØ×$Ñ$Ø×"Ñ"Ø×#Ñ#ó	
ð 	
ô Ó
€CÜ)¨$´¸×9OÑ9OÑ0PÐRUÓV€JÜ-¨d°MÀ3ÓG€NØ˜
Ò"ÜØØ×$Ñ$Ø×"Ñ"Ø×#Ñ#ó	
ð 	
ð Ðr2   c                ó(   — t        | dt         |«      S )zâCheck that *data* can be decoded under *encoding* without errors.

    Only validates the first ``_SCAN_LIMIT`` bytes to avoid decoding a
    full 200 kB input just to verify a charset declaration found in the
    header.
    N)r   rE   )r@   r   s     r0   r?   r?   ç   s   € ô !  l¤{Ð!3°XÓ>Ð>r2   )r+   ÚbytesÚreturnúDetectionResult | None)r@   rY   rZ   r[   )r@   rY   rN   r   rO   zfrozenset[str]rZ   r   )r@   rY   r   ÚstrrZ   Úbool)&Ú__doc__Ú
__future__r   ÚreÚchardet._utilsr   Úchardet.enumsr   Úchardet.pipeliner   r   r   Úchardet.pipeline.structuralr	   Úchardet.registryr
   r   r   Ú__annotations__rE   ÚcompileÚ
IGNORECASErF   rG   rH   Ú	MULTILINEr;   r$   r&   rY   Úranger!   r"   r1   rC   rK   rW   r?   © r2   r0   ú<module>rl      s9  ðÚ Bå "ã 	å 0Ý %ß WÑ WÝ @ß 6ð -Ø!ñ;Ð Ð7ó ð
 €à�2—:‘:Ø6¸¿¹óÐ ð �B—J‘JØ8¸"¿-¹-óÐ ð $˜Ÿ™ØBÀBÇMÁMóÐ ð ˆR�Z‰ZÐBÀBÇLÁLÓQ€
ð �—‘Ð3°R·]±]ÓC€Ø�"—*‘*ØPØ‡M�Mó€ñ ™5  uÓ-Ó.Ð ð "&Ð ó óFó>' ðT/Ø
ð/à"ð/ð ð/ð ó	/ôd?r2   