
    i0]                         S SK r SSKJr  SSKJr   " S S\5      rS r\ R                  " S\ R                  5      r	\ R                  " S	\ R                  5      r
\ R                  " S
5      rS rg)    N   )_BaseHTMLProcessor)make_safe_absolute_uric                      ^  \ rS rSr1 Skr1 Skr1 Skr1 Skr1 Skr\	R                  " S5      r1 Skr1 S	kr1 S
kr1 SkrSrSr1 SkrSU 4S jjrU 4S jrU 4S jrU 4S jrS rS rU 4S jrS rSU 4S jjrSrU =r$ )_HTMLSanitizer"   >d   abimpqsubrdddldtemh1h2h3h4h5h6hrlioltdthtrttulbigcoldeldfndirdivimginskbdmapnavpresubsupvarabbrareacitecodefontformmenusampspantimeasideaudioinputlabelmetersmallsoundtabletbodytfoottheadvideobuttoncanvascenterdialogfigurefooterheaderkeygenlegendnextidoptionoutputselectsourcespacerstrikestrongacronymaddressarticlecaptioncommanddetailssectioncolgroupdatagriddatalistfieldsetmulticolnoscriptoptgroupprogresstextarea
blockquote
figcaptionevent-source>   chidaltr(   endforlowmaxminpqgrelrevsrcurnr3   axischarr5   colsdatafacer8   highhreficonlanglistloopnameopenpingrowssizer;   steptypevrmlwrapalignchoffclassclearcolordelayframeismapr@   mediarulesscopeshapestartstyletitlevaluewidthacceptactionbordercoordsdynsrcgutterheighthiddenhspacelowsrcmethodnohrefnowrapposterprompttargetusemapvalignvolumevspacebalancebgcolorcharoffcharsetcheckedcolspancompactdataflddatasrcdefaultenctypeheaderskeytypeloopendnoshadeoptimumpatternpreloadreplacerowspansummarycontrolsdatetimedisabledhreflanglongdescmultiplereadonlyrequiredselectedsuppresstabindextemplatevariable	accesskey	autofocus	challenge	draggable	hidefocus	inputmode	loopcount	loopstart	maxlength
background
galleryimg
radiogroup
toppaddingbordercolorcellpaddingcellspacingleftspacingautocompletebgpropertiesdatapagesizerightspacingunselectablebottompaddingbordercolordarkcontenteditablebordercolorlightxml:lang
point-size
repeat-max
repeat-minaccept-charset>   r   appletscript>.   r7   r   r   floatpausepitchspeakr   cursorr   stressr   azimuthdisplayoverflowrichness	direction	elevation	font-size
font-style
text-alignfont-familyfont-weightline-heightpause-afterpitch-rangespeech-ratetext-indentwhite-spaceborder-colorfont-variantpause-beforespeak-headerunicode-bidivoice-familyspeak-numeralletter-spacingvertical-alignborder-collapsetext-decorationbackground-colorborder-top-colorborder-left-colorspeak-punctuationborder-right-colorborder-bottom-color>'   redtopaquaautoblueboldbothgrayleftlimenavynonetealblackblockbrowngreenoliverightsolidwhitebottomrK   dasheddotteditalicmaroonmediumnormalr   purplesilveryellowfuchsiapointercollapse	underlinetransparent
!importantz\^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$>,   mimnmomsmtdmtrmathmrowmsubmsupr)  mfracmovermrootmsqrtmsrowmtextmerrormglyphmslinemspacemstackmstylemtablemundermactionmfencedmpaddedmscarrymsgroupmsubsupmenclosemlongdivmphantom	mscarries	semantics
annotation
malignmark
mlabeledtr
munderovermaligngroupmprescriptsmmultiscriptsannotation-xml>c   rn   r(   rx   edger8   r   r   sider   closedepthfencer   othershiftr   xmlnsaccentaltimgr   lengthlquotelspacerquoterspacealttextr   largeopmaxsizeminsizer   voffsetbevelledcrossoutencodinglocationmathsizenotationnumalignr   positionrowalignrowlinesstretchy	charalign	equalrows	fontstyle	linebreak	mathcolor	selection	separator	symmetric
actiontype
columnspan
denomalign
fontweight
groupalign
rowspacing
separators
stackalignaccentundercolumnaligncolumnlinescolumnwidthindentalignindentshiftlineleadingmathvariantscriptleveldecimalpointdisplaystyleequalcolumnsframespacingindenttargetlongdivstylecolumnspacinglinethicknessmovablelimitsscriptminsizealignmentscopelinebreakstylemathbackgroundsubscriptshiftindentalignlastindentshiftlastminlabelspacingindentalignfirstindentshiftfirstsuperscriptshiftlinebreakmultcharinfixlinebreakstylescriptsizemultiplier
xlink:href
xlink:show
xlink:typexmlns:xlinkaltimg-widthaltimg-heightaltimg-valign>#   r	   gsetsvgusedefsdesclinepathrectstoptextglyphhkernmpathr   tspancirclemarkerswitchanimateellipsepolygonmetadatapolylineanimateColoranimateMotionforeignObjectlinearGradientradialGradientanimateTransform	font-facefont-face-srcmissing-glyphfont-face-name>   dkrxybycxcydxdyfxfyg1g2rn   rxrytou1u2x1x2y1y2durrp   rs   rt   bboxfillfromr   r   r  refXrefYr   beginr   r   slopestemhstemvr   ru  ascentr   offsetorientoriginpointsrotatestroker   valueswidthscontentdescentr   hangingopacityrestartunicodeversionviewBoxadditivecalcModekeyTimes	keyPoints	repeatDur	transform
accumulate
alphabetic
keySplines
pathLength
visibility
zoomAndPanbaseProfileideographicmarkerUnitsmarkerWidthrepeatCountmarkerHeightmathematicalattributeNameattributeTypegradientUnitssystemLanguagerequiredFeaturesrequiredExtensionspreserveAspectRatiopanose-1x-heightxml:baser   	fill-ruler  	xml:space
cap-heightr  
glyph-name
marker-end
marker-mid
stop-colorr  
xlink:roler  r  arabic-formr  r  horiz-adv-xtext-anchorxlink:titler  fill-opacityfont-stretchr  marker-startstop-opacitystroke-widthunits-per-emaccent-heightunicode-rangexlink:actuatexlink:arcrolehoriz-origin-xstroke-linecapstroke-opacitycolor-renderingstroke-linejoinstroke-dasharrayoverline-positionstroke-dashoffsetstroke-miterlimitoverline-thicknessunderline-positionunderline-thicknessstrikethrough-positionstrikethrough-thicknessN>   r  r  r4  r@  rD  rK  rL  rN  c                 V   > [         [        U ]  X5        SU l        SU l        SU l        g Nr   )superr   __init__unacceptablestackmathmlOKsvgOK)selfr  _type	__class__s      A/app/mltbenv/lib/python3.13/site-packages/feedparser/sanitizer.pyr[  _HTMLSanitizer.__init__  s(    nd,X=!"
    c                 T   > [         [        U ]  5         SU l        SU l        SU l        g rY  )rZ  r   resetr\  r]  r^  )r_  ra  s    rb  rf  _HTMLSanitizer.reset  s&    nd)+!"
rd  c                 X  > U R                   n0 nXR                  ;  d  U R                  (       Gah  XR                  ;   a  U =R                  S-  sl        U R
                  R                  S5      (       aM  [        U5      R                  S5      (       d.  US:X  a  UR                  S5        US:X  a  UR                  S5        US:X  a  SU;   a  U =R                  S-  sl
        US:X  a  SU;   a  U =R                  S-  sl        U R                  (       a  XR                  ;   a  U R                  nGOgU R                  (       GaE  XR                  ;   Ga5  U R                  (       d  U R                   Vs/ s H  oUR!                  5       PM     nnU R                   Vs/ s H  owU;  d  M
  UPM     nnX`l        U Vs0 s H  owR!                  5       U_M     snU l        U R                   Vs/ s H  oUR!                  5       PM     nnU R                   Vs/ s H  owU;  d  M
  UPM     nnX`l        U Vs0 s H  owR!                  5       U_M     snU l        U R                  nU R"                  R                  X5      nU R                  nOXR                  ;  a  g U R                  (       d  U R                  (       a.  [%        S U 5       5      (       a  S	U;  a  UR                  S	5        / n	U R'                  U5       Hz  u  pU
S
:X  a4  S
U;   a.  U R)                  U5      nU(       a  U	R                  X45        M=  M?  X;   d  MF  UR                  X5      n
U
S:X  a  [+        U5      nU	R                  X45        M|     [,        [.        U ]c  X5        g s  snf s  snf s  snf s  snf s  snf s  snf )Nr   htmlru  r  )ru  zhttp://www.w3.org/2000/svgrI  )ru  z"http://www.w3.org/1998/Math/MathMLc              3   Z   #    U  H!  oS    R                  S5      (       d  M  Uv   M#     g7f)r   zxlink:N)
startswith).0r	   s     rb  	<genexpr>2_HTMLSanitizer.unknown_starttag.<locals>.<genexpr>  s     Bu!!(AAAus   +	+)r  zhttp://www.w3.org/1999/xlinkr   r   )acceptable_attributesacceptable_elementsr^  "unacceptable_elements_with_end_tagr\  r`  endswithdictgetappendr]  mathml_elementsmathml_attributessvg_elementssvg_attr_mapsvg_attributeslowersvg_elem_mapanynormalize_attrssanitize_styler   rZ  r   unknown_starttag)r_  tagattrsro  keymapattrr{  r	   mixclean_attrskeyr   clean_valuera  s                rb  r  _HTMLSanitizer.unknown_starttag  s    $ : :...$***===&&!+& zz""6**E{w//e|%LMf}%TU f}!PTY!Y"e| G5 P

a
 }}(<(<!<(,(>(>%'8'8 8 ((6:6I6IJ6IdZZ\6IEJ&*&9&9L&9e^1&9CL*/'?B(Cs!As(CD%6:6G6GH6GdZZ\6GEH&*&7&7J&7E>1&7CJ(-%?B(Cs!As(CD%(,(;(;%''++C5**444 ==DJJBuBCCF%OLL!PQ..u5JCg~'-B"B"11%8&&'9: -jj*&=259E""C<0 6 	nd4SFC KL(CHJ(Cs0   3N	N)N;N+N	N"!N"3N'c                   > XR                   ;  a  XR                  ;   a  U =R                  S-  sl        U R                  (       a<  XR                  ;   a-  US:X  a&  U R                  (       a  U =R                  S-  sl        OiU R
                  (       aW  XR                  ;   aH  U R                  R                  X5      nUS:X  a&  U R
                  (       a  U =R
                  S-  sl        Og [        [        U ]/  U5        g )Nr   rI  r  )rp  rq  r\  r]  rv  r^  rx  r|  rt  rZ  r   unknown_endtag)r_  r  ra  s     rb  r  _HTMLSanitizer.unknown_endtag*  s    ...===&&!+&}}(<(<!<&=T]]MMQ&M'8'8 8''++C5%<DJJJJ!OJnd237rd  c                     g N r_  r  s     rb  	handle_pi_HTMLSanitizer.handle_pi9      rd  c                     g r  r  r  s     rb  handle_decl_HTMLSanitizer.handle_decl<  r  rd  c                 P   > U R                   (       d  [        [        U ]  U5        g g r  )r\  rZ  r   handle_data)r_  r  ra  s     rb  r  _HTMLSanitizer.handle_data?  s     %%.$3D9 &rd  c                    [         R                  " S5      R                  SU5      n[         R                  " SU5      (       d  g[         R                  " SSU5      R	                  5       (       a  g/ n[         R
                  " SU5       GH$  u  p4U(       d  M  UR                  5       U R                  ;   a  UR                  US-   U-   S-   5        MI  UR                  S	5      S
   R                  5       S;   ag  UR                  5        H7  nXPR                  ;  d  M  U R                  R                  U5      (       a  M6    M     UR                  US-   U-   S-   5        M  U R                  (       d  M  UR                  5       U R                  ;   d  GM
  UR                  US-   U-   S-   5        GM'     SR                  U5      $ )Nzurl\s*\(\s*[^\s)]+?\s*\)\s* z@^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$ z\s*[-\w]+\s*:\s*[^:;]*;?z([-\w]+)\s*:\s*([^:;]*)z: ;-r   )r   r   marginpadding)recompiler0   matchstripfindallr{  acceptable_css_propertiesru  splitacceptable_css_keywordsvalid_css_valuesr^  acceptable_svg_propertiesjoin)r_  r   cleanpropr   keywords         rb  r  _HTMLSanitizer.sanitize_styleC  sa   

9:>>sEJ xx_afgg 66-r59??AA::&@%HKDzz|t===TD[50367C#))+/\\${{}G#+G+GG$($9$9$?$?$H$H  - LLu!4s!:;

0N0N NTD[50367 I" xxrd  c                    > [         [        U ]  X5      nUS:  a  U$ [        R                  " S5      R                  U R                  US-   5      nU(       a  UR                  5       $ [        U R                  5      $ )Nr   z--[^>]*>   )	rZ  r   parse_commentr  r  searchrawdatarp   len)r_  r   reportretr  ra  s        rb  r  _HTMLSanitizer.parse_commentc  sc    ND7B!8J 

;'..t||QqSA99;4<<  rd  )r]  r^  ry  rz  r|  rx  r\  )Nzapplication/xhtml+xml)r   )__name__
__module____qualname____firstlineno__rp  ro  rq  r  r  r  r  r  rv  rw  rx  rz  ry  r|  r  r[  rf  r  r  r  r  r  r  r  __static_attributes____classcell__)ra  s   @rb  r   r   "   s    eNN`*&/!d(T zz	-O^dN$LNMN^ LL	!=G~8:@
! 
!rd  r   c                     [        X5      nU R                  SS5      n UR                  U 5        UR                  5       nUR	                  5       R                  SS5      nU$ )Nz	<![CDATA[z&lt;![CDATA[z

)r   r   feedrT   r  )html_sourcer  r`  r   r}   s        rb  _sanitize_htmlr  p  sR    x'A%%k>BKFF;88:D::<-DKrd  s   ^\s*<!ENTITY([^>]*?)>s   ^\s*<!DOCTYPE([^>]*?)>s   \s+(\w+)\s+"(&#\w+;|[^&"]*)"c                    [         R                  " SU 5      nU=(       a    UR                  5       =(       d    SnU SUS-    XS-   S p[        R	                  U5      n[        R                  SU5      n[        R	                  U5      nU=(       a    US   =(       d    SnSUR                  5       ;   a  SnOSnSn[        U5      S:X  aS  U(       aL  U Vs/ s H!  n[        R                  U5      (       d  M  UPM#     n	nU	(       a  S	S
R                  U	5      -   S-   n[        R                  Xr5      U -   n [        R	                  U5       V
Vs0 s H&  u  pU
R                  S5      UR                  S5      _M(     n	n
nX`U	4$ s  snf s  snn
f )zStrips and replaces the DOCTYPE, returns (rss_version, stripped_data)

rss_version may be 'rss091n' or None
stripped_data is the same XML document with a replaced DOCTYPE
s   <\wNr   rd  r   s   netscaperss091ns   <!DOCTYPE feed [
<!ENTITYs   >
<!ENTITY s   >
]>zutf-8)r  r  r   RE_ENTITY_PATTERNr  r0   RE_DOCTYPE_PATTERNr{  r  RE_SAFE_ENTITY_PATTERNr  r  decode)r}   r   headentity_resultsdoctype_resultsdoctyper  replacementesafe_entitiesr  vs               rb  replace_doctyper    s    IIgt$E#ekkm)rEhuQwAgh$ '..t4N  d+D )006O4/!"4;Ggmmo% K
?q ^ $
#%++A. # 	 

 7)..}=>"#K !!+4t;D
 +22;??DA 	
188G,,?   -''!
s   F 6F -F)r  ri  r   urlsr   r   r  r  	MULTILINEr  r  r  r  r  rd  rb  <module>r     sl   8 
 $ (K!' K!\ JJ8",,G  ZZ :BLLI  $DE ,(rd  