# wrap.tcl # # This code will use the post-content filter to substitute content # into a file called wrapper.tml or wrapper.html at the point where %BODY% occurs. # # To trigger this, put the following in a Doc domain's .tml # # upvar #0 Httpd[Httpd_CurrentSocket] data # lappend data(filter) Wrap package require struct::list proc Wrap {sock content} { upvar #0 Httpd$sock data foreach dir [::struct::list::Lreverse [Doc_GetPath $sock]] { set template [file join $dir wrapper.tml] set wrapper [file join $dir wrapper.html] if {![file exists $wrapper] && [file exists $template]} { # instantiate the wrapper set dynamic 0 set wrapper [TemplateInstantiate $sock $template $wrapper $data(suffix) dynamic 0] set content [string map [list %BODY% $content] $wrapper] break } elseif {[file exists $wrapper]} { # the wrapper exists set fd [open $wrapper]; set wrapper [read $fd]; close $fd set content [string map [list %BODY% $content] $wrapper] break } } return $content }