Provided by: libbobcat-dev_6.04.00-1ubuntu3_amd64 bug

NAME

       FBB::OFoldBuf - Folds long lines written to ostream

SYNOPSIS

       #include <bobcat/ofoldbuf>
       Linking option: -lbobcat

DESCRIPTION

       FBB::OFoldBuf  is  a  specialization  of  FBB::OFilterBuf  folding  long lines written to an std::ostream
       object. The OFoldBuf writes the (folded) lines to a second  ostream  (the  destination  stream  which  is
       either used by or opened by the OFoldBuf object).

       Internally  the  OFoldBuf defines its actions using a little finite state automation distinguishing three
       states (INDENT, WS and NON_WS) and three character categories (\n, other white space characters  (space),
       and non-space characters). The nine combinations resulting from these two sets are discussed below.

       OFoldBuf  objects  will never fold lines in the middle of series of non-blank characters (called a `word’
       below) but will always break a line at a white space character. The resulting lines will always appear to
       the right of a configurable left margin and to the left of  a  configurable  right  margin.  There  is  a
       somewhat  pathological  exception  to  this: if a word is too long to fit in between the margins then the
       word will exceed the right hand margin.

       The indentation used for the left margins is configurable to either blanks (the default)  or  tabs.  When
       tabs  are  used  the  width  of  a  tab  character is configurable, using a default of 8 positions in the
       destination stream.

       What follows is a description of the Finite State Automaton (FSA)  defining  what  happens  when  various
       character  types  appear  at  its  three  states.  The  phrase  `... is written’ means that the described
       information is written to the ostream used or opened by the OFoldBuf object. OFoldBuf’s initial state  is
       INDENT:

       State    char.    description
       ───────────────────────────────────────────────────────────────────────
       INDENT   \n       a new line character is written
                space    the indentation is set;
                         the space character is added to the indentation;
                         next state: WS
                non-ws   the character is added to the currently stored word;
                         next state: NON_WS
       ───────────────────────────────────────────────────────────────────────
       WS       \n       a new line character is written;
                         stored white-space is erased;
                         next state: INDENT
                space    white space character is added to the currently
                         stored space characters;
                non-ws   the character is added to the currently stored word;
                         next state: NON_WS
       ───────────────────────────────────────────────────────────────────────
       NON_WS   \n       stored white space and word are written;
                         a new line is written;
                         next state: INDENT
                space    stored white space and word are written;
                         white space character is added to the currently
                         stored space characters;
                         next state: WS
                non-ws   the character is added to the currently stored word;
       ───────────────────────────────────────────────────────────────────────

NAMESPACE

       FBB
       All  constructors,  members,  operators  and manipulators, mentioned in this man-page, are defined in the
       namespace FBB.

INHERITS FROM

       FBB::OFilterBuf

ENUMERATION

       The enumeration TabsOrBlanks is used to select tabs or blanks when writing the indentation.  The  default
       is  blanks.  When tabs are selected the display width of tabs characters can be configured as well (using
       the default of 8 positions for each tab-character). The enumeration has two values:

       o      BLANKS:
              The default, indicating that the left margin is specified and written as a number of blanks;

       o      TABS:
              Indicating that the left margin is specified and written as a number of tab-characters.

       The enumeration TrailingBlanks is used to configure the OFoldBuf object  with  respect  to  any  trailing
       blanks that may appear on the final line. These trailing blanks can appear on the final line it it is not
       properly  terminated  with  a  newline  character but instead ends in white space. By default these white
       space characters are ignored, but they may be kept as well. The enumeration has two values:

       o      IGNORE_TRAILING_BLANKS:
              This indicates that trailing blanks appearing at the final line if  it  is  not  terminated  by  a
              newline  should  not  be  written  to  the  destination  std::ostream. This is the default used by
              OFoldBuf objects.

       o      KEEP_TRAILING_BLANKS:
              This indicates that trailing blanks at the final line if it is not terminated by a newline  should
              be written to the destination std::ostream

CONSTRUCTORS

       o      OFoldBuf(size_t leftIndent = 0, size_t rightMargin = 80, TabsOrBlanks tob = BLANKS, TrailingBlanks
              tb = IGNORE_TRAILING_BLANKS):
              This  constructor  initializes  an  OFoldBuf  object  but does not associate it with a destination
              stream. It can also be used as the default constructor.

       o      OFoldBuf(char const *fname, size_t leftIndent = 0, size_t rightMargin =  80,  TabsOrBlanks  tob  =
              BLANKS, TrailingBlanks tb = IGNORE_TRAILING_BLANKS):
              This  constructor  initializes  an OFoldBuf object and opens (using std::ios::out) the destination
              stream using the name specified as its fname argument.

       o      OFoldBuf(std::ostream &stream, size_t leftIndent = 0, size_t rightMargin = 80, TabsOrBlanks tob  =
              BLANKS, TrailingBlanks tb = IGNORE_TRAILING_BLANKS):
              This  constructor  initializes  an  OFoldBuf  object  and  uses  as  its  destination  stream  the
              std::ostream stream.

       The destructor writes any buffered information  to  the  destination  stream  and  will  then  flush  the
       destination stream.

       Copy and move constructors (and assignment operators) are not available.

MEMBER FUNCTIONS

       All members of FBB::OFilterBuf, in particular its out() and reset members are available, as FBB::OFoldBuf
       inherits from this class.

       o      void setMargins(size_t leftMargin, size_t rightMargin):
              This  member  can be used to modify the left- and right folding margins. Note that the left margin
              may also be modified using the FBB::lm and FBB::mlm manipulators.

       o      void setTrailingBlanks(TrailingBlanks tb):
              This member can be used to modify the currently used TrailingBlanks parameter.

       o      void useBlanks():
              This member can be used to select blanks  to be used when inserting left margins.

       o      void useTabs(size_t tabWidth = 8):
              This member can be used to select tab-characters to be  used  when  inserting  left  margins.  The
              second parameter is used to specify the display width of a tab-character.

STATIC MEMBER FUNCTIONS

       o      size_t leftMargin(std::ostreambuf const *buffer):
              This  member  returns  the  current left margin setting of the OFoldBuf object passed to it as its
              argument. The member defines a std::streambuf parameter which is down cast to an OFoldBuf  and  an
              FBB::Exception exception is thrown if that cast fails.

       o      size_t rightMargin(std::ostreambuf const *buffer):
              This  member  returns  the current right margin setting of the OFoldBuf object passed to it as its
              argument. The member’s parameter is down cast in the  same  way  as  leftMargin()’s  argument:  an
              FBB::Exception exception is thrown if that cast fails.

EXAMPLE

           #include <iostream>
           #include <ostream>
           #include <string>
           #include <bobcat/ofoldbuf>

           using namespace std;
           using namespace FBB;

           int main()
           {
               OFoldBuf fb(cout, 4, 40);
               ostream out(&fb);

               out << lm(4);

               string line;
               while (getline(cin, line))
                   out << line << ’\n’;
           }

FILES

       bobcat/ofoldbuf - defines the class interface

SEE ALSO

       bobcat(7),  lm(3bobcat), mlm(3bobcat), ofilterbuf(3bobcat), ofoldstream(3bobcat)

BUGS

       None Reported.

BOBCAT PROJECT FILES

       o      https://fbb-git.gitlab.io/bobcat/: gitlab project page;

       o      bobcat_6.04.00-x.dsc: detached signature;

       o      bobcat_6.04.00-x.tar.gz: source archive;

       o      bobcat_6.04.00-x_i386.changes: change log;

       o      libbobcat1_6.04.00-x_*.deb: debian package containing the libraries;

       o      libbobcat1-dev_6.04.00-x_*.deb: debian package containing the libraries, headers and manual pages;

BOBCAT

       Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.

COPYRIGHT

       This is free software, distributed under the terms of the GNU General Public License (GPL).

AUTHOR

       Frank B. Brokken (f.b.brokken@rug.nl).

libbobcat-dev_6.04.00                               2005-2023                             FBB::OFoldBuf(3bobcat)