86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
##
 | 
						|
##  Copyright (c) 2010 The VP8 project authors. All Rights Reserved.
 | 
						|
##
 | 
						|
##  Use of this source code is governed by a BSD-style license 
 | 
						|
##  that can be found in the LICENSE file in the root of the source
 | 
						|
##  tree. An additional intellectual property rights grant can be found
 | 
						|
##  in the file PATENTS.  All contributing project authors may 
 | 
						|
##  be found in the AUTHORS file in the root of the source tree.
 | 
						|
##
 | 
						|
 | 
						|
 | 
						|
# gen_example_code.sh
 | 
						|
 | 
						|
self=$0
 | 
						|
 | 
						|
die_usage() {
 | 
						|
    echo "Usage: $self <example.txt>"
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
die() {
 | 
						|
    echo "$@"
 | 
						|
    exit 1
 | 
						|
}
 | 
						|
 | 
						|
include_block() {
 | 
						|
    show_bar=$1
 | 
						|
    block_name=${line##*@}
 | 
						|
    indent=${line%%${block_name}}
 | 
						|
    indent=${#indent}
 | 
						|
    [ $indent -eq 1 ] && indent=0
 | 
						|
    local on_block
 | 
						|
    while IFS=$'\n' read -r t_line; do
 | 
						|
        case "$t_line" in
 | 
						|
            \~*\ ${block_name})
 | 
						|
                if [ "x$on_block" == "xyes" ]; then
 | 
						|
                    return 0;
 | 
						|
                else
 | 
						|
                    on_block=yes
 | 
						|
                fi
 | 
						|
                ;;
 | 
						|
            @DEFAULT)
 | 
						|
                if [ "x$on_block" == "xyes" ]; then
 | 
						|
                    include_block $show_bar < "${template%.c}.txt"
 | 
						|
                    return 0
 | 
						|
                fi
 | 
						|
                ;;
 | 
						|
            *)
 | 
						|
                if [ "x$on_block" == "xyes" ]; then
 | 
						|
                    local rem
 | 
						|
                    (( rem = 78 - indent ))
 | 
						|
                    case "$block_name" in
 | 
						|
                      \**) printf "%${indent}s * %s\n" "" "$t_line" ;;
 | 
						|
                        *)
 | 
						|
                            if [ "$show_bar" == "yes" ]; then
 | 
						|
                                printf "%${indent}s%-${rem}s//\n" "" "$t_line"
 | 
						|
                            else
 | 
						|
                                printf "%${indent}s%s\n" "" "$t_line"
 | 
						|
                            fi
 | 
						|
                            ;;
 | 
						|
                    esac
 | 
						|
                fi
 | 
						|
        esac
 | 
						|
    done
 | 
						|
    return 1
 | 
						|
}
 | 
						|
 | 
						|
txt=$1
 | 
						|
[ -f "$txt" ] || die_usage
 | 
						|
read -r template < "$txt"
 | 
						|
case "$template" in
 | 
						|
    @TEMPLATE*) template=${txt%/*}/${template##@TEMPLATE } ;;
 | 
						|
    *) die "Failed to parse template name from '$template'" ;;
 | 
						|
esac
 | 
						|
 | 
						|
while IFS=$'\n' read -r line; do
 | 
						|
    case "$line" in
 | 
						|
        @*) include_block yes < "$txt" \
 | 
						|
            || include_block < "${template%.c}.txt" \
 | 
						|
            #|| echo "WARNING: failed to find text for block $block_name" >&2
 | 
						|
            ;;
 | 
						|
        *)  echo "$line" ;;
 | 
						|
    esac
 | 
						|
done < "$template"
 |