Showing with 21 additions and 2 deletions.
  1. +21 −2 std/utf.d
23 changes: 21 additions & 2 deletions std/utf.d
Original file line number Diff line number Diff line change
Expand Up @@ -3599,8 +3599,27 @@ template byUTF(C) if (isSomeChar!C)
if (pos == fill)
{
pos = 0;
fill = cast(ushort)encode!(UseReplacementDchar.yes)(
buf, decodeFront!(UseReplacementDchar.yes)(r));
auto c = r.front;

if (c <= 0x7F)
{
fill = 1;
r.popFront;
buf[pos] = cast(C) c;
}
else
{
static if (is(RC == dchar))
{
fill = cast(ushort) encode!(UseReplacementDchar.yes)(buf, c);
r.popFront;
}
else
{
fill = cast(ushort) encode!(UseReplacementDchar.yes)(
buf, decodeFront!(UseReplacementDchar.yes)(r));
}
}
}
return buf[pos];
}
Expand Down