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