#!/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_text.sh

self=$0

die_usage() {
    echo "Usage: $self <example.txt>"
    exit 1
}

die() {
    echo "$@"
    exit 1
}

include_block() {
    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
                ;;
            *)
                if [ "x$on_block" == "xyes" ]; then
                    echo "$t_line"
                fi
                ;;
        esac
    done
    echo "WARNING: failed to find text for block $block_name" >&2
    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

fence="~~~~~~~~~"
fence="${fence}${fence}"
fence="${fence}${fence}"
fence="${fence}${fence}"
while IFS=$'\n' read -r line; do
    case "$line" in
        @TEMPLATE*)
            template=${template##@TEMPLATE }
            template=${template%.c}.txt
            ;;
        @DEFAULT)
            include_block < "$template"
            ;;
        ~~~*)
            block_name=${line##~* }
            [ "$block_name" == "INTRODUCTION" ] || echo "$fence"
            ;;
        *)  echo "$line"
            ;;
    esac
done < "$txt"

echo
echo "Putting It All Together"
echo "======================="
echo "${fence}"
${self%/*}/gen_example_code.sh "${txt}"
echo "${fence}"
