I've been preoccupied with pagination--a core issue for a device intended to be used for reading, but that does not support fluid scrolling.
Computing pagination isn't terribly difficult: lay out each paragraph, then emit its lines into the current page. If the page is full prior to emitting a line, break the page and emit into a new page. Once all paragraphs have been emitted, the set of page breaks is the pagination. Any change to the layout (e.g. changing the default text style) requires recomputing the pagination.
Accessing the pagination, however, can be more or less difficult depending on the source text. For example, if the source text includes contextual styling information that is not easily available at the beginning of a page, the reader must have some way to reestablish that styling information when jumping to a page.
Because I'm working with relatively tight power and memory constraints, I'd like to be able to load pages directly from non-volatile storage. It is acceptable for pagination to be a semi-offline process (read: it's okay if pagination takes a moment or two). With these characteristics in mind, I've opted to proceed with an approach that translates text from Markdown to a bespoke page description language. Documents will consist of a header that carries a vector of styles, followed by a sequence of commands for drawing each page, followed by an index of page offsets. The only state carried over from page to page is the style information in the header.
For now, a style will consist of a font face and the em size in pixels, and the page description commands will consist of the following:
I think that this should give me enough to render the basic Markdown constructs: block quotes, code blocks, headings, lists, and paragraphs with plain, bold, or italicized text.
For example, a page containing only the paragraph "Far out in the uncharted backwaters of the unfashionable end of the western spiral arm of the Galaxy lies a small unregarded yellow sun. Orbiting this at a distance of roughly ninety-two million miles is an utterly insignificant little blue-green planet whose ape-descended life forms are so amazingly primitive that they still think digital watches are a pretty neat idea." might be represented as:
83 00 85 18 84 00 00 80 3f 46 61 72 20 6f 75 74 20 69 6e 20 74 68 65 20 75 6e 63 68 61 72 74 65 64 20 62 61 63 6b 77 61 74 65 72 73 20 6f 66 20 74 68 65 0a 84 cd cc cc be 75 6e 66 61 73 68 69 6f 6e 61 62 6c 65 20 65 6e 64 20 6f 66 20 74 68 65 20 77 65 73 74 65 72 6e 20 73 70 69 72 61 6c 20 61 72 6d 20 6f 66 20 74 68 65 20 47 61 6c 61 78 79 0a ... 84 00 00 00 00 64 69 67 69 74 61 6c 20 77 61 74 63 68 65 73 20 61 72 65 20 61 20 70 72 65 74 74 79 20 6e 65 61 74 20 69 64 65 61 2e 0c
We'll see how far this gets us.