De Unicode1-standaard specificeert geen lettertype2 — een verzameling van grafische vormen die gliefen3 genoemd worden. In plaats daarvan worden abstracte tekens geïdentificeerd door een uniek nummer (een zogenaamd codepunt4), en worden ook de vormveranderingen vastgelegd die moeten gebeuren afhankelijk van de context waarin een glief gebruikt wordt (bv. het combineren van tekens5, vooraf gecombineerde tekens6, en vaste combinaties van letters en diakritische tekens7). De keuze van het lettertype — dat bepaalt hoe de abstracte tekens van Unicode moeten omgezet worden naar een bitmap- of vectorvoorstelling die op een scherm kan weergegeven worden of afgedrukt kan worden — wordt dan aan de gebruiker overgelaten. Als een lettertype gekozen wordt dat geen glief bevat voor een bepaald codepunt dat in een document gebruikt wordt, dan wordt de glief doorgaans weergegeven als een vraagteken, een vierkantje, of een ander plaatsvervangend teken8.

Computerlettertypes9 gebruiken verschillende technieken om tekens of gliefen weer te geven. Bitmaplettertypes10 gebruiken een raster van stippen — pixels11 genoemd — die van elke glief een afbeelding vormen in elke verschijningsvorm en in elke grootte. Omtreklettertypes12 (ook vectorlettertypes genoemd) gebruiken tekeninstructies of wiskundige formules om elke glief te beschrijven. Lijnlettertypes13 gebruiken een reeks van gespecificeerde lijnen en aanvullende informatie om het profiel te definiëren — de dikte en de vorm van de lijn in een specifieke verschijningsvorm en grootte — die dan samen de weergave van de glief beschrijven.

Lettertypes bevatten ook speciale orthografische regels om meerdere gliefen met elkaar te kunnen combineren tot ligaturen14 (gecombineerde tekens). Besturingssystemen, webbrowsers en andere software die gebruikmaakt van typografie, gebruiken lettertypes om tekst op het scherm of afdrukmedia weer te geven, en kunnen geprogrammeerd worden om die orthografische regels toe te passen. Als alternatief kunnen ze externe scripts gebruiken om de vorm van gliefen aan te passen (rendertechnologie of "smart font"-engines), en ze kunnen ook geprogrammeerd worden om ofwel één groot Unicode-lettertype te gebruiken of om meerdere lettertypes te combineren voor verschillende tekens of talen.

Geen enkel Unicode-lettertype definieert alle tekens uit de meest recente versies van de Unicode-standaard, omdat er steeds meer talen en tekens aan toegevoegd worden, en omdat veelgebruikte lettertypeformaten niet meer dan 65.535 gliefen kunnen bevatten. Dat is ongeveer de helft van de 137.994 tekens uit Unicode 12.1 — de meest recente versie uitgebracht in mei 2019 — die naast 150 moderne en historische schriften15 ook verschillende collecties symbolen en emoji16's bevat. De eerste Unicode-lettertypes met zeer grote tekensets en ondersteuning voor veel Unicode-blokken waren Lucida Sans Unicode17 (1993), Unihan font18 (1993) en Everson Mono19 (1995).

Opgave

Een Unicode-lettertype is een computerlettertype dat Unicode-tekens afbeeldt op gliefen. Daardoor kunnen de gliefen van het lettertype geïdentificeerd worden door codepunten zoals gedefinieerd in de Unicode-standaard. De overgrote meerderheid van de moderne computerlettertypes is gebaseerd op Unicode, zelfs die lettertypes die enkel gliefen bevatten voor één enkel schrift, of die zelfs enkel het standaard Latijnse alfabet ondersteunen. Lettertypes die een breed scala aan Unicode-schriften en Unicode-symbolen ondersteunen, worden "pan-Unicode lettertypes" genoemd. Maar omdat het maximale aantal gliefen dat kan gedefinieerd worden in een TrueType-lettertype beperkt is tot 65.535, kan één enkel lettertype onmogelijk alle individuele gliefen bevatten voor alle Unicode-tekens.

Het tekstbestand unicode.txt20 bevat een lijst van veelgebruikte Unicode-lettertypes die een relatief groot aantal en een breed scala aan Unicode-tekens ondersteunen. Elke regel van het bestand bevat informatie over één lettertype, bestaande uit de volgende twaalf velden die van elkaar worden gescheiden door tabs: i) naam (Font), ii) licentie (License), iii) aantal tekens (Chars), iv) aantal gliefen (Glyphs), v) meest recente versie en publicatiedatum (Version (date)), vi) naam en grootte van het bestand (Filename (size)), vii) lettertypefamilie (Font family), viii) verschijningsvormen (Font weight, style), ix) soort lettertype (Font type), x) soorten schreef21 (Serif style), xi) ontwerper/auteur en auteursrecht (Creator/author (copyright)), en xii) opmerkingen (Notes). Je mag ervan uitgaan dat de velden zelf geen tabs en puntkomma's (;) bevatten.

Gevraagd wordt om — gebruikmakend van de teksteditors vi of vim — een reeks commando's op te stellen die achtereenvolgens de volgende opdrachten uitvoeren. Probeer voor elke opdracht zo weinig mogelijk commando's te gebruiken en zorg er voor dat elk van deze commando's bestaat uit zo weinig mogelijk tekens. De commando's mogen geen programmeerbare filters (bv. awk) gebruiken. Alle opdrachten moeten na elkaar uitgevoerd worden. De opdrachten mogen de eerste regel (hoofding) niet wijzigen, tenzij dit expliciet anders vermeld staat. Ter controle kan je gebruikmaken van de meegeleverde bestanden unicode.i.txt (ZIP22), die telkens de inhoud van het bestand bevatten nadat de $$i$$-de opdracht werd uitgevoerd.

  1. Verwijder de laatste twee velden, ook op de eerste regel. Zo moet

    Font	License	Chars	Glyphs	Version (date)	Filename (size)	Font family	Font weight, style	Font type	Serif style	Creator/author (copyright)	Notes
    Arial	Proprietary	3988	3988	v6.80 (2012-05-11)	arial.ttf (756 KB)	Arial	Medium (Normal), Regular	OTF+TTO	Normal Sans	(2008) Monotype Corporation	Included with Microsoft Windows
    Arial Unicode MS	Proprietary	38917	50377	v1.01 sfnt rev 1 (2002-11-18)	ARIALUNI.TTF (22.1 MB)	Arial Unicode MS	Medium (Normal), Regular	OTF+TTO	Normal Sans	Agfa Monotype Corporation. Monotype Corporation.	Included with Microsoft Office 2013 and earlier versions
    Bitstream Cyberbit	Freeware	32961	29934	v2.0 beta (1998-03-22)	Cyberbit.ttf (12.7 MB)	Bitstream Cyberbit	Medium (Normal), Roman	TTF	Cove	Bitstream Inc.	For non-commercial use only.
    BitstreamCyberCJK	Freeware	30275	28686	v2.0 beta (1998-03-17)	Cyberbit.ttf (12.4 MB)	Bitstream CyberCJK	Medium (Normal), Book, Roman	TTF	Cove	Bitstream Inc.	For non-commercial use only.
    Brampton	OFL	1916	1979	v0.16 (2011-09-22)	Brampton.ttf (622 kB)	Brampton		TTF	Slab serif	Christ Trek fonts	
    …
    

    bijvoorbeeld omgezet worden naar (unicode.1.txt23)

    Font	License	Chars	Glyphs	Version (date)	Filename (size)	Font family	Font weight, style	Font type	Serif style
    Arial	Proprietary	3988	3988	v6.80 (2012-05-11)	arial.ttf (756 KB)	Arial	Medium (Normal), Regular	OTF+TTO	Normal Sans
    Arial Unicode MS	Proprietary	38917	50377	v1.01 sfnt rev 1 (2002-11-18)	ARIALUNI.TTF (22.1 MB)	Arial Unicode MS	Medium (Normal), Regular	OTF+TTO	Normal Sans
    Bitstream Cyberbit	Freeware	32961	29934	v2.0 beta (1998-03-22)	Cyberbit.ttf (12.7 MB)	Bitstream Cyberbit	Medium (Normal), Roman	TTF	Cove
    BitstreamCyberCJK	Freeware	30275	28686	v2.0 beta (1998-03-17)	Cyberbit.ttf (12.4 MB)	Bitstream CyberCJK	Medium (Normal), Book, Roman	TTF	Cove
    Brampton	OFL	1916	1979	v0.16 (2011-09-22)	Brampton.ttf (622 kB)	Brampton		TTF	Slab serif
    …
    
  2. Vervang de tabs als veldscheidingsteken door puntkomma's (;), ook op de eerste regel. We krijgen dan (unicode.2.txt24)

    Font;License;Chars;Glyphs;Version (date);Filename (size);Font family;Font weight, style;Font type;Serif style
    Arial;Proprietary;3988;3988;v6.80 (2012-05-11);arial.ttf (756 KB);Arial;Medium (Normal), Regular;OTF+TTO;Normal Sans
    Arial Unicode MS;Proprietary;38917;50377;v1.01 sfnt rev 1 (2002-11-18);ARIALUNI.TTF (22.1 MB);Arial Unicode MS;Medium (Normal), Regular;OTF+TTO;Normal Sans
    Bitstream Cyberbit;Freeware;32961;29934;v2.0 beta (1998-03-22);Cyberbit.ttf (12.7 MB);Bitstream Cyberbit;Medium (Normal), Roman;TTF;Cove
    BitstreamCyberCJK;Freeware;30275;28686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
    Brampton;OFL;1916;1979;v0.16 (2011-09-22);Brampton.ttf (622 kB);Brampton;;TTF;Slab serif
    …
    
  3. Verwijder alle gepatenteerde lettertypes. Dat zijn de lettertypes waarvan de inhoud van het licentieveld (License) gelijk is aan Proprietary. We krijgen dan (unicode.3.txt25)

    Font;License;Chars;Glyphs;Version (date);Filename (size);Font family;Font weight, style;Font type;Serif style
    Bitstream Cyberbit;Freeware;32961;29934;v2.0 beta (1998-03-22);Cyberbit.ttf (12.7 MB);Bitstream Cyberbit;Medium (Normal), Roman;TTF;Cove
    BitstreamCyberCJK;Freeware;30275;28686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
    Brampton;OFL;1916;1979;v0.16 (2011-09-22);Brampton.ttf (622 kB);Brampton;;TTF;Slab serif
    Cardo;OFL v1.1;2879;2882;v0.099 sfnt rev 0.098999 (2010-05-23);Cardo99s.ttf (706 KB);Cardo;Medium (Normal), Book, Regular;TTF;Cove
    Caslon Roman;BSD-like license;3683;3686;v001.000 (2003-10-23);CaslonRoman.sfd (3.70 MB);Caslon;Roman;TTF;
    …
    
  4. Rangschik de lettertypes lexicografisch volgens het licentieveld (License), waarbij je geen rekening houdt met hoofdletters of kleine letters, en rangschik lettertypes met dezelfde licentie volgens dalend aantal karakters (Chars). We krijgen dan (unicode.4.txt26)

    Font;License;Chars;Glyphs;Version (date);Filename (size);Font family;Font weight, style;Font type;Serif style
    DejaVu Sans;Bitstream Vera license and public domain for additions;5467;5762;v2.32 sfnt rev 2.31999 (2010-08-22);DejaVuSans.ttf (667 KB);DejaVu Sans;Medium (Normal), Book;OTF+TTO;Normal Sans
    Caslon Roman;BSD-like license;3683;3686;v001.000 (2003-10-23);CaslonRoman.sfd (3.70 MB);Caslon;Roman;TTF;
    Bitstream Cyberbit;Freeware;32961;29934;v2.0 beta (1998-03-22);Cyberbit.ttf (12.7 MB);Bitstream Cyberbit;Medium (Normal), Roman;TTF;Cove
    BitstreamCyberCJK;Freeware;30275;28686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
    Y.OzFontN;Freeware;21957;57621;v13.00 sfnt rev 5 Pen-Ji (2010-08-24);YOzRN.TTC (13.5 MB);YOzFontN;Regular;TTC;Any
    …
    
  5. Gebruik een komma (,) om de duizendtallen te scheiden in de velden met het aantal tekens (Chars) en het aantal gliefen (Glyphs). We krijgen dan (unicode.5.txt27)

    Font;License;Chars;Glyphs;Version (date);Filename (size);Font family;Font weight, style;Font type;Serif style
    DejaVu Sans;Bitstream Vera license and public domain for additions;5,467;5,762;v2.32 sfnt rev 2.31999 (2010-08-22);DejaVuSans.ttf (667 KB);DejaVu Sans;Medium (Normal), Book;OTF+TTO;Normal Sans
    Caslon Roman;BSD-like license;3,683;3,686;v001.000 (2003-10-23);CaslonRoman.sfd (3.70 MB);Caslon;Roman;TTF;
    Bitstream Cyberbit;Freeware;32,961;29,934;v2.0 beta (1998-03-22);Cyberbit.ttf (12.7 MB);Bitstream Cyberbit;Medium (Normal), Roman;TTF;Cove
    BitstreamCyberCJK;Freeware;30,275;28,686;v2.0 beta (1998-03-17);Cyberbit.ttf (12.4 MB);Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
    Y.OzFontN;Freeware;21,957;57,621;v13.00 sfnt rev 5 Pen-Ji (2010-08-24);YOzRN.TTC (13.5 MB);YOzFontN;Regular;TTC;Any
    …
    
  6. Het veld met de meest recente versie en de publicatiedatum (Version (date)), en het veld met de naam en de grootte van het bestand (Filename (size)) hebben beide een inhoud van de vorm deel1 (deel2). Splits beide velden in twee velden (deel1 en deel2), zodat deze nieuwe velden ook van elkaar gescheiden worden door puntkomma's. Doe dit ook met de veldnamen op de eerste regel. We krijgen dan (unicode.6.txt28)

    Font;License;Chars;Glyphs;Version;date;Filename;size;Font family;Font weight, style;Font type;Serif style
    DejaVu Sans;Bitstream Vera license and public domain for additions;5,467;5,762;v2.32 sfnt rev 2.31999;2010-08-22;DejaVuSans.ttf;667 KB;DejaVu Sans;Medium (Normal), Book;OTF+TTO;Normal Sans
    Caslon Roman;BSD-like license;3,683;3,686;v001.000;2003-10-23;CaslonRoman.sfd;3.70 MB;Caslon;Roman;TTF;
    Bitstream Cyberbit;Freeware;32,961;29,934;v2.0 beta;1998-03-22;Cyberbit.ttf;12.7 MB;Bitstream Cyberbit;Medium (Normal), Roman;TTF;Cove
    BitstreamCyberCJK;Freeware;30,275;28,686;v2.0 beta;1998-03-17;Cyberbit.ttf;12.4 MB;Bitstream CyberCJK;Medium (Normal), Book, Roman;TTF;Cove
    Y.OzFontN;Freeware;21,957;57,621;v13.00 sfnt rev 5 Pen-Ji;2010-08-24;YOzRN.TTC;13.5 MB;YOzFontN;Regular;TTC;Any
    …
    
  7. Zet alle veldeninhouden tussen dubbele aanhalingstekens, inclusief de veldnamen op de eerste regel. We krijgen dan (unicode.7.txt29)

    "Font";"License";"Chars";"Glyphs";"Version";"date";"Filename";"size";"Font family";"Font weight, style";"Font type";"Serif style"
    "DejaVu Sans";"Bitstream Vera license and public domain for additions";"5,467";"5,762";"v2.32 sfnt rev 2.31999";"2010-08-22";"DejaVuSans.ttf";"667 KB";"DejaVu Sans";"Medium (Normal), Book";"OTF+TTO";"Normal Sans"
    "Caslon Roman";"BSD-like license";"3,683";"3,686";"v001.000";"2003-10-23";"CaslonRoman.sfd";"3.70 MB";"Caslon";"Roman";"TTF";""
    "Bitstream Cyberbit";"Freeware";"32,961";"29,934";"v2.0 beta";"1998-03-22";"Cyberbit.ttf";"12.7 MB";"Bitstream Cyberbit";"Medium (Normal), Roman";"TTF";"Cove"
    "BitstreamCyberCJK";"Freeware";"30,275";"28,686";"v2.0 beta";"1998-03-17";"Cyberbit.ttf";"12.4 MB";"Bitstream CyberCJK";"Medium (Normal), Book, Roman";"TTF";"Cove"
    "Y.OzFontN";"Freeware";"21,957";"57,621";"v13.00 sfnt rev 5 Pen-Ji";"2010-08-24";"YOzRN.TTC";"13.5 MB";"YOzFontN";"Regular";"TTC";"Any"
    …