Onder Amerikaanse uitgevers van boeken (maar niet bij de uitgevers van kranten) is het gebruikelijk om "belangrijke" woorden in titels en koppen met een hoofdletter te schrijven. Het is een oude vorm om nadruk te leggen op bepaalde delen van een tekst, vergelijkbaar met het gebruik van een groter en vetter lettertype voor titels in moderne vormgeving. Deze typografische conventie wordt doorgaans title case genoemd.

title case

De regels die aangeven welke woorden met een hoofdletter moeten beginnen zijn niet gebaseerd op een duidelijk grammaticaal onderscheid en er bestaat ook geen universele standaard. De regels zijn eerder arbitrair en durven nogal uiteenlopen tussen verschillende stijlgidsen, alhoewel de meeste wel een aantal geijkte vuistregels gebruiken. Zo zullen de meeste stijlgidsen alle woorden met een hoofdletter schrijven. Een aantal woorden vormen hierop echter een uitzondering en worden nooit met een hoofdletter geschreven tenzij ze het eerste woord in de zin vormen. Doorgaans worden lidwoorden (a, an, the), voorzetsels (in, to, at, …) en voegwoorden (and, but, yet, …) niet met een hoofdletter geschreven, tenzij aan het begin van een zin.

Opgave

Schrijf een functie titleCase die een gegeven zin omvormt naar title case. Hierbij moet telkens de eerste letter van elk woord omgezet worden naar een hoofdletter. De overige letters van het woord moeten hun originele schrijfwijze behouden. De woorden van een zin worden gedefineerd als de langste mogelijke opeenvolging van letters, aanhalingstekens (') en koppeltekens (-). De gegeven zin moet als eerste argument aan de functie doorgegeven worden. De functie heeft ook een tweede optionele parameter, waaraan een lijst van woorden kan doorgegeven worden. Woorden uit deze lijst moeten nooit omgevormd worden zodat ze met een beginhoofdletter geschreven worden, tenzij ze het eerste woord van een zin vormen. Om te bepalen of een gegeven woord tot de zin behoort, mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. De omgevormde zin moet door de functie teruggegeven worden.

Voorbeeld

>>> woorden = ['above', 'about', 'across', 'against', 'along', 'among', 'around', 'at', 'before', 'behind', 'below', 'beneath', 'beside', 'between', 'beyond', 'by', 'down', 'during', 'except', 'for', 'from', 'in', 'inside', 'into', 'like', 'near', 'of', 'off', 'on', 'since', 'to', 'toward', 'through', 'under', 'until', 'up', 'upon', 'with', 'within', 'a', 'the', 'an', 'and', 'but', 'or', 'nor', 'yet', 'so', 'to']

>>> titleCase('Great minds think of great things.')
'Great Minds Think Of Great Things.'

>>> titleCase('Great minds think of great things.', woorden)
'Great Minds Think of Great Things.'

>>> titleCase("You and I share the same DNA.", woorden)
'You and I Share the Same DNA.'