FBB::IQuotedPrintableBuf - Input Filtering stream buffer doing quoted printable conversions
Contents
Bobcat
Bobcat is an acronym of `Brokken’s Own Base Classes And Templates’.
Bobcat Project Files
o https://fbb-git.gitlab.io/bobcat/: gitlab project page;
Debian Bobcat project files:
o libbobcat6: debian package containing the shared library, changelog and copyright note;
o libbobcat-dev: debian package containing the static library, headers, manual pages, and developer
info;
Bugs
None reported.
Constructor
o IQuotedPrintableBuf<CryptType>(std::istream&in,size_tbufSize=1000):
This constructor initializes the streambuf.
- IQuotedPrintableBuf<ENCODE> objects perform quoted-printable encoding;
- IQuotedPrintableBuf<DECODE> objects perform quoted-printable decoding;
- IQuotedPrintableBuf<CryptType> objects obtain the bytes to encode or decode from std::istream∈
- The IFilterBuf base class is initialized with a buffer of size bufSize, using a lower bound of
100 characters.
The constructor uses a configurable buffer size for reading. Characters read into the buffer which
are not part of the actual quoted-printable encoded data are unavailable after completing the
quoted-printable decoding. If information beyond the quoted-printable input block should remain
available, then a buffer size of 1 should be specified.
Copy and move constructors (and assignment operators) are not available.
Copyright
This is free software, distributed under the terms of the GNU General Public License (GPL).
Description
The information made available by IQuotedPrintableBuf objects is either quoted-printable encoded or
decoded. The information to convert is read by IQuotedPrintableBuf objects via std::istream objects.
The class IQuotedPrintableBuf is a class template, using a FBB::CryptType template non-type parameter.
Objects of the class FBB::IQuotedPrintableBuf<FBB::ENCODE> encode the information they receive, objects
of the class FBB::IQuotedPrintableBuf<FBB::DECODE> decode the information they receive. See also section
ENUMERATION below.
Quoted-printable encoding is sometimes used in e-mail attachments (See also
https://en.wikipedia.org/wiki/Quoted-printable and https://www.ietf.org/rfc/rfc2045.txt (section 6.7)).
Its main characteristics are:
o Lines are at most 76 characters long;
o Lines longer than 76 characters are split into sub-lines, using =\n combinations to indicate `soft
line breaks’. Lines not ending in soft line breaks indicate true end of lines.
o All printable characters, except for the = character and (final) blank characters just before the
end of lines, are copied as-is, all other characters are escaped by writing =XX sequences, with XX
being the ascii-character representation of the hexadecimal value of the escaped character (e.g.,
the = character is encoded as =3D, a final space before end-of-line is encoded as =20, a final tab
as =09). Only capital letters are used when escaping characters.
Enumeration
IQuotedPrintableBuf objects either encode or decode quoted-printable information. IQuotedPrintableBuf
objects of the class FBB::IQuotedPrintableBuf<FBB::ENCODE> encode the data they receive,
IQuotedPrintableBuf objects of the class FBB::IQuotedPrintableBuf<FBB::DECODE> decode the data they
receive.
The values ENCODE and DECODE are defined in the enumCryptType, defined in the FBB namespace.
Example
The example shows the construction of IQuotedPrintableBuf<ENCODE> objects encode which are used to
initialize a std::istream object. The information read from this istream is quoted-printable encoded.
IQuotedPrintableBuf<DECODE> objects read quoted-printable encoded information from std::istream objects,
decoding the information.
The std::istreamdin object is initialized with the IQuotedPrintableBuf<DECODE> object, and its content
is sent to std::cout. The information that is presented at std::cin and that appears at std::cout should
be identical.
#include <iostream>
#include <istream>
#include <bobcat/iquotedprintablebuf>
using namespace std;
using namespace FBB;
int main(int argc, char **argv)
{
if (argc == 1)
{
cout << "Usage: " << argv[0] << " [edb] < infile > outfile\n"
"to quoted printable -e-ncode, -d-ecode or -b-oth\n";
return 0;
}
switch (argv[1][0])
{
case ’e’:
{
IQuotedPrintableBuf<ENCODE> encode(cin);
istream ein(&encode);
cout << ein.rdbuf();
}
break;
case ’d’:
{
IQuotedPrintableBuf<DECODE> decode(cin);
istream din(&decode);
cout << din.rdbuf();
}
break;
case ’b’:
{
IQuotedPrintableBuf<ENCODE> encode(cin);
istream ein(&encode);
IQuotedPrintableBuf<DECODE> decode(ein);
istream din(&decode);
cout << din.rdbuf();
}
break;
}
}
Files
bobcat/iquotedprintablebuf - defines the class interface
Inherits From
FBB::IFilterBuf
Member Functions
All members of FBB::IFilterBuf are available, as IQuotedPrintableBuf inherits from this class.
Overloaded move and/or copy assignment operators are not available.
Name
FBB::IQuotedPrintableBuf - Input Filtering stream buffer doing quoted printable conversions
Namespace
FBB
All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the
namespace FBB.
See Also
bobcat(7), isymcryptstreambuf(3bobcat), iquotedprintablestream(3bobcat), ifilterbuf(3bobcat), ofilterbuf(3bobcat), std::streambuf.
Synopsis
#include<bobcat/iquotedprintablebuf>
Linking option: -lbobcat