*  @param start the date to start enumeration (the latest of the two dates)
     *  @param end the date to stop enumeration (the earliest of the two dates)
     *  @return the revisions of that page in that time span
     *  @throws IOException if a network error occurs
     *  @since 0.19
     */
    public Wiki.Revision[] getPageHistory(String title, Calendar start, Calendar end) throws IOException
    {
        // set up the url
        StringBuilder url = new StringBuilder(query);
        url.append("prop=revisions&rvlimit=max&titles=");
        url.append(URLEncoder.encode(normalize(title), "UTF-8"));
        url.append("&rvprop=timestamp%7Cuser%7Cids%7Cflags%7Csize%7Ccomment");
        if (end != null)
        {
            url.append("&rvend=");
            url.append(calendarToTimestamp(end));
        }
        url.append("&rvstart");

        // Hack time: since we cannot use rvstart (a timestamp) and rvstartid
        // (an oldid) together, let's make them the same thing.
        String rvstart = "=" + calendarToTimestamp(start == null ? makeCalendar() : start);
        ArrayList<Wiki.Revision> revisions = new ArrayList<Wiki.Revision>(1500);

        // main loop
        do
        {
            String temp = url.toString();
            if (rvstart.charAt(0) != '=')
                temp += ("id=" + rvstart);
            else
                temp += rvstart;
            String line = fetch(temp, "getPageHistory");

            // set continuation parameter
            if (line.contains("rvstartid=\""))
                rvstart = parseAttribute(line, "revstartid", 0);
            else
                rvstart = null;

            // parse stuff
            for (int a = line.indexOf("<rev "); a > 0; a = line.indexOf("<rev ", ++a))
            {
                int b = line.indexOf("/>", a);
                revisions.add(parseRevision(line.substring(a, b), title));
            }
        }
        while (rvstart != null);
        // populate previous/next
        int size = revisions.size();
        Wiki.Revision[] temp = revisions.toArray(new Wiki.Revision[size]);
        for (int i = 0; i < size; i++)
        {
            if (i != 0)
                temp[i].next = temp[i - 1].revid;
            if (i != size - 1)
                temp[i].sizediff = temp[i].size - temp[i + 1].size;
            else
                temp[i].sizediff = temp[i].size;
        }
        log(Level.INFO, "Successfully retrieved page history of " + title + " (" + size + " revisions)", "getPageHistory");
        return temp;
    }