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
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;
}