logo
News About Projects Publications Desktop Gallery CV Friends Site Map
clcms Small Stuff DNSSEC Linktag NSEC3 RRTypes Mailbox Alert
Page contents:
About
Design Goals
Download
Mailing List
Changelog
Getting Started
Docs
Todo
Last updated:
2007-02-10
PageNav:
Next: Documentation
Up: Projects
Prev: Projects

About

(any news can be found on my general news page)

clcms (pronounced "clickmas") is my own command line content management system. It's not a dynamic cms, but a script that takes a source tree and creates a web site out of it.

The idea came to me when i was using m4 for my website to generate the HTML, but i did not like the idea that i was still typing HTML in my pages, even if it was simplified by using macros. I was updating a wiki page somewhere when it hit me: i wanted a command line system that was able to take wiki style input for page content. The result is clcms.

Its in beta state at the moment, mostly to try out some different approaches to various challenges. But i thought i'd share it now, so if you're interested and might have some ideas on where to go from here, drop me a line (or a patch).

It's also a way for me to learn Python, so i might in my ignorance produce some weird constructs here and there. Please let me know, but be gentle :)


Back to top

Design Goals

  • Updates should be possible with a terminal and an editor
  • Content is stored in a directory tree
  • Adding pages (or items?) should be as easy as creating a new file and typing some lines in it.
  • For default pages/items no config necessary
  • No HTML, XML or anything alike for normal usage (after initial setup, of course)
  • All pages have their binary content (images, download files) in the directory of the page itself
  • All output is static, no generating on the fly


Back to top

Download

The current beta release is 0.6.


Back to top

Mailing List

There's a mailing list for users of clcms, where you can post questions, bugs, and usage tips. You can subscribe at http://jelte.nlnetlabs.nl/mailman/listinfo/clcms-users.


Back to top

Changelog

  • [0.5 - 0.6]
    • page.meta files are renamed to page.attr to better reflect their contents
    • filename extension options for .page files have been removed, and are replaced:
    • .page files can now contain attribute lines to specify some content-specific options (like sort order).
    • This also means that dots can now be used in page titles
      • A conversion script is provided to make upgrading from 0.5 smoother
      • Backup your data before you run it!

    • nomenu option is back for page.attr files
    • .page file date and id are automatically added as attr lines in the .page files if they are not present yet

  • [0.4 - 0.5]
    • Rewritten Wiki parser, it is now (loosely) based on the wikipedia syntax. Thanks to Jan Fader for some code for this.
      The changes to the page markup itself are too numerous to mention here, see the documentation for the new syntax.
      I have made a little conversion tool to make updating a little easier: This script is called convert_wiki_style.py and can also be found in the tarball.
    • Bugfixes

  • [0.3 - 0.4]
    • Rewritten page creation algorithm
    • Added redefinable _selected_ menu macro
    • Internal pages can now be referenced by id in wiki links
    • Macros now get a Page instance as argument, from which other data can be retrieved
    • Added handling of a page.meta file that contains information about the page (like sort order and id)
    • Page directories can no longer contain meta info (like sorting)
    • Wiki links and images have optional third argument that can contain html info like class or width
    • Added default macros for page navigation
    • Added command line argument to print macro names in the html code (for debugging)

  • [0.2 - 0.3]
    • Macro arguments can be enclosed in parentheses, after which they will accept any character
    • More elaborate menu generation
    • Moved some hardcoded html to (redefinable) macros.
    • Bugfixes
    • Added subset of my site as examples
    • Added some command line options
    • Changed macros will now force pages in which they are used to be regenerated
    • Renamed all uppercase default macros to lowercase

  • [0.1 - 0.2]
    • Moved include files from .setup to default macros
    • Added file date check to see if pages need to be recreated
    • Added error handling on common errors
    • Made directory separators and parent directory references portable
    • Added macro arguments
    • Added some macors
    • Bugfixes

  • [0.0 - 0.1] First version


Back to top

Getting Started

After untarring the tarball, add <dir>/bin to your path or copy bin/clcms.py to a directory in your path.

You can now go to <dir>/examples/documentation and build the tutorial by running

clcms.py

Now wasn't that easy?

Point your browser to file://<dir>/examples/documentation/out/index.html and see the result of all your hard work.

If it did not work, it's not your fault. Just remember that version number.


Back to top

Docs

The documentation is a sort of web site created by clcms itself. It is in the distribution under the directory examples/documentation/ and can be created by entering that directory and running clcms.py.

An online version can be found Here.

Please don't mind the layout. That stuff isn't really my cup of tea :p


Back to top

Todo

The todo list contains at least the following things. It is not really a versioned roadmap since this list resides mostly in my head and changes by the minute.

I have also added some things that aren't on the short-term planning, but only some wild ideas that haven't taken much shape yet. You can probably tell them apart from the rest. Of course, ideas and feedback are always welcome.

If you would like to see any feature mentioned here implemented please let me know, so i'll know what to focus on next. Of course, if you think of something i haven't yet, let me know too.

The most important things are (in random order):

  • Strictness
    In most cases, clcms can produce strict HTML 4. Only in nested lists there can be some errors. This should be fixed.
  • Error detection and feedback
    There's still a lot to improve on error handling i guess.
  • Code cleanup
    The everlasting todo.
  • Documentation
    The other everlasting todo.
  • Page types
    I'd like to add some form of page types, i.e. 'blog style' or 'FAQ' or something like that.
  • File modified date
    The file modified could maybe use some sort of memory, copying them without keeping the original modified dates can often lead to an unexpected page item order.
  • Menu recreation
    Currently, if you add or remove pages, the others are not regenerated, resulting in outdated menus for those pages.
  • Recreation of file check
    Files are only rewritten if one of the .page, .inc or .macro files used are changed. But internally they are still completely built, resulting in a serious performace drop.
  • Frontend
    No idea how or what, but maybe a nice command-line frontend that shows the current page tree to select and edit files.
  • RSS
    Let the generator create an RSS feed from specified pages.
  • sitemap.xml
    I noticed some queries for /sitemap.xml, and googling about it shows it might be a nice addition to be automatically generated too. At first, this would probably be based on the normal menu, but i'm not sure about that yet.