~earboxer/cgi-bin

447a2efe63dff1bd3fe75ecd4e89521b1eb1e90f — Zach DeCook 4 months ago e4edde5
Bibles: add bsb script
3 files changed, 63 insertions(+), 0 deletions(-)

M .gitignore
A bsb.py
M getscriptures.sh
M .gitignore => .gitignore +1 -0
@@ 1,3 1,4 @@
__pycache__
webp
lsv.txt
bsb

A bsb.py => bsb.py +55 -0
@@ 0,0 1,55 @@
#!/usr/bin/env python3
# pip3 install bible-passage-reference-parser
from bible import parse_string
import usfm2gmi.usfm2gmi as usfm2gmi
import os
import sys
from subprocess import check_output as sco
from webp import printf
from webp import eprint

def main(qs):
  if not qs:
    print("10 Enter a scripture reference\r\n")
    return

  passages = parse_string(qs)
  # TODO: Also handle "john 3, tomato 2" errors?
  if type(passages[0]) == tuple:
    print("51 " + str(passages[0][0]) + "'\r\n")
    return
  print("20 text/gemini\r\n")
  print('=> https://berean.bible/ This content from Berean Standard Bible (public domain)')
  print('=> gemini://gemini.zachdecook.com/usfm2gmi/ and rendered with usfm2gmi')
  for passage in passages:
    printing = 0
    inendc = False
    books=sco(["ls", "bsb/"]).strip().split(b"\n")
    fname=b"bsb/"+books[passage.start.book - 1]
    print("# " + passage.format())
    f = open(fname)
    startc = passage.start.chapter
    startv= passage.start.verse
    endc = passage.end.chapter
    endv= passage.end.verse
    for line in f:
      if f'\\c {startc}' == line.strip():
        printing = 1
        if startv <= 1:
          printing = 2
      if printing == 1 and (f'\\v {startv} ' in line or f'\\v {startv}' == line.strip()):
        printing =2
      if (f'\\c {endc}') == line.strip():
        inendc = True
      if inendc and (f'\\v {endv+1} ') in line:
        printing =0
      if (f'\\c {endc+1}') in line.strip():
        printing =0

      if printing>=2:
        printf(line)
    print('(BSB)') #end in newline

if __name__ == '__main__':
  qs = os.getenv("QUERY_STRING") or (sys.argv[1] if len(sys.argv) >= 2 else '')
  main(qs)

M getscriptures.sh => getscriptures.sh +7 -0
@@ 12,5 12,12 @@ getlsv() {
	mv 'The Holy Bible (LSV).txt' lsv.txt
	rm lsv.zip
}
getbsb() {
	wget https://bereanbible.com/usfm/bsb_usfm.zip
	unzip bsb_usfm.zip
	rm bsb_usfm.zip
	mv bsb_usfm bsb
}
test -d webp || getweb
test -f lsv.txt || getlsv
test -d bsb || getbsb