]> git.lyx.org Git - lyx.git/commitdiff
* Hartmut's csv2lyx script
authorJürgen Spitzmüller <spitz@lyx.org>
Mon, 5 May 2008 17:08:21 +0000 (17:08 +0000)
committerJürgen Spitzmüller <spitz@lyx.org>
Mon, 5 May 2008 17:08:21 +0000 (17:08 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24620 a592a061-630c-0410-9148-cb99ea01b6c8

development/scons/scons_manifest.py
lib/Makefile.am
lib/configure.py
lib/scripts/csv2lyx.py [new file with mode: 0644]

index f18105d25225e5c595bad9370408a81e23e8e518..27e14718f8b5ff5c767e3ef39463608ec7c72bcd 100644 (file)
@@ -2659,6 +2659,7 @@ lib_scripts_files = Split('''
     TeXFiles.py
     clean_dvi.py
     convertDefault.py
+    csv2lyx.py
     date.py
     ext_copy.py
     fen2ascii.py
index 91b7f944297062e48f0bf44f3969aafc6a38dd8d..2b5755c52ba504389641f11593ba7244b863c454 100644 (file)
@@ -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 \
index 944df6e69bab1aac477dad23ea9a4bcbe6f83f1f..91473dc63849a8ec2be60eedd8ceff13f66e71bb 100644 (file)
@@ -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 (file)
index 0000000..fe8ba27
--- /dev/null
@@ -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 <antonio.gulino@tin.it>
+# 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('<lyxtabular version="3" rows=' + str(num_rows) + ' columns=' + str(num_cols) + ' >\n')
+fout.write('<features>\n')
+#####################
+# write table
+####################
+i = 0
+while i < num_cols:
+       fout.write('<column alignment="left" valignment="top" width="0pt">\n')
+       i += 1
+j = 0
+while j < num_rows:
+       fout.write('<row>\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("""<cell alignment="left" valignment="top" usebox="none">
+\\begin_inset Text
+\\begin_layout Standard\n""")
+               fout.write(row[i])
+               fout.write('\\end_layout\n\\end_inset\n</cell>\n')
+               i += 1
+       fout.write('</row>\n')
+       j += 1
+#####################
+# write last part
+####################
+fout.write("""</lyxtabular>
+\\end_inset
+\\end_layout
+\\end_body
+\\end_document\n""")
+fout.close()