A small static wiki generator in C
Go to file
Nat 90f1b0d8dd
idk why this works but I can now build on debian :)
2023-06-20 09:15:05 -07:00
.gitignore Replace titleMap with pageMap 2023-01-19 15:33:16 -08:00
LICENSE add license 2023-01-16 17:17:18 -08:00
Makefile idk why this works but I can now build on debian :) 2023-06-20 09:15:05 -07:00
README.md Fix minor typo in the README 2023-06-20 08:57:17 -07:00
calathea.c Make incoming link list display none if there's nothing 2023-01-20 18:48:32 -08:00

README.md

calathea v1.0-beta

calathea is a small C program used to generate static wikis. It takes a directory of Common Markdown pages with [[wikilinks]] and renders them to HTML. The output is a flat directory of HTML pages where the wikilinks are converted to relative links.

This is also my first full, complete project written entirely in C, which has proved to be a serious trial by fire in learning how to effectively work with zero-terminated strings. There will likely be memoryleaks and comments that over explain every line of code.

features

  • Rendering wikilinks
  • Ability to keep track of incoming links
  • Named wikilinks (i.e. [[link title|actual page]])

installation

This tool requires cmark to be installed. Once that's set up, clone the repository and run:

$ make
$ make install

If GCC complains it can't find cmark, then try running ldconfig. If it still doesn't work, then run echo $LD_LIBRARY_PATH. If it doesn't show anything, you've got to add the right directory to the path, i.e.,

$ export LD_LIBRARY_PATH=/usr/local/lib64

Or wherever it got installed as per the output of running make install for cmark.

usage

To see a list of options, run:

$ calathea --help

Running calathea builds pages (by default, any filies in ./pages) to HTML files outputted in the specified output directory (by default, ./build). To do this, it renders the pages and inserts them into your template file (by default, ./template.html).

When building the files, calathea will look for two pseudo-Moustache templates: {{content}} and {{incoming}}. {{content}} will be replaced with the page content and {{incoming}} will be replaced with an HTML ul list of links to all pages that link to the given page.

The first line of every file in your pages directory should just be the title of the page. For example:

Page Title
Here is some page content

The content of the above page will be "Here is some page content" and the page title will be "Page Title". You can then link to it from other pages with [[page title]].