[RFC 04/10] kernel-doc: add support for printing DOC: comments with escaped names

From: Jani Nikula
Date: Tue Jan 26 2016 - 07:11:59 EST


-function supports printing named DOC: sections, but spaces and braces
and quotes etc. are allowed in section titles. This is tricky to handle
in scripts, let alone Makefiles.

Add a new -doc parameter for dumping doc sections (to not convolute
-function more than it already is), with support for "escaped" names
with everything non-alphanumeric repaced with underscores, in addition
to verbatim names.

For example, all these three now do the same thing:

$ scripts/kernel-doc -function "Panel Self Refresh (PSR/SRD)" drivers/gpu/drm/i915/intel_psr.c
$ scripts/kernel-doc -doc "Panel Self Refresh (PSR/SRD)" drivers/gpu/drm/i915/intel_psr.c
$ scripts/kernel-doc -doc "Panel_Self_Refresh__PSR_SRD_" drivers/gpu/drm/i915/intel_psr.c

Use of -function for extracting DOC: sections should probably be
deprecated, but keep it around for backward compatibility.

Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>
---
scripts/kernel-doc | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/scripts/kernel-doc b/scripts/kernel-doc
index ee2ac9137a43..0e410daa92a9 100755
--- a/scripts/kernel-doc
+++ b/scripts/kernel-doc
@@ -71,6 +71,9 @@ Output selection (mutually exclusive):
-nofunction NAME Do NOT output documentation for the given function(s);
only output documentation for the other functions and
DOC: sections. May be specified multiple times.
+ -doc NAME Only output documentation for the given DOC: section
+ titles. NAME is matched both as-is and with all
+ non-alphanumeric characters replaced with underscores.

Output selection modifiers:
-no-doc-sections Do not output DOC: sections.
@@ -457,6 +460,10 @@ while ($ARGV[0] =~ m/^-(.*)/) {
} elsif ($cmd eq "-internal") { # only non-exported symbols
$function_only = 4;
%function_table = ()
+ } elsif ($cmd eq "-doc") { # to only output specific doc sections
+ $function_only = 5;
+ $function = shift @ARGV;
+ $function_table{$function} = 1;
} elsif ($cmd eq "-v") {
$verbose = 1;
} elsif (($cmd eq "-h") || ($cmd eq "--help")) {
@@ -520,14 +527,20 @@ sub dump_doc_section {
my $file = shift;
my $name = shift;
my $contents = join "\n", @_;
+ my $escaped_name = $name;

if ($no_doc_sections) {
return;
}

+ $escaped_name =~ s/[^a-zA-Z0-9]/_/g;
+
if (($function_only == 0) ||
( $function_only == 1 && defined($function_table{$name})) ||
- ( $function_only == 2 && !defined($function_table{$name})))
+ ( $function_only == 2 && !defined($function_table{$name})) ||
+ ( $function_only == 5 &&
+ (defined($function_table{$name}) ||
+ defined($function_table{$escaped_name}))))
{
dump_section($file, $name, $contents);
output_blockhead({'sectionlist' => \@sectionlist,
--
2.1.4