lyx_mirror/lib/lyx2lyx/lyx2lyx
José Matox 34b9ed8ac9 whitespace, bugfixes, and convertions dependent on the document type, if need.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@8749 a592a061-630c-0410-9148-cb99ea01b6c8
2004-05-11 16:13:33 +00:00

147 lines
4.6 KiB
Python
Executable File

#! /usr/bin/env python
# -*- coding: iso-8859-1 -*-
# Copyright (C) 2002-2004 José Matos <jamatos@lyx.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import getopt
import gzip
import sys
import os.path
from parser_tools import read_file, write_file, read_version, set_version, \
read_format, set_format, chain, lyxformat, get_value, get_backend
# Allow the dummy object to be able to carry related data
# like a C struct
class struct:
def __init__(self):
self.output = sys.stdout
self.input = sys.stdin
self.err = sys.stderr
self.debug = 1
self.dir = ""
self.start = None
self.end = None
self.backend = "latex"
self.textclass = "article"
def warning(self, message, debug_level= 1):
if debug_level <= self.debug:
self.err.write(message + "\n")
def error(self, message):
self.warning(message)
self.warning("Quiting.")
sys.exit(1)
def usage():
print """Usage: lyx2lyx [options] [file]
Convert old lyx file <file> to newer format, files can be compressed with gzip.
If there no file is specified then the standard input is assumed, in this case
gziped files are not handled.
Options:
-h, --help this information
-v, --version output version information and exit
-l, --list list all available formats
-d, --debug level level=0..2 (O_ no debug information, 2_verbose)
default: level=1
-e, --err error_file name of the error file or else goes to stderr
-f, --from version initial version (optional)
-t, --to version final version (optional)
-o, --output name name of the output file or else goes to stdout
-q, --quiet same as --debug=0"""
def parse_options(argv, version, opt):
_options = ["help", "version", "list", "debug=", "err=", "from=", "to=", "output=", "quiet"]
try:
opts, args = getopt.getopt(argv[1:], "d:e:f:hlo:qt:v", _options)
except getopt.error:
usage()
sys.exit(2)
for o, a in opts:
if o in ("-h", "--help"):
usage()
sys.exit()
if o in ("-v", "--version"):
print "lyx2lyx, version %s" %(version)
print "Copyright (C) 2002-2004 José Matos and Dekel Tsur"
sys.exit()
if o in ("-d", "--debug"):
opt.debug = int(a)
if o in ("-q", "--quiet"):
opt.debug = 0
if o in ("-l", "--list"):
# list available formats
sys.exit()
if o in ("-o", "--output"):
opt.output = open(a, "w")
if o in ("-f", "--from"):
opt.start = lyxformat(a, opt)
if o in ("-t", "--to"):
opt.end = lyxformat(a, opt)
if o in ("-e","--err"):
opt.err = open(a, "w")
if args:
file = args[0]
opt.dir = os.path.dirname(os.path.abspath(file))
try:
gzip.open(file).readline()
opt.output = gzip.GzipFile("","wb",6,opt.output)
opt.input = gzip.open(file)
except:
opt.input = open(file)
def main(argv):
version = "1.4.0cvs"
# options object, with default values
opt = struct()
parse_options(argv, version, opt)
header, body = [], []
read_file(header, body, opt)
initial_version = read_version(header)
opt.textclass = get_value(header, "\\textclass", 0)
opt.backend = get_backend( opt.textclass)
opt.format = read_format(header, opt)
opt.language = get_value(header, "\\language", 0)
if opt.language == "":
opt.language = "english"
mode, convertion_chain = chain(opt, initial_version)
opt.warning("convertion chain: " + str(convertion_chain), 3)
for step in convertion_chain:
convert = getattr(__import__("lyx_" + step), mode)
convert(header,body, opt)
set_version(header, version)
set_format(header, opt.format)
write_file(header, body, opt)
if __name__ == "__main__":
main(sys.argv)