racc で xvcd を生成することを試し始めた (その5)
プログラムでサポートできていない機能は、記述をそのまま出力できるようにすることで
完全に動作する xfy/xvcd ファイルを生成できるようにした。
<< で始まる行は、そのまま出力させるという機能だ。(ヒアドキュメントのようなもの)
最低でも全部を << で記載すればよい。
今後は、いかに 少ない記述で xfy/xvcd ファイルを生成できるようにするか という観点で発展させていこう。
現状の変換プログラムのソースは以下に置いた。
http://homepage2.nifty.com/youichi_kato/src.html
- racc で xvcd
zzz-2007-06-10.tgz(2007-06-10)
入力と出力結果の例を示す。
入力
======
$ cat src
//
// "Genereated using racc. 2007-06-09"
<<<xvcd:xvcd
<< xmlns="http://www.w3.org/1999/xhtml"
<< xmlns:xvcd="http://xmlns.xfy.com/xvcd"
<< xmlns:instruction="http://xmlns.xfy.com/instruction"
<< xmlns:ctrl="http://xmlns.xfy.com/controls"
<< xmlns:event="http://xmlns.xfy.com/event"
<< xmlns:ui="http://xmlns.xfy.com/ui"
<< xmlns:command="http://xmlns.xfy.com/command"
<< xmlns:ab="http://xmlns.example.com/developer/tutorial/addressbook"
<< version="1.0"><<
//============== VOCABULARY ==========
vocabulary("name","AddressBook", "match","ab:addressbook", "call-template","Root") {
<< <ui:ui version="1.0">
<< <ui:main-menu>
<< <ui:menu label="Entry">
<< <ui:menu-item label="add" command="AddEntry" open-dialog="true" />
<< <ui:menu-item label="edit" command="EditEntry" open-dialog="true" />
<< </ui:menu>
<< </ui:main-menu>
<< </ui:ui>
}<<
//============== COMMAND ==========
def AddEntry(a,b)
dialog("return-to", "result") {
<< <ab:edit-dialog>
<< <ab:entry>
<< <ab:person />
<< <ab:address />
<< </ab:entry>
<< </ab:edit-dialog>
}if "'ok'=$result/ab:edit-dialog/@closed-by"
insert("select","/ab:addressbook", "position", "last-child") {
copy_of("select", "$result//ab:entry")
}
end
end<<
//============== TEMPLATE ==========
<< <xvcd:template name="EditDialogRoot">
<< <html>
<< <body>
<< </body>
<< </html>
<< </xvcd:template>
<<</xvcd:xvcd>
出力
=====
$ make
ruby c.intp src && echo ok
<?xml version="1.0" encoding="UTF-8"?>
<!-- -->
<!-- "Genereated using racc. 2007-06-09" -->
<xvcd:xvcd
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xvcd="http://xmlns.xfy.com/xvcd"
xmlns:instruction="http://xmlns.xfy.com/instruction"
xmlns:ctrl="http://xmlns.xfy.com/controls"
xmlns:event="http://xmlns.xfy.com/event"
xmlns:ui="http://xmlns.xfy.com/ui"
xmlns:command="http://xmlns.xfy.com/command"
xmlns:ab="http://xmlns.example.com/developer/tutorial/addressbook"
version="1.0"><!-- ============== VOCABULARY ========== -->
<xvcd:vocabulary name="AddressBook" call-template="Root" match="ab:addressbook">
<ui:ui version="1.0">
<ui:main-menu>
<ui:menu label="Entry">
<ui:menu-item label="add" command="AddEntry" open-dialog="true" />
<ui:menu-item label="edit" command="EditEntry" open-dialog="true" />
</ui:menu>
</ui:main-menu>
</ui:ui>
</xvcd:vocabulary><!-- ============== COMMAND ========== -->
<instruction:command name="AddEntry">
<instruction:with-param name="a"/>
<instruction:with-param name="b"/>
<xvcd:dialog return-to="result">
<ab:edit-dialog>
<ab:entry>
<ab:person />
<ab:address />
</ab:entry>
</ab:edit-dialog>
</xvcd:dialog>
<instruction:if test="'ok'=$result/ab:edit-dialog/@closed-by">
<xvcd:insert position="last-child" select="/ab:addressbook">
<xvcd:copy-of select="$result//ab:entry">
</xvcd:copy-of>
</xvcd:insert>
</instruction:if>
</instruction:command><!-- ============== TEMPLATE ========== -->
<xvcd:template name="EditDialogRoot">
<html>
<body>
</body>
</html>
</xvcd:template>
</xvcd:xvcd>
« 映画 クィーン を観た。 | トップページ | ピックアップ: 40,000個以上のアイコン検索、「マンデルブロ集合計算・描画プログラム」, etc... »
この記事へのコメントは終了しました。
« 映画 クィーン を観た。 | トップページ | ピックアップ: 40,000個以上のアイコン検索、「マンデルブロ集合計算・描画プログラム」, etc... »
コメント