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; }
テキストファイルに変数が持てるようになっただけで、世界観がググッと変わります。もちろん関数や、繰り返し制御もこなせるようです。色々リンクしておきま〜す。
- UNIXの部屋 検索:m4
- Super Technique 講座〜m4 チュートリアル
- Using m4 to write HTML.
- GNU macro processor: GNU macro processor 日本語マニュアル
いちおうMakefileも
Makefile
targets = colors.css all : $(targets) %.css : %.css.m4 m4 $< > $@ debug : all cat $(targets)
謎の言葉だらけですね・・・makeも奥が深い。