B ç0œ`:Yã@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/sf/wxz_36012wxg_prv29r6623x5vlqx8/T/pip-target-tft40_m7/lib/python/docutils/parsers/rst/directives/tables.pyÚalignsrc@sxeZdZdZdZdZejeje ej e  dej ¡dœZ dZdd„Zdd „Zd d „Zd d „Zedd„ƒZdd„Zdd„ZdS)ÚTablez# Generic table base class. éT)ÚautoZgrid)ÚclassÚnamerÚwidthÚ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)r rÚ table_headÚmax_header_colsÚrowsrrrÚprocess_header_option8s   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)r r-Ú header_rowsÚ stub_columnsr1ÚrowrrrÚcheck_table_dimensionsCs2   zTable.check_table_dimensionscCsd|jkr|j d¡|d<dS)Nr)r&Úget)r Ú table_noderrrÚset_table_widthbs zTable.set_table_widthcCs|j dd¡S)Nrr)r&r8)r rrrrfsz 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/rr0r1rrr2r3rr)r Úmax_colsr1Ú col_widthsrrrÚget_column_widthsjszTable.get_column_widthscCsLxF|D]>}x8|D]0}t|ƒ|kr| dddgfg|t|ƒ¡qWqWdS)Nr)r/r*)r ÚcolumnsÚpartsÚpartr6rrrÚ"extend_short_rows_with_empty_cells|s   z(Table.extend_short_rows_with_empty_cellsN)Ú__name__Ú __module__Ú __qualname__Ú__doc__Zoptional_argumentsZfinal_argument_whitespacer Ú class_optionÚ unchangedrÚ length_or_percentage_or_unitlessÚvalue_orÚpositive_int_listÚ option_specZ has_contentr"r.r7r:Úpropertyrr@rDrrrrrs"    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ƒtkr8d d „|jDƒ}x"t||jƒD]\} } | | d <q"W|jd krX|dd g7<n|jrr|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)Úcontentrr0Úwarningrrr2r3rr"ÚElementrÚ nested_parseÚcontent_offsetr/Ú isinstanceÚtabler1r&r8r:r<rr=ÚchildrenÚzipÚadd_nameÚinsert) r rYrr!Únoder1r9ÚtgroupZcolspecsrRÚ col_widthrrrÚrun…sB        z RSTTable.runN)rErFrGrfrrrrrPƒsrPc@sÔeZdZejejejeje dej¡ej ej ej ej eje ejejejejdœ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#rrÚ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)NrkrlFrmrn) rgÚencode_for_csvÚ delimiterÚskipinitialspaceÚ quotecharÚ doublequoteÚ escapecharÚcsvÚDialectÚ__init__)r r&rrrryÐsz!CSVTable.DocutilsDialect.__init__N)rErFrGrHrrrtrursÚstrictÚlineterminatorrwÚ QUOTE_MINIMALÚquotingryrrrrÚDocutilsDialectÄsr~c@s2eZdZdZdZdZdZdZdZdZ dZ e j Z dS) zCSVTable.HeaderDialectz0CSV dialect to use for the "header" option data.rorpú\FTr$N)rErFrGrHrrrtrvrursrzr{rwr|r}rrrrr)Ýsr)cCsdS)Nr)r rrrÚcheck_requirementsêszCSVTable.check_requirementsc Cs4y|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)Nrhriz9File 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)rrQrr)'rÚdocumentÚsettingsZfile_insertion_enabledr&rr0rYrrr2r3rr€r"Ú get_csv_datar.r'r~Úmaxr8r7r*r@rDrÚargsrwÚErrorÚstrÚsysÚ version_infor1Z build_tabler\rr:rarb)r rYrr!Úcsv_datarr+r,r-r>r4r5Z table_bodyr?ÚdetailÚmessager1r^r9rrrrfís\                 z CSVTable.runc Cs²|j d|jjjj¡}|jjjj}|jr‚d|jks.)Údialectr)r) rwÚreaderr¨rZ StringListr™Úappendr…r/) r r‹rªrZ csv_readerr-r>r6Zrow_dataÚcellZ cell_textZ cell_datar)r rr'us     z!CSVTable.parse_csv_data_into_rowsN)rErFrGr Únonnegative_intrJrKrLrMr‘ÚurirjrIrZ$single_char_or_whitespace_or_unicodeÚflagZsingle_char_or_unicoderNrwrxr~r)r€rfr„r‰rŠr¨rqÚ staticmethodr'rrrrrg­s:  0J  rgc@sPeZdZdZejejeje dej¡ej ej e dœZ dd„Z dd„Zdd „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-columnsrrrrrc CsL|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<| | ¡| | ¡|rB|  d|¡| g|S) Nz.The "%s" directive is empty; content required.)rcSsg|]}dd„|dDƒ‘qS)cSsg|] }|j‘qSr)r_)rTÚitemrrrrV¦sz,ListTable.run...rr)rTZrow_listrrrrV¦sz!ListTable.run..rz header-rowsz stub-columnsrrQr)rXrr0r1rrr2r3rr"rZrr[r\Úcheck_list_contentr&r8r7rr†Úbuild_table_from_listr:rarb) r r1rr!rcÚnum_colsr?Ú table_datar4r5rŒr9rrrrfšs8       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/r]rZ bullet_listrr0r1rr2r3rrÚranger@)r rcr1Z 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) NrrQzcolwidths-autozcolwidths-given)ÚcolsrWrZstub) rr^rrdr/rRÚ attributesr6Úentryr¬Útheadr*Útbody)r r·r?r4r5r^rdrerRr-r6Zrow_noder­r»r¼r½rrrrµßs>        zListTable.build_table_from_listN)rErFrGrHr r®rKrLrMrIrJrrNrfr´rµrrrrr²‰s'r²)rHZ __docformat__r‰Úos.pathrrwZdocutilsrrrrZdocutils.utils.error_reportingrZdocutils.utilsrZdocutils.parsers.rstrr rrrPrgr²rrrrÚs    h*]