Komplex textlayout (förkortat CTL) eller komplex textrendering syftar på typsättning av skriftsystem i vilka formen på ett grafem beror på andra kringliggande grafem. Termen används inom internationalisering av mjukvara där varje grafem är ett datortecken.
Skriftsystem som kräver CTL kallas ibland för komplexa skriftsystem. Exempel på dessa är den arabiska skriften samt de många skriftsystemen i brāhmī-familjen såsom devanāgarī. Många skriftsystem klarar sig dock utan CTL. Det latinska alfabetet och de kinesiska tecknen (hanzi) kan enkelt typsättas genom att tecknen placeras efter varandra i raka rader eller kolumner. Även i dessa kan det dock finnas alternativa former och andra funktioner (som kursiv text) som kräver CTL.
De huvudsakliga kännetecknen hos skriftsystem som kräver CTL är:
Dock behöver inte alla förekomster av dessa kännetecken betyda att CTL krävs. Det grekiska alfabetet har två kontextkänsliga varianter av bokstaven sigma: ς i slutet av ett ord och σ i övriga fall. Dessa två former lagras dock som två separata datortecken. Unicode använder kodpunkterna U+03C2 respektive U+03C3 och behandlar dem inte som ekvivalenta. Vid sortering och jämförelse bör de betraktas som ekvivalenta av mjukvaran men inte vid typsättning och därför behövs inte heller CTL för att välja rätt form. Med det latinska alfabetet kan man ibland använda kontextkänsliga varianter, om man vill efterlikna skrivstil, där bokstäver kan bindas ihop med varandra. Det är inte så vanligt i datorer och har inte stöd i Unicode utan får göras lite mer oreglerat, t.ex. som Swash.
De flesta mjukvaror för textrendering med stöd för CTL har information om ett flertal skriftsystem inbyggt. De kan därmed rendera dem korrekt även om typsnittet saknar information om hur tecknen ska sättas. Sådan mjukvara kommer vanligtvis i form av ett kodbibliotek. Några exempel på sådana är:
Om mjukvaran saknar instruktioner för ett visst skriftsystem kommer den dock inte kunna rendera det korrekt, något som främst drabbar skriftsystem som används av olika minoriteter. Ett alternativ är då att inkludera instruktionerna i typsnitten istället. Mjukvaran måste i så fall ha stöd för att läsa och följa sådana instruktioner.
Exempel på det senare är Apple Advanced Typography (AAT) och Graphite. Båda namnen används både om instruktionsformatet och om mjukvaran som stödjer det. AAT är tillgängligt på Apples operativsystem medan Graphite finns tillgängligt för Microsoft Windows och Linux.
OpenType-formatet är främst tänkt för system som använder den förstnämnda lösningen (information om layouten i mjukvaran, inte i typsnittet) men det har ändå vissa funktioner som hjälper vid CTL, såsom kontextkänsliga ligaturer. Instruktioner för AAT och Graphit kan bäddas in i OpenType-typsnitt.