ブログをひっこす

2014/07/22

今まで、はてなブログを使っていた。 でもまぁなんか色々使いづらかったので、自前のシステムでやろうかなーと。

やっていることは簡単で、pandocをつかって適当にやっている。 とりあえず前のブログを消しさるために役に立つエントリだけこっちに移管するかなーと。 それとも消さないほうがいいのかなぁ。

pandocをつかったブログシステムの構築

思想

とりあえずmarkdownで手軽に外部システムに依存しないものがほしい。 (まぁpandocには依存してるんだけど)

必要なもの

くらい?実はブログの本質とはこの程度なのだろうか。 kinabaさんのブログが理想だ。 かなり影響を受けている。

やっていること

やっていることは単純で、だいたい以下のファイル群をつかっている。 このエントリを書いている頃のやつなので、見られる時には古くなってるだろうけど。

ファイル構成

以下のようにファイルを構成している。

.
├── 1
│   ├── index.html
│   ├── index.md
│   └── source
│       ├── blog.css
│       ├── include_after_body.html
│       ├── include_before_body.html
│       ├── include_in_header.html
│       └── tree.txt
├── blog.css
├── include_after_body.html
├── include_before_body.html
├── include_file.hs
├── include_in_header.html
├── make.sh
├── send_all.sh
└── send_blog.sh

2 directories, 15 files

HTMLの生成

前述の通り、pandocを使用している。 pandocはcabalでインストールしている。たぶんそうしないと自前のfilterが使えない。

#!/bin/sh

TARGET_DIR=$1
NEXT_DIR=`expr $TARGET_DIR + 1`
PREV_DIR=`expr $TARGET_DIR - 1`

BEFORE_BODY=`mktemp`
sed -e "s/__PREV__/$PREV_DIR/g" \
    -e "s/__HERE__/$TARGET_DIR/g" \
    -e "s/__NEXT__/$NEXT_DIR/g" \
    include_before_body.html > $BEFORE_BODY
AFTER_BODY=`mktemp`
sed -e "s/__PREV__/$PREV_DIR/g" \
    -e "s/__HERE__/$TARGET_DIR/g" \
    -e "s/__NEXT__/$NEXT_DIR/g" \
    include_after_body.html > $AFTER_BODY


cd $TARGET_DIR
pandoc index.md -t html5 --highlight-style tango -f markdown+hard_line_breaks --mathjax --filter ../include_file.hs -H ../include_in_header.html -B $BEFORE_BODY -A $AFTER_BODY -o index.html

僕はあまりTeXみたいな改行方式が好きではないのでhard_line_breaksとしている。 そうすると改行が改行になる。 でもなんかとびでてるな……。

include_before_body.htmlとかはこんな感じ。make.sh内で__PREV__とかを変換してる。

<div class="nav_container">
    <div class="nav_button nav_left"><a href="../__PREV__">一つ過去のページ</a></div>
    <div class="nav_button nav_center"><a href="../__HERE__">このページ</a></div>
    <div class="nav_button nav_right"><a href="../__NEXT__">一つ未来のページ</a></div>
</div>

blog.cssはこんな感じで。

.nav_container{
    text-align:center;
}

.nav_button{
    display:inline-block;
}

.nav_left{
    margin-right:1em;
}

.nav_center{
    margin-left:1em;
    margin-right:1em;
}

.nav_right{
    margin-left:1em;
}

あとひとつ、特別なこととして、filterをつかっていることがある。 これはコードとかは外部にしておきたいときにつかう。 http://johnmacfarlane.net/pandoc/scripting.html#include-files

送信

send_blog.shは簡単に送信するためのshellscript。まぁいちいちscpとかしてられないし。

#!/bin/sh

if [ $# -eq 0 ]
then
    echo "usage: ./send_blog.sh 1"
    exit 1
fi

./make.sh $1
scp -r $1 pushl:
ssh pushl "sudo rm -rf /var/www/blog/$1;sudo cp -r $1 /var/www/blog"

参考

後で見返すように。 主にpandocまわり。