Ŝalenzo

About
Ŝalenzo Website (3)

Subscribe
Subscribe to a syndicated feed of my weblog, brought to you by the wonders of RSS.

Links
These are a few of my favourite links.

  • raelity bytes ;-)
  • link 2
  • link 3
  • 古代的静态网站生成器

    CloudCannon今年初在SSGs through the ages系列文章中回顾了静态网站生成器的历史,其中提到的最早的拥有类似静态网站生成器功能的程序HSC(HTML Sucks Completely,即“HTML烂爆”)出现于1996年。该程序由C语言写成,旨在减轻维护网页的负担,提供了宏、条件分支、表达式计算、插入文件、自动转码转义、自动标注图片尺寸等功能。不过这个程序严格说来只是一个HTML预处理器(宏和条件编译的概念是不是和C预处理器很像?),提供的站点管理功能需要配合自行编写的Makefile使用。

    事实上,同样以HTML预处理器概念出现的GTML也编写于1996年。作者取G在H之前,表示网页作者先编写GTML,然后由机器变换到HTML。不同于HSC基于HTML标签的语法,GTML采用的语法完全取材于C预处理器,#include让C程序员倍感亲切。GTML用Perl语言写成。GTML具有一定的项目管理能力,通过配置文件能够批量转换整个网站中的GTML源文件,而高级的增量编译则与HSC一样需要配合make使用,但能自动生成所需的Makefile。

    GTML的主页上还列出了一些作者知道的HTML预处理程序,但在这些程序中,除了PHP存活至今,剩下的现在连网站都无法访问了,PHP也已不再是当年那个用函数名长度当作哈希函数的Personal Home Page了,但正是它给我的启发令我编写了Ŝalenzo网站仓库根目录下的index.php

    只是预处理的需求的话,或许直接套用C预处理器也没有太大的问题。要注意的是常见的C预处理器实现会在文本中插入#line以保留源映射,并删除/* *///标记的注释,这对于非C语言的用途来说是致命的;而且,文本中的"'必须按C语法正确配对。Jukka Korpela给出了Using a C preprocessor as an HTML authoring tool的细节。该页面的最后更新日期为2000年6月7日,不知道该页面最早创建于何时。

    Ŝalenzo网站因为C预处理器和GTML各自的局限性而没有使用它们。GTML不支持插件,扩展功能可以由GTML文件中内嵌的Perl或外壳脚本实现。GTML以页面为大,页面通过#include语句包含模板部件,而不是像现今的网页模板工具那样,由页面提供内容、把页面套入模板的模式。因为和文件扩展名强耦合,而且网站模型与今天的静态网站生成器相悖,很难让它在批量转换Markdown文章的同时套用页面模板。

    于OSCON 2002与OSCON 2003间改版的Perl中心网站在网站信息页面中显示其使用了Combust!和Template Toolkit。20年后的今天,它们的徽标仍然列在这个页面上。Template Toolkit是用Perl编写的模板引擎,HTML是其最火热的用途,但并不局限于HTML。从网站页脚的版权信息中可知,Template Toolkit与HSC、GTML一样发布于1996年。1996年真是HTML模板引擎的元年。

    我在Markdown始祖实现的页面中发现,Markdown.pl不仅可以作为命令行程序被调用,还可以作为Movable Type、Blosxom、BBEdit的插件使用。Movable Type和BBEdit是网页编辑器,而Blosxom是一种博客CGI程序,但也可以“静态渲染”网站。Blosxom创建于2003年,可能是最早的具有现代命令行式静态网站生成器特征的工具。salenzo.neocities.org就是此工具生成。

    该程序默认接受存放在文件夹结构中的*.txt文件,以HTML片段格式输入,自动生成按年月日归档的文章目录。通过添加插件,能够获得相当接近现代静态网站生成工具的体验。我为Ŝalenzo网站集成了几个内置的和第三方插件来实现与其它网站生成器共用目录结构,如下:

    • meta:在博文开头写入元数据以备显示,与现今通用的YAML front matter作用神似。
    • Eric Sherman的entries_index_tagged:默认状态下,文章日期按文件的修改时间计,用该插件可遵照文件开头的元数据。该插件的下载页面已消失。
    • flavourdir:Blosxom称模板为风味(flavour),因为支持为同一网站应用多套模板。默认状态下,模板与内容混合放置在同一目录$datadir下。用该插件可改为模板与内容分开放置。
    • readme:在索引页显示当前分类的说明。
    • Pomin Wu的entries_template:对归档列表页和正文页使用不同的文章模板。该插件的下载页面已消失。
    • Barijaona Ramaholimihaso的static_file:Raffi Krikorian的binary插件的升级版。将文章以外的资源文件复制到输出目录。该插件的下载页面已消失。
    • Fletcher Penney的MultiMarkdown:基于John Gruber的原汁原味的Markdown原始Perl语言实现修改而来。原版Markdown.pl支持作为Blosxom插件即插即用,MultiMarkdown也继承了这一点,并增加了表格、脚注、数学公式等功能。

    2002年2月28日,Rael Dornfest发布了Blosxom的最初版0+1i。可以在互联网时光机上回顾到那时的光景。从一开始,Blosxom就支持文件夹结构、页面模板、文章归档,免安装,并能免费使用。

    Blosxom(读作“blossom”或“blogsome”)是一种轻量级的(至少代码量不到30行)能光速搭起博客的Perl CGI脚本,适用于(但完全不限于)Mac OS X。Blosxom只不过是从指定的目录里把文本文档拽出来,然后按时间倒序显示成博客罢了。很简洁,却可能很有用,也很好玩。

    我脑子里时不时蹦出这样一个Blosxom软件的想法已经有一阵子了,摆到台面上做出来则是《Forwarding Address: OS X》上一篇帖子的契机:有人问有没有什么博客软件能用上OS X自带的好东东。

    Blosxom版本0+1i现在已经可以下载了。点击查看Blosxom运行起来的效果(带样式、不带样式)。

    尽情使用吧!

    ——Blosxom最初版发布之文

    此后,Blosxom的功能越来越多,代码量也从初版的不到30行增长到800余行,崇尚的简洁之道始终未变。Frank Hecker为Blosxom 2.0版的源代码作了注,成了一份良好的Perl语言实践学习材料。

    2008年10月2日,SourceForge上的Blosxom发布了至今为止最后一个版本2.1.2。2008年10月19日,Jekyll 0.0.0版诞生。

    如果Jekyll的创始人Tom Preston-Werner当时听说了这样一个领先了一个时代的博客软件,今天静态网站生成器百家争鸣的局面会否有所不同呢?