From: Jürgen Spitzmüller Date: Mon, 5 May 2008 17:08:21 +0000 (+0000) Subject: * Hartmut's csv2lyx script X-Git-Tag: 1.6.10~4894 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=42aaa245db9e91713427053d14bda6f700e214ee;p=lyx.git * Hartmut's csv2lyx script git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24620 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/development/scons/scons_manifest.py b/development/scons/scons_manifest.py index f18105d252..27e14718f8 100644 --- a/development/scons/scons_manifest.py +++ b/development/scons/scons_manifest.py @@ -2659,6 +2659,7 @@ lib_scripts_files = Split(''' TeXFiles.py clean_dvi.py convertDefault.py + csv2lyx.py date.py ext_copy.py fen2ascii.py diff --git a/lib/Makefile.am b/lib/Makefile.am index 91b7f94429..2b5755c52b 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -1076,6 +1076,7 @@ scriptsdir = $(pkgdatadir)/scripts dist_scripts_PYTHON = \ scripts/TeXFiles.py \ scripts/clean_dvi.py \ + scripts/csv2lyx.py \ scripts/convertDefault.py \ scripts/date.py \ scripts/ext_copy.py \ diff --git a/lib/configure.py b/lib/configure.py index 944df6e69b..91473dc638 100644 --- a/lib/configure.py +++ b/lib/configure.py @@ -313,6 +313,7 @@ def checkFormatEntries(dtl_tools): # # entried that do not need checkProg addToRC(r'''\Format date "" "date command" "" "" "" "" +\Format csv csv "Comma-separated values" "" "" "" "document" \Format fax "" Fax "" "" "" "document" \Format lyx lyx LyX "" "" "" "" \Format lyx13x lyx13 "LyX 1.3.x" "" "" "" "document" @@ -503,6 +504,7 @@ def checkConverterEntries(): # # Entries that do not need checkProg addToRC(r'''\converter lyxpreview ppm "python -tt $$s/scripts/lyxpreview2bitmap.py" "" +\converter csv lyx "python -tt $$s/scripts/csv2lyx.py $$i $$o" "" \converter date dateout "python -tt $$s/scripts/date.py %d-%m-%Y > $$o" "" \converter docbook docbook-xml "cp $$i $$o" "xml" \converter fen asciichess "python -tt $$s/scripts/fen2ascii.py $$i $$o" "" diff --git a/lib/scripts/csv2lyx.py b/lib/scripts/csv2lyx.py new file mode 100644 index 0000000000..fe8ba275c7 --- /dev/null +++ b/lib/scripts/csv2lyx.py @@ -0,0 +1,152 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# file csv2lyx.py +# This file is part of LyX, the document processor. +# Licence details can be found in the file COPYING. + +# author Hartmut Haase + +# Full author contact details are available in file CREDITS + +# This script reads a csv-table (file name.csv) and converts it into +# a LyX-table for versions 1.5.0 and higher (LyX table format 276). +# The original csv2lyx was witten by Antonio Gulino +# in Perl for LyX 1.x and modified for LyX table format 276 by the author. +# + + +import os, re, string, sys, unicodedata + +def error(message): + sys.stderr.write(message + '\n') + sys.exit(1) + +# processing command line options +if len(sys.argv) == 1 or sys.argv[1] == '--help': + print '''Usage: + csv2lyx [options] mycsvfile mytmptable.lyx + +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. + +Options: + -s separator column separator, default is Tab + --help usage instructions + +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.''' + sys.exit(0) + +# print len(sys.argv), sys.argv +separator = '\t' +infile = "" +if len(sys.argv) == 3: + infile = sys.argv[1] + outfile = sys.argv[2] +elif len(sys.argv) == 5: + infile = sys.argv[3] + outfile = sys.argv[4] + if sys.argv[1] == '-s': + separator = sys.argv[2] + +if not os.path.exists(infile): + error('File "%s" not found.' % infile) +# read input +finput = open(infile, 'r') +rowcontent = finput.readlines() +finput.close() +num_rows = len(rowcontent) # number of lines +# print 'num_rows ', num_rows +i = 0 +num_cols = 1 # max columns +while i < num_rows: + # print len(rowcontent[i]), ' ', rowcontent[i] + num_cols = max(num_cols, rowcontent[i].count(separator) + 1) + i += 1 +# print num_cols + +fout = open(outfile, 'w') +##################### +# write first part +#################### +fout.write("""#csv2lyx created this file +\lyxformat 276 +\\begin_document +\\begin_header +\\textclass article +\\inputencoding auto +\\font_roman default +\\font_sans default +\\font_typewriter default +\\font_default_family default +\\font_sc false +\\font_osf false +\\font_sf_scale 100 +\\font_tt_scale 100 +\\graphics default +\\paperfontsize default +\\papersize default +\\use_geometry false +\\use_amsmath 1 +\\use_esint 0 +\\cite_engine basic +\\use_bibtopic false +\\paperorientation portrait +\\secnumdepth 3 +\\tocdepth 3 +\\paragraph_separation indent +\\defskip medskip +\\papercolumns 1 +\\papersides 1 +\\paperpagestyle default +\\tracking_changes false +\\output_changes false +\\end_header + +\\begin_body +\\begin_layout Standard +\\align left + +\\begin_inset Tabular +\n""") +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') + row = str(rowcontent[j]) + row = string.split(row,separator) + #print j, ': ' , row +############################ +# write contents of one line +############################ + i = 0 + while i < num_cols: + fout.write(""" +\\begin_inset Text +\\begin_layout Standard\n""") + fout.write(row[i]) + fout.write('\\end_layout\n\\end_inset\n\n') + i += 1 + fout.write('\n') + j += 1 +##################### +# write last part +#################### +fout.write(""" +\\end_inset +\\end_layout +\\end_body +\\end_document\n""") +fout.close()