#!/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 # line numbers are printed %.2d to make them equal-width for nice formatting. # the format gives a leading 0. the format %2d gives a leading space but # that appears to confuse sanjay's makehtml formatter into bungling quotes # because it makes some lines look indented. echo "
 "

case $# in
3)
	if test "$3" = "END"  # $2 to end of file
	then
		awk '
			function LINE() { printf("%.2d\t%s\n", NR, $0) }
			BEGIN { printing = 0 }
			'$2' { printing = 1; LINE(); getline }
			printing { if($0 ~ /./) { LINE() } else { print "" } }
		'
	else	# $2 through $3
		awk '
			function LINE() { printf("%.2d\t%s\n", NR, $0) }
			BEGIN { printing = 0 }
			'$2' { printing = 1; LINE(); getline }
			'$3' && printing { if(printing) {printing = 0; LINE(); exit} }
			printing { if($0 ~ /./) { LINE() } else { print "" } }
		'
	fi
	;;
2)	# one line
	awk '
		function LINE() { printf("%.2d\t%s\n", NR, $0) }
		'$2' { LINE(); getline; exit }
	'
	;;
1)	# whole file
	awk '
		function LINE() { printf("%.2d\t%s\n", NR, $0) }
		{ if($0 ~ /./) { LINE() } else { print "" } }
	'
	;;
*)
	echo >&2 usage: prog.sh file.go /func.main/ /^}/
esac <$1 |
sed '
	s/&/\&/g
	s/"/\"/g
	s//\>/g
'

echo '
'