Fixes #2570: Text spilling into fragments from outside.
authorRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Mon, 10 Feb 2014 15:40:50 +0000 (16:40 +0100)
committerRadek Czajka <radekczajka@nowoczesnapolska.org.pl>
Mon, 10 Feb 2014 15:40:50 +0000 (16:40 +0100)
librarian/html.py
tests/files/text/asnyk_miedzy_nami_expected.html
tests/files/text/asnyk_miedzy_nami_fragments.html [new file with mode: 0644]
tests/files/text/asnyk_zbior.xml [changed mode: 0755->0644]
tests/files/text/do-mlodych.xml [changed mode: 0755->0644]
tests/files/text/miedzy-nami-nic-nie-bylo.xml
tests/test_html_fragments.py [new file with mode: 0644]

index 8822f96..0eeb76b 100644 (file)
@@ -134,14 +134,17 @@ def extract_fragments(input_filename):
                 fragment = Fragment(id=element.get('fid'), themes=element.text)
 
                 # Append parents
-                if element.getparent().get('id', None) != 'book-text':
-                    parents = [element.getparent()]
-                    while parents[-1].getparent().get('id', None) != 'book-text':
-                        parents.append(parents[-1].getparent())
-
-                    parents.reverse()
-                    for parent in parents:
-                        fragment.append('start', parent)
+                parent = element.getparent()
+                parents = []
+                while parent.get('id', None) != 'book-text':
+                    cparent = copy.deepcopy(parent)
+                    cparent.text = None
+                    parents.append(cparent)
+                    parent = parent.getparent()
+
+                parents.reverse()
+                for parent in parents:
+                    fragment.append('start', parent)
 
                 open_fragments[fragment.id] = fragment
 
index 1c52ad9..24285f1 100644 (file)
@@ -6,12 +6,13 @@
 <div id="themes"><ol>
 <li>Miłość platoniczna: <a href="#m1189062500041">1</a> <a href="#m1189062500041">2</a> </li>
 <li>Natura: <a href="#m1189062528872">1</a> </li>
+<li>Nicość: <a href="#m1">1</a> </li>
 </ol></div>
 <h1>
 <span class="author">Adam Asnyk</span><span class="title"><a name="m1189062500041" class="theme-begin" fid="1189062500041">Miłość platoniczna</a>Między nami nic nie było</span>
 </h1>
 <a name="m1189062500041" class="theme-begin" fid="1189062500041">Miłość platoniczna</a><div class="stanza">
-<a name="sec4"></a><a name="f1" class="target"> </a><a href="#f1" class="anchor">1</a><p class="verse">Między nami nic nie było!</p>
+<a name="sec4"></a><a name="f1" class="target"> </a><a href="#f1" class="anchor">1</a><p class="verse">Między nami <a name="m1" class="theme-begin" fid="1">Nicość</a>nic nie było!<span class="theme-end" fid="1"></span></p>
 <p class="verse">Żadnych zwierzeń, wyznań żadnych!</p>
 <p class="verse">Nic nas z sobą nie łączyło —</p>
 <p class="verse">Prócz wiosennych marzeń zdradnych;</p>
diff --git a/tests/files/text/asnyk_miedzy_nami_fragments.html b/tests/files/text/asnyk_miedzy_nami_fragments.html
new file mode 100644 (file)
index 0000000..944d830
--- /dev/null
@@ -0,0 +1,50 @@
+1: Nicość
+<div class="stanza"><p class="verse">nic nie było!</p>
+</div>
+
+
+1189062500041: Miłość platoniczna
+<div class="stanza">
+<p class="verse">Między nami nic nie było!</p>
+<p class="verse">Żadnych zwierzeń, wyznań żadnych!</p>
+<p class="verse">Nic nas z sobą nie łączyło —</p>
+<p class="verse">Prócz wiosennych marzeń zdradnych;</p>
+</div>
+<div class="stanza">
+<p class="verse">Prócz tych woni, barw i blasków,</p>
+<p class="verse">Unoszących się w przestrzeni;</p>
+<p class="verse">Prócz szumiących śpiewem lasków</p>
+<p class="verse">I tej świeżej łąk zieleni;</p>
+</div>
+<div class="stanza">
+<p class="verse">Prócz tych kaskad i potoków,</p>
+<p class="verse">Zraszających każdy parów,</p>
+<p class="verse">Prócz girlandy tęcz, obłoków,</p>
+<p class="verse">Prócz natury słodkich czarów;</p>
+</div>
+<div class="stanza">
+<p class="verse">Prócz tych wspólnych, jasnych zdrojów,</p>
+<p class="verse">Z których serce zachwyt piło;</p>
+<p class="verse">Prócz pierwiosnków i powojów,—</p>
+<p class="verse">Między nami nic nie było!</p>
+</div>
+
+
+1189062528872: Natura
+<div class="stanza"><p class="verse">Prócz tych woni, barw i blasków,</p>
+<p class="verse">Unoszących się w przestrzeni;</p>
+<p class="verse">Prócz szumiących śpiewem lasków</p>
+<p class="verse">I tej świeżej łąk zieleni;</p>
+</div>
+<div class="stanza">
+<p class="verse">Prócz tych kaskad i potoków,</p>
+<p class="verse">Zraszających każdy parów,</p>
+<p class="verse">Prócz girlandy tęcz, obłoków,</p>
+<p class="verse">Prócz natury słodkich czarów;</p>
+</div>
+<div class="stanza">
+<p class="verse">Prócz tych wspólnych, jasnych zdrojów,</p>
+<p class="verse">Z których serce zachwyt piło;</p>
+<p class="verse">Prócz pierwiosnków i powojów,—</p>
+<p class="verse">Między nami nic nie było!</p>
+</div>
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index a94b8f0..8036fce 100644 (file)
@@ -37,7 +37,7 @@
 
 
 
-<strofa>Między nami nic nie było!/
+<strofa>Między nami <begin id="b1"/><motyw id="m1">Nicość</motyw>nic nie było!<end id="e1"/>/
 Żadnych zwierzeń, wyznań żadnych!/
 Nic nas z sobą nie łączyło ---/
 Prócz wiosennych marzeń zdradnych;</strofa>
diff --git a/tests/test_html_fragments.py b/tests/test_html_fragments.py
new file mode 100644 (file)
index 0000000..99bb62d
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+#
+# This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from librarian.html import extract_fragments
+from nose.tools import *
+from utils import get_fixture
+
+
+def test_fragments():
+    expected_output_file_path = get_fixture('text', 'asnyk_miedzy_nami_fragments.html')
+
+    closed_fragments, open_fragments = extract_fragments(
+        get_fixture('text', 'asnyk_miedzy_nami_expected.html'))
+    assert not open_fragments
+    fragments_text = u"\n\n".join(u"%s: %s\n%s" % (f.id, f.themes, f)
+                                    for f in closed_fragments.values())
+    assert_equal(fragments_text, file(expected_output_file_path).read().decode('utf-8'))
+