|
2 | 2 | -export([render/2,render/3]). |
3 | 3 |
|
4 | 4 | -spec render({[term()],map()},map())-> binary(). |
5 | | -render({IR,Partials},Ctx)->run(IR,<<>>,[],Partials,Ctx). |
| 5 | +render({IR,Partials},Ctx)->run(<<>>,IR,[],Partials,Ctx). |
6 | 6 |
|
7 | 7 | -spec render([term()],map(),map())-> binary(). |
8 | | -render(IR,Partials,Ctx)-> run(IR,<<>>,[],Partials,Ctx). |
| 8 | +render(IR,Partials,Ctx)-> run(<<>>,IR,[],Partials,Ctx). |
9 | 9 |
|
10 | | -run([],Acc,[],_Partials,_Ctx)-> Acc; |
11 | | -run([],Acc,[{H,OldCtx}|Stack],Partials,_Ctx)-> |
12 | | - run(H,Acc,Stack,Partials,OldCtx); |
13 | | -run([{binary,Value}|IR],Acc,Stack,Partials,Ctx)-> |
14 | | - run(IR,<<Acc/binary,Value/binary>>,Stack,Partials,Ctx); |
15 | | -run([{tag,none,Name}|IR],Acc,Stack,Partials,Ctx)-> |
| 10 | +run(Acc,[],[],_Partials,_Ctx)-> Acc; |
| 11 | +run(Acc,[],[{H,OldCtx}|Stack],Partials,_Ctx)-> |
| 12 | + run(Acc,H,Stack,Partials,OldCtx); |
| 13 | +run(Acc,[{binary,Value}|IR],Stack,Partials,Ctx)-> |
| 14 | + run(<<Acc/binary,Value/binary>>,IR,Stack,Partials,Ctx); |
| 15 | +run(Acc,[{tag,none,Name}|IR],Stack,Partials,Ctx)-> |
16 | 16 | Value = ai_string:html_escape(ai_maps:get(Name,Ctx,<<"">>)), |
17 | | - run(IR,<<Acc/binary,Value/binary>>,Stack,Partials,Ctx); |
18 | | -run([{tag,raw,Name}|IR],Acc,Stack,Partials,Ctx)-> |
| 17 | + run(<<Acc/binary,Value/binary>>,IR,Stack,Partials,Ctx); |
| 18 | +run(Acc,[{tag,raw,Name}|IR],Stack,Partials,Ctx)-> |
19 | 19 | Value = ai_string:to_string(ai_maps:get(Name,Ctx,<<"">>)), |
20 | | - run(IR,<<Acc/binary,Value/binary>>,Stack,Partials,Ctx); |
21 | | -run([{tag,partial,Name }|IR],Acc,Stack,Partials,Ctx)-> |
| 20 | + run(<<Acc/binary,Value/binary>>,IR,Stack,Partials,Ctx); |
| 21 | +run(Acc,[{tag,partial,Name }|IR],Stack,Partials,Ctx)-> |
22 | 22 | Paths = binary:split(Name,<<"/">>,[global]), |
23 | 23 | [H|T] = Paths, |
24 | 24 | Key = [<<".",H/binary>>|T], |
25 | 25 | case ai_maps:get(Paths,Partials,undefined) of |
26 | | - undefined -> |
27 | | - run(IR,Acc,Stack,Partials,Ctx); |
| 26 | + undefined -> run(Acc,IR,Stack,Partials,Ctx); |
28 | 27 | NewIR -> |
29 | 28 | case ai_maps:get(Key,Ctx,undefined) of |
30 | 29 | undefined -> |
31 | | - run(NewIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
| 30 | + run(Acc,NewIR,[{IR,Ctx}|Stack],Partials,Ctx); |
32 | 31 | NewCtx -> |
33 | 32 | NewCtx0 = maps:merge(Ctx,NewCtx), |
34 | | - run(NewIR,Acc,[{IR,Ctx}|Stack],Partials,NewCtx0) |
| 33 | + run(Acc,NewIR,[{IR,Ctx}|Stack],Partials,NewCtx0) |
35 | 34 | end |
36 | 35 | end; |
37 | | -run([{section,Name,SectionIR,false}|IR],Acc,Stack,Partials,Ctx)-> |
38 | | - case ai_maps:get(Name,Ctx,undefined) of |
39 | | - undefined -> run(SectionIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
40 | | - false -> run(SectionIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
41 | | - true -> run(IR,Acc,Stack,Partials,Ctx); |
| 36 | +run(Acc,[{section,Name,SectionIR,false}|IR],Stack,Partials,Ctx)-> |
| 37 | + case ai_maps:get(Name,Ctx,undefined) of |
| 38 | + undefined -> run(Acc,SectionIR,[{IR,Ctx}|Stack],Partials,Ctx); |
| 39 | + false -> run(Acc,SectionIR,[{IR,Ctx}|Stack],Partials,Ctx); |
| 40 | + true -> run(Acc,IR,Stack,Partials,Ctx); |
42 | 41 | L when erlang:is_list(L)-> |
43 | 42 | case L of |
44 | | - [] -> run(SectionIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
45 | | - _ -> run(IR,Acc,Stack,Partials,Ctx) |
| 43 | + [] -> run(Acc,SectionIR,[{IR,Ctx}|Stack],Partials,Ctx); |
| 44 | + _ -> run(Acc,IR,Stack,Partials,Ctx) |
46 | 45 | end; |
47 | 46 | _ -> |
48 | | - run(IR,Acc,Stack,Partials,Ctx) |
| 47 | + run(Acc,IR,Stack,Partials,Ctx) |
49 | 48 | end; |
50 | | -run([{section,Name,SectionIR,true}|IR],Acc,Stack,Partials,Ctx)-> |
| 49 | +run(Acc,[{section,Name,SectionIR,true}|IR],Stack,Partials,Ctx)-> |
51 | 50 | case ai_maps:get(Name,Ctx,undefined) of |
52 | | - undefined -> run(IR,Acc,Stack,Partials,Ctx); |
53 | | - false -> run(IR,Acc,Stack,Partials,Ctx); |
54 | | - true -> run(SectionIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
55 | | - M when erlang:is_map(M)-> run(SectionIR,Acc,[{IR,Ctx}|Stack],Partials,Ctx); |
| 51 | + undefined -> run(Acc,IR,Stack,Partials,Ctx); |
| 52 | + false -> run(Acc,IR,Stack,Partials,Ctx); |
| 53 | + true -> run(Acc,SectionIR,[{IR,Ctx}|Stack],Partials,Ctx); |
| 54 | + M when erlang:is_map(M)-> run(Acc,SectionIR,[{IR,Ctx}|Stack],Partials,Ctx); |
56 | 55 | L when erlang:is_list(L)-> |
57 | 56 | case L of |
58 | | - [] -> run(IR,Acc,Stack,Partials,Ctx); |
| 57 | + [] -> run(Acc,IR,Stack,Partials,Ctx); |
59 | 58 | _ -> |
60 | | - run(SectionIR,Acc,L,[{IR,Ctx}|Stack],Partials,Ctx) |
| 59 | + run(Acc,SectionIR,L,[{IR,Ctx}|Stack],Partials,Ctx) |
61 | 60 | end; |
62 | 61 | F when erlang:is_function(F,2) -> |
63 | | - Acc0 = run(SectionIR,<<>>,[],Partials,Ctx), |
| 62 | + Acc0 = run(<<>>,SectionIR,[],Partials,Ctx), |
64 | 63 | Acc1 = F(Acc0,Ctx), |
65 | | - run(IR,<<Acc/binary,Acc1/binary>>,Stack,Partials,Ctx); |
| 64 | + run(<<Acc/binary,Acc1/binary>>,IR,Stack,Partials,Ctx); |
66 | 65 | _-> |
67 | | - run(IR,Acc,Stack,Partials,Ctx) |
| 66 | + run(Acc,IR,Stack,Partials,Ctx) |
68 | 67 | end. |
69 | | -run(_SectionIR,Acc,[],[{IR,OldCtx}|Stack],Partials,_Ctx)-> |
70 | | - run(IR,Acc,Stack,Partials,OldCtx); |
71 | | -run(SectionIR,Acc,[H|T],Stack,Partials,Ctx)-> |
72 | | - Acc0 = run(SectionIR,Acc,[],Partials,maps:merge(Ctx,H)), |
73 | | - run(SectionIR,Acc0,T,Stack,Partials,Ctx). |
| 68 | +run(Acc,_SectionIR,[],[{IR,OldCtx}|Stack],Partials,_Ctx)-> |
| 69 | + run(Acc,IR,Stack,Partials,OldCtx); |
| 70 | +run(Acc,SectionIR,[H|T],Stack,Partials,Ctx)-> |
| 71 | + Acc0 = run(Acc,SectionIR,[],Partials,maps:merge(Ctx,H)), |
| 72 | + run(Acc0,SectionIR,T,Stack,Partials,Ctx). |
74 | 73 |
|
75 | 74 |
|
0 commit comments