+
+ if (contains(s, 0xF0000)) {
+ // Some encoding changes for the underlying stream are embedded
+ // in the docstring. The encoding names to be used are enclosed
+ // between the code points 0xF0000 and 0xF0001, the first two
+ // characters of plane 15, which is a Private Use Area whose
+ // codepoints don't have any associated glyph.
+ docstring s1;
+ docstring s2 = split(s, s1, 0xF0000);
+ while (true) {
+ if (!s1.empty())
+ ots.os() << s1;
+ if (s2.empty())
+ break;
+ docstring enc;
+ docstring const s3 = split(s2, enc, 0xF0001);
+ if (!contains(s2, 0xF0001))
+ s2 = split(enc, s1, 0xF0000);
+ else {
+ ots.os() << setEncoding(to_ascii(enc));
+ s2 = split(s3, s1, 0xF0000);
+ }
+ }
+ } else
+ ots.os() << s;
+
+ ots.lastChar(s[len - 1]);
+ ots.texrow().newlines(count(s.begin(), s.end(), '\n'));