// assumes the ReferenceItem has already been built public List<ReferenceItem> BuildVerseListFromRange(ReferenceItem item, BackEndInitializer backend) { if (item.Range) { List<ReferenceItem> expandedReferenceList = new List<ReferenceItem>(); // get list of the books int startBookIndex = Array.IndexOf(backend.CurrentBooks, item.StartBook); int endBookIndex = Array.IndexOf(backend.CurrentBooks, item.EndBook); int startingChapter; int endingChapter; int startingVerse; int endingVerse; string book; // cycle through the books selected for (int bookIndex = startBookIndex; bookIndex <= endBookIndex; bookIndex++) { book = backend.CurrentBooks[bookIndex]; if (book == item.StartBook) // get starting chapter and verse { startingChapter = (int)item.StartChapter; } else { startingChapter = 1; } if (book == item.EndBook) // get ending chapter and verse { endingChapter = (int)item.EndChapter; } else { endingChapter = backend.CurrentChapters(book).Count(); } // cycle through chapters for current book for (int chapter = startingChapter; chapter <= endingChapter; chapter++) { if (book == item.StartBook && chapter == item.StartChapter) { startingVerse = (int)item.StartVerse; } else { startingVerse = 1; } if (book == item.EndBook && chapter == item.EndChapter) { endingVerse = (int)item.EndVerse; } else { endingVerse = backend.CurrentVerses(book, chapter).Count; } // cycle through verses for currect chapter for (int verse = startingVerse; verse <= endingVerse; verse++) { expandedReferenceList.Add(new ReferenceItem(book, chapter, verse, false, backend.GetVerse(book, chapter, verse))); } } } return expandedReferenceList; } else { return null; } }
// copy over full reference data on each item public void CompleteReferences(BackEndInitializer backend) { ReferenceItem reference; for (int i = 0; i < _referenceList.Count; i++) { reference = _referenceList[i]; // handle missing starting references if (reference.StartChapter == null) // whole book listed { reference.StartChapter = 1; if (reference.Range == false) { reference.EndBook = reference.StartBook; reference.EndChapter = backend.CurrentChapters(reference.StartBook).Last(); } } if (reference.StartVerse == null) // whole chapter listed { reference.StartVerse = 1; if (reference.Range == false) { reference.EndBook = reference.StartBook; if (reference.EndChapter == null) { reference.EndChapter = reference.StartChapter; } reference.EndVerse = backend.CurrentVerses(reference.StartBook, (int)reference.EndChapter).Count; } } // handle missing ending references if (reference.Range == true) { if (reference.EndBook == null) // no book -- john 3-4 { reference.EndBook = reference.StartBook; } if(reference.EndChapter == null && reference.StartBook != reference.EndBook) // 1 john - 2 john { reference.EndChapter = backend.CurrentChapters(reference.EndBook).Last(); } else if (reference.EndChapter == null) // no chapter --> john 3:3-5 {// so same chapter for start as end reference.EndChapter = reference.StartChapter; } if (reference.EndVerse == null) // no verse --> john 3 - john 4 or john 3 - 4 {// so last verse of endChapter reference.EndVerse = backend.CurrentVerses(reference.EndBook, (int)reference.EndChapter).Count; } } // set reff range to true if range items have been filled in if (reference.EndBook != null) { reference.Range = true; } } }