U
    [Shk                     @   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   P/root/rtd-docs/venv/lib/python3.8/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_declarationZ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visitorZ	walkaboutjoinoutput)r   r!   r   r   r   	translate;   s    zWriter.translate)r	   r
   r   	supportedr   Zvalidate_booleanZsettings_specZsettings_defaultsZconfig_sectionZconfig_section_dependenciesr#   r   r$   r   r   r   r   r      s@   

 r   c                   @   sn   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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rJd| _
|jr\d| _
d| _	d| _d| _d| _g | _|jr| jt|j |jr| 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   Zoutput_encodingr   doctype	generatordocutils__version__TestXml
the_handle	xmlparserZsetContentHandler)r   r    r,   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r`|  jd7  _t
|| jrz|  j d7  _ | j s| j| j dS )zDefault node visit method.r   N)r2   r#   r4   r-   r1   Zstarttagr   saxsaxutilsZ	quoteattr
isinstancer   FixedTextElementliteralr3   simple_nodesr.   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rX|  j
d8  _
t|| jrr|  jd8  _| js| j| j dS )zDefault node depart method.r   N)r1   r2   r#   r4   r-   Zendtagr>   r   r?   r@   r3   rA   r.   rB   r   r   r   default_departure   s    zXMLTranslator.default_departurec                 C   s@   t jj| }| js0|dd| j| j  }| j	
| d S )Nr&   )r   r<   r=   escapeastextr3   replacer-   r1   r#   r4   )r   rC   textr   r   r   
visit_Text   s    zXMLTranslator.visit_Textc                 C   s   d S r   r   rB   r   r   r   depart_Text   s    zXMLTranslator.depart_Textc                 C   s   d| dd kr"| | d S | | | }| j| | | z| jt	| W nz t
jjjk
r   | jj }| jj }|j}t|jtjs|d7 }d||| f }| j||j|| d d Y nX tjd S )Nr   formatr      z0Invalid raw XML in column %d, line offset %d:
%sr   )sourceline)getsplitrD   rG   r#   r4   rE   r;   parser   r   r<   _exceptionsZSAXParseExceptionr:   locatorZgetColumnNumberZgetLineNumberrO   r>   parentr   TextElementr*   rN   ZSkipNode)r   rC   Z
xml_stringZcol_numline_numZsrclinemsgr   r   r   	visit_raw   s,    


   zXMLTranslator.visit_rawN)r	   r
   r   r5   r6   r   r<   Zmake_parserr;   Z
setFeaturer   r   rV   imageZcolspecZ
transitionrA   rD   rE   rJ   rK   rY   r   r   r   r   r   A   s&   
 "  r   c                   @   s   e Zd Zdd ZdS )r9   c                 C   s
   || _ d S r   )rT   )r   rT   r   r   r   setDocumentLocator   s    zTestXml.setDocumentLocatorN)r	   r
   r   r[   r   r   r   r   r9      s   r9   )__doc____docformat__ior   Zxml.sax.saxutilsr   r7   r   r   r   r   ZApplicationErrorr   r   ZGenericNodeVisitorr   r<   handlerZContentHandlerr9   r   r   r   r   <module>   s   )v