1 # paperdoorknob: Print glowfic
3 # This program is free software: you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License as published by the
5 # Free Software Foundation, version 3.
7 from typing
import Any
, Iterable
9 from bs4
import BeautifulSoup
11 from args
import spec_from_commandline_args
12 from glowfic
import chunkDOMs
, flatURL
, makeChunk
16 def parse(content
: bytes) -> BeautifulSoup
:
17 return BeautifulSoup(content
, 'html.parser')
20 def ilen(it
: Iterable
[Any
]) -> int:
21 return sum(1 for _
in it
)
24 def process(spec
: Spec
) -> None:
25 spec
.texout
.write(br
'''\documentclass{article}
28 \usepackage{longtable}
31 \usepackage{wrapstuff}
33 if spec
.geometry
is not None:
34 spec
.texout
.write(br
'\usepackage[' +
35 spec
.geometry
.encode('UTF-8') +
37 spec
.texout
.write(br
'''\begin{document}
38 \newcommand{\href}[2]{#2\footnote{\detokenize{#1}}}
39 \def\glowiconsize{%fmm}
41 url
= flatURL(spec
.url
)
42 spec
.log('Fetching HTML...\r')
43 html
= spec
.fetcher
.fetch(url
)
44 spec
.log('Parsing HTML...\r')
45 dom
= parse(spec
.htmlfilter(html
))
46 spec
.log('Counting chunks...\r')
47 num_chunks
= ilen(chunkDOMs(dom
))
48 for i
, r
in enumerate(chunkDOMs(dom
)):
49 percent
= 100.0 * i
/ num_chunks
50 spec
.log(f
'Processing chunk {i} of {num_chunks} ({percent:.1f}%)\r')
52 chunk
= makeChunk(r
, spec
.images
)
53 spec
.texout
.write(spec
.texfilter(spec
.layout
.renderChunk(chunk
)))
55 spec
.texout
.write(b
'\\end{document}\n')
59 with spec_from_commandline_args() as spec
:
63 if __name__
== '__main__':