Extracting Reusable Code
This post was started on 2020-11-19. It was published on 2020-11-19.
After a long hiatus, I’m putting some work into Colophon again. When I left off
some months ago, I had a decently working static site generation setup,
including niceties like syntax highlighting and basic index generation. But a
large part of the functionality was in the pollen.rkt
file for this
website, not in the code for Colophon itself. My hope is that Colophon will be
usable for interesting websites in general, and that it will be possible to get
a usable starting site with a single command. So I spent a couple of hours
pulling out functionality from the website-specific code into Colophon proper.
As part of developing the website, I had written a bunch of helper functions
that generate parts of a page, such as the <head>
and <body>
tags.
The major part of the refactoring was pulling these functions out into the
components
submodule inside of Colophon. In addition, there are some new
utility functions in the predicates
submodule, and a new tags
submodule for smaller functions.
After this refactoring, the pollen.rkt
file for the website only defines
the navigation bar for the site, and exports things from Colophon for the page
templates to work properly. It should now be possible to start a new Colophon
site by just creating templates and pages you want, and importing the Colophon
functionality you need into a pollen.rkt
file (and re-exporting what you
need).
This isn’t quite user-friendly yet. There are a bunch of defaults for the
various components that should be
properly
parameterized. There is also the beginnings of a theme system tied into the
components, that should be pulled out and exposed properly. And there is
currently no user interface to actually set up or build a Colophon site. I’m
hoping to add these features over the next few weeks, so that I can eventually
run a command like raco colophon new
and get a new, but usable, Colophon
site.