def make_array(self): chapter_ranges = [] for rng in self.ranges: min_chapter = Pyricope._get_chapter(min(rng)) max_chapter = Pyricope._get_chapter(max(rng)) if min_chapter == max_chapter: chapter_ranges.append(rng) else: chapter_ranges += irange(min(rng), Pyricope._get_last_verse(self.book, min_chapter)) for chapter in range(min_chapter + 1, max_chapter): chapter_ranges.append( irange( Pyricope._get_first_verse(self.book, chapter), Pyricope._get_last_verse(self.book, chapter) ) ) chapter_ranges.append( irange( Pyricope._get_first_verse(self.book, max_chapter), max(rng) ) ) return flatten(chapter_ranges)
def _group_array_into_ranges(cls, ary): if not ary: return [] ary = sorted(compact(flatten(ary))) ranges = [] range_start = ary.pop(0) range_end = range_start while True: if not ary: break next_value = ary.pop(0) if (next_value == cls._get_next_verse(range_end) or next_value == cls._get_start_of_next_chapter(range_end)): range_end = next_value else: ranges.append(irange(range_start, range_end)) range_start = range_end = next_value ranges.append(irange(range_start, range_end)) return ranges