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

echo '
'