Noweb
# Noweb

Noweb (Eigenschreibweise: noweb) ist ein Programmierwerkzeug für Literate programming, das in den Jahren 1989 bis 1999 von Norman Ramsey entwickelt wurde. Entwurfsziele waren Einfachheit, einfache Erweiterbarkeit und Sprachunabhängigkeit.

Wie in WEB und CWEB sind die Hauptkomponenten von noweb zwei Programme: „Notangle“, das aus den Quelltexten 'Maschinen'-Quelltext extrahiert, und „noweave“, das formatierte druckbare Dokumente produziert.

Noweb unterstützt TeX-, LaTeX-, HTML- und Troff-Backends und arbeitet mit jeder Programmiersprache. Außer Einfachheit ist dies der Hauptvorteil gegenüber WEB, das verschiedene Versionen benötigt, um andere Programmiersprachen als Pascal zu unterstützen. (Daher war CWEB notwendig, das C und ähnliche Sprachen unterstützt.)

## Nowebs Input

Ein Noweb-Inputtext enthält Programmquellcode unterbrochen durch Dokumentation. Er besteht aus sogenannten Chunks, die entweder Dokumentations-Chunks oder Code-Chunks sind.

Ein Dokumentations-Chunk beginnt mit einer Zeile, die mit einem At-Zeichen (@) gefolgt von einer Leertaste oder einem Zeilenvorschub beginnt. Ein Dokumentations-Chunk hat keinen Namen. Dokumentations-Chunks enthalten normalerweise LaTeX, aber man kann auch HTML, einfaches TeX oder Troff verwenden.

Code-Chunks sind benamt. Ein Code-Chunk beginnt mit

in einer eigenen Zeile. Die doppelte linke spitze Klammer (<<) muss in der ersten Spalte stehen.

Jeder Chunk wird durch den Anfang des nächsten Chunks beendet. Wenn die erste Zeile einer Datei nicht den Anfang eines Chunks markiert, wird davon ausgegangen, dass sie die erste Zeile eines Dokumentations-Chunks ist.

Code-Chunks werden nicht besonders behandelt durch die Werkzeuge von Noweb; sie können in beliebiger Reihenfolge platziert werden und werden, wenn nötig, in richtiger Reihenfolge zusammengefügt. Chunk-Verweise im Code werden aufgelöst und der ganze erwünschte Quellcode extrahiert.

### Beispiel eines einfachen Noweb-Programms

Dies ist das Beispiel eines einfachen „hello world“- Programms mit Dokumentation:

Angenommen, der vorstehende Code befindet sich in einer Datei namens hello.nw, dann lautet der Befehl, ihn in ein menschenlesbares Dokument im HTML-Format zu extrahieren:

noweave -filter l2h -index -html hello.nw | htmltoc > hello.html

htmltoc fügt ein Inhaltsverzeichnis („table of content“) hinzu.

… und ins LaTeX-Format:

noweave -index -latex hello.nw > hello.tex

Um den Quellcode zu extrahieren:

Zuerst den C-Code:

notangle -Rhello.c hello.nw > hello.c

… dann PHP:

notangle -Rhello.php hello.nw > hello.php

Und nun das Ganze in HTML:

HTML extrahieren (und Inhaltsverzeichnis erzeugen) durch

noweave -index -html hello-html.nw |htmltoc > hello.html

## Kompatibilität

Noweb legt ein bestimmtes Dateiformat fest und eine Datei verschachtelt wahrscheinlich drei verschiedene Formate (Noweb, LaTeX und die verwendete Programmiersprache). Dies wird durch andere Softwareentwicklungswerkzeuge nicht verstanden und konsequenterweise schließt die Verwendung von Noweb den Gebrauch von UML oder Codedokumentationswerkzeugen aus.

