# paperdoorknob: Print glowfic # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, version 3. import itertools from typing import Iterable from bs4 import BeautifulSoup from bs4.element import Tag from args import spec_from_commandline_args from spec import Spec def parse(content: bytes) -> BeautifulSoup: return BeautifulSoup(content, 'html.parser') def replies(html: BeautifulSoup) -> Iterable[Tag]: def text() -> Tag: body = html.body assert body text = body.find_next("div", class_="post-post") assert isinstance(text, Tag) return text def the_replies() -> Iterable[Tag]: rs = html.find_all("div", class_="post-reply") assert all(isinstance(r, Tag) for r in rs) return rs return itertools.chain([text()], the_replies()) def process(spec: Spec) -> None: spec.texout.write(b'\\documentclass{article}\n\\begin{document}\n') html = parse(spec.htmlfilter(spec.fetcher.fetch(spec.url))) for r in replies(html): spec.domfilter(r) spec.texout.write(spec.texifier.texify(r)) spec.texout.write(b'\\end{document}\n') def main() -> None: with spec_from_commandline_args() as spec: process(spec) if __name__ == '__main__': main()