module MultiJson::OkJson

def ucharcopy(t, s, i)

ucharcopy writes Ustrerr and returns 1.
If no valid UTF-8 char exists at position i,
returns the number of bytes copied.
from string s at position i to I/O object t, and
Copies the valid UTF-8 bytes of a single character
def ucharcopy(t, s, i)
  n = s.length - i
  raise Utf8Error if n < 1
  c0 = s[i].ord
  # 1-byte, 7-bit sequence?
  if c0 < Utagx
    t.putc(c0)
    return 1
  end
  raise Utf8Error if c0 < Utag2 # unexpected continuation byte?
  raise Utf8Error if n < 2 # need continuation byte
  c1 = s[i+1].ord
  raise Utf8Error if c1 < Utagx || Utag2 <= c1
  # 2-byte, 11-bit sequence?
  if c0 < Utag3
    raise Utf8Error if ((c0&Umask2)<<6 | (c1&Umaskx)) <= Uchar1max
    t.putc(c0)
    t.putc(c1)
    return 2
  end
  # need second continuation byte
  raise Utf8Error if n < 3
  c2 = s[i+2].ord
  raise Utf8Error if c2 < Utagx || Utag2 <= c2
  # 3-byte, 16-bit sequence?
  if c0 < Utag4
    u = (c0&Umask3)<<12 | (c1&Umaskx)<<6 | (c2&Umaskx)
    raise Utf8Error if u <= Uchar2max
    t.putc(c0)
    t.putc(c1)
    t.putc(c2)
    return 3
  end
  # need third continuation byte
  raise Utf8Error if n < 4
  c3 = s[i+3].ord
  raise Utf8Error if c3 < Utagx || Utag2 <= c3
  # 4-byte, 21-bit sequence?
  if c0 < Utag5
    u = (c0&Umask4)<<18 | (c1&Umaskx)<<12 | (c2&Umaskx)<<6 | (c3&Umaskx)
    raise Utf8Error if u <= Uchar3max
    t.putc(c0)
    t.putc(c1)
    t.putc(c2)
    t.putc(c3)
    return 4
  end
  raise Utf8Error
rescue Utf8Error
  t.write(Ustrerr)
  return 1
end