#!/usr/bin/perl use strict; use warnings; use English; use Data::Dumper; my $input; my %bible; my $userinput; my $prologue; my @books; my $book; my $bookname; my @booknames; my @chapters; my $chapter; my $title; my $more; my @paragraphs; my $paragraph; my @verses; my $verse; my $chapterVerses; my $bookVerses; my $bibleVerses; my @comments; my @lines; my $line; my $bookindex = 0; #book my $c = 0; #chapter my $p = 0; #paragraph my $v = 0; #verse my $x = 0; #extra comments by Challoner while (<>) { $input .= $_; } @books = split (/BOOK: |THE HOLY GOSPEL OF JESUS CHRIST ACCORDING TO ST. /, $input); #print $books[-1]; print scalar(@books) . " books\n"; $prologue = shift @books; #print "prologue: " . $prologue . "\n"; print '-'x80 . "\n"; print scalar(@books) . " books\n"; my $debug = 0; my $text; foreach $book (@books) { # print $book if $debug == 1; @lines = split(/^/, $book); # print scalar(@lines) . " lines: first few lines:\n" if $debug == 1; # print join("",@lines[1..5]) if $debug == 1; # print "\n\n" if $debug == 1; # print "last few lines:\n" if $debug == 1; # print join("",@lines[-5..-1]) if $debug == 1; # print "\n\n" if $debug == 1; $bookname = shift @lines; chomp($bookname) if $bookname; # next if !$bookname; $bookindex++; $booknames[$bookindex] = $bookname; # print "Book '$bookindex': $bookname\n"; # print "Book/Epistle/Prophecy: '$bookname'\n"; #Press ; # print "$bookname\n"; #Press ; # print join(@lines); @chapters = split('[a-zA-Z0-9]+ Chapter|Ruth \d*\n', $book); $prologue = shift @chapters; print "$bookname has " . scalar(@chapters) . " chapters\n"; # print "prologue: $prologue\n"; $c = 0; $v = 0; $bookVerses = 0; foreach $chapter (@chapters) { $c++ unless $chapter =~ m/according to the Hebrews/; # print "splitting chapter $c\n"; @paragraphs = split (/\n\n/,$chapter); # print "first few paragraphs:" . join("\n",@paragraphs[0..3]) . "\n\n"; $title = shift @paragraphs; # check to see if it really was a title or was a verse. if ($title !~ m/(\d+):(\d+)\. /) { while ($more = shift @paragraphs) { if ($more !~ m/(\d+):(\d+)\. /) { $title .= "\n\n" . $more . "\n\n"; #make sure to make this multiple paragraphs in html } else { # print "putting back $more into paragraphs\n"; unshift (@paragraphs,$more); last; } } # print "title: $title\n"; # make it in italics or bold # print "Chapter $c title: " . $title . "\n"; # print "Chapter $c title: " . $title . "\n"; } $p = 0; $chapterVerses = 0; $x = 0; foreach $paragraph (@paragraphs) foreach $paragraph (@paragraphs) { $p++; # print "paragraph #$p '$paragraph'\n"; # verse if it begins with a number if ($paragraph =~ m/(\d+):(\d+)\. /) { #print "verse: $paragraph\n\n"; #print "mismatch of expected chapter $c vs. parsed $1\n" if $1 != $c; $verses[$chapterVerses] = $paragraph; # save on per chapter basis $chapterVerses++ unless $chapter =~ m/115|147/; #Psalms that have fun ny continuation. # print "\$1 is $1 \$2 pattern match failed\n" && next if !defined($2 ); # print "mismatch of expected verse $chapterVerses vs. parsed $2\n" i f $2 != $chapterVerses; # print "in $paragraph\n" if $2 != $chapterVerses; $bookVerses++; $bibleVerses++; #print "verse $chapterVerses " . $verses[$chapterVerses] . "\n"; # print $verses[$chapterVerses] . "\n\n"; } elsif ($paragraph !~ m/^\s*$/) { #print "commentary: '$paragraph'\n"; # x as in extra? $x++; $comments[$x] = $paragraph; # save these somehow or make font/color d ifferent # print "$x: '" . $comments[$x] . "'\n"; } } #print "Chapter $c has $chapterVerses verses.\n"; # print "$bookname has $bookVerses verses in total so far.\n"; # print "The bible has $bibleVerses verses in total so far.\n"; # print "Chapter $c has $x comments.\n"; # save book name, verses, comments before going to next book # print "\nsaving book name($bookname), chapter $c, verses, and commentary\n" ; #my $allverses = join("\n\n",@verses); #print "The verses(" . @verses . "): $allverses\n"; # gotta figure out how to pass this in a sub routine. # save($bookname,$c,\@verses,\@comments); # my @saved_verses = @verses; # print "setting \$bible[$bookname][$c]['verses'] to " . \@verses . "\n"; $bible{"$bookname"}{"$c"}{'verses'} = \@verses; my $size = $#verses; # print "size=$size\n"; #my @returned = $bible{$bookname}{$c}{'verses'}; #print join("\n\n",@{$bible{$bookname}{$c}{'verses'}{$_}}) . "\n"; # Hash of arrays? my $i; foreach $i ( 0..$#{$bible{$bookname}{$c}{'verses'}}) { print "$bible{$bookname}{$c}{'verses'}[$i]\n\n"; #line 173 } #print join("\n\n",@returned) . "\n"; @verses = (); # clear it out so we can start verses for next chapter. # $bible{$bookname}{$c}{'comments'} = join ("\n\n",@comments); #$userinput = ; } # foreach $chapter # print "\n===========END OF $bookname ========================\n"; # $userinput = ; } #print join(', ',@booknames) . " book names\n"; #print scalar(@books) . " books in the bible \n"; #foreach $book (keys %bible) #{ # print "$book\n"; # @verses{$book}{$chapter} = split('\n\n', @{$chapters{$chapter}}); # print "\n============END OF CHAPTER=======================\n"; # $userinput = ; #} while (1) { #Take in values like Gn 1:3, or Genesis, or Gn 3 and display appropriate # Chapter and verse, book, or Chapter in book. print ("Please enter the Book, Chapter, and/or Verse you want: "); $userinput = ; # stop when user types quit. or maybe "amen" :-). chomp $userinput; last if ($userinput eq 'quit'); last if ($userinput eq 'amen'); # Need a mapping for Gn->Genesis, Zeph->Zephaniah etc. my ($qbook,$qchapter,$qverse); if ($userinput =~ m/([A-Z]*)/) { print("Got book $1\n"); $qbook = $1; } elsif ($userinput =~ m/(\w+) (\d)/) { print("Got book $1, chapter $2\n"); $qbook = $1; $qchapter = $2; } elsif ($userinput =~ m/[\s]*(\w+)[ ]*[(\d+)[:]*(\d+)][\s]*/) { $qbook = $1; $qchapter = $2; $qverse = $3; printf("got all 3 \n"); } else { print "Doh!\n"; last; } next unless $qbook; print("$userinput: You're looking for: $qbook\n") if $qbook; print("Chapter: $qchapter\n") if $qchapter; print("Verse: $qverse\n") if $qverse; # remember to check that the verse, chapter, and book exist. if ($qverse) { print("verse specified: Book: $qbook doesn't exist") && next if (!exists($bible{"$qbook"})); print("chapter specified: $qbook Chapter: $qchapter doesn't exist") && next if (!exists($bible{"$qbook"}{"$qchapter"})); print("book specified: $qbook $qchapter:$verse doesn't exist. $qbook $qchapte r has only " . scalar($bible{"$qbook"}{"$qchapter"}{'verses'}) . " verses.\n") && nex t if (!exists($bible{$book}{$chapter}{$verse})); print $bible{$qbook}{$qchapter}{'verses'}[$verse] if $verse; } elsif ($qchapter) { print("no verse: Book: $book doesn't exist\n") && next if (!exists($bible{$qb ook})); print("no chapter: $qbook Chapter: $qchapter doesn't exist\n") && next if (!e xists($bible{$qbook}{$qchapter})); print $bible{$qbook}{$qchapter} if $qchapter; } elsif ($qbook) { print ("Book: $qbook doesn't exist\n") && next if (!exists($bible{$qbook})); #print ("Book is: " . join("\n",@books)); foreach $chapter ( sort {$a <=> $b} keys ($bible{$qbook}) ) { print ("joining chapter $chapter verses\n"); #my $allverses = join("\n\n",$bible{$qbook}{$chapter}{'verses'}); #print $allverses . "\n\n"; my $i; print "$#{$bible{$qbook}{$chapter}{'verses'}} verses\n"; foreach $i (0..$#{$bible{$qbook}{$chapter}{'verses'}}) { print "$bible{$qbook}{$chapter}{'verses'}[$i]\n\n"; #line 270 } } } else { print("Couldn't parse input '$userinput'\n"); } } #while ($userinput != "amen"); # ok do it 2 ways. exit 1; sub save { my ($bookname,$chapter,$verses,$comments) = @ARG; my @saved_verses = \$verses; print "$bookname, Chapter $chapter verses are: " . join("\n",@saved_verses) . "\n "; $bible{$bookname}{$chapter}{'verses'} = \@saved_verses; # $bible{$bookname}{$chapter}{'comments'} = @comments; } foreach $book (keys %bible) { print "book: $book\n"; # @verses{$book}{$chapter} = split('\n\n', @{$chapters{$chapter}}); # print "\n============END OF CHAPTER=======================\n"; # $userinput = ; }