1.1 --- a/convert.py Mon Jul 30 01:03:50 2018 +0200
1.2 +++ b/convert.py Mon Jul 30 17:18:52 2018 +0200
1.3 @@ -1,7 +1,7 @@
1.4 #!/usr/bin/env python
1.5
1.6 -from moinformat import make_linker, make_output, make_parser, make_serialiser, \
1.7 - parse, serialise
1.8 +from moinformat import make_input, make_linker, make_output, make_parser, \
1.9 + make_serialiser, parse, serialise
1.10 from os.path import split
1.11 import sys
1.12
1.13 @@ -9,13 +9,20 @@
1.14 dirname, progname = split(sys.argv[0])
1.15 args = sys.argv[1:]
1.16
1.17 + # Option values.
1.18 +
1.19 l = filenames = []
1.20 formats = []
1.21 - pagenames = []
1.22 + input_encodings = []
1.23 mappings = []
1.24 - outputs = []
1.25 + output_dirs = []
1.26 + output_encodings = []
1.27 + pagenames = []
1.28 +
1.29 + # Flags.
1.30 +
1.31 + macros = False
1.32 tree = False
1.33 - macros = False
1.34
1.35 for arg in args:
1.36
1.37 @@ -35,6 +42,12 @@
1.38 l = formats
1.39 continue
1.40
1.41 + # Switch to collecting input encodings.
1.42 +
1.43 + elif arg == "--input-encoding":
1.44 + l = input_encodings
1.45 + continue
1.46 +
1.47 # Switch to collecting mappings.
1.48
1.49 elif arg == "--mapping":
1.50 @@ -43,8 +56,14 @@
1.51
1.52 # Switch to collecting output locations.
1.53
1.54 - elif arg == "--output":
1.55 - l = outputs
1.56 + elif arg == "--output-dir":
1.57 + l = output_dirs
1.58 + continue
1.59 +
1.60 + # Switch to collecting output encodings.
1.61 +
1.62 + elif arg == "--output-encoding":
1.63 + l = output_encodings
1.64 continue
1.65
1.66 # Switch to collecting page names.
1.67 @@ -74,10 +93,6 @@
1.68 filename = filenames[0]
1.69 pagename = pagenames and pagenames[0] or split(filename)[-1]
1.70
1.71 - # Obtain an output context from any specified output details.
1.72 -
1.73 - output = outputs and make_output(outputs[0]) or None
1.74 -
1.75 # Derive a proper mapping from the given list of values.
1.76
1.77 mapping = {}
1.78 @@ -90,24 +105,48 @@
1.79 mapping[key] = arg
1.80 key = None
1.81
1.82 + # Obtain output location.
1.83 +
1.84 + output_dir = output_dirs and output_dirs[0] or None
1.85 +
1.86 + # Obtain encodings.
1.87 +
1.88 + input_encoding = input_encodings and input_encodings[0] or None
1.89 + output_encoding = output_encodings and output_encodings[0] or None
1.90 +
1.91 # Open the file, parse the content, serialise the document.
1.92
1.93 - f = open(filename)
1.94 - try:
1.95 - p = make_parser()
1.96 - d = parse(f.read(), p)
1.97 + input = make_input("standalone", {"encoding" : input_encoding})
1.98 +
1.99 + p = make_parser()
1.100 + d = parse(input.readfile(filename), p)
1.101
1.102 - if macros:
1.103 - p.evaluate_macros()
1.104 + if macros:
1.105 + p.evaluate_macros()
1.106 +
1.107 + # Show a document tree for debugging purposes, if requested.
1.108 +
1.109 + if tree:
1.110 + print d.prettyprint()
1.111 +
1.112 + # Otherwise, serialise the document.
1.113
1.114 - if tree:
1.115 - print d.prettyprint()
1.116 - else:
1.117 - l = make_linker(format, pagename, mapping)
1.118 - s = make_serialiser(format, output, l)
1.119 - print serialise(d, s)
1.120 - finally:
1.121 - f.close()
1.122 + else:
1.123 + # Obtain an output context from any specified output details.
1.124 +
1.125 + output_context = output_dir and "directory" or "standalone"
1.126 +
1.127 + output = make_output(output_context, {"encoding" : output_encoding,
1.128 + "filename" : output_dir})
1.129 +
1.130 + # Obtain a linker using format and pagename details.
1.131 +
1.132 + linker = make_linker(format, pagename, mapping)
1.133 +
1.134 + # Obtain a serialiser using the configuration.
1.135 +
1.136 + serialiser = make_serialiser(format, output, linker)
1.137 + print serialise(d, serialiser)
1.138
1.139 if __name__ == "__main__":
1.140 main()