namespace Msp {
-namespace Codecs {
+namespace StringCodec {
-void Iso646Fi::Encoder::encode_char(UnicodeChar ch, string &buf)
+void Iso646Fi::Encoder::encode_char(unichar ch, string &buf)
{
int tch = transform_mapping_or_direct(mapping, map_size, ch, false);
if(tch<0 || tch>0x7F)
- error(ch, buf, "Can't express character in ISO-646-FI");
+ error(ch, buf, invalid_character(ch, "ISO-646-FI"));
else
buf += tch;
}
-void Iso646Fi::Encoder::transliterate(UnicodeChar, string &buf)
+void Iso646Fi::Encoder::transliterate(unichar, string &buf)
{
buf += '?';
}
-UnicodeChar Iso646Fi::Decoder::decode_char(const string &str, string::const_iterator &i)
+unichar Iso646Fi::Decoder::decode_char(const string &str, string::const_iterator &i)
{
if(i==str.end())
- return error("No input");
+ return -1;
unsigned char ch = *i;
- int tch = (ch<=0x7F ? transform_mapping_or_direct(mapping, map_size, ch, true) : -1);
-
- UnicodeChar result;
- if(tch==-1)
- result = error("Undefined ISO-646-FI character");
+ unichar result;
+ if(ch>=0x80)
+ result = error(invalid_sequence(i, i+1, "undefined ISO-646-FI character"));
else
- result = tch;
+ result = transform_mapping_or_direct(mapping, map_size, ch, true);
++i;
return result;
}
-} // namespace Codecs
+} // namespace StringCodec
} // namespace Msp