Template language proposal

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Template language proposal

Joe Armstrong (AL/EAB)

 
Here is a proposal for a template language (suitable for yaws)

Here is a file mis.template - it contains two templates main and bar

       @module misc
       @template main(E)

       <? M= 30, N = 20, "" ?>

       <h1>Example</h1>

       <p> Factorial <? N ?> is <? fac(N) ?>
       I suppose and M = <? M ?>.

       <? bar(fac(M)) ?>

       @template bar(X)

       <table><tr><td bgcolor="grey"> <? X ?> </tr></td></table>

       @code

       fac(0) -> 0;
       fac(N) -> N * fac(N-1).

Semantics

        <? Expr1, Expr2, ... Exprn ?>

means evaluate Expr1, Expr2 in order, the result is the result of
evaluating ExprN - this value is pasted into the doument - and bindings created
in evaluation Expr1,... are carried forward.




It is expanded into:

          -module(misc).

          -export([test/0, main/1, bar/1]).

          test() ->
              binary_to_list(list_to_binary(main(""))).

          main(E) ->
              V1 = s(<<"\n">>),
              V2 = s(begin M = 30, N=20, "" end),
              V3 = s(<<"<h1>Example</h1>\n<p>Factorial ">>),
              V4 = s(begin N end),
              V5 = s(<<" is ">>),
              V6 = s(begin fac(N) end),
              V7 = s(<<" I supppose and M = ">>),
              V8 = s(begin M end),
              V9 = s(begin bar(fac(M)) end),
              [V1,V2,V3,V4,V5,V6,V7,V8,V9].

          bar(X) ->
              V1 = s(<<"<table><tr><td bgcolor=\"grey\">">>),
              V2 = s(begin X end),
              V3 = s(<<"</tr></td></table>">>),
              [V1,V2,V3].

          fac(0) -> 1;
          fac(N) -> N * fac(N-1).

          s(N) when integer(N) ->
              integer_to_list(N);
          s(N)  when atom(N) ->
              atom_to_list(N);
          s(N) ->
              N.

Evaluating misc:test() yields

    > misc:test().
"\n<h1>Example</h1>\n<p>Factorial 20 is 2432902008176640000 I supppose and M = 30<table><tr><td bgcolor=\"grey\">265252859812191058636308480000000</tr></td></table>"

As expected

   Cheers

/Joe