Module:Ruby-zh
MyWikiBiz, Author Your Legacy — Friday January 10, 2025
Jump to navigationJump to searchTemplate:Module rating This is a module for Bopomofo Ruby and their mixed use with "normal" Ruby.
Rationale
Normal Ruby characters go to either the top or the bottom of text, and follow the same horizontal, left-to-right direction that the text being annotated flows. Bopomofo, however, acts differently: it is traditional to put the bopomofo to the right of each character being phonetically labelled, laid out in a vertical direction.[1] As a result, it is non-trivial to lay out Bopomofo-annotated text.
This module roughly follows the methology established by Han.css in its DOM output.
Usage
{{#invoke:Ruby-zh|function_name}}
-- Template for generating Ruby for Chinese characters. local p = {} -- Annotate a single character with bopomofo. -- This can be done in a template... but something else can't. function p._zhuyin1(char, bopo, tone) -- inline-table local ru = mw.html.create('span') ru :addClass('zhuyin-ru') :wikitext(char) :tag('span') -- inline-block :addClass('zhuyin-rt') :tag('span') :addClass('zhuyin-rt-phon') :wikitext(bopo) :done() :tag('span') :addClass('zhuyin-rt-tone') :wikitext(tone) return ru end -- Annotate objects in pinyin. -- Pinyin orthography allow multiple characters to be annotated. -- In this case, we might be adding a pinyin to multiple bopo-annotated pairs. -- (And this of course applies to other romanisations of Chinese.) function p._pinyin(tbl, pinyin, n) n = n or #tbl local ruby = mw.html.create('ruby') ruby:addClass('zhuyin-container') for i, v in ipairs(tbl) do ruby:node(v) end ruby:tag('rt') :attr('rbspan', tostring(n)) :wikitext(pinyin) return ruby end -- This is for test. function p.test() return p._pinyin({ p._zhuyin1('謝', 'ㄒㄧㄝ', 'ˋ'), p._zhuyin1('謝', 'ㄒㄧㄝ', '˙') }, 'xièxie', 2) end -- Now the CSS still needs to be written. And the interface is obviously clumsy, -- and not translatable to templates yet. The main problem is that we will need -- to either separate the syllables themselves or come up with a way for the user -- to express the separation in a template-string. -- -- Also there's a point in tagging stuff with lang return p