def load_including_children(wldoc=None, provider=None, uri=None): """ Makes one big xml file with children inserted at end. Either wldoc or provider and URI must be provided. """ if uri and provider: f = provider.by_uri(uri) text = f.read().decode('utf-8') f.close() elif wldoc is not None: text = etree.tostring(wldoc.edoc, encoding=unicode) provider = wldoc.provider else: raise ValueError('Neither a WLDocument, nor provider and URI were provided.') text = re.sub(ur"([\u0400-\u04ff]+)", ur"<alien>\1</alien>", text) document = WLDocument.from_string(text, parse_dublincore=True, provider=provider) document.swap_endlines() for child_uri in document.book_info.parts: child = load_including_children(provider=provider, uri=child_uri) document.edoc.getroot().append(child.edoc.getroot()) return document
def wldocument(self, publishable=True, changes=None, parse_dublincore=True, strict=False): from catalogue.ebook_utils import RedakcjaDocProvider from librarian.parser import WLDocument return WLDocument.from_string( self.materialize(publishable=publishable, changes=changes), provider=RedakcjaDocProvider(publishable=publishable), parse_dublincore=parse_dublincore, strict=strict)
def test_annotations(): annotations = ( ('<pe/>', ('pe', [], '', '<p></p>'), 'Empty footnote'), ('<pr>Definiendum --- definiens.</pr>', ('pr', [], 'Definiendum \u2014 definiens.', '<p>Definiendum \u2014 definiens.</p>'), 'Plain footnote.'), ('<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>', ('pt', [], 'Definiendum \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> \u2014 definiens.</p>' ), 'Standard footnote.'), ('<pr>Definiendum (łac.) --- definiens.</pr>', ('pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 definiens.</p>'), 'Plain footnote with qualifier'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>', ('pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens.</p>' ), 'Standard footnote with qualifier.'), ('<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>', ('pt', ['daw.'], 'Definiendum (daw.) \u2014 definiens.', '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens.</p>' ), 'Standard footnote with leading whitespace and qualifier.'), ('<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>', ('pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Plain footnote with qualifier and some emphasis.'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- <slowo_obce>definiens</slowo_obce>.</pe>', ('pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Standard footnote with qualifier and some emphasis.'), ('<pe>Definiendum (łac.) --- definiens (some) --- more text.</pe>', ( 'pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens (some) \u2014 more text.', '<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text.</p>', ), 'Footnote with a second parentheses and mdash.'), ('<pe><slowo_obce>gemajna</slowo_obce> (daw., z niem. <slowo_obce>gemein</slowo_obce>: zwykły) --- ' 'częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</pe>', ('pe', ['daw.', 'niem.'], 'gemajna (daw., z niem. gemein: zwykły) \u2014 częściej: gemajn, ' 'szeregowiec w wojsku polskim cudzoziemskiego autoramentu.', '<p><em class="foreign-word">gemajna</em> (daw., z niem. <em class="foreign-word">gemein</em>: zwykły) ' '\u2014 częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</p>' ), 'Footnote with multiple and qualifiers and emphasis.'), ) xml_src = '''<utwor><akap> %s </akap></utwor>''' % "".join( t[0] for t in annotations) html = WLDocument.from_string(xml_src, parse_dublincore=False).as_html().get_file() res_annotations = list(extract_annotations(html)) for i, (src, expected, name) in enumerate(annotations): yield _test_annotation, expected, res_annotations[i], name
def test_annotations(): annotations = ( ("<pe/>", ("pe", [], "", "<p></p>"), "Empty footnote"), ( "<pr>Definiendum --- definiens.</pr>", ("pr", [], "Definiendum \u2014 definiens.", "<p>Definiendum \u2014 definiens.</p>"), "Plain footnote.", ), ( "<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>", ( "pt", [], "Definiendum \u2014 definiens.", '<p><em class="foreign-word">Definiendum</em> \u2014 definiens.</p>', ), "Standard footnote.", ), ( "<pr>Definiendum (łac.) --- definiens.</pr>", ("pr", ["łac."], "Definiendum (łac.) \u2014 definiens.", "<p>Definiendum (łac.) \u2014 definiens.</p>"), "Plain footnote with qualifier", ), ( "<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>", ( "pe", ["łac."], "Definiendum (łac.) \u2014 definiens.", '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens.</p>', ), "Standard footnote with qualifier.", ), ( "<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>", ( "pt", ["daw."], "Definiendum (daw.) \u2014 definiens.", '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens.</p>', ), "Standard footnote with leading whitespace and qualifier.", ), ( "<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>", ( "pr", ["łac."], "Definiendum (łac.) \u2014 definiens.", '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>', ), "Plain footnote with qualifier and some emphasis.", ), ( "<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- <slowo_obce>definiens</slowo_obce>.</pe>", ( "pe", ["łac."], "Definiendum (łac.) \u2014 definiens.", '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>', ), "Standard footnote with qualifier and some emphasis.", ), ( "<pe>Definiendum (łac.) --- definiens (some) --- more text.</pe>", ( "pe", ["łac."], "Definiendum (łac.) \u2014 definiens (some) \u2014 more text.", "<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text.</p>", ), "Footnote with a second parentheses and mdash.", ), ( "<pe><slowo_obce>gemajna</slowo_obce> (daw., z niem. <slowo_obce>gemein</slowo_obce>: zwykły) --- częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</pe>", ( "pe", ["daw.", "niem."], "gemajna (daw., z niem. gemein: zwykły) \u2014 częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.", '<p><em class="foreign-word">gemajna</em> (daw., z niem. <em class="foreign-word">gemein</em>: zwykły) \u2014 częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</p>', ), "Footnote with multiple and qualifiers and emphasis.", ), ) xml_src = """<utwor><akap> %s </akap></utwor>""" % "".join(t[0] for t in annotations) html = WLDocument.from_string(xml_src, parse_dublincore=False).as_html().get_file() res_annotations = list(extract_annotations(html)) for i, (src, expected, name) in enumerate(annotations): yield _test_annotation, expected, res_annotations[i], name
def test_empty(): assert not WLDocument.from_string( '<utwor />', parse_dublincore=False, ).as_html()
def test_annotations(): annotations = ( ('<pe/>', ( 'pe', [], '', '<p></p>' ), 'Empty footnote'), ('<pr>Definiendum --- definiens.</pr>', ( 'pr', [], 'Definiendum \u2014 definiens.', '<p>Definiendum \u2014 definiens.</p>' ), 'Plain footnote.'), ('<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>', ( 'pt', [], 'Definiendum \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> \u2014 definiens.</p>' ), 'Standard footnote.'), ('<pr>Definiendum (łac.) --- definiens.</pr>', ( 'pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 definiens.</p>' ), 'Plain footnote with qualifier'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>', ( 'pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens.</p>' ), 'Standard footnote with qualifier.'), ('<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>', ( 'pt', ['daw.'], 'Definiendum (daw.) \u2014 definiens.', '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens.</p>' ), 'Standard footnote with leading whitespace and qualifier.'), ('<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>', ( 'pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Plain footnote with qualifier and some emphasis.'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- <slowo_obce>definiens</slowo_obce>.</pe>', ( 'pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Standard footnote with qualifier and some emphasis.'), ('<pe>Definiendum (łac.) --- definiens (some) --- more text.</pe>', ( 'pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens (some) \u2014 more text.', '<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text.</p>', ), 'Footnote with a second parentheses and mdash.'), ('<pe><slowo_obce>gemajna</slowo_obce> (daw., z niem. <slowo_obce>gemein</slowo_obce>: zwykły) --- ' 'częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</pe>', ( 'pe', ['daw.', 'niem.'], 'gemajna (daw., z niem. gemein: zwykły) \u2014 częściej: gemajn, ' 'szeregowiec w wojsku polskim cudzoziemskiego autoramentu.', '<p><em class="foreign-word">gemajna</em> (daw., z niem. <em class="foreign-word">gemein</em>: zwykły) ' '\u2014 częściej: gemajn, szeregowiec w wojsku polskim cudzoziemskiego autoramentu.</p>' ), 'Footnote with multiple and qualifiers and emphasis.'), ) xml_src = '''<utwor><akap> %s </akap></utwor>''' % "".join( t[0] for t in annotations) html = WLDocument.from_string(xml_src, parse_dublincore=False).as_html().get_file() res_annotations = list(extract_annotations(html)) for i, (src, expected, name) in enumerate(annotations): yield _test_annotation, expected, res_annotations[i], name
def test_annotations(): annotations = ( ('<pe/>', ( 'pe', None, '', '<p></p>' ), 'Empty footnote'), ( '<pr>Definiendum --- definiens.</pr>', ( 'pr', None, 'Definiendum \u2014 definiens.', '<p>Definiendum \u2014 definiens.</p>' ), 'Plain footnote.'), ('<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>', ( 'pt', None, 'Definiendum \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> \u2014 definiens.</p>' ), 'Standard footnote.'), ('<pr>Definiendum (łac.) --- definiens.</pr>', ( 'pr', 'łac.', 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 definiens.</p>' ), 'Plain footnote with qualifier'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>', ( 'pe', 'łac.', 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens.</p>' ), 'Standard footnote with qualifier.'), ('<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>', ( 'pt', 'daw.', 'Definiendum (daw.) \u2014 definiens.', '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens.</p>' ), 'Standard footnote with leading whitespace and qualifier.'), ('<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>', ( 'pr', 'łac.', 'Definiendum (łac.) \u2014 definiens.', '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Plain footnote with qualifier and some emphasis.'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- <slowo_obce>definiens</slowo_obce>.</pe>', ( 'pe', 'łac.', 'Definiendum (łac.) \u2014 definiens.', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>.</p>' ), 'Standard footnote with qualifier and some emphasis.'), ('<pe>Definiendum (łac.) --- definiens (some) --- more text.</pe>', ( 'pe', 'łac.', 'Definiendum (łac.) \u2014 definiens (some) \u2014 more text.', '<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text.</p>', ), 'Footnote with a second parentheses and mdash.'), ) xml_src = '''<utwor><akap> %s </akap></utwor>''' % "".join( t[0] for t in annotations) html = WLDocument.from_string(xml_src, parse_dublincore=False).as_html().get_file() res_annotations = list(extract_annotations(html)) for i, (src, expected, name) in enumerate(annotations): yield _test_annotation, expected, res_annotations[i], name