// Constructor public Book(Bible bible, BookName bookId) { if(bible == null) throw new ArgumentNullException("bible"); if((Int32) bookId < 0 || (Int32) bookId > 65) throw new ArgumentOutOfRangeException("bookId"); _bible = bible; _book = bookId; _chapters = new ChapterCollection(); }
public AllVersesCollection(Bible bible) { _verses = new Verse[bible.VerseCount]; // Accumulate the verses Int32 book; Int32 i; Book b; Chapter ch; for (book = 0, i = 0; book < bible.Books.Count; ++book) { b = bible.Books[(BookName) book]; Int32 chapter; for (chapter = 0; chapter < b.Chapters.Count; ++chapter) { ch = b.Chapters[chapter]; Int32 verse; for (verse = 0; verse < ch.Verses.Count; ++verse) { _verses[i++] = ch.Verses[verse]; } } } }
private static void WriteVerseIndex(Bible bible, BinaryWriter wr) { Int32 id = 0; for (Int32 i = 0; i < bible.Books.Count; ++i) { Book book = bible.Books[(BookName) i]; for (Int32 j = 0; j < book.Chapters.Count; ++j) { Chapter ch = book.Chapters[j]; if (ch.Preface != null) { ch.Preface.WriteVerseIndexData(wr); if (ch.Preface.NonVerseId != id++) throw new Exception("SanityCheck."); } for (Int32 k = 0; k < ch.Verses.Count; ++k) { Verse v = ch.Verses[k]; v.WriteVerseIndexData(wr); if (v.VerseId != id++) throw new Exception("SanityCheck."); } } if (book.Postscript != null) { book.Postscript.WriteVerseIndexData(wr); if (book.Postscript.NonVerseId != id++) throw new Exception("SanityCheck."); } } }
private static void WriteVerseData(Bible bible, BinaryWriter wr) { Encoding enc = Encoding.ASCII; for (Int32 i = 0; i < bible.Books.Count; ++i) { Book book = bible.Books[(BookName) i]; for (Int32 j = 0; j < book.Chapters.Count; ++j) { Chapter ch = book.Chapters[j]; if (ch.Preface != null) wr.Write(enc.GetBytes(ch.Preface.NonVerseData)); for (Int32 k = 0; k < ch.Verses.Count; ++k) { wr.Write(enc.GetBytes(ch.Verses[k].VerseData)); } } if (book.Postscript != null) wr.Write(enc.GetBytes(book.Postscript.NonVerseData)); } }
private static void WriteExtraMarkup(Bible bible, BinaryWriter wr) { // Reset stream Stream input = bible.BibleMarkup; input.Seek(0, SeekOrigin.Begin); // Copy data var buff = new Byte[1024]; while (true) { Int32 bytesRead = input.Read(buff, 0, 1024); if (bytesRead <= 0) break; wr.Write(buff, 0, bytesRead); } }
private static void WriteChapIndex(Bible bible, BinaryWriter wr) { for (Int32 i = 0; i < bible.Books.Count; ++i) { Book book = bible.Books[(BookName) i]; for (Int32 j = 0; j < book.Chapters.Count; ++j) { Chapter ch = book.Chapters[j]; Int32 verseCount = ch.Verses.Count; ChapterExtra extra = ChapterExtra.None; if (ch.Preface != null) { extra |= ChapterExtra.HasDesc; ++verseCount; } if (j == book.Chapters.Count - 1 && book.Postscript != null) { extra |= ChapterExtra.HasPostscript; ++verseCount; } wr.Write(checked((Byte) verseCount)); wr.Write((Byte) extra); } } }
private static void WriteBookIndex(Bible bible, BinaryWriter wr) { for (Int32 i = 0; i < bible.Books.Count; ++i) { Book book = bible.Books[(BookName) i]; wr.Write(checked((Byte) book.Chapters.Count)); } }
private static void CalcStats(Bible bible, WordIndex idx) { Int32 maxVerseSize = 0; // Get the words s_CSwords = idx.CaseSensitiveWords.GetAllWords(); s_CSwordsRev = idx.CaseSensitiveWords.GetAllWordsRev(s_CSwords); s_CIwords = idx.CaseInsensitiveWords.GetAllWords(); s_CIwordsRev = idx.CaseInsensitiveWords.GetAllWordsRev(s_CIwords); using (StreamWriter wr = System.IO.File.CreateText("c:\\words.txt")) { foreach (WordObject w in s_CIwords) { wr.WriteLine(w.Word); } } // Calc word data size & verse ref elements for Case Sensitive words s_CSwordDataSize = 0; s_CSverseRefElements = 0; foreach (WordObject t in WordsCaseSensitive) { s_CSwordDataSize += t.Word.Length; s_CSverseRefElements += t.VerseRefCount; } // Calc word data size & verse ref elements for Case Sensitive words s_CIwordDataSize = 0; s_CIverseRefElements = 0; foreach (WordObject t in WordsCaseInsensitive) { s_CIwordDataSize += t.Word.Length; s_CIverseRefElements += t.VerseRefCount; } // Calc num chapters, num verses, and verse size s_chapIndexElements = 0; s_verseIndexElements = 0; s_verseDataSize = 0; for (Int32 i = 0; i < bible.Books.Count; ++i) { Book book = bible.Books[(BookName) i]; s_chapIndexElements += book.Chapters.Count; for (Int32 j = 0; j < book.Chapters.Count; ++j) { Chapter ch = book.Chapters[j]; s_verseIndexElements += ch.Verses.Count; if (ch.Preface != null) { ++s_verseIndexElements; ch.Preface.ProcessItalicIndex(s_italicPosIndex); ch.Preface.ProcessWordPosIndex(s_wordPosIndex); maxVerseSize = Math.Max(maxVerseSize, ch.Preface.NonVerseData.Length); s_verseDataSize += ch.Preface.NonVerseData.Length; } for (Int32 k = 0; k < ch.Verses.Count; ++k) { Verse v = ch.Verses[k]; v.ProcessItalicIndex(s_italicPosIndex); v.ProcessWordPosIndex(s_wordPosIndex); maxVerseSize = Math.Max(maxVerseSize, v.VerseData.Length); s_verseDataSize += v.VerseData.Length; } } if (book.Postscript != null) { ++s_verseIndexElements; book.Postscript.ProcessItalicIndex(s_italicPosIndex); book.Postscript.ProcessWordPosIndex(s_wordPosIndex); maxVerseSize = Math.Max(maxVerseSize, book.Postscript.NonVerseData.Length); s_verseDataSize += book.Postscript.NonVerseData.Length; } } // Calc extra markup size s_extraMarkupSize = checked((Int32) bible.BibleMarkup.Length); Console.WriteLine("Extra markup size: {0}", s_extraMarkupSize); Console.WriteLine("Max verse data size: {0}", maxVerseSize); Console.WriteLine("Max words per verse: {0}", s_wordPosIndex.MaxWordsPerVerse); Console.WriteLine("Max italics per verse: {0}", s_italicPosIndex.MaxItalicsPerVerse); }
public static void Write(Bible bible, WordIndex idx, BinaryWriter wr) { Console.WriteLine("Writing bible..."); CalcStats(bible, idx); var header = new HeaderWriter(); WritePos(wr, "Header Begin"); header.WriteHeader(wr); WritePos(wr, "Case Sensitive Begin"); WriteWordIndex(WordsCaseSensitive, WordsRevCaseSensitive, wr); WritePos(wr, " Word Data"); WriteWordData(WordsCaseSensitive, wr); WritePos(wr, " Verse Refs"); WriteVerseRefs(WordsCaseSensitive, wr); WritePos(wr, "Case Sensitive Begin"); WriteWordIndex(WordsCaseInsensitive, WordsRevCaseInsensitive, wr); WritePos(wr, " Word Data"); WriteWordData(WordsCaseInsensitive, wr); WritePos(wr, " Verse Refs"); WriteVerseRefs(WordsCaseInsensitive, wr); WritePos(wr, "Book Index Begin"); WriteBookIndex(bible, wr); WritePos(wr, "Chapter Index Begin"); WriteChapIndex(bible, wr); WritePos(wr, "Verse Index Begin"); WriteVerseIndex(bible, wr); WritePos(wr, "Verse Data Begin"); WriteVerseData(bible, wr); WritePos(wr, "Extra Markup Begin"); WriteExtraMarkup(bible, wr); WritePos(wr, "Word Pos Index Begin"); WordPosIndex.Write(wr); WritePos(wr, "Italic Pos Index Begin"); ItalicsPosIndex.Write(wr); WritePos(wr, "End of File"); }
// Implementation private void InitAccum() { _bible = new Bible(); _curBook = null; _curChapter = null; _preAccum = null; _lineNo = 0; }
// Constructor public BookCollection(Bible bible) { if(bible == null) throw new ArgumentNullException("bible"); _bible = bible; _books = new Book[66]; // We are not Popish here! }