Markdown
A save format, not an editing model.
Nearly everything I write starts as Markdown, including the page you’re reading. What I’ve come round to is a particular position about where it belongs: in the file, and nowhere else.
Owl takes that literally. The editor’s buffer holds plain text and a separate overlay of styles keyed to character ranges. Markdown is parsed on load and serialized on save, so ** and _ exist in the file and are never shown to you while you type. You get bold text rather than asterisks. It’s closer to a lightweight RTF than to a Markdown editor.
The Round-Trip Is a Contract
If the file is the format, the format has to be stable. So Owl asserts a fixed point rather than describing one: the first save is allowed to normalize loose or foreign Markdown, and every save after that must be byte-identical, with the text and styles surviving the reload unchanged.
The edge cases are all tests. An unclosed **. A bare *, which escapes. ***, which is bold plus a literal star. Italic nested outside bold, which canonicalizes the other way round. A heading whose text happens to look like a list.
Only a subset gets modeled: inline emphasis and three levels of heading. Block quotes, lists, and fenced code are carried through verbatim, so a file that’s been past another editor comes out the far side unmangled.
Authoring Conventions
I write the punctuation in ASCII and let the renderer do the typography: --- for em-dashes, -- for en-dashes, straight quotes and apostrophes throughout. SmartyPants turns them into the real characters on the way out, which keeps the source diffable and keeps me from having to type an em-dash.