Commit 0588ba6c authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Sam Ravnborg

kernel-doc: Print preprocessor directives correctly.

Print preprocessor directives (usually "#ifdef CONFIG_SOMETHING" and "#endif")
in structs definitions correctly (-text, -html, sgmldocs, htmldocs, pdfdocs,
mandocs).

Correctly means:
 - on the separate line
 - starting from column 0
 - not glued to the type of the next member
 - not breeding if members are separated by comma
 - not imitating pointers to functions ("#if defined(CONFIG_X)...")
 - not giving bogus warnings because of this imitation
Signed-off-by: default avatarAlexey Dobriyan <adobriyan@mail.ru>
Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 281a1814
...@@ -452,6 +452,10 @@ sub output_struct_html(%) { ...@@ -452,6 +452,10 @@ sub output_struct_html(%) {
print "<h2>".$args{'type'}." ".$args{'struct'}."</h2>\n"; print "<h2>".$args{'type'}." ".$args{'struct'}."</h2>\n";
print "<b>".$args{'type'}." ".$args{'struct'}."</b> {<br>\n"; print "<b>".$args{'type'}." ".$args{'struct'}."</b> {<br>\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
if ($parameter =~ /^#/) {
print "$parameter<br>\n";
next;
}
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -471,6 +475,8 @@ sub output_struct_html(%) { ...@@ -471,6 +475,8 @@ sub output_struct_html(%) {
print "<h3>Members</h3>\n"; print "<h3>Members</h3>\n";
print "<dl>\n"; print "<dl>\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
($parameter =~ /^#/) && next;
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -656,6 +662,11 @@ sub output_struct_sgml(%) { ...@@ -656,6 +662,11 @@ sub output_struct_sgml(%) {
print " <programlisting>\n"; print " <programlisting>\n";
print $args{'type'}." ".$args{'struct'}." {\n"; print $args{'type'}." ".$args{'struct'}." {\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
if ($parameter =~ /^#/) {
print "$parameter\n";
next;
}
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -680,6 +691,8 @@ sub output_struct_sgml(%) { ...@@ -680,6 +691,8 @@ sub output_struct_sgml(%) {
print " <variablelist>\n"; print " <variablelist>\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
($parameter =~ /^#/) && next;
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -995,14 +1008,17 @@ sub output_struct_man(%) { ...@@ -995,14 +1008,17 @@ sub output_struct_man(%) {
print $args{'type'}." ".$args{'struct'}." \\- ".$args{'purpose'}."\n"; print $args{'type'}." ".$args{'struct'}." \\- ".$args{'purpose'}."\n";
print ".SH SYNOPSIS\n"; print ".SH SYNOPSIS\n";
print $args{'type'}." ".$args{'struct'}." {\n"; print $args{'type'}." ".$args{'struct'}." {\n.br\n";
foreach my $parameter (@{$args{'parameterlist'}}) { foreach my $parameter (@{$args{'parameterlist'}}) {
if ($parameter =~ /^#/) {
print ".BI \"$parameter\"\n.br\n";
next;
}
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next; ($args{'parameterdescs'}{$parameter_name} ne $undescribed) || next;
print "\n.br\n";
$type = $args{'parametertypes'}{$parameter}; $type = $args{'parametertypes'}{$parameter};
if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) { if ($type =~ m/([^\(]*\(\*)\s*\)\s*\(([^\)]*)\)/) {
# pointer-to-function # pointer-to-function
...@@ -1019,6 +1035,8 @@ sub output_struct_man(%) { ...@@ -1019,6 +1035,8 @@ sub output_struct_man(%) {
print ".SH Arguments\n"; print ".SH Arguments\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
($parameter =~ /^#/) && next;
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -1159,6 +1177,11 @@ sub output_struct_text(%) { ...@@ -1159,6 +1177,11 @@ sub output_struct_text(%) {
print $args{'type'}." ".$args{'struct'}.":\n\n"; print $args{'type'}." ".$args{'struct'}.":\n\n";
print $args{'type'}." ".$args{'struct'}." {\n"; print $args{'type'}." ".$args{'struct'}." {\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
if ($parameter =~ /^#/) {
print "$parameter\n";
next;
}
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -1177,6 +1200,8 @@ sub output_struct_text(%) { ...@@ -1177,6 +1200,8 @@ sub output_struct_text(%) {
print "Members:\n\n"; print "Members:\n\n";
foreach $parameter (@{$args{'parameterlist'}}) { foreach $parameter (@{$args{'parameterlist'}}) {
($parameter =~ /^#/) && next;
my $parameter_name = $parameter; my $parameter_name = $parameter;
$parameter_name =~ s/\[.*//; $parameter_name =~ s/\[.*//;
...@@ -1353,7 +1378,12 @@ sub create_parameterlist($$$) { ...@@ -1353,7 +1378,12 @@ sub create_parameterlist($$$) {
$arg =~ s/\s*$//; $arg =~ s/\s*$//;
$arg =~ s/\s+/ /; $arg =~ s/\s+/ /;
if ($arg =~ m/\(/) { if ($arg =~ /^#/) {
# Treat preprocessor directive as a typeless variable just to fill
# corresponding data structures "correctly". Catch it later in
# output_* subs.
push_parameter($arg, "", $file);
} elsif ($arg =~ m/\(/) {
# pointer-to-function # pointer-to-function
$arg =~ tr/#/,/; $arg =~ tr/#/,/;
$arg =~ m/[^\(]+\(\*([^\)]+)\)/; $arg =~ m/[^\(]+\(\*([^\)]+)\)/;
...@@ -1571,6 +1601,10 @@ sub process_state3_type($$) { ...@@ -1571,6 +1601,10 @@ sub process_state3_type($$) {
$x =~ s@[\r\n]+@ @gos; # strip newlines/cr's. $x =~ s@[\r\n]+@ @gos; # strip newlines/cr's.
$x =~ s@^\s+@@gos; # strip leading spaces $x =~ s@^\s+@@gos; # strip leading spaces
$x =~ s@\s+$@@gos; # strip trailing spaces $x =~ s@\s+$@@gos; # strip trailing spaces
if ($x =~ /^#/) {
# To distinguish preprocessor directive from regular declaration later.
$x .= ";";
}
while (1) { while (1) {
if ( $x =~ /([^{};]*)([{};])(.*)/ ) { if ( $x =~ /([^{};]*)([{};])(.*)/ ) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment