前回の続きでNanocの話です。
honkitでは、:name:
という表記で、絵文字を表記できたりしますが、Nanocではできません。
これも、自分でフィルターを簡単に書くことができます。
gemojione を使って、絵文字を表示するフィルターを作る
lib/nanoc/filters/gemojione.rb とか適当にファイルを作ればOKです。
module Nanoc::Filters class ChangeCodeBlock < Nanoc::Filter identifier :gemojione require 'gemojione' def run(content, params = {}) index = Gemojione::Index.new content = content.gsub(/:([a-z0-9 _-]+?):/) {|s| emoji = index.find_by_name($1) || index.find_by_shortname(":" + $1 + ":") moji = s if (emoji != nil) moji = emoji['moji'] end moji } content end end end
Rulesで、下記のように使うだけです。
filter :gemojione
余談
しかし、gemojioneなんですが、こんな感じになっていて、
emoji_hash["description"] = emoji_hash["name"] emoji_hash["name"] = key @emoji_by_name[key] = emoji_hash if key
なぜか、@emoji_by_name
なのに、key
をキーとしていて、定義上、実質、key
と shortname
が同じなので、
- find_by_name
- find_by_shortname
にほぼ違いがないんですよね。謎い。絵文字はこんな感じで定義されています。
※ masterは調べてませんが、v3.3.0に関しては、key と shortnameは一致してそうでした。
{ "100": { "unicode": "1F4AF", "unicode_alternates": [ ], "name": "hundred points symbol", "shortname": ":100:", "category": "symbols", "aliases": [ ], "aliases_ascii": [ ], "keywords": [ "numbers", "perfect", "score", "100", "percent", "a", "plus", "school", "quiz", "test", "exam", "symbol", "wow", "win", "parties" ], "moji": "💯" }, // ... }