27 Mar 2009
(updated 27 Mar 2009 at 23:56 UTC) »
I recently uploaded some links to my
cl-blog-generator project, and have been getting some
feedback with comparisons to other blog site generators, or
compilers, such as
Pages. Compared to these, cl-blog-generator is
immature, but takes a different approach in several areas
Stewart suggested might be worth exploring. I look
forward to any comments you might have.
All the blog generators seem to use a file based approach
for writing content, but they differ in the choice of input
formats supported, and in the approach to templating.
cl-blog-generator is the least flexible,
requiring input in XHTML, while
allows HTML, Textile or Markdown, and
Textile or Markdown. For templates,
uses Perl's HTML::Template, and
Jekyll uses Liquid.
cl-blog-generator uses an approach which
substitutes content into
elements identified with specific id's or classes, similar
to transforming the templates with XSLT.
cl-blog-generator's choice of XHTML input was
driven by a requirement to enable the validation of post
content in the editor, which is not possible using
Chronicle's HTML input because of the headers
and lack of a
element, and a desire to be able to use any CSS tricks I
wanted, which ruled out Textile and Markdown, or any other
markup language. The lack of an external templating engine
cl-blog-generator was driven by simplicity;
I couldn't see a use for conditionals or loops given the
fixed structure of the content, and this choice leads to
templates that validate, unlike
which are not full of HTML comments. The current id and
class naming scheme in
certainly use some refinement to improve the flexibility of
the output content format, and I would definitely welcome
requests for enhancements should the scheme not fit your
Database and Two Phase Publishing
Perhaps the most significant difference in approach for
cl-blog-generator is its use of a database and
an explicit publish step.
cl-blog-generator a draft can exist
anywhere in the filesystem, and
must be "published" to be recognised by the blog site
generator. The publishing process fills in some default
metadata, such as post date, if this is not originally
specified, copies the modified draft to a configurable
location, and enters the metadata into the database. This
ensures that the post is completely specified by its
representation in the filesystem, and that the database is
The database enables the partial regeneration of the site,
without having to parse the whole site, and makes the
linking of content much simpler.
However, having Elephant as a dependency is probably the
largest impediment to installation at present.
On Titles, Dates, Tags and Filenames
cl-blog-generator's input XHTML has
augmented to add elements for specifying post title, date,
update date (which I believe is missing from the other
systems), slug, description, and tags. On publising (see
next section), any of these elements that is missing,
except the mandatory title, is filled in with defaults.
a preamble to specify metadata, with the filename being
used to generate the post's slug.
uses the filename and its path for specifying the post
date, and tags.
Bells and Whistles
Finally, here is a grab bag of features.
Chronicle comes with a commenting system.
cl-blog-generator generates a
description element, which is used by search
to generate link text. It also generates
elements with links to the previous and next posts.
Jekyll has a "Related posts" feature for
generating links to similar posts.
have migration scripts for importing content.
Chronicle has a spooler for posting pre-
written content at specific times