Htmlgen | Writing HTML with Tcl | xmlgen

## Name

Htmlgen — Writing HTML with Tcl

## Synopsis

`package require htmlgen`

`::htmlgen::htmltag ?attr=value ...? ?body ...?` (for every HTML tag)

`::htmlgen::buffer varname body`

`::htmlgen::put ?arg ...?`

`::htmlgen::esc ?arg ...?`

## Description

The package provides one Tcl command for every HTML tag. It allows to write structured Tcl code which, when executed, generates structured HTML output. The benefits are:

- pages can contain dynamic content
- in contrast to server parsed HTML there is no mix of HTML syntax with PHP/JSP/Perl/Python/Tcl syntax.
- compared to other CGI languages there is no need for explicit `put/print/echo` commands.
- content and styles can be stored in Tcl variables and then reused for consistent look and feel.
- the scarcity of Tcl's syntax allows for a clearly structured page source, in particular with a Tcl-aware editor.

In fact I consider `htmlgen` to be what HTML should better have been in the first place. The individual commands are described below.

`::htmlgen::a ?attr=value ...? ?ctrl? ?body ...?
` `::htmlgen::p ?attr=value ...? ?ctrl? ?body ...?
` `::htmlgen::table ?attr=value ...? ?ctrl? ?body ...?
` `::htmlgen::...`and so on for other tags.

  Every such markup command takes a list of attribute-value pairs and one or more body arguments. It then generates HTML where the open tag contains all the attribute-value pairs and the close tag is never omitted. You can write

  ul {style=color:red} ! {
  li - one
  li - two
  }

  to generate

  <ul style="color:red">
  <li>one</li>
  <li>two</li>
  </ul>

  If the first argument which is not an attribute-value pair contains exactly one character, it is used to control the handling of the body according to the following table.

  character | action
  --- | ---
  "!" | pass to [eval] and print
  "+" | pass to [subst] and print
  "-" | take as is and print
  "." (dot) | take as is and return
  (other) | error

  If the first non attribute-value argument has more than one character, it is considered to be the first body argument and the control character defaults to "." (dot) meaning that the body is taken as is, surrounded by the tags and then returned.

  Please consult Generated Markup Commands in the manual page for xmlgen for the more details. It also describes, how attribute-value pairs are parsed.

`::htmlgen::extra::tab ID url active tabs ?attr=value ...? ?body ...?`

  (experimental) Creates `table` based notebook tabs. Useful only for CGI scripts. Nice layout in style-aware browsers. Useful layout still in Navigator-4.7. ID is the name of a variable you'll find with `::ncgi::parse`. The content of that variable is the name of the selected tab. The available tabs are defined in tabs which must be a list of pairs tabname display, where tabname is what you'll find in the CGI variable `$ID` and display is what is printed in the tab on screen. Parameter active must be one of the given tabname names. It will be rendered as the selected tab.

  You can find an example in `tab.tcl`

`::htmlgen::buffer varname body`

  See manual for xmlgen.

`::htmlgen::put ?arg ...?`

  See manual for xmlgen.

`::htmlgen::esc ?arg ...?`

  See manual for xmlgen.

## Author

Harald Kirsch

## See Also

Overview, Xmlgen, Notebook Tabs, Navigation Bar

Htmlgen | 1.4 | xmlgen