業務でMayaa使っています。
私が所属する開発チームでは、Mayaaのプロセッサとひもづけるid(m:id)に、一定の命名規則を持たせています。
ルールは以下の4種類しかありません。
- その場に値を出力する(m:writeプロセッサ):"〜_HERE"
- そのタグの属性を変化させる(m:echo, m:attribute):"〜_TAG"
- その要素を条件によって出し分ける(m:if):"IF_〜"
- その要素を繰り返す(m:for or m:forEach):"LOOP_〜"
このようにしておけば、仮に〜_HEREがm:writeではなく、m:insertであったとしても、テンプレートを書くデザイナーさんには同じように見えるので、よって上記4ルールで徹底運用しています。
さて、日々の業務を楽にするための努力は欠かしません。名前が規則に従っているなら、プログラムも自動生成できてしまうのではないか?
Mayaaは、テンプレートに定義されていないm:idを記述すると、警告で教えてくれる機能があります。
[WARN] EqualsIDInjectionResolver - the injection ID(IF_*******) is not found on the template, /xxx/yyy/zzz.xhtml#410.
この文字列をコピペして食べさせれば、.mayaaファイルの雛形を生成するEmEditorマクロを作りました。
document.selection.Replace( "[WARN] EqualsIDInjectionResolver - the injection ID(", "", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll); document.selection.Replace( "\\) is not found on the template.*$", "", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll | eeFindReplaceRegExp); document.selection.Replace( "^.*_HERE$", "\t<!-- を出力します。 -->\n" + "\t<m:write m:id='\\0' value='${}' />", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll | eeFindReplaceRegExp); document.selection.Replace( "^.*_TAG$", "\t<!-- します。属性が変化します。 -->\n" + "\t<m:echo m:id='\\0'>\n" + "\t\t<m:attribute name='' value='${}' />\n" + "\t</m:echo>", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll | eeFindReplaceRegExp); document.selection.Replace( "^IF.*$", "\t<!-- の時にのみ表示します。 -->\n" + "\t<m:if m:id='\\0' test='${}'>\n" + "\t\t<m:echo><m:doBody /></m:echo>\n" + "\t</m:if>", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll | eeFindReplaceRegExp); document.selection.Replace( "^LOOP.*$", "\t<!-- を繰り返します。 -->\n" + "\t<m:for m:id='\\0'\n" + "\t\t\tinit='${}'\n" + "\t\t\ttest='${}'\n" + "\t\t\tafter='${}'>\n" + "\t\t<m:echo><m:doBody /></m:echo>\n" + "\t</m:for>", eeFindNext | eeFindReplaceCase | eeFindReplaceEscSeq | eeReplaceAll | eeFindReplaceRegExp);
便利です!
自分だけですが。。。
問題なのは会社でEmEditorを愛用しているのが僕だけということです。。。秀丸マクロ?書けません!