B “äî\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úJ/tmp/pip-build-uw_ogi45/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Ú) Z 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_columnsr/Ú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.r/rrr0r1rr)rÚmax_colsr/Ú col_widthsrrrÚget_column_widthseszTable.get_column_widthscCsLxF|D]>}x8|D]0}t|ƒ|kr| dddgfg|t|ƒ¡qWqWdS)Nr)r-r()rÚcolumnsÚpartsÚpartr4rrrÚ"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,r5Úpropertyrr<r@rrrrrs    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.Úwarningrrr0r1rr ÚElementrÚ nested_parseÚcontent_offsetr-Ú isinstanceÚtabler/r$r6r8rr9ÚchildrenÚzipÚadd_nameÚinsert) rrTrrÚnoder/Ú table_nodeÚtgroupZcolspecsrMÚ col_widthrrrÚrun€s@       z RSTTable.runN)rArBrCrbrrrrrK~srKc@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)NrgrhFrirj) rcÚencode_for_csvÚ delimiterÚskipinitialspaceÚ quotecharÚ doublequoteÚ escapecharÚcsvÚDialectÚ__init__)rr$rrrruÉsz!CSVTable.DocutilsDialect.__init__N)rArBrCrDrnrprqroÚstrictÚlineterminatorrsÚ QUOTE_MINIMALÚquotingrurrrrÚDocutilsDialect½srzc@s2eZdZdZdZdZdZdZdZdZ dZ e j Z dS) zCSVTable.HeaderDialectz0CSV dialect to use for the "header" option data.rkrlú\FTr"N)rArBrCrDrnrprrrqrorvrwrsrxryrrrrr'Ö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)Nrdrez9File 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)rrLrr)&rÚdocumentÚsettingsZfile_insertion_enabledr$rr.rTrrr0r1rr|r Ú get_csv_datar,r%rzÚmaxr6r5r(r<r@rÚargsrsÚErrorÚstrÚsysÚ version_infor/Z build_tablerWrr\r])rrTrrÚcsv_datarr)r*r+r:r2r3Z table_bodyr;ÚdetailÚmessager/rYr_rrrrbæsZ                z CSVTable.runc Cs²|j d|jjjj¡}|jjjj}|jr‚d|jks.)Údialectr)r) rsÚreaderr£rZ StringListr”Úappendrr-) rr‡r¥rZ csv_readerr+r:r4Zrow_dataÚcellZ cell_textZ cell_datar)rrr%ms     z!CSVTable.parse_csv_data_into_rowsN)rArBrCr Únonnegative_intrFrGrHrÚurirfrErZ$single_char_or_whitespace_or_unicodeÚflagZsingle_char_or_unicoderIrsrtrzr'r|rbr€r…r†r£rmÚ staticmethodr%rrrrrc§s8  /J  rcc@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)rZ)rOÚitemrrrrQsz,ListTable.run...rr)rOZrow_listrrrrQsz!ListTable.run..rz header-rowsz stub-columnsrrLr)rSrr.r/rrr0r1rr rUrrVrWÚcheck_list_contentr$r6r5rr‚Úbuild_table_from_listr\r]) rr/rrr^Únum_colsr;Ú table_datar2r3rˆr_rrrrb‘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-rXrZ bullet_listrr.r/rr0r1rrÚranger<)rr^r/Z 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) NrrLzcolwidths-autozcolwidths-given)ÚcolsrRrZstub) rrYrr`r-rMÚ attributesr4Úentryr§Útheadr(Útbody)rr²r;r2r3rYr`rarMr+r4Zrow_noder¨r¶r·r¸rrrr°Õs>        zListTable.build_table_from_listN)rArBrCrDr r©rGrHrErFrrIrbr¯r°rrrrr­s'r­)rDZ __docformat__r…Úos.pathrŒrsZdocutilsrrrrZdocutils.utils.error_reportingrZdocutils.utilsrZdocutils.parsers.rstrr rrrKrcr­rrrrÚs    c)[