diff --git a/lib/scripts/csv2lyx.py b/lib/scripts/csv2lyx.py
index 7fe4bf7da7..2e8bbbb1d8 100644
--- a/lib/scripts/csv2lyx.py
+++ b/lib/scripts/csv2lyx.py
@@ -6,8 +6,8 @@
# Licence details can be found in the file COPYING.
# author Hartmut Haase
+# author Uwe Stöhr
# author José Matos
-
# Full author contact details are available in file CREDITS
# This script reads a csv-table (file name.csv) and converts it into
@@ -24,86 +24,7 @@ def error(message):
sys.stderr.write(message + '\n')
sys.exit(1)
-# processing command line options
-# delegate this to standard module optparse
-args = {}
-args["usage"] = "Usage: csv2lyx [options] mycsvfile mytmptable.lyx"
-
-args["description"] = """This script creates a LyX document containing a table
-from a comma-separated-value file. The LyX file has format 276
-and can be opened with LyX 1.5.0 and newer.
-"""
-parser = optparse.OptionParser(**args)
-
-parser.set_defaults(excel = 'n', column_sep = 'n', guess_sep = False)
-parser.add_option("-e", "--excel",
- help="""'character' Excel type, default is 'n'
- 'e': Excel-generated CSV file
- 't': Excel-generated TAB-delimited CSV file""")
-parser.add_option("-s", "--separator", dest="column_sep",
- help= "column separator, default is ','")
-parser.add_option("-g", "--guess-sep", action="store_true",
- help = "guess the columns separator")
-
-group = optparse.OptionGroup(parser, "Remarks", """If your .csv file contains special characters (e. g. umlauts,
- accented letters, etc.) make sure it is coded in UTF-8 (unicode).
- Else LyX will loose some cell contents. If your .csv file was not written according to the "Common Format and MIME Type for Comma-Separated Values (CSV) Files" (http://tools.ietf.org/html/rfc4180) there may be unexpected results.""")
-parser.add_option_group(group)
-
-(options, args) = parser.parse_args()
-
-# validate input
-if len(args) == 1:
- infile = args[0]
- fout = sys.stdout
-elif len(args) ==2:
- infile = args[0]
- fout = open(args[1], 'w')
-else:
- parser.print_help()
- sys.exit(1)
-
-if not os.path.exists(infile):
- error('File "%s" not found.' % infile)
-
-dialects = {'n' : None, 'e' : 'excel', 't' : 'excel-tab'}
-if options.excel not in dialects:
- parser.print_help()
- sys.exit(1)
-dialect= dialects[options.excel]
-
-# when no special column separator is given, try to detect it:
-if options.column_sep == 'n':
- options.guess_sep = 'True'
-print options.column_sep, options.guess_sep
-if options.guess_sep:
- guesser = csv.Sniffer()
- input_file = "".join(open(infile,'rb').readlines())
- try:
- dialect = guesser.sniff(input_file)
- print 'found:', dialect.delimiter
- reader = csv.reader(open(infile, "rb"), dialect= dialect)
- except:
- print 'error, using ,'
- reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=',')
-else:
- reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=options.column_sep)
-
-# read input
-num_cols = 1 # max columns
-rows = []
-
-for row in reader:
- num_cols = max(num_cols, len(row))
- rows.append(row)
-
-num_rows = reader.line_num # number of lines
-
-# create a LyX file
-#####################
-# write first part
-####################
-fout.write("""#csv2lyx created this file
+header = """#csv2lyx created this file
\lyxformat 276
\\begin_document
\\begin_header
@@ -142,50 +63,21 @@ fout.write("""#csv2lyx created this file
\\begin_layout Standard
\\align left
\\begin_inset Tabular
-""")
-fout.write('\n')
-fout.write('\n')
-#####################
-# write table
-####################
-i = 0
-while i < num_cols:
- fout.write('\n')
- i += 1
-j = 0
-while j < num_rows:
- fout.write('\n')
- num_cols_2 = len(rows[j]) # columns in current row
- #print j, ': ' , rows[j]
-############################
-# write contents of one line
-############################
- i = 0
- while i < num_cols_2:
- fout.write("""
+
+
+"""
+
+cell = """
\\begin_inset Text
-\\begin_layout Standard\n""")
- #print rows[j][i]
- fout.write(rows[j][i])
- fout.write('\n\\end_layout\n\n\\end_inset\n | \n')
- i += 1
-# If row has less columns than num_cols
- if num_cols_2 < num_cols:
- while i < num_cols:
- fout.write("""
-\\begin_inset Text
+\\begin_layout Standard
+%s
+\\end_layout
-\\begin_layout Standard\n""")
- fout.write(' ')
- fout.write('\n\\end_layout\n\n\\end_inset\n | \n')
- i += 1
- fout.write(' |
\n')
- j += 1
-#####################
-# write last part
-####################
-fout.write("""
+\\end_inset
+"""
+
+footer = """
\\end_inset
@@ -193,6 +85,113 @@ fout.write("""
\\end_layout
\\end_body
-\\end_document\n""")
+\\end_document
+"""
+
+# processing command line options
+# delegate this to standard module optparse
+args = {}
+args["usage"] = "Usage: csv2lyx [options] csvfile [file.lyx]"
+
+args["description"] = """This script creates a LyX document containing a table created from a
+comma-separated-value (CSV) file. The resulting LyX file can be opened
+with LyX 1.5.0 or any later version.
+If no options are given csv2lyx will try to infer the CSV type of the csvfile,
+"""
+parser = optparse.OptionParser(**args)
+
+parser.set_defaults(excel='', column_sep='')
+parser.add_option("-e", "--excel", metavar="CHAR",
+ help="""CHAR corresponds to a CSV type:
+ 'e': Excel-generated CSV file
+ 't': Excel-generated TAB-delimited CSV file""")
+parser.add_option("-s", "--separator", dest="column_sep",
+ help= """column separator
+ 't' means Tab""")
+
+group = optparse.OptionGroup(parser, "Remarks", """If your CSV file contains special characters (e. g. umlauts,
+ accented letters, etc.) make sure it is coded in UTF-8 (unicode).
+ Else LyX will loose some cell contents. If your CSV file was not written according to the "Common Format and MIME Type for Comma-Separated Values (CSV) Files" (http://tools.ietf.org/html/rfc4180) there may be unexpected results.""")
+parser.add_option_group(group)
+
+(options, args) = parser.parse_args()
+
+# validate input
+if len(args) == 1:
+ infile = args[0]
+ fout = sys.stdout
+elif len(args) ==2:
+ infile = args[0]
+ fout = open(args[1], 'w')
+else:
+ parser.print_help()
+ sys.exit(1)
+
+if not os.path.exists(infile):
+ error('File "%s" not found.' % infile)
+
+dialects = {'' : None, 'e' : 'excel', 't' : 'excel-tab'}
+if options.excel not in dialects:
+ parser.print_help()
+ sys.exit(1)
+dialect= dialects[options.excel]
+
+# Set Tab, if necessary
+if options.column_sep == 't':
+ options.column_sep = "\t"
+
+# when no special column separator is given, try to detect it:
+if options.column_sep or dialect :
+ reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=options.column_sep)
+else:
+ guesser = csv.Sniffer()
+ input_file = "".join(open(infile,'rb').readlines())
+ try:
+ dialect = guesser.sniff(input_file)
+ reader = csv.reader(open(infile, "rb"), dialect= dialect)
+ except:
+ reader = csv.reader(open(infile, "rb"), dialect= dialect, delimiter=',')
+
+# read input
+num_cols = 1 # max columns
+rows = []
+
+for row in reader:
+ num_cols = max(num_cols, len(row))
+ rows.append(row)
+
+num_rows = reader.line_num # number of lines
+
+# create a LyX file
+#####################
+# write first part
+####################
+fout.write(header % (num_rows, num_cols))
+
+#####################
+# write table
+####################
+for i in range(num_cols):
+ fout.write('\n')
+
+for j in range(num_rows):
+ row = ['']
+
+ ############################
+ # write contents of one line
+ ############################
+ for i in range(len(rows[j])):
+ row.append( cell % rows[j][i])
+
+ # If row has less columns than num_cols fill with blank entries
+ for i in range(len(rows[j]), num_cols):
+ row.append(cell % " ")
+
+ fout.write("\n".join(row) + '\n
\n')
+
+#####################
+# write last part
+####################
+fout.write(footer)
# close the LyX file
fout.close()