Parsedown ルビ記法extension
noi/parsedown-rubytextは、Parsedownのルビ(ふりがな)用エクステンションです。, (*1)
以下の拡張記法用エクステンションを含んでいます:, (*2)
-
\Noi\Parsedown\RubyTextTrait -- ルビ指定(inline)
-
\Noi\Parsedown\RubyTextDefinitionTrait -- ルビ定義(reference-style)
-
\Noi\Parsedown\AozoraRubyTextTrait -- 青空文庫ルビ形式(inline)
-
\Noi\Parsedown\PixivRubyTextTrait -- Pixivルビ形式(inline)
また、上記の1と2のtraitを組み込んだ実装クラスも含んでいます:, (*3)
-
\Noi\ParsedownRubyText -- Parsedownから派生
-
\Noi\ParsedownExtraRubyText -- ParsedownExtraから派生
以降では1と2の拡張記法の使い方について主に説明します。
3の説明はREADME-Aozora.md、4の説明はREADME-Pixiv.mdを確認してください。, (*4)
Markdown
inlineルビ指定
[親文字]^(ルビ)
-
[親文字]^(ルビ) (全角カッコを使用)
-
[親文字](ルビ) (全角カッコを使用)
これらは次の<ruby>タグを生成します:, (*5)
<ruby>親文字<rp>(</rp><rt>ルビ</rt><rp>)</rp></ruby>
このパッケージは、上記の書式の他にもルビ記法エクステンションを同梱しています。
青空文庫ルビ形式(README-Aozora.md)とPixivルビ形式(README-Pixiv.md)も参照してください。, (*6)
reference-styleルビ定義
上記の書式を使って文書内のどこかの行でルビを定義します。
Markdownのリンク定義や、MarkdownExtraの "Abbreviations" のように、
ルビ定義行自体は変換後のHTMLに含みません。, (*7)
ルビを定義した単語は、ルビ指定がない箇所も自動でルビ振り対象になります(inline codeやcode block内を除く)。, (*8)
デフォルトの動作では、ルビ定義済み単語は文書内のすべての出現箇所でルビが振られます。
この動作を変更し、各単語の最初の出現箇所だけに限定することも可能です。, (*9)
自動ルビ振りを初出箇所限定モードにする場合は以下のメソッドを実行してください:, (*10)
setRubyTextDefinitionMarkupAll(false)
自動ルビ振りの設定に関係なく、inlineルビで明示的にふりがなを指定した箇所は常に指定のルビを振ります。, (*11)
モノルビ割り当て
ルビは分かち書きすることでルビ対象の各文字にモノルビとして割り当てることもできます:, (*12)
-
[日本語]^(に ほん ご) -- ルビ指定
-
**[日本語]: に ほん ご -- ルビ定義
上の例は次の<ruby>タグを生成します:, (*13)
<ruby>
日<rp>(</rp><rt>に<rt><rp>)</rp>
本<rp>(</rp><rt>ほん<rt><rp>)</rp>
語<rp>(</rp><rt>ご<rt><rp>)</rp>
</ruby>
(実際の出力は1行)
属性値の指定
ルビには属性値を追加設定することもできます。
Markdown Extra "Special Attributes" の書式と同じ {...} 形式で指定してください:, (*14)
[日本語]^(にほんご){#id .classA .classB lang=ja}
上の例は次の<ruby>タグを生成します:, (*15)
<ruby id="id" class="classA classB" lang="ja">日本語<rp>(</rp><rt>にほんご</rt><rp>)</rp></ruby>
ふりがなの小書き文字(捨て仮名)自動変換
HTML変換時、ふりがなに含まれる小書き文字(捨て仮名「ぁ」「っ」など)を並字(普通の大きさ「あ」「つ」など)に自動変換することも可能です。, (*16)
このモードに設定すると、次のように小字を並字に自動変換します:, (*17)
-
[東京都]^(とうきょうと) => <ruby>東京都<rp>(</rp><rt>とうきようと</rt><rp>)</rp></ruby>
-
[百科事典]^(ひゃっかじてん) => <ruby>百科事典<rp>(</rp><rt>ひやつかじてん</rt><rp>)</rp></ruby>
自動変換モードに変更する場合は以下のメソッドを実行してください:, (*18)
setRubyTextSuteganaAllowed(false)
ふりがなは小さいフォントサイズで表示されるため、印刷媒体などの慣例では読みやすさの観点から並字を使う傾向にあります。
変換後のHTMLを小さめのフォントサイズで表示する場合や、印刷目的でも利用する場合には、自動変換モードを使うと便利です。, (*19)
デフォルトでは自動変換しません。小書き文字があってもそのまま使用します。, (*20)
Installation - インストール方法
Composer で以下を実行してください。, (*21)
$ php /path/to/composer.phar require noi/parsedown-rubytext "*"
$ php /path/to/composer.phar require erusev/parsedown-extra "*"
または、composer.json に以下の行を含めてください。, (*22)
{
"require": {
"noi/parsedown-rubytext": "*",
"erusev/parsedown-extra": "*"
}
}
MarkdownExtraを使わない場合は、erusev/parsedown-extraの行は必要ありません。, (*23)
Composerによるパッケージ管理をしていない場合は、include_path のいずれかに
Noi/ ディレクトリを作り、そこへ lib/ 以下のファイルを置いてください。, (*24)
Usage - 使い方
これらのクラスは、それぞれParsedownとParsedownExtraにルビ用エクステンションを組み込んだ実装クラスです。, (*25)
派生元クラスの機能に加えてルビ指定とルビ定義用の拡張記法が使用できます。
メソッドの使い方はParsedownクラスと同じです。, (*26)
$pd = new \Noi\ParsedownRubyText(); // or new \Noi\ParsedownExtraRubyText();
echo $pd->text('[日本語]^(にほんご)');
// Output:
日本語, (*27)
どちらのクラスも「青空文庫ルビ形式」と「Pixivルビ形式」のエクステンションは組み込んでいません。
これらの拡張記法を使うときは、使い方2を参考に独自派生クラスを作って組み込む必要があります。, (*28)
使い方2: 独自のParsedown派生クラスにルビ記法を導入する
あなた独自のParsedown派生クラスにルビ用エクステンションを組み込む場合は、
以下のように必要なtraitを組み込んでください:, (*29)
class YourParsedown extends Parsedown /* or ParsedownExtra or etc. */ {
// 1. ルビ用エクステンションのtraitをuse
use \Noi\Parsedown\RubyTextTrait;
use \Noi\Parsedown\RubyTextDefinitionTrait;
// 2. registerメソッドをコンストラクタかどこかで実行
public function __construct()
{
parent::__construct(); // 必要に応じて
$this->registerRubyTextExtension();
$this->registerRubyTextDefinitionExtension();
}
}
$pd = new YourParsedown();
echo $pd->text('[日本語]^(にほんご)');
// Output:
日本語, (*30)
traitを組み込む際、useだけでなくregisterメソッドの実行も必要です。忘れるとエクステンションは動作しません。
忘れやすいので注意してください!, (*31)
PHP5.3以前の場合
PHP5.3まではtrait未対応のためそのままでは使用できません。, (*32)
組み込みたいtraitのファイルを開き、中身をコピペするなどしてクラスを作ってください。
またはPHPのバージョンアップをぜひお願いします。, (*33)
動作の詳細
- Markdownと変換結果の具体例は
tests/data/ 以下にあります。
- 各クラスやtraitファイルのDocCommentも確認してください。
License
MITライセンスです。ライセンスの制限の範囲内であれば商用・非商用を問わず自由にお使いください。, (*34)
Code released under the MIT License - see the LICENSE file for details., (*35)