o
    JAfc0                     @   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 )OptionszFeatures 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_entitiesZ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#   r0   )r&   r   r   r   r   _set_errorHandlerC   r/   zDOMBuilder._set_errorHandlerc                 C   r(   r#   r   r%   r   r   r   _get_filterF   r,   zDOMBuilder._get_filterc                 C   r-   r#   r3   )r&   r   r   r   r   _set_filterH   r/   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stateZsettingsvaluer   r   r   
setFeatureK   s   
zDOMBuilder.setFeaturec                 C   s   t | jt|S r#   )hasattrr$   r8   )r&   r@   r   r   r   r6   Y      zDOMBuilder.supportsFeaturec                 C   s   t ||rdpdf}|| jv S )Nr   r   )r8   r7   )r&   r@   rA   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   )	rH   rI   rJ   rK   rM   )r   r   rL   rN   rP   r   r   r   r   r   r   )rN   rO   rP   )r   r   )r   r   rQ   rR   rS   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)r8   getattrr$   AttributeErrorr   r   r   r   r   r   r   r   r   r:   r;   r>   r?   )r&   r@   Z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[   rV   fpurllibr   r   r   rY      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[   Zcnodeactionr   r   r   parseWithContext   s   
zDOMBuilder.parseWithContextc                 C   s    dd l }|jj|}||S r]   )Zxml.dom.expatbuilderr;   ZexpatbuilderZmakeBuilderZ	parseFile)r&   streamrV   r:   Zbuilderr   r   r   rd      s   
zDOMBuilder._parse_bytestream)r   r	   r
   r*   r   r   ZACTION_REPLACEZACTION_APPEND_AS_CHILDRENZACTION_INSERT_AFTERZACTION_INSERT_BEFORErg   r'   r+   r.   r1   r2   r4   r5   rC   r6   rG   r7   rW   r\   rY   rk   rd   r   r   r   r   r   ,   s    		 "%=
r   c                 C   s   |   ddS )N-_)lowerreplace)r@   r   r   r   r8      rE   r8   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   publicIdr`   _get_openeropenr_   _guess_media_encodingencoding	posixpathurllib.parserY   urlparseendswithdirname
urlunparsebaseURI)r&   rs   r`   sourcerx   rf   partsschemenetlocpathparamsqueryfragmentr   r   r   rX      s   zDOMEntityResolver.resolveEntityc                 C   s,   z| j W S  ty   |  | _ | j  Y S w r#   )rq   rU   _create_openerr%   r   r   r   rt      s   

zDOMEntityResolver._get_openerc                 C   s   dd l }|j S r]   )ra   rb   Zbuild_opener)r&   rf   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   )r_   infoZgetplist
startswithsplitro   )r&   r   r   Zparamr   r   r   rv      s   

z'DOMEntityResolver._guess_media_encodingN)r   r	   r
   	__slots__rX   rt   r   rv   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   r_   characterStream
stringDatarw   rs   r`   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#   r_   r%   r   r   r   _get_byteStream  r,   zDOMInputSource._get_byteStreamc                 C   r-   r#   r   )r&   r_   r   r   r   _set_byteStream  r/   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  r/   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  r/   zDOMInputSource._set_stringDatac                 C   r(   r#   rw   r%   r   r   r   _get_encoding  r,   zDOMInputSource._get_encodingc                 C   r-   r#   r   )r&   rw   r   r   r   _set_encoding  r/   zDOMInputSource._set_encodingc                 C   r(   r#   rs   r%   r   r   r   _get_publicId!  r,   zDOMInputSource._get_publicIdc                 C   r-   r#   r   )r&   rs   r   r   r   _set_publicId#  r/   zDOMInputSource._set_publicIdc                 C   r(   r#   r`   r%   r   r   r   _get_systemId&  r,   zDOMInputSource._get_systemIdc                 C   r-   r#   r   )r&   r`   r   r   r   _set_systemId(  r/   zDOMInputSource._set_systemIdc                 C   r(   r#   r~   r%   r   r   r   _get_baseURI+  r,   zDOMInputSource._get_baseURIc                 C   r-   r#   r   r&   rZ   r   r   r   _set_baseURI-  r/   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   ZFILTER_REJECTZFILTER_SKIPZFILTER_INTERRUPTr   Z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ri   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#   )ZownerDocumentr:   r;   ZWrongDocumentErrZtoxml)r&   Zsnoder   r   r   saveXMLg  s   

zDocumentLS.saveXMLN)r   r	   r
   r   Z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_ASYNCHRONOUSrh   )r&   modeZ
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   r^   Zxml.domr:   Zxml.dom.NodeFilterr   __all__r   r   r8   objectr   r   r   r   r   r   r   r   r   <module>   s      %,1!