2 # -*- coding: utf-8 -*-
5 # This file is part of LyX, the document processor.
6 # Licence details can be found in the file COPYING.
8 # author Richard Heck, Alex Fernandez, Uwe Stöhr
10 # Full author contact details are available in file CREDITS
13 # ext_copy.py [-e ext1,ext2,...] <from file> <to file>
15 # This script is to be used as a "copier" script in the sense needed by
16 # the converter definitions. Given a <from file> and <to file>, it will copy
17 # all files in the directory in which from_file is found that have the
18 # extensions given in the -e argument, or all files in that directory if no
19 # such argument is given. So, for example, we can do:
20 # python ext_copy.py -e png,html,css /path/from/file.html /path/to/file.html
21 # and all html, png, and css files in /path/from/ will be copied to the
22 # (possibly new) directory /path/to/file.html.LyXconv/.
23 # The -t argument determines the extension added, the default being "LyXconv".
24 # If just . is given, no extension is added.
26 import getopt
, os
, shutil
, sys
27 from lyxpreview_tools
import error
30 return "Usage: %s [-e extensions] [-t target extension] <from file> <to file>" % prog_name
35 exts
= [] #list of extensions for which we're checking
36 targext
= "LyXconv" #extension for target directory
37 opts
, args
= getopt
.getopt(sys
.argv
[1:], "e:t:")
46 error(usage(progname
))
47 abs_from_file
= args
[0]
48 if not os
.path
.isabs(abs_from_file
):
49 error("%s is not an absolute file name.\n%s" % abs_from_file
, usage(progname
))
50 from_dir
= os
.path
.dirname(abs_from_file
)
55 to_dir
+= "." + targext
56 if not os
.path
.isabs(to_dir
):
57 error("%s is not an absolute file name.\n%s" % to_dir
, usage(progname
))
59 if not copy_all(from_dir
, to_dir
, exts
):
60 # some kind of failure
65 def copy_all(from_dir
, to_dir
, exts
):
66 "Copy all matching files in from_dir to to_dir"
67 for file in os
.listdir(from_dir
):
68 if os
.path
.isdir(os
.path
.join(from_dir
, file)):
69 copy_all(os
.path
.join(from_dir
, file), os
.path
.join(to_dir
, file), exts
)
71 junk
, ext
= os
.path
.splitext(os
.path
.basename(file))
72 ext
= ext
.lower()[1:] #strip the leading dot
73 # only create a directory and copy files when either
74 # exts is empty or when ext is in the exts list
75 if (exts
) and (ext
not in exts
):
77 if not create_dir(to_dir
):
79 from_file
= os
.path
.join(from_dir
, file)
80 to_file
= os
.path
.join(to_dir
, file)
81 shutil
.copyfile(from_file
, to_file
)
83 shutil
.copymode(from_file
, to_file
)
89 def create_dir(new_dir
):
90 "Try to create the output directory if it doesn't exist"
91 if not os
.path
.isdir(new_dir
):
95 error("Unable to create %s" % new_dir
)
99 if __name__
== "__main__":