o
    N=&b                     @   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	 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writersnodesc                   @   s   e Zd ZdS )RawXmlErrorN)__name__
__module____qualname__ r
   r
   Ausr/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_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	   Z	supportedr   Zvalidate_booleanZsettings_specZsettings_defaultsZconfig_sectionZconfig_section_dependenciesr!   r   r"   r
   r
   r
   r   r      sD    

r   c                   @   st   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r%d| _
|jr.d| _
d| _	d| _d| _d| _g | _|jrG| j| j|j  |jrQ| j| j | j| jtj  t | _| j| j d S )Nr   
z    r   )r   NodeVisitorr   r   Zreporter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   Q   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)r.   r!   r0   r)   r-   Zstarttagr   saxsaxutilsZ	quoteattr
isinstancer   FixedTextElementliteralr/   simple_nodesr*   r   noder
   r
   r   default_visitw   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)r-   r.   r!   r0   r)   Zendtagr:   r   r;   r<   r/   r=   r*   r>   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   r8   r9   escapeastextr/   replacer)   r-   r!   r0   )r   r?   textr
   r
   r   
visit_Text   s   zXMLTranslator.visit_Textc                 C   s   d S r   r
   r>   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splitr@   rC   r!   r0   rA   r7   parser   r   r8   _exceptionsZSAXParseExceptionr6   locatorZgetColumnNumberZgetLineNumberrK   r:   parentr   TextElementr&   rJ   ZSkipNode)r   r?   Z
xml_stringZcol_numline_numZsrclinemsgr
   r
   r   	visit_raw   s,   




zXMLTranslator.visit_rawN)r   r   r	   r   r1   r2   r   r8   Zmake_parserr7   Z
setFeaturer   r   rR   imageZcolspec
transitionr=   r@   rA   rF   rG   rU   r
   r
   r
   r   r   A   s&    
#r   c                   @   s   e Zd Zdd ZdS )r5   c                 C   s
   || _ d S r   )rP   )r   rP   r
   r
   r   setDocumentLocator   s   
zTestXml.setDocumentLocatorN)r   r   r	   rX   r
   r
   r
   r   r5      s    r5   )__doc__Z__docformat__ior   Zxml.sax.saxutilsr   r3   r   r   r   ZApplicationErrorr   r   ZGenericNodeVisitorr   r8   handlerZContentHandlerr5   r
   r
   r
   r   <module>   s   )x