o
    éT•jc0  ã                   @   sœ   d Z ddlZddlZddlmZ g d¢ZG dd„ dƒZG dd„ dƒZd	d
„ Z	G dd„ de
ƒZG dd„ de
ƒZG dd„ dƒZ[G dd„ dƒZG dd„ dƒZdS )z4Implementation of the DOM Level 3 'LS-Load' feature.é    N)Ú
NodeFilter)Ú
DOMBuilderÚDOMEntityResolverÚDOMInputSourcec                   @   s\   e Zd ZdZdZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZdZdZdZdZdS )ÚOptionsz±Features object that has variables set for each DOMBuilder feature.

    The DOMBuilder class uses an instance of this class to pass settings to
    the ExpatBuilder class.
    é   TFN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
namespacesÚnamespace_declarationsÚ
validationÚexternal_parameter_entitiesÚexternal_general_entitiesÚexternal_dtd_subsetÚvalidate_if_schemaÚvalidateÚdatatype_normalizationÚcreate_entity_ref_nodesÚentitiesÚwhitespace_in_element_contentÚcdata_sectionsÚcommentsÚcharset_overrides_xml_encodingÚinfosetÚsupported_mediatypes_onlyÚerrorHandlerÚfilter© r   r   ú)/usr/lib/python3.10/xml/dom/xmlbuilder.pyr      s*    	r   c                
   @   s`  e Zd ZdZdZdZdZdZdZdZ	eeee	fZ
dd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zi ddg“ddg“ddg“ddg“ddg“ddg“d d g“d!d!g“d"d"g“d#d#g“d$d"d$g“d%d%g“d&d&g“d'd'g“d(d(g“d)d)g“d*d*g“d+gd,gd-gg g d.¢d/gd0gd1gd2œ¥Zd3d4„ Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ ZdS )=r   Nr   é   é   é   c                 C   s   t ƒ | _d S ©N)r   Ú_options©Úselfr   r   r    Ú__init__9   s   zDOMBuilder.__init__c                 C   ó   | j S r$   ©ÚentityResolverr&   r   r   r    Ú_get_entityResolver<   ó   zDOMBuilder._get_entityResolverc                 C   ó
   || _ d S r$   r*   )r'   r+   r   r   r    Ú_set_entityResolver>   ó   
zDOMBuilder._set_entityResolverc                 C   r)   r$   ©r   r&   r   r   r    Ú_get_errorHandlerA   r-   zDOMBuilder._get_errorHandlerc                 C   r.   r$   r1   )r'   r   r   r   r    Ú_set_errorHandlerC   r0   zDOMBuilder._set_errorHandlerc                 C   r)   r$   ©r   r&   r   r   r    Ú_get_filterF   r-   zDOMBuilder._get_filterc                 C   r.   r$   r4   )r'   r   r   r   r    Ú_set_filterH   r0   zDOMBuilder._set_filterc                 C   s„   |   |¡r8|r	dp
d}z| jt|ƒ|f }W n ty'   tj d|f ¡d ‚w |D ]\}}t| j||ƒ q*d S tj 	dt
|ƒ ¡‚)Nr   r   zunsupported feature: %rzunknown feature: )ÚsupportsFeatureÚ	_settingsÚ_name_xformÚKeyErrorÚxmlÚdomÚNotSupportedErrÚsetattrr%   ÚNotFoundErrÚrepr)r'   ÚnameÚstateÚsettingsÚvaluer   r   r    Ú
setFeatureK   s   
ÿÿÿÿzDOMBuilder.setFeaturec                 C   s   t | jt|ƒƒS r$   )Úhasattrr%   r9   )r'   rA   r   r   r    r7   Y   ó   zDOMBuilder.supportsFeaturec                 C   s   t |ƒ|rdpdf}|| jv S )Nr   r   )r9   r8   )r'   rA   rB   Úkeyr   r   r    ÚcanSetFeature\   s   
zDOMBuilder.canSetFeature©r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r   ©r   r   ©r   r   )r   r   ©r   r   )r   r   )r   r   ©r   r   ©r   r   )r   r   )r   r   ©r   r   ©r   r   ©r   r   )	rJ   rK   rL   rM   rO   )r   r   rN   rP   rR   ©r   r   ©r   r   ©r   r   )rP   rQ   rR   )r   r   )r   r   rS   rT   rU   c                 C   s„   t |ƒ}zt| j|ƒW S  tyA   |dkr7| j}|jo4|jo4|jo4|jo4|jp3|j	p3|j
p3|jp3|j  Y S tj dt|ƒ ¡‚w )Nr   zfeature %s not known)r9   Úgetattrr%   ÚAttributeErrorr   r   r   r   r   r   r   r   r   r;   r<   r?   r@   )r'   rA   ÚxnameÚoptionsr   r   r    Ú
getFeature¢   s2   ÿþýÿþýüü	ôzDOMBuilder.getFeaturec                 C   s.   | j r| j  d |¡}ntƒ  d |¡}|  |¡S r$   )r+   ÚresolveEntityr   Úparse)r'   ÚuriÚinputr   r   r    ÚparseURI´   s   
zDOMBuilder.parseURIc                 C   sR   t   | j¡}| j|_| j|_|j}|d u r#|jr#dd l}|j |j¡}|  	||¡S ©Nr   )
Úcopyr%   r   r   Ú
byteStreamÚsystemIdÚurllib.requestÚrequestÚurlopenÚ_parse_bytestream)r'   r^   rY   ÚfpÚurllibr   r   r    r\   »   s   zDOMBuilder.parsec                 C   s   || j vr	tdƒ‚tdƒ‚)Nznot a legal actionzHaven't written this yet...)Ú_legal_actionsÚ
ValueErrorÚNotImplementedError)r'   r^   ÚcnodeÚactionr   r   r    ÚparseWithContextÅ   s   
zDOMBuilder.parseWithContextc                 C   s    dd l }|jj |¡}| |¡S r`   )Úxml.dom.expatbuilderr<   ÚexpatbuilderÚmakeBuilderÚ	parseFile)r'   ÚstreamrY   r;   Úbuilderr   r   r    rg   Ê   s   
zDOMBuilder._parse_bytestream)r   r	   r
   r+   r   r   ÚACTION_REPLACEÚACTION_APPEND_AS_CHILDRENÚACTION_INSERT_AFTERÚACTION_INSERT_BEFORErj   r(   r,   r/   r2   r3   r5   r6   rE   r7   rI   r8   rZ   r_   r\   ro   rg   r   r   r   r    r   ,   sÞ    ÿ	ÿÿÿýÿûÿù	ÿ÷ÿõÿóÿñÿïÿíþëÿèÿæÿäÿâ ÿà"ÿÞ%ÿÿÿÿÿÿÇ=
r   c                 C   s   |   ¡  dd¡S )Nú-Ú_)ÚlowerÚreplace)rA   r   r   r    r9   Ð   rG   r9   c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )r   )Ú_openerc                 C   s¤   |d usJ ‚t ƒ }||_||_|  ¡  |¡|_|  |¡|_dd l}dd l	}|j
 |¡}|\}}}	}
}}|	rP|	 d¡sP| |	¡d }	|||	|
||f}|j
 |¡|_|S )Nr   ú/)r   ÚpublicIdrc   Ú_get_openerÚopenrb   Ú_guess_media_encodingÚencodingÚ	posixpathÚurllib.parser\   ÚurlparseÚendswithÚdirnameÚ
urlunparseÚbaseURI)r'   r€   rc   Úsourcer…   ri   ÚpartsÚschemeÚnetlocÚpathÚparamsÚqueryÚfragmentr   r   r    r[   ×   s   zDOMEntityResolver.resolveEntityc                 C   s,   z| j W S  ty   |  ¡ | _ | j  Y S w r$   )r~   rW   Ú_create_openerr&   r   r   r    r�   í   s   

þzDOMEntityResolver._get_openerc                 C   s   dd l }|j ¡ S r`   )rd   re   Úbuild_opener)r'   ri   r   r   r    r”   ô   s   
z DOMEntityResolver._create_openerc                 C   sJ   |j  ¡ }d|v r!| ¡ D ]}| d¡r | dd¡d  ¡   S qd S d S )NzContent-Typezcharset=ú=r   )rb   ÚinfoÚgetplistÚ
startswithÚsplitr|   )r'   rŒ   r—   Úparamr   r   r    rƒ   ø   s   

ÿþz'DOMEntityResolver._guess_media_encodingN)r   r	   r
   Ú	__slots__r[   r�   r”   rƒ   r   r   r   r    r   Ô   s    r   c                   @   sˆ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd S )!r   ©rb   ÚcharacterStreamÚ
stringDatar„   r€   rc   r‹   c                 C   s.   d | _ d | _d | _d | _d | _d | _d | _d S r$   r�   r&   r   r   r    r(     s   
zDOMInputSource.__init__c                 C   r)   r$   ©rb   r&   r   r   r    Ú_get_byteStream  r-   zDOMInputSource._get_byteStreamc                 C   r.   r$   r    )r'   rb   r   r   r    Ú_set_byteStream  r0   zDOMInputSource._set_byteStreamc                 C   r)   r$   ©rž   r&   r   r   r    Ú_get_characterStream  r-   z#DOMInputSource._get_characterStreamc                 C   r.   r$   r£   )r'   rž   r   r   r    Ú_set_characterStream  r0   z#DOMInputSource._set_characterStreamc                 C   r)   r$   ©rŸ   r&   r   r   r    Ú_get_stringData  r-   zDOMInputSource._get_stringDatac                 C   r.   r$   r¦   )r'   Údatar   r   r    Ú_set_stringData  r0   zDOMInputSource._set_stringDatac                 C   r)   r$   ©r„   r&   r   r   r    Ú_get_encoding  r-   zDOMInputSource._get_encodingc                 C   r.   r$   rª   )r'   r„   r   r   r    Ú_set_encoding  r0   zDOMInputSource._set_encodingc                 C   r)   r$   ©r€   r&   r   r   r    Ú_get_publicId!  r-   zDOMInputSource._get_publicIdc                 C   r.   r$   r­   )r'   r€   r   r   r    Ú_set_publicId#  r0   zDOMInputSource._set_publicIdc                 C   r)   r$   ©rc   r&   r   r   r    Ú_get_systemId&  r-   zDOMInputSource._get_systemIdc                 C   r.   r$   r°   )r'   rc   r   r   r    Ú_set_systemId(  r0   zDOMInputSource._set_systemIdc                 C   r)   r$   ©r‹   r&   r   r   r    Ú_get_baseURI+  r-   zDOMInputSource._get_baseURIc                 C   r.   r$   r³   ©r'   r]   r   r   r    Ú_set_baseURI-  r0   zDOMInputSource._set_baseURIN)r   r	   r
   rœ   r(   r¡   r¢   r¤   r¥   r§   r©   r«   r¬   r®   r¯   r±   r²   r´   r¶   r   r   r   r    r      s"    	r   c                   @   s>   e Zd ZdZdZdZdZdZej	Z
dd„ Zdd	„ Zd
d„ ZdS )ÚDOMBuilderFilterzSElement filter which can be used to tailor construction of
    a DOM instance.
    r   r!   r"   r#   c                 C   r)   r$   )Ú
whatToShowr&   r   r   r    Ú_get_whatToShowB  r-   z DOMBuilderFilter._get_whatToShowc                 C   r)   r$   ©ÚFILTER_ACCEPT©r'   Úelementr   r   r    Ú
acceptNodeE  r-   zDOMBuilderFilter.acceptNodec                 C   r)   r$   rº   r¼   r   r   r    ÚstartContainerH  r-   zDOMBuilderFilter.startContainerN)r   r	   r
   r   r»   ÚFILTER_REJECTÚFILTER_SKIPÚFILTER_INTERRUPTr   ÚSHOW_ALLr¸   r¹   r¾   r¿   r   r   r   r    r·   1  s    	r·   c                   @   sD   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )Ú
DocumentLSz=Mixin to create documents that conform to the load/save spec.Fc                 C   s   dS )NFr   r&   r   r   r    Ú
_get_asyncS  s   zDocumentLS._get_asyncc                 C   s   |rt j d¡‚d S )Nz.asynchronous document loading is not supported)r;   r<   r=   )r'   Úflagr   r   r    Ú
_set_asyncV  s
   ÿÿzDocumentLS._set_asyncc                 C   ó   t dƒ‚)Nz'haven't figured out what this means yet©rl   r&   r   r   r    Úabort[  s   ÿzDocumentLS.abortc                 C   rÈ   ©Nzhaven't written this yetrÉ   rµ   r   r   r    Úloada  ó   zDocumentLS.loadc                 C   rÈ   rË   rÉ   )r'   rŒ   r   r   r    ÚloadXMLd  rÍ   zDocumentLS.loadXMLc                 C   s0   |d u r
| }| ¡ S |j | urtj ¡ ‚| ¡ S r$   )ÚownerDocumentr;   r<   ÚWrongDocumentErrÚtoxml)r'   Úsnoder   r   r    ÚsaveXMLg  s   
þ
zDocumentLS.saveXMLN)r   r	   r
   r   Úasync_rÅ   rÇ   rÊ   rÌ   rÎ   rÓ   r   r   r   r    rÄ   N  s    rÄ   c                   @   s,   e Zd ZdZdZdd„ Zdd„ Zdd„ Zd	S )
ÚDOMImplementationLSr   r!   c                 C   sB   |d ur
t j d¡‚|| jkrtƒ S || jkrt j d¡‚tdƒ‚)NzschemaType not yet supportedz'asynchronous builders are not supportedzunknown value for mode)r;   r<   r=   ÚMODE_SYNCHRONOUSr   ÚMODE_ASYNCHRONOUSrk   )r'   ÚmodeÚ
schemaTyper   r   r    ÚcreateDOMBuilders  s   ÿ

ÿz$DOMImplementationLS.createDOMBuilderc                 C   rÈ   )Nz-the writer interface hasn't been written yet!rÉ   r&   r   r   r    ÚcreateDOMWriter~  s   ÿz#DOMImplementationLS.createDOMWriterc                 C   s   t ƒ S r$   )r   r&   r   r   r    ÚcreateDOMInputSource‚  r-   z(DOMImplementationLS.createDOMInputSourceN)r   r	   r
   rÖ   r×   rÚ   rÛ   rÜ   r   r   r   r    rÕ   o  s    rÕ   )r   ra   Úxml.domr;   Úxml.dom.NodeFilterr   Ú__all__r   r   r9   Úobjectr   r   r·   rÄ   rÕ   r   r   r   r    Ú<module>   s      %,1!