A user account is required in order to edit this wiki, but we've had to disable public user registrations due to spam.

To request an account, ask an autoconfirmed user on Chat (such as one of these permanent autoconfirmed members).

Validator.nu Templates

From WHATWG Wiki
Revision as of 14:18, 17 March 2015 by MikeSmith (talk | contribs)
Jump to navigation Jump to search

This document is obsolete.

For the current specification, see: https://github.com/validator/validator/wiki/Templates

The HTML and XHTML outputs of Validator.nu are produced using SAX serializers. When variable content is pushed to the serializers, SAX events are emitted from hand-written Java code. However, for static boilerplate parts, generated code is used.

It is particularly noteworthy that for (X)HTML, the MessageEmitter subclass generates a document fragment that appears inside a larger document but for the other output formats, the entire response is generated by the MessageEmitter subclass. This design is mainly due to the legacy of controller code evolution from an initial interactive HTML-only design to cover non-interactive Web service response formats later.

The Generator Tool

The generated code is produced from XML file using SaxCompiler, which was written to aid the development of Validator.nu.

SaxCompiler turns an XML document into a Java class with a re-entrant static method for replaying the SAX events of the XML document. The events for the document and root element start/end can optionally be omitted.

Callbacks to an object passed as an argument to the static method are possible and used for running code that emits the variable part of the result document.

The Generated Emitters

PageEmitter

This emitter generates the html, head, body, title, h1, hr and p (after hr) elements. The contents of each one involves a callback to the controller.

FormEmitter

This emitter generates the contents of the form element (but not the element itself which is generated using hand-written code due to variability in its attributes) in the generic facet.

Html5FormEmitter

This emitter generates the contents of the form element (but not the element itself which is generated using hand-written code due to variability in its attributes) in the HTML5 facet.

CharsetEmitter

Emits the table row containing the character encoding override UI widget.

NsFilterEmitter

Emits the table row containing the namespace filter UI widget.

StatsEmitter

Emits the execution time statistics paragraph.

Callbacks

In general, all package-private methods on the controller classes (VerifierServletTransaction and Html5ConformanceCheckerTransaction) are callbacks of some kind.