diff --git a/scripts/bash_aliases b/scripts/bash_aliases index d9b6047d1..c50108a16 100644 --- a/scripts/bash_aliases +++ b/scripts/bash_aliases @@ -20,6 +20,21 @@ 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; }