TEST(PageRangesTest, single_range_lopen) { PageRanges pr; ASSERT_TRUE(pr.parse("-19")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,19)); ASSERT_EQ(pr.numberOfPages(), 19u); }
TEST(PageRangesTest, multiple2) { PageRanges pr; ASSERT_TRUE(pr.parse("2,6,9,1,75,6,3")); ASSERT_EQ(pr.size(), 4u); Range cmp[] = {{1,3},{6,6},{9,9},{75,75}}; ASSERT_TRUE(is_equal(pr, cmp)); }
TEST(PageRangesTest, single_range_ropen) { PageRanges pr; ASSERT_TRUE(pr.parse("4-", 100)); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(4,100)); ASSERT_EQ(pr.numberOfPages(), 97u); }
TEST(PageRangesTest, single) { PageRanges pr; ASSERT_TRUE(pr.parse("123")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(123,123)); ASSERT_EQ(pr.numberOfPages(), 1u); }
TEST(PageRangesTest, single_range_inv) { PageRanges pr; ASSERT_TRUE(pr.parse("19-3")); ASSERT_FALSE(pr.ranges().empty()); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(3,19)); ASSERT_EQ(pr.numberOfPages(), 17u); }
TEST(PageRangesTest, error) { PageRanges pr; ASSERT_FALSE(pr.parse("x")); ASSERT_FALSE(pr.parse("5-x")); ASSERT_FALSE(pr.parse("5 6")); ASSERT_FALSE(pr.parse("5,")); }
TEST(PageRangesTest, overlap3) { PageRanges pr; ASSERT_TRUE(pr.parse("22-30, 5-11, 21-23, 12-19")); ASSERT_EQ(pr.size(), 2u); Range cmp[] = {{5,19},{21,30}}; ASSERT_TRUE(is_equal(pr, cmp)); }
TEST(PageRangesTest, overlap2) { PageRanges pr; ASSERT_TRUE(pr.parse("23-30, 5-11, 17-23, 12-19")); ASSERT_EQ(pr.size(), 1u); Range cmp[] = {{5,30}}; ASSERT_TRUE(is_equal(pr, cmp)); }
TEST(PageRangesTest, overlap1) { PageRanges pr; ASSERT_TRUE(pr.parse("5-11, 8-15")); ASSERT_EQ(pr.size(), 1u); Range cmp[] = {{5,15}}; ASSERT_TRUE(is_equal(pr, cmp)); }
TEST(PageRangesTest, multiple3) { PageRanges pr; ASSERT_TRUE(pr.parse("2,6,9-11,1,25-,19-13,6,3", 100)); ASSERT_EQ(pr.size(), 5u); Range cmp[] = {{1,3},{6,6},{9,11},{13,19},{25,100}}; ASSERT_TRUE(is_equal(pr, cmp)); }
TEST(PageRangesTest, multiple1) { PageRanges pr; ASSERT_TRUE(pr.parse("11,6,9,1,75,6,3")); ASSERT_EQ(pr.size(), 6u); Range cmp[] = {{1,1},{3,3},{6,6},{9,9},{11,11},{75,75}}; ASSERT_TRUE(is_equal(pr, cmp)); ASSERT_EQ(pr.numberOfPages(), 6u); }
static bool is_equal (const PageRanges &pr, const Range *r) { int i=0; for (PageRanges::ConstIterator it=pr.begin(); it != pr.end(); ++it) { if (it->first != r[i].l || it->second != r[i].r) return false; ++i; } return true; }
void ImageToSVG::convert (const std::string &rangestr, pair<int,int> *pageinfo) { checkGSAndFileFormat(); PageRanges ranges; if (!ranges.parse(rangestr, totalPageCount())) throw MessageException("invalid page range format"); int pageCount=0; // number of pages converted for (const auto &range : ranges) { convert(range.first, range.second, pageinfo); if (pageinfo) pageCount += pageinfo->first; } if (pageinfo) pageinfo->first = pageCount; }
/** Convert DVI pages specified by a page range string. * @param[in] rangestr string describing the pages to convert * @param[out] pageinfo (number of converted pages, number of total pages) */ void DVIToSVG::convert (const string &rangestr, pair<int,int> *pageinfo) { PageRanges ranges; if (!ranges.parse(rangestr, numberOfPages())) throw MessageException("invalid page range format"); Message::mstream(false, Message::MC_PAGE_NUMBER) << "pre-processing DVI file (format " << getDVIFormat() << ")\n"; if (DVIToSVGActions *actions = dynamic_cast<DVIToSVGActions*>(getActions())) { PreScanDVIReader prescan(getInputStream(), actions); actions->setDVIReader(prescan); prescan.executeAllPages(); actions->setDVIReader(*this); SpecialManager::instance().notifyPreprocessingFinished(); } FORALL(ranges, PageRanges::ConstIterator, it) convert(it->first, it->second); if (pageinfo) { pageinfo->first = ranges.numberOfPages(); pageinfo->second = numberOfPages(); } }
TEST(PageRangesTest, overlap4) { PageRanges pr; ASSERT_TRUE(pr.parse("-15, 20-, 8, 12-16, 18-19", 100)); ASSERT_EQ(pr.size(), 2u); Range cmp[] = {{1,16},{18,100}}; ASSERT_TRUE(is_equal(pr, cmp)); ASSERT_TRUE(pr.parse("17")); ASSERT_EQ(pr.size(), 1u); ASSERT_EQ(pr.ranges().front(), PageRanges::Range(1,100)); }