image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... | トップページ | ピックアップ:ハードディスクの中身を3次元地図で表示, 「みんなのうた」まとめ »

2007-06-16

racc で xvcd を生成することを試し始めた (その7)

ruby/racc で xfy/xvcd を生成する実験を続けています。

今回は2つの変更を行いました。
  1. 属性指定方法の書式を導入
  2. 任意の xml タグを生成できるようにした

今回のソースコードは以下で公開しています。
http://homepage2.nifty.com/youichi_kato/src.html
- racc で xvcd
    zzz-2007-06-16.tgz(2007-06-16)

1. 属性指定方法の書式を導入
-------------------------
前回は、
変換結果 xml の属性指定を "name", "val" で指定させていたが、
name=>"val" で指定するようにしました。

つまり

xvcd:foo(name=>"val")

と書いたら

<xvcd:foo name="val">
</xvcd:foo>

が出力されます。

2. 任意の xml タグを生成できるようにした
-------------------------------------
いままでは 変換プログラム側で認識できないタグは無視していました。
しかし、今回からは 定義済みチェックをせずに すべて、xml タグ展開をすることに変更しました。
そうすることで これまでは "<<" での ヒアドキュメントで書くしかなかった部分も、
すべて 関数呼び出し風に書くことが可能となります。

つまり

<< <html>
<<   <body>
<<   </body>
<< </html>

html() {
  body();
};

は、同じ変換結果になります。
(すべてを 無理に関数呼び出し風に書く必要は無いです。
ケースに応じてヒアドキュメント記述と使いわければよいと思う)

いままでつかってきた 入力ソースは次のように書き換えることになります。
出力結果は前回までと同じです。

$ cat src
<<
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") {
    //============== MENU ==========
    ui:ui(version=>"1.0") {
      ui:main-menu() {
        ui:menu(label=>"Entry") {
          ui:menu-item(label=>"add", command=>"my:AddEntry",  open-dialog=>"true");
          ui:menu-item(label=>"edit", command=>"my:EditEntry", open-dialog=>"true");
        };
      };
    };
  };

<<
  //============== COMMAND ==========
  def my: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" then
      insert(select=>"/ab:addressbook", position=>"last-child") {
        copy_of(select=>"$result//ab:entry");
      };
    end
  end

<<
  //============== TEMPLATE ==========
  template(name=>"EditDialogRoot") {
    html() {
      body()
    };
  };
};
#--- End of File ---

今回も、前回予告とは反する変更を行ってしまいました。
次回こそは、include 機能を実装しようと思う...


« ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... | トップページ | ピックアップ:ハードディスクの中身を3次元地図で表示, 「みんなのうた」まとめ »

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: racc で xvcd を生成することを試し始めた (その7):

« ピックアップ:Ruby 会議 2007の動画, Viper 2 Open Betaはもうすぐ, etc... | トップページ | ピックアップ:ハードディスクの中身を3次元地図で表示, 「みんなのうた」まとめ »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク