59 lines
1.1 KiB
Typst
59 lines
1.1 KiB
Typst
#let width = 384pt
|
|
|
|
#let init(it) = {
|
|
set page(
|
|
width: width,
|
|
height: auto,
|
|
margin: (x: 0pt, y: 4pt),
|
|
)
|
|
set text(
|
|
font: ("Unifont", "Unifont-JP", "Unifont Upper"),
|
|
size: 16pt,
|
|
fallback: false,
|
|
)
|
|
set par(
|
|
leading: 8pt, // Between lines
|
|
spacing: 26pt, // Between paragraphs
|
|
)
|
|
it
|
|
}
|
|
|
|
// Determined by experiments so that the top and bottom white border are roughly
|
|
// the same size after tearing off the paper.
|
|
#let feed = v(64pt + 32pt)
|
|
|
|
////////////
|
|
// Plugin //
|
|
////////////
|
|
|
|
#import plugin("plugin.wasm") as p
|
|
|
|
#let _number_to_bytes(n) = int(n).to-bytes(size: 8)
|
|
|
|
#let _bool_to_bytes(b) = _number_to_bytes(if b { 1 } else { 0 })
|
|
|
|
#let _str_to_bytes(s) = {
|
|
bytes(s)
|
|
}
|
|
|
|
#let _length_to_bytes(l) = {
|
|
let l = l.pt()
|
|
let n = if l > 10000 { -1 } else { int(l) }
|
|
_number_to_bytes(n)
|
|
}
|
|
|
|
#let dither(
|
|
path,
|
|
bright: true,
|
|
algorithm: "floyd-steinberg",
|
|
) = layout(size => {
|
|
let data = read(path, encoding: none)
|
|
let dithered = p.dither(
|
|
data,
|
|
_length_to_bytes(size.width),
|
|
_length_to_bytes(size.height),
|
|
_bool_to_bytes(bright),
|
|
_str_to_bytes(algorithm),
|
|
)
|
|
image(dithered)
|
|
})
|