[squeak-dev] fonts, characterscanners and dead primitive 103

tim Rowledge tim at rowledge.org
Mon Sep 2 05:24:08 UTC 2013


I've been trying to sort out mantis-1650 and siblings; oh boy what fun.

Basically at some point the shape of CharacterScanner was changed so that primitive 103 could no longer work; nowadays we waste time in starting up the primitive and never doing anything but failing it. The fallback code is pretty ugly too, though I have a few small improvements for it. We can't reasonably 'fix' the primitive since it is required to support older images, in particular Scratch on the Pi. Anyone doing something that compromises *that* will get a quiet visit from The Boys. We *could* add a new primitive, of course. It's also possible that for a lot of modern machines running Cog it might not be worth it - but not all machines are cogged nor fast.

Part of the complication is that we have rather lot of font related classes these days and not all of them are even subclasses of AbstractFont. So far as I can tell the major change was due to an attempt to handle fonts that can have character pair kerning, which looks like only FreeTypeFont. All the others are wasting time both through losing the primitive support and pointlessly finding out that pair-kerning does nothing new. Oh and FT2Face seems to be off on its own for some reason I haven't discerned as yet.
Obvious question - who is most up to speed with what the hell Fonts are up to these days? I have some Questioning Instruments warming up for you…

MultiCharacterScanner brings in a whole new level of insanity, not least because it uses identical code including the pointless call of the primitive - and the two senders of these two methods are also (effectively) identical. And do, just for grins, take a look at the only reference to MultiCharacterScanner - FreeTypeFontProvider class>initialize. Oh my. And let's consider references and uses to other classes in that hierarchy - in NewParagraph>characterBlock* MultiCharacterBlockScanner is used for WideStrings but in Paragraph>composeAll it is used for both byte strings and wider strings. And then there is GrafPort>displayScannerForMulti:….

How have we got into such a mixed and messy state? Did some experiment get partially worked on and forgotten? Surely nobody has deliberately made it so convoluted?

tim
--
tim Rowledge; tim at rowledge.org; http://www.rowledge.org/tim
Strange OpCodes: CLOUT: Call Long-distance On Unused Telephone




More information about the Squeak-dev mailing list