% Exemple de l'utilisation de noweb pour la génération de documentation, % programmation litéral et donnant un rendu facile à suivre ainsi que le % code prêt à l'emploi. % Le fichier count.rb.nw avec la syntaxe noweb mélangée à celle de LaTeX \documentclass[10pt]{article} \usepackage{noweb} \noweboptions{smallcode,longchunks} \begin{document} \pagestyle{noweb} @ \paragraph{Introduction} Voici [[count.rb]] notre premier script Ruby\footnote{langage inventé par Matz et sorti pour la première fois en 1994 au Japon} qui fera usage des tables de hachage [[Hash]] ainsi que de la notion d'itérateur par la méthode [[each]]. Nous utiliserons cette méthode pour lire le contenu d'un fichier. <>= FILENAME = "foo.txt" @ %def FILENAME @ Nous allons bien évidemment ouvrir ce fichier afin de pouvoir ensuite en lire le contenu, utilisons [[open]]. <>= fd = open(FILENAME, 'r') @ %def fd @ Nous pouvons distinguer [[fd]] qui n'est autre que le descripteur de fichier récupéré. Nous allons itérer sur ce fichier à l'aide de la méthode [[each]] et stocker le nombres de lignes identiques dans un [[Hash]]. <>= hash = Hash.new(0) fd.each { |line| hash[line] += 1 } @ %def hash line @ Constatons la présence de [[line]] qui fait office de variable temporaire pour stocker, l'une après l'autre les lignes du fichier, désigné par le descripteur [[fd]]. @ Il ne nous reste plus qu'à afficher nos résultats, en itérant sur [[hash]] et ses clés et valeurs [[k]] et [[v]]. <>= hash.each { |k,v| puts "#{k} vu #{v} fois" } @ %def k v puts @ Nous n'oublierons évidemment pas l'entête, [[shebang]] de notre script. <>= #!/usr/bin/ruby <> <> <> <> exit 0 @ \paragraph{Defined Chunks}\par\noindent \nowebchunks \paragraph{Index}\par\noindent \nowebindex @ \end{document} % Nous devrons ensuite lancer la commande générer le code source % "réorganisé" et utilisable tel quel. % L'argument spécifié après -R n'est autre que la racine, le Root, % ici le chunk/morceau <>= définit en fin de document. %% notangle -Rcount.rb count.rb.nw > count.rb % lançons le générateur du document LaTeX %% noweave -delay -index count.rb.nw > count.tex % Il ne nous reste plus qu'à ajouter les options et packages % habituels: babel, inputenc et hyperref par exemple