U
    qe0]                     @   sj   d dl Z ddlmZ ddlmZ G dd deZdd Ze d	e jZ	e d
e jZ
e dZdd ZdS )    N   )_BaseHTMLProcessor)make_safe_absolute_uric                       s  e Zd Zddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddhdZddedfdgdhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d}d~ddddddddddddddddddddddddddd(ddddddddddddddddd7ddddddddddddddddddddddddddddddddddddddddddddddRddddddddddddddddddddddddhZdddhZdddddddddddddddd&ddddddd ddddddddd	d
dddddddddddddh.Zdddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-dd.d/d0d1d2d3d4d5d6d7d8d9d:h'Ze	d;Z
d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcddded,dfh,Zdgdhdididjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{ddd|d}d~dddddd(dddddddddddddddddddddddddddddddddddddddddddΐdddddddddddԐddddddddddddhcZddddddddÐdĐdŐdƐdǐdȐdɐdʐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdՐd֐dאdؐdِdڐddݐdܐdh#Zdސdߐdddddddddddddddddddddddddddddddddddddddddd dddddddddddd	d
dddddddddddddddҐddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3dېd4d5d6dߐd7d8d9d:d;d<d=d>d?d@dAddBdCdDdEdFdGdHddIddJddKddLdddMdNdOdPhZdQZdQZdddd+d.d/d1d2hZdf fdSdT	Z fdUdVZ fdWdXZ fdYdZZd[d\ Zd]d^ Z fd_d`Zdadb Zdg fddde	Z  ZS (h  _HTMLSanitizeraabbrZacronymaddressareaarticleasideaudiobbig
blockquotebrbuttoncanvascaptioncentercitecodecolZcolgroupcommandZdatagriddatalistdddeldetailsdfndialogdirdivdldtemzevent-sourcefieldset
figcaptionfigurefontfooterformh1h2h3h4h5h6headerhriimginputinsZkbdkeygenlabellegendlimmapmenuZmeterZmulticolnavnextidnoscriptolZoptgroupoptionoutputppreprogressqssampsectionselectsmallZsoundsourcespacerspanstrikestrongsubsuptableZtbodytdtextareatfootththeadtimetrttuulvarvideoacceptzaccept-charset	accesskeyactionalignaltautocompleteZ	autofocusaxis
backgroundbalancebgcolorZbgpropertiesborderZbordercolorZbordercolordarkZbordercolorlightZbottompaddingZcellpaddingZcellspacingch	challengecharZcharoffcharsetcheckedZchoffclassclearcolorcolscolspancompactZcontenteditablecontrolscoordsdataZdatafldZdatapagesizeZdatasrcdatetimedefaultdelaydisabled	draggableZdynsrcZenctypeendfaceforframeZ
galleryimgZgutterheadersheighthiddenZ	hidefocushighhrefZhreflanghspaceiconidZ	inputmodeZismapkeytypelangZleftspacinglistlongdescloop	loopcountZloopendZ	loopstartlowZlowsrcmax	maxlengthmediamethodminmultiplenameZnohrefZnoshadenowrapopenZoptimumpatternpingz
point-sizeposterZpqgZpreloadpromptZ
radiogroupreadonlyrelz
repeat-maxz
repeat-minreplacerequiredrevZrightspacingrowsrowspanrulesscopeselectedshapesizesrcstartstepstylesummarysuppressZtabindextargettemplatetitleZ
toppaddingtypeZunselectableurnusemapvalignvaluevariablevolumeZvrmlvspacewidthwrapzxml:langappletscriptZazimuthzbackground-colorzborder-bottom-colorzborder-collapsezborder-colorzborder-left-colorzborder-right-colorzborder-top-colorcursor	directiondisplay	elevationfloatzfont-familyz	font-sizez
font-stylezfont-variantzfont-weightzletter-spacingzline-heightoverflowpausezpause-afterzpause-beforeZpitchzpitch-rangeZrichnessZspeakzspeak-headerzspeak-numeralzspeak-punctuationzspeech-ratestressz
text-alignztext-decorationztext-indentzunicode-bidizvertical-alignzvoice-familyzwhite-spacez
!importantaquaautoblackblockblueboldbothbottombrowncollapsedasheddottedfuchsiagraygreenitalicleftlimemaroonmediumnavynonenormalolivepointerpurpleredrightsilversolidtealtoptransparent	underlinewhiteyellowz\^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$
annotationzannotation-xmlZmactionZmaligngroupZ
malignmarkmathZmencloseZmerrorZmfencedZmfracZmglyphmiZ
mlabeledtrZmlongdivZmmultiscriptsmnmoZmoverZmpaddedZmphantomZmprescriptsZmrootZmrowmsZ	mscarriesZmscarryZmsgroupZmslinemspaceZmsqrtZmsrowmstackZmstyleZmsubZmsubsupZmsupmtableZmtdmtextZmtrZmunderZ
munderover	semanticsaccentZaccentunderZ
actiontypeZalignmentscopeZaltimgzaltimg-heightzaltimg-valignzaltimg-widthZalttextZbevelledZ	charaligncloseZcolumnalignZcolumnlinescolumnspacingZ
columnspanZcolumnwidthZcrossoutZdecimalpointZ
denomaligndepthZdisplaystyleedgeencodingZequalcolumnsZ	equalrowsfence	fontstyle
fontweightZframespacingZ
groupalignZindentalignZindentalignfirstZindentalignlastZindentshiftZindentshiftfirstZindentshiftlastZindenttargetZinfixlinebreakstyleZlargeoplengthZ	linebreakZlinebreakmultcharZlinebreakstyleZlineleadingZlinethicknesslocationZlongdivstyleZlquoteZlspaceZmathbackgroundZ	mathcolorZmathsizeZmathvariantmaxsizeZminlabelspacingminsizeZmovablelimitsnotationZnumalignotherpositionZrowalignZrowlinesZ
rowspacingZrquoteZrspaceZscriptlevelZscriptminsizeZscriptsizemultiplier	selection	separator
separatorsshiftsideZ
stackalignZstretchyZsubscriptshiftZsuperscriptshift	symmetricZvoffsetz
xlink:hrefz
xlink:showz
xlink:typexmlnsxmlns:xlinkZanimateZanimateColorZanimateMotionZanimateTransformcircledefsdescZellipsez	font-facezfont-face-namezfont-face-srcZforeignObjectgglyphZhkernlineZlinearGradientmarkermetadatazmissing-glyphmpathpathpolygonpolylineZradialGradientrectsetstopsvgswitchtextZtspanusezaccent-height
accumulateadditive
alphabeticzarabic-formZascentZattributeNameZattributeTypeZbaseProfilebboxbeginbyZcalcModez
cap-heightzcolor-renderingcontentcxcyddescentdurdxdyfillzfill-opacityz	fill-rulezfont-stretchfromfxfyg1g2z
glyph-nameZgradientUnitsZhangingzhoriz-adv-xzhoriz-origin-xZideographickZ	keyPointsZ
keySplinesZkeyTimesz
marker-endz
marker-midzmarker-startZmarkerHeightZmarkerUnitsZmarkerWidthZmathematicaloffsetopacityorientoriginzoverline-positionzoverline-thicknesszpanose-1Z
pathLengthpointsZpreserveAspectRatiorrefXrefYZrepeatCountZ	repeatDurZrequiredExtensionsZrequiredFeaturesrestartrotaterxryslopeZstemhZstemvz
stop-colorzstop-opacityzstrikethrough-positionzstrikethrough-thicknessstrokezstroke-dasharrayzstroke-dashoffsetzstroke-linecapzstroke-linejoinzstroke-miterlimitzstroke-opacityzstroke-widthZsystemLanguageztext-anchorto	transformu1u2zunderline-positionzunderline-thicknessunicodezunicode-rangezunits-per-emvaluesversionZviewBox
visibilitywidthsxzx-heightx1x2zxlink:actuatezxlink:arcrolez
xlink:rolezxlink:titlezxml:basez	xml:spaceyy1y2Z
zoomAndPanNapplication/xhtml+xmlc                    s(   t t| || d| _d| _d| _d S Nr   )superr   __init__unacceptablestackmathmlOKsvgOK)selfr   _type	__class__ r/mounts/lovelace/software/anaconda3/envs/qiime2-shotgun-2024.2/lib/python3.8/site-packages/feedparser/sanitizer.pyrV    s    z_HTMLSanitizer.__init__c                    s$   t t|   d| _d| _d| _d S rT  )rU  r   resetrW  rX  rY  )rZ  r\  r^  r_  r`    s    z_HTMLSanitizer.resetc           
         sT  | j }i }|| jks| jr|| jkr4|  jd7  _| jdrrt|dsr|dkr`|	d |dkrr|	d |dkrd|kr|  j
d7  _
|dkrd|kr|  jd7  _| j
r|| jkr| j}n| jrr|| jkrr| jsVdd	 | jD   fd
d	| jD } | _dd |D | _dd	 | jD   fdd	| jD } | _dd |D | _| j}| j||}| j}n|| jkrd S | j
s| jrtdd |D rd|kr|	d g }| |D ]t\}}|dkrd|kr| |}	|	r:|	||	f n6||kr|||}|dkr,t|}|	||f qtt| || d S )Nr   htmlr  r  )r  zhttp://www.w3.org/2000/svgr   )r  z"http://www.w3.org/1998/Math/MathMLc                 S   s   g | ]}|  qS r^  lower.0attrr^  r^  r_  
<listcomp>  s     z3_HTMLSanitizer.unknown_starttag.<locals>.<listcomp>c                    s   g | ]}| kr|qS r^  r^  re  r   rb  r^  r_  rg    s      c                 S   s   i | ]}|  |qS r^  rb  rh  r^  r^  r_  
<dictcomp>
  s      z3_HTMLSanitizer.unknown_starttag.<locals>.<dictcomp>c                 S   s   g | ]}|  qS r^  rb  rd  r^  r^  r_  rg    s     c                    s   g | ]}| kr|qS r^  r^  rh  rb  r^  r_  rg    s      c                 S   s   i | ]}|  |qS r^  rb  rh  r^  r^  r_  ri    s      c                 s   s    | ]}|d   dr|V  qdS )r   zxlink:N)
startswithrh  r^  r^  r_  	<genexpr>  s      z2_HTMLSanitizer.unknown_starttag.<locals>.<genexpr>)r  zhttp://www.w3.org/1999/xlinkr   r   )acceptable_attributesacceptable_elementsrY  "unacceptable_elements_with_end_tagrW  r[  endswithdictgetappendrX  mathml_elementsmathml_attributessvg_elementssvg_attr_mapsvg_attributessvg_elem_mapanynormalize_attrssanitize_styler   rU  r   unknown_starttag)
rZ  tagattrsrl  keymapZmixZclean_attrskeyr   Zclean_valuer\  rb  r_  r|    s`    







z_HTMLSanitizer.unknown_starttagc                    s   || j kr|| jkr"|  jd8  _| jrP|| jkrP|dkr| jr|  jd8  _n@| jr|| jkr| j||}|dkr| jr|  jd8  _nd S t	t
| | d S )Nr   r   r  )rm  rn  rW  rX  rs  rY  ru  rx  rq  rU  r   unknown_endtag)rZ  r}  r\  r^  r_  r  *  s    

z_HTMLSanitizer.unknown_endtagc                 C   s   d S Nr^  rZ  r  r^  r^  r_  	handle_pi9  s    z_HTMLSanitizer.handle_pic                 C   s   d S r  r^  r  r^  r^  r_  handle_decl<  s    z_HTMLSanitizer.handle_declc                    s   | j stt| | d S r  )rW  rU  r   handle_datar  r\  r^  r_  r  ?  s    z_HTMLSanitizer.handle_datac                 C   s  t dd|}t d|s"dS t dd| r8dS g }t d|D ]\}}|sVqH| | jkr|||d | d  qH|	d	d
  dkr|	 D ]}|| j
kr| j|s qq||d | d  qH| jrH| | jkrH||d | d  qHd|S )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   )rg   rj   marginpadding)recompilerQ   matchstripfindallrc  acceptable_css_propertiesrr  splitacceptable_css_keywordsvalid_css_valuesrY  acceptable_svg_propertiesjoin)rZ  r   cleanpropr   keywordr^  r^  r_  r{  C  s,    
z_HTMLSanitizer.sanitize_styler   c                    sL   t t| ||}|dkr|S td| j|d }|rB| S t| jS )Nr   z--[^>]*>   )	rU  r   parse_commentr  r  searchrawdatar~   len)rZ  r2   reportretr  r\  r^  r_  r  c  s    z_HTMLSanitizer.parse_comment)NrS  )r   )__name__
__module____qualname__rm  rl  rn  r  r  r  r  r  rs  rt  ru  rw  rv  rx  r  rV  r`  r|  r  r  r  r  r{  r  __classcell__r^  r^  r\  r_  r   "   sV  h  3*	0h(  ? r   c                 C   s<   t ||}| dd} ||  | }| dd}|S )Nz	<![CDATA[z&lt;![CDATA[z

)r   r   feedrB   r  )html_sourcer   r[  rC   rx   r^  r^  r_  _sanitize_htmlp  s    

r  s   ^\s*<!ENTITY([^>]*?)>s   ^\s*<!DOCTYPE([^>]*?)>s   \s+(\w+)\s+"(&#\w+;|[^&"]*)"c           	      C   s   t d| }|r| pd}| d|d  | |d d  }} t|}td|}t|}|rj|d pld}d| krd}nd}d}t|dkr|rd	d
 |D }|rdd	| d }t|||  } dd t
|D }|| |fS )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       r   s   netscaperss091nc                 S   s   g | ]}t |r|qS r^  )RE_SAFE_ENTITY_PATTERNr  )re  er^  r^  r_  rg    s   
z#replace_doctype.<locals>.<listcomp>s   <!DOCTYPE feed [
<!ENTITYs   >
<!ENTITY s   >
]>c                 S   s"   i | ]\}}| d | d qS )zutf-8)decode)re  r5  vr^  r^  r_  ri    s    z#replace_doctype.<locals>.<dictcomp>)r  r  r   RE_ENTITY_PATTERNr  rQ   RE_DOCTYPE_PATTERNrc  r  r  r  )	rx   r   headZentity_resultsZdoctype_resultsdoctyperJ  replacementZsafe_entitiesr^  r^  r_  replace_doctype  s4    	"

r  )r  ra  r   urlsr   r   r  r  	MULTILINEr  r  r  r  r^  r^  r^  r_  <module>   s         T
