let dump_html fmt cil_visitor =
Format.pp_set_formatter_tag_functions fmt html_tag_functions;
Format.pp_set_tags fmt true;
let pr_row s fmt n =
Format.fprintf fmt
"@{<tr>@[<v 1>@ @{<td class=\"entry\">%s@}@ @{<td class=\"stat\">%d@}@]@ @} " s n
in
let pr_stats fmt visitor =
let metrics = visitor#get_metrics in
Format.fprintf fmt "@[<v 0>@{<table>%a@}@]"
(fun fmt metrics ->
List.iter2 (fun text value -> pr_row text fmt value)
["SLOC"; "Number of if statements"; "Number of assignments";
"Number of loops"; "Number of calls"; "Number of gotos";
"Number of pointer accesses";]
[metrics.cslocs; metrics.cifs; metrics.cassigns;
metrics.cloops; metrics.ccalls; metrics.cgotos;
metrics.cptrs;]) metrics
in
let pr_prelude fmt cil_visitor =
Format.fprintf fmt "@[<v 0>@{<div>@ @{<h1>@{<span>Metrics@}@}@ @{<h2>Synthetic results@}@ <br/>@ @{<span>Defined function(s)@} (%d): <br/>@ @[ %a@]@ <br/>@ <br/>@ @{<span>Undefined function(s)@} (%d):@ <br/>@ @[ %a@]@ <br>@ <br/>@ @{<span>Potential entry point(s)@} (%d):@ <br/>@ @[ %a@]@ <br/>@ <br/>@ @}@]"
(VInfoMap.map_cardinal cil_visitor#fundef_calls)
(Metrics_base.pretty_set VInfoMap.iter) cil_visitor#fundef_calls
(VInfoMap.map_cardinal cil_visitor#fundecl_calls)
(Metrics_base.pretty_set VInfoMap.iter) cil_visitor#fundecl_calls
(Metrics_base.number_entry_points VInfoMap.fold
cil_visitor#fundef_calls)
(Metrics_base.pretty_entry_points VInfoMap.iter)
cil_visitor#fundef_calls
in
let pr_detailed_results fmt cil_visitor =
Format.fprintf fmt "@[<v 0>@{<div style=\"text-align: left;\">@[<v 2>@ @{<h2>Detailed results@}@ @[<v 0>%a@ @]@]@}"
(fun fmt cil_visitor -> cil_visitor#print_stats fmt) cil_visitor
in
Format.fprintf fmt "@[<v 0><!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\">@ @{<html>@ @{<head>@ @{<title>%s@}@ <meta content=\"text/html; charset=iso-8859-1\" http-equiv=\"Content-Type\"/>@ @{<style type=\"text/css\">%s@}@ @}@ @{<body>@[<v 2>@ %a@ %a@ %a@ @]@}@}@]@?"
"Metrics"
Css_html.css
pr_prelude cil_visitor
pr_stats cil_visitor
pr_detailed_results cil_visitor;