Numerous improvements inspired by comments from ru@. Mainly, this
fixes a couple of markup bugs, improves reference sorting, and improves handling of function argument names (function pointer arguments were not properly handled). git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@283 185d5e19-27fe-0310-9dcf-9bff6b9f3609
This commit is contained in:
parent
82614fcbcd
commit
b448e8cf37
|
@ -32,7 +32,7 @@
|
||||||
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
# SUCH DAMAGE.
|
# SUCH DAMAGE.
|
||||||
#
|
#
|
||||||
# $P4: //depot/projects/openpam/misc/gendoc.pl#28 $
|
# $P4: //depot/projects/openpam/misc/gendoc.pl#29 $
|
||||||
#
|
#
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
|
@ -156,7 +156,7 @@ sub parse_source($) {
|
||||||
$args = "\"$args\"";
|
$args = "\"$args\"";
|
||||||
|
|
||||||
%xref = (
|
%xref = (
|
||||||
"pam 3" => 1
|
3 => { 'pam' => 1 },
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($type eq "int") {
|
if ($type eq "int") {
|
||||||
|
@ -164,14 +164,21 @@ sub parse_source($) {
|
||||||
next unless (m/^ \*\s+(!?PAM_[A-Z_]+|=[a-z_]+)\s*$/);
|
next unless (m/^ \*\s+(!?PAM_[A-Z_]+|=[a-z_]+)\s*$/);
|
||||||
push(@errors, $1);
|
push(@errors, $1);
|
||||||
}
|
}
|
||||||
$xref{"pam_strerror 3"} = 1;
|
++$xref{3}->{'pam_strerror'};
|
||||||
}
|
}
|
||||||
|
|
||||||
$argnames = $args;
|
$argnames = $args;
|
||||||
|
# extract names of regular arguments
|
||||||
$argnames =~ s/\"[^\"]+\*?\b(\w+)\"/\"$1\"/g;
|
$argnames =~ s/\"[^\"]+\*?\b(\w+)\"/\"$1\"/g;
|
||||||
|
# extract names of function pointer arguments
|
||||||
|
$argnames =~ s/\"([\w\s\*]+)\(\*?(\w+)\)\([^\)]+\)\"/\"$2\"/g;
|
||||||
|
# escape metacharacters (there shouldn't be any, but...)
|
||||||
$argnames =~ s/([\|\[\]\(\)\.\*\+\?])/\\$1/g;
|
$argnames =~ s/([\|\[\]\(\)\.\*\+\?])/\\$1/g;
|
||||||
|
# separate argument names with |
|
||||||
$argnames =~ s/\" \"/|/g;
|
$argnames =~ s/\" \"/|/g;
|
||||||
|
# and surround with ()
|
||||||
$argnames =~ s/^\"(.*)\"$/($1)/;
|
$argnames =~ s/^\"(.*)\"$/($1)/;
|
||||||
|
# $argnames is now a regexp that matches argument names
|
||||||
$inliteral = $inlist = 0;
|
$inliteral = $inlist = 0;
|
||||||
foreach (split("\n", $source)) {
|
foreach (split("\n", $source)) {
|
||||||
s/\s*$//;
|
s/\s*$//;
|
||||||
|
@ -197,8 +204,9 @@ sub parse_source($) {
|
||||||
}
|
}
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if (m/^>(\w+)(?:\s+(\d))?$/) {
|
if (m/^>(\w+)(\s+\d)?$/) {
|
||||||
++$xref{$2 ? "$1 $2" : "$1 3"};
|
my ($page, $sect) = ($1, $2 ? int($2) : 3);
|
||||||
|
++$xref{$sect}->{$page};
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
if (s/^\s+(=?\w+):\s*/.It $1/) {
|
if (s/^\s+(=?\w+):\s*/.It $1/) {
|
||||||
|
@ -232,12 +240,12 @@ sub parse_source($) {
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
s/\s*=$func\b\s*/\n.Nm\n/gs;
|
s/\s*=$func\b\s*/\n.Nm\n/gs;
|
||||||
s/\s*=$argnames\b\s*/\n.Va $1\n/gs;
|
s/\s*=$argnames\b\s*/\n.Fa $1\n/gs;
|
||||||
s/\s*=(struct \w+(?: \*)?)\b\s*/\n.Vt $1\n/gs;
|
s/\s*=(struct \w+(?: \*)?)\b\s*/\n.Vt $1\n/gs;
|
||||||
s/\s*:([a-z_]+)\b\s*/\n.Va $1\n/gs;
|
s/\s*:([a-z_]+)\b\s*/\n.Va $1\n/gs;
|
||||||
s/\s*;([a-z_]+)\b\s*/\n.Dv $1\n/gs;
|
s/\s*;([a-z_]+)\b\s*/\n.Dv $1\n/gs;
|
||||||
while (s/\s*=([a-z_]+)\b\s*/\n.Xr $1 3\n/s) {
|
while (s/\s*=([a-z_]+)\b\s*/\n.Xr $1 3\n/s) {
|
||||||
++$xref{"$1 3"};
|
++$xref{3}->{$1};
|
||||||
}
|
}
|
||||||
s/\s*\"(?=\w)/\n.Do\n/gs;
|
s/\s*\"(?=\w)/\n.Do\n/gs;
|
||||||
s/\"(?!\w)\s*/\n.Dc\n/gs;
|
s/\"(?!\w)\s*/\n.Dc\n/gs;
|
||||||
|
@ -333,6 +341,23 @@ sub expand_errors($) {
|
||||||
$func->{'errors'} = [ sort(keys(%errors)) ];
|
$func->{'errors'} = [ sort(keys(%errors)) ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub genxref($) {
|
||||||
|
my $xref = shift; # References
|
||||||
|
|
||||||
|
my $mdoc = '';
|
||||||
|
my @refs = ();
|
||||||
|
foreach my $sect (sort(keys(%{$xref}))) {
|
||||||
|
foreach my $page (sort(keys(%{$xref->{$sect}}))) {
|
||||||
|
push(@refs, "$page $sect");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while ($_ = shift(@refs)) {
|
||||||
|
$mdoc .= ".Xr $_" .
|
||||||
|
(@refs ? " ,\n" : "\n");
|
||||||
|
}
|
||||||
|
return $mdoc;
|
||||||
|
}
|
||||||
|
|
||||||
sub gendoc($) {
|
sub gendoc($) {
|
||||||
my $func = shift; # Ref to function hash
|
my $func = shift; # Ref to function hash
|
||||||
|
|
||||||
|
@ -391,11 +416,7 @@ on failure.
|
||||||
";
|
";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$mdoc .= ".Sh SEE ALSO\n";
|
$mdoc .= ".Sh SEE ALSO\n" . genxref($func->{'xref'});
|
||||||
my @xref = sort(keys(%{$func->{'xref'}}));
|
|
||||||
while (@xref) {
|
|
||||||
$mdoc .= ".Xr " . shift(@xref) . (@xref ? " ,\n" : "\n");
|
|
||||||
}
|
|
||||||
$mdoc .= ".Sh STANDARDS\n";
|
$mdoc .= ".Sh STANDARDS\n";
|
||||||
if ($func->{'openpam'}) {
|
if ($func->{'openpam'}) {
|
||||||
$mdoc .= "The
|
$mdoc .= "The
|
||||||
|
@ -415,7 +436,7 @@ The
|
||||||
function and this manual page were developed for the
|
function and this manual page were developed for the
|
||||||
.Fx
|
.Fx
|
||||||
Project by ThinkSec AS and Network Associates Laboratories, the
|
Project by ThinkSec AS and Network Associates Laboratories, the
|
||||||
Security Research Division of Network Associates, Inc. under
|
Security Research Division of Network Associates, Inc.\& under
|
||||||
DARPA/SPAWAR contract N66001-01-C-8035
|
DARPA/SPAWAR contract N66001-01-C-8035
|
||||||
.Pq Dq CBOSS ,
|
.Pq Dq CBOSS ,
|
||||||
as part of the DARPA CHATS research program.
|
as part of the DARPA CHATS research program.
|
||||||
|
@ -495,7 +516,7 @@ sub gensummary($) {
|
||||||
}
|
}
|
||||||
while (<STDIN>) {
|
while (<STDIN>) {
|
||||||
if (m/^\.Xr (\S+)\s*(\d)\s*$/) {
|
if (m/^\.Xr (\S+)\s*(\d)\s*$/) {
|
||||||
$xref{$1} = $2;
|
++$xref{int($2)}->{$1};
|
||||||
}
|
}
|
||||||
print FILE $_;
|
print FILE $_;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +524,7 @@ sub gensummary($) {
|
||||||
if ($page eq 'pam') {
|
if ($page eq 'pam') {
|
||||||
print FILE ".Sh RETURN VALUES
|
print FILE ".Sh RETURN VALUES
|
||||||
The following return codes are defined by
|
The following return codes are defined by
|
||||||
.Aq Pa security/pam_constants.h :
|
.In security/pam_constants.h :
|
||||||
.Bl -tag -width 18n
|
.Bl -tag -width 18n
|
||||||
";
|
";
|
||||||
foreach (sort(keys(%PAMERR))) {
|
foreach (sort(keys(%PAMERR))) {
|
||||||
|
@ -513,18 +534,13 @@ The following return codes are defined by
|
||||||
}
|
}
|
||||||
print FILE ".Sh SEE ALSO
|
print FILE ".Sh SEE ALSO
|
||||||
";
|
";
|
||||||
print FILE ".Xr openpam 3 ,\n"
|
if ($page eq 'pam') {
|
||||||
if ($page eq 'pam');
|
++$xref{3}->{'openpam'};
|
||||||
|
}
|
||||||
foreach $func (keys(%FUNCTIONS)) {
|
foreach $func (keys(%FUNCTIONS)) {
|
||||||
$xref{$func} = 3;
|
++$xref{3}->{$func};
|
||||||
}
|
|
||||||
my @refs = sort(keys(%xref));
|
|
||||||
while ($_ = shift(@refs)) {
|
|
||||||
print FILE ".Xr $_ $xref{$_}";
|
|
||||||
print FILE " ,"
|
|
||||||
if (@refs);
|
|
||||||
print FILE "\n";
|
|
||||||
}
|
}
|
||||||
|
print FILE genxref(\%xref);
|
||||||
print FILE ".Sh STANDARDS
|
print FILE ".Sh STANDARDS
|
||||||
.Rs
|
.Rs
|
||||||
.%T \"X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules\"
|
.%T \"X/Open Single Sign-On Service (XSSO) - Pluggable Authentication Modules\"
|
||||||
|
@ -534,7 +550,7 @@ The following return codes are defined by
|
||||||
The OpenPAM library and this manual page were developed for the
|
The OpenPAM library and this manual page were developed for the
|
||||||
.Fx
|
.Fx
|
||||||
Project by ThinkSec AS and Network Associates Laboratories, the
|
Project by ThinkSec AS and Network Associates Laboratories, the
|
||||||
Security Research Division of Network Associates, Inc. under
|
Security Research Division of Network Associates, Inc.\& under
|
||||||
DARPA/SPAWAR contract N66001-01-C-8035
|
DARPA/SPAWAR contract N66001-01-C-8035
|
||||||
.Pq Dq CBOSS ,
|
.Pq Dq CBOSS ,
|
||||||
as part of the DARPA CHATS research program.
|
as part of the DARPA CHATS research program.
|
||||||
|
|
Loading…
Reference in New Issue