1
// Copyright (c) 1994 James Clark
2
// See the file COPYING for copying permission.
4
#ifndef CodingSystem_INCLUDED
5
#define CodingSystem_INCLUDED 1
14
#include "OutputByteStream.h"
20
namespace SP_NAMESPACE {
23
class SP_API Decoder {
25
Decoder(unsigned minBytesPerChar = 1);
27
virtual size_t decode(Char *, const char *, size_t, const char **) = 0;
28
virtual Boolean convertOffset(unsigned long &offset) const;
29
// Decoder assumes that for every decoded Char there must be at least
30
// minBytesPerChar bytes
31
unsigned minBytesPerChar() const;
33
unsigned minBytesPerChar_;
37
class SP_API Encoder {
39
class SP_API Handler {
41
virtual void handleUnencodable(Char, OutputByteStream *) = 0;
45
virtual void output(const Char *, size_t, OutputByteStream *) = 0;
46
// This outputs a byte order mark with Unicode.
47
virtual void startFile(OutputByteStream *);
48
virtual void output(Char *, size_t, OutputByteStream *);
49
virtual void setUnencodableHandler(Handler *);
50
virtual void handleUnencodable(Char, OutputByteStream *);
53
class SP_API RecoveringEncoder : public Encoder {
56
void setUnencodableHandler(Handler *);
57
void handleUnencodable(Char, OutputByteStream *);
59
Handler *unencodableHandler_;
62
class SP_API InputCodingSystem {
64
virtual ~InputCodingSystem();
65
virtual Decoder *makeDecoder() const = 0;
66
StringC convertIn(const char *) const;
67
virtual Boolean isIdentity() const;
70
class SP_API OutputCodingSystem {
72
virtual ~OutputCodingSystem();
73
virtual Encoder *makeEncoder() const = 0;
74
virtual unsigned fixedBytesPerChar() const;
75
String<char> convertOut(const StringC &) const;
78
class SP_API CodingSystem : public InputCodingSystem, public OutputCodingSystem {
82
unsigned Decoder::minBytesPerChar() const
84
return minBytesPerChar_;
91
#endif /* not CodingSystem_INCLUDED */