content: %-------------------------------=  --------------------------------------------
  \subsection{Verbatim formatter}
  %-------------------------------=  --------------------------------------------
  
  %if codeOnly || showModuleHeader
  
  > module Verbatim               (  module Verbatim  )
  > where
  >
  > import Control.Arrow          (  (>>>) )
  > import Data.Char
  > import Data.List              (  intersperse )
  >
  > import Document
  > import Auxiliaries
  
  %endif
  
  % - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - -
  \subsubsection{Inline and display code}
  % - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - -
  
  The Boolean flag indicates whether a space should be typeset as \verb*| | (|True|) or not.
  
  > inline                        :: Bool -> String -> Doc
  > inline b                      =  latexs b >>> sub'verb
  >
  > display                       :: Int -> Bool -> String -> Doc
  > display width b               =   trim
  >                               >>> expand 0
  >                               >>> lines
  >                               >>> map (group width)
  >                               >>> map (map (latexs b))
  >                               >>> map splice
  >                               >>> intersperse sub'verbnl
  >                               >>> catenate
  >                               >>> sub'verbatim
  >
  > splice                        :: [Doc] -> Doc
  > splice ds                     =  Text "~" <<>> catenate (intersperse nl ds)
  >     where nl                  =  Text "!" <<>> sub'verbnl <<>> Text "!"
  >
  > latexs                        :: Bool -> String -> Doc
  > latexs b                      =  catenate . map latex
  >     where
  >     latex ' '
  >         | b                   =  Text "\\char32 "
  >     latex c
  >         | c `elem` " \t\n"    =  Text "~"
  >         | isAlphaNum c        =  Text [c]
  >         | otherwise           =  Text ("\\char" ++ show (fromEnum c) ++ "{}")
  
  ks, 11.01.2005: I've added {} after @\char@ to prevent ligatures like
  @--@ from applying.
  
  \NB Comments are \emph{not} typeset in \TeX, hence the name of the
  style. This is really a feature since the enclosed code need not be
  Haskell code.
  
  % - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - -
  \subsubsection{Deleting blank lines and expanding tabs}
  % - - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - -
  
  Delete leading and trailing blank line(s).
  
  > trim                          :: String -> String
  > trim                          =  skip >>> reverse >>> skip >>> reverse
  >
  > skip                          :: String -> String
  > skip ""                       =  ""
  > skip s | all isSpace t        =  skip u
  >        | otherwise            =  s
  >        where (t, u)           =  breakAfter (== '\n') s
  
  Expanding tabs (assuming a tabulator width of $8$ characters).
  
  > expand                        :: Int -> String -> String
  > expand _n []                  =  []
  > expand _n ('\n' : s)          =  '\n' : expand 0 s
  > expand  n ('\t' : s)          =  replicate (n' - n) ' ' ++ expand n' s
  >     where n'                  =  (n + 8) `div` 8 * 8
  > expand  n (c : s)             =  c : expand (n + 1) s
  
  