| #!/bin/sh |
| # |
| # FIXME_list.sh |
| # |
| # Display FIXME segments from man-pages source files |
| # |
| # (C) Copyright 2007 & 2013, Michael Kerrisk |
| # This program is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU General Public License |
| # as published by the Free Software Foundation; either version 2 |
| # of the License, or (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details |
| # (http://www.gnu.org/licenses/gpl-2.0.html). |
| # |
| ###################################################################### |
| # |
| # (C) Copyright 2006 & 2013, Michael Kerrisk |
| # This program is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU General Public License |
| # as published by the Free Software Foundation; either version 2 |
| # of the License, or (at your option) any later version. |
| # |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details |
| # (http://www.gnu.org/licenses/gpl-2.0.html). |
| # |
| # |
| |
| show_all="n" |
| while getopts "a" optname; do |
| case "$optname" in |
| |
| a) # "all" |
| # Even show FIXMEs that aren't generally interesting. (Typically |
| # these FIXMEs are notes to the maintainer to reverify something |
| # at a future date.) |
| |
| show_all="y" |
| ;; |
| |
| *) echo "Unknown option: $OPTARG" |
| exit 1 |
| ;; |
| |
| esac |
| done |
| |
| shift $(( $OPTIND - 1 )) |
| |
| if test $# -eq 0; then |
| echo "Usage: $0 [-a] pathname..." 1>&2 |
| exit 1; |
| fi |
| |
| for dir in "$@"; do |
| for page in $(find "$dir" -type f -name '*.[1-9]' \ |
| -exec grep -l FIXME {} \; | sort) |
| do |
| cat "$page" | awk -v SHOW_ALL=$show_all -v PAGE_NAME="$page" \ |
| ' |
| BEGIN { |
| page_FIXME_cnt = 0; |
| } |
| |
| /FIXME/ { |
| |
| # /.\" FIXME . / ==> do not display this FIXME, unless |
| # -a command-line option was supplied |
| |
| if ($0 ~ /^\.\\\" FIXME \./ ) |
| FIXME_type = "hidden" |
| else if ($0 ~ /^\.\\\" FIXME *\?/ ) |
| FIXME_type = "question" |
| else |
| FIXME_type = "normal"; |
| if (FIXME_type == "normal" || SHOW_ALL == "y") { |
| if (page_FIXME_cnt == 0) { |
| print "=========="; |
| print PAGE_NAME; |
| } |
| page_FIXME_cnt++; |
| |
| finished = 0; |
| do { |
| print $0; |
| |
| # Implicit end of FIXME is end-of-file or a line |
| # that is not a comment |
| |
| if (getline == 0) |
| finished = 1; |
| |
| if (!($0 ~ /^.\\\"/)) |
| finished = 1; |
| |
| # /.\" .$/ ==> Explicit end of FIXME |
| |
| if ($0 ~ /^.\\\" \.$/) |
| finished = 1; |
| } while (!finished); |
| |
| print ""; |
| } |
| } |
| ' |
| done | sed -e 's/^\.\\"/ /' | sed -e 's/ *$//' | cat -s |
| done |