[嘘言語] 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が出てきていないところ.他のデータにも応用がきくように作ってある.

※1 がなんで#{e.value}だったり#{e.value.value}だったりするのは... また後で