| #! /usr/bin/env perl |
| |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| |
| # usage: skeleton [--header=PATH ...] API ... |
| # Using declarations from the given headers, generate a skeleton man page |
| # for the named APIs. |
| |
| use 5.012; |
| use warnings; |
| use autodie; |
| use Getopt::Long; |
| |
| sub slurp |
| { |
| my $path = shift; |
| open(my $fh, "<", $path); |
| return do { local $/; <$fh> } |
| } |
| |
| sub datestamp |
| { |
| use POSIX qw/strftime/; |
| |
| return strftime "%B %d, %Y", localtime; |
| } |
| |
| # Extract the function declarations from an ATS header file. |
| sub parse |
| { |
| my $decls = []; |
| |
| foreach my $header (@_) { |
| my $defs = slurp($header); |
| |
| while ($defs =~ m/ |
| tsapi\s+ # Start with 'tsapi' |
| ([^;\(]+) # Capture the followinf return value |
| \s+(\w+)\s* # Capture the word before the opening parenthesis |
| \(([^\)]+)\) # Capture the arguments |
| .*\;/xg) { |
| chomp $1; chomp $2; chomp $3; |
| my $d ={ return => $1, name => $2, args => $3 }; |
| $d->{args} =~ s/\n//g; |
| push @$decls, $d; |
| } |
| } |
| |
| return $decls; |
| } |
| |
| # Return a mandoc declaration for the given API name. |
| sub define |
| { |
| my $decls = shift; |
| my $name = shift; |
| |
| foreach my $d (@$decls) { |
| if ($d->{name} eq $name) { |
| my @args; |
| my $mdoc; |
| @args = split(/,\s+/, $d->{args}); # split args at comma boundaries |
| @args = map { "\"$_\"" } @args; # quote each arg list element |
| $mdoc = |
| ".Ft \"" . $d->{return} . "\"\n" . |
| ".Fo " . $name . "\n" . |
| ".Fa " . join("\n.Fa ", @args) . "\n" . |
| ".Fc"; |
| $mdoc =~ s/^\s+(.*)\s+$/$1/; |
| return $mdoc; |
| } |
| } |
| } |
| |
| my @headers = (); |
| my $options = GetOptions( |
| "header=s" => \@headers |
| ); |
| |
| my $decls = parse(@headers); |
| #say define($decls, @ARGV); |
| |
| print <<EOF; |
| .\\" Licensed to the Apache Software Foundation (ASF) under one .\\" |
| .\\" or more contributor license agreements. See the NOTICE file .\\" |
| .\\" distributed with this work for additional information .\\" |
| .\\" regarding copyright ownership. The ASF licenses this file .\\" |
| .\\" to you under the Apache License, Version 2.0 (the .\\" |
| .\\" "License"); you may not use this file except in compliance .\\" |
| .\\" with the License. You may obtain a copy of the License at .\\" |
| .\\" .\\" |
| .\\" http://www.apache.org/licenses/LICENSE-2.0 .\\" |
| .\\" .\\" |
| .\\" Unless required by applicable law or agreed to in writing, software .\\" |
| .\\" distributed under the License is distributed on an "AS IS" BASIS, .\\" |
| .\\" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. .\\" |
| .\\" See the License for the specific language governing permissions and .\\" |
| .Dd @{[ datestamp() ]} |
| .Dt @{[ $ARGV[0] ]} 3ts TSAPI |
| .Sh NAME |
| .Nm @{[ join(",\n.Nm ", @ARGV) ]} |
| .Nd XXX Api short description |
| .Sh LIBRARY |
| Apache Traffic Server plugin API |
| .Sh SYNOPSIS |
| .In ts/ts.h |
| EOF |
| |
| print @{[ map { define($decls, $_) . "\n" } @ARGV ]}; |
| |
| print <<EOF; |
| .Sh DESCRIPTION |
| .Sh RETURN VALUES |
| .Sh EXAMPLES |
| .nf |
| #include <ts/ts.h> |
| .fi |
| .Sh SEE ALSO |
| .Xr TSAPI 3ts |
| EOF |
| # vim: set ts=2 sw=2 et : |