static boolean readInfo( List<ImplementationInformation> list, StringBuilder buf, Reader reader ) {
		// Read implementation class.
		int retr = readToTab( buf, reader );
		String  clazz = buf.toString();
		if ( isLineFinished( retr ) ) {
			return buf.length() <= 0 || addInfo( list, retr, clazz, 0, null, null );
		} else if ( retr == -1 ) {
			return addInfo( list, retr, clazz, 0, null, null );
		}

		// Read priority.
		retr = readToTab( buf, reader );
		int prio = buf.length() == 0 ? 0 : Integer.parseInt( buf.toString() );
		if ( isComplete( retr ) ) {
			return addInfo( list, retr, clazz, prio, null, null );
		}

		// Read type.
		retr = readToTab( buf, reader );
		String type = buf.toString();
		if ( isComplete( retr ) ) {
			return addInfo( list, retr, clazz, prio, type, null );
		}

		// Read extras.
		retr = readToTab( buf, reader );
		String extras = buf.toString();
		if ( isComplete( retr ) ) {
			return addInfo( list, retr, clazz, prio, type, extras );
		}

		// Eat anything left before newline.
		while ( true ) {
			if ( isComplete( retr = read( reader ) ) ) {
				return addInfo( list, retr, clazz, prio, type, extras );
			}
		}
	}