#!/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/&/\&amp;/g
	s/"/\&quot;/g
	s/</\&lt;/g
	s/>/\&gt;/g
'

echo '</pre>'
