U
    Peu                     @   s  d Z dZddlZddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4 ddl/m5Z5m6Z6 ddl7m8Z8 dej9krG dd de2j:e2j;Z<G dd de2j=e2j;Z>G dd de5Z?de<iZ@e@A D ]6\ZBZCe0DeBeCZEe0FeBeEd eBgiZGe0HeBeG qe6Id!e? eJd" G d#d$ d$e&ZKG d%d& d&eZLG d'd( d(e!ZMG d)d* d*e!ZNG d+d, d,e(ZOG d-d. d.eZPG d/d0 d0eZQG d1d2 d2eZRG d3d4 d4eZSG d5d6 d6e!ZTG d7d8 d8eZUG d9d: d:eZVG d;d< d<eZWG d=d> d>e$ZXG d?d@ d@e#ZYG dAdB dBeZZG dCdD dDeZ[G dEdF dFeZ\G dGdH dHe!Z]G dIdJ dJeZ^G dKdL dLeZ_G dMdN dNe!Z`G dOdP dPeZaG dQdR dReZbG dSdT dTeZcG dUdV dVeZdG dWdX dXeZeG dYdZ dZeZfG d[d\ d\e2jgZhG d]d^ d^e2jgZiejd_krdd`lkmlZl ddlmZmeleLemjnda db dS )ca  
reStructuredText renderer
=========================

.. versionadded:: 1.1.0

`reStructuredText <http://docutils.sourceforge.net/rst.html>`_ is an
easy-to-read, what-you-see-is-what-you-get plaintext markup syntax and parser
system.

.. note::

    This widget requires the ``docutils`` package to run. Install it with
    ``pip`` or include it as one of your deployment requirements.

.. warning::

    This widget is highly experimental. The styling and implementation should
    not be considered stable until this warning has been removed.

Usage with Text
---------------

::

    text = """
    .. _top:

    Hello world
    ===========

    This is an **emphased text**, some ``interpreted text``.
    And this is a reference to top_::

        $ print("Hello world")

    """
    document = RstDocument(text=text)

The rendering will output:

.. image:: images/rstdocument.png

Usage with Source
-----------------

You can also render a rst file using the :attr:`~RstDocument.source` property::

    document = RstDocument(source='index.rst')

You can reference other documents using the role ``:doc:``. For example, in the
document ``index.rst`` you can write::

    Go to my next document: :doc:`moreinfo.rst`

It will generate a link that, when clicked, opens the ``moreinfo.rst``
document.

)RstDocument    N)dirnamejoinexistsabspath)Clock)PY2)ObjectPropertyNumericPropertyDictPropertyListPropertyStringPropertyBooleanPropertyOptionPropertyAliasProperty)Builder)get_hex_from_colorget_color_from_hex)Widget)
ScrollView)
GridLayout)Label)
AsyncImageImage)VideoPlayer)AnchorLayout)	Animation)Logger)rst)roles)nodesfrontendutils)	Directive
directives)set_classesZKIVY_DOCc                   @   s   e Zd ZdS )role_docN__name__
__module____qualname__ r+   r+   0/tmp/pip-unpacked-wheel-xzebddm3/kivy/uix/rst.pyr&   ]   s   r&   c                   @   s   e Zd ZdS )
role_videoNr'   r+   r+   r+   r,   r-   `   s   r-   c                   @   s2   e Zd ZdZdZdZdZejejdZ	dd Z
dS )	VideoDirectiveF   r   T)widthheightc                 C   s*   t | j tf d| jd i| j}|gS )Nsourcer   )r%   optionsr-   	argumentsselfnoder+   r+   r,   runk   s    
zVideoDirective.runN)r(   r)   r*   Zhas_contentZrequired_argumentsZoptional_argumentsZfinal_argument_whitespacer$   Znonnegative_intZoption_specr8   r+   r+   r+   r,   r.   c   s   r.   docclassesvideoa  
#:import parse_color kivy.parser.parse_color



<RstDocument>:
    content: content
    scatter: scatter
    do_scroll_x: False
    canvas.before:
        Color:
            rgba: parse_color(root.colors['background'])
        Rectangle:
            pos: self.pos
            size: self.size

    Scatter:
        id: scatter
        size_hint_y: None
        height: content.minimum_height
        width: root.width
        scale: 1
        do_translation: False, False
        do_scale: False
        do_rotation: False

        GridLayout:
            id: content
            cols: 1
            height: self.minimum_height
            width: root.width
            padding: 10

<RstTitle>:
    markup: True
    valign: 'top'
    font_size:
        sp(self.document.base_font_size - self.section * (
        self.document.base_font_size / 31.0 * 2))
    size_hint_y: None
    height: self.texture_size[1] + dp(20)
    text_size: self.width, None
    bold: True

    canvas:
        Color:
            rgba: parse_color(self.document.underline_color)
        Rectangle:
            pos: self.x, self.y + 5
            size: self.width, 1


<RstParagraph>:
    markup: True
    valign: 'top'
    size_hint_y: None
    height: self.texture_size[1] + self.my
    text_size: self.width - self.mx, None
    font_size: sp(self.document.base_font_size / 2.0)

<RstTerm>:
    size_hint: None, None
    height: label.height
    anchor_x: 'left'
    Label:
        id: label
        text: root.text
        markup: True
        valign: 'top'
        size_hint: None, None
        size: self.texture_size[0] + dp(10), self.texture_size[1] + dp(10)
        font_size: sp(root.document.base_font_size / 2.0)

<RstBlockQuote>:
    cols: 2
    content: content
    size_hint_y: None
    height: content.height
    Widget:
        size_hint_x: None
        width: 20
    GridLayout:
        id: content
        cols: 1
        size_hint_y: None
        height: self.minimum_height

<RstLiteralBlock>:
    cols: 1
    content: content
    size_hint_y: None
    height: content.texture_size[1] + dp(20)
    canvas:
        Color:
            rgb: parse_color('#cccccc')
        Rectangle:
            pos: self.x - 1, self.y - 1
            size: self.width + 2, self.height + 2
        Color:
            rgb: parse_color('#eeeeee')
        Rectangle:
            pos: self.pos
            size: self.size
    Label:
        id: content
        markup: True
        valign: 'top'
        text_size: self.width - 20, None
        font_name: 'data/fonts/RobotoMono-Regular.ttf'
        color: (0, 0, 0, 1)

<RstList>:
    cols: 2
    size_hint_y: None
    height: self.minimum_height

<RstListItem>:
    cols: 1
    size_hint_y: None
    height: self.minimum_height

<RstSystemMessage>:
    cols: 1
    size_hint_y: None
    height: self.minimum_height
    canvas:
        Color:
            rgba: 1, 0, 0, .3
        Rectangle:
            pos: self.pos
            size: self.size

<RstWarning>:
    content: content
    cols: 1
    padding: 20
    size_hint_y: None
    height: self.minimum_height
    canvas:
        Color:
            rgba: 1, 0, 0, .5
        Rectangle:
            pos: self.x + 10, self.y + 10
            size: self.width - 20, self.height - 20
    GridLayout:
        cols: 1
        id: content
        size_hint_y: None
        height: self.minimum_height

<RstNote>:
    content: content
    cols: 1
    padding: 20
    size_hint_y: None
    height: self.minimum_height
    canvas:
        Color:
            rgba: 0, 1, 0, .5
        Rectangle:
            pos: self.x + 10, self.y + 10
            size: self.width - 20, self.height - 20
    GridLayout:
        cols: 1
        id: content
        size_hint_y: None
        height: self.minimum_height

<RstImage>:
    size_hint: None, None
    size: self.texture_size[0], self.texture_size[1] + dp(10)

<RstAsyncImage>:
    size_hint: None, None
    size: self.texture_size[0], self.texture_size[1] + dp(10)

<RstDefinitionList>:
    cols: 1
    size_hint_y: None
    height: self.minimum_height
    font_size: sp(self.document.base_font_size / 2.0)

<RstDefinition>:
    cols: 2
    size_hint_y: None
    height: self.minimum_height
    font_size: sp(self.document.base_font_size / 2.0)

<RstFieldList>:
    cols: 2
    size_hint_y: None
    height: self.minimum_height

<RstFieldName>:
    markup: True
    valign: 'top'
    size_hint: 0.2, 1
    color: (0, 0, 0, 1)
    bold: True
    text_size: self.width - 10, self.height - 10
    valign: 'top'
    font_size: sp(self.document.base_font_size / 2.0)

<RstFieldBody>:
    cols: 1
    size_hint_y: None
    height: self.minimum_height

<RstFootnote>:
    cols: 2
    size_hint_y: None
    height: self.minimum_height

<RstFootName>:
    markup: True
    valign: 'top'
    size_hint: 0.2, 1
    color: (0, 0, 0, 1)
    bold: True
    text_size: self.width - 10, self.height - 10
    valign: 'top'
    font_size: sp(self.document.base_font_size / 2.0)

<RstTable>:
    size_hint_y: None
    height: self.minimum_height

<RstEntry>:
    cols: 1
    size_hint_y: None
    height: self.minimum_height

    canvas:
        Color:
            rgb: .2, .2, .2
        Line:
            points: [            self.x,            self.y,            self.right,            self.y,            self.right,            self.top,            self.x,            self.top,            self.x,            self.y]

<RstTransition>:
    size_hint_y: None
    height: 20
    canvas:
        Color:
            rgb: .2, .2, .2
        Line:
            points: [self.x, self.center_y, self.right, self.center_y]

<RstListBullet>:
    markup: True
    valign: 'top'
    size_hint_x: None
    width: self.texture_size[0] + dp(10)
    text_size: None, self.height - dp(10)
    font_size: sp(self.document.base_font_size / 2.0)

<RstEmptySpace>:
    size_hint: 0.01, 0.01

<RstDefinitionSpace>:
    size_hint: None, 0.1
    width: 50
    font_size: sp(self.document.base_font_size / 2.0)

<RstVideoPlayer>:
    options: {'fit_mode': 'contain'}
    canvas.before:
        Color:
            rgba: (1, 1, 1, 1)
        BorderImage:
            source: 'atlas://data/images/defaulttheme/player-background'
            pos: self.x - 25, self.y - 25
            size: self.width + 50, self.height + 50
            border: (25, 25, 25, 25)
c                   @   s   e Zd ZdS )RstVideoPlayerNr'   r+   r+   r+   r,   r<     s   r<   c                       s  e Zd ZdZedZedZedddZedZ	edZ
edZedZd	d
 Zdd ZeeedddZeddddddZedZei ZedZedZedZeg Zei Z fddZdd Zdd Z dd Z!d d! Z"d.d"d#Z#d$d% Z$d&d' Z%d(d) Z&d*d+ Z'd,d- Z(  Z)S )/r   zbBase widget used to store an Rst document. See module documentation for
    more information.
    Nutf-8strict)r>   ignorereplacexmlcharrefreplaceZbackslashreplac)r3      Fc                 C   s   t | jjS N)r   colors
backgroundr6   r+   r+   r,   _get_bgc  s    zRstDocument._get_bgcc                 C   s   t |dd  | j_d S )Nr/   )r   rD   rE   )r6   valuer+   r+   r,   _set_bgc  s    zRstDocument._set_bgc)rD   T)bindcacheZe5e6e9ffZce5c00ffZ202020ffZ204a87ffZ000000ff)rE   link	paragraphtitlebullet Z204a9699c                    sF   t | jd| _t | _tjtjfd	 | _
tt| jf | d S )N)
components)r   Zcreate_trigger_load_from_text_trigger_loadr   Parser_parserr!   OptionParserget_default_values	_settingssuperr   __init__)r6   kwargs	__class__r+   r,   r[     s    
zRstDocument.__init__c                 C   s,   |sd S | j d kr tt|| _ |   d S rC   )document_rootr   r   _load_from_sourcer6   instancerH   r+   r+   r,   	on_source%  s
    
zRstDocument.on_sourcec                 C   s   |    d S rC   )rT   ra   r+   r+   r,   on_text.  s    zRstDocument.on_textc                 C   s   |    dS )z"Force document rendering.
        N)rS   rF   r+   r+   r,   render1  s    zRstDocument.renderc                 C   s   t |r|S t| j|S )zxGet the path for this filename. If the filename doesn't exist,
        it returns the document_root + filename.
        )r   r   r_   r6   filenamer+   r+   r,   resolve_path6  s    zRstDocument.resolve_pathc              	   C   sd   t |d}| ||}W 5 Q R X td| j}| j|| t|}|	| |j
| j|< |S )zPreload a rst file to get its toctree and its title.

        The result will be stored in :attr:`toctrees` with the ``filename`` as
        key.
        rbDocument)openreaddecoder"   new_documentrY   rV   parse_ToctreeVisitor	walkabouttoctreetoctrees)r6   rg   encodingerrorsfdtextdocumentvisitorr+   r+   r,   preload>  s    
zRstDocument.preloadc                 C   s$   |  | j}| || j| j| _d S rC   )rh   r2   rz   source_encodingsource_errorrw   rf   r+   r+   r,   r`   P  s
    zRstDocument._load_from_sourcec                 G   s   zv| j   g | _i | _td| j}| j}trFt	|t
krF|d}| j|| t| |}|| |jppd| _W n   td Y nX d S )Nrj   r=   zNo titlezRst: error while loading text)contentZclear_widgetsanchors_widgets
refs_assocr"   rn   rY   rw   r   typestrrm   rV   ro   _Visitorrq   rN   r   	exception)r6   largsrx   rw   ry   r+   r+   r,   rS   V  s    



zRstDocument._load_from_textc                 C   s   |  | d S rC   )goto)r6   r7   refr+   r+   r,   on_ref_pressl  s    zRstDocument.on_ref_pressc           
      G   s   | dr|| _dS | j||}d }}| jD ] }||jkr0|j| \}} qRq0|dkr^dS ||j7 }|j| }| jj| jj }}|| j	8 }| 
d|\}}	tdtd|	}	t|	ddd|  dS )a?  Scroll to the reference. If it's not found, nothing will be done.

        For this text::

            .. _myref:

            This is something I always wanted.

        You can do::

            from kivy.clock import Clock
            from functools import partial

            doc = RstDocument(...)
            Clock.schedule_once(partial(doc.goto, 'myref'), 0.1)

        .. note::

            It is preferable to delay the call of the goto if you just loaded
            the document because the layout might not be finished or the
            size of the RstDocument has not yet been determined. In
            either case, the calculation of the scrolling would be
            wrong.

            You can, however, do a direct call if the document is already
            loaded.

        .. versionadded:: 1.3.0
        .rstNr   r/   g      ?Zin_out_expo)Zscroll_ydt)endswithr2   r   getr~   Zanchorsxtopscatterr1   Zconvert_distance_to_scrollmaxminr   start)
r6   r   r   ZaxZayr7   ZsxZsyZdxZdyr+   r+   r,   r   o  s$    





zRstDocument.gotoc                 C   s   | j | d S rC   )r~   appendr5   r+   r+   r,   add_anchors  s    zRstDocument.add_anchors)r=   r>   )*r(   r)   r*   __doc__r   r2   r{   r   r|   rw   r_   r
   Zbase_font_sizer   show_errorsrG   rI   r   Zbackground_colorr   rD   rN   rs   Zunderline_colorr	   r}   r   r   r~   r   r[   rc   rd   re   rh   rz   r`   rS   r   r   r   __classcell__r+   r+   r]   r,   r     sR   
	
Cr   c                   @   s   e Zd ZedZedZdS )RstTitler   N)r(   r)   r*   r
   sectionr	   rx   r+   r+   r+   r,   r     s   r   c                   @   s$   e Zd ZedZedZedZdS )RstParagraph
   N)r(   r)   r*   r
   mxZmyr	   rx   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZedZdS )RstTermrP   N)r(   r)   r*   r   rw   r	   rx   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstBlockQuoteNr(   r)   r*   r	   r}   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstLiteralBlockNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstListNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstListItemNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstListBulletNr(   r)   r*   r	   rx   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstSystemMessageNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )
RstWarningNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstNoteNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstImageNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstAsyncImageNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstDefinitionListNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstDefinitionNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstFieldListNr'   r+   r+   r+   r,   r      s   r   c                   @   s   e Zd ZedZdS )RstFieldNameNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstFieldBodyNr'   r+   r+   r+   r,   r   	  s   r   c                   @   s   e Zd ZdS )RstFootnoteNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZedZdS )RstFootNameNr   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstGridLayoutNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstTableNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstEntryNr'   r+   r+   r+   r,   r     s   r   c                   @   s   e Zd ZdS )RstTransitionNr'   r+   r+   r+   r,   r   "  s   r   c                   @   s   e Zd ZdS )RstEmptySpaceNr'   r+   r+   r+   r,   r   &  s   r   c                   @   s   e Zd ZedZdS )RstDefinitionSpaceNr   r+   r+   r+   r,   r   *  s   r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )rp   c                 G   s.   g  | _ | _g | _d| _tjj| f|  d S )NrP   )rr   currentqueuerw   r    NodeVisitorr[   )r6   r   r+   r+   r,   r[   1  s    z_ToctreeVisitor.__init__c                 C   s   | j | || _d S rC   )r   r   r   )r6   treer+   r+   r,   push7  s    z_ToctreeVisitor.pushc                 C   s   | j  | _d S rC   )r   popr   rF   r+   r+   r,   r   ;  s    z_ToctreeVisitor.popc                 C   s   |j }|tjkr\|d |d dg d}t| jtrD| jd | n| j| | | n*|tjkrnd| _	n|tj
kr|  j	|7  _	d S )NidsnamesrP   )r   r   rN   childrenr   )r^   r    r   
isinstancer   dictr   r   rN   rw   Text)r6   r7   clsr   r+   r+   r,   dispatch_visit>  s    


z_ToctreeVisitor.dispatch_visitc                 C   s4   |j }|tjkr|   n|tjkr0| j| jd< d S )NrN   )r^   r    r   r   rN   rw   r   )r6   r7   r   r+   r+   r,   dispatch_departureP  s
    


z"_ToctreeVisitor.dispatch_departureN)r(   r)   r*   r[   r   r   r   r   r+   r+   r+   r,   rp   /  s
   rp   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )r   c              
   G   s   || _ d | _g | _d | _d | _d| _d| _d| _d| _i | _	d | _
ddddd| _ddddd	d
ddddg
| _tjj| f|  d S )NrP   Fr   )autonumautosymautonum_refautosym_ref*u   †u   ‡   §   ¶#u   ∆u   ∏u   Ѱu   Ѧ)rootrN   current_listr   idx_listrw   text_have_anchorr   do_strip_textsubstitutionfoot_refblock	footnotesfootlistr    r   r[   )r6   r   r   r+   r+   r,   r[   Z  s8    
z_Visitor.__init__c                 C   s   | j | j || _d S rC   )r   r   r   )r6   Zwidgetr+   r+   r,   r     s    z_Visitor.pushc                 C   s   | j  | _d S rC   )r   r   r   rF   r+   r+   r,   r     s    z_Visitor.popc                    s0   d fdd	}|t jdd |t jdd d S )NFc           
         s*  d }} j | dd}|D ]}|d d }d}d|kr@|d }|dkrv|d7 }|r`dt| nt|}|jj|< q|d	krj|d
  t|d
 d  }	|rd|	 n|	}|jj|< |d7 }q|s|d d }|r|jj|< qd|d d  }|jjkrjj| | q|gjj|< qd S )Nr   F)	conditionZascendr   rP   autor/   backrefr   r   r   refname)Ztraverser   r   r   r   intr   )
r   r   r   r   _nodesfidr   keysymr7   r6   r+   r,   get_refs  s:    

z%_Visitor.brute_refs.<locals>.get_refs)r   T)F)r    footnotefootnote_reference)r6   r7   r   r+   r   r,   
brute_refs  s    &z_Visitor.brute_refsc              
      s  |j }|tjkr,| | jj | | n|tjkr:d S |tjkrV|  jd7  _nf|tj	kr|j
d d }|jd | j|< n:|tjkr| j|j
d  }t|tjr|  j|7  _n|tjkrd}t }|j
d }| j| | | d}d|j
kr
|j
d }|dkrD| jd  d7  < t| jd }|j
d d }nn|d	kr| jd
 }	| j|	d  t|	d d  }| jd
  d7  < |j
d d }n|j
d d }|d d }| jj|d}
| jjd| d}|r| |dn|}|sd| }nh|rNt|trNdd t|D }ddd|dg| _d|d d |f }nd|d d ||f }t | j|d}| j| | j!| |j"| jj#d 	n|tj$kr|  jd7  _d}d}d}d|j
kr|j
d }|dkr| jd  d7  < t| jd }|j
d d }nj|d	krh| jd }	| j|	d  t|	d d  }| jd  d7  < |j
d d }n|jd }|d d }||7 }| jj|d}|s|dkrt%dd||| jj&d| jj&d|f }|  j|7  _d| _'n|tj(kr"t)| j| jd }| j| | | n|tjkr&t*|d!r|j+j,d"krLd S |j+j,d#kr^d S |j+j,d$krpd S |j+j,d%krd S | j-r|.d&d'}|.d(d'}|.d)d'}|.d(d'}|/d'rd'|0d' }|1d'r|2d'd' }| j1d'r|/d'r|dd  }|  j|7  _n|tj3krd| _-t|j+tjrb| jr\| jd' | _d | _t4| jd*}t| jt5rd|_6| j| | | n |tj7krt8 }| j| | | n|tj9kr|  jd+7  _n|tj:kr|  jd,7  _n|tj;kr"|  jd-7  _n|tj<kr`t= }| j| | |j | jdkst>n\|tj?krt@ }| j| | | d| _An*|tjBkrt@ }| j| | | d | _An|tjCkr:d.}| jAd k	r|  jAd7  _Ad/| jA }| |d0}tD }| jtE|| jd1 | j| | | n|tjFkrptG }| jjHrb| j| | | nL|tjIkrtJ }| j| | |j | jdkst>n|tjKkrtL }| j| | |j | jdkst>n|tjMkr|d2 }|d3d4}|d5|d6gd7d8 |/d9rT| jjNrTt| jjN|dd  }|/d:sl|/d;rtO|d<  j" fd=d>d? ntP|d<   tQd | jRd@} j"|Sd6dA |  | j| n|tjTk	rtU| jd*}| j| | | n|tjVk	rVt| jtU	s0t>tW| jd*}| j| | | nf|tjXk	rt| jtU	stt>tY| jd*}|tZ| jd* | j| | | n|tj[k	rt\ }| j| | | n|tj]k
r
t^| jd*}| j| | | n|tj_k
r6t` }| j| | | n|tjak
rftbddB}| j| | | nV|tjck
r| j jdd7  _dn6|tjek
rt5 }| j| | | n
|tjfk
r| jtg  n|tjhkrB|dC|dD}|  jdE|| jj&d| jj&df 7  _d|krdC|kr|d | jj|dC < nz|tjikrd }d|krj|d d }nd|kr|d d }|  jdF| 7  _d| _'n"|tjkrtk| j| _ln
|tmkrd S )GNr/   r   r   r   rP   r   r   r   r   r   r   r   rL   z
&bl;%s&br;c                 S   s    g | ]\}}d ||d f qS )z[ref=%s][u]%s[/u][/ref]r/   r+   ).0irr+   r+   r,   
<listcomp>  s   z+_Visitor.dispatch_visit.<locals>.<listcomp>z[i]( z, z )[/i]z[anchor=%s]&bl;%s&br;z#[anchor=%s][ref=%s]&bl;%s&br;[/ref])rx   rw   r   z&bl;r   r   )r/   r   z:Too many autonumbered or autosymboled footnote references!z[anchor=%s][ref=%s][color=%s]%srM   T)r   rx   parentsubstitution_definitionsubstitution_referencecommentr   
 z  	)rx   z[i]z[b]z#[font=fonts/RobotoMono-Regular.ttf]-z%d.rO   )rw   rx   urialigncenterr0   r1   c                 S   s"   |d p| j |d p| jg| _d S )Nr   r/   )r0   r1   size)imgr   r+   r+   r,   set_size  s    z)_Visitor.dispatch_visit.<locals>.set_size/zhttp://zhttps://r2   c                     s
    S rC   r+   )aimageZ
image_sizer   r+   r,   <lambda>      z)_Visitor.dispatch_visit.<locals>.<lambda>)Zon_load)size_hint_yZanchor_xr1   )r1   )colsnameZrefuriz[ref=%s][color=%s]z[anchor=%s])nr^   r    rx   r   r   r}   r   r   r   r   
attributesr   r   r   r   r   rw   r   r   r   
add_widgetr   r   r   r   r   r   colorizelist	enumerater   r   r   r   rJ   r   r   	ExceptionrD   r   rN   r   hasattrr   tagnamer   r@   
startswithlstripr   rstriprM   r   r   r   literal_blockr   emphasisstrongliteralblock_quoter   AssertionErrorenumerated_listr   r   bullet_list	list_itemr   r   system_messager   r   warningr   noter   r   r_   r   r   r   r1   setterdefinition_listr   termr   
definitionr   r   
field_listr   
field_namer   
field_bodyr   tabler   colspecr  entryZ
transitionr   	referencetargetr&   len	doc_indexr-   )r6   r7   r   r  rw   Zfootr   r   Znode_idr   rL   r   Z	colorizedZ	ref_blockrefslabelZboxrO   itemr   r   r   lstr  r  Z	fieldlistbodyr!  r#  r+   r   r,   r     s4   











  
 
  




  





 





  




z_Visitor.dispatch_visitc                 C   s  |j }|tjkr|   n|tjkr8|  jd8  _n|tjkrzt| jtsRt	| js`| j
| _| | jd |   nh|tjkrnZ|tjkrd| _t| jtst	| | jd |   n |tjkrt| jtst	| | jjd |   n|tjkr|  j
d7  _
n|tjkr4|  j
d7  _
n|tjkrR|  j
d7  _
n|tjkrj|   nx|tjkrd | _|   nZ|tjkr|   nB|tjkr|   n*|tjkr|   n|tjkr|   n|tjkr |   n|tjkr|   n|tjkrPt| jt s6t	| | jd	 |   n|tj!krh|   nz|tj"kr|   nb|tj#krt| jt$st	| | jd
 |   n*|tj%kr|   n|tj&kr|   n|tj'krn|tj(kr|   n|tj)kr.|  j
d7  _
n|tj*krT|   | | jd n|tj+kr|  j
d7  _
|  j
d7  _
nb|t,kr8| j
| j-d  }|}|.dr|d d }n|d7 }| j/0|}| j/1| |}|| j/j2kr| j/j2| }t3|r|d d }d|| 4|df }| j
d | j- | | _
n|t5krd|6 krX|d nd}	d|6 krr|d nd}
|d }|7dr| j/j8rt9| j/j8|dd  }t:|d|	|
fd}t;d |
d d}|<| | j<| d S )Nr/   rN   FrM   r  z[/i]z[/b]z[/font]r  r  z[/color][/ref]rL   z&br;r   r   z[ref=%s]%s[/ref]r0   i  r1   i,  r2   r   )NN)r2   Z	size_hintr      )r   r1   )=r^   r    rx   r   r   rN   r   r   r   r  rw   set_textr   rM   r   r   r  r   r}   r  r  r  r  r  r   r  r  r  r  r  r  r  r   r  r  r  r   r   r!  r"  r#  r$  r   r   r&   r'  r   r   rh   rz   rs   r&  r  r-   attlistr  r_   r   r<   r   r  )r6   r7   r   ZdocnameZrst_docnamerg   rN   rr   rw   r0   r1   r   r;   anchorr+   r+   r,   r   -  s    










z_Visitor.dispatch_departurec                 C   s^   | j }|dks|dkrd| }| |||_ |j| jjd | jrN| j| d| _ d| _d S )Nr  r  z	[b]%s[/b]r   rP   F)rw   r  rJ   r   r   r   r   )r6   r7   r   rw   r+   r+   r,   r/    s    z_Visitor.set_textc                 C   s    d| j j|| j jd |f S )Nz[color=%s]%s[/color]rM   )r   rD   r   )r6   rw   r  r+   r+   r,   r    s    z_Visitor.colorizeN)r(   r)   r*   r[   r   r   r   r   r   r/  r  r+   r+   r+   r,   r   X  s   '0  w r   __main__)runTouchAppr/   r   )or   __all__osos.pathr   r   r   r   Z
kivy.clockr   Zkivy.compatr   Zkivy.propertiesr	   r
   r   r   r   r   r   r   Z	kivy.langr   Z
kivy.utilsr   r   Zkivy.uix.widgetr   Zkivy.uix.scrollviewr   Zkivy.uix.gridlayoutr   Zkivy.uix.labelr   Zkivy.uix.imager   r   Zkivy.uix.videoplayerr   Zkivy.uix.anchorlayoutr   Zkivy.animationr   Zkivy.loggerr   Zdocutils.parsersr   Zdocutils.parsers.rstr   Zdocutilsr    r!   r"   r#   r$   Zdocutils.parsers.rst.rolesr%   environZInlineZTextElementr&   ZGeneralr-   r.   Zgeneric_docrolesitemsZrolenameZ	nodeclassZGenericRoleZgenericZ
CustomRoleroleZregister_local_roleZregister_directiveload_stringr<   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rp   r   r(   Z	kivy.baser3  sysargvr+   r+   r+   r,   <module>   s   <( 
     	)    }
