U e%@sdZddddddddd d d d d dddgZddlZddlZddlmZmZddlmZddl m Z ddl m Z ddl m Z ddlmZddZdZe jddeid Ze jd!deid Ze jd"deid Ze d#Ze d$Ze d%Zed&ejjZed'jZe jd(deid Zed)Zed*ejj Z!d+d,Z"d-d.Z#d/d0Z$Gd1d2d2eZ%Gd3d4d4Z&Gd5d6d6Z'e'd d7d8Z(e'd d7d8Z)e'd d9d8Z*e'd d9d8Z+e'dd7d8Z,e'dd9d8Z-Gd:d;d;e&e j.Z/Gdd?d?e&e j2Z3Gd@dAdAe&e j4Z5GdBdCdCe j6Z7edDejj8Z9edEejj8Z:d}dFdZ;d~dGdZddJdZ?dKdLZ@dMdNZAGdOdPdPe1ZBeBe7jCdQ<ddRd ZDdSdTZEGdUdVdVeZFGdWdXdXZGGdYdZdZZHGd[d\d\eHe1ZIeIe7jCd]<Gd^d_d_eHe1ZJeJe7jCd`<GdadbdbeZKGdcddddeLZMGdedfdfeLZNGdgdhdheZOGdidjdjeHe1ZPePe7jCdk<Gdldmdme1ZQeQe7jCdn<dodpZRdqdrZSedsjTZUedtjTZVddvdZWeeWjeW_ddwdZXGdxdydye jYZYGdzd{d{e jZZ[d|dZ\eYZ]e[Z^dS)z.The ``lxml.html`` tool set for HTML handling. document_fromstringfragment_fromstringfragments_fromstring fromstringtostringElementdefsopen_in_browser submit_formfind_rel_links find_classmake_links_absoluteresolve_base_href iterlinks rewrite_linksparseN)MutableMapping MutableSet)partialurljoin)etree)r)SetMixincCs"|s|Stdtjj}|d|S)Nz^(\s*)u'z\1')recompileMsub)srr B/opt/hc_python/lib64/python3.8/site-packages/lxml/html/__init__.py__fix_docstring6sr"zhttp://www.w3.org/1999/xhtmlz9descendant-or-self::a[@rel]|descendant-or-self::x:a[@rel]x namespacesz7descendant-or-self::option|descendant-or-self::x:optionz3descendant-or-self::form|descendant-or-self::x:formztdescendant-or-self::*[@class and contains(concat(' ', normalize-space(@class), ' '), concat(' ', $class_name, ' '))]zdescendant-or-self::*[@id=$id]zstring()z&url\((["][^"]*["]|['][^']*[']|[^)]*)\)z@import "(.*?)"z%//label[@for=$id]|//x:label[@for=$id]z[^ ]+z%[^;=]*;\s*(?:url\s*=\s*)?(?P.*)$cCs`|dddkr |dddks@|dddkrT|dddkrT|dd|dfS||fSdS)Nr"'r )rposr r r!_unquote_matchSs@r*cCs4t|trt|ddSt|tr,t|ddS|SdS)z1Convert the result back into the input type. zutf-8)encodingunicodeN) issubclassbytesrstr)typresultr r r!_transform_resultZs     r2cCs@t|tr<|ddkr<|dttdtkr<|ddS|S)Nr{r}r') isinstancer/lenXHTML_NAMESPACEsplit)tagr r r!_nonses $r:cs`eZdZdZddZddZddZfdd Zd d Zd d Z ddZ ddZ ddZ Z S)Classesa*Provides access to an element's class attribute as a set-like collection. Usage:: >>> el = fromstring('') >>> classes = el.classes # or: classes = Classes(el.attrib) >>> classes |= ['block', 'paragraph'] >>> el.get('class') 'hidden large block paragraph' >>> classes.toggle('hidden') False >>> el.get('class') 'large block paragraph' >>> classes -= ('some', 'classes', 'block') >>> el.get('class') 'large paragraph' cCs||_t|jdd|_dS)Nclass) _attributesrget_get_class_value)self attributesr r r!__init__}szClasses.__init__cCsR|rtd|rtd||}||kr4dS||d||jd<dS)z[ Add a class. This has no effect if the class is already present. \sInvalid class name: %rN r<)rsearch ValueErrorr@r8appendjoinr>rAvalueclassesr r r!adds   z Classes.addcsbrtdrtdfdd|D}|rLd||jd<nd|jkr^|jd=dS)zn Remove a class if it is currently present. If the class is not present, do nothing. rDrEcsg|]}|kr|qSr r ).0namerLr r! sz#Classes.discard..rFr<N)rrGrHr@r8rJr>rKr rQr!discards  zClasses.discardcs,|rtd|rtd|t|dS)zw Remove a class; it must currently be present. If the class is not present, raise a KeyError. rDrEN)rrGrHsuperremoverArL __class__r r!rUs zClasses.removecCs|}||ko||kSN)r@r8)rArPrMr r r! __contains__szClasses.__contains__cCst|SrY)iterr@r8rAr r r!__iter__szClasses.__iter__cCst|SrY)r6r@r8r\r r r!__len__szClasses.__len__cCsH|}d}|D]}||kr||d}q|rDd||jd<dS)z. Add all names from 'values'. FTrFr<N)r@r8rIrJr>)rAvaluesrMextendedrLr r r!updates  zClasses.updatecCs|rtd|rtd||}z||d}Wn"tk r\||d}YnX|rtd||jd<n|jd=|S)z Add a class name if it isn't there yet, or remove it if it exists. Returns true if the class was added (and is now enabled) and false if it was removed (and is now disabled). rDrEFTrFr<) rrGrHr@r8rUrIrJr>)rArLrMenabledr r r!toggles     zClasses.toggle)__name__ __module__ __qualname____doc__rCrNrSrUrZr]r^rarc __classcell__r r rWr!r;ls  r;cseZdZd+fdd ZeddZejddZeddZed d Zed d Z ed dZ eddZ e jddZ e j ddZ ddZ ddZddZddZddZddZd,d d!Zd-d#d$Zd.d%d&Zd'd(Zd/d)d*ZZS)0 HtmlMixinNcst||dS)zset(self, key, value=None) Sets an element attribute. If no value is provided, or if the value is None, creates a 'boolean' attribute without value, e.g. "
" for ``form.set('novalidate')``. N)rTset)rAkeyrLrWr r!rjsz HtmlMixin.setcCs t|jS)zB A set-like wrapper around the 'class' attribute. )r;attribr\r r r!rMszHtmlMixin.classescCsBt|tst|}|r(|d|n|ddk r>|jd=dS)Nr<)r5r;AssertionErrorr@rjr?rl)rArMrLr r r!rMs cCs |jjS)z Returns the base URL, given when the page was parsed. Use with ``urlparse.urljoin(el.base_url, href)`` to get absolute URLs. )Z getroottreedocinfoURLr\r r r!base_urlszHtmlMixin.base_urlcCst|S)z0 Return a list of all the forms ) _forms_xpathr\r r r!formsszHtmlMixin.formscCs|jddtiddS)zt Return the element. Can be called from a child element to get the document's head. z//body|//x:bodyr#r$rxpathr7r\r r r!bodyszHtmlMixin.bodycCs|jddtiddS)zu Returns the element. Can be called from a child element to get the document's head. z//head|//x:headr#r$rrsr\r r r!head szHtmlMixin.headcCs2|d}|sdSt||d}|s&dS|dSdS)zN Get or set any