Noweb
Z Wikipedii
noweb to wolny (wolny jak słowo) zestaw narzędzi do 'programowania piśmiennego', (ang. literate programming) stworzony w latach 1989-1999 przez Normana Ramseya [1], z założenia prosty, łatwy do rozbudowy i obsługujący dowolne języki programowania.
Podobnie jak w systemach WEB i CWEB głównymi programami/składnikami noweb są: 'notangle', który ekstrahuje kod źródłowy programu, oraz 'noweave', który przetwarza wejście na 'drukowalną' dokumentację.
noweb standardowo potrafi tworzyć dokumenty w formatach TeX, LaTeX, HTML oraz troff. Poza prostotą, możliwość użycia dowolnego języka programowania stanowi główną przewagę nad WEB, który to potrzebował przeróbek by wspierać języki programowania inne niż Pascal. W celu umożliwienia używania C oraz podobnych języków powstał projekt CWEB.
[edytuj] Plik wejścia dla noweb
Plik przetwarzany przez programy noweb składa się z kawałków (zwanych z angielska chunks) kodów źródłowych poprzeplatanych z dokumentacją.
Kawałki dokumentacji są zwykle pisane z użyciem składni LaTeX, jednak łatwo można użyć dowolnego innego formatu. W pliku źródłowym rozpoczyna je znak '@', po którym nastepuje spacja lub koniec linii.
Kawałki kodu w pliku źródłowym mogą być umieszczone w dowolnej kolejności, a notangle w razie potrzeby łączy je razem, układa w odpowiedniej kolejności, rozwija odwołania i kopiuje (prawie) bez zmian na wyjście. W pliku źródłowym rozpoczyna je nazwa danego kawałka ujęta w znaki << oraz >>=.
[edytuj] Przykładowy program
Poniższy plik stanowi prawidłowe 'wejście' dla narzedzi noweb:
@ \chapter{Hello world} Dziś był dobry dzień na napisanie jakiegoś kodu. Zacząłem od pisania `Hello World' w języku C: <<hello.c>>= /* <<licencja>> */ #include <stdio.h> int main(int argc, char *argv[]) { printf("Hello World!\n"); return 0; } @ ..potem przyszła pora na PHP: <<hello.php>>= <?php /* <<licencja>> */ echo "Hello world!\n"; ?> @ \section{Licencja} Jeden z prawnie-świadomych kolegów przypomniał o licencji. Oto ona: <<licencja>>= This work is placed in public domain. Te programy umieszczam w domenie publicznej. Możesz z nimi robić co zechcesz. @
Przyjmując, że powyższy kod znajduje się w pliku 'hello.noweb', polecenie produkujące dokumentację w formacie HTML wygląda tak:
noweave -filter l2h -index -html hello.noweb | htmltoc > hello.html
..a w formacie LaTeX:
noweave -index -latex hello.noweb > hello.tex
Kody źródłowe programów ekstrahujemy poleceniami:
notangle -Rhello.c hello.noweb > hello.c
notangle -Rhello.php hello.noweb > hello.php