Markdownで記事を書けるようにする

Markdownで記事を書けるようにしてみましょう。GiblogのデフォルトはGiblog記法ですが、Markdownに対応させることもできます。拡張子が「md」だった場合に、マークダウン記法で書けるようにしてみましょう。

Markdownモジュールのインストール

Perlには、Markdownの入力をHTMLに変換するモジュールがCPANにはいくつかあります。ここでは、Githubのマークダウン記法に近い記述ができるText::Markdown::Hoedownを使ってみましょう。

cpan Text::Markdown::Hoedown

または

cpanm Text::Markdown::Hoedown

cpanmがインストールされている場合は、cpanmで、cpanしかない場合は、cpanでインストールしましょう。

Markdownで記事を書くためのプログラムの修正

Giblogの機能を追加・変更するには、ビルドコマンド「lib/Giblog/Command/build.pm」を修正します。修正を間違って動かなくなった時のために、このファイルをバックアップを取っておくと安全です。

ではビルドコマンドにMarkdownで編集できる機能を追加してみましょう。まず、parse_giblog_syntaxというメソッドが呼ばれている部分を探してください。

package Giblog::Command::build;

use base 'Giblog::Command';

use strict;
use warnings;
use utf8;

use File::Basename 'basename';

sub run {
  # ...

    # Parse Giblog syntax
    $api->parse_giblog_syntax($data);
  
  # ...
}

この部分を、ファイルの拡張子が「md」であった場合に、Markdownとして解釈して、HTMLを出力するという処理を追加します。

sub run {
  # ...

    # Parse Markdown syntax
    if ($data->{file} =~ /\.md$/) {
      require Text::Markdown::Hoedown;
      
      # Convert extenstion from md to html
      $data->{file} =~ s/\.md$/.html/;
      
      # Convert Markdown to HTML
      $data->{content} = Text::Markdown::Hoedown::markdown($data->{content});
    }
    else {
      # Parse Giblog syntax
      $api->parse_giblog_syntax($data);
    }
  
  # ...
}

require文を使って、Text::Markdown::Hoedownを動的にロードしています。

ファイル拡張子が「md」であった場合に、出力のためにhtmlに修正する処理を書いています。

markdown関数を使って、コンテンツをMarkdownからHTMLに変更する処理を書いています。

templatesの中にあるファイルの拡張子を「md」にして、Markdownで記事を書いてみましょう。出力がHTMLになっていれば、成功です。