X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fstringcodec%2Futf8.cpp;h=4c75d8b073e277c2adc2f38db5f3db806da7b0e5;hb=93bb92bad766d269a6bac87e00020a6158531739;hp=4d3cea50dab27d33fc8030b18e484c0e620466dc;hpb=056dc68dfc606a2c14126a70321045d6d9f12e0e;p=libs%2Fcore.git diff --git a/source/stringcodec/utf8.cpp b/source/stringcodec/utf8.cpp index 4d3cea5..4c75d8b 100644 --- a/source/stringcodec/utf8.cpp +++ b/source/stringcodec/utf8.cpp @@ -5,7 +5,7 @@ using namespace std; namespace Msp { namespace StringCodec { -void Utf8::Encoder::encode_char(UnicodeChar ch, string &buf) +void Utf8::Encoder::encode_char(unichar ch, string &buf) { if(ch<0 || ch>0x10FFFF) return error(ch, buf, "Can't express character in UTF-8"); @@ -35,20 +35,20 @@ void Utf8::Encoder::encode_char(UnicodeChar ch, string &buf) } } -void Utf8::Encoder::transliterate(UnicodeChar, string &buf) +void Utf8::Encoder::transliterate(unichar, string &buf) { - buf.append("\357\277\275", 3); // � U+FFFE Replacement Character + buf.append("\357\277\275", 3); // � U+FFFD Replacement Character } -UnicodeChar Utf8::Decoder::decode_char(const string &str, string::const_iterator &i) +unichar Utf8::Decoder::decode_char(const string &str, string::const_iterator &i) { if(i==str.end()) - return error("No input"); + return -1; if((*i&0xC0)==0x80) { - UnicodeChar result = error("UTF-8 tail byte found when expecting head"); + unichar result = error("UTF-8 tail byte found when expecting head"); ++i; return result; } @@ -61,7 +61,7 @@ UnicodeChar Utf8::Decoder::decode_char(const string &str, string::const_iterator string::const_iterator j = i; - UnicodeChar result = (*j++)&(mask-1); + unichar result = (*j++)&(mask-1); unsigned k; for(k=1; (k>(bytes*5-4)) || !(result>>7)) result = error("Denormalized UTF-8 multibyte sequence"); - else if(result>0x10FFFF || (result>=0xD800 && result<=0xDFFF)) + else if(!is_valid_unichar(result)) result = error("Invalid Unicode code point"); i = j;