@ -1,35 +1,38 @@
#!/bin/bash
# An interactive xpath query tool
# An interactive xpath query commandline tool.
# Stores your previous query.
# File for previous query
touch .prev-xpath.tmp
# Colored output
GREEN = '\033[0;32m'
NC = '\033[0m' # no color
# Ask for canto file
clear
read -p "Choose a canto: [i,r,p][1-34]" CANTO
read -p "Choose a canto: [i,r,p][1-34] " CANTO
CANTICLE = " $( echo $CANTO | tr -d -c a-z) "
CANTO_NUM = " $( echo $CANTO | tr -d -c 0-9) "
file = " - ${ CANTO_NUM } .xml "
# Create complete filename
if [ [ " $CANTICLE " = = 'i' ] ] ; then
CANTICLE = 'Inferno'
file = " inferno ${ file } "
file = " inferno- ${ CANTO_NUM } .xml "
elif [ [ " $CANTICLE " = = 'r' ] ] ; then
CANTICLE = 'Purgatorio'
file = " purgatorio ${ file } "
file = " purgatorio- ${ CANTO_NUM } .xml "
elif [ [ " $CANTICLE " = = 'p' ] ] ; then
CANTICLE = 'Paradiso'
file = " paradiso ${ file } "
file = " paradiso- ${ CANTO_NUM } .xml "
else
echo " Not a valid canto file: $file "
fi
# Start interactive query
if [ [ -e " $file " ] ] ; then
clear && echo -e " You are searching ${ CANTICLE ^ } ${ CANTO_NUM } .\nAdd a trailing slash ${ GREEN } \`/\` ${ NC } to your search before submitting it. The default first two search choices are ${ GREEN } \`canto\` ${ NC } and then ${ GREEN } \`terzine\` ${ NC } . Press ${ GREEN } <enter> ${ NC } for those defaults and type something else to search that.\n "
i = '0'
read -p "Load previous: (Y)/n " PREV
case " $PREV " in
N| n)
@ -39,19 +42,22 @@ if [[ -e "$file" ]]; then
search = " $( cat .prev-xpath.tmp) "
; ;
esac
i = '0'
# Start while loop for the query. Break the loop if the query ends with a slash `/`.
while true; do
read -e -i " $search " -p " $( echo -e "\nSearch: \n " ${ GREEN } "===> " ${ NC } ) " nsearch
if [ [ " ${ nsearch : -1 } " = = '/' ] ] ; then # if last char trailing slash then search
path = " ${ nsearch : :- 1 } "
echo " $path " > .prev-xpath.tmp # remove trailing slash
xmllint --xpath " $path " $file | batcat -l 'xml'
if [ [ " ${ nsearch : -1 } " = = / ] ] ; then # if last char trailing slash then search
path = " ${ nsearch : :- 1 } " # remove trailing slash
echo " $path " > .prev-xpath.tmp # store query for next time
# perform the search (requires `xmllint` and `batcat` pager)
xmllint --xpath " $path " $file | batcat -l xml
exit
elif [ [ " $i " = = '0' ] ] && [ [ " $nsearch " = = '' ] ] ; then
elif [ [ " $i " = = 0 ] ] && [ [ " $nsearch " = = '' ] ] ; then # load '/canto' query on first loop
search = "/canto"
elif [ [ " $nsearch " = = '/canto' ] ] ; then
elif [ [ " $nsearch " = = '/canto' ] ] ; then # load '/canto/terzine' on second loop
search = "/canto/terzine"
else
search = " ${ nsearch } "
search = " ${ nsearch } " # else keep search the same
fi
i = $[ $i +1]
done