Using Mallard tools for generating a static website
Tuesday, April 23rd, 2013After more than ten years I finally managed to update my personal homepage. I have searched a bit for some static website generator tool and finally selected Mallard together with mallard-site-tool. Installation was quite easy as most things (yelp-tools, yelp-xsl, itstool) were packaged for my distribution (Ubuntu), only mallard-site-tool needs to be installed from sources.
It took me some time to realize the difference between “Mallard” as a generic specification and the behavior of the actual implementation in Yelp tools. With the help of Shaun McCance I managed to get HTML pass-through working in mallard-site-tool by implementing Mallard’s support for external namespaces. This allows one to embed HTML elements within Mallard pages like in the following small example:
<page xmlns="http://projectmallard.org/1.0/" xmlns:html="http://www.w3.org/1999/xhtml" type="topic" id="external"> <title>External Namespaces</title> <p> <html:input type="button" value="Hello" onclick="alert('Hello World!');"/> </p> </page>
For future reference the solution is to use some custom XSL during site generation by including it in “index.site”:
<?xml version="1.0"?> <site xmlns="http://projectmallard.org/site/1.0/"> <link type="site-root" href="."/> <link type="site-custom-xsl" href="custom.xsl"/> </site>
The stylesheet file “custom.xsl” then contains the following template to pass-through HTML elements together with their attributes:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:html="http://www.w3.org/1999/xhtml" xmlns="http://www.w3.org/1999/xhtml" version="1.0"> <!-- pass-through of inline HTML --> <xsl:template mode="mal2html.inline.mode" match="html:*"> <xsl:element name="{local-name(.)}" namespace="{$html.namespace}"> <xsl:for-each select="./@*"> <xsl:attribute name="{name()}"> <xsl:value-of select="."/> </xsl:attribute> </xsl:for-each> <xsl:apply-templates mode="mal2html.inline.mode"/> </xsl:element> </xsl:template> </xsl:stylesheet>
The site looks quite nice now and editing Mallard pages is fun. So hopefully the next update will take less than ten years.