Łamanie wierszy przy konwersji do TXT. Szerokość łamu wyznacza stała MAX_LINE_LENGTH...
authorMarek Stępniowski <marek@stepniowski.com>
Mon, 10 Aug 2009 14:29:58 +0000 (16:29 +0200)
committerMarek Stępniowski <marek@stepniowski.com>
Mon, 10 Aug 2009 14:29:58 +0000 (16:29 +0200)
lib/librarian/book2txt.xslt
lib/librarian/text.py

index ba07aa2..d3658a3 100644 (file)
@@ -158,7 +158,7 @@ Wersja lektury w opracowaniu merytorycznym i krytycznym (przypisy i motywy) dost
 <xsl:text>
 
 </xsl:text>
-<xsl:apply-templates mode="inline" />
+<xsl:value-of select="wl:wrap_words(text())" />
 </xsl:template>
 
 <xsl:template match="strofa">
index 09dc9a9..21fab8e 100644 (file)
@@ -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):