GNU m4で快適css生活。

最近マイナー言語にハマっているtanakaです。その中でも中毒性の高い言語。それがマクロプロセッサm4。m4があればどんなテキストファイルもプログラミング言語に化ける。

HTMLやCSSでは変数定義が出来ないので、置換を駆使するか、テンプレートエンジンを活用するかです。しかし、新たな提案としてm4というツールを活用してみるのも悪くない。1冊の本になるほど奥が深いらしい。

はてなで面倒な処理といえば、フォントの色。テキスト色ととキーワードリンクの色を揃えないと相当見栄えが悪い。変数が欲しい所です。m4のマクロ定義を使って、cssコンパイルしてみよう。

colors.css.m4
divert(-1)
define(`_black', `#111111')
divert(0)dnl
body { color: _black; }
a.keyword { color: _black; }

「devert(-1)〜devert(0)dnl」は改行の制御の為のおまじない。出力先を-1に変えることで、改行の出力を抑える。

「define(`定義',`内容')」で、マクロを定義する。「`文字列'」はバッククオートとシングルクオートで囲む。ユニークな名前を付けないと、誤変換が起きるので「_」を付けて、マクロと普通のテキストを分離しておこう。

後は,マクロに従い、cssを書いていく。たったこれだけだ。

コンパイルしてみる。

$ m4 colors.css.m4
body { color: #111111; }
a.keyword { color: #111111; }

テキストファイルに変数が持てるようになっただけで、世界観がググッと変わります。もちろん関数や、繰り返し制御もこなせるようです。色々リンクしておきま〜す。

いちおうMakefile

Makefile
targets = colors.css

all : $(targets)

%.css : %.css.m4
	m4 $< > $@

debug : all
	cat $(targets)

謎の言葉だらけですね・・・makeも奥が深い。