Quantcast
Channel: OTCHY.NET » zen-coding
Viewing all articles
Browse latest Browse all 2

Zen Coding の Perl 実装書きました

$
0
0

今、最高にアツい Zen Coding (ソースは自分) の Perl 実装を書きました。
これがあれば、(今すぐではありませんが) 手に馴染んだ任意のエディタ全てで、Zen Coding を使用することが出来るようになります。
何故かって…?

その種明かしはちょっと後に回しておいて、とりあえずどんなことが出来るモジュールなのかを紹介します。

こうやって実行すると…

use SSSCoding;

print SSSCoding::expand('div') . "\n";
print SSSCoding::expand('a') . "\n";
print SSSCoding::expand('a:mail') . "\n";
print SSSCoding::expand('div#id.class1.class2') . "\n";
print SSSCoding::expand('#head+#body+#foot') . "\n";
print SSSCoding::expand('div#id>ul>li') . "\n";
print SSSCoding::expand('ul>li#id$*5') . "\n";

こう出力されます!

<div></div>
<a href=""></a>
<a href="mailto:"></a>
<div id="id" class="class1 class2"></div>
<div id="head"></div><div id="body"></div><div id="foot"></div>
<div id="id"><ul><li></li></ul></div>
<ul><li id="id1"></li><li id="id2"></li><li id="id3"></li><li id="id4"></li><li id="id5"></li></ul>

本来の Zen Coding には色々な機能がありますが、とりあえず CSS っぽい記述を HTML に展開する機能のみ実装しています。
というか、自分が使いたいのがそこだけなので。

サポートしている識別子は、id を指定する “#”、class を指定する “.”、繰り返しを指定する “*”、繰り返し回数を出力する “$”、子エレメントを指定する “>”、兄弟エレメントを指定する “+” です。
評価順を指定する “()” については実装が面倒だったので未サポートです。書くと変な感じになります。
後述の目的のため、改行などを入れて整形する機能もないので、”()” を使うほど大袈裟な利用はしないだろう、という目論見でもあります。
今後使ってみて、必要を感じたら実装するかも知れません。

また、文法エラーのチェックはしていないため、誤った文法を渡すとメチャクチャな結果になりますが、そこは了承の上で使って下さい。

任意のエディタで Zen Coding を使う

さあ、ここが本来の目的です。
種明かしをすると、この Perl モジュールを使って、ATOK のプラグインを作ればいいのです。
そうすれば、任意のエディタで Zen Coding が利用可能になりますね。

br とか a とか頻繁に使うタグを、辞書登録したことがある人は多いんじゃないでしょうか?
それを動的に行う、超強力版といったイメージです。

もちろんエディタのみならず、ブラウザのテキストエリアでも使えるので、ブログを書く時とか便利かも知れません。
その気になれば、Word でだって Excel でだって利用可能です。

そんなわけで、最終目的は ATOK プラグイン化なのですが、実はまだ出来ていません。
とりあえず Perl 単体で動く状態になったので公開しようと思った次第です。
プラグイン化が完了したらまたアップしたいと思います。

まだ ATOK 16 を使っていてプラグインが使えないので、まずは ATOK のバージョンを上げないと…。

ダウンロード

SSSCoding.pm

ライセンス

ライセンスは MIT License (日本版 wikipedia の項) で公開します。

その他

Perl で実装しているので CGI にもしやすいかと思います。ウェブサービスを作ってみてもいいですね。
あるいは PHP とか、他の言語への移植も簡単では無いでしょうか。ニーズはさておき。

SSSCoding.pm の中で、閉じタグを使わないエレメントは、%SSSCoding::SINGLES で、各エレメントに追加する属性については、%SSSCoding::ATTRS で定義されています。
必要に応じて修正して使って下さい。

モジュール名について

Zen Coding を名乗るには実装が中途半端ですし、名前がぶつかって何らか問題になるのも嫌だったので、モジュール名自体は全く別の名前にしました。
“Style Sheet” Style Coding の略で、SSSCoding としています。


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images