| #!/bin/sh | |
| # Copyright 2009 The Go Authors. All rights reserved. | |
| # Use of this source code is governed by a BSD-style | |
| # license that can be found in the LICENSE file. | |
| # generate HTML for a program excerpt. | |
| # first arg is file name | |
| # second arg is awk pattern to match start line | |
| # third arg is awk pattern to stop processing | |
| # | |
| # missing third arg means print one line | |
| # third arg "END" means proces rest of file | |
| # missing second arg means process whole file | |
| # | |
| # examples: | |
| # | |
| # prog.sh foo.go # whole file | |
| # prog.sh foo.go "/^func.main/" # signature of main | |
| # prog.sh foo.go "/^func.main/" "/^}/ # body of main | |
| # | |
| # non-blank lines are annotated with line number in file | |
| echo "<pre> <!-- $* -->" | |
| case $# in | |
| 3) | |
| if test "$3" = "END" # $2 to end of file | |
| then | |
| awk ' | |
| BEGIN { printing = 0 } | |
| '$2' { printing = 1; print NR "\t" $0; getline } | |
| printing { if($0 ~ /./) { print NR "\t" $0 } else { print "" } } | |
| ' | |
| else # $2 through $3 | |
| awk ' | |
| BEGIN { printing = 0 } | |
| '$2' { printing = 1; print NR "\t" $0; getline } | |
| '$3' && printing { if(printing) {printing = 0; print NR "\t" $0; exit} } | |
| printing { if($0 ~ /./) { print NR "\t" $0 } else { print "" } } | |
| ' | |
| fi | |
| ;; | |
| 2) # one line | |
| awk ' | |
| '$2' { print NR "\t" $0; getline; exit } | |
| ' | |
| ;; | |
| 1) # whole file | |
| awk ' | |
| { if($0 ~ /./) { print NR "\t" $0 } else { print "" } } | |
| ' | |
| ;; | |
| *) | |
| echo >&2 usage: prog.sh file.go /func.main/ /^}/ | |
| esac <$1 | | |
| sed ' | |
| s/&/\&/g | |
| s/"/\"/g | |
| s/</\</g | |
| s/>/\>/g | |
| ' | |
| echo '</pre>' |