#!/usr/bin/perl use warnings; use strict; use String::Comments::Extract; use File::Slurp qw/slurp/; use File::Find; use File::Which; my $root = shift; die unless $root; my $dispatcher = { '^[A-Z]+$' => sub { return if $_[0] =~ m/licen(s|c)e/i; `cat $_[0]` }, '\.1$' => sub { `/usr/bin/man ./$_[0] | col -b` }, 'man.*?\.\d$' => sub { `/usr/bin/man ./$_[0] | col -b` }, '\.txt' => sub { `cat $_[0]` }, #'\.c' => \&handle_c_file, }; find(\&proc_file, $root); sub proc_file { next if $_ =~ m/^\.+$/; my $name = $_; my $path = $File::Find::name; return if $path =~ m/\.gen/; print STDERR "FILE $path\n"; foreach (keys %$dispatcher) { if ($name =~ m/$_/) { print STDERR " + Adding by RE $_\n"; my $sub = $dispatcher->{$_}; print &$sub($name); } } } sub handle_c_file { my ($file) = @_; my $source = slurp $file; # extract comments my $comments = String::Comments::Extract::C->extract($source); $comments =~ s/\n\s+/\n/g; # extract string literals my $exe = which('conc-c-xstr'); my $strings = `$exe $file`; return join("\n", $comments, $strings); }