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}