+ if (c > 0xC2 && text.size() == i+1) // string ends with control char
+ {
+ std::cerr << "String \"" << text << "\" is malformed.\n";
+ return;
+ }
+ else
+ d = (unsigned char) text[i+1];
+
+ if (c == 0xC3 && d < 160) // first-byte identifier of U0080 ("C1 Control Characters and Latin-1 Supplement")
+ { // iso-8859-1 equiv character is capital A with tilde above, signified as "C3 83" in utf-8
+ utf8suppl = 64;
+ continue;
+ }
+ else if (c == 0xC3 && d >= 160) // U0080 pt. 2
+ {
+ utf8suppl = 32;
+ continue;
+ }
+ else if (c == 0xC4 && d < 160)
+ {
+ utf8suppl = 128;
+ continue;
+ }
+ else if (c == 0xC4 && d >= 160)
+ {
+ utf8suppl = 96;
+ continue;
+ }
+ else if (c == 0xC5 && d < 160) // first-byte identifier of U0100 ("Latin Extended-A")
+ { // iso-8859-1 equiv character is capital A with ring above, signified as "C3 85" in utf-8
+ utf8suppl = 192;
+ continue;
+ }
+ else if (c == 0xC5 && d >= 160) // first-byte identifier of U0100 ("Latin Extended-A")
+ { // iso-8859-1 equiv character is capital A with ring above, signified as "C3 85" in utf-8
+ utf8suppl = 160;
+ continue;
+ }
+ // insert more clauses here once somebody will need them
+