
    Rhc0                         d Z ddlZddlZddlmZ g dZ G d d      Z G d d      Zd	 Z	 G d
 de
      Z G d de
      Z G d d      Z[ G d d      Z G d d      Zy)z4Implementation of the DOM Level 3 'LS-Load' feature.    N)
NodeFilter)
DOMBuilderDOMEntityResolverDOMInputSourcec                   \    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y)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_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     )/usr/lib/python3.12/xml/dom/xmlbuilder.pyr   r      sr     J!J"& $H""H$(!NH%)"G %LFr"   r   c            
       B   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 Zd Zd Zd	 Zd
 Zd Zd Zd Zd Z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d&gd'gd(Zd) Zd* Zd+ Zd, Zd- Zy).r   Nr	            c                 "    t               | _        y N)r   _optionsselfs    r#   __init__zDOMBuilder.__init__9   s    	r"   c                     | j                   S r)   entityResolverr+   s    r#   _get_entityResolverzDOMBuilder._get_entityResolver<   s    """r"   c                     || _         y r)   r/   )r,   r0   s     r#   _set_entityResolverzDOMBuilder._set_entityResolver>   s
    ,r"   c                     | j                   S r)   r   r+   s    r#   _get_errorHandlerzDOMBuilder._get_errorHandlerA   s       r"   c                     || _         y r)   r5   )r,   r   s     r#   _set_errorHandlerzDOMBuilder._set_errorHandlerC   s
    (r"   c                     | j                   S r)   r    r+   s    r#   _get_filterzDOMBuilder._get_filterF   s    {{r"   c                     || _         y r)   r:   )r,   r    s     r#   _set_filterzDOMBuilder._set_filterH   s	    r"   c                 h   | j                  |      rG|xr dxs d}	 | j                  t        |      |f   }|D ]  \  }}t        | j                  ||        y t        j                  j                  dt        |      z         # t
        $ r$ t        j                  j                  d|      d w xY w)Nr	   r   zunsupported feature: zunknown feature: )supportsFeature	_settings_name_xformsetattrr*   KeyErrorxmldomNotSupportedErrNotFoundErrrepr)r,   namestatesettingsvalues        r#   
setFeaturezDOMBuilder.setFeatureK   s    %Ka$1E8>>;t+<e*DE
 $, 8KD%DMM478 ''%%&9DJ&FGG  Cgg--1579>BCCs   B -B1c                 @    t        | j                  t        |            S r)   )hasattrr*   rA   )r,   rI   s     r#   r?   zDOMBuilder.supportsFeatureY   s    t}}k$&788r"   c                 H    t        |      |xr dxs df}|| j                  v S )Nr	   r   )rA   r@   )r,   rI   rJ   keys       r#   canSetFeaturezDOMBuilder.canSetFeature\   s)    4 %+A"23dnn$$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   r	   )	rS   rT   rU   rV   rX   )r   r	   rW   rY   r[   r   r   r   r   r   r	   )rY   rZ   r[   )r   r   )r   r	   r\   r]   r^   c                    t        |      }	 t        | j                  |      S # t        $ r |dk(  r| j                  }|j                  xro |j
                  xra |j                  xrS |j                  xrE |j                  xs6 |j                  xs( |j                  xs |j                  xs |j                   cY S t        j                  j                  dt!        |      z        w xY w)Nr   zfeature %s not known)rA   getattrr*   AttributeErrorr   r   r   r   r   r   r   r   r   rD   rE   rG   rH   )r,   rI   xnameoptionss       r#   
getFeaturezDOMBuilder.getFeature   s    D!	K4==%00 	Ky --66 <#AA<#,,< $BB< ")!?!? ";$+$>$>";$+$C$C"; %,$4$4"; %,$:$:	<	= ''%%&<tDz&IJJ	Ks   # BC(<,C(c                     | j                   r| j                   j                  d |      }nt               j                  d |      }| j                  |      S r)   )r0   resolveEntityr   parse)r,   uriinputs      r#   parseURIzDOMBuilder.parseURI   sG    ''55dC@E%'55dC@Ezz%  r"   c                 .   t        j                   | j                        }| j                  |_        | j                  |_        |j                  }|5|j
                  r)dd l}|j                  j                  |j
                        }| j                  ||      S Nr   )
copyr*   r    r   
byteStreamsystemIdurllib.requestrequesturlopen_parse_bytestream)r,   ri   rc   fpurllibs        r#   rg   zDOMBuilder.parse   ss    ))DMM*#00:'**!''7B%%b'22r"   c                 J    || j                   vrt        d      t        d      )Nznot a legal actionzHaven't written this yet...)_legal_actions
ValueErrorNotImplementedError)r,   ri   cnodeactions       r#   parseWithContextzDOMBuilder.parseWithContext   s(    ,,,122!"?@@r"   c                 v    dd l }|j                  j                  j                  |      }|j	                  |      S rl   )xml.dom.expatbuilderrE   expatbuildermakeBuilder	parseFile)r,   streamrc   rD   builders        r#   rs   zDOMBuilder._parse_bytestream   s0    #''&&227;  ((r"   )r
   r   r   r0   r   r    ACTION_REPLACEACTION_APPEND_AS_CHILDRENACTION_INSERT_AFTERACTION_INSERT_BEFORErw   r-   r1   r3   r6   r8   r;   r=   rM   r?   rR   r@   rd   rj   rg   r|   rs   r!   r"   r#   r   r   ,   s   NLFN !$&?)+?AN"#-!)H9%;%)(+; 	&)(+;
 	; 	),+.; 	),+.; 	+.-0; 	+.-0; 	"%$';" 	'*),#;& 	'*),';* 	*+;0 	1;4 	-0/25;8 	-0/29;< 	! #=;@ 	! #A;D 	E;J  203 203	3 -+.  s;IzK$!3A
)r"   r   c                 B    | j                         j                  dd      S )N-_)lowerreplace)rI   s    r#   rA   rA      s    ::<S))r"   c                   (    e Zd ZdZd Zd Zd Zd Zy)r   )_openerc                    |J t               }||_        ||_        | j                         j	                  |      |_        | j                  |      |_        dd l}dd l	}|j                  j                  |      }|\  }}}	}
}}|	rM|	j                  d      s<|j                  |	      dz   }	|||	|
||f}|j                  j                  |      |_        |S )Nr   /)r   publicIdro   _get_openeropenrn   _guess_media_encodingencoding	posixpathurllib.parserg   urlparseendswithdirname
urlunparsebaseURI)r,   r   ro   sourcer   ru   partsschemenetlocpathparamsqueryfragments                r#   rf   zDOMEntityResolver.resolveEntity   s    ###!"" ,,.33H= 44V< 	'%%h/8=5feXc*$$T*S0DFD&%AE#\\44U;FNr"   c                 |    	 | j                   S # t        $ r$ | j                         | _         | j                   cY S w xY wr)   )r   ra   _create_openerr+   s    r#   r   zDOMEntityResolver._get_opener   s:    	 << 	 ..0DL<<	 s    *;;c                 >    dd l }|j                  j                         S rl   )rp   rq   build_opener)r,   ru   s     r#   r   z DOMEntityResolver._create_opener   s    ~~**,,r"   c                     |j                   j                         }d|v rL|j                         D ]8  }|j                  d      s|j	                  dd      d   j                         c S  y y )NzContent-Typezcharset==r	   )rn   infogetplist
startswithsplitr   )r,   r   r   params       r#   r   z'DOMEntityResolver._guess_media_encoding   se      %%'T! :##J/ ;;sA.q17799: "r"   N)r
   r   r   	__slots__rf   r   r   r   r!   r"   r#   r   r      s    I, -:r"   r   c                   j    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y)r   rn   characterStream
stringDatar   r   ro   r   c                 f    d | _         d | _        d | _        d | _        d | _        d | _        d | _        y r)   r   r+   s    r#   r-   zDOMInputSource.__init__  s4    #r"   c                     | j                   S r)   rn   r+   s    r#   _get_byteStreamzDOMInputSource._get_byteStream      r"   c                     || _         y r)   r   )r,   rn   s     r#   _set_byteStreamzDOMInputSource._set_byteStream  s	    $r"   c                     | j                   S r)   r   r+   s    r#   _get_characterStreamz#DOMInputSource._get_characterStream  s    ###r"   c                     || _         y r)   r   )r,   r   s     r#   _set_characterStreamz#DOMInputSource._set_characterStream  s
    .r"   c                     | j                   S r)   r   r+   s    r#   _get_stringDatazDOMInputSource._get_stringData  r   r"   c                     || _         y r)   r   )r,   datas     r#   _set_stringDatazDOMInputSource._set_stringData  s	    r"   c                     | j                   S r)   r   r+   s    r#   _get_encodingzDOMInputSource._get_encoding      }}r"   c                     || _         y r)   r   )r,   r   s     r#   _set_encodingzDOMInputSource._set_encoding  	     r"   c                     | j                   S r)   r   r+   s    r#   _get_publicIdzDOMInputSource._get_publicId!  r   r"   c                     || _         y r)   r   )r,   r   s     r#   _set_publicIdzDOMInputSource._set_publicId#  r   r"   c                     | j                   S r)   ro   r+   s    r#   _get_systemIdzDOMInputSource._get_systemId&  r   r"   c                     || _         y r)   r   )r,   ro   s     r#   _set_systemIdzDOMInputSource._set_systemId(  r   r"   c                     | j                   S r)   r   r+   s    r#   _get_baseURIzDOMInputSource._get_baseURI+  s    ||r"   c                     || _         y r)   r   r,   rh   s     r#   _set_baseURIzDOMInputSource._set_baseURI-  s	    r"   N)r
   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r#   r   r      sU    @I%$/!!!r"   r   c                   J    e Zd ZdZdZdZdZdZej                  Z
d Zd Zd Zy	)
DOMBuilderFilterzSElement filter which can be used to tailor construction of
    a DOM instance.
    r	   r%   r&   r'   c                     | j                   S r)   )
whatToShowr+   s    r#   _get_whatToShowz DOMBuilderFilter._get_whatToShowB  r   r"   c                     | j                   S r)   FILTER_ACCEPTr,   elements     r#   
acceptNodezDOMBuilderFilter.acceptNodeE      !!!r"   c                     | j                   S r)   r   r   s     r#   startContainerzDOMBuilderFilter.startContainerH  r   r"   N)r
   r   r   r   r   FILTER_REJECTFILTER_SKIPFILTER_INTERRUPTr   SHOW_ALLr   r   r   r   r!   r"   r#   r   r   1  s8     MMK$$J""r"   r   c                   8    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
y	)

DocumentLSz=Mixin to create documents that conform to the load/save spec.Fc                      y)NFr!   r+   s    r#   
_get_asynczDocumentLS._get_asyncS  s    r"   c                 F    |rt         j                  j                  d      y )Nz.asynchronous document loading is not supported)rD   rE   rF   )r,   flags     r#   
_set_asynczDocumentLS._set_asyncV  s&    ''))@B B r"   c                     t        d      )Nz'haven't figured out what this means yetry   r+   s    r#   abortzDocumentLS.abort[  s     "57 	7r"   c                     t        d      Nzhaven't written this yetr   r   s     r#   loadzDocumentLS.loada      !"<==r"   c                     t        d      r   r   )r,   r   s     r#   loadXMLzDocumentLS.loadXMLd  r   r"   c                     || }|j	                         S |j                   | urt        j                  j                         |j	                         S r)   )ownerDocumentrD   rE   WrongDocumentErrtoxml)r,   snodes     r#   saveXMLzDocumentLS.saveXMLg  sI    =E {{}   ,''**,,{{}r"   N)r
   r   r   r   async_r   r   r   r   r   r  r!   r"   r#   r   r   N  s)    GFB
7>>r"   r   c                   &    e Zd ZdZdZd Zd Zd Zy)DOMImplementationLSr	   r%   c                     |t         j                  j                  d      || j                  k(  r
t	               S || j
                  k(  rt         j                  j                  d      t        d      )NzschemaType not yet supportedz'asynchronous builders are not supportedzunknown value for mode)rD   rE   rF   MODE_SYNCHRONOUSr   MODE_ASYNCHRONOUSrx   )r,   mode
schemaTypes      r#   createDOMBuilderz$DOMImplementationLS.createDOMBuilders  sl    !'')).0 04(((<4)))''))9; ;122r"   c                     t        d      )Nz-the writer interface hasn't been written yet!r   r+   s    r#   createDOMWriterz#DOMImplementationLS.createDOMWriter~  s    !;= 	=r"   c                     t               S r)   )r   r+   s    r#   createDOMInputSourcez(DOMImplementationLS.createDOMInputSource  s    r"   N)r
   r   r   r
  r  r  r  r  r!   r"   r#   r  r  o  s    	3= r"   r  )r   rm   xml.domrD   xml.dom.NodeFilterr   __all__r   r   rA   objectr   r   r   r   r  r!   r"   r#   <module>r     st    :   ) @ @a) a)H*): ):X.V .b" "4  B   r"   