示例#1
0
QList<int> Differ::getPageList(int which, PdfDocument pdf)
{
    // Poppler has 0-based page numbers; the UI has 1-based page numbers
    QString page_string = (which == 1 ? pageRangeDoc1 : pageRangeDoc2);
    bool error = false;
    QList<int> pages;
    page_string = page_string.replace(QRegExp("\\s+"), "");
    QStringList page_list = page_string.split(",");
    bool ok;
    if (page_string.isEmpty())
    {
        for (int page = 0; page < pdf->numPages(); ++page)
            pages.append(page);
    }
    else
    {
        foreach (const QString &page, page_list) {
            int hyphen = page.indexOf("-");
            if (hyphen > -1) {
                int p1 = page.left(hyphen).toInt(&ok);
                if (!ok || p1 < 1) {
                    error = true;
                    break;
                }
                int p2 = page.mid(hyphen + 1).toInt(&ok);
                if (!ok || p2 < 1 || p2 < p1) {
                    error = true;
                    break;
                }
                if (p1 == p2)
                    pages.append(p1 - 1);
                else {
                    for (int p = p1; p <= p2; ++p) {
                        if (p > pdf->numPages())
                            break;
                        pages.append(p - 1);
                    }
                }
            }
            else {
                int p = page.toInt(&ok);
                if (ok && p > 0 && p <= pdf->numPages())
                    pages.append(p - 1);
                else {
                    error = true;
                    break;
                }
            }
        }
    }