Betűk és szöveg

A shumway, ahhoz képest, hogy milyen fiatal projekt, meglepően jól jeleníti meg az Adobe Flash-el készített swf fájlokat.

De swf-et lehet pdfből vagy akár pptből is keszíteni különböző konvertaló programokkal. Ezek kimenetében inkább az egyszerűbb objekutmokat találjuk, mint például a label, viszont ilyen fájlok feldolgozása nem a legfontosabb a shumway core fejlesztőinek.

Betűk

A Flash egy igazi hipszter plugin: már akkor tudott saját betűkészletet használni, mielőtt cool lett. Könnyen volt, hiszen az swf fájl vektorobjektumokat tartalmaz, egy betűkészlet pedig pontosan ez, bináris formában. Az swf fájlba ágyazott betűkészlet tartalmazza a karakterkódokat és az azokhoz rendelt alakzatokat. A flash playernek szüksége van egy indexre is, ami az alakzatok helyét mondja meg bináris swf fájlban (byte offset).

A shumway amikor beolvassa az swf fájlt és találkozik egy betűkészlet-leíró blokkal, akkor az abban található alakzatokból és karakterkódokból legyárt egy opentype betűkészletet, amit data url-el betölt a böngészőbe. így ezzel a betűtípussal már rajzolhatunk a canvasunkra.

A gondok ott kezdődtek, hogy bizonyos swf fájlokba ágyazott betűkészletek látszolag csak zajt tartalmaztak. További vizsgálat után kiderült, hogy a shumway nem használja az indexet és minimum két bájtot olvas. Az ilyen törött fájlokban a betűkészlet tartalmazott egybájtos “betűt” is, amit nem tudott a shumway lekezelni és “elcsúszott” a feldolgozás. A hiba felfedezése után a javítás már egyszerű volt: használni kell az indexet és ha egybájtos betűt talál a feldolgozás, akkor azt átugorjuk.

Amint ez megjavult, a következő probléma az volt, hogy egy opentype és egy swf-be ágyazott betűkészletnek nem ugyanaz az origója. Emiatt a Windowson a betűk fejtetőn jelentek meg, ráadásul kicsúszva a befoglaló dobozukból. Ez a probléma elég könnyen javítható volt: az y-koordinátákat tükrözni kellett.

Szöveg

Ha már jól jelennek meg betűk, a következő lépés a szöveg megjelenítése. Ebben meglepően kevés hiba volt, de az eredeti megjelenítés arra támaszkodott, hogy a betűk (a kijavított más origo miatt) fejjel lefelé jelennek meg. Ez a szövegmegjelenítés transzformációjában könnyen orvosolható volt, csak a translateY paramétert kellett ellenkező előjellel átadni.

Eredmény

összeszedtem egy animgifre a fázisokat, ahogy javítás haladt:

fonts

Az érdekesség a két operációs rendszer betűrajzolása közötti különbség: az OS X nagyon megengedő a betűkészlet hibáival szemben, a Windows viszont ragaszkodik az OpenType szabványhoz.