#!/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 "
"
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 ''