#!/usr/bin/perl use strict; use warnings; use File::Spec::Functions qw/catdir/; use IO::File; use IO::Dir; our $i = 1; scandir("."); sub scandir { my $dir = shift; my $dh = new IO::Dir($dir); return unless $dh; for($dh->read()) { next if /^\./; next if /^.*~$/; my $path = catdir($dir, $_); if(-d $path) { # print "Dir: $path\n"; scandir($path); next; } scanfile($path) if -f _; } } sub bold { return "\e[1;3m" . shift() . "\e[m"; } sub scanfile { my $fn = shift; my $fh = new IO::File($fn); my $ln = 0; my $lln = 0; my $ctx = 3; my $perl = ($fn =~ /\.p[lm]$/i); for(<$fh>) { chomp; ++$ln; next if /^\s*$/; if(! m|^\s*//\s*([A-Z]+):\s*(.*)\s*$|) { #print "ln:$ln, lln:$lln\n" ; # s/^\s+(.*)\s*$/$1/; # s/^\t{3,}(.*)\s*$/\t$1/; if ($lln && $ln - $lln <= $ctx) { my $line = $_; my $f = new IO::File(); $f->open(">.enscript"); $f->print($line); $f->close(); if($perl) { $line = `enscript --language=ansi --color --highlight=perl -o - .enscript -q`; } else { $line = `enscript --language=ansi --color --highlight=cpp -o - .enscript -q`; } unlink ".enscript"; print "\t" . bold($ln) . ": $line" . "\n" ; } next; } print "\n" if $i > 1; printf "\e[1;3m%2i\e[m. %-25s - \e[1;3m%4i\e[m - \e[1;3m%-5s\e[m: %s\n", $i, $fn, $ln, $1, $2; $lln = $ln; ++$i; } # my $text = join '', <$fh>; # print "File: $fn\n"; # while($text =~ s|^//\s*FIXME:?\s*(.*)$||m) { # print $i . ": " . $1 . "\n"; # $i++; # } }