U
    Be:Y                     @   s   d Z dZddlZddl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 ddlmZ d	d
 ZG dd deZG dd deZG dd deZG dd deZdS )z 
Directives for table elements.
reStructuredText    N)ionodesstatemachineutils)
SafeString)SystemMessagePropagation)	Directive)
directivesc                 C   s   t | dS )N)leftcenterright)r
   choice)argument r   /var/www/nmhs-web.org.in/public_html/infoladakh/backend/venv/lib/python3.8/site-packages/docutils/parsers/rst/directives/tables.pyalign   s    r   c                   @   sx   e Zd ZdZdZdZejeje	ej
edejdZdZdd Zdd	 Zd
d Zdd Zedd Zdd Zdd ZdS )Tablez#
    Generic table base class.
       T)autogrid)classnamer   widthwidthsc                 C   s^   | j rN| j d }| j|| j\}}tj|df| }| j| j\|_|_	nd }g }||fS )Nr    )
	argumentsstateZinline_textlinenor   titlestate_machineZget_source_and_linesourceline)self
title_textZ
text_nodesmessagesr   r   r   r   
make_title+   s    
zTable.make_titlec                 C   sX   | j | jd }g }d}d| jkrP| | jd d|  |\}}|| ||fS )Nr   r   header
)r    
get_sourcer   optionsparse_csv_data_into_rowssplitHeaderDialectextend)r#   r!   
table_headmax_header_colsrowsr   r   r   process_header_option8   s    
 
zTable.process_header_optionc                 C   sD  t ||k rF| jjjd|t || jf t| j| j| jd}t	|t ||  kr^dkrn n8| jjjdt || jf t| j| j| jd}t	||D ]}t ||k r| jjjd|t || jf t| j| j| jd}t	|t ||  krdkrn q| jjjdt || jf t| j| j| jd}t	|qd S )NzP%s header row(s) specified but only %s row(s) of data supplied ("%s" directive).r"   r   zeInsufficient data supplied (%s row(s)); no data remaining for table body, required by "%s" directive.zU%s stub column(s) specified but only %s columns(s) of data supplied ("%s" directive).ziInsufficient data supplied (%s columns(s)); no data remaining for table body, required by "%s" directive.)
lenr    reportererrorr   r   literal_block
block_textr   r   )r#   r1   header_rowsstub_columnsr6   rowr   r   r   check_table_dimensionsC   sb        zTable.check_table_dimensionsc                 C   s   d| j kr| j d|d< d S )Nr   r*   get)r#   
table_noder   r   r   set_table_widthb   s    
zTable.set_table_widthc                 C   s   | j ddS )Nr   r   r=   r#   r   r   r   r   f   s    zTable.widthsc                 C   s   t | jtkrXt| j|krP| jjjd| j|f t	| j
| j
| jd}t|| j}n>|rld| g| }n*| jjjdt	| j
| j
| jd}t||S )Nz="%s" widths do not match the number of columns in table (%s).r3   d   z#No table data detected in CSV file.)typer   listr4   r    r5   r6   r   r   r7   r8   r   r   )r#   max_colsr6   
col_widthsr   r   r   get_column_widthsj   s4       zTable.get_column_widthsc                 C   sD   |D ]:}|D ]0}t ||k r|dddg fg|t |   qqd S )Nr   )r4   r.   )r#   columnspartspartr;   r   r   r   "extend_short_rows_with_empty_cells|   s    z(Table.extend_short_rows_with_empty_cellsN)__name__
__module____qualname____doc__Zoptional_argumentsZfinal_argument_whitespacer
   class_option	unchangedr    length_or_percentage_or_unitlessvalue_orpositive_int_listoption_specZhas_contentr&   r2   r<   r@   propertyr   rG   rK   r   r   r   r   r      s(   
r   c                   @   s   e Zd Zdd ZdS )RSTTablec                 C   s  | j s4| jjjd| j t| j| j| jd}|gS | 	 \}}t
 }| j| j | j| t|dksxt|d tjs| jjjd| j t| j| j| jd}|gS |d }|d  | jdg 7  < | | d| jkr| jd|d< |d }t| jtkr4d	d
 |jD }t|| jD ]\}	}
|
|	d< q | jdkrT|d  dg7  < n| jrn|d  dg7  < | | |r|d| |g| S )Nz:Content block expected for the "%s" directive; none found.r3   r   r   zOError parsing content block for the "%s" directive: exactly one table expected.classesr   r   c                 S   s   g | ]}|j d kr|qS )colspec)tagname).0childr   r   r   
<listcomp>   s    
z RSTTable.run.<locals>.<listcomp>colwidthr   colwidths-autocolwidths-given)contentr    r5   warningr   r   r7   r8   r   r&   Elementr   nested_parsecontent_offsetr4   
isinstancetabler6   r*   r>   r@   rC   r   rD   childrenzipadd_nameinsert)r#   rb   r   r%   noder6   r?   tgroupZcolspecsrY   	col_widthr   r   r   run   sZ      


zRSTTable.runN)rL   rM   rN   ro   r   r   r   r   rW      s   rW   c                   @   s   e Zd Zejejejejedejej	ej
ejejejeejejejejdZG dd dejZG dd dejZdd Zd	d
 Zdd Zejdk rdd Zdd Zndd Zdd ZeeZeeZdd ZdS )CSVTabler   )header-rowsstub-columnsr'   r   r   fileurlencodingr   r   r   delim	keepspacequoteescapec                   @   s6   e Zd ZdZdZdZdZdZdZdZ	e
jZdd ZdS )	zCSVTable.DocutilsDialectz&CSV dialect for `csv_table` directive.,"Tr(   c                 C   sl   d|krt |d | _d|kr&d| _d|kr>t |d | _d|kr\d| _t |d | _tj	|  d S )Nrw   rx   Fry   rz   )
rp   encode_for_csv	delimiterskipinitialspace	quotechardoublequote
escapecharcsvDialect__init__)r#   r*   r   r   r   r      s    z!CSVTable.DocutilsDialect.__init__N)rL   rM   rN   rO   r~   r   r   r   strictlineterminatorr   QUOTE_MINIMALquotingr   r   r   r   r   DocutilsDialect   s   r   c                   @   s2   e Zd ZdZdZdZdZdZdZdZ	dZ
ejZdS )	zCSVTable.HeaderDialectz0CSV dialect to use for the "header" option data.r{   r|   \FTr(   N)rL   rM   rN   rO   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r-      s   r-   c                 C   s   d S Nr   rA   r   r   r   check_requirements   s    zCSVTable.check_requirementsc              
   C   sF  z| j jjjsTd| jks$d| jkrT| jjjd| j t	
| j| j| jd}|gW S |   |  \}}|  \}}|  \}}| || | j|\}}	t|	|}	| jdd}
| jdd}| ||
| ||d |
  ||
d  }| |	}| |	||f W n tk
r< } z|jd g W Y S d }~X Y n tjk
r } z`t|}tjdk rvd	|krv|d
7 }| jjj d| j|f t	
| j| j| jd}|g W Y S d }~X Y nX |||f}| j j!|| j"|| j#d}|d  | jdg 7  < d| jkr| jd|d< | $| | %| |r<|&d| |g| S )Nrt   ru   z9File and URL access deactivated; ignoring "%s" directive.r3   rr   r   rs      z1-character stringz1
with Python 2.x this must be an ASCII character.z)Error with CSV data in "%s" directive:
%s)r   rX   r   r   )'r   documentsettingsZfile_insertion_enabledr*   r    r5   rb   r   r   r7   r8   r   r   r&   get_csv_datar2   r+   r   maxr>   r<   r.   rG   rK   r   argsr   Errorstrsysversion_infor6   Zbuild_tablere   r   r@   rj   rk   )r#   rb   r   r%   csv_datar!   r/   r0   r1   rE   r9   r:   Z
table_bodyrF   detailmessager6   rg   r?   r   r   r   ro      s      
 

  
 

zCSVTable.runc                 C   s  | j d| jjjj}| jjjj}| jrd| j ks<d| j krl| jj	j
d| j t| j| j| jd}t|| jd}| j}n(d| j krd| j kr| jj	j
d| j t| j| j| jd}t|tjtj| jjj}tjtj|| j d }td|}z2| jjjj| tj|||d	}|   }W n\ t!k
r } z<| jj	j"d
| jt#|f t| j| j| jd}t|W 5 d}~X Y nX nd| j krzddl$}	ddl%}	ddl&}	| j d }z|	j'(| }
W np |	j
j)t!t*t+fk
rP } zD| jj	j"d| j| j d t#|f t| j| j| jd}t|W 5 d}~X Y nX tj,|
||| jjjjd}|   }n0| jj	j-d| j t| j| j| jd}t|||fS )zr
        Get CSV data from the directive content, from an external
        file, or from a URL reference.
        rv   rt   ru   zF"%s" directive may not both specify an external file and have content.r3   r   zXThe "file" and "url" options may not be simultaneously specified for the "%s" directive.N)source_pathrv   error_handlerz&Problems with "%s" directive path:
%s.z*Problems with "%s" directive URL "%s":
%s.)r!   r   rv   r   z3The "%s" directive requires content; none supplied.).r*   r>   r   r   r   Zinput_encodingZinput_encoding_error_handlerra   r    r5   r6   r   r   r7   r8   r   r   r!   ospathdirnameabspathZcurrent_sourcenormpathjoinr   relative_pathZrecord_dependenciesaddr   Z	FileInputread
splitlinesIOErrorseverer   urllib.requesturllib.errorurllib.parserequesturlopenURLErrorOSError
ValueErrorZStringInputrb   )r#   rv   r   r6   r!   r   
source_dirZcsv_filer   urllibZcsv_textr   r   r   r     s     
 


  
 zCSVTable.get_csv_datar   c                 C   s
   |  dS Nzutf-8)decodesr   r   r   decode_from_csvi  s    zCSVTable.decode_from_csvc                 C   s
   |  dS r   )encoder   r   r   r   r}   k  s    zCSVTable.encode_for_csvc                 C   s   | S r   r   r   r   r   r   r   n  s    c                 C   s   | S r   r   r   r   r   r   r}   p  s    c              	      s   t j fdd|D |d}g }d}|D ]X}g }|D ]2}	 |	}
dddtj|
 |df}|| q4|| t|t|}q(||fS )Nc                    s   g | ]}  |d  qS )r(   )r}   )r[   r"   rA   r   r   r]   w  s   z5CSVTable.parse_csv_data_into_rows.<locals>.<listcomp>)dialectr   )r!   )	r   readerr   r   Z
StringListr   appendr   r4   )r#   r   r   r!   Z
csv_readerr1   rE   r;   Zrow_datacellZ	cell_textZ	cell_datar   rA   r   r+   u  s&    

 
z!CSVTable.parse_csv_data_into_rowsN)rL   rM   rN   r
   nonnegative_intrQ   rR   rS   rT   r   urirv   rP   r   Z$single_char_or_whitespace_or_unicodeflagZsingle_char_or_unicoderU   r   r   r   r-   r   ro   r   r   r   r   r}   staticmethodr+   r   r   r   r   rp      s>   0J

rp   c                   @   sP   e Zd ZdZejejejedejej	ej
edZdd Zdd Zdd	 Zd
S )	ListTablez
    Implement tables whose data is encoded as a uniform two-level bullet list.
    For further ideas, see
    http://docutils.sf.net/docs/dev/rst/alternatives.html#list-driven-tables
    rq   )rr   rs   r   r   r   r   r   c              
   C   sT  | j s4| jjjd| j t| j| j| jd}|gS | 	 \}}t
 }| j| j | j| zN| |\}}dd |d D }| jdd}| jdd}	| |||	 W n2 tk
r }
 z|
jd g W Y S d }
~
X Y nX | ||||	}d| jkr
| jd|d< |d	  | jd
g 7  < | | | | |rJ|d| |g| S )Nz.The "%s" directive is empty; content required.r3   c                 S   s   g | ]}d d |d D qS )c                 S   s   g | ]
}|j qS r   )rh   )r[   itemr   r   r   r]     s     z,ListTable.run.<locals>.<listcomp>.<listcomp>r   r   )r[   Zrow_listr   r   r   r]     s   z!ListTable.run.<locals>.<listcomp>r   rr   rs   r   rX   r   )ra   r    r5   r6   r   r   r7   r8   r   r&   rc   r   rd   re   check_list_contentr*   r>   r<   r   r   build_table_from_listr@   rj   rk   )r#   r6   r   r%   rl   num_colsrF   
table_datar9   r:   r   r?   r   r   r   ro     s@    " 

zListTable.runc                 C   s@  t |dkst|d tjsL| jjjd| j t| j	| j	| j
d}t||d }tt |D ]}|| }t |dkst|d tjs| jjjd| j|d f t| j	| j	| j
d}t|q`|r t |d |kr,| jjjd| j|d t |d |f t| j	| j	| j
d}t|q`t |d }q`| |}||fS )Nr   r   zUError parsing content block for the "%s" directive: exactly one bullet list expected.r3   zError parsing content block for the "%s" directive: two-level bullet list expected, but row %s does not contain a second-level bullet list.zError parsing content block for the "%s" directive: uniform two-level bullet list expected, but row %s does not contain the same number of items as row 1 (%s vs %s).)r4   rf   r   Zbullet_listr    r5   r6   r   r7   r8   r   r   rangerG   )r#   rl   r6   Z	list_nodeZ
item_indexr   r   rF   r   r   r   r     sJ     


zListTable.check_list_contentc                 C   s(  t  }| jdkr&|d  dg7  < n| jr>|d  dg7  < t jt|d}||7 }|D ]<}t  }|d k	rx||jd< |rd|jd< |d8 }||7 }qZg }	|D ]8}
t  }|
D ]}t  }||7 }||7 }q|		| q|rt 
 }||	d |  ||7 }t  }||	|d   ||7 }|S )	Nr   rX   r_   r`   )colsr^   r   Zstub)r   rg   r   rm   r4   rY   
attributesr;   entryr   theadr.   tbody)r#   r   rF   r9   r:   rg   rm   rn   rY   r1   r;   Zrow_noder   r   r   r   r   r   r   r     s>    




zListTable.build_table_from_listN)rL   rM   rN   rO   r
   r   rR   rS   rT   rP   rQ   r   rU   ro   r   r   r   r   r   r   r     s   	'r   )rO   __docformat__r   os.pathr   r   Zdocutilsr   r   r   r   Zdocutils.utils.error_reportingr   Zdocutils.utilsr   Zdocutils.parsers.rstr	   r
   r   r   rW   rp   r   r   r   r   r   <module>   s   h* ]