groff: Leading Spaces Traps

 
 5.24.5 Leading Spaces Traps
 ---------------------------
 
  -- Request: .lsm macro
  -- Register: \n[lsn]
  -- Register: \n[lss]
      Set a leading spaces trap.  'gtroff' executes MACRO when it
      encounters leading spaces in an input line; the implicit line break
      that normally happens in this case is suppressed.  A line
      consisting of spaces only, however, is treated as an empty line,
      possibly subject to an empty line macro set with the 'blm' request.
 
      Leading spaces are removed from the input line before calling the
      leading spaces macro.  The number of removed spaces is stored in
      register 'lsn'; the horizontal space that would be emitted if there
      was no leading space macro is stored in register 'lss'.  Note that
      'lsn' and 'lss' are available even if no leading space macro has
      been set.
 
      The first thing a leading space macro sees is a token.  However,
      some escapes like '\f' or '\m' are handled on the fly (see See
      Gtroff Internals, for a complete list) without creating a token
      at all.  Consider that a line starts with two spaces followed by
      '\fIfoo'.  While skipping the spaces '\fI' is handled too so that
      groff's current font is properly set to 'I', but the leading space
      macro only sees 'foo', without the preceding '\fI'.  If the macro
      should see the font escape you have to 'protect' it with something
      that creates a token, for example with '\&\fIfoo'.