Example #1
0
        // 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();
        }
Example #2
0
        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];
                    }
                }
            }
        }
Example #3
0
 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.");
         }
     }
 }
Example #4
0
 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));
     }
 }
Example #5
0
        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);
            }
        }
Example #6
0
        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);
                }
            }
        }
Example #7
0
 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));
     }
 }
Example #8
0
        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);
        }
Example #9
0
        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");
        }
Example #10
0
 // Implementation
 private void InitAccum()
 {
     _bible = new Bible();
     _curBook = null;
     _curChapter = null;
     _preAccum = null;
     _lineNo = 0;
 }
Example #11
0
        // Constructor
        public BookCollection(Bible bible)
        {
            if(bible == null) throw new ArgumentNullException("bible");

            _bible = bible;
            _books = new Book[66]; // We are not Popish here!
        }