読者です 読者をやめる 読者になる 読者になる

No Programming, No Life

新しいNPNLです。http://d.hatena.ne.jp/fumokmm/ から引っ越してきました。

GroovyでMarkdownパーサーを作ろう #2「HTML出力部分の作成」

このシリーズの一覧


Groovy! (挨拶)

どうも、ふも(@)です。

はじめに

さて、それでは早速コードを書いて行きたいと思います。といってもまだ、Markdownの変換ロジックには入りません。
今回は設定ファイルを読み込んで、その内容をプレーンなHTMLにそのまま埋め込んで出力させるというところまで作って行きたいと思います。

作成するスクリプト

スクリプト名は前回決めた通り、fumomarkdowngにしようと思うので、

fumomarkdowng.groovy

になります。
そして、マークダウン形式で内容が書かれたファイルは、

hoge.md

にしてみましょう。

外部ファイルの内容読み込み

何はともあれ、hoge.mdの内容をまず読み取るところから。
Groovyでは、外部ファイルの読み込みはFile#text*1を利用して行えます。

new File('path to file').text

コマンドライン引数はargsという暗黙変数にString[]型として格納されます。第一引数の文字列の取得は

args[0]

のようにします。ということで、外部ファイルの内容を文字列で取得し、contentsという名前の変数に格納しておくことにします。

// 第一引数の内容を読み込む
def contents = new File(args[0]).text

HTMLを出力

で、次はHTMLの出力部分。ひとまず標準出力への出力でいいかな、ファイルへ出力する場合はリダイレクトすればいいし。
Groovyでは標準出力への出力はprintprintlnprintfを使います。
複数行の文字列は ''' か """ で囲みます*2*3。今回は変数展開を使いたいので、""" の方を使いましょう。

// 読み込んだ内容をHTMLのテンプレートに流し込む
println """<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>fumomarkdowng</title>
</head>
<body>
${contents}
</body>
</html>"""

まぁ、こんな感じでしょうか。タグの中身は${contents}なので、ひとまず読み込んだファイルの中身をそのまま入れ込む感じです。

実行してみる

$ groovy fumomarkdowng.groovy hoge.md
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>fumomarkdowng</title>
</head>
<body>
# level1
## level2
### level3
</body>
</html>
$

うまく行きました、予想通りです。
あ、ちなみに、hoge.mdの内容はお察しの通り

# level1
## level2
### level3

です。まだ本題であるMarkdownの変換処理を何も書いていないのでそのまま出力されているわけです。

おわりに

さて、次回からは変換ロジックを書いて行きたいと思います。まずは簡単な見出しあたりからかなぁ。ではまた!

今回使用したソースはこちら

次の記事:GroovyでMarkdownパーサーを作ろう #3「Headers(見出し)の実装」 - No Programming, No Life
前の記事:GroovyでMarkdownパーサーを作ろう #1「名前決め」 - No Programming, No Life

*1:#getTextの省略系

*2:他の言語だとヒアドキュメントとか呼ばれてるやつです。今回みたいにテンプレートとして使う場合に改行込みに出来るので便利です。

*3:Groovyでは複数行の文字列を扱う記法がまだあります。ドルスラッシュ文字列とか。詳しくは参考記事のv1.8の新機能あたりをご覧下さい