Fonthantering
OpenType och xml
Carl-Johan Rosén, ITN, Linköpings universitet
Cecilia Björk, ITN, Linköpings universitet
Table of Contents
Sammanfattning .......................................................................................................... 1
Inledning ................................................................................................................... 1
Teckensnittsstandarder ................................................................................................. 2
OpenType-standarden .................................................................................................. 2
OpenType-specifikationen ............................................................................................ 2
Panose ...................................................................................................................... 3
XML och metadata ...................................................................................................... 4
Applikationen ............................................................................................................. 4
Beskrivning av transformationsprocessen ........................................................................ 4
Beskrivning av klasserna .............................................................................................. 5
Vidareutveckling ......................................................................................................... 5
Svg .......................................................................................................................... 5
Diskussion ................................................................................................................. 6
Referenser ................................................................................................................. 6
Sammanfattning
Stora luckor finns inom området fonthantering. I denna rapport redovisas en utredning kring att utnyttja
metadatan i OpenType-standarden för att möjliggöra sökning och sortering av teckensnitt baserat på utseende, snarare än namn. Här redogörs också för ett verktyg som omvandlar headerns information till
xml-format. Slutligen diskuteras fördelar och nackdelar med detta tillvägagångssätt.
Inledning
Det finns tusentals fonter att välja mellan, men inget bra sätt att hålla reda på alla. De sorteringsverktyg
som finns på marknaden, som Adobe Type Manager och FontBook, utgår ifrån att man själv ska sortera
sina typsnitt, till exempel efter stil, eller genom att man gör portföljer av de typsnitt man brukar använda
tillsammans. Programmet kommer sedan endast ihåg hur denna sortering såg ut. Om man inte använder
ett fonthanteringsverktyg sorteras fonterna helt enkelt i bokstavsordning. Detta leder rimligtvis till att
man använder en ganska begränsad mängd fonter, och innebär även en hel del merarbete för
användaren.
Även när det gäller försäljning av fonter finns stora luckor i sortering och sökning. Oftast förutsätts även
här att kunden själv vet vad fonten heter, eller så får man helt enkelt titta igenom en stor mängd thumbnails eller exempeltexter för att hitta ett typsnitt som passar. När kunden förutsätts veta exakt vad den
letar efter redan innan den kommit in på hemsidan är det rimligt att anta att antalet spontanköp minskar.
Detta borde kunna förbättras, och vi har tittat på hur man skulle kunna använda metadata i OpenTypefonter för att göra ett sökverktyg som söker på fontens utseende, och inte på namn. Vad gäller
försäljning av typsnitt borde detta kunna leda till ett system liknande Amazon.coms: ”Om du gillar detta
typsnitt borde du nog gilla dessa också!” Detta borde rimligtvis leda till nöjdare kunder och ökad
1
Fonthantering
försäljning.
Teckensnittsstandarder
Det finns huvudsakligen tre typer av fonter: TrueType, PostScript typ 1, och OpenType. Adobe utvecklade PostScript typ 1, och den var länge en väletablerad standard. För att undvika att licensavgifter och
annat ständigt var tvunget att betalas till Adobe slog Apple och Microsoft sina påsar ihop och utvecklade
TrueType. 1997 gjorde sedan Adobe och Microsoft gemensam affär av att utveckla en paraplystandard
som inbegriper de tidigare, plus lägger till en massa extra information - OpenType.
En annan typ av font som redan är historia är Multiple Master, utvecklad av Adobe. Det intressanta med
MM-fonter är att man genom relativt enkla handgrepp själv kan påverka typsnittets utseende. Utseendet
kan ändras enligt en rad fördefinierade axlar, som exempelvis vikt eller bredd. MM-fonter används
också för att ersätta enskilda tecken som saknas ur teckensnitt, eftersom man med den tekniken kan imitera originaltypsnittet tillräckligt bra för att skapa ett ersättningstecken (som åtminstone fungerar på
skärm). Eftersom Multiple Master slutade utvecklas redan 1999 kan man dock som sagt konstatera att
dess dagar är räknade.
OpenType-standarden
OpenType skapades 1997, och dess stora fördel är dess förmåga att hantera stora mängder information.
Detta leder exempelvis till bättre kompatibilitet mellan plattformar, och att en enda fontfil kan inrymma
alla världens språk och specialtecken (så länge de finns definierade). De stora uppsättningarna tecken
lagras, på samma sätt som i TrueType, i Unicode.
Att ordet open finns med i namnet indikerar ju att detta är en öppen standard, så är dock inte fallet. Det
är i allra högsta grad kommersiella intressen som ligger bakom. ”Open” syftar på att den täcker in de tidigare standarderna.
Eftersom OpenType täcker in både TrueType och PostScript typ 1, och därför kan ärva deras
egenskaper, finns ingen anledning att tro att man skulle överge OpenType för någon av de äldre modellerna igen. Däremot har standarden fått en del kritik för att enbart vara ett pr-stunt som egentligen inte
innebär några direkta fördelar för användaren. Det har också riktats kritik mot att upphovsmakarna ger
sken av att detta är en öppen standard.
En sak som verkligen talar till OpenTypes fördel är att det kommer att bli basen för ett nytt fontformat i
multimediastandarden MPEG4. Moving Picture Experts Group har godkänt en formell standardisering,
och detta kommer att leda fram till Open Font Format Specification, vilket är en ISO-variant av OpenType. Denna specifikation kommer att finnas allmänt tillgänglig för andra företag som vill utveckla
teckensnitt.
OpenType-specifikationen
OpenTypes specifikation finns att läsa på Microsofts hemsida. Den består av åtta obligatoriska tabeller,
samt 24 valfria. Vilka tabeller som finns med beror dels på vilken typ av teckensnitt det rör sig om (alla
OpenType-teckensnitt är TrueType eller PostScript i grunden) och dels på vilken information som finns
eller önskas göras tillgänglig. I varje tabell finns sedan en massa data, med fördefinierade datatyper och
storlekar.
De tabeller som är obligatoriska för alla teckensnitt är:
cmap - Character to glyph mapping
head - Font header
2
Fonthantering
hhea - Horizontal header
hmtx - Horizontal metrics
maxp - Maximum profile
name - Naming table
OS/2 - OS/2 and Windows specific metrics
post - PostScript information
Om vi exempelvis tittar närmare på hhea, Horizontal Header, visar sig följande information:
Här kan vi till exempel i andra positionen hitta information om teckensnittets underhäng, alltså avståndet
mellan baslinjen och nederkanten i exempelvis bokstaven j.
Panose
Panose är ett system för att i Windows kunna jämföra fonter efter utseende, som redan finns implementerat i OpenType-standarden (i tabellen OS/2). Upp till 65 olika mätvärden kan skickas med fontfilen,
3
Fonthantering
bland annat information om x-höjd, vikt, proportioner och variationer i strecken. Tanken med detta system verkar ligga i linje med vår idé, och en vidareutveckling av detta skulle kunna ge en god sök- och
sorterbarhet för teckensnittet.
XML och metadata
Xml, Extensible Markup Language, erbjuder ett mycket strukturerat och effektivt sätt att presentera den
information som finns lagrad i fontfilens header. Att lagra headern direkt i xml är knappast aktuellt
eftersom det uppskattningsvis skulle kräva omkring tio gånger mer plats än i nuläget. Att däremot, som i
våra försök, definiera tydliga transformer för hur man översätter headerdatan till xml, skulle göra att
man med en enkel applikation lätt skulle få ut ett xml-träd som vore både sök- och sorterbart.
Applikationen
Tanken med applikationen är att extrahera informationen från headerfilen som finns med i en OpenType-fontfil. Denna information lagras sedan i en xml-struktur som i sin tur gör det enkelt att få en
översikt över, samt att söka bland, teckensnittets egenskaper.
Det är uppenbart att denna xml-struktur är betydligt mer användbar än den information headern
ursprungligen består av. Vår ursprungliga tanke var dock att även skapa algoritmer och ett gränssnitt för
en sökfunktion. Då det inte funnits den typ av information vi förväntade oss, och den information som
funnits varit relativt svår att tyda, har vi valt att lägga detta åt sidan och fokusera på xml-strukturen och
teorin.
Beskrivning av transformationsprocessen
Transformationen av informationen i OpenType-dokumentet sker i två steg: inläsning från av OpenType-dokumentet och utmatning till xml-dokumentet. Det förra består av läsning från dokumentet i
block om fasta antal bytes. Med hjälp av specifikationen (på microsoft.com) vet man var i dokumentet
viss information finns, samt med vilken typ av komprimering den är skriven. Med komprimering menas
hur datan i dokumentet skall översättas från en rad binärkod till ett heltal, ett flyttal, en sträng eller något
annat.
Den andra delen, utmatning till xml-dokumentet, sker med hjälp av ett JDOM-träd. Trädet skapas när
programmet startas och fylls med den redan befintliga fontinformationen i dokumentet. Trädet fylls
sedan med den nya fontdatan. Skulle det vara så att det redan finns ett element för den font som just lästs
in raderas det gamla elementet till förmån för det nya. Trädet skrivs sedan till hårddisken.
För att veta vilken information som skall transformeras skapas en transformationsarray. Den innehåller
datans namn, vilken tabell den ligger under, samt på vilken plats den ligger från tabellens början. Programmets kärna löper sedan genom alla dessa transformer, läser in dem och lägger dem i JDOM-trädet.
För att förenkla inläsningsprocessen så läses varje tabell in först när den anropas i transformationsarrayen. Sedan sparas den i minnet och skulle ytterligare information från samma tabell efterfrågas behöver
OpenType-dokumentet inte läsas igen.
De flesta tabeller följer samma struktur. Det ligger oftast ett antal data i rak följd i filen. Men det finns
några undantag, där storleken på datan inte är bestämd i specifikationen. I dessa tabellers första data ges
information om vilken specifikationsversion eller tabellformat som avses, vilket leder till flera möjliga
filstrukturer. (Exempel på detta är cmap, name och post.) Om det är en viss version så står det sedan hur
många records som följer, där ett record är en slags undertabell, eller datastruktur bestående av flera
datatyper. Dessa datatyper måste då läsas in iterativt. (Exempel på detta är name.) Båda dessa nämnda
typer av undantag gör det problematiskt att generellt transformera OpenType-dokument. I prototypen
har problematiska tabeller prioriterats lägre än de med mer rak struktur.
4
Fonthantering
Beskrivning av klasserna
OTMain - Detta är den drivande klassen. Här initieras transformationsarrayen och här finns mainfunktionen som styr transformationsprocessen.
OTTableHeader - Datastruktur för headerinformationen.
OTHeaderReader - Sköter inläsningen av headerinformationen för tabellerna samt annan metainformation om fonten. Denna klass är gränssnittet för att läsa data från OpenType-dokumentet.
OTTableReader - Innehåller strukturbeskrivningarna för att läsa tabellerna från filen. Ett begränsat antal
tabeller är implementerade (post, head, OS/2, name, hhea, maxp), några av dessa ej fullständigt enligt
standarden.
OTRandomAccessReader - Detta är klassen som omvandlar binärdatan till användbara heltal, flyttal och
strängar. Klassen tillhandahåller enkla metoder för var datatyp.
XMLLoader - Läser in xml-dokumentet i ett JDOM-träd.
XMLDocument - Håller koll på att det inte blir några dubletter av fonter och skapar nya fonter till dokumentet.
XMLFont - Tillhandahåller funktioner för att lägga till element i fontelementet, samt en funktion för att
ersätta ogiltiga tecken.
XMLSaver - Skriver JDOM-trädet till hårddisken.
TransformInfo - Datastruktur för transformationsinformation.
Vidareutveckling
Det finns stora möjligheter att ta denna idé vidare. För att få tillräckligt bra information om teckensnittets karaktär kan man tänka sig att följande karaktäristika bör infogas i xml-trädet, antingen via headern,
eller i efterhand direkt i xml-trädet: Versalhöjd, x-höjd, underhäng, bredd, grundstreck, hårstreck (bredd
och orientering), storlek på inre form relativt hela bokstaven, växellinjens tjocklek relativt normalt
streck, växellinjens orientering, bredd och höjd på serifer samt även orientering på sneda serifer.
Hur denna information ska utvinnas från teckensnittet kan diskuteras. Det skulle kunna ske manuellt,
antingen vid skapandet av typsnittet, eller senare då headerinformationen läggs in. Ett annat intressant
alternativ är en intelligent lösning som själv läser av tecknens karaktär med hjälp av bildbehandling. Ett
exjobb som kombinerar bildbehandling och fonthantering pågår just nu på ITN, och det ska bli
spännande att se vad man kommer fram till för resultat.
Svg
Ett annat alternativ är att använda sig av svg. I specifikationen finns glyfdata med information om antal
kontrollpunkter för typsnittet. Detta är förmodligen vektordata som skulle kunna gå att läsa ut som svg
för att kunna visa upp typsnittet. Och om denna data skulle kunna vara tillräcklig för att visa typsnittet
måste det även innehålla tillräckligt mycket information för att kunna jämföra teckensnitt med varandra.
I dagsläget är dock korrekt fontrepresentation i svg-filer ett problem, eftersom svg jobbar med exakt positionering, vilket ställer oerhört stora krav på teckensnittet. Detta borde innebära att den data som finns
att tillgå är begränsad. Det är hur som helst ett intressant område och här borde stora
utvecklingsmöjligheter finnas.
5
Fonthantering
Diskussion
Det verkar finnas en stor lucka när det gäller vettiga sökverktyg för teckensnitt. Det finns en stor tillit till
att användaren ska besitta stora kunskaper, och ha tid att själv sortera sina typsnitt. Stora möjligheter till
ökad fontförsäljning och nöjdare användare borde rimligtvis ligga i en bättre lösning för sökning och
sortering. Varför detta inte redan finns är svårt att säga. Men det är tydligt att det inte är helt trivialt, då
flera lösningar figurerat i industrin men ingen blivit riktigt använd och effektiv. Vår lösning skulle
kunna ge ett hyfsat bra resultat utan större arbetsinsats, och skulle dessutom sedan lätt kunna förbättras.
Den stora omedelbara nyttan med en xml-struktur för specifikationen är givetvis överskådlighet.
Innan vi påbörjade projektet hade vi ganska höga förväntningar på vad vi skulle göra, och förväntade oss
att resultatet skulle bli en färdig applikation med tillhörande gränssnitt för sökning och sortering av teckensnitt. Det stod dock ganska snart klart att den information som finns i headern inte räcker till för att
åstadkomma detta - det är därför denna lösning inte redan finns. Det skulle även innebära betydligt mer
jobb än vad som var planerat för det här projektet. Sammanfattningsvis är vi ändå nöjda med det vi kommit fram till, vi har lärt oss massor om typsnitt, och arbetat vidare på en idé som vi tror har potential.
Referenser
Microsoft Typography - OpenType Specification: http://www.microsoft.com/OpenType/OTSpec/
Poznan
PR
(om
Open
Font
tp://www.chiariglione.org/mpeg/meetings/poznan05/poznan_pr.htm
Format):
ht-
050818MPEGOpenT.pdf (Pressmeddelande, ”OpenType blir teckensnittsstandard i MPEG4”): http://www.adobe.se/aboutadobe/pressroom/pr/aug2005/050818MPEGOpenT.pdf
Fonts - 1.1 - 20030114 (W3C Recommendations): http://www.w3.org/TR/SVG/fonts.html
Monotype Imaging: Panose Guide (Specifikation för och information om Panose-systemet): http://www.panose.com/ProductsServices/pan1.aspx
Kaj Johansson, Peter Lundberg, Robert Rydberg. Grafisk kokbok 2.0 - Guiden till grafisk produktion.
Arena/Kapero. 2001.
Christer Hellmark. Typografisk handbok. Ordfront Förlag. 2000.
6