gen_rule_content_list(Stream,Rule,CounterEx,SuccessMsg,UncheckedMsg,FailDep,NotExecDep) :-
length(CounterEx,CELen),
length(SuccessMsg,SMLen),
length(UncheckedMsg,UCLen),
length(FailDep,FDLen),
length(NotExecDep,NEDLen),
((CELen > 0 ; SMLen > 0 ; UCLen > 0 ; FDLen > 0 ; NEDLen > 0) % create tag only if at least one child exists
-> format(Stream,' <div class="rule-content" id="~w">~n',[Rule]),
(CELen > 0
-> format(Stream,' <b>~w</b> Violations found:~n',[CELen]),
format(Stream,' <ul>~n',[]),
forall(member(CE,CounterEx),gen_rule_content_list_aux(Stream,CE)),
format(Stream,' </ul>~n',[])
; true
),
(SMLen > 0
-> format(Stream,' <b>~w</b> successful checks:~n',[SMLen]),
format(Stream,' <ul>~n',[]),
forall(member(SM,SuccessMsg),gen_rule_content_list_aux(Stream,SM)),
format(Stream,' </ul>~n',[])
; true
),
(UCLen > 0
-> format(Stream,' <b>~w</b> unchecked items:~n',[UCLen]),
format(Stream,' <ul>~n',[]),
forall(member(UC,UncheckedMsg),gen_rule_content_list_aux(Stream,UC)),
format(Stream,' </ul>~n',[])
; true
),
(FDLen > 0
-> format(Stream,' Rule could not be checked due to ~w failed dependencies:~n',[FDLen]),
format(Stream,' <ul>~n',[]),
forall(member(FD,FailDep),gen_rule_content_list_aux(Stream,FD)),
format(Stream,' </ul>~n',[])
; true
),
(NEDLen > 0
-> format(Stream,' Rule could not be checked due to ~w unchecked dependencies:~n',[NEDLen]),
format(Stream,' <ul>~n',[]),
forall(member(NED,NotExecDep),gen_rule_content_list_aux(Stream,NED)),
format(Stream,' </ul>~n',[])
; true
),
format(Stream,' </div>~n',[])
; true),
fail.
gen_rule_content_list(_,_,_,_,_,_,_).