# convert_examples.tcl --
#
#
# reads the examples dir, checks if a file has been already converted
# in <target-dir> and compares their mtimes. If the file in
# <source-dir> is more recent the target dir is recreated.

# The script uses Rivet's escape_sgml_chars to convert examples code
# into text suitable to be inclued and displayed in XML/XHTML 
# documentation

# NOTICE: This script requires Rivet, its scripts and
# libraries to be in the auto_path.

# usage:
#
# tclsh ./convert_examples
#
# $Id$
#

lappend auto_path @RIVET_TCL_TARGET@
lappend auto_path [file join @RIVET_TCL_TARGET@ rivet-tcl]

package require rivetlib

set source_dir examples
set target_dir examples-sgml

if {![info exists source_examples]} {
	set source_examples [glob [file join $source_dir *.*]]
	puts "escaping $source_examples to SGML compatible form"
}

foreach example $source_examples {

    set exam_name [file tail $example]
    set example_sgml [file join $target_dir $exam_name]

    set example_sgml_exists [file exists $example_sgml]

    if {!$example_sgml_exists || \
        ([file mtime $example] > [file mtime $example_sgml])} { 

        puts -nonewline "$example needs to be escaped..."
        
        set example_text [string trim [::rivet::read_file $example]]

        set example_sgml_fid [open $example_sgml w+]
        puts $example_sgml_fid [::rivet::escape_sgml_chars $example_text]
        close $example_sgml_fid
        puts "done"
    }

}

