#!/bin/rc # miqra: Tanakh reader rfork e url=https://raw.githubusercontent.com/openscriptures/morphhb/master/MAPM/MAPM.xml dat=$home/lib/MAPM.xml cachedir=/tmp/miqra # diacritics, see: # chars [1=2] exit usage } fn strip{ chars=$zwj if(! ~ $shownqd 1) chars=$chars^$niqqud if(! ~ $showcan 1) chars=$chars^$teamim if(~ $#chars 0) cat if not tr -d $chars } fn totxt{ s=' s!]* n="([^"]*)"/>!\1\ ! s!]* n="([^"]*)"/>!(\1) ! # indentations in Ps, Prov, and Job s!!X! s!!XX! # extra linebreak to prevent fmt # from joining lines s!!\ ! s!<[^>]*>!!g s!^[ ]+!! s! +! !g /X/ { # no-break spaces to prevent fmt # from inserting tabs s!X!    !g s!^!    ! } ' # add spaces for clarity if(~ $shownqd 1 && ! ~ $logical 1) s=$s^' s! !   !g' sed $s | tr $spaces $nbsp } fn oneline{ sed ' /verse osisID/ { s!]*sID="([^"]*)"[^>]*/>!\1 ! :v /e eID/ { s!\n! !g s!<[^>]*>!!g s![ ]+! !g b end } N b v } d :end ' | tr $spaces $nbsp } fn listbooks{ awk -F " '/"book" osisID/ { print $4 }' $dat } fn all{ sed 1,/"bookGroup"/d $dat } fn book{ sed -n /osisID'='"$1"/,/"book"/p $dat } fn chapter{ sed -n /osisID'='"$1\.$2"/,/chapter/p $dat } fn verse{ verses=`{echo -n $3 | tr - ' '} beg=$1\.$2\.$verses(1) if(~ $#verses 1) end=$1\.$2\.$verses(1) if not end=$1\.$2\.$verses(2) sed -n ' /sID="'$beg'"/ { :v p /eID="'$end'"/ !{ n b v } } ' $dat } fn rtl{ fmt -l $linelen | awk ' { n = split($0, a, "") s = "" for(i = n; i > 0; i--) { if(a[i] == "(") c = ")" else if(a[i] == ")") c = "(" else c = a[i] s = s c } for(i = length; i < '$linelen'; i++) s = " " s print s } ' } fn capitalize{ echo $1 | awk ' { p = match($0, "^[12]*[a-z]") if(p == 0) { print next } a = substr($0, RSTART, RLENGTH) b = substr($0, RSTART + RLENGTH) print toupper(a) b } ' } while(~ $1 -*){ switch($1){ case -a showcan=1; shownqd=1 case -b listbks=1 case -c showcan=1 case -i shownqd=1 case -l linelen=$2; shift case -n logical=1 case -o oneline=1; logical=1 case -s showsrc=1 case -x mkcache=1 case * usage } shift } if(! test -e $dat){ echo getting $url to $dat >[1=2] hget $url >$dat stat=$status if(! ~ $stat ''){ rm $dat exit $stat } } if(~ $listbks 1){ listbooks | tr \xa ' ' | sed 's/(Deut|2Kgs|Ezek|Mic|Mal|Job|Esth) /\1\ /g' exit } if(~ $mkcache 1){ mkdir -p $cachedir for(i in `{listbooks}){ f=$cachedir/$i echo caching $i to $f >[1=2] book $i >$f } exit } if(~ $#1 1){ book=`{capitalize $1} f=$cachedir/$book if(test -r $f) dat=$f } switch($#*){ case 0 all case 1 book $book case 2 chapter $book $2 case 3 verse $book $2 $3 } | { if(~ $showsrc 1) sed 's/^[ ]+//' if not{ strip | { if(~ $oneline 1) oneline if not totxt } | { if(~ $logical 1) cat if not # visual rtl } } }