]> git.ipfire.org Git - thirdparty/man-pages.git/commitdiff
scripts/bash_aliases: Make man_lsfunc() more robust; Add sed_rm_ccomments().
authorAlejandro Colomar <alx.manpages@gmail.com>
Sun, 9 May 2021 21:39:09 +0000 (23:39 +0200)
committerMichael Kerrisk <mtk.manpages@gmail.com>
Sun, 9 May 2021 23:32:17 +0000 (11:32 +1200)
This patch makes man_lsfunc() search for the function prototypes,
instead of relying on the current manual page formatting,
which might change in the future, and break this function.

It also simplifies the code, by reusing man_section().

Create a new function sed_rm_ccomments(), which is needed by
man_lsfunc(), and may also be useful in other cases.

Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
scripts/bash_aliases

index d9b6047d16feff5d318da080f247c37240c10243..c50108a165d102ab2d0faf488247b55f624c2bd7 100644 (file)
 EX_OK=0;
 EX_USAGE=64;
 
+########################################################################
+#      C
+
+#  sed_rm_ccomments()  removes C comments.
+# It can't handle multiple comments in a sinlge line correctly,
+# nor mixed or embedded //... and /*...*/ comments.
+# Use as a filter (see man_lsfunc() in this file).
+
+function sed_rm_ccomments()
+{
+       sed 's%/\*.*\*/%%' \
+       |sed -E '\%/\*%,\%\*/%{\%(\*/|/\*)%!d; s%/\*.*%%; s%.*\*/%%;}' \
+       |sed 's%//.*%%';
+}
+
 ########################################################################
 #      Linux kernel
 
@@ -106,25 +121,13 @@ function man_lsfunc()
                return ${EX_USAGE};
        fi
 
-       find "${@}" -type f \
-       |xargs grep -l "\.SH SYNOPSIS" \
-       |sort -V \
-       |while read -r manpage; do
-               <${manpage} \
-               sed -n \
-                       -e '/^\.TH/,/^\.SH/{/^\.SH/!p}' \
-                       -e "/^\.SH SYNOPSIS/p" \
-                       -e "/^\.SH SYNOPSIS/,/^\.SH/{/^\.SH/!p}" \
-               |sed \
-                       -e '/Feature/,$d' \
-                       -e '/{/,/}/d' \
-               |man -P cat -l - 2>/dev/null;
+       for arg in "$@"; do
+               man_section "${arg}" 'SYNOPSIS';
        done \
-       |sed -n "/^SYNOPSIS/,/^\w/p" \
-       |grep '^       \w' \
-       |grep -v ':' \
-       |sed 's/^[^(]* \**\(\w*\)(.*/\1/' \
-       |grep '^\w' \
+       |sed_rm_ccomments \
+       |pcregrep -Mn '(?s)^ [\w ]+ \**\w+\([\w\s(,)[\]*]+?(...)?\s*\); *$' \
+       |grep '^[0-9]' \
+       |sed -E 's/^[^(]+ \**(\w+)\(.*/\1/' \
        |uniq;
 }