mirror of
https://github.com/golang/go
synced 2024-11-25 01:27:56 -07:00
64 lines
1.5 KiB
Bash
64 lines
1.5 KiB
Bash
|
#!/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>'
|