- 以前に青空文庫式ルビ記法を置換するHugoテンプレートを作ったさいには
|のない記法には対応していなかったが、今ならできそうな気がするのでやってみよう - ルビ記法は以下のような規則になっている:
《》で囲まれた文字列はその直前の|以降の文字列にルビとして付く|ルビが付く文字列《ルビになる文字列》
|がない場合、直前の連続する同一文字種の文字列にルビとして付く- 注記一覧に『ルビのかかる文字が、漢字、平仮名、片仮名、アルファベットなど、一つの文字種のみからなるときは、「|」はいりません』とある
仝々〆〇ヶは漢字扱い
- 正規表現で文字種にマッチするには、Unicode文字クラスエスケープを使って文字体系を指定する
- アルファベットは
Latin、ひらがなはHiragana、カタカナはKatakana、漢字はHan\p{sc=Hiragana}と書く
- 文字体系のひらがな・カタカナには長音が含まれないので、別途指定する必要がある
- アルファベットは
- Go言語の正規表現エンジンであるRE2の場合、
\pにUnicode文字クラスを直接指定する\p{Hiragana}と書くと、\p{sc=Hiragana}相当になる
- 結果、テンプレートを以下のように修正した
- 棒ありと棒なしを統合するのは難しそうだったので、棒あり記法の置換の後に棒なし記法の置換を行うようにした
{{- .Content | replaceRE `|(.*?)《(.*?)》` "<ruby>$1<rt>$2</rt></ruby>" | replaceRE `((?:[\p{Latin}]+?)|(?:[\p{Hiragana}ー]+?)|(?:[\p{Katakana}ー]+?)|(?:[\p{Han}仝々〆〇ヶ]+?))《(.*?)》` "<ruby>$1<rt>$2</rt></ruby>" | safeHTML -}}
棒付き
Alphabet
棒ナシひらがな
棒なしカタカナ
棒なし漢字
Japanese Novel Rubyプラグイン
- ObsidianのJapanese Novel Rubyプラグインは青空文庫方式に準拠していないみたい
- ひらがな・カタカナに
|なしでルビを付けてくれないこういうの《ko yu no》がルビにならない
- 漢字では問題なく動作するが、
々〆〇ヶを特別扱いしていない
- ひらがな・カタカナに
- スクリプトなので個人的に改造してしまうこともできる
- やっていることは正規表現による置換なので、パターンをいじってしまえば表示の方はなんとかなりそう
(?:(?:[||]?(?<body1>[一-龠]+?))|(?:[||](?<body2>[^||]+?)))を(?:(?:|(?<body2>.*?))|(?<body1>(?:[\\p{sc=Latin}]+?)|(?:[\\p{sc=Hiragana}ー]+?)|(?:[\\p{sc=Katakana}ー]+?)|(?:[\\p{sc=Han}仝々〆〇ヶ]+?)))で置き換えて、そこの引数の"gm"を"gmu"にする
- ソースコードはMITライセンス
- やっていることは正規表現による置換なので、パターンをいじってしまえば表示の方はなんとかなりそう