ViewVC Help
View File | Revision Log | Show Annotations | Root Listing
root/cvsroot/COMP/SCRAM/doc/doxygen/DoxyFilt.pl
Revision: 1.1
Committed: Fri Aug 5 16:39:16 2005 UTC (19 years, 9 months ago) by sashby
Content type: application/x-perl
Branch: MAIN
CVS Tags: V1_1_7, V1_1_6, V1_1_5, V1_1_4, V1_1_3, V1_1_2, V1_1_0_reltag8, V1_1_0_reltag7, V1_1_0_reltag6, V1_1_1, V1_1_0_reltag5, V1_1_0_reltag4, V1_1_0_reltag3, V1_1_0_reltag2, V1_1_0_reltag1, V1_1_0_reltag, V1_0_3-p4, V1_1_0_cand3, V1_1_0_cand2, V1_1_0_cand1, HEAD_SM_071214, forV1_1_0, v103_xml_071106, V1_0_3-p3, V1_0_3-p2, V1_1_0, v110p1, V110p6, V110p5, V110p4, V110p3, V110p2, V110p1, V1_0_4p1, V1_0_3-p1, V1_0_3, V1_0_2, V1_0_2_p1
Branch point for: HEAD_BRANCH_SM_071214, v200branch, v103_with_xml, v103_branch
Log Message:
First attempt at doxygenising SCRAM documentation.

File Contents

# Content
1 #!/bin/perl
2
3 =head1 NAME
4
5 C<DoxyFilt.pl> Script for preparing non-C/C++ input documents for Doxygen.
6
7 =head1 SYNOPSIS
8
9 usage: $0 <flag>* <path>
10 Process file specified by <path> (or via --path flag),
11 generating faux C++ and Doxygen comments to standard output
12 --filter <filter>*
13 set filter to be applied to <path>
14 --flag <flag>=<value>
15 set a specified flag for all filters
16 --flag <<filter>::flag>=<value>
17 set a flag for the specified filter filter
18
19 --noinfo deactivate informational logging ([I])
20 --trace activate trace logging ([T] and [H])
21
22 In Doxygen configuration file (using Perl as source filter example):
23
24 INPUT_FILTER = DoxyPerl
25
26 or:
27
28 FILTER_PATTERNS = *.p?=DoxyPerl
29
30 The C<DoxyPerl> entry will be a batch file or shell script that in turn
31 invokes DoxyFilt.pl. For example (DOS/Windows batch file):
32
33 perl DoxyFilt.pl --filter=Perl --filter=POD %1
34
35 or (Linux shell script):
36
37 #!/bin/sh
38 perl DoxyFilt.pl --filter=Perl --filter=POD $1
39
40 Any command line parameters necessary to DoxyFilt.pl will be invoked in
41 the batch file. The batch/shell scripts (one per language) should be
42 either local to the execution directory or on the C<PATH>. If the
43 DoxyFilt.pl script is not on the C<PATH> the batch/shell scripts
44 will need to be modified appropriately.
45
46 =head1 ABSTRACT
47
48 Provides an input filter for the Doxygen documentation generation tool
49 to convert Perl/POD (and/or other source formats) into C/C++ with
50 Doxygen-enabled comments.
51
52 =head1 DESCRIPTION
53
54 The Doxygen documentation processor collects information from source code
55 files in C and C++ and generates nicely formatted source code documentation.
56 This can be an important component of any fully documented software project.
57
58 Unfortunately, Doxygen doesn't know anything about any other languages.
59 It does, however, have an input filter setting that allows source files in
60 other languages to be converted to something that Doxygen I<can> recognize.
61 This means parsing the source files and converting them into a combination
62 of C/C++ and Doxygen-enabled comments.
63
64 =head1 Command-Line Arguments
65
66 The following flags can be specified to affect the
67 operation of <tt>DoxyFilt.pl</tt>:
68
69 =over
70
71 =item C<--flag I<[filter::]name>=I<value>>
72
73 Specify a named flag.
74 Flags can be specified as global or per document filter.
75 More specific flags (per document filter) override global flags
76 for the specified document filter and are invisible to other
77 document filters.
78
79 =item C<--noinfo>
80
81 Deactivates informational messages such as those that specify what file is
82 being processed.
83 These are the C<[I]> messages.
84
85 =item C<--trace>
86
87 Activates tracing and 'hacking' messages.
88 The former are lower-level debugging messages.
89 The latter are specific conditions that have been bypassed
90 in possibly strange ways (if any).
91 These are the C<[T]> and C<[H]> messages, respectively.
92
93 =item C<--filter>
94
95 Specify a filter filter to be applied to the source file.
96 There may be one or more such filters. They will be applied
97 in the specified order. After all parsing is done, a massage
98 step will be invoked to merge disparate results in cases where
99 there are multiple filters.
100
101 =back
102
103 =cut
104
105 #=| \ingroup scripts
106
107 ###########################################################################
108 ###########################################################################
109
110 use 5.005; # just to pick something, but not really tested
111 use strict;
112 use warnings;
113 use UNIVERSAL qw(isa);
114
115 use Getopt::Long;
116 use Pod::Usage;
117
118 use Doxygen::Context;
119
120 # The last version from which this was taken was 0.23.
121 # The current directory is a new branch of changes.
122 # This could almost be though of as moving to V4,
123 # but realistically it would be V3.5 or something,
124 # as we keep the same general architecture but try
125 # to make it easier to use by taking advantage of
126 # new doxygen 1.4.3 features and playing with the
127 # instantiation and startup flags.
128
129 our $VERSION = '0.83';
130
131 ###########################################################################
132 # Command-line arguments:
133
134 my %flags = (
135 info => 1,
136 filter => [ ],
137 flag => [ ],
138 trace => 0
139 );
140 my $help = undef;
141
142 pod2usage(2)
143 unless GetOptions(
144 'flag=s' => $flags{flag},
145 'info!' => \$flags{info},
146 'trace' => \$flags{trace},
147 'filter=s' => $flags{filter},
148 'help' => \$help
149 );
150
151 pod2usage('No file filter specified')
152 unless @{$flags{filter}};
153
154 pod2usage(1)
155 if $help;
156
157 my $path = shift @ARGV;
158
159 pod2usage('No path specified')
160 unless $path;
161
162 pod2usage('Input file does not exist')
163 unless -f $path;
164
165 pod2usage('Input file not readable')
166 unless -r $path;
167
168 ###########################################################################
169 ###########################################################################
170 #
171 # Main Program:
172 #
173
174 my %fixed = ( );
175
176 for (@{$flags{flag}}) {
177 my ($flag, $value);
178
179 if (/^\s*(.*?)\s*=\s*(.*?)\s*$/) {
180 ($flag, $value) = ($1, $2);
181 } else {
182 ($flag, $value) = ($_, 1);
183 }
184
185 if (isa($fixed{$flag}, 'ARRAY')) {
186 push @{$fixed{$flag}}, $value;
187 } elsif ($fixed{$flag}) {
188 $fixed{$flag} = [ $fixed{$flag}, $value ];
189 } else {
190 $fixed{$flag} = $value;
191 }
192 }
193
194 $flags{flag} = %fixed ? \%fixed : undef;
195
196 if (my $context = new Doxygen::Context(%flags)) {
197 # $context->log('T', 'Process ', $path)->pushLog;
198 $context->parse($path);
199 $context->massage;
200 $context->generate;
201 # $context->log('T', 'Output generated!')->popLog;
202 } else {
203 local $/ = undef; # slurp entire file
204
205 die "Unable to read (slurp) from file:\n $path\n $!\n"
206 unless open FILE, '<', $path;
207
208 print <FILE>;
209 }
210
211 ###########################################################################
212 ###########################################################################
213
214 __END__
215
216 =head1 SEE ALSO
217
218 Doxygen::Filter, http://www.doxygen.org
219
220 =head1 COPYRIGHT
221
222 Copyright (C) 2004 Marc M. Adkins
223
224 This library is free software; you can redistribute it and/or
225 modify it under the same terms as Perl itself.
226
227 This program is distributed in the hope that it will be useful, but
228 without any warranty; without even the implied warranty of
229 merchantability or fitness for a particular purpose.
230
231 =head1 AUTHOR
232
233 Marc M. Adkins L<mailto:Perl@Doorways.org>
234
235 =cut