@Test public void shouldParseItemAndDiscardSpaces() { Parser parser = Parsers.token(Parsers.integer()); assertThat(parser.parse("1 \t\n"), is(equalTo(Parser.result(1L, "")))); assertThat(parser.parse("1"), is(equalTo(Parser.result(1L, "")))); assertThat(parser.parse(""), is(equalTo(Parser.error("Can not parse item")))); }
private CoderResult encodeArrayLoop(CharBuffer src, ByteBuffer dst) { char[] sa = src.array(); int sp = src.arrayOffset() + src.position(); int sl = src.arrayOffset() + src.limit(); byte[] da = dst.array(); int dp = dst.arrayOffset() + dst.position(); int dl = dst.arrayOffset() + dst.limit(); int dlASCII = dp + Math.min(sl - sp, dl - dp); // ASCII only loop while (dp < dlASCII && sa[sp] < '\u0080') da[dp++] = (byte) sa[sp++]; while (sp < sl) { char c = sa[sp]; if (c < 0x80) { // Have at most seven bits if (dp >= dl) return overflow(src, sp, dst, dp); da[dp++] = (byte) c; } else if (c < 0x800) { // 2 bytes, 11 bits if (dl - dp < 2) return overflow(src, sp, dst, dp); da[dp++] = (byte) (0xc0 | (c >> 6)); da[dp++] = (byte) (0x80 | (c & 0x3f)); } else if (isSurrogate(c)) { // Have a surrogate pair if (sgp == null) sgp = new Parser(); int uc = sgp.parse(c, sa, sp, sl); if (uc < 0) { updatePositions(src, sp, dst, dp); return sgp.error(); } if (dl - dp < 4) return overflow(src, sp, dst, dp); da[dp++] = (byte) (0xf0 | ((uc >> 18))); da[dp++] = (byte) (0x80 | ((uc >> 12) & 0x3f)); da[dp++] = (byte) (0x80 | ((uc >> 6) & 0x3f)); da[dp++] = (byte) (0x80 | (uc & 0x3f)); sp++; // 2 chars } else { // 3 bytes, 16 bits if (dl - dp < 3) return overflow(src, sp, dst, dp); da[dp++] = (byte) (0xe0 | ((c >> 12))); da[dp++] = (byte) (0x80 | ((c >> 6) & 0x3f)); da[dp++] = (byte) (0x80 | (c & 0x3f)); } sp++; } updatePositions(src, sp, dst, dp); return CoderResult.UNDERFLOW; }
private CoderResult encodeBufferLoop(CharBuffer src, ByteBuffer dst) { int mark = src.position(); while (src.hasRemaining()) { char c = src.get(); if (c < 0x80) { // Have at most seven bits if (!dst.hasRemaining()) return overflow(src, mark); dst.put((byte) c); } else if (c < 0x800) { // 2 bytes, 11 bits if (dst.remaining() < 2) return overflow(src, mark); dst.put((byte) (0xc0 | (c >> 6))); dst.put((byte) (0x80 | (c & 0x3f))); } else if (isSurrogate(c)) { // Have a surrogate pair if (sgp == null) sgp = new Parser(); int uc = sgp.parse(c, src); if (uc < 0) { src.position(mark); return sgp.error(); } if (dst.remaining() < 4) return overflow(src, mark); dst.put((byte) (0xf0 | ((uc >> 18)))); dst.put((byte) (0x80 | ((uc >> 12) & 0x3f))); dst.put((byte) (0x80 | ((uc >> 6) & 0x3f))); dst.put((byte) (0x80 | (uc & 0x3f))); mark++; // 2 chars } else { // 3 bytes, 16 bits if (dst.remaining() < 3) return overflow(src, mark); dst.put((byte) (0xe0 | ((c >> 12)))); dst.put((byte) (0x80 | ((c >> 6) & 0x3f))); dst.put((byte) (0x80 | (c & 0x3f))); } mark++; } src.position(mark); return CoderResult.UNDERFLOW; }