o
    Ni                     @   s   d Z dZddlmZ ddlZddlZddlmZmZm	Z	m
Z
 G dd dejZG dd	 d	e	jZG d
d dejZG dd dejjjZdS )zv
Simple document tree Writer, writes Docutils XML according to
https://docutils.sourceforge.io/docs/ref/docutils.dtd.
reStructuredText    )StringION)frontendnodeswritersutilsc                   @   s   e Zd ZdS )RawXmlErrorN)__name__
__module____qualname__ r   r   Q/home/ubuntu/.local/lib/python3.10/site-packages/docutils/writers/docutils_xml.pyr      s    r   c                   @   s   e Zd ZdZ	 ddddgdejdfdd	gdejdfd
dgdddejdfddgdddejdfffZddiZdZdZ	dZ
	 dd Zdd ZdS )Writer)xmlz"Docutils XML" Writer OptionsNz1Generate XML with newlines before and after tags.z
--newlines
store_true)action	validatorz'Generate XML with indents and newlines.z	--indentsz,Omit the XML declaration.  Use with caution.z--no-xml-declarationxml_declaration   store_false)destdefaultr   r   zOmit the DOCTYPE declaration.z--no-doctypedoctype_declarationoutput_encoding_error_handlerxmlcharrefreplacezdocutils_xml writer)r   c                 C   s   t j|  t| _d S N)r   r   __init__XMLTranslatortranslator_class)selfr   r   r   r   7   s   
zWriter.__init__c                 C   s0   |  | j | _}| j| d|j| _d S )N )r   documentvisitor	walkaboutjoinoutput)r   r"   r   r   r   	translate;   s   zWriter.translate)r	   r
   r   	supportedr   validate_booleansettings_specsettings_defaultsconfig_sectionconfig_section_dependenciesr%   r   r&   r   r   r   r   r      sD    

r   c                   @   st   e Zd ZdZdZej Z	 e	dd dd Z
ejejejejejfZdd Zd	d
 Zdd Zdd Zdd ZdS )r   z<!DOCTYPE document PUBLIC "+//IDN docutils.sourceforge.net//DTD Docutils Generic//EN//XML" "http://docutils.sourceforge.net/docs/ref/docutils.dtd">
z"<!-- Generated by Docutils %s -->
z5http://xml.org/sax/features/external-general-entitiesTc                 C   s   t j| | | jjj| _| jjj| _|j | _}d | _	| _
|jr%d| _
|jr.d| _
d| _	d| _d| _d| _g | _|jrG| jt|j |jrQ| j| j | j| jtj  t | _| j| j d S )Nr    
z    r   )r   NodeVisitorr   r!   reporterwarningwarnerrorsettingsindentnewlinenewlinesindentslevel	in_simple
fixed_textr%   r   appendr   output_encodingr   doctype	generatordocutils__version__TestXml
the_handle	xmlparsersetContentHandler)r   r!   r3   r   r   r   r   P   s*   zXMLTranslator.__init__c                 C   s   | j s| j| j| j  | j|tjjj	 |  jd7  _t
|tjtjfr0|  jd7  _t
|| jr=|  j d7  _ | j sI| j| j dS dS )zDefault node visit method.r   N)r9   r%   r;   r4   r8   starttagr   saxsaxutils	quoteattr
isinstancer   FixedTextElementliteralr:   simple_nodesr5   r   noder   r   r   default_visitu   s   zXMLTranslator.default_visitc                 C   s   |  j d8  _ | js| j| j| j   | j|  t|tjtj	fr,|  j
d8  _
t|| jr9|  jd8  _| jsE| j| j dS dS )zDefault node depart method.r   N)r8   r9   r%   r;   r4   endtagrI   r   rJ   rK   r:   rL   r5   rM   r   r   r   default_departure   s   zXMLTranslator.default_departurec                 C   s@   t jj| }| js|dd| j| j  }| j	
| d S )Nr-   )r   rF   rG   escapeastextr:   replacer4   r8   r%   r;   )r   rN   textr   r   r   
visit_Text   s   zXMLTranslator.visit_Textc                 C   s   d S r   r   rM   r   r   r   depart_Text   s   zXMLTranslator.depart_Textc                 C   s   d| dd vr| | d S | | | }| j| | | z| jt	| W tj t
jjjyo   | jj }| jj }|j}t|jtjsU|d7 }d||| f }| j||j|| d d Y tjw )Nr   formatr       z0Invalid raw XML in column %d, line offset %d:
%sr   )sourceline)getsplitrO   rS   r%   r;   rQ   rC   parser   r   rF   _exceptionsSAXParseExceptionrB   locatorgetColumnNumbergetLineNumberr[   rI   parentr   TextElementr1   rZ   SkipNode)r   rN   
xml_stringcol_numline_numsrclinemsgr   r   r   	visit_raw   s,   




zXMLTranslator.visit_rawN)r	   r
   r   r=   r>   r   rF   make_parserrC   
setFeaturer   r   re   metaimagecolspec
transitionrL   rO   rQ   rV   rW   rl   r   r   r   r   r   A   s$    
"r   c                   @   s   e Zd Zdd ZdS )rA   c                 C   s
   || _ d S r   )ra   )r   ra   r   r   r   setDocumentLocator   s   
zTestXml.setDocumentLocatorN)r	   r
   r   rs   r   r   r   r   rA      s    rA   )__doc____docformat__ior   xml.sax.saxutilsr   r?   r   r   r   r   ApplicationErrorr   r   GenericNodeVisitorr   rF   handlerContentHandlerrA   r   r   r   r   <module>   s   )w