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"> <head> <meta charset="utf-8"> <title>Assfish sample form entry page</title> </head> <body> <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"> <br> Right now is <%= [clock format [clock seconds]]%>. <br> [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. <OL> <LI> ME LI1 </LI> <LI> ME LI2 </LI> <LI> ME LI3 </LI> </OL> <% } proc < {} { ## who would create a proc named <?? } proc & {} { ## even funnier... } %> <ul> <% 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 %> --> <% } %> </ul> 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> <br> Current Commands: <br> <UL> <% foreach command [lsort [info commands]] { %> <LI> <%= $command%> <% } %> </UL> <% ## does it work if last line is a tcl script %> </div> </body> </html>