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