ó
^\kdc           @` s‘   d  d l  m Z m Z m Z d  d l Z d  d l m Z m Z d d l m	 Z	 d d l
 m Z d e f d „  ƒ  YZ d	 e	 e f d
 „  ƒ  YZ d S(   i    (   t   absolute_importt   divisiont   unicode_literalsN(   t   escapet   unescapei   (   t   HTMLTokenizer(   t
   tokenTypest   HTMLSanitizerMixinc        �   B` 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/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; 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 gc Z 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~ g 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  g# 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Ì dÍ dÎ dÏ dÐ dÑ dÒ d( dÓ dÔ dÕ dÖ d× dØ dÙ dÚ dÛ dÜ dÝ dÞ dß dà dá dâ d7 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dQ ddddddddddž dddddddd d!d"d#d$d%d&g� Z d'd¥ d(d(d(d)d*d+d,d-d.d/d0d1d2d3dÓ d× d4d5d6d7d8d8d9d:d;d<d<d<d=d>d
d?d@dAdBdCd$d$dDdEdFdGdHg- Z dIdJdKdLdMdNdOdPdQdRdSdTdUdVd¼ dWd¾ dXdYdZd[d\d]d^d_d-d`dÐ dadbdcdddedfdgdhdidjdkdldmdndodpdqd× drdsdß dtdudvdwdxdä dydz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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ºdEd»dFd¼d&d½dGdHd¾d¿dÀdÁg� Z dÛ dd d¤ dæ dü dDd¼g Z	 dWdÂdÃdadÄd� d{dzdydÅdœg Z
 dÆd d€ d� d‚ dÃdÇdÄdŽ dù d— dÈdÉd™ d  g Z dÊdËdÌdÍdÎdÏdÐdÑd½ d¾ dÃdÒd-dÓdÔd' dddedgdhdi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$g. 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g' Z dadbdcdœd£dŸd d¢g Z ddddddddddddddddddd d!d"d#g Z e e e Z e e e Z e Z e Z e Z e Z d$„  Z d%„  Z d&„  Z d'„  Z RS((  uA    sanitization of XHTML+MathML+SVG and of inline style attributes.u   au   abbru   acronymu   addressu   areau   articleu   asideu   audiou   bu   bigu
   blockquoteu   bru   buttonu   canvasu   captionu   centeru   citeu   codeu   colu   colgroupu   commandu   datagridu   datalistu   ddu   delu   detailsu   dfnu   dialogu   diru   divu   dlu   dtu   emu   event-sourceu   fieldsetu
   figcaptionu   figureu   footeru   fontu   formu   headeru   h1u   h2u   h3u   h4u   h5u   h6u   hru   iu   imgu   inputu   insu   keygenu   kbdu   labelu   legendu   liu   mu   mapu   menuu   meteru   multicolu   navu   nextidu   olu   outputu   optgroupu   optionu   pu   preu   progressu   qu   su   sampu   sectionu   selectu   smallu   soundu   sourceu   spaceru   spanu   strikeu   strongu   subu   supu   tableu   tbodyu   tdu   textareau   timeu   tfootu   thu   theadu   tru   ttu   uu   ulu   varu   videou   mactionu   mathu   merroru   mfracu   miu   mmultiscriptsu   mnu   mou   moveru   mpaddedu   mphantomu   mprescriptsu   mrootu   mrowu   mspaceu   msqrtu   mstyleu   msubu   msubsupu   msupu   mtableu   mtdu   mtextu   mtru   munderu
   munderoveru   noneu   animateu   animateColoru   animateMotionu   animateTransformu   clipPathu   circleu   defsu   descu   ellipseu	   font-faceu   font-face-nameu   font-face-srcu   gu   glyphu   hkernu   linearGradientu   lineu   markeru   metadatau   missing-glyphu   mpathu   pathu   polygonu   polylineu   radialGradientu   rectu   setu   stopu   svgu   switchu   textu   titleu   tspanu   useu   acceptu   accept-charsetu	   accesskeyu   actionu   alignu   altu   autocompleteu	   autofocusu   axisu
   backgroundu   balanceu   bgcoloru   bgpropertiesu   borderu   bordercoloru   bordercolordarku   bordercolorlightu   bottompaddingu   cellpaddingu   cellspacingu   chu	   challengeu   charu   charoffu   choffu   charsetu   checkedu   classu   clearu   coloru   colsu   colspanu   compactu   contenteditableu   controlsu   coordsu   datau   datafldu   datapagesizeu   datasrcu   datetimeu   defaultu   delayu   disabledu	   draggableu   dynsrcu   enctypeu   endu   faceu   foru   frameu
   galleryimgu   gutteru   headersu   heightu	   hidefocusu   hiddenu   highu   hrefu   hreflangu   hspaceu   iconu   idu	   inputmodeu   ismapu   keytypeu   leftspacingu   langu   listu   longdescu   loopu	   loopcountu   loopendu	   loopstartu   lowu   lowsrcu   maxu	   maxlengthu   mediau   methodu   minu   multipleu   nameu   nohrefu   noshadeu   nowrapu   openu   optimumu   patternu   pingu
   point-sizeu   posteru   pqgu   preloadu   promptu
   radiogroupu   readonlyu   relu
   repeat-maxu
   repeat-minu   replaceu   requiredu   revu   rightspacingu   rowsu   rowspanu   rulesu   scopeu   selectedu   shapeu   sizeu   srcu   startu   stepu   styleu   summaryu   suppressu   tabindexu   targetu   templateu
   toppaddingu   typeu   unselectableu   usemapu   urnu   valignu   valueu   variableu   volumeu   vspaceu   vrmlu   widthu   wrapu   xml:langu
   actiontypeu   columnalignu   columnlinesu   columnspacingu
   columnspanu   depthu   displayu   displaystyleu   equalcolumnsu	   equalrowsu   fenceu	   fontstyleu
   fontweightu   linethicknessu   lspaceu   mathbackgroundu	   mathcoloru   mathvariantu   maxsizeu   minsizeu   otheru   rowalignu   rowlinesu
   rowspacingu   rspaceu   scriptlevelu	   selectionu	   separatoru   stretchyu
   xlink:hrefu
   xlink:showu
   xlink:typeu   xmlnsu   xmlns:xlinku   accent-heightu
   accumulateu   additiveu
   alphabeticu   arabic-formu   ascentu   attributeNameu   attributeTypeu   baseProfileu   bboxu   beginu   byu   calcModeu
   cap-heightu	   clip-pathu   color-renderingu   contentu   cxu   cyu   du   dxu   dyu   descentu   duru   fillu   fill-opacityu	   fill-ruleu   font-familyu	   font-sizeu   font-stretchu
   font-styleu   font-variantu   font-weightu   fromu   fxu   fyu   g1u   g2u
   glyph-nameu   gradientUnitsu   hangingu   horiz-adv-xu   horiz-origin-xu   ideographicu   ku	   keyPointsu
   keySplinesu   keyTimesu
   marker-endu
   marker-midu   marker-startu   markerHeightu   markerUnitsu   markerWidthu   mathematicalu   offsetu   opacityu   orientu   originu   overline-positionu   overline-thicknessu   panose-1u
   pathLengthu   pointsu   preserveAspectRatiou   ru   refXu   refYu   repeatCountu	   repeatDuru   requiredExtensionsu   requiredFeaturesu   restartu   rotateu   rxu   ryu   slopeu   stemhu   stemvu
   stop-coloru   stop-opacityu   strikethrough-positionu   strikethrough-thicknessu   strokeu   stroke-dasharrayu   stroke-dashoffsetu   stroke-linecapu   stroke-linejoinu   stroke-miterlimitu   stroke-opacityu   stroke-widthu   systemLanguageu   text-anchoru   tou	   transformu   u1u   u2u   underline-positionu   underline-thicknessu   unicodeu   unicode-rangeu   units-per-emu   valuesu   versionu   viewBoxu
   visibilityu   widthsu   xu   x-heightu   x1u   x2u   xlink:actuateu   xlink:arcroleu
   xlink:roleu   xlink:titleu   xml:baseu	   xml:spaceu   yu   y1u   y2u
   zoomAndPanu   color-profileu   cursoru   filteru   masku   altGlyphu   feImageu   textpathu   trefu   azimuthu   background-coloru   border-bottom-coloru   border-collapseu   border-coloru   border-left-coloru   border-right-coloru   border-top-coloru	   directionu	   elevationu   floatu   letter-spacingu   line-heightu   overflowu   pauseu   pause-afteru   pause-beforeu   pitchu   pitch-rangeu   richnessu   speaku   speak-headeru   speak-numeralu   speak-punctuationu   speech-rateu   stressu
   text-alignu   text-decorationu   text-indentu   unicode-bidiu   vertical-alignu   voice-familyu   white-spaceu   autou   aquau   blacku   blocku   blueu   boldu   bothu   bottomu   brownu   collapseu   dashedu   dottedu   fuchsiau   grayu   greenu
   !importantu   italicu   leftu   limeu   maroonu   mediumu   navyu   normalu   oliveu   pointeru   purpleu   redu   rightu   solidu   silveru   tealu   topu   transparentu	   underlineu   whiteu   yellowu   ed2ku   ftpu   httpu   httpsu   ircu   mailtou   newsu   gopheru   nntpu   telnetu   webcalu   xmppu   calltou   feedu   aimu   rsyncu   tagu   sshu   sftpu   rtspu   afsc         C` s¡   | d } | t  t j ƒ  ƒ k r/ t | } n  | t d t d t d f k r† | d |  j k rs |  j | | ƒ S|  j | | ƒ Sn | t d k r™ n | Sd  S(   Nu   typeu   StartTagu   EndTagu   EmptyTagu   nameu   Comment(   t   listR   t   keyst   allowed_elementst   allowed_tokent   disallowed_token(   t   selft   tokent
   token_type(    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyt   sanitize_token¢   s    
c         C` sÓ  d | k rÏt  g  | d d  d  d … D]' \ } } | |  j k r' | | f ^ q' ƒ } x’ |  j D]‡ } | | k ry qa n  t j d d t | | ƒ ƒ j ƒ  } | j d d ƒ } t j d | ƒ ra | j	 d ƒ d |  j
 k ra | | =qa qa WxC |  j D]8 } | | k rö t j d	 d
 t | | ƒ ƒ | | <qö qö W| d |  j k rqd | k rqt j d | d ƒ rq| d =n  d | k r—|  j | d ƒ | d <n  g  t | j ƒ  ƒ D] \ } } | | g ^ qª| d <n  | S(   Nu   dataiÿÿÿÿu   [` - -Â \s]+u    u   ï¿½u   ^[a-z0-9][-+.a-z0-9]*:u   :i    u   url\s*\(\s*[^#\s][^)]+?\)u    u   nameu
   xlink:hrefu   ^\s*[^#\s].*u   style(   t   dictt   allowed_attributest   attr_val_is_urit   ret   subR   t   lowert   replacet   matcht   splitt   allowed_protocolst   svg_attr_val_allows_reft   svg_allow_local_hreft   searcht   sanitize_cssR   t   items(   R   R   R   t   namet   valt   attrst   attrt   val_unescaped(    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyR   ´   s6    !$	
8c         C` s  | t  d k r% d | d | d <ns | d r† d j g  | d D]" \ } } d | t | ƒ f ^ q@ ƒ } d | d | f | d <n d | d | d <| j d	 ƒ rÀ | d d
  d | d <n  | d t t  j ƒ  ƒ k ré d | d <n t  d | d <| d =| S(   Nu   EndTagu   </%s>u   nameu   datau    u    %s="%s"u   <%s%s>u   <%s>u   selfClosingiÿÿÿÿu   />u   typeu
   Characters(   R   t   joinR   t   getR   R	   (   R   R   R   t   kt   vR"   (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyR   Ò   s    
<c         C` sc  t  j d ƒ j d | ƒ } t  j d | ƒ s1 d St  j d | ƒ sG d Sg  } xt  j d | ƒ D]ò \ } } | sx q` n  | j ƒ  |  j k r© | j | d | d ƒ q` | j d	 ƒ d
 j ƒ  d k r!x‡ | j ƒ  D], } | |  j	 k rÕ t  j d | ƒ rÕ PqÕ qÕ W| j | d | d ƒ q` | j ƒ  |  j
 k r` | j | d | d ƒ q` q` Wd j | ƒ S(   Nu   url\s*\(\s*[^\s)]+?\s*\)\s*u    u@   ^([:,;#%.\sa-zA-Z0-9!]|\w-\w|'[\s\w]+'|"[\s\w]+"|\([\d,\s]+\))*$u    u    ^\s*([-\w]+\s*:[^:;]*(;\s*|$))*$u   ([-\w]+)\s*:\s*([^:;]*)u   : u   ;u   -i    u
   backgroundu   borderu   marginu   paddingu\   ^(#[0-9a-f]+|rgb\(\d+%?,\d*%?,?\d*%?\)?|\d{0,2}\.?\d{0,2}(cm|em|ex|in|mm|pc|pt|px|%|,|\))?)$(   u
   backgroundu   borderu   marginu   padding(   R   t   compileR   R   t   findallR   t   allowed_css_propertiest   appendR   t   acceptable_css_keywordst   allowed_svg_propertiesR%   (   R   t   stylet   cleant   propt   valuet   keyword(    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyR   å   s*    	 (   t   __name__t
   __module__t   __doc__t   acceptable_elementst   mathml_elementst   svg_elementst   acceptable_attributest   mathml_attributest   svg_attributesR   R   R   t   acceptable_css_propertiesR-   t   acceptable_svg_propertiest   acceptable_protocolsR
   R   R+   t   allowed_css_keywordsR.   R   R   R   R   R   (    (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyR   
   s   									t   HTMLSanitizerc           B` s,   e  Z d e e e e d d  „ Z d „  Z RS(   c      
   C` s)   t  j |  | | | | | | d | ƒd  S(   Nt   parser(   R   t   __init__(   R   t   streamt   encodingt	   parseMetat
   useChardett   lowercaseElementNamet   lowercaseAttrNameRB   (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyRC     s    c         c` s;   x4 t  j |  ƒ D]# } |  j | ƒ } | r | Vq q Wd  S(   N(   R   t   __iter__R   (   R   R   (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyRJ     s    N(   R4   R5   t   Nonet   Truet   FalseRC   RJ   (    (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyRA     s   	(   t
   __future__R    R   R   R   t   xml.sax.saxutilsR   R   t	   tokenizerR   t	   constantsR   t   objectR   RA   (    (    (    sE   /var/www/testScraper/venv/build/pip/pip/_vendor/html5lib/sanitizer.pyt   <module>   s   ù