U
    Oek                     @   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.
ZreStructuredText    )StringION)frontendnodeswritersutilsc                   @   s   e Zd ZdS )RawXmlErrorN)__name__
__module____qualname__ r   r   A/tmp/pip-unpacked-wheel-rro3auwd/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   ZNodeVisitorr   r   Z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   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)r/   r"   r1   r*   r.   Zstarttagr   saxsaxutils	quoteattr
isinstancer   FixedTextElementliteralr0   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)r.   r/   r"   r1   r*   Zendtagr>   r   r?   r@   r0   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astextr0   replacer*   r.   r"   r1   )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"   r1   rE   r9   parser   r   r;   _exceptionsSAXParseExceptionr8   locatorgetColumnNumber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
   r3   r4   r   r;   make_parserr9   
setFeaturer   r   rY   imageZcolspecZ
transitionrA   rD   rE   rJ   rK   r\   r   r   r   r   r   A   s&   
 "  r   c                   @   s   e Zd Zdd ZdS )r7   c                 C   s
   || _ d S r   )rU   )r   rU   r   r   r   setDocumentLocator   s    zTestXml.setDocumentLocatorN)r   r	   r
   r`   r   r   r   r   r7      s   r7   )__doc__Z__docformat__ior   xml.sax.saxutilsr   r5   r   r   r   r   ZApplicationErrorr   r   ZGenericNodeVisitorr   r;   handlerContentHandlerr7   r   r   r   r   <module>   s   )v