Blame build-aux/pmccabe2html

Packit 549fdc
# pmccabe2html - AWK script to convert pmccabe output to html       -*- awk -*-
Packit 549fdc
Packit 549fdc
# Copyright (C) 2007-2016 Free Software Foundation, Inc.
Packit 549fdc
Packit 549fdc
# This program is free software: you can redistribute it and/or modify
Packit 549fdc
# it under the terms of the GNU General Public License as published by
Packit 549fdc
# the Free Software Foundation, either version 3 of the License, or
Packit 549fdc
# (at your option) any later version.
Packit 549fdc
#
Packit 549fdc
# This program is distributed in the hope that it will be useful,
Packit 549fdc
# but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 549fdc
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 549fdc
# GNU General Public License for more details.
Packit 549fdc
#
Packit 549fdc
# You should have received a copy of the GNU General Public License
Packit 549fdc
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
Packit 549fdc
Packit 549fdc
# Written by Jose E. Marchesi <jemarch@gnu.org>.
Packit 549fdc
# Adapted for gnulib by Simon Josefsson <simon@josefsson.org>.
Packit 549fdc
# Added support for C++ by Giuseppe Scrivano <gscrivano@gnu.org>.
Packit 549fdc
Packit 549fdc
# Typical Invocation is from a Makefile.am:
Packit 549fdc
#
Packit 549fdc
# CYCLO_SOURCES = ${top_srcdir}/src/*.[ch]
Packit 549fdc
#
Packit 549fdc
# cyclo-$(PACKAGE).html: $(CYCLO_SOURCES)
Packit 549fdc
# 	$(PMCCABE) $(CYCLO_SOURCES) \
Packit 549fdc
# 		| sort -nr \
Packit 549fdc
# 		| $(AWK) -f ${top_srcdir}/build-aux/pmccabe2html \
Packit 549fdc
# 			-v lang=html -v name="$(PACKAGE_NAME)" \
Packit 549fdc
# 			-v vcurl="http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=%FILENAME%;hb=HEAD" \
Packit 549fdc
# 			-v url="http://www.gnu.org/software/$(PACKAGE)/" \
Packit 549fdc
# 			-v css=${top_srcdir}/build-aux/pmccabe.css \
Packit 549fdc
# 			-v cut_dir=${top_srcdir}/ \
Packit 549fdc
# 			> $@-tmp
Packit 549fdc
# 	mv $@-tmp $@
Packit 549fdc
#
Packit 549fdc
# The variables available are:
Packit 549fdc
#   lang     output language, either 'html' or 'wiki'
Packit 549fdc
#   name     project name
Packit 549fdc
#   url      link to project's home page
Packit 549fdc
#   vcurl    URL to version controlled source code browser,
Packit 549fdc
#            a %FILENAME% in the string is replaced with the relative
Packit 549fdc
#            source filename
Packit 549fdc
#   css      CSS stylesheet filename, included verbatim in HTML output
Packit 549fdc
#   css_url  link to CSS stylesheet, an URL
Packit 549fdc
Packit 549fdc
# Prologue & configuration
Packit 549fdc
BEGIN {
Packit 549fdc
    # Portable lookup of present time.
Packit 549fdc
    "date +%s" | getline epoch_time
Packit 549fdc
    "date" | getline chronos_time
Packit 549fdc
Packit 549fdc
    section_global_stats_p = 1
Packit 549fdc
    section_function_cyclo_p = 1
Packit 549fdc
Packit 549fdc
    # "html" or "wiki"
Packit 549fdc
    package_name = name
Packit 549fdc
    output_lang = lang
Packit 549fdc
Packit 549fdc
    # General Options
Packit 549fdc
    cyclo_simple_max = 10
Packit 549fdc
    cyclo_moderate_max = 20
Packit 549fdc
    cyclo_high_max = 50
Packit 549fdc
    source_file_link_tmpl = vcurl
Packit 549fdc
Packit 549fdc
    # HTML options
Packit 549fdc
    if (url != "")
Packit 549fdc
    {
Packit 549fdc
	html_prolog = "Back to " package_name " Homepage

"
Packit 549fdc
    }
Packit 549fdc
    html_epilog = "
\
Packit 549fdc
Copyright (c) 2007, 2008 Free Software Foundation, Inc."
Packit 549fdc
    html_doctype = "
Packit 549fdc
\"http://www.w3.org/TR/html401/loose.dtd\">"
Packit 549fdc
    html_comment = ""
Packit 549fdc
    html_title = "Cyclomatic Complexity report for " package_name
Packit 549fdc
Packit 549fdc
    # Wiki options
Packit 549fdc
    wiki_prolog = "{{Note|This page has been automatically generated}}"
Packit 549fdc
    wiki_epilog = ""
Packit 549fdc
Packit 549fdc
    # Internal variables
Packit 549fdc
    nfuncs = 0;
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
# Functions
Packit 549fdc
Packit 549fdc
function build_stats()
Packit 549fdc
{
Packit 549fdc
    # Maximum modified cyclo
Packit 549fdc
    for (fcn in mcyclo)
Packit 549fdc
    {
Packit 549fdc
        num_of_functions++
Packit 549fdc
        if (mcyclo[fcn] > max_mcyclo)
Packit 549fdc
        {
Packit 549fdc
            max_mcyclo = mcyclo[fcn]
Packit 549fdc
        }
Packit 549fdc
Packit 549fdc
        if (mcyclo[fcn] > cyclo_high_max)
Packit 549fdc
        {
Packit 549fdc
            num_of_untestable_functions++
Packit 549fdc
        }
Packit 549fdc
        else if (mcyclo[fcn] > cyclo_moderate_max)
Packit 549fdc
        {
Packit 549fdc
            num_of_high_functions++
Packit 549fdc
        }
Packit 549fdc
        else if (mcyclo[fcn] > cyclo_simple_max)
Packit 549fdc
        {
Packit 549fdc
            num_of_moderate_functions++
Packit 549fdc
        }
Packit 549fdc
        else
Packit 549fdc
        {
Packit 549fdc
            num_of_simple_functions++
Packit 549fdc
        }
Packit 549fdc
    }
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_fnc_table_complete (caption)
Packit 549fdc
{
Packit 549fdc
    html_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_fnc_table_abbrev (caption)
Packit 549fdc
{
Packit 549fdc
    html_fnc_table(caption, 1, 1, 0, 0, 1, 0, 0)
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
Packit 549fdc
function html_fnc_table (caption,
Packit 549fdc
                         fname_p,
Packit 549fdc
                         mcyclo_p,
Packit 549fdc
                         cyclo_p,
Packit 549fdc
                         num_statements_p,
Packit 549fdc
                         num_lines_p,
Packit 549fdc
                         first_line_p,
Packit 549fdc
                         file_p)
Packit 549fdc
{
Packit 549fdc
    print ""
Packit 549fdc
    if (caption != "")
Packit 549fdc
    {
Packit 549fdc
        print "<caption class=\"function_table_caption\">" caption "</caption>"
Packit 549fdc
    }
Packit 549fdc
    html_fnc_header(fname_p,
Packit 549fdc
                    mcyclo_p,
Packit 549fdc
                    cyclo_p,
Packit 549fdc
                    num_statements_p,
Packit 549fdc
                    num_lines_p,
Packit 549fdc
                    first_line_p,
Packit 549fdc
                    file_p)
Packit 549fdc
    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
Packit 549fdc
    {
Packit 549fdc
        html_fnc(nfnc,
Packit 549fdc
                 fname_p,
Packit 549fdc
                 mcyclo_p,
Packit 549fdc
                 cyclo_p,
Packit 549fdc
                 num_statements_p,
Packit 549fdc
                 num_lines_p,
Packit 549fdc
                 first_line_p,
Packit 549fdc
                 file_p)
Packit 549fdc
    }
Packit 549fdc
    print ""
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_header ()
Packit 549fdc
{
Packit 549fdc
    print html_doctype
Packit 549fdc
    print "<html>"
Packit 549fdc
    print html_comment
Packit 549fdc
    print "<head>"
Packit 549fdc
    print "<title>" html_title "</title>"
Packit 549fdc
    print ""
Packit 549fdc
    print "<meta name=\"description\" content=\"" html_title "\">"
Packit 549fdc
    print "<meta name=\"keywords\" content=\"" html_title "\">"
Packit 549fdc
    print "<meta name=\"resource-type\" content=\"document\">"
Packit 549fdc
    print "<meta name=\"distribution\" content=\"global\">"
Packit 549fdc
    print "<meta name=\"Generator\" content=\"pmccabe2html\">"
Packit 549fdc
    print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"
Packit 549fdc
    print "<script language=\"javascript\" type=\"text/javascript\">"
Packit 549fdc
    print "function show_hide(idCapa, idButton, fuerzaVisibilidad)\
Packit 549fdc
{\
Packit 549fdc
        var button = document.getElementById(idButton);\
Packit 549fdc
	var capa = document.getElementById(idCapa);\
Packit 549fdc
	if (capa)\
Packit 549fdc
	{\
Packit 549fdc
		if (fuerzaVisibilidad && fuerzaVisibilidad!=\"\") {\
Packit 549fdc
			if (fuerzaVisibilidad==\"visible\") capa.style.display=\"\";\
Packit 549fdc
			else capa.style.display=\"none\";\
Packit 549fdc
		}\
Packit 549fdc
		else\
Packit 549fdc
		{\
Packit 549fdc
			if (capa.style.display == \"none\") {\
Packit 549fdc
				capa.style.display = \"\";\
Packit 549fdc
                                button.innerHTML = \"↑\";\
Packit 549fdc
			} else {\
Packit 549fdc
				capa.style.display = \"none\";\
Packit 549fdc
                                button.innerHTML = \"↓\";     \
Packit 549fdc
			}\
Packit 549fdc
		}\
Packit 549fdc
	}\
Packit 549fdc
}"
Packit 549fdc
    print "</script>"
Packit 549fdc
Packit 549fdc
Packit 549fdc
    if (css_url != "")
Packit 549fdc
    {
Packit 549fdc
        print "<link rel=\"stylesheet\" href=\"" css_url "\" type =\"text/css\" media=\"screen\"/>"
Packit 549fdc
    }
Packit 549fdc
    if (css != "")
Packit 549fdc
    {
Packit 549fdc
        print "<style type =\"text/css\" media=\"screen\">"
Packit 549fdc
	print "
Packit 549fdc
        while ((getline cssline < css) > 0)
Packit 549fdc
        {
Packit 549fdc
	    print cssline
Packit 549fdc
	}
Packit 549fdc
        print "-->"
Packit 549fdc
	print "</style>"
Packit 549fdc
	close(css)
Packit 549fdc
    }
Packit 549fdc
    print "</head>"
Packit 549fdc
    print "
Packit 549fdc
vlink=\"#800080\" alink=\"#FF0000\">"
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_footer ()
Packit 549fdc
{
Packit 549fdc
    print "</body>"
Packit 549fdc
    print "</html>"
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_fnc_header (fname_p,
Packit 549fdc
                          mcyclo_p,
Packit 549fdc
                          cyclo_p,
Packit 549fdc
                          num_statements_p,
Packit 549fdc
                          num_lines_p,
Packit 549fdc
                          first_line_p,
Packit 549fdc
                          file_p)
Packit 549fdc
{
Packit 549fdc
    print ""
Packit 549fdc
    if (fname_p)
Packit 549fdc
    {
Packit 549fdc
        # Function name
Packit 549fdc
        print ""
Packit 549fdc
        print ""
Packit 549fdc
        print ""
Packit 549fdc
Packit 549fdc
        print ""
Packit 549fdc
        print "Function Name"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (mcyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Modified cyclo
Packit 549fdc
        print ""
Packit 549fdc
        print "Modified Cyclo"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (cyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Cyclo
Packit 549fdc
        print ""
Packit 549fdc
        print "Cyclomatic"
Packit 549fdc
        print "
"
Packit 549fdc
        print "Complexity"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (num_statements_p)
Packit 549fdc
    {
Packit 549fdc
        print ""
Packit 549fdc
        print "Number of"
Packit 549fdc
        print "
"
Packit 549fdc
        print "Statements"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (num_lines_p)
Packit 549fdc
    {
Packit 549fdc
        print ""
Packit 549fdc
        print "Number of"
Packit 549fdc
        print "
"
Packit 549fdc
        print "Lines"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (first_line_p)
Packit 549fdc
    {
Packit 549fdc
        print ""
Packit 549fdc
        print "First Line"
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (file_p)
Packit 549fdc
    {
Packit 549fdc
        print ""
Packit 549fdc
        print "Source File"
Packit 549fdc
        print ""
Packit 549fdc
Packit 549fdc
    }
Packit 549fdc
    print ""
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_fnc (nfun,
Packit 549fdc
                   fname_p,
Packit 549fdc
                   mcyclo_p,
Packit 549fdc
                   cyclo_p,
Packit 549fdc
                   num_statements_p,
Packit 549fdc
                   num_lines_p,
Packit 549fdc
                   first_line_p,
Packit 549fdc
                   file_p)
Packit 549fdc
{
Packit 549fdc
    fname = fnames[nfun]
Packit 549fdc
Packit 549fdc
    # Function name
Packit 549fdc
    trclass = "function_entry_simple"
Packit 549fdc
    if (mcyclo[nfun] > cyclo_high_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="function_entry_untestable"
Packit 549fdc
    }
Packit 549fdc
    else if (mcyclo[nfun] > cyclo_moderate_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="function_entry_high"
Packit 549fdc
    }
Packit 549fdc
    else if (mcyclo[nfun] > cyclo_simple_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="function_entry_moderate"
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    print ""
Packit 549fdc
    if (fname_p)
Packit 549fdc
    {
Packit 549fdc
        print ""
Packit 549fdc
        if (file_p && mcyclo[nfun] > cyclo_simple_max)
Packit 549fdc
        {
Packit 549fdc
            print "\
Packit 549fdc
"
Packit 549fdc
        }
Packit 549fdc
        else
Packit 549fdc
        {
Packit 549fdc
            print " "
Packit 549fdc
        }
Packit 549fdc
        print ""
Packit 549fdc
Packit 549fdc
        print ""
Packit 549fdc
        print fname
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (mcyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Modified cyclo
Packit 549fdc
        print ""
Packit 549fdc
        print mcyclo[nfun]
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (cyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Cyclo
Packit 549fdc
        print ""
Packit 549fdc
        print cyclo[nfun]
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (num_statements_p)
Packit 549fdc
    {
Packit 549fdc
        # Number of statements
Packit 549fdc
        print ""
Packit 549fdc
        print num_statements[nfun]
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (num_lines_p)
Packit 549fdc
    {
Packit 549fdc
        # Number of lines
Packit 549fdc
        print ""
Packit 549fdc
        print num_lines[nfun]
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (first_line_p)
Packit 549fdc
    {
Packit 549fdc
        # First line
Packit 549fdc
        print ""
Packit 549fdc
        print first_line[nfun]
Packit 549fdc
        print ""
Packit 549fdc
    }
Packit 549fdc
    if (file_p)
Packit 549fdc
    {
Packit 549fdc
        href = ""
Packit 549fdc
        if (source_file_link_tmpl != "")
Packit 549fdc
        {
Packit 549fdc
            # Get href target
Packit 549fdc
            href = source_file_link_tmpl
Packit 549fdc
            sub(/%FILENAME%/, file[nfun], href)
Packit 549fdc
        }
Packit 549fdc
Packit 549fdc
        # Source file
Packit 549fdc
        print ""
Packit 549fdc
        if (href != "")
Packit 549fdc
        {
Packit 549fdc
            print "" file[nfun] ""
Packit 549fdc
        }
Packit 549fdc
        else
Packit 549fdc
        {
Packit 549fdc
            print file[nfun]
Packit 549fdc
        }
Packit 549fdc
Packit 549fdc
        print ""
Packit 549fdc
Packit 549fdc
Packit 549fdc
        print ""
Packit 549fdc
Packit 549fdc
        if (mcyclo[nfun] > cyclo_simple_max)
Packit 549fdc
        {
Packit 549fdc
            print ""
Packit 549fdc
Packit 549fdc
            num_columns = 1;
Packit 549fdc
            if (fname_p) { num_columns++ }
Packit 549fdc
            if (mcyclo_p) { num_columns++ }
Packit 549fdc
            if (cyclo_p) { num_columns++ }
Packit 549fdc
            if (num_statements_p) { num_columns++ }
Packit 549fdc
            if (num_lines_p) { num_columns++ }
Packit 549fdc
            if (first_line_p) { num_columns++ }
Packit 549fdc
            if (file_p) { num_columns++ }
Packit 549fdc
Packit 549fdc
            print ""
Packit 549fdc
            print "
"
Packit 549fdc
            print "
"
Packit 549fdc
Packit 549fdc
            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
Packit 549fdc
            {
Packit 549fdc
                gsub(/&/, "\\&", codeline)	# Must come first.
Packit 549fdc
                gsub(/</, "\\<", codeline)
Packit 549fdc
                gsub(/>/, "\\>", codeline)
Packit 549fdc
Packit 549fdc
                print codeline
Packit 549fdc
            }
Packit 549fdc
            close(fname nfun "_fn.txt")
Packit 549fdc
            system("rm " "'" fname "'" nfun "_fn.txt")
Packit 549fdc
            print ""
Packit 549fdc
            print ""
Packit 549fdc
            print ""
Packit 549fdc
            print ""
Packit 549fdc
        }
Packit 549fdc
Packit 549fdc
    }
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_global_stats ()
Packit 549fdc
{
Packit 549fdc
    print "
Summary
"
Packit 549fdc
Packit 549fdc
    print ""
Packit 549fdc
    # Total number of functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Total number of functions"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print num_of_functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Number of simple functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Number of low risk functions"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print num_of_simple_functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Number of moderate functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Number of moderate risk functions"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print num_of_moderate_functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Number of high functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Number of high risk functions"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print num_of_high_functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Number of untestable functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Number of untestable functions"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print num_of_untestable_functions
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "
"
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function html_function_cyclo ()
Packit 549fdc
{
Packit 549fdc
    print "
Details for all functions
"
Packit 549fdc
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print " "
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Cyclomatic Complexity"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Risk Evaluation"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Simple
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print " "
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "0 - " cyclo_simple_max
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Simple module, without much risk"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Moderate
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print " "
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print cyclo_simple_max + 1 " - " cyclo_moderate_max
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "More complex module, moderate risk"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # High
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print " "
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print cyclo_moderate_max + 1 " - " cyclo_high_max
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Complex module, high risk"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    # Untestable
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print " "
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "greater than " cyclo_high_max
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "Untestable module, very high risk"
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    print "
"
Packit 549fdc
    html_fnc_table_complete("")
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_global_stats ()
Packit 549fdc
{
Packit 549fdc
    print "{| class=\"cyclo_summary_table\""
Packit 549fdc
    # Total number of functions
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_summary_header_entry\" | Total number of functions"
Packit 549fdc
    print "| class=\"cyclo_summary_number_entry\" |" num_of_functions
Packit 549fdc
    # Number of simple functions
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions"
Packit 549fdc
    print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions
Packit 549fdc
    # Number of moderate functions
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions"
Packit 549fdc
    print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions
Packit 549fdc
    # Number of high functions
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions"
Packit 549fdc
    print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions
Packit 549fdc
    # Number of untestable functions
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions"
Packit 549fdc
    print "| class=\"cyclo_summary_number_entry\" |" num_of_untestable_functions
Packit 549fdc
    print "|}"
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_function_cyclo ()
Packit 549fdc
{
Packit 549fdc
    print "==Details for all functions=="
Packit 549fdc
Packit 549fdc
    print "Used ranges:"
Packit 549fdc
Packit 549fdc
    print "{| class =\"cyclo_ranges_table\""
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_ranges_header_entry\" | "
Packit 549fdc
    print "| class=\"cyclo_ranges_header_entry\" | Cyclomatic Complexity"
Packit 549fdc
    print "| class=\"cyclo_ranges_header_entry\" | Risk Evaluation"
Packit 549fdc
    # Simple
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_ranges_entry_simple\" | "
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | 0 - " cyclo_simple_max
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | Simple module, without much risk"
Packit 549fdc
    # Moderate
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_ranges_entry_moderate\" | "
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" |" cyclo_simple_max + 1 " - " cyclo_moderate_max
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | More complex module, moderate risk"
Packit 549fdc
    # High
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_ranges_entry_high\" | "
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" |" cyclo_moderate_max + 1 " - " cyclo_high_max
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | Complex module, high risk"
Packit 549fdc
    # Untestable
Packit 549fdc
    print "|-"
Packit 549fdc
    print "| class=\"cyclo_ranges_entry_untestable\" | "
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | greater than " cyclo_high_max
Packit 549fdc
    print "| class=\"cyclo_ranges_entry\" | Untestable module, very high risk"
Packit 549fdc
    print "|}"
Packit 549fdc
Packit 549fdc
    print ""
Packit 549fdc
    print ""
Packit 549fdc
    wiki_fnc_table_complete("")
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_fnc_table_complete (caption)
Packit 549fdc
{
Packit 549fdc
    wiki_fnc_table(caption, 1, 1, 0, 1, 1, 0, 1)
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_fnc_table_abbrev (caption)
Packit 549fdc
{
Packit 549fdc
    wiki_fnc_table(caption, 1, 0, 0, 0, 0, 0, 0)
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_fnc_table (caption,
Packit 549fdc
                         fname_p,
Packit 549fdc
                         mcyclo_p,
Packit 549fdc
                         cyclo_p,
Packit 549fdc
                         num_statements_p,
Packit 549fdc
                         num_lines_p,
Packit 549fdc
                         first_line_p,
Packit 549fdc
                         file_p)
Packit 549fdc
{
Packit 549fdc
    print "{| width=\"90%\" class=\"cyclo_function_table\" cellpadding=\"0\" cellspacing=\"0\">"
Packit 549fdc
    if (caption != "")
Packit 549fdc
    {
Packit 549fdc
        print "|+" caption
Packit 549fdc
    }
Packit 549fdc
    wiki_fnc_header(fname_p,
Packit 549fdc
                    mcyclo_p,
Packit 549fdc
                    cyclo_p,
Packit 549fdc
                    num_statements_p,
Packit 549fdc
                    num_lines_p,
Packit 549fdc
                    first_line_p,
Packit 549fdc
                    file_p)
Packit 549fdc
    for (nfnc = 1; nfnc <= nfuncs; nfnc++)
Packit 549fdc
    {
Packit 549fdc
        wiki_fnc(nfnc,
Packit 549fdc
                 fname_p,
Packit 549fdc
                 mcyclo_p,
Packit 549fdc
                 cyclo_p,
Packit 549fdc
                 num_statements_p,
Packit 549fdc
                 num_lines_p,
Packit 549fdc
                 first_line_p,
Packit 549fdc
                 file_p)
Packit 549fdc
    }
Packit 549fdc
    print "|}"
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_fnc_header (fname_p,
Packit 549fdc
                          mcyclo_p,
Packit 549fdc
                          cyclo_p,
Packit 549fdc
                          num_statements_p,
Packit 549fdc
                          num_lines_p,
Packit 549fdc
                          first_line_p,
Packit 549fdc
                          file_p)
Packit 549fdc
{
Packit 549fdc
    if (fname_p)
Packit 549fdc
    {
Packit 549fdc
        # Function name
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Function Name"
Packit 549fdc
    }
Packit 549fdc
    if (mcyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Modified cyclo
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Modified Cyclo"
Packit 549fdc
    }
Packit 549fdc
    if (cyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Cyclo
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Cyclomatic Complexity"
Packit 549fdc
    }
Packit 549fdc
    if (num_statements_p)
Packit 549fdc
    {
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Number of Statements"
Packit 549fdc
    }
Packit 549fdc
    if (num_lines_p)
Packit 549fdc
    {
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Number of Lines"
Packit 549fdc
    }
Packit 549fdc
    if (first_line_p)
Packit 549fdc
    {
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | First Line"
Packit 549fdc
    }
Packit 549fdc
    if (file_p)
Packit 549fdc
    {
Packit 549fdc
        print "! class=\"cyclo_function_table_header_entry\" | Source File"
Packit 549fdc
    }
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
function wiki_fnc (nfnc,
Packit 549fdc
                   fname_p,
Packit 549fdc
                   mcyclo_p,
Packit 549fdc
                   cyclo_p,
Packit 549fdc
                   num_statements_p,
Packit 549fdc
                   num_lines_p,
Packit 549fdc
                   first_line_p,
Packit 549fdc
                   file_p)
Packit 549fdc
{
Packit 549fdc
   fname = fnames[nfnc]
Packit 549fdc
Packit 549fdc
    # Function name
Packit 549fdc
    trclass = "cyclo_function_entry_simple"
Packit 549fdc
    if (mcyclo[nfnc] > cyclo_high_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="cyclo_function_entry_untestable"
Packit 549fdc
    }
Packit 549fdc
    else if (mcyclo[nfnc] > cyclo_moderate_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="cyclo_function_entry_high"
Packit 549fdc
    }
Packit 549fdc
    else if (mcyclo[nfnc] > cyclo_simple_max)
Packit 549fdc
    {
Packit 549fdc
        trclass="cyclo_function_entry_moderate"
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    print "|- class=\"" trclass "\""
Packit 549fdc
    if (fname_p)
Packit 549fdc
    {
Packit 549fdc
        print "| class=\"cyclo_function_entry_name\" |" fname
Packit 549fdc
    }
Packit 549fdc
    if (mcyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Modified cyclo
Packit 549fdc
        print "| class=\"cyclo_function_entry_cyclo\" |" mcyclo[nfnc]
Packit 549fdc
    }
Packit 549fdc
    if (cyclo_p)
Packit 549fdc
    {
Packit 549fdc
        # Cyclo
Packit 549fdc
        print "| class=\"cyclo_function_entry_cyclo\" |" cyclo[nfnc]
Packit 549fdc
    }
Packit 549fdc
    if (num_statements_p)
Packit 549fdc
    {
Packit 549fdc
        # Number of statements
Packit 549fdc
        print "| class=\"cyclo_function_entry_number\" |" num_statements[nfnc]
Packit 549fdc
    }
Packit 549fdc
    if (num_lines_p)
Packit 549fdc
    {
Packit 549fdc
        # Number of lines
Packit 549fdc
        print "| class=\"cyclo_function_entry_number\" |" num_lines[nfnc]
Packit 549fdc
    }
Packit 549fdc
    if (first_line_p)
Packit 549fdc
    {
Packit 549fdc
        # First line
Packit 549fdc
        print "| class=\"cyclo_function_entry_number\" |" first_line[nfnc]
Packit 549fdc
    }
Packit 549fdc
    if (file_p)
Packit 549fdc
    {
Packit 549fdc
        href = ""
Packit 549fdc
        if (source_file_link_tmpl != "")
Packit 549fdc
        {
Packit 549fdc
            # Get href target
Packit 549fdc
            href = source_file_link_tmpl
Packit 549fdc
            sub(/%FILENAME%/, file[nfnc], href)
Packit 549fdc
        }
Packit 549fdc
Packit 549fdc
        # Source file
Packit 549fdc
        print "| class=\"cyclo_function_entry_filename\" |" \
Packit 549fdc
            ((href != "") ? "[" href " " file[nfnc] "]" : "[" file[nfnc] "]")
Packit 549fdc
    }
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
# Scan data from a line
Packit 549fdc
{
Packit 549fdc
    function_name = $7
Packit 549fdc
Packit 549fdc
    nfuncs++;
Packit 549fdc
    fnames[nfuncs] = function_name
Packit 549fdc
    mcyclo[nfuncs] = $1
Packit 549fdc
    cyclo[nfuncs] = $2
Packit 549fdc
    num_statements[nfuncs] = $3
Packit 549fdc
    first_line[nfuncs] = $4
Packit 549fdc
    num_lines[nfuncs] = $5
Packit 549fdc
Packit 549fdc
    # Build the filename from the file_spec ($6)
Packit 549fdc
    begin_util_path = index($6, cut_dir)
Packit 549fdc
    tmpfilename = substr($6, begin_util_path + length(cut_dir))
Packit 549fdc
    sub(/\([0-9]+\):/, "", tmpfilename)
Packit 549fdc
    file[nfuncs] = tmpfilename
Packit 549fdc
Packit 549fdc
    if (mcyclo[nfuncs] > cyclo_simple_max)
Packit 549fdc
    {
Packit 549fdc
        # Extract function contents to a fn_txt file
Packit 549fdc
        filepath = $6
Packit 549fdc
Packit 549fdc
        sub(/\([0-9]+\):/, "", filepath)
Packit 549fdc
        num_line = 0
Packit 549fdc
Packit 549fdc
        while ((getline codeline < filepath) > 0)
Packit 549fdc
        {
Packit 549fdc
            num_line++;
Packit 549fdc
            if ((num_line >= first_line[nfuncs]) &&
Packit 549fdc
                (num_line < first_line[nfuncs] + num_lines[nfuncs]))
Packit 549fdc
            {
Packit 549fdc
                print codeline > (function_name nfuncs "_fn.txt")
Packit 549fdc
            }
Packit 549fdc
        }
Packit 549fdc
        close (function_name nfuncs "_fn.txt")
Packit 549fdc
        close(filepath)
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    # Initial values for statistics variables
Packit 549fdc
    num_of_functions = 0
Packit 549fdc
    max_mcyclo = 0
Packit 549fdc
    max_function_length = 0
Packit 549fdc
    num_of_simple_functions = 0
Packit 549fdc
    num_of_moderate_functions = 0
Packit 549fdc
    num_of_high_functions = 0
Packit 549fdc
    num_of_untestable_functions = 0
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
# Epilogue
Packit 549fdc
END {
Packit 549fdc
    # Print header (only for html)
Packit 549fdc
    if (output_lang == "html")
Packit 549fdc
    {
Packit 549fdc
        html_header()
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    # Print prolog
Packit 549fdc
    if ((output_lang == "html") &&
Packit 549fdc
        (html_prolog != ""))
Packit 549fdc
    {
Packit 549fdc
        print html_prolog
Packit 549fdc
    }
Packit 549fdc
    if ((output_lang == "wiki") &&
Packit 549fdc
        (wiki_prolog != ""))
Packit 549fdc
    {
Packit 549fdc
        print wiki_prolog
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    if (output_lang == "html")
Packit 549fdc
    {
Packit 549fdc
        print "
" package_name " Cyclomatic Complexity Report
"
Packit 549fdc
        print "

Report generated at: " chronos_time "

"
Packit 549fdc
    }
Packit 549fdc
    if (output_lang == "wiki")
Packit 549fdc
    {
Packit 549fdc
        print "==" package_name " Cyclomatic Complexity Report=="
Packit 549fdc
        print "Report generated at: '''" chronos_time "'''"
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    if (section_global_stats_p)
Packit 549fdc
    {
Packit 549fdc
        build_stats()
Packit 549fdc
Packit 549fdc
        if (output_lang == "html")
Packit 549fdc
        {
Packit 549fdc
            html_global_stats()
Packit 549fdc
        }
Packit 549fdc
        if (output_lang == "wiki")
Packit 549fdc
        {
Packit 549fdc
            wiki_global_stats()
Packit 549fdc
        }
Packit 549fdc
    }
Packit 549fdc
    if (section_function_cyclo_p)
Packit 549fdc
    {
Packit 549fdc
        if (output_lang == "html")
Packit 549fdc
        {
Packit 549fdc
            html_function_cyclo()
Packit 549fdc
        }
Packit 549fdc
        if (output_lang == "wiki")
Packit 549fdc
        {
Packit 549fdc
            wiki_function_cyclo()
Packit 549fdc
        }
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    # Print epilog
Packit 549fdc
    if ((output_lang == "html") &&
Packit 549fdc
        (html_epilog != ""))
Packit 549fdc
    {
Packit 549fdc
        print html_epilog
Packit 549fdc
    }
Packit 549fdc
    if ((output_lang == "wiki") &&
Packit 549fdc
        (wiki_epilog != ""))
Packit 549fdc
    {
Packit 549fdc
        print wiki_epilog
Packit 549fdc
    }
Packit 549fdc
Packit 549fdc
    # Print footer (html only)
Packit 549fdc
    if (output_lang == "html")
Packit 549fdc
    {
Packit 549fdc
        html_footer()
Packit 549fdc
    }
Packit 549fdc
}
Packit 549fdc
Packit 549fdc
# End of pmccabe2html