From: Felix W. <fel...@us...> - 2004-06-14 11:52:32
|
Update of /cvsroot/docutils/sandbox/dpriest/csvtable In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31673 Modified Files: csv-directive_test-external_table.txt csv-directive_test.txt csvtable.py csvtable.txt Log Message: various changes Index: csvtable.py =================================================================== RCS file: /cvsroot/docutils/sandbox/dpriest/csvtable/csvtable.py,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- csvtable.py 14 Jun 2004 01:19:35 -0000 1.1 +++ csvtable.py 14 Jun 2004 11:52:15 -0000 1.2 @@ -10,7 +10,9 @@ """ -import csv, os.path +import csv +import os.path +import operator from docutils import nodes, statemachine, utils from docutils.transforms import references from docutils.parsers.rst import directives @@ -20,7 +22,7 @@ delimiter = ',' quotechar = '"' doublequote = True - skipinitialspace = False + skipinitialspace = True lineterminator = '\r\n' quoting = csv.QUOTE_MINIMAL @@ -34,7 +36,6 @@ self.lineterminator = '/r' elif options['lineend'] == 'lf': self.lineterminator = '/n' - self.skipinitialspace = options.has_key('skipspace') if options.has_key('escape'): self.doublequote = False self.escapechar = str(options['escape']) @@ -112,30 +113,32 @@ nodes.literal_block(block_text, block_text), line=lineno) return [error] - # populate header: default to single line header unless overridden + # populate header from header-option. tablehead = [] # optionable column headers if options.has_key('headers'): - list = options['headers'].split('" "') - rowdata = [] - for j in list: - cell = statemachine.StringList((j.strip('"'),), source=source) # strip leftover quotes - celldata = (0,0,0,cell) - rowdata.append(celldata) - tablehead = tablehead + [rowdata,] + for i in csv.reader(options['headers'].split('\n'), skipinitialspace=True): + rowdata = [] + for j in i: + cell = statemachine.StringList((j,), source=source) + celldata = (0,0,0,cell) + rowdata.append(celldata) + tablehead.append(rowdata) # if not overridden, use first row as headers - if (not options.has_key('headrows')) and (not options.has_key('headers')): - options['headrows'] = 1 + if (not options.has_key('header-rows')) and (not options.has_key('headers')): + options['header-rows'] = 1 else: - options['headrows'] = 0 - for i in range(options['headrows']): + options.setdefault('header-rows', '0') + options['header-rows'] = int(options['header-rows']) + # populate header from header-rows option. + for i in range(options['header-rows']): row = csvreader.next() rowdata = [] for j in row: cell = statemachine.StringList((j,), source=source) celldata = (0,0,0,cell) rowdata.append(celldata) - tablehead = tablehead + [rowdata,] + tablehead.append(rowdata) # populate tbody tablebody = [] for row in csvreader: @@ -144,29 +147,24 @@ j = statemachine.StringList((i,), source=source) celldata = (0,0,0,j) rowdata.append(celldata) - tablebody = tablebody + [rowdata,] + tablebody.append(rowdata) if tablebody == []: error = state_machine.reporter.error( '"%s" directive requires table body content.' % name, nodes.literal_block(block_text, block_text), line=lineno) return [error] # calculate column widths - maxcols = 0 - for i in tablehead: - if len(i) > maxcols: - maxcols = len(i) - for i in tablebody: - if len(i) > maxcols: - maxcols = len(i) + maxcols = max(map(len, tablehead + tablebody)) if options.has_key('widths'): - if options['widths'].find(','): - tablecolwidths = [options['widths'].replace(' ','').split(','),][0] + if ',' in options['widths']: + tablecolwidths = options['widths'].replace(' ','').split(',') else: - tablecolwidths = [options['widths'].split(' '),] + tablecolwidths = filter(options['widths'].split(' ')) if len(tablecolwidths) != maxcols: error = state_machine.reporter.error( '"%s" widths does not match number of columns in table.' % name, nodes.literal_block(block_text, block_text), line=lineno) + tablecolwidths = map(int, tablecolwidths) else: tablecolwidths = [100/maxcols]*maxcols @@ -226,7 +224,7 @@ return argument csvtable.arguments = (0, 1, 1) -csvtable.options = {'headrows': directives.nonnegative_int, +csvtable.options = {'header-rows': directives.nonnegative_int, 'headers': directives.unchanged, 'widths': nonzero_int_list, 'file' : directives.path, @@ -234,7 +232,6 @@ 'delim' : single_char, # field delim char 'quote' : single_char, # text field quote/unquote char 'lineend' : line_end, # line end char(s) - 'skipspace' : directives.flag, # ignore whitespace after delim? 'escape' : single_char, # char used to escape delim & quote as-needed } csvtable.content = 1 Index: csvtable.txt =================================================================== RCS file: /cvsroot/docutils/sandbox/dpriest/csvtable/csvtable.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- csvtable.txt 14 Jun 2004 01:19:35 -0000 1.1 +++ csvtable.txt 14 Jun 2004 11:52:15 -0000 1.2 @@ -10,7 +10,7 @@ The "csvtable" directive is used to create a table:: .. csvtable:: Frozen Delights! - :headers: "Treat" "Quantity" "Description" + :headers: "Treat", "Quantity", "Description" :widths: 15, 10, 30 "Albatross", 2.99, "On a stick!" @@ -23,11 +23,11 @@ Set a "class" attribute value on the table element. See the class_ directive below. -``headrows`` : integer +``header-rows`` : integer The number of rows to use in the table header. Optional: defaults to 1 unless ``headers`` is also defined. -``headers`` : "column head" ["column head"...] +``headers`` : "column head", ["column head", ...] Sets column table headers. Optional: if defined, ``headrows`` defaults to 0 unless explicitly overridden. @@ -52,10 +52,6 @@ for external CSV files. Optional: defaults to ``crlf`` (carriage return + linefeed). -``skipspace`` : - When defined, whitespace immediately following the delimiter is ignored. - Optional: when not defined, whitespace is not ignored. - ``escape`` : [char | tab | space | lf | ff | vt | hex ##] A one-character string used to escape the delimiter or quote characters. Used when the delimiter is used in an unquoted field, or when quote Index: csv-directive_test.txt =================================================================== RCS file: /cvsroot/docutils/sandbox/dpriest/csvtable/csv-directive_test.txt,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- csv-directive_test.txt 14 Jun 2004 01:21:21 -0000 1.2 +++ csv-directive_test.txt 14 Jun 2004 11:52:15 -0000 1.3 @@ -1,22 +1,23 @@ Headline ======== -+--------------------------+------------+----------+----------+ -| Header row, column 1 | Header 2 | Header 3 | Header 4 | -+==========================+============+==========+==========+ -| body *row* 1, column 1 | column 2 | column 3 | column 4 | -+--------------------------+------------+----------+----------+ -| body row 2 | Cells may span columns. | -+--------------------------+------------+---------------------+ -| body row 3 | Cells may | - Table cells | -+--------------------------+ span rows. | - contain | -| body row 4 | | - body elements. | -+--------------------------+------------+---------------------+ +.. table:: Standard table + + +--------------------------+------------+----------+----------+ + | Header row, column 1 | Header 2 | Header 3 | Header 4 | + +==========================+============+==========+==========+ + | body *row* 1, column 1 | column 2 | column 3 | column 4 | + +--------------------------+------------+----------+----------+ + | body row 2 | Cells may span columns. | + +--------------------------+------------+---------------------+ + | body row 3 | Cells may | - Table cells | + +--------------------------+ span rows. | - contain | + | body row 4 | | - body elements. | + +--------------------------+------------+---------------------+ -.. csvtable:: SpamSpamSpamSpamRat - :headrows: 1 - :skipspace: yes +.. csvtable:: Inline CSV table + :header-rows: 1 :widths: 24, 10, 10, 12 "Header row, column 1", "Header 2", "Header 3", "Header 4" @@ -26,6 +27,5 @@ "Body row 4", , , -.. csvtable:: - :class: EXTERNAL TABLE! +.. csvtable:: Included CSV table :file: csv-directive_test-external_table.txt Index: csv-directive_test-external_table.txt =================================================================== RCS file: /cvsroot/docutils/sandbox/dpriest/csvtable/csv-directive_test-external_table.txt,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- csv-directive_test-external_table.txt 14 Jun 2004 01:19:35 -0000 1.1 +++ csv-directive_test-external_table.txt 14 Jun 2004 11:52:15 -0000 1.2 @@ -1,5 +1,5 @@ -"Header row, column 1","Header 2","Header 3","Header 4" -"Body row 1, column 1","Column 2","Column 3","Column 4" -"Body row 2","Cells may span columns.",, -"Body row 3","Cells may span rows.","- Table cells - contain - body elements.", +"Header row, column 1", "Header 2", "Header 3", "Header 4" +"Body row 1, column 1", "Column 2", "Column 3", "Column 4" +"Body row 2", "Cells may span columns.", , +"Body row 3", "Cells may span rows.", "- Table cells - contain - body elements.", "Body row 4",,, |