public function testGroupRanges() { $r1 = new Reference(); $r1->addBookChapterAndVerseRange(1, 2, 6, 7); $r1->addBookChapterAndVerseRange(1, 2, 10, 14); $r1->addBookChapterAndVerseRange(1, 3, 2, 4); $groups = $r1->groupRanges(); $this->assertEquals(2, count($groups)); list($group1, $group2) = $groups; $this->assertEquals(2, count($group1)); $this->assertEquals(1, count($group2)); // Overlapping chapter... $r2 = new Reference(); $r2->addBookAndChapter(1, 2); $r2->addBookChapterAndVerse(1, 3, 1); $r2->addBookChapterAndVerseRange(1, 3, 7, 8); $groups = $r2->groupRanges(); $this->assertEquals(2, count($groups)); list($group1, $group2) = $groups; $this->assertEquals(1, count($group1)); $this->assertEquals(1, count($group2)); // matt+18;19.1,3,5,7 -> 18:1-19:1; 19:3,5,7 $r3 = new Reference(); $r3->addBookAndChapter(1, 18); $r3->addBookChapterAndVerse(1, 19, 1); $r3->addBookChapterAndVerse(1, 19, 3); $r3->addBookChapterAndVerse(1, 19, 5); $r3->addBookChapterAndVerse(1, 19, 7); $groups = $r3->groupRanges(); $this->assertEquals(2, count($groups)); list($group1, $group2) = $groups; $this->assertEquals(1, count($group1)); $this->assertEquals(3, count($group2)); }
/** * getChapterHandleGrid * * @param Reference $reference * @return array (2-D) of reference handle, ready for use in routes. */ public function getChapterHandleGrid(Reference $reference, $width = 10) { if ($quadruple = $reference->getFirstQuadruple()) { list($b, $s, $c, $v) = $quadruple; $chapters = $this->getChapters($b); $handles = []; foreach (range(1, $chapters) as $c) { $r = $this->createReferenceFromBookAndChapter($b, $c); $handles[] = $this->getHandle($r); } return array_chunk($handles, $width); } return []; }