X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fstringcodec%2Fjisx0208.cpp;h=008a5e14fbd3dd59d4f4d5ecd455045f3b1a3d51;hp=6b46b1b679b5a94636e807d350510174eb0eb86f;hb=817e584903996a041692640720a5a272d847a3c7;hpb=b56eb5ec1da675da0c66abc53c1e4f6c4e4cccbd diff --git a/source/stringcodec/jisx0208.cpp b/source/stringcodec/jisx0208.cpp index 6b46b1b..008a5e1 100644 --- a/source/stringcodec/jisx0208.cpp +++ b/source/stringcodec/jisx0208.cpp @@ -1,10 +1,3 @@ -/* $Id$ - -This file is part of libmspstrings -Copyright © 2006-2007 Mikko Rasa -Distributed under the LGPL -*/ - #include "jisx0208.h" #include "jisx0208.table" @@ -12,44 +5,48 @@ Distributed under the LGPL using namespace std; namespace Msp { -namespace Codecs { +namespace StringCodec { -void JisX0208::Encoder::encode_char(UnicodeChar ucs, string &buf) +void JisX0208::Encoder::encode_char(unichar ucs, string &buf) { unsigned short jis = ucs_to_jisx0208(ucs); if(jis) { - char jbuf[2] = {jis>>8, jis}; + char jbuf[2]; + jbuf[0] = jis>>8; + jbuf[1] = jis; buf.append(jbuf, 2); } else - error(ucs, buf, "Can't express character in JIS X 0208"); + error(ucs, buf, invalid_character(ucs, "JIS X 0208")); } -void JisX0208::Encoder::transliterate(UnicodeChar, string &buf) +void JisX0208::Encoder::transliterate(unichar, string &buf) { buf.append("!)", 2); } -UnicodeChar JisX0208::Decoder::decode_char(const string &str, string::const_iterator &i) +unichar JisX0208::Decoder::decode_char(const string &str, string::const_iterator &i) { if(i==str.end()) - return error("No input"); + return -1; string::const_iterator j = i; Kuten jis; jis.ku = *j++-0x20; - UnicodeChar result; + unichar result; if(j==str.end()) - result = error("Incomplete JIS X 0208 character"); + result = error(invalid_sequence(i, j, "incomplete JIS X 0208 character")); else { jis.ten = *j++-0x20; result = jisx0208_to_ucs(jis); + if(result==-1) + result = error(invalid_sequence(i, j, "invalid JIS X 0208 ku-ten")); if(result==0) - result = error("Undefined JIS X 0208 character"); + result = error(invalid_sequence(i, j, "undefined JIS X 0208 character")); } i = j; @@ -57,15 +54,15 @@ UnicodeChar JisX0208::Decoder::decode_char(const string &str, string::const_iter } -UnicodeChar jisx0208_to_ucs(Kuten jis) +unichar jisx0208_to_ucs(Kuten jis) { if(jis.ku==0 || jis.ku>0x5E || jis.ten==0 || jis.ten>0x5E) - return 0; + return -1; return jisx0208_to_ucs_table[jis.ku*94 + jis.ten - 95]; } -Kuten ucs_to_jisx0208(UnicodeChar c) +Kuten ucs_to_jisx0208(unichar c) { if(c<0 || c>0xFFFF) return Kuten(); @@ -89,5 +86,5 @@ Kuten ucs_to_jisx0208(UnicodeChar c) return result; } -} // namespace Codecs +} // namespace StringCodec } // namespace Msp