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