1<%!
2def indent(str, depth):
3    return ''.join(4*' '*depth+line for line in str.splitlines(True))
4%>\
5
6<%def name="genHandler(sig)" buffered="True">
7%if ('type' in sig['sparams']) and \
8    (sig['sparams']['type'] is not None):
9${sig['signal']}<${sig['sparams']['type']}>(
10%else:
11${sig['signal']}(
12%endif
13%for spk in sig['sparams']['params']:
14${sig['sparams'][spk]},
15%endfor
16%if ('type' in sig['hparams']) and \
17    (sig['hparams']['type'] is not None):
18handler::${sig['handler']}<${sig['hparams']['type']}>(
19%else:
20handler::${sig['handler']}(
21%endif
22%for i, hpk in enumerate(sig['hparams']['params']):
23    %if (i+1) != len(sig['hparams']['params']):
24    ${sig['hparams'][hpk]},
25    %else:
26    ${sig['hparams'][hpk]}
27    %endif
28%endfor
29))
30</%def>\
31
32<%def name="genSSE(event)" buffered="True">
33Group{
34%for group in event['groups']:
35%for member in group['members']:
36{
37    "${member['object']}",
38    {"${member['interface']}",
39     "${member['property']}"}
40},
41%endfor
42%endfor
43},
44std::vector<Action>{
45%for a in event['action']:
46%if len(a['parameters']) != 0:
47make_action(action::${a['name']}(
48%else:
49make_action(action::${a['name']}
50%endif
51%for i, p in enumerate(a['parameters']):
52%if (i+1) != len(a['parameters']):
53    ${p},
54%else:
55    ${p})
56%endif
57%endfor
58),
59%endfor
60},
61std::vector<Trigger>{
62    %if ('timer' in event['triggers']) and \
63        (event['triggers']['timer'] is not None):
64    make_trigger(trigger::timer(TimerConf{
65    ${event['triggers']['timer']['interval']},
66    ${event['triggers']['timer']['type']}
67    })),
68    %endif
69    %if ('signals' in event['triggers']) and \
70        (event['triggers']['signals'] is not None):
71    %for s in event['triggers']['signals']:
72    make_trigger(trigger::signal(
73        %if ('match' in s) and \
74            (s['match'] is not None):
75        match::${s['match']}(
76        %for i, mp in enumerate(s['mparams']):
77        %if (i+1) != len(s['mparams']):
78        "${mp}",
79        %else:
80        "${mp}"
81        %endif
82        %endfor
83        ),
84        %else:
85        "",
86        %endif
87        make_handler(\
88        ${indent(genHandler(sig=s), 3)}\
89        )
90    )),
91    %endfor
92    %endif
93},
94</%def>\
95