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; } } } }