\chapter{Formater du texte}

Manipuler du texte, afin de le modifier, de le mettre en forme,
de le présenter de façon harmonieuse, tout le monde l'a déja
fait, avec des outils divers et variés et des résultats parfois
(ou souvent) hasardeux.

Heureusement, Unix\index{Unix} a été conçu quasiment dès
le départ avec tout ce qu'il faut pour traiter et
mettre en page du texte.

\section{fmt et ses copains}
\index{fmt}\index{tr}

Nous allons voir quelques outils de base, simple et efficace,
mais qui ont parfois quelques limitations. Le premier est
\texttt{fmt} qui permet de remettre en forme un texte.

\begin{verbatim}
tth@plop:~/Ecriture/Ordinateur$ cat texte.txt 
Ce morceau de texte n'est pas
bien 
formaté.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Phasellus nunc sapien, porta id pellentesque at, elementum et felis.
Curabitur condimentum
ante in metus
iaculis quis congue diam commodo.
tth@plop:~/Ecriture/Ordinateur$ fmt texte.txt 
Ce morceau de texte n'est pas bien formaté.

Lorem ipsum dolor sit amet, consectetur adipiscing elit.  Phasellus
nunc sapien, porta id pellentesque at, elementum et felis.  Curabitur
condimentum ante in metus iaculis quis congue diam commodo.
\end{verbatim}

%-------------------------------------------------------------

\section{La famille \texttt{roff}}
\index{roff}\label{roff} \index{groff}\index{troff}

%
%  https://linuxfr.org/users/karchnu/journaux/redecouverte-roff
%  https://pjfichet.github.io/utroff/
%  https://allthingsopen.org/articles/linux-and-unix-experiment-part-2

\textbf{Roff} est l'outil qui a permis à quelques hackers légendaire
de justifier auprès de leur hiérarchie le développement d'une machine
de jeu, il est donc légitime d'en parler, non ?

Après quelques minutes d'expérimentation, un premier souci arrive%
\footnote{Mais qui est peut-être causé par l'ancienneté de mon système ?}.
Il semble bien que \texttt{groff} ne sache pas lire les fichiers
encodés en \textbf{utf8}\index{utf8}. Il faut donc utiliser
un hack avec \texttt{recode} en prenant bien soin d'utiliser
une redirection vers \texttt{stdin} comme ceci :

\begin{verbatim}
 < $BASENAME.txt recode utf8..latin1 | groff -Tutf8
\end{verbatim}

D'un autre coté, c'est \texttt{roff} qui est utilisé pour formater
les pages du manuel Unix. La documentation, c'est important.
C'est pour ça que j'en cause page \pageref{chap:manpages}.

Voyons rapidement un exemple minimum compilable\index{EMC},
le fichier
\texttt{premier.roff}~:

\lstinputlisting{code/roff/premier.roff}

Il y a deux choses différentes ici : les instructions de formatage
et le texte en lui-même.
Une instruction est placée en début de ligne.
Elle commence par un point, et est constituée de deux lettres,
eventuellement suivie de paramètres.
Nous avons \texttt{.ti} (\textsl{temporary indent})
qui gère l'indentation de la ligne qui suit,
et \texttt{.sp} (\textsl{spacing})
qui va sauter une ou plusieurs lignes.

Après compilation par la commande
"\texttt{nroff -Tutf8 < premier.roff > premier.text}",
nous obtenons ce résultat~:

\begin{verbatim}
            hello world.

Ceci est le premier exemple avec nroff.


je vais essayer quelques variations de mise en page en jouant sur
les diverses marges, puis explorer les "mises en avant" comme  le
gras,  l’italique, le soulignement, toussa.  Ensuite il me faudra
solutionner le souci avec UTF8 :(
\end{verbatim}

On peut dire que c'est un bon début, avec juste deux commandes,
on a déja un résultat visible.
Voyons maintenant quelques autres possibilités du roff de base.




Mais une mise en page un peu
avancée peut devenir vite fastidieuse avec ces instructions
de bas niveau.

\subsection{eqn}

\begin{quote}
\texttt{eqn} compiles descriptions of equations embedded within troff
input files into commands that  are  understood  by troff.
\end{quote}

\subsection{tbl}

\begin{quote}
\texttt{tbl} compiles descriptions of tables embedded within troff
input files into commands that  are  understood  by troff.
\end{quote}

\subsection{pic}

\begin{quote}
\texttt{pic} compiles descriptions of pictures embedded within troff
input files into commands that  are  understood  by troff.
\end{quote}

\subsection{Autres trucs...}

\texttt{colcrt} : filter nroff output for CRT previewing

%-------------------------------------------------------------
\section{yodl}
\index{yodl}

\begin{quote}
Yodl is a package that implements a pre-document language and tools
to process it.  The idea of Yodl is that you write up a document in a
pre-language, then use the tools (e.g. yodl2html) to convert it to some
final document language.  Current converters are for HTML, man, LaTeX SGML
and texinfo, a poor-man's text converter and an experimental xml converter.
\end{quote}

%-------------------------------------------------------------
\section{zoem}
\index{zoem}

General-purpose macro/programming language for transforming text

\begin{quote}
Zoem is a language for transforming text. It supports the creation of
light-weight mark-up languages as macro packages built on top of zoem.
PUD (Portable Unix Documentation) provides two such mini-languages and
is shipped with zoem.  The PUD languages are for generating manpages and
FAQ documents in both HTML and troff.
\end{quote}

