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(r"([\u0400-\u04ff]+)", r"<alien>\1</alien>", text) document = WLDocument.from_bytes(text.encode('utf-8'), 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_bytes( self.materialize(publishable=publishable, changes=changes).encode('utf-8'), provider=RedakcjaDocProvider(publishable=publishable), parse_dublincore=parse_dublincore, strict=strict)
def test_empty(): assert not WLDocument.from_bytes( b'<utwor />', parse_dublincore=False, ).as_html()
def test_annotations(): annotations = ( ('<pe/>', ( 'pe', [], '[przypis edytorski]', '<p> [przypis edytorski]</p>' ), 'Empty footnote'), ('<pr>Definiendum --- definiens.</pr>', ( 'pr', [], 'Definiendum \u2014 definiens. [przypis redakcyjny]', '<p>Definiendum \u2014 definiens. [przypis redakcyjny]</p>' ), 'Plain footnote.'), ('<pt><slowo_obce>Definiendum</slowo_obce> --- definiens.</pt>', ( 'pt', [], 'Definiendum \u2014 definiens. [przypis tłumacza]', '<p><em class="foreign-word">Definiendum</em> \u2014 definiens. [przypis tłumacza]</p>' ), 'Standard footnote.'), ('<pr>Definiendum (łac.) --- definiens.</pr>', ( 'pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens. [przypis redakcyjny]', '<p>Definiendum (łac.) \u2014 definiens. [przypis redakcyjny]</p>' ), 'Plain footnote with qualifier'), ('<pe><slowo_obce>Definiendum</slowo_obce> (łac.) --- definiens.</pe>', ( 'pe', ['łac.'], 'Definiendum (łac.) \u2014 definiens. [przypis edytorski]', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 definiens. [przypis edytorski]</p>' ), 'Standard footnote with qualifier.'), ('<pt> <slowo_obce>Definiendum</slowo_obce> (daw.) --- definiens.</pt>', ( 'pt', ['daw.'], 'Definiendum (daw.) \u2014 definiens. [przypis tłumacza]', '<p> <em class="foreign-word">Definiendum</em> (daw.) \u2014 definiens. [przypis tłumacza]</p>' ), 'Standard footnote with leading whitespace and qualifier.'), ('<pr>Definiendum (łac.) --- <slowo_obce>definiens</slowo_obce>.</pr>', ( 'pr', ['łac.'], 'Definiendum (łac.) \u2014 definiens. [przypis redakcyjny]', '<p>Definiendum (łac.) \u2014 <em class="foreign-word">definiens</em>. [przypis redakcyjny]</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. [przypis edytorski]', '<p><em class="foreign-word">Definiendum</em> (łac.) \u2014 <em class="foreign-word">definiens</em>. [przypis edytorski]</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. [przypis edytorski]', '<p>Definiendum (łac.) \u2014 definiens (some) \u2014 more text. [przypis edytorski]</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. [przypis edytorski]', '<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. [przypis edytorski]</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_bytes( xml_src.encode('utf-8'), 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