FBB::OFoldStream - Folds long lines
#include <bobcat/ofoldstream>
Linking option: -lbobcat
FBB::OFoldStream folds long lines written to it. The
OFoldStream writes the (folded) lines to a second ostream
which is either used by or opened by the OFoldStream object.
OFoldStream objects never fold lines in the middle of
series of non-blank characters but will always break a line at white space
characters. 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.
OFoldStream is implemented as a wrapper class around
std::ostream and FBB::OFoldBuf and a more complete description
of the folding process can be found in the ofoldbuf(3bobcat) man
page.
FBB
All constructors, members, operators and manipulators, mentioned in this
man-page, are defined in the namespace FBB.
std::ostream,
(and privately from FBB::OFoldBuf)
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
OFoldStream object with respect to any trailing blanks that may
appear on the final line. It is the same enumeration type as used with
OFoldBuf (cf. ofoldbuf(3bobcat)) having 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 OFoldStream
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
- o
- OFoldStream():
This constructor initializes an OFoldStream object but does not
associate it with a destination stream. It uses the values 0, 80,
BLANKS, and IGNORE_TRAILING_BLANKSfor, resp. its left
margin, right margin left-margin characters and TrailingBlanks
handling mode.
- o
- OFoldStream(char const *fname, size_t leftIndent = 0, size_t
rightMargin = 80, TabsOrBlanks tob = BLANKS, TrailingBlanks
tb = IGNORE_TRAILING_BLANKS):
This constructor initializes an OFoldStream object and opens (using
std::ios::out) the destination stream using the name specified as
its fname argument.
- o
- OFoldStream(std::ostream &stream, size_t leftIndent = 0,
size_t rightMargin = 80, TabsOrBlanks tob = BLANKS,
TrailingBlanks tb = IGNORE_TRAILING_BLANKS):
This constructor initializes an OFoldStream 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.
All members of std::ostream are available, as
FBB::OFoldStream inherits from this class.
- o
- void close():
This member flushes any pending information to the destination stream and
then closes the destination stream.
- o
- void open(char const *fname, openmode mode = std::ios::out):
This member associates the OFilterStream object with an
std::ofstream object whose filename is provided and that should
receive the folded information.
- o
- void open(std::ostream &out):
This member associates the OFilterStream object with the provided
ostream object.
- 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.
- o
- size_t leftMargin(std::ostream const &os):
This member returns the current left margin setting of the
OFoldStream object passed to it as its argument. The member defines
a std::ostream parameter since in many cases the OFoldStream
object will be used in functions themselves defining std::ostream
parameters. Internally, the std::ostream’s
std::streambuf is down cast to an OFoldBuf and an
FBB::Exception exception is thrown if that cast fails.
- o
- size_t rightMargin(std::ostream const &os):
This member returns the current right margin setting of the
OFoldStream 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.
#include <iostream>
#include <string>
#include <bobcat/ofoldstream>
using namespace std;
using namespace FBB;
void margins(ostream &out)
{
cout << OFoldStream::leftMargin(out) << ", " <<
OFoldStream::rightMargin(out) << endl;
}
int main()
{
OFoldStream out(cout, 4, 40);
out << lm(4);
string line;
while (getline(cin, line))
out << line << ’\n’;
margins(out);
}
bobcat/ofoldstream - defines the class interface
- o
- https://fbb-git.gitlab.io/bobcat/: gitlab project page;
- o
- bobcat_5.07.00-x.dsc: detached signature;
- o
- bobcat_5.07.00-x.tar.gz: source archive;
- o
- bobcat_5.07.00-x_i386.changes: change log;
- o
- libbobcat1_5.07.00-x_*.deb: debian package containing the
libraries;
- o
- libbobcat1-dev_5.07.00-x_*.deb: debian package containing the
libraries, headers and manual pages;
Bobcat is an acronym of `Brokken’s Own Base Classes And
Templates’.
This is free software, distributed under the terms of the GNU
General Public License (GPL).
Frank B. Brokken (f.b.brokken@rug.nl).