The information made available by IQuotedPrintableStreambuf objects is either quoted-printable encoded or decoded. The information to convert is read by IQuotedPrintableStreambuf objects via std::istream objects.
The class IQuotedPrintableStreambuf is a class template, using a FBB::CryptType template non-type parameter. Objects of the class FBB::IQuotedPrintableStreambuf<FBB::ENCODE> encode the information they receive, objects of the class FBB::IQuotedPrintableStreambuf<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:
Overloaded move and/or copy assignment operators are not available.
IQuotedPrintableStreambuf objects either encode or decode quoted-printable information. IQuotedPrintableStreambuf objects of the class FBB::IQuotedPrintableStreambuf<FBB::ENCODE> encode the data they receive, IQuotedPrintableStreambuf objects of the class FBB::IQuotedPrintableStreambuf<FBB::DECODE> decode the data they receive.
The values ENCODE and DECODE are defined in the enum CryptType, defined in the FBB namespace.
- IQuotedPrintableStreambuf<ENCODE> objects perform quoted-printable
encoding;
- IQuotedPrintableStreambuf<DECODE> objects perform quoted-printable
decoding;
- IQuotedPrintableStreambuf<CryptType> objects obtain the bytes to encode or
decode from std::istream ∈
- The IFilterStreambuf 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 are not available.
The example shows the construction of IQuotedPrintableStreambuf<ENCODE> objects encode which are used to initialize a std::istream object. The information read from this istream is quoted-printable encoded.
IQuotedPrintableStreambuf<DECODE> objects read quoted-printable encoded information from std::istream objects, decoding the information.
The std::istream din object is initialized with the IQuotedPrintableStreambuf<DECODE> object, and its contents 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/iquotedprintablestreambuf> 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': { IQuotedPrintableStreambuf<ENCODE> encode(cin); istream ein(&encode); cout << ein.rdbuf(); } break; case 'd': { IQuotedPrintableStreambuf<DECODE> decode(cin); istream din(&decode); cout << din.rdbuf(); } break; case 'b': { IQuotedPrintableStreambuf<ENCODE> encode(cin); istream ein(&encode); IQuotedPrintableStreambuf<DECODE> decode(ein); istream din(&decode); cout << din.rdbuf(); } break; } }