B
    ô<[ÿ  ã               @   s®   d Z dZddlZddlZdejd kr0ej ¡  ddlZddlmZ ddl	Z	ddl	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ƒZdS )zv
Simple document tree Writer, writes Docutils XML according to
http://docutils.sourceforge.net/docs/ref/docutils.dtd.
ZreStructuredTexté    NZ_xmlplus)ÚStringIO)ÚfrontendÚwritersÚnodesc               @   s   e Zd ZdS )ÚRawXmlErrorN)Ú__name__Ú
__module__Ú__qualname__© r
   r
   ú<lib/python3.7/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é   Z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   D   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   Ú	translateH   s    zWriter.translate)r   r   r	   Z	supportedr   Zvalidate_booleanZsettings_specZsettings_defaultsZconfig_sectionZconfig_section_dependenciesr   r   r    r
   r
   r
   r   r   %   s.   
r   c               @   sr   e Zd 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$<?xml version="1.0" encoding="%s"?>
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 | j|j ¡ |jr¢| j | j¡ | j | jtj ¡ tƒ | _| j | j¡ d S )Nr   Ú
z    r   )r   ZNodeVisitorr   r   ZreporterZwarningÚwarnÚerrorÚsettingsÚindentÚnewlineÚnewlinesÚindentsÚlevelÚ	in_simpleÚ
fixed_textr   r   ÚappendZoutput_encodingr   ÚdoctypeÚ	generatorÚdocutilsÚ__version__ÚTestXmlÚ
the_handleÚ	xmlparserZsetContentHandler)r   r   r$   r
   r
   r   r   ^   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   r,   r%   r)   Zstarttagr   ÚsaxÚsaxutilsZ	quoteattrÚ
isinstancer   ÚFixedTextElementÚliteralr+   Úsimple_nodesr&   )r   Únoder
   r
   r   Údefault_visit„   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   r,   r%   Zendtagr6   r   r7   r8   r+   r9   r&   )r   r:   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   r4   r5   ÚescapeÚastextr+   Úreplacer%   r)   r   r,   )r   r:   Útextr
   r
   r   Ú
visit_Text£   s    zXMLTranslator.visit_Textc             C   s   d S )Nr
   )r   r:   r
   r
   r   Údepart_Textª   s    zXMLTranslator.depart_Textc          
   C   s  d|  dd¡ ¡ kr"|  |¡ d S |  |¡ | ¡ }| j |¡ |  |¡ t|tƒrht	j
dk rh| d¡}y| j t|ƒ¡ W nŠ tjjjk
r } zd| jj ¡ }| jj ¡ }|j}t|jtjƒsÊ|d7 }d||| ¡ f }| j||j|| d d	 W d d }~X Y nX tj‚d S )
Nr   Úformatr   )é   Úutf8é   z0Invalid raw XML in column %d, line offset %d:
%sr   )ÚsourceÚline)ÚgetÚsplitr;   r>   r   r,   r<   r6   ÚstrÚsysÚversion_infoÚencoder3   Úparser   r   r4   Ú_exceptionsZSAXParseExceptionr2   ÚlocatorZgetColumnNumberZgetLineNumberrH   Úparentr   ÚTextElementr"   rG   ZSkipNode)r   r:   Z
xml_stringr#   Zcol_numZline_numZsrclineÚmsgr
   r
   r   Ú	visit_raw­   s*    



,zXMLTranslator.visit_rawN)r   r   r	   r   r-   r.   r   r4   Zmake_parserr3   Z
setFeaturer   r   rS   ZimageZcolspecZ
transitionr9   r;   r<   rA   rB   rU   r
   r
   r
   r   r   N   s   
#r   c               @   s   e Zd Zdd„ ZdS )r1   c             C   s
   || _ d S )N)rQ   )r   rQ   r
   r
   r   ÚsetDocumentLocatorË   s    zTestXml.setDocumentLocatorN)r   r   r	   rV   r
   r
   r
   r   r1   É   s   r1   )Ú__doc__Z__docformat__rL   r   Ú__path__ÚreverseZxml.sax.saxutilsÚior   r/   r   r   r   ZApplicationErrorr   r   ZGenericNodeVisitorr   r4   ZContentHandlerr1   r
   r
   r
   r   Ú<module>	   s   

){