#!/usr/bin/env bash
# Written by <amirpli@gmail.com>
#%DESC List function and file verbosity levels

cd ${0%/*}/..

shopt -s globstar
perl -ne \
 'BEGIN { $func_fieldwidth = 30; }
  $filedebug = "";
  if (/(?:verbosity_level|lgdebug)\(\+?(D_SPEC\+\d+)/)
  {
    $line = $.;
    $verbosity = $1;
    while (<>)
    {
      next if /{/;
      $more_info = $_;
      last;
    }
    $more_info =~ s/^\s+//;
    chomp($more_info);
    $out = sprintf "%-10s %-15s %s", $verbosity, "", $more_info;
  }
  elsif (/^#define\s+(D_[A-Z]+)\s+(\S+)\s*(.*)$/)
  {
    $line = $.;
    $out = sprintf "%-10s %-15s %s", $1, $2, $3;
    $filedebug = /for this file/;
  }
  $func = "";
  $func = $1 if /([\w:]+)\(.*[\),]\s*$/;
  if ($. > $line && $out)
  {
    ($file) = $ARGV =~ m|link-grammar/(.*)|;
    if ($func)
    {
      $func = $func ."()";
      $func = "...".substr($func, -($func_fieldwidth-3))
        if $func =~ /::/ && length($func) > $func_fieldwidth;
    }
    $func = "Whole file" if $filedebug;
    printf "%-30s %${func_fieldwidth}s %s\n", $file.":", $func, $out;
    $out = "";
  }
 ' \
**/*.[ch]* | sort -n -k 4
