B ¡w­\XWã@s´dZdZddlZddlZddlZddlmZmZm Z m Z ddl m Z ddl mZddlmZddlmZd d „ZGd d „d eƒZGd d„deƒZGdd„deƒZGdd„deƒZdS)z Directives for table elements. ZreStructuredTextéN)ÚioÚnodesÚ statemachineÚutils)Ú SafeString)ÚSystemMessagePropagation)Ú Directive)Ú directivescCs t |d¡S)N)ÚleftÚcenterÚright)r Úchoice)Zargument©rú€/private/var/folders/j5/hv2kzfgs4sl6jnf70fy_2vrc4p3c_b/T/pip-install-d8kq1y21/docutils/docutils/parsers/rst/directives/tables.pyÚalignsrc@sleZdZdZdZdZejeje e  dej ¡dœZ dZ dd„Zdd „Zd d „Zed d „ƒZdd„Zdd„ZdS)ÚTablez# Generic table base class. éT)ÚautoZgrid)ÚclassÚnamerÚwidthscCs^|jrN|jd}|j ||j¡\}}tj|df|žŽ}|j |j¡\|_|_ nd}g}||fS)NrÚ) Ú argumentsÚstateZ inline_textÚlinenorÚtitleÚ state_machineZget_source_and_lineÚsourceÚline)ÚselfZ title_textZ text_nodesÚmessagesrrrrÚ make_title*s  zTable.make_titlecCsX|j |jd¡}g}d}d|jkrP| |jd d¡| ¡|¡\}}| |¡||fS)NrrÚheaderÚ )rÚ get_sourcerÚoptionsÚparse_csv_data_into_rowsÚsplitÚ HeaderDialectÚextend)rrÚ table_headÚmax_header_colsÚrowsrrrÚprocess_header_option7s   zTable.process_header_optioncCsHt|ƒ|krF|jjjd|t|ƒ|jft |j|j¡|jd}t |ƒ‚t|ƒ|kr^dkršnn8|jjjdt|ƒ|jft |j|j¡|jd}t |ƒ‚x¨|D] }t|ƒ|krê|jjjd|t|ƒ|jft |j|j¡|jd}t |ƒ‚t|ƒ|krdkr nq |jjjdt|ƒ|jft |j|j¡|jd}t |ƒ‚q WdS)NzP%s header row(s) specified but only %s row(s) of data supplied ("%s" directive).)rrzeInsufficient 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ÚerrorrrÚ literal_blockÚ block_textrr)rr,Ú header_rowsÚ stub_columnsr0ÚrowrrrÚcheck_table_dimensionsBs2   zTable.check_table_dimensionscCs|j dd¡S)Nrr)r%Úget)rrrrrasz Table.widthscCsšt|jƒtkrXt|jƒ|krP|jjjd|j|ft  |j |j ¡|j d}t |ƒ‚|j}n>|rld|g|}n*|jjjdt  |j |j ¡|j d}t |ƒ‚|S)Nz="%s" widths do not match the number of columns in table (%s).)rédz#No table data detected in CSV file.) ÚtyperÚlistr.rr/r0rrr1r2rr)rÚmax_colsr0Ú col_widthsrrrÚget_column_widthseszTable.get_column_widthscCsLxF|D]>}x8|D]0}t|ƒ|kr| dddgfg|t|ƒ¡qWqWdS)Nr)r.r))rÚcolumnsÚpartsÚpartr5rrrÚ"extend_short_rows_with_empty_cellsws   z(Table.extend_short_rows_with_empty_cellsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Zoptional_argumentsZfinal_argument_whitespacer Ú class_optionÚ unchangedrÚvalue_orÚpositive_int_listÚ option_specZ has_contentr!r-r6Úpropertyrr=rArrrrrs    rc@seZdZdd„ZdS)ÚRSTTablec CsŽ|js4|jjjd|jt |j|j¡|jd}|gS|  ¡\}}t  ¡}|j   |j|j |¡t|ƒdksxt|dtjƒs¦|jjjd|jt |j|j¡|jd}|gS|d}|d|j dg¡7<d|jkrâ|j d¡|d<|d}t|jƒtkr.d d „|jDƒ}x"t||jƒD]\} } | | d <qW|jd krN|dd g7<n|jrh|ddg7<| |¡|r„| d|¡|g|S)Nz:Content block expected for the "%s" directive; none found.)rrrzOError parsing content block for the "%s" directive: exactly one table expected.ÚclassesrrcSsg|]}|jdkr|‘qS)Úcolspec)Útagname)Ú.0Úchildrrrú –sz RSTTable.run..Úcolwidthrzcolwidths-autozcolwidths-given)Úcontentrr/Úwarningrrr1r2rr!ÚElementrÚ nested_parseÚcontent_offsetr.Ú isinstanceÚtabler0r%r7r9rr:ÚchildrenÚzipÚadd_nameÚinsert) rrUrr Únoder0Ú table_nodeÚtgroupZcolspecsrNÚ col_widthrrrÚrun€s@       z RSTTable.runN)rBrCrDrcrrrrrL~srLc@sÐeZdZejejeje dej¡ejej ej ej eje ej ejejejdœZGdd„dejƒZGdd„dejƒZdd„Zd d „Zd d „Zejd kr¤dd„Zdd„Zndd„Zdd„ZeeƒZeeƒZdd„ZdS)ÚCSVTable)r)z header-rowsz stub-columnsr"rÚfileÚurlÚencodingrrrÚdelimÚ keepspaceÚquoteÚescapec@s6eZdZdZdZdZdZdZdZdZ e j Z dd„Z dS) zCSVTable.DocutilsDialectz&CSV dialect for `csv_table` directive.ú,ú"Tr#cCsld|krt |d¡|_d|kr&d|_d|kr>t |d¡|_d|kr\d|_t |d¡|_tj  |¡dS)NrhriFrjrk) rdÚencode_for_csvÚ delimiterÚskipinitialspaceÚ quotecharÚ doublequoteÚ escapecharÚcsvÚDialectÚ__init__)rr%rrrrvÉsz!CSVTable.DocutilsDialect.__init__N)rBrCrDrErorqrrrpÚstrictÚlineterminatorrtÚ QUOTE_MINIMALÚquotingrvrrrrÚDocutilsDialect½sr{c@s2eZdZdZdZdZdZdZdZdZ dZ e j Z dS) zCSVTable.HeaderDialectz0CSV dialect to use for the "header" option data.rlrmú\FTr#N)rBrCrDrErorqrsrrrprwrxrtryrzrrrrr(Ösr(cCsdS)Nr)rrrrÚcheck_requirementsãszCSVTable.check_requirementsc Cs*y|jjjjsRd|jks$d|jkrR|jjjd|jt   |j |j ¡|j d}|gS|  ¡| ¡\}}| ¡\}}| ¡\}}| || |j¡|¡\}} t| |ƒ} |j dd¡} |j dd¡} | || | ¡| |d| …¡|| d…} | | ¡} | | || f¡Wn¤tk r2}z |jdgSd}~XYnztjk rª}zXt|ƒ}tjdkrld |krl|d 7}|jjj d |j|ft   |j |j ¡|j d}|gSd}~XYnX| || f}|jj!||j"| |j#d }|d |j dg¡7<d|jkr|j d¡|d<| $|¡|r | %d|¡|g|S)Nrerfz9File and URL access deactivated; ignoring "%s" directive.)rz header-rowsrz stub-columns)éz1-character stringz1 with Python 2.x this must be an ASCII character.z)Error with CSV data in "%s" directive: %s)rrMrr)&rÚdocumentÚsettingsZfile_insertion_enabledr%rr/rUrrr1r2rr}r!Ú get_csv_datar-r&r{Úmaxr7r6r)r=rArÚargsrtÚErrorÚstrÚsysÚ version_infor0Z build_tablerXrr]r^)rrUrr Úcsv_datarr*r+r,r;r3r4Z table_bodyr<ÚdetailÚmessager0rZr`rrrrcæsZ                z CSVTable.runc Cs²|j d|jjjj¡}|jjjj}|jr‚d|jks.)Údialectr)r) rtÚreaderr¤rZ StringListr•Úappendr‚r.) rrˆr¦rZ csv_readerr,r;r5Zrow_dataÚcellZ cell_textZ cell_datar)rrr&ms     z!CSVTable.parse_csv_data_into_rowsN)rBrCrDr Únonnegative_intrGrHrIrŽÚurirgrFrZ$single_char_or_whitespace_or_unicodeÚflagZsingle_char_or_unicoderJrtrur{r(r}rcrr†r‡r¤rnÚ staticmethodr&rrrrrd§s8  /J  rdc@sLeZdZdZejeje dej¡ejej e dœZ dd„Z dd„Z dd „Zd 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 )r)z header-rowsz stub-columnsrrrrc CsB|js4|jjjd|jt |j|j¡|jd}|gS|  ¡\}}t  ¡}|j   |j|j |¡yN| |¡\}}dd„|dDƒ}|j dd¡}|j dd¡} | ||| ¡Wn*tk rÔ} z | jdgSd} ~ XYnX| |||| ¡} d|jkr|j d¡| d<| d |j d g¡7<| | ¡|r8|  d|¡| g|S) Nz.The "%s" directive is empty; content required.)rcSsg|]}dd„|dDƒ‘qS)cSsg|] }|j‘qSr)r[)rPÚitemrrrrRsz,ListTable.run...rr)rPZrow_listrrrrRsz!ListTable.run..rz header-rowsz stub-columnsrrMr)rTrr/r0rrr1r2rr!rVrrWrXÚcheck_list_contentr%r7r6rrƒÚbuild_table_from_listr]r^) rr0rr r_Únum_colsr<Ú table_datar3r4r‰r`rrrrc‘s6      z ListTable.runcCsDt|ƒdkst|dtjƒsL|jjjd|jt |j |j ¡|j d}t |ƒ‚|d}xÜt t|ƒƒD]Ì}||}t|ƒdksŠt|dtjƒsÄ|jjjd|j|dft |j |j ¡|j d}t |ƒ‚qb|r"t|dƒ|kr.|jjjd|j|dt|dƒ|ft |j |j ¡|j d}t |ƒ‚qbt|dƒ}qbW|  |¡}||fS)NrrzUError parsing content block for the "%s" directive: exactly one bullet list expected.)rz‹Error parsing content block for the "%s" directive: two-level bullet list expected, but row %s does not contain a second-level bullet list.z¥Error 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).)r.rYrZ bullet_listrr/r0rr1r2rrÚranger=)rr_r0Z list_nodeZ item_indexr¯r²r<rrrr°®s6     zListTable.check_list_contentcCs4t ¡}|jdkr&|ddg7<n|jr>|ddg7<tjt|ƒd}||7}xD|D]<}t ¡}|dk rz||jd<|rd|jd<|d8}||7}q\Wg} xD|D]<} t ¡} x$| D]} t ¡} | | 7} | | 7} q¸W|   | ¡q¦W|rt  ¡}|  | d|…¡||7}t  ¡}|  | |d…¡||7}|S) NrrMzcolwidths-autozcolwidths-given)ÚcolsrSrZstub) rrZrrar.rNÚ attributesr5Úentryr¨Útheadr)Útbody)rr³r<r3r4rZrarbrNr,r5Zrow_noder©r·r¸r¹rrrr±Õs>        zListTable.build_table_from_listN)rBrCrDrEr rªrHrIrFrGrrJrcr°r±rrrrr®s'r®)rEZ __docformat__r†Úos.pathrrtZdocutilsrrrrZdocutils.utils.error_reportingrZdocutils.utilsrZdocutils.parsers.rstrr rrrLrdr®rrrrÚs    c)[