Dodanie linku do strony lektury w WolneLektury.pl do wynikowych plików tekstowych...
[wolnelektury.git] / lib / librarian / bin / book2txt.py
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 import re
4 import os
5 import optparse
6 import codecs
7
8 from librarian import dcparser
9
10
11 HEADER = u"""\
12 Kodowanie znaków w dokumencie: UTF-8.
13 -----
14 Publikacja zrealizowana w ramach projektu Wolne Lektury (http://wolnelektury.pl/). Reprodukcja cyfrowa wykonana przez
15 Bibliotekę Narodową z egzemplarza pochodzącego ze zbiorów BN. Ten utwór nie jest chroniony prawem autorskim i znajduje
16 się w domenie publicznej, co oznacza, że możesz go swobodnie wykorzystywać, publikować i rozpowszechniać.
17
18 Wersja lektury w opracowaniu merytorycznym i krytycznym (przypisy i motywy) dostępna jest na stronie %s.
19 -----
20
21 """
22
23 def get_header(filename):
24     return HEADER % dcparser.parse(filename).url
25
26
27 REGEXES = [
28     (r'<rdf:RDF[^>]*>(.|\n)*?</rdf:RDF>', ''),
29     (r'<motyw[^>]*>(.|\n)*?</motyw>', ''),
30     ('<(begin|end)\\sid=[\'|"][b|e]\\d+[\'|"]\\s/>', ''),
31     (r'<extra>((<!--<(elementy_poczatkowe|tekst_glowny)>-->)|(<!--</(elementy_poczatkowe|tekst_glowny)>-->))</extra>', ''),
32     (r'<uwaga>(.|\n)*?</uwaga>', ''),
33     (r'<p[a|e|r|t]>(.|\n)*?</p[a|e|r|t]>', ''),
34     (r'<[^>]+>', ''),
35     (r'/\n', '\n'),
36     (r'---', u'—'),
37     (r'--', u'-'),
38     (r',,', u'„'),
39     (r'"', u'”'),
40 ]
41
42
43 if __name__ == '__main__':
44     # Parse commandline arguments
45     usage = """Usage: %prog [options] SOURCE [SOURCE...]
46     Convert SOURCE files to TXT format."""
47
48     parser = optparse.OptionParser(usage=usage)
49
50     parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False,
51         help='print status messages to stdout')
52
53     options, input_filenames = parser.parse_args()
54
55     if len(input_filenames) < 1:
56         parser.print_help()
57         exit(1)
58
59     # Do some real work
60     for input_filename in input_filenames:
61         if options.verbose:
62             print input_filename
63         
64         output_filename = os.path.splitext(input_filename)[0] + '.txt'
65         
66         xml = codecs.open(input_filename, 'r', encoding='utf-8').read()
67         for pattern, repl in REGEXES:
68             xml, n = re.subn(pattern, repl, xml)
69         
70         output = codecs.open(output_filename, 'w', encoding='utf-8')
71         output.write(get_header(input_filename))
72         output.write(xml)
73