X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fstringcodec%2Fiso2022jp.cpp;h=3332922ccda68e81d354ca5f4e25f35bc96f492c;hp=f0b37fd50aeb2eccfd63a9cadcd014649542fc10;hb=HEAD;hpb=967785734be5c3fc6f75da122c2d93ebbb338271 diff --git a/source/stringcodec/iso2022jp.cpp b/source/stringcodec/iso2022jp.cpp index f0b37fd..93c50f4 100644 --- a/source/stringcodec/iso2022jp.cpp +++ b/source/stringcodec/iso2022jp.cpp @@ -1,3 +1,4 @@ +#include #include "ascii.h" #include "iso2022jp.h" #include "jisx0201.h" @@ -6,9 +7,9 @@ using namespace std; namespace Msp { -namespace Codecs { +namespace StringCodec { -void Iso2022Jp::Encoder::encode_char(UnicodeChar ch, string &buf) +void Iso2022Jp::Encoder::encode_char(unichar ch, string &buf) { if(ch>=0 && ch<=0x7F && ch!=0x5C && ch!=0x7E) { @@ -35,12 +36,14 @@ void Iso2022Jp::Encoder::encode_char(UnicodeChar ch, string &buf) { Kuten jis = ucs_to_jisx0208(ch); if(!jis) - return error(ch, buf, "Can't express character in ISO-2022-JP"); + return error(ch, buf, invalid_character(ch, "ISO-2022-JP")); if(mode!=JISX0208) switch_mode(JISX0208, buf); - char jbuf[2] = {jis.ku+0x20, jis.ten+0x20}; + char jbuf[2]; + jbuf[0] = jis.ku+0x20; + jbuf[1] = jis.ten+0x20; buf.append(jbuf, 2); } } @@ -64,11 +67,11 @@ void Iso2022Jp::Encoder::switch_mode(Mode m, string &buf) case ASCII: buf.append("\033(B", 3); break; case JISX0201: buf.append("\033(J", 3); break; case JISX0208: buf.append("\033$B", 3); break; - default: throw CodecError("WTF? Invalid mode in Iso2022Jp::Encoder::switch_mode"); + default: throw invalid_argument("Iso2022Jp::Encoder::switch_mode"); } } -void Iso2022Jp::Encoder::transliterate(UnicodeChar, string &buf) +void Iso2022Jp::Encoder::transliterate(unichar, string &buf) { if(mode!=ASCII) switch_mode(ASCII, buf); @@ -78,20 +81,19 @@ void Iso2022Jp::Encoder::transliterate(UnicodeChar, string &buf) Iso2022Jp::Decoder::Decoder(ErrorMode em): Codec::Decoder(em), - mode(ASCII), dec(new Ascii::Decoder) { } -UnicodeChar Iso2022Jp::Decoder::decode_char(const string &str, string::const_iterator &i) +unichar Iso2022Jp::Decoder::decode_char(const string &str, string::const_iterator &i) { if(i==str.end()) - return error("No input"); + return -1; while(i!=str.end()) { - string::const_iterator j = i; + auto j = i; - UnicodeChar result = -1; + unichar result = -1; if(*j==033) { unsigned escape = 0; @@ -121,7 +123,7 @@ UnicodeChar Iso2022Jp::Decoder::decode_char(const string &str, string::const_ite else if(dec) return dec->decode_char(str, i); else - throw CodecError("WTF? No sub-decoder for Iso2022Jp::Decoder"); + throw internal_error("no sub-decoder"); if(result>=0) return result; @@ -150,5 +152,5 @@ void Iso2022Jp::Decoder::switch_mode(Mode m) } } -} // namespace Codecs +} // namespace StringCodec } // namespace Msp