From: Marek Stępniowski Date: Mon, 10 Aug 2009 14:29:58 +0000 (+0200) Subject: Łamanie wierszy przy konwersji do TXT. Szerokość łamu wyznacza stała MAX_LINE_LENGTH... X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/adddbc16ded8cd4ea6a485ee4b7e9702830170ff?ds=inline;hp=-c Łamanie wierszy przy konwersji do TXT. Szerokość łamu wyznacza stała MAX_LINE_LENGTH w module librarian.text. Obecnie jest ona równa 80. --- adddbc16ded8cd4ea6a485ee4b7e9702830170ff diff --git a/lib/librarian/book2txt.xslt b/lib/librarian/book2txt.xslt index ba07aa29e..d3658a3f7 100644 --- a/lib/librarian/book2txt.xslt +++ b/lib/librarian/book2txt.xslt @@ -158,7 +158,7 @@ Wersja lektury w opracowaniu merytorycznym i krytycznym (przypisy i motywy) dost - + diff --git a/lib/librarian/text.py b/lib/librarian/text.py index 09dc9a9ef..21fab8e33 100644 --- a/lib/librarian/text.py +++ b/lib/librarian/text.py @@ -18,6 +18,9 @@ ENTITY_SUBSTITUTIONS = [ ] +MAX_LINE_LENGTH = 80 + + def substitute_entities(context, text): """XPath extension function converting all entites in passed text.""" if isinstance(text, list): @@ -27,9 +30,28 @@ def substitute_entities(context, text): return text +def wrap_words(context, text): + """XPath extension function automatically wrapping words in passed text""" + if isinstance(text, list): + text = ''.join(text) + words = re.split(r'\s', text) + + line_length = 0 + lines = [[]] + for word in words: + line_length += len(word) + 1 + if line_length > MAX_LINE_LENGTH: + # Max line length was exceeded. We create new line + lines.append([]) + line_length = len(word) + lines[-1].append(word) + return '\n'.join(' '.join(line) for line in lines) + + # Register substitute_entities function with lxml ns = etree.FunctionNamespace('http://wolnelektury.pl/functions') ns['substitute_entities'] = substitute_entities +ns['wrap_words'] = wrap_words def transform(input_filename, output_filename):