I use a bunch of behind-the-scenes technology to get Rikchik to look as nice as it does, and to help keep track of it all. This page describes my system, for the benefit of others wanting to do similar things and for the curious.
The data for the rikchik language is stored in an XML file. This XML file is parsed to create the dictionary pages, the postscript libraries and references, and the component images. The component images are assembled into words and sentences by a CGI script, on the fly.
The data for rikchik is stored in a single large XML file, though I have an "exploded" version scattered across ~300 directories to make it more tractable. As of 5 Chaos 9, 14-Block 7, this XML file is 125K. It's split up into the various components of Rikchik: morphemes, aspects, relations, and collectors. (The symbols such as the numerals are also stored here for convenience.) A lot of this data is definition information for use in the dictionary pages, including the various readings and roles for a morpheme, compound words, and occasionally etymologies. Naturally there's a lot more definition information in the morpheme section.
<glyph> <squiggle d="0" r1="10" x="50" x2="50" y="-30" y2="-70"/> <circle r1="10" x="30" y="-70"/> <circle r1="5" x="75" y="-25"/> <ellarc r="1" a1="270" a2="360" r1="30" r2="40" x="50" y="-40"/> </glyph>
|The glyph definition for Want|
Each individual component also includes a <glyph> section which describes the appearance of that component. Glyphs are made up of tentacles, of which there are 13 types such as "circle", "squiggle", "wicket", and "halfhook". Morphemes each include 4 tentacles, and other components just have 1. Glyphs are laid out on a 100x100 grid, with each kind of component having a certain area available to it. The order of the tentacles in a morpheme indicate which tentacle a rikchik uses to sign each piece of the glyph - this data is used in the cursive libraries.
When I create a new morpheme, I sketch it out on a whiteboard and then start assigning tentacles to it. It's pretty straightforward to type the XML in directly. Then I fill in some of the definition fields, re-compress the XML file from the exploded version, and run the rest of the process to update the various pieces of the system.
The XML master file is kept in "rikchik" order, to allow the dictionary to use that sorting in addition to alphabetical.
The dictionary is maintained using a number of XSL scripts. These create the main dictionary indexes, the sub-pages, etc. They were mostly written by my brother so I don't have much to say about them - they work, and that's good. All the rikchik images that appear in the dictionary use the component images or the word assembly cgi script, described below.
A perl script reads in the xml file and creates a postscript file, rikchik.ps, containing all the components of the language. This file is effectively a rikchik library for the postscript programming language - it doesn't actually draw anything. This file pulls in a library I wrote which knows how to draw each type of tentacle, as well as how to draw the various type styles. I used to maintain this file separately by hand - this way is definitely better.
Another perl script reads the .ps file and creates reference.ps, a document showing each component and its name. It then uses ghostscript to make a pdf version. This file uses the "classic" type style.
Yet another perl script reads in rikchik.ps and draws the component images. Each component in rikchik is rendered into a png file, once for each type style (classic, blunt, and pointy) and each size (1, 2, 3, and 5). The non-morpheme components are also rendered both in black and in their appropriate color for the "learning" mode. The script does this by creating small postscript files that draw the component in the required size, style, and color, and calling ghostscript to render them as images. These component images are put into an organized directory structure. This script takes a while to draw everything, so it's written to allow me to just redraw certain components as needed.
The actual word and sentence images that I use are created on-demand by a perl CGI script using the GD library to combine the component images into full rikchik words. It supports the various sizes and styles, as well as wrapping lines vertically.
A similar script takes the same input and diagrams the sentence or sentences, including dealing with pronomials.