-
Notifications
You must be signed in to change notification settings - Fork 1
/
convert.py
61 lines (50 loc) · 2.17 KB
/
convert.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import argparse
import io
from pathlib import Path
import text_converter
class ConversionController(object):
def __init__(self, args):
self.input = Path(args.input)
self.output_directory = Path(args.output)
self.mask = args.mask
self.converter = text_converter.WikidotToMarkdown()
self.overwrite = args.overwrite
self.output_directory.mkdir(exist_ok=True)
self.rn2n = args.rn2n
def process(self):
if self.input.is_file():
self.convert_file(self.input)
else:
self.process_dir()
def process_dir(self):
files = list(self.input.glob('**/' + self.mask)) # list is required mo make a snapshot
for f in files:
self.convert_file(f)
def __output_file(self, input_file):
return (self.output_directory / input_file.name).with_suffix('.md')
def convert_file(self, input_file):
out_file = self.__output_file(input_file)
if not self.overwrite:
assert not out_file.is_file(), f"file '{out_file}' already exists"
text = input_file.read_text(encoding='utf-8')
complete_text = self.converter.convert(text, input_file)
if self.rn2n:
with io.open(out_file, 'w', encoding='utf-8', newline='\n') as f:
f.write(complete_text.replace('\r\n', '\n'))
else:
out_file.write_text(complete_text, encoding='utf-8')
def main():
""" Main function called to start the conversion."""
parser = argparse.ArgumentParser(description='Wikidot to markdown converter')
parser.add_argument('--input', '-i', required=True, help="input file or dir")
parser.add_argument('--mask', '-m', default="*.txt", help="file mask for dir processing")
parser.add_argument('--output', '-o', default="output", help="output dir")
parser.add_argument('--overwrite', '-w', action='store_true', help="overwrite existing files")
parser.add_argument('--rn2n', '-n', action='store_true', help="replace CRLF to LF")
args = parser.parse_args()
converter = ConversionController(args)
converter.process()
if __name__ == '__main__':
main()