Bible Verse Finder

UNKNOWN BOOK REFERENCE: Levitcus

Usage

http://tools.wmflabs.org/bibleversefinder/index.php?book=BOOK_NAME&verse=VERSE_REF&src=SRC_KEY

Book name

Many variants of bible books are allowed. See biblebooks_bibleref.txt.

Verse reference

For example:

Note that not all sources necessarily support all levels of specification. Some may not handle ranges, for instance.

Sources

The following were loaded from biblesrcs.txt

Source TitleMTPNDSrc Keys
!All sources1000!!all
1550 Stephanus New Testament (BibleGateway)69
1881 Westcott-Hort New Testament (BibleGateway)68
1894 Scrivener New Testament (BibleGateway)70
1934 Vietnamese Bible (BibleGateway)19
21st Century King James Version (BibleGateway)48KJ21
ASB Psalter - The Liturgical Psalter (Oremus)133
Albanian Bible (BibleGateway)1
All Targums on a verse (Comprehensive Aramaic Lexicon)150CAL
American Standard Version (BibleGateway)8ASV
Amplified Bible (BibleGateway)45AB
Ang Salita ng Diyos (BibleGateway)43
Arabic Life Application Bible (BibleGateway)28
Aramaic Targum Onkelos (Mechon Mamre)106TO
BCP Psalter (Oremus)134
BibleBrowser.com121BB
BibleCommenter.com (BibleBrowser)122BBC
Biblia Sacra Vulgata (BibleGateway)4
Biblia en Lenguaje Sencillo (BibleGateway)57
Bulgarian Bible (BibleGateway)21
Castillian (BibleGateway)41
Chinese Union Version (BibleGateway)22
Common Worship Psalter (Oremus)132
Conferenza Episcopale Italiana (BibleGateway)3
Contemporary English Version (BibleGateway)46CEV
Croatian Bible (BibleGateway)62
Darby Translation (BibleGateway)16Dar
Det Norsk Bibelselskap 1930 (BibleGateway)5
Dette er Biblen pA• dansk (BibleGateway)11
Dios Habla Hoy (BibleGateway)58
Douay-Rheims 1899 American Edition (BibleGateway)63
English Standard Version (BibleGateway)47ESV
Greek audio of New Testament (greeklatinaudio.com)135GMP3
Haitian Creole Version (BibleGateway)23
Hebrew - no vowels; Masoretic spelling (Mechon Mamre)102
Hebrew - plene spelling (Mechon Mamre)103
Hebrew MP3 recordings (The United Bible Society, © 1976)107HMP3
Hebrew verse recordings (bible.ort.org)110ORTAUD
Hebrew with Cantillation Marks (Mechon Mamre)101HC
Hebrew with Vowels (Mechon Mamre)100HV
Hebrew-English - paraellel MT and JPS 1917 (Mechon Mamre)105HE
Het Boek (BibleGateway)30
Hiligaynon Bible (BibleGateway)71
Holman Christian Standard Bible (BibleGateway)77HCSB
Hungarian KAiroli (BibleGateway)17
Icelandic Bible (BibleGateway)18
Il Nuovo Testamento in Lingua Moderna (BibleGateway)34
Jewish Publication Society 1917 (Mechon Mamre)104JPS
Jo√£o Ferreira de Almeida Atualizada (BibleGateway)25
Judaica Press Complete Tanach (Chabad.org)125JP
Judaica Press Complete Tanach with Rashi (Chabad.org)126JPR
King James Version (BibleGateway)9KJV
Korean Bible (BibleGateway)20
La Bible du Semeur (BibleGateway)32
La Biblia de las Américas (BibleGateway)59
La Nuaova Diodati (BibleGateway)55
Latin audio of New Testament (greeklatinaudio.com)136LMP3
Levande Bibeln (BibleGateway)44
Louis Segond (BibleGateway)2
Luther Bibel 1545 (BibleGateway)10
Maori Bible (BibleGateway)24
Navigating the Bible II (bible.ort.org)145ORT
New American Bible (USCCB)130NAB
New American Standard Bible (BibleGateway)49NASB
New International Reader's Version (BibleGateway)76NIrV
New International Version (BibleGateway)31NIV
New International Version - UK (BibleGateway)64NIVUK
New King James Version (BibleGateway)50NKJV
New Life Version (BibleGateway)74NLV
New Living Translation (BibleGateway)51NLT
New Revised Standard Version (Oremus)131NRSV
Nova Vers√£o Internacional (BibleGateway)36
Nueva Versión Internacional (BibleGateway)42
Nádej pre kazdého (BibleGateway)40
O Livro (BibleGateway)37
Online Parallel Bible (bible.cc)120OPB
Reimer 2001 (BibleGateway)56
Reina-Valera 1960 (BibleGateway)60
Reina-Valera 1995 (BibleGateway)61
Reina-Valera Antigua (BibleGateway)6
Romanian (BibleGateway)38
Romanian Cornilescu Version (BibleGateway)26
Russian Synodal Version (BibleGateway)13
ScriptureText.com multilingual (BibleBrowser)123BBL
Scrollscraper Tikkun140STKN
Slovo Zhizny (BibleGateway)39
Slovo na cestu (BibleGateway)29
Svenska 1917 (BibleGateway)7
Swahili New Testament (BibleGateway)75
Targum Neofiti by chapter (Comprehensive Aramaic Lexicon)155
Targum Onqelos by chapter (Comprehensive Aramaic Lexicon)153
Targum Pseudo-Jonathan by chapter (Comprehensive Aramaic Lexicon)154
The Living Torah by Aryeh Kaplan (bible.ort.org)129TLT
The Message (BibleGateway)65TM
Worldwide English (New Testament) (BibleGateway)73
Wycliffe New Testament (BibleGateway)53
Young's Literal Translation (BibleGateway)15YLT

Canon inclusion codes

M - Mosaic Pentateuch
Genesis, Exodus, Leviticus, Numbers, Deuteronomy
T - remainder of Tanakh (Christian Old Testament)
Joshua, Judges, Samuel, Kings, Isaiah, Jeremiah, Ezekiel, Hosea, Joel, Amos, Obadiah, Jonah, Micah, Nahum, Habakkuk, Zephaniah, Haggai, Zechariah, Malachi, Chronicles, Psalms, Job, Proverbs, Ruth, Song of Songs, Ecclesiastes, Lamentations, Esther, Daniel, Ezra, Nehemiah
P - Psalms
Book of Psalms
N - Christian New Testament
Matthew, Mark, Luke, John, Acts, Romans, Corinthians, Galatians, Ephesians, Philippians, Colossians, Thessalonians, Timothy, Titus, Philemon, Hebrews, James, Peter, John, Jude, Revelation
D - Deuterocanonical texts
Tobit, Judith, Maccabees, Wisdom of Solomon, Sirach, Baruch

Script source

<?php 
/*  
   Bible Verse Finder (bibref) 
   Version 0.930 
    
   By Joel Nothman, 2005. jnothman at student dot usyd dot edu dot au 
   Free for distribution and derivation, but if you think it's that good, please cite the author! 
*/ 

/* 
  HISTORY: 
   - 0.930 - added Comprehensive Aramaic Lexicon sources - All targums on a verse, and pentateuch chapters 
   - 0.924 - added bible.ort.org Navigating the Bible II and Hebrew recordings 
   - 0.922 - added ScrollScraper Tikkun source 
   - 0.920 - added support for Hebrew Unicode numerals 
   - 0.910 - fixed 2 Timothy bug 
   - 0.901 - fixed namespace-related bugs 
   - 0.900 - basic implementation listing all sources for given book 
   - 0.861 - Implemented own Roman numeral conversion (due to licensing) 
   - 0.860 - Added bible.ort.org chapters (The Living Torah trans) 
   - 0.855 - Added three Psalters from Oremus.org 
   - 0.850 - Added John Isett's {biblebrowser,biblecommenter,scripturetext}.com 
   - 0.846 - Fix bug wit NRSV 
   - 0.845 - Added Greek and Latin NT recordings (greeklatinaudio.com) 
   - 0.842 - Added Hebrew MP3 recordings (United Bible Society, 1976; via snunit) 
   - 0.840 - listing of included canons for each source 
   - 0.825 - better handling of single-book references 
   - 0.820 - Added New Revised Standard Version (from bible.oremus.org) 
   - 0.810 - Added the New American Bible (from USCCB) 
   - 0.800 - Added chabad.org's publication of Judaica Press Complete Tanach 
   - 0.748 - Allow EN DASH to be used instead of - in verse reference 
   - 0.746 - Fix Isiah -> Isaiah 
   - 0.744 - Fix 2sa for Mechon Mamre 
   - 0.743 - support for Online Parallel Bible at bible.cc 
   - 0.741 - Minor num_conv() update 
    
  TODO: 
   - add Peshitta text (?), and parallel English-Vulgate (latinvulgate.com) 
   - preferences when listing all sources 
   - all Jewish sources, all Catholic sources, etc. 
   - Taking multiple sources for input and defaulting to others if first unavailable 
   - Other numerals eg Hebrew 
   - Other book name languages (partic Heb) / Unicode support 
   - ?Other texts 
*/ 
error_reporting(E_ALL E_NOTICE); 

define('SRC_FILE''biblesrcs.txt'); 
define('BOOK_FILE''biblebooks_bibleref.txt'); 

$INCL_TYPES 'MTPND'

function 
get_book_name($book) { 
    
$book strtolower(str_replace(array('.','-'), ''trim($book))); // remove unnecessary characters 
    
$fbooks fopen(BOOK_FILE'r'); 
    while (
$line fgets($fbooks)) { 
        
//$names = explode(',', substr($line, 2)); 
        
$names explode(','substr($line2)); 
        foreach (
$names as $n) { 
            if (
trim($n) == $book) { 
                return array(
$line[0], trim($names[0])); 
            } 
        } 
    } 
    
fclose($fbooks); 


function 
roman_to_int($r) { 
    
$r strtolower($r); 
    
$rvals = array('i'=>1'v'=>5'x'=>10'l'=>50'c'=>100'd'=>500'm'=>1000); 
    
$n 0
    for (
$i 0$i strlen($r); $i++) { 
        if ((
$i == strlen($r) - 1) or ($rvals[$r[$i]] >= $rvals[$r[$i+1]])) 
            
$n += $rvals[$r[$i]]; 
        else 
            
$n -= $rvals[$r[$i]]; 
    } 
    return 
$n


function 
hebrew_to_int($h) { 
    
$n 0
    for (
$i 0$i strlen($h); $i++) { 
        
$pos ord($h{$i}) - 0x8f
        switch(
$pos) { 
            case 
11: case 12$n+=20; break; 
            case 
13$n+=30; break; 
            case 
14: case 15$n+=40; break; 
            case 
16: case 17$n+=50; break; 
            case 
18$n+=60; break; 
            case 
19$n+=70; break; 
            case 
20: case 21$n+=80; break; 
            case 
22: case 23$n+=90; break; 
            default: 
              if (
$pos <= 10$n+=$pos
              elseif (
$pos <= 27$n += ($pos-23)*100
        } 
    } 
    return 
$n


function 
num_conv($n) { 
    if (!
$n
        return; 
    if (
$n{0} >= '0' and $n{0} <= '9'
        return 
intval($n); 
    if (
$n{0} <= 'z') { // assume Roman 
        
return roman_to_int(strtoupper($n)); 
    } 
    if (
$n{0} == "\xD7") { // assume Hebrew unicode 
        
return hebrew_to_int($n); 
    } 
    die(
'Unknown number form.'); 


function 
get_src_builder($src) { 
    
$fsrcs fopen(SRC_FILE'r'); 
    while (
$line fgets($fsrcs)) { 
        list(
$src_title$inclusions$keywords$function) = explode("\t"$line); 
        if (
$src_title[0] == '#'
            continue; 
        
$keywords explode(" "$keywords); 
        foreach (
$keywords as $key) { 
            if (!(
$key trim($key))) 
                continue; 
            if (
strtolower($key) == $src
                return 
$function
        } 
    } 
    
fclose($fsrcs); 


function 
biblegateway($num) { 
    global 
$ubook$v_range
    return 
"http://www.biblegateway.com/passage/?search=$ubook%20$v_range&version=$num"


function 
mamre_book($book) { 
    switch (
$book) { 
    case 
'genesis': return '01'
    case 
'exodus': return '02'
    case 
'leviticus': return '03'
    case 
'numbers': return '04'
    case 
'deuteronomy': return '05'
    case 
'joshua': return '06'
    case 
'judges': return '07'
    case 
'1 samuel': return '08a'
    case 
'2 samuel': return '08b'
    case 
'1 kings': return '09a'
    case 
'2 kings': return '09b'
    case 
'isaiah': return '10'
    case 
'jeremiah': return '11'
    case 
'ezekiel': return '12'
    case 
'hosea': return '13'
    case 
'joel': return '14'
    case 
'amos': return '15'
    case 
'obadiah': return '16'
    case 
'jonah': return '17'
    case 
'micah': return '18'
    case 
'nahum': return '19'
    case 
'habakkuk': return '20'
    case 
'zephaniah': return '21'
    case 
'haggai': return '22'
    case 
'zechariah': return '23'
    case 
'malachi': return '24'
    case 
'1 chronicles': return '25a'
    case 
'2 chronicles': return '25b'
    case 
'psalms': return '26'
    case 
'job': return '27'
    case 
'proverbs': return '28'
    case 
'ruth': return '29'
    case 
'songs': return '30'
    case 
'ecclesiastes': return '31'
    case 
'lamentations': return '32'
    case 
'esther': return '33'
    case 
'daniel': return '34'
    case 
'ezra': return '35a'
    case 
'nehemiah': return '35b'
    } 


function 
mamre($path$ext=".htm") { 
    global 
$book$s_chap$s_vers
    
$bid mamre_book($book); 
    if (!
$bid
        die(
"This book ($book) not in Mechon Mamre's collection."); 
    
$chap dechex(intval($s_chap/10)) . ($s_chap 10); 
    if (
$path[4] != ':'
        
$path "http://www.mechon-mamre.org".$path
    return 
"$path$bid$chap$ext#$s_vers"


function 
usccb_nab() { 
    global 
$book$s_chap$s_vers$no_chaps
    
$mybook str_replace(' '''$book); 
    if (
$mybook != "songs"
        
$path "$mybook/$mybook"
    else 
        
$path "songs/song"
    if (!
$no_chaps
        
$path $path $s_chap
    return 
"http://www.nccbuscc.org/nab/bible/$path.htm#v$s_vers"


function 
parallel_bible($domain) { 
    global 
$book$s_chap$s_vers
    
$mybook str_replace(' ''_'$book); 
    return 
"http://$domain/$mybook/$s_chap-$s_vers.htm"


function 
oremus($version) { 
    global 
$ubook$v_range
    return 
"http://bible.oremus.org/?passage=$ubook+$v_range&version=$version"



function 
chabadorg($rashi) { 
    global 
$book$s_chap
    require(
'bibchabad.php'); 
    
$aid $chabad_lookup[$book][intval($s_chap)]; 
    if (!
$aid
        die(
"This book/chapter ($book $s_chap) is not in Chabad.org's Judaica Press Complete Tanach."); 
    return 
"http://www.chabad.org/article.asp?aid=" $aid . ($rashi '&showrashi=true' ''); 


$ort_books = array( 
    
'genesis'     => 1
    
'exodus'      => 2
    
'leviticus'   => 3
    
'numbers'     => 4
    
'deuteronomy' => 5
); 

function 
ort_chap() { 
    global 
$ort_books$book$s_chap
    return 
"http://bible.ort.org/books/pentd2.asp?ACTION=displaypage&BOOK={$ort_books[$book]}&CHAPTER=$s_chap"


include(
"bibort.php"); 

function 
ort_ntb() { 
    global 
$ort_books$book$s_chap$s_vers
    
$ortb $ort_books[$book]; 
    return 
"http://bible.ort.org/books/torahd5.asp?action=displaypage&book=$ortb
      
"&chapter=$s_chap&verse=$s_vers&portion=".verse_parsha($ortb$s_chap$s_vers); 


function 
ort_aud() { 
    global 
$ort_books$book$s_chap$s_vers
    
$ortb $ort_books[$book]; 
    return 
sprintf("http://bible.ort.org/webmedia/t%d/%02d%02d.ra"$ortb$s_chap$s_vers); 


function 
helding_ntaudio($lang) { 
    global 
$book$s_chap
    
$mybook str_replace(' '''$book); 
    
$short substr($mybook03); 
    if (
$mybook == 'philemon'
        
$short 'phe'
    
$file sprintf("$short%02d{$lang[0]}"$s_chap); 
    if (
$lang == "greek" and ($short == 'mat' or $short == 'rev'
     or 
$lang == 'latin' and $short == 'rev'
        
$file strtoupper($file); 
    return 
"http://www.helding.net/greeklatinaudio/$lang/$mybook/$file.mp3"


function 
scrollscraper() { 
    global 
$ort_books$book$s_chap$s_vers$e_chap$e_vers
    return 
"http://scrollscraper.adatshalom.net/scrollscraper.cgi?book={$ort_books[$book]}&startc=$s_chap&startv=$s_vers&endc=$e_chap&endv=$e_vers"


function 
zero_pad($n$d=2) { 
    return 
str_pad($n$d'0'STR_PAD_LEFT); 


function 
cal_targ_pentateuch($targum='onqelos') { 
    global 
$book$s_chap$s_vers
    
$book_nums = array( 
        
'genesis''exodus''leviticus''numbers''deuteronomy'
    ); 
    
$book_num array_search($book$book_nums) + 1
    return 
"http://cal1.cn.huc.edu/cgi-bin/heb$targum.cgi?verse=" $book_numzero_pad($s_chap) . zero_pad($s_vers); 


function 
cal_all_targum() { 
    global 
$book$s_chap$s_vers
    
$books = array('genesis''exodus''leviticus''numbers''deuteronomy''joshua''judges''1 samuel''2 samuel''1 kings''2 kings''isaiah''jeremiah''ezekiel''hosea''joel''amos''obadiah''jonah''micah''nahum''habakkuk''zephaniah''haggai''zechariah''malachi''psalms''job''songs''ruth''ecclesiastes''lamentations''proverbs''1 chronicles''2 chronicles''esther'); 
    
$book_num zero_pad(array_search($book$books) + 1); 
    return 
"http://cal1.cn.huc.edu/cgi-bin/showtargum.cgi?bookname=$book_num&chapter=$s_chap&verse=$s_vers&Hebrew=ON&Peshitta=ON"


function 
show_options($src='!') { 
    global 
$book$book_canon
    
$srcs = array(); 
    
$fsrcs fopen(SRC_FILE'r'); 
    while (
$line fgets($fsrcs)) { 
        list(
$src_title$inclusions$keywords$function) = explode("\t"$line); 
        if (
trim($function) and strpos($inclusions$book_canon) !== false
            eval(
'$srcs[$src_title] = '.$function.';'); 
    } 
    
fclose($fsrcs); 
    
ksort($srcs); 
    
header('Content-type: text/html; charset=utf-8'); 
    
?><html><head><title>Bible Verse Finder (bibref): <?php echo $_GET['book']?> <?php echo $_GET['verse']?></title></head><body> 
    <h1>View <?php echo $_GET['book']?> <?php echo $_GET['verse']?> in:</h1> 
    <ul><?php 
    
foreach ($srcs as $title => $url
        print 
'<li><a href="'.$url.'">'.$title.'</a></li>'
    
?></ul></body></html><?php 


list(
$book_canon$book) = get_book_name($_GET['book']); 

if (
$book) { 
    switch (
$book) { 
    case 
"obadiah"
    case 
"philemon"
    case 
"2 john"
    case 
"3 john"
    case 
"jude"
        
$no_chaps true; break; 
    default: 
        
$no_chaps false
    } 
     
    
$ubook urlencode($book); 

    
$verse str_replace("\xe2\x80\x93"'-'strtolower($_GET['verse'])); // endash -> - 

    
$nreg '([0-9]+|[ivxlcm]+|['."\x90-\xAA"."\xD7]+)"
    
$reg '/^'.$nreg.'\.?([:. ]'.$nreg.')?(\s*-\s*'.$nreg.'\.?([:. ]'.$nreg.')?)?/i'
    
preg_match($regtrim($verse), $matches); 

    
$s_chap num_conv($matches[1]); 
    
$s_vers num_conv($matches[3]); 
    
$e_chap num_conv($matches[5]); 
    
$e_vers num_conv($matches[7]); 

    if (!
$e_chap) { // eg 15 or 15:30 
        
$e_chap $s_chap
        
$e_vers $s_vers
    } 
    elseif (
$s_vers and $e_chap and !$e_vers) { // eg 15:30-35 
        
$e_vers $e_chap
        
$e_chap $s_chap
    } 
    if (
$no_chaps && !$s_vers) { 
        
$s_vers $s_chap
        
$e_vers $e_chap
        
$s_chap $e_chap 1
    } 
    if (!
$s_vers
        
$s_vers 1
    if (!
$s_chap
        
$s_chap 1

    
//print "$book ($s_chap, $s_vers) to ($e_chap, $e_vers)"; 

    
if ($s_vers == and !$e_vers
        
$v_range "$s_chap-$e_chap"
    
/*elseif ($no_chaps) 
        $v_range = "$s_vers-$e_vers";*/ // it seems things prefer Ob 1:5 to Ob 5 
    
else 
        
$v_range "$s_chap:$s_vers-$e_chap:$e_vers"

    
$src strtolower(trim($_GET['src'])); 
    if (!
$src
        
$src '!'

    
$builder trim(get_src_builder($src)); 
    if (!
$builder) { 
        
show_options($src); 
        exit(); 
    } 

    eval (
'$url = '.$builder.';'); 

    
header ("Location: $url\n"); 
    exit(); 


$srcs = array(); 
$fsrcs fopen(SRC_FILE'r'); 
while (
$line fgets($fsrcs)) { 
    list(
$src_title$inclusions$keywords$function) = explode("\t"$line); 
    if (
$src_title[0] == '#'
        continue; 
    
$keywords explode(' '$keywords); 
     
    
$inclbools = array(); 
    for (
$i 0$i strlen($INCL_TYPES); $i++) { 
        
$inclbools[$i] = (strpos($inclusions$INCL_TYPES[$i]) !== false); 
    } 

    
$sincls[$src_title] = $inclbools
    
$srcs[$src_title] = $keywords

ksort($srcs); 

header('Content-type: text/html; charset=utf-8'); 
?><html><head><title>Bible Verse Finder (bibref)</title></head> 
<body><h1>Bible Verse Finder</h1> 
<?php if ($_GET['book']) { print "UNKNOWN BOOK REFERENCE: ".$_GET['book']; } ?> 

<h2>Usage</h2> 
<p>http://<?php echo $_SERVER['SERVER_NAME'].$_SERVER['SCRIPT_NAME']?>?book=<a href="#bookref">BOOK_NAME</a>&amp;verse=<a href="#verseref">VERSE_REF</a>&amp;src=<a href="#srcref">SRC_KEY</a></p> 

<form action="<?php echo $_SERVER['SCRIPT_NAME']?>" method="GET"> 
<p><label for="inpbook"><a href="#bookref">Book name:</a> </label><input name="book" value="<?php echo $_GET['book']?>" id="inpbook" size="20"> 
<label for="inpverse"><a href="#verseref">Verse(s):</a> </label><input name="verse" value="<?php echo $_GET['verse']?>" id="inpverse" size="10"></p> 
<p><label for="inpsrc"><a href="#srcref">Source:</a> </label><select name="src" id="inpsrc"> 
<?php foreach ($srcs as $sname => $skeys) { 
    
printf ('<option value="%s">%s</option>'array_shift($skeys), $sname); 
?> 
</select> 
<input type="submit"></p> 

<h3 id="bookref">Book name</h3> 
<p>Many variants of bible books are allowed. See <a href="<?php echo BOOK_FILE?>"><?php echo BOOK_FILE?></a>.</p> 

<h3 id="verseref">Verse reference</h3> 
<p>For example:</p> 
<ul> 
    <li>15</li> 
    <li>15:30</li> 
    <li>15-16</li> 
    <li>15:30-32</li> 
    <li>15:30-16:9</li> 
    <li>15.30  - 16:9</li> 
    <li>xv.30  - 16:9</li> 
    <li>xv. 30</li> 
    <li>XV. xxx</li> 
</ul> 
<p>Note that not all sources necessarily support all levels of specification. Some may not handle ranges, for instance.</p> 

<h3 id="srcref">Sources</h3> 
<p>The following were loaded from <a href="<?php echo SRC_FILE?>"><?php echo SRC_FILE?></a></p> 

<table style="border: 1px solid #888; background: #eef; font-size: 80%;"> 

<thead><tr><th>Source Title</th><?php 
    
for ($i 0$i strlen($INCL_TYPES); $i++) print "<th>{$INCL_TYPES[$i]}</th>" 
?><th colspan="5">Src Keys</th></tr></thead> 

<tbody> 
<?php 
foreach ($srcs as $sname => $skeys) { 
    print 
"<tr><td>$sname</td>"
    foreach (
$sincls[$sname] as $b
        print 
"<td>".($b '&#10003;' '')."</td>"
    foreach (
$skeys as $k
        print 
"<td>$k</td>"
    print 
"</tr>\n"

?> 
</tbody></table> 

<h4>Canon inclusion codes</h4> 
<dl> 
<dt>M - Mosaic Pentateuch</dt> 
    <dd>Genesis, Exodus, Leviticus, Numbers, Deuteronomy</dd> 
<dt>T - remainder of Tanakh (Christian Old Testament)</dt> 
    <dd>Joshua, Judges, Samuel, Kings, Isaiah, Jeremiah, Ezekiel, Hosea, Joel, Amos, Obadiah, Jonah, Micah, Nahum, Habakkuk, Zephaniah, Haggai, Zechariah, Malachi, Chronicles, Psalms, Job, Proverbs, Ruth, Song of Songs, Ecclesiastes, Lamentations, Esther, Daniel, Ezra, Nehemiah</dd> 
<dt>P - Psalms</dt> 
    <dd>Book of Psalms</dd> 
<dt>N - Christian New Testament</dt> 
    <dd>Matthew, Mark, Luke, John, Acts, Romans, Corinthians, Galatians, Ephesians, Philippians, Colossians, Thessalonians, Timothy, Titus, Philemon, Hebrews, James, Peter, John, Jude, Revelation</dd> 
<dt>D - Deuterocanonical texts</dt> 
    <dd>Tobit, Judith, Maccabees, Wisdom of Solomon, Sirach, Baruch</dd> 
</dl> 

<h2>Script source</h2> 
<div style="margin: 2em; background: #eef; border: 2px solid #888; padding: 1em; font-size: 80%"> 
<?php 
highlight_file
(__FILE__); 
?></div></body> 
</html><?php 
die(); 
?>