sounisi5011/sounisi5011.jp

AsciiDocによるページの作成

Closed this issue · 1 comments

Pugファイルを直接編集している現状から、AsciiDocによるページ内容の定義を提案したい。
AsciiDocは、特に、小説やキャラクターシートのような共通性のあるファイル群で有効だと思われる。

使用ライブラリ

導入に必要な作業

  • AsciiDoc用Metalsmithプラグインの作成
    metalsmith-layoutsのように、AsciiDocとテンプレートファイルを組み合わせてHTMLを生成するもの。

とりあえずHTMLのルビ用インラインマクロは設計できた。

// ext-ruby.js
module.exports = registry => {
  registry.inlineMacro('ruby', function() {
    this.positionalAttributes(['rb', 'rpStart', 'rpEnd']);
    this.process((_, target, {rb, rpStart = '', rpEnd = ''}) => {
      if (!rb) return target;
      if (!rpStart && !rpEnd) {
        rpStart = '(';
        rpEnd = ')';
      }
      return `<ruby>${target}<rp>${rpStart}</rp><rt>${rb}</rt><rp>${rpEnd}</rp></ruby>`;
    });
  });
};
// build.js
const asciidoctor = require('asciidoctor')();
const registry = asciidoctor.Extensions.create();
require('./ext-ruby')(registry);

const doc = asciidoctor.loadFile('example.adoc', {
  safe: 'safe',
  extension_registry: registry,
});
const htmlText = doc.convert();
// example.adoc
これが俺の技っ!ruby:阿鼻叫喚[パンデモニウム]ッ!!!

君はruby:我々[脳内声, ─]と話せる。

後ろruby:括弧[かっこ, rpEnd=;]のみのルビ?意味あんの??

青空文庫形式のルビ:ruby:日本語[にほんご, 《, 》]

ruby:ルビの中で**太字**は機能するのか[るびのなかで**ふとじ**はきのうするのか]?

ruby:このルビは**無効じゃ**っ[]!!!

ruby:ここまで来たらもはやマクロですら無い。
<p>これが俺の技っ!<ruby>阿鼻叫喚<rp></rp><rt>パンデモニウム</rt><rp></rp></ruby>ッ!!!</p>
<p>君は<ruby>我々<rp></rp><rt>脳内声</rt><rp></rp></ruby>と話せる。</p>
<p>後ろ<ruby>括弧<rp></rp><rt>かっこ</rt><rp></rp></ruby>のみのルビ?意味あんの??</p>
<p>青空文庫形式のルビ:<ruby>日本語<rp></rp><rt>にほんご</rt><rp></rp></ruby></p>
<p><ruby>ルビの中で<strong>太字</strong>は機能するのか<rp></rp><rt>るびのなかで<strong>ふとじ</strong>はきのうするのか</rt><rp></rp></ruby></p>
<p>このルビは<strong>無効じゃ</strong>っ!!!</p>
<p>ruby:ここまで来たらもはやマクロですら無い。</p>

参考文献: