TransferToken readToken(Reader in) throws IOException { if (!input_buffer.isEmpty()) { return input_buffer.next(); } String content = ""; while (true) { int val = in.read(); if (val == -1 || (val == 0 && internal_null_flush)) { return input_buffer.add(new TransferToken(content, TransferToken.TransferTokenType.tt_eof)); } if (val == '\\') { content += '\\'; content += (char) in.read(); } else if (val == '[') { content += '['; while (true) { int val2 = in.read(); if (val2 == '\\') { content += '\\'; content += (char) in.read(); } else if (val2 == ']') { content += ']'; break; } else { content += (char) val2; } } } else if (val == '$') { return input_buffer.add( new TransferToken(content, TransferToken.TransferTokenType.tt_word)); } else if (val == '^') { return input_buffer.add( new TransferToken(content, TransferToken.TransferTokenType.tt_blank)); } else { content += (char) val; } } }