Each To His Own Taste

I’ve been quiet for the last week for several reasons. First, I had a slew of all-day meetings this week (what fun!) which generally left me feeling like nothing much at the end of the day. Productive, but…. Second, Metroid Prime 3 came out this week, and so that’s been taking some of what brain cells are left.

But mostly I’ve been focussing on Notebook this week. In late Spring I got involved in revamping how Notebook handles User Preferences, which are trickier than they might seem. Just allowing the user to edit the preferences (apart from making the preference settings actually do anything) is time-consuming; and I didn’t like the way it looked in Notebook v2.1.3, so I had to redo most of that.

But that was, in most ways, the easy part. The tricky thing in Notebook v3 is that it has a plugin architecture. As delivered it will support two or three different flavors of markup, and it will be possible to add support for new kinds of markup just by dropping in new plugins. Even the stock markup types are supported by plugins; they just happen to be plugins delivered with the software.

The tricky thing about plugins is that they aren’t part of the application code; yet they have preferences of their own. I needed to provide a way for the plugins to save their preferences in the application’s preferences file, and also I needed to provide a way for the user to edit plugin preferences.

I’ve been working on this in a desultory fashion for about the last month; and finally, after all this time, I have a set-up I’m reasonably pleased with. The application is finally using my new renderer plugin for standard Notebook markup to render pages; and I’m poised to make Notebook’s pageviewer check each page’s markup type and pick an appropriate renderer. This will be Way Cool, and will open up broad new frontiers. Among other things, once this is in place I can begin to experiment with new kinds of markup and new ways of rendering pages–i.e., I can begin to think about supporting tables and other significant markup changes without breaking existing pages.

Woo-hoo!