"SfR Fresh" - the SfR Freeware/Shareware Archive 
Member "wine-docs-1.0/po4a/testsuite/stats.man" of archive wine-docs-1.0.tar.gz:
As a special service "SfR Fresh" has tried to format the requested source page into HTML format using source code syntax highlighting with prefixed line numbers.
Alternatively you can here view or download the uninterpreted source code file.
That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
1 #! /usr/bin/perl -w
2
3 # This script looks all installed man page, and report some stats about them
4 # (usefull only to guide reflexions to po-man implementation)
5
6 use strict;
7
8 use File::Find ();
9
10 # for the convenience of &wanted calls, including -eval statements:
11 #use vars qw/*name *dir *prune/;
12 #*name = *File::Find::name;
13 #*dir = *File::Find::dir;
14 #*prune = *File::Find::prune;
15
16 my %page;
17 $page{'pod'}{'desc'} = "generated by Pod::Man";
18 $page{'help2man'}{'desc'} = "generated by help2man";
19 $page{'docbook-to-man'}{'desc'} = "generated by docbook-to-man";
20 $page{'docbook2man'}{'desc'} = "generated by docbook2man";
21 $page{'latex2man'}{'desc'} = "generated by latex2man";
22 $page{'db2man.xsl'}{'desc'} = "generated by db2man.xsl";
23 $page{'mtex2man'}{'desc'} = "generated by mtex2man(1)";
24 $page{'auto'}{'desc'} = "contains 'THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT.'";
25 $page{'notedit'}{'desc'} = "contains 'DO NOT EDIT' or 'generated', but I dunno by who.";
26 $page{'man'}{'desc'} = "seem to be a source file";
27
28 my %used=(); # used macros
29 my %defined=(); # self defined macros
30
31 foreach my $type (keys %page) {
32 $page{$type}{'defcount'} = 0;
33 }
34
35 sub wanted {
36 my ($dev,$ino,$mode,$nlink,$uid,$gid);
37
38 if ((($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) && -f $_) {
39 my $file = $File::Find::dir."/".$_;
40 return unless $file =~ m|/usr/share/man/man|; # pass translations
41 if ($file =~ /\.gz$/) {
42 open FILE,"zcat $file|" || die "Can't open $file\n";
43 } else {
44 open FILE,"<$file" || die "Can't open $file\n";
45 }
46
47 my $header="";
48 while ($_=<FILE>) {
49 last unless /^.."/;#"
50 # chomp;
51 $header .= " $_";
52 }
53 $header = "\n$header" if (length $header);
54 my $define="";
55 while (<FILE>) {
56 if (m/^\.de (.*)$/) {
57 my $macro=$1;
58 $define .= $macro.",";
59 $defined{$macro} =(defined($defined{$macro}) ? $defined{$macro}+1 : 1);
60 next;
61 } elsif (m/^\.de/) {
62 print "DEF: $_";
63 } elsif (m/^\.([^ ]*)/) {
64 my $macro=$1;
65 chomp($macro);
66 $macro =~ s/\s*$//g;
67 $macro =~ s/^\s*//g;
68 $macro =~ s/.".*$/|"/;
69 next unless (length($macro));
70 # unless ($define =~ m/$macro/) { # ignore self defined macro
71 $used{$macro} = (defined($used{$macro}) ? $used{$macro}+1 : 1);
72 # }
73 }
74 }
75 close FILE;
76 my $type="man";
77 if ($header =~ /Pod::Man/) { $type="pod";
78 } elsif ($header =~ /generated by help2man/) { $type="help2man";
79 } elsif ($header =~ /with docbook-to-man/) { $type="docbook-to-man";
80 } elsif ($header =~ /generated by docbook2man/) { $type="docbook2man";
81 } elsif ($header =~ /created with latex2man/) { $type="latex2man";
82 } elsif ($header =~ /Generated by db2man.xsl/) { $type="db2man.xsl";
83 } elsif ($header =~ /generated automatically by mtex2man/) { $type="mtex2man";
84 } elsif ($header =~ /THIS FILE HAS BEEN AUTOMATICALLY GENERATED. DO NOT EDIT./) {
85 $type="auto";
86 } elsif ($header =~ /DO NOT EDIT/i || $header =~ /generated/i) {
87 $type="notedit";
88 }
89 if (length($define)) {
90 $page{$type}{'define'}{$file} = $define;
91 $page{$type}{'defcount'}++;
92 }
93 push @{$page{$type}{'files'}},$file;
94 push @{$page{$type}{'headers'}},"$file\n$header";
95 }
96 }
97 # Traverse desired filesystems
98 File::Find::find({wanted => \&wanted}, '/usr/share/man');
99
100 my $total=0;
101 foreach my $type (sort keys %page) {
102 $page{$type}{'num'} = scalar @{$page{$type}{'files'}};
103 $total += $page{$type}{'num'};
104 }
105 print "Seen $total pages.\n";
106 foreach my $type (sort {$page{$a}{'num'} <=> $page{$b}{'num'}} keys %page) {
107 print " ".$page{$type}{'num'}." ".$page{$type}{'desc'}.". ".
108 $page{$type}{'defcount'}." seem to define new macro.\n";
109 }
110
111 print "\nHere is a list of the (regular and self defined) macros used:\n";
112 foreach my $macro (sort {$used{$a} <=> $used{$b}} keys %used) {
113 print " $macro (used ".$used{$macro}." times)\n";
114 }
115
116 #print "\nHere is the list of pages seeming to be source page, and defining new macros:\n";
117 #foreach my $page(sort { $page{'man'}{'define'}{$a} cmp $page{'man'}{'define'}{$b}
118 # } keys %{$page{'man'}{'define'}}) {
119 # print $page{'man'}{'define'}{$page}.". in $page\n";
120 #}