I'm interested in writing a Tcl package to aid in the generation of HTML that is accessible to users with disabilities. I'm already well-versed in writing accessible HTML, especially web-based forms, but I'm unsure where to begin on the Tcl side of things: '''Questions''' * I'd like this package to work well with the existing [HTML] package, what are some things to keep in mind when subclassing (if that's the proper term) a package in Tcl? * I'd like to generate the HTML through an XML interface, I'd prefer not to resort to [puts] except in cases where it's practical to do so. What XML interface(s) are useful (I think [Tdom] is one)? '''Goals''' * Should work equally well in a CGI context and with Tcl-based web servers like [Tclhttpd]. * Needs to take the drudgery out of writing accessible HTML, which is quite tedious due to the overhead imposed by the additional tagging. * A [perl] version is also required. * Should comply with existing accessibility recommendations, such as those at the [W3C]. - [WJR] [AM] Have you had a look at the cgi.tcl package by [Don Libes]? This provides an excellent example to get started ... [WJR] Yes, like [HTML], many of [cgi.tcl]'s methods can be used, but some methods output deprecated markup that attempts to define presentation, which should be represented in [CSS]. [AM] Excuse my ignorance, but what does this type of HTML/CSS look like? [WJR] Here's a sample web-based form that illustrates the kinds of entities and attributes required:
Example Form 1

Your Pet:

Given CSS, compliant browsers will render it something like this: [http://jrankin.ath.cx/tclerswiki/example-form-1.png] Of course, the visual appearance is not as important as its ability to be rendered by aural browsers, braille-based browsers, etc. ---- [AM] Okay, correct me if I am wrong, but I deduce that the label in front of the entries or other controls are intimately connected to these controls, right? This means that if you represent this structure as an XML file you get awkward connections between nodes. My suggestion would be to use the struct::tree module from Tcllib (or some similar implementation of a general tree): This can easily be converted to an XML file by traversing the tree and its nodes, you can associate as many XML nodes with a single tree node as necessary (struct::tree allows you to associate arbitrary keys and values with each node). The way back (from XML to tree) is a bit more complicated, but if the XML/HTML file is structured in a straightforward way, it should not be that difficult. ---- [WJR] I've been looking for an example of struct::tree's usage. What would be the benefit of such an approach? ---- [WJR] What about using something like [xmlgen] and doing it as shown in this basic example: package provide htmlable 1.0 package require xmlgen namespace import ::xmlgen::* namespace eval htmlable { namespace export * } proc htmlable::widget {type name text id class} { declaretag label declaretag input # If no ID is supplied, use the name if {$id == ""} { set id $name } set widget [eval label for=$id $text] append widget [eval input type=$type name=$name id=$id class=$class] return $widget } Example tclsh session: jrankin@ultra /home/jrankin> tclsh % package require htmlable 1.0 % htmlable::widget text last-name {Last Name:} {} text-medium