情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでmarkdown-jsを使ったMarkdown→HTML変換を行う

MarkdownドキュメントをHTMLドキュメントに変換するには下のようなモジュールを利用する方法があります。

  • markdown
  • marked
  • showdown
  • markdown-it

この記事ではmarkdownモジュールを利用する方法を取り上げます。

変換

markdownモジュールを利用してMarkdownドキュメントをHTMLドキュメントに変換するにはmarkdown.markdown.toHTML関数を使用します。

var markdown = require('markdown');

var hdoc = markdown.markdown.toHTML('xxx', 'Gruber');

第1引数にMarkdownドキュメントを指定します。

第2引数にMarkdownドキュメントの形式を指定します。この引数は指定しなくても構いません。

対応しているMarkdownドキュメントの形式には下のようなものがあります。

  • Gruber・・・オリジナルのMarkdown形式です。

詳細に関してはMarkdown: Syntaxを参照してください。

  • Maruku・・・オリジナルのMarkdown形式を改良したものです。

詳細に関してはMaruku featuresを参照してください。

返り値としてHTMLドキュメントが得られます。

なお、返り値として得られるHTMLドキュメントの改行コードは\nであるため、場合によっては自分で\r\nに変換しなければならないかもしれません。

サンプルコード1

3つ目のコマンドライン引数として与えられたファイルを読み込み、Maruku形式のMarkdownドキュメントとしてパースし、HTMLドキュメントに変換し、整形し、4つ目のコマンドライン引数として与えられたファイルに書き込みます。

HTMLドキュメントを整形する方法に関しては下の記事を参照してください。

なお、文字コードがUTF-8のテキストファイルを読み込むとテキストの先頭にBOM(バイトオーダーマーク)が付加されていることがあるため、下のプログラムではstripBom関数を使用してBOMを取り除いています。

stripBom関数に関しては下の記事を参照してください。

markdown-to-html.js

var fs = require('fs');
var stripBom = require('strip-bom');
var markdown = require('markdown');
var html = require('html');

if (process.argv.length < 4) {
    console.error('lack argument.');
    process.exit(1);
}

fs.readFile(process.argv[2], 'utf-8', function (err, mdoc) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        var hdoc = html.prettyPrint(markdown.markdown.toHTML(stripBom(mdoc), 'Maruku'), { indent_size: 2 }).replace(new RegExp('\r\n', 'g'), '\n').replace(new RegExp('\n', 'g'), `\r\n`);
        fs.writeFile(process.argv[3], hdoc, 'utf-8', function (err) {
            if (err) {
                console.error(err);
                process.exit(1);
            }
            else {
                console.log('finished!!');
            }
        });
    }
});

使用パッケージ

  • strip-bom
    npm install strip-bomでインストールします。
  • markdown-js
    npm install markdownでインストールします。
  • html prettyprinter
    npm install htmlでインストールします。

実行結果

現在のフォルダには下のような内容のdoc.mdという名称のMarkdownドキュメントが存在しています。

# 私が好きなアニメ

私が好きなアニメを紹介します。

* 対魔導学園35試験小隊
* 下ネタという概念が存在しない退屈な世界
* 城下町のダンデライオン
* 電波教師
* 魔法少女リリカルなのはViVid
* ISUCA
* DOG DAYS''
* 六畳間の侵略者!?
* 星刻の竜騎士

## 対魔導学園35試験小隊

序盤は微妙かなと思ったけど**回を進める毎に良くなっていきました**。

## 下ネタという概念が存在しない退屈な世界

このMarkdownドキュメントをHTMLドキュメントに変換してみます。

C:\work\node>node markdown-to-html.js doc.md doc.htm
finished!!

変換結果は下のようになりました。

<h1>私が好きなアニメ</h1>

<p>私が好きなアニメを紹介します。</p>
<ul>
  <li>対魔導学園35試験小隊</li>
  <li>下ネタという概念が存在しない退屈な世界</li>
  <li>城下町のダンデライオン</li>
  <li>電波教師</li>
  <li>魔法少女リリカルなのはViVid</li>
  <li>ISUCA</li>
  <li>DOG DAYS&#39;&#39;</li>
  <li>六畳間の侵略者!?</li>
  <li>星刻の竜騎士</li>
</ul>

<h2>対魔導学園35試験小隊</h2>

<p>序盤は微妙かなと思ったけど<strong>回を進める毎に良くなっていきました</strong>。</p>

<h2>下ネタという概念が存在しない退屈な世界</h2>

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js