]> git.tdb.fi Git - libs/core.git/blob - source/stringcodec/iso2022jp.h
Drop copyright and license notices from source files
[libs/core.git] / source / stringcodec / iso2022jp.h
1 #ifndef MSP_STRINGS_ISO2022JP_H_
2 #define MSP_STRINGS_ISO2022JP_H_
3
4 #include "codec.h"
5
6 namespace Msp {
7 namespace Codecs {
8
9 class Iso2022Jp: public Codec
10 {
11 public:
12         enum Mode
13         {
14                 ASCII,
15                 JISX0201,
16                 JISX0208
17         };
18
19         class Encoder: public Codec::Encoder
20         {
21         private:
22                 Mode mode;
23
24         public:
25                 Encoder(ErrorMode em = THROW_ON_ERROR): Codec::Encoder(em), mode(ASCII) { }
26
27                 virtual void encode_char(UnicodeChar, std::string &);
28                 virtual void sync(std::string &);
29                 virtual void reset();
30         private:
31                 void switch_mode(Mode, std::string &);
32                 virtual void transliterate(UnicodeChar, std::string &);
33         };
34
35         class Decoder: public Codec::Decoder
36         {
37         private:
38                 Mode mode;
39                 Codec::Decoder *dec;
40
41         public:
42                 Decoder(ErrorMode =THROW_ON_ERROR);
43
44                 virtual UnicodeChar decode_char(const std::string &, std::string::const_iterator &);
45                 virtual void reset();
46         private:
47                 void switch_mode(Mode);
48         };
49
50         virtual const char *get_name() const { return "ISO-2022-JP"; }
51
52         virtual Encoder *create_encoder(ErrorMode em = THROW_ON_ERROR) const { return new Encoder(em); }
53         virtual Decoder *create_decoder(ErrorMode em = THROW_ON_ERROR) const { return new Decoder(em); }
54 };
55
56 } // namespace Codecs
57 } // namespace Msp
58
59 #endif