Пример #1
0
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
Пример #2
0
    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)
Пример #3
0
def test_empty():
    assert not WLDocument.from_bytes(
            b'<utwor />',
            parse_dublincore=False,
        ).as_html()
Пример #4
0
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