main
 1#import "@preview/bullseye:0.1.0": target
 2#import "@preview/rubby:0.10.2": get-ruby
 3#import "../utils/to-string.typ": to-string
 4
 5#let ruby-html(rt, rb) = {
 6  let rt-str = to-string(rt)
 7  let rb-str = to-string(rb)
 8  if type(rt-str) != str or type(rb-str) != str {
 9    return [#rt (#rb)]
10  }
11  let rt-arr = rt-str.split("|")
12  let rb-arr = rb-str.split("|")
13  if rt-arr.len() != rb-arr.len() {
14    return [#rt (#rb)]
15  }
16  let rt-rb-pairs = rt-arr.zip(rb-arr)
17  return {
18    html.ruby(
19      rt-rb-pairs
20        .map(pair => {
21          let rt = pair.first()
22          let rb = pair.last()
23          rb
24          html.rp("(")
25          html.rt(rt)
26          html.rp(")")
27        })
28        .join(),
29    )
30  }
31}
32
33#let ruby-paged(rt, rb) = {
34  let _ruby = get-ruby(
35    size: 0.5em,
36    dy: 0pt,
37    pos: top,
38    alignment: "center",
39    delimiter: "|",
40    auto-spacing: true,
41  )
42  _ruby(rt, rb)
43}
44
45/// - rt (content,str):
46/// - rb (content,str):
47/// -> content
48#let ruby(rt, rb) = context {
49  if target() == "html" {
50    ruby-html(rt, rb)
51  } else {
52    ruby-paged(rt, rb)
53  }
54}