Commit 8643734
Changed files (3)
src
contents
_lib
src/contents/_lib/components/ruby.typ
@@ -0,0 +1,54 @@
+#import "@preview/bullseye:0.1.0": target
+#import "@preview/rubby:0.10.2": get-ruby
+#import "../utils/to-string.typ": to-string
+
+#let ruby-html(rt, rb) = {
+ let rt-str = to-string(rt)
+ let rb-str = to-string(rb)
+ if type(rt-str) != str or type(rb-str) != str {
+ return [#rt (#rb)]
+ }
+ let rt-arr = rt-str.split("|")
+ let rb-arr = rb-str.split("|")
+ if rt-arr.len() != rb-arr.len() {
+ return [#rt (#rb)]
+ }
+ let rt-rb-pairs = rt-arr.zip(rb-arr)
+ return {
+ html.ruby(
+ rt-rb-pairs
+ .map(pair => {
+ let rt = pair.first()
+ let rb = pair.last()
+ rb
+ html.rp("(")
+ html.rt(rt)
+ html.rp(")")
+ })
+ .join(),
+ )
+ }
+}
+
+#let ruby-paged(rt, rb) = {
+ let _ruby = get-ruby(
+ size: 0.5em,
+ dy: 0pt,
+ pos: top,
+ alignment: "center",
+ delimiter: "|",
+ auto-spacing: true,
+ )
+ _ruby(rt, rb)
+}
+
+/// - rt (content,str):
+/// - rb (content,str):
+/// -> content
+#let ruby(rt, rb) = context {
+ if target() == "html" {
+ ruby-html(rt, rb)
+ } else {
+ ruby-paged(rt, rb)
+ }
+}
src/contents/_lib/utils/to-string.typ
@@ -1,3 +1,5 @@
+/// - content (content):
+/// -> str
#let to-string(content) = {
if (int, float, str, bytes, label, decimal, version, type).contains(
type(content),
src/contents/_lib/tybios.typ
@@ -2,6 +2,7 @@
#import "components/frame.typ": frame
#import "components/fullwidth.typ": fullwidth
#import "components/marginnote.typ": marginnote
+#import "components/ruby.typ": ruby
#let post-template(body, lang: "en", region: none) = {
set text(lang: lang, region: region)