[嘘言語] XSLTもどき?
class Person { String name; String mail; }
というクラスに対して
- Javaで書かれた入力フォーム
add(new Label("おなまえ")); add(new TextBox(p.name)); add(new Label("メールアドレス")); add(new TextBox(p.addr)); add(new Button("OK"));
- Javaで書かれた出力フォーム
add(new Label("おなまえ")); add(new Label(p.name)); add(new Label("メールアドレス")); add(new Label(p.addr));
- HTMLで書かれた入力フォーム
<Span>おなまえ <Input type=text name=name value=#{p.name}/> <Span>メールアドレス <Input type=text name=name value=#{p.value}/> <Input type=submit>
- HTMLで書かれた出力フォーム
<Span>おなまえ</Span> #{name} <Span>メールアドレス</Span> #{value}
を生成したいとする.
これらを自動生成する言語を構想中:
// Person を表示しろ,といわれたらとりあえずこれを表示する on Person p {<Button/> } /* :{XXX} は XXXの左辺値をとりだす演算子. 左辺値に対しては name(読み出し) value(読み書き)プロパティを使って 変数値をいじれる.*/
// 入力フォームの Entryの部分を Javaで 表現したい場合,これを表示する on Java -> Input -> Entry e {add(new Label(#{e.name})); add(new TextBox(#{e.value})); } /* Usage:<Input>#{p}</Input> */
//入力フォームの Entryの部分を HTMLで 表現したい場合,これを表示する on HTML -> Input -> Entry e { <Span>#{e.label}</Span> <Input type=text name=#{e.value.name} value=#{e.value.value}/> } /* Usage: <Input>#{p}</Input> */
// 出力フォームの Entryの部分を Javaで 表現したい場合,これを表示する on Java -> Output -> Entry e {add(new Label(#{e.name})); add(new Label(#{e.value})); // ※1 } /* Usage:<Output>#{p}</Output> */
// 出力フォームの Entryの部分を HTMLで 表現したい場合,これを表示する on HTML -> Output -> Entry e { <Span>#{e.label}</Span> #{e.value.value} // ※1 } /* Usage: <Output>#{p}</Output> */
ポイントは,上の4つの表現の中にPersonが出てきていないところ.他のデータにも応用がきくように作ってある.