chronicle2

2025-12-07 0 958
  • Homepage:
  • CPAN:
    • http://search.*cp**an.org/dist/App-Chronicle/
  • Git Repository:
    • http://gith*ub.c*om*/skx/chronicle2

Project: Obsolete

NOTE this project is currently unmaintained, it was replaced by a golang-based application which has complete feature-parity:

  • https://gi*th*u*b.com/skx/ephemeris

chronicle

Chronicle is a tool which will convert a directory of simple text files into a static HTML weblog, (or blog if you prefer).

This repository contains a from-scratch rewrite of the Chronicle static blog compiler, which represents a significant upgrade in terms of both speed and flexibility.

The system is intentionally simple, but it does support:

  • Template based output.
  • Support for RSS feeds.
  • Support for tagged entries.
  • Optional support for comments.

This implementation is significantly faster at page generation than previous releases, primarily because posts are parsed and inserted into an SQLite database, rather than having each post read into RAM.

Once the blog posts have been populated in the SQLite database they are inserted into a series of templates, which ultimately generates the output.

Although we assume you keep the SQLite database around it doesn\’t matter if you delete it. The act of parsing all your entries is still a very quick process.

Installation

Clone the repository then install as you would any CPAN module:

perl Makefile.PL
make test
su - make install

Blog Format

The blog format is very simple, and the following file is a sample:

title: The title of my post
date: 12 August 2007
tags: foo, bar, baz

The text of the actual entry goes here.

However much there is of it.

The entry is prefixed by a small header, consisting of several pseudo-header fields. The header MUST be separated from the body by at least one empty line.

Header values which are unknown are ignored, and no part of the header is included in the output which is generated.

The following header values are recognized:

  • Title:
    • This holds the name of the post. (\”Subject:\” may be used as a synonym.) If neither \”Title\” or \”Subject\” are present the filename itself is used.
  • Date:
    • The date this entry was created. If not present the creation time of the file is used.
  • Tags:
    • If any tags are present they will be used to categorize the entry.
  • Format:
    • This allows you to specify if you\’re writing in markdown, or textile. If you are then the blog-body will be processed correctly.

Additional headers may be inserted, which will be ignored by default, for access by particular plugins. For example the Chronicle::Plugin::SkipDrafts plugin will ensure that blog entries are ignored if they are still drafts – and include a draft:1 header. Similarly there is a plugin called PostSpooler which will ignore posts until their due data, and that uses the special publish header – rather than the default date.

Simple Usage

Assuming you have a directory containing a number of blog posts
you should be able to generate your blog like so:

chronicle --input=path/to/input --output=/path/to/output \\
   --theme=blog.steve.org.uk

This will read path/to/input/*.txt and generate the blog beneath
the directory /path/to/output/ creating that directory if missing.

The SQLite database will be created at ./blog.db by default, and if it is
deleted it will be regenerated.

Advanced Usage

The previous example showed the basic usage, one obvious change most users would prefer would be to set the title of the blog, and the subtitle:

chronicle --title=\"Steve Kemp\'s Blog\" --sub-title=\"Writings about cake\" ..

If you start setting multiple values you might prefer to use a configuration
file instead. Chronicle will read /etc/chronicle/config, and ~/.chronicle/config prior to starting. Failing that you can specify a configuration file of your own via --config=/path/to/conf.

The configuration file matches the command line arguments exactly, so given \”–foo=bar\” the configuration file would allow the same thing to be set via:

foo = bar

As we\’ve previously noted the blog-generation largely occurs via a series of plugins. For example the sidebar might show the list of all tags, which can get unwieldy quickly. If you wished to disable that you could do so via:

chronicle --exclude-plugins=AllTags,RecentPosts --force ..

NOTE: The plugins which generate output pages are located beneath the Chronicle::Plugin::Generate name-space. The plugins which generate snippets available to all pages are located beneath the Chronicle::Plugin::Snippets name-space.

NOTE: Because the snippets are included in every page, in the default themes, we\’ve added --force to ensure that the output pages are updated.

User-Visible Changes

In an ideal would you should be able to migrate from previous Chronicle releases directly to this codebase, as the purpose and main operation is identical:

  • Blog entries are are still read from data/, unless you specify a different path via \”--input\”.
  • We still assume *.txt are the blog entries, unless you specify \”--pattern=*.blog\”.
  • Blog entries are still built up of a header and the entry.
  • Entries are still parsed in HTML, Markdown, and Textile formats.

However there are changes, and these largely relate to the templates, along with the implementation differences.

As of Chronicle 5 the main script parses any command-line arguments, and reads the blog posts, but the actual generation of your site is entirely plugin-based. The plugins are standard Perl modules located beneath the Chronicle::Plugin name-space, and although you don\’t need to know any of the details they can be ordered thanks to the use of Module::Pluggable::Ordered class.

The template changes are a little more significant than I\’d like, but
happily these changes largely consist of new locations for things,
and additional pages.

Extending

As mentioned the core code is pretty minimal and all output functionality
is carried out by plugins.

The core will call the following methods if present in plugins:

  • on_db_create

    • This is called if the SQLite database does not exist, and can be used to add new columns, or tables.
  • on_db_open

    • This is called when the database is opened, and we use it to set memory/sync options. It could be used to do more.
  • on_insert

    • This method is invoked as a blog entry is read to disk before it is inserted into the database for the first time – or when the item on disk has been changed and the database must be refreshed.
    • This method is designed to handle Markdown/Textile conversion, etc.
  • on_initiate

    • This is called prior to any processing, with a reference to the configuration options and the database handle used for storage.
    • This is a good place to call code that generates common snippets, or populates global-variables.
  • on_generate

    • This is called to generate the actual output pages. There is no logical difference between this method and on_initiate except that the former plugin methods are guaranteed to have been called prior to on_generate being invoked.
    • This is where pages are output.

Steve

下载源码

通过命令行克隆项目:

git clone https://github.com/skx/chronicle2.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 chronicle2 https://www.zuozi.net/31380.html

shoppingPro
上一篇: shoppingPro
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务