一応WMLにはwmkというmakeをするプログラムがあるのですが、残念ながらこれは日本語を扱う時には少々不便です。日本語の場合、コードを変換したりする必要があるのですが、これはwmkでは扱えません。そこで、素直にここは普通のプログラムのようにMakefileを書いてしまいましょう。なに、ちょこちょこと書けばいいだけなので、簡単です。
まず、一番簡単な例からはじめてみましょう。 index.wml というファイルをコンパイルしてindex.htmlを生成します。 Makefile というファイル名で保存して、make あるいは make all とコマンドを打ってください。 そうそう、Makefileでの字下げは例外無くタブですので、御間違えなく。 空白だとエラーが出ます。
[File] Makefile
# wmlの場所
WML = /usr/local/bin/wml
# wmlのオプション
CFLAGS = -O2
# nkfの場所
NKF = /usr/bin/nkf -j
# 一時ファイル
TEMPFILE = /tmp/maketmp
RM = /bin/rm -f
HTML = index.html
###########################################################
All: html
html: $(HTML)
$(RM) $(TEMPFILE)
index.html: index.wml
$(WML) $(CFLAGS) index.wml > $(TEMPFILE)
$(NKF) < $(TEMPFILE) > index.html
一旦コンパイルした後、そのままでは漢字コードがEUCそのままなので、nkfでISO-2022-JPに変換しています。 変換が必要ないのならば、nkfはいりません。 SJISにしたいのならば、-jを-sに変換してください。
さて、これでは wmd を使っても同じですね。今度は #include を使うことを考えてみまし ょう。上に加えて next.wml というファイルを追加するとします。 そして、共通する部分をまとめた common.wh というファイルを使っているとします、 ついでに make check とすると htmllint で文法をチェック、make clean で作成したHTMLファイルを全部消去するようにしましょう。 依存関係を書いたファイルをいくつも並べなくてもいいように、サフィックス(拡張子)も見て依存関係を自動的につくるようにしています。
[File] Makefile
# wmlの場所
WML = /usr/local/bin/wml
CC = $(WML)
# wmlのオプション
CFLAGS = -O2
# htmllintとそのオプション
HTMLLINT = /home/silver/public_html/htmllint/htmllint
HFLAGS = -noreligious -x communicator
# nkfの場所
NKF = /usr/bin/nkf -j
# rmコマンド
RM = /bin/rm -f
# 一時ファイル
TEMPFILE = /tmp/wmlmaketempfile
# 共通で使うファイル
COMMON_CONTENTS = common.wh
# 最終的に作成するファイル
HTML = index.html next.html
###########################################################
All: html
html: $(HTML)
$(HTML): $(COMMON_CONTENTS)
%.html: %.wml
$(CC) $(CFLAGS) $< > $(TEMPFILE)
$(NKF) < $(TEMPFILE) > $@
$(RM) $(TEMPFILE)
check:
$(HTMLLINT) $(HFLAGS) $(HTML)
clean:
rm -f $(HTML)
これで、だいぶ実用的になりましたね。あとは、HTMLにつくりたいファイル名を書いて、新しくそれぞれの依存関係を記述するだけです。 普通に使うだけならば HTML = の行に追加したファイルを記述するだけでも大丈夫でしょう。 単純なサイトならばこれで十分のはずです。 もっと詳しく知りたい方は、makeに関する参考文献を読んでください。
WMLでは wml::std::lang を使う事により、多言語のページを一気に生成できます。 しかし、やはりそこに日本語かからむと少々面倒な事もあります。 そこで、多言語用の Makefile を作ってみました。
[File] Makefile
# Website Meta Language
WML = /usr/bin/wml
CFLAGS = -O2
CC = $(WML)
# htmllint
HTMLLINT = /usr/bin/jweblint
HFLAGS = -x communicator
# Nihongo Kanji Filter
NKF = /usr/bin/nkf -jx
# Basic Commands
RM = /bin/rm -f
MAKE = /usr/bin/make
MAKETARGET = all
# 一時ファイル
TEMPFILE = /tmp/makewmltmp
# 共通ファイル
WMLCONTENTS = common.wh
# 各言語のHTMLファイル
HTML_JA = \
index.ja.html \
main.ja.html
HTML_EN = \
index.en.html \
main.en.html
# サブディレクトリがあれば書く
SUBDIRS =
##################################################################
HTML = $(HTML_JA) $(HTML_EN)
all: html
subdirs:
@for i in $(SUBDIRS); \
do $(MAKE) -C $$i all || exit; \
done
html: $(HTML)
$(HTML): $(WMLCONTENTS)
# 日本語の場合
%.ja.html: %.wml
$(CC) $(CFLAGS) -o '(ALL-LANG_*)+LANG_JA:$(TEMPFILE)' $<
$(NKF) < $(TEMPFILE) > $@
$(RM) $(TEMPFILE)
# 英語の場合
%.en.html: %.wml
$(CC) $(CFLAGS) -o '(ALL-LANG_*)+LANG_EN:$@' $<
check:
$(HTMLLINT) $(HFLAGS) $(HTML)
@for i in $(SUBDIRS); \
do $(MAKE) -C $$i check || exit; \
done
clean:
rm -f $(HTML)
@for i in $(SUBDIRS); \
do $(MAKE) -C $$i clean || exit; \
done
index.wml のように、一つファイルを作れば、index.ja.html index.en.html というようにそれぞれの言語に分けて生成してくれます。
[File] index.wml
#use wml::std::case global=lower #use wml::std::lang #use wml::std::page <lang:new id=ja short> <lang:new id=en short> <page> <h1>\ <ja>タイトル</ja>\ <en>Title</en>\ </h1> <h2> <ja>日本語</ja>\ <en>English</en>\ </h2> <ja>本文はこんな感じ</ja>\ <en>This is contents area</en>