Here is a .assf file that does a little bit more.

<% is the Open tag to enter a tcl command.
<%= is the open tag to cause the output of the following tcl command to be returned to the HTML document.

For instance, <%= $hello %> will cause the contents of the variable hello to be added to the HTML.

Any special characters will be escaped.

There is a special form of the open tag that will skip the escaping of any text. <%== $html_var %> will cause the value of html_var to be directly placed into the html page. It can be used if you have a function that generates properly escaped HTML.

The following example page shows a few different ways of escaping your text. The very first line of the document is a tcl comment that doesn't do anything.

<%## does it work if first line of file is a tcl script?
%><!DOCTYPE html>
<html lang="en">
    <meta charset="utf-8">
    <title>Assfish sample form entry page</title>


    <div class="navbar navbar-inverse navbar-fixed-top">
            notice use of inline style here.
            not sure about why.. but navbar-inner has a 5px border, which causes the screen
            to act flakey when the width changes and it flips from showing the headers to showing the drop down icon
<div class="container">

Right now is <%= [clock format [clock seconds]]%>.

[try lots of \n weird tcl {commands here....

this should not show directory. [pwd].  or $var foo $zot

## another bit of danger...
## creating procs inside of another proc.
## uses namespace instead of proc to divide all the
## stuff up... namespace eq the filename. 
## check out <a href="subst_file2.assf">subst_file2.assf</a> to see
## how the procedure 'me' is only available from subst-file1.assf namespace

proc me {args} {

        Inside of Me.  args= <%= $args %>  and more.
            <LI> ME LI1 </LI>
            <LI> ME LI2 </LI>
            <LI> ME LI3 </LI>


proc < {} {
    ## who would create a proc named <??

proc & {} {
    ## even funnier...


    <% for {set x 0} {$x < 5} {incr x} {  %> 
    <% ## you need two equal signs below to keep
       ## assfish from escaping the <li> stuff.  %>
    <%== [format "<li>  <em> the Magical x =</em> %s" $x]  %>
    <li> x= <%= $x %>
    <% } %>

X ended up being = to <%=$x%> <br>
    ## we make a call to the "me" proc below.  me was defined to return
    ## HTML, so we need to use == to keep it from being escaped twice.
I'm currently in directory <%=[pwd]%>  me = <%==[me one two three $x]%> <br>

<%= [join [glob -nocomplain *] ", "]%> <br>

Current Commands: <br>
<% foreach command [lsort [info commands]] { %>
    <LI> <%= $command%>
<% } %>


<% ## does it work if last line is a tcl script