X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fjisx0201.cpp;h=d3fe635ce90beda61e2f99cc8aef5fc88e0794e0;hp=65abff25e8f35125cc297c12f9a235a7c239d077;hb=5b1368cb791cab043f0435628cacbaff36e39b7b;hpb=d2118ac101602cfe2d62fb7deb6ef3fcb0fe137b diff --git a/source/jisx0201.cpp b/source/jisx0201.cpp index 65abff2..d3fe635 100644 --- a/source/jisx0201.cpp +++ b/source/jisx0201.cpp @@ -1,41 +1,58 @@ +/* $Id$ + +This file is part of libmspstrings +Copyright © 2006-2007 Mikko Rasa +Distributed under the LGPL +*/ + #include "jisx0201.h" using namespace std; namespace Msp { +namespace Codecs { -void JisX0201::Encoder::encode_char(wchar_t c_) +void JisX0201::Encoder::encode_char(UnicodeChar ch, string &buf) { - // Win32 has typedef unsigned short wchar_t - int c=c_; - if(c>=0 && c<=0x7F && c!=0x5C && c!=0x7E) - append(c); - else if(c==0xA5) - append(0x5C); - else if(c==0x203E) - append(0x7E); - else if(c>=0xFF61 && c<=0xFF9F) - append(c-0xFEC0); + if(ch>=0 && ch<=0x7F && ch!=0x5C && ch!=0x7E) + buf += ch; + else if(ch==0xA5) + buf += 0x5C; + else if(ch==0x203E) + buf += 0x7E; + else if(ch>=0xFF61 && ch<=0xFF9F) + buf += ch-0xFEC0; else - error("Can't express character in JIS X 0201"); + error(ch, buf, "Can't express character in JIS X 0201"); +} + +void JisX0201::Encoder::transliterate(UnicodeChar, string &buf) +{ + buf += '?'; } -void JisX0201::Decoder::decode_char(const string &str, string::const_iterator &i) + +UnicodeChar JisX0201::Decoder::decode_char(const string &str, string::const_iterator &i) { if(i==str.end()) - return; - - unsigned char c=*i++; - if(c==0x5C) - append(0xA5); - else if(c==0x7E) - append(0x203E); - else if(c<=0x7F) - append(c); - else if(c>=0xA1 && c<=0xDF) - append(c+0xFEC0); + return error("No input"); + + unsigned char ch = *i; + UnicodeChar result; + if(ch==0x5C) + result = 0xA5; + else if(ch==0x7E) + result = 0x203E; + else if(ch<=0x7F) + result = ch; + else if(ch>=0xA1 && ch<=0xDF) + result = ch+0xFEC0; else - error("Invalid JIS X 0201 string (undefined character)"); + result = error("Undefined JIS X 0201 character"); + + ++i; + return result; } +} // namespace Codecs } // namespace Msp