Monday, November 04, 2019

I Didn't Know It Was This Hard

Get a few technical writers together and the subject will inevitably turn to flaws in the tools that they use. "Why is justification in Word so crappy?" or "You'd think that FrameMaker could do veritical text by now." You get the idea.

A lot of the complaints involve the discrepancies between what the writer sees on screen and the final output, be it another on screen format like HTML or print. I've always wondered why, with modern high-resolution displays, that what you see on screen didn't match the final output. Naively, I thought that rendering text was easy, or at least a problem that had pretty much been solved. I was wrong. 

A couple of recent articles, summarized in this post on Boing Boing, explain why it's so complicated.  

First there's Alex Beingessner's article, Text Rendering Hates You. This is the article's table of contents:
1 Terminology
2 Style, Layout, and Shape All Depend On Each Other?
3 Text Isn't Individual Characters
3.1 Text Overlaps
3.2 Style Can Change Mid-Ligature
4 Emoji Broke Color and Style
5 Anti-Aliasing Is Hell
5.1 Subpixel Offsets Break Glyph Caches
5.2 Subpixel-AA Isn't Composable
6 Esoterica
6.1 Fonts Can Contain SVG
6.2 Characters Can Be Too Damn Big
6.3 Selection Isn't A Box, And Text Goes In All The Directions
6.4 How Do You Write That You Can't Write?
6.5 Style Is Part of The Font (Except When It's Not)
6.6 There's Is No Ideal Text Rendering
7 Additional Links
Admittedly, many of the issues he describes have to do with non-English languages, including those that read right-to-left, and have cursive or ideographic characters, but anyone writing a program with an international audience will have to deal with those.

Then, what do you do if the user can edit your painfully rendered text? Robert Lord describes the complexities of editing text in Text Editing Hates You Too.  Just for a start:
That’s right, the Windows text input APIs contain 128 interfaces. I’m pretty sure there are also eight (8!) different types of locks to fix concurrency issues, although I honestly haven’t read their documentation, so don’t quote me on that. Anyway, this engineer I heard about spent a year and a half (full-time!) attempting the upgrade, and in the end, their efforts ended in failure. They ended up staying on the legacy API.
I used to have this fantasy where I'd get a few tech writer friends together in a fancy resort (with good internet access) and we'd spend a week or two designing the field's ultimate FrameMaker/Word replacement.

It's a good thing I didn't waste my money. 

No comments: