1 changed files with 71 additions and 0 deletions
@ -0,0 +1,71 @@ |
|||
#!/bin/bash |
|||
|
|||
# An interactive xpath query commandline tool. |
|||
# Stores your previous query to reduce typing. |
|||
|
|||
# File for previous query |
|||
touch .prev-xpath.tmp |
|||
if [[ ! -e ".gitignore" ]]; then |
|||
echo 'xpath.sh' > .gitignore |
|||
fi |
|||
|
|||
# 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 |
|||
canticle="$(echo $CANTO | tr -d -c a-z)" |
|||
canto_num="$(echo $CANTO | tr -d -c 0-9)" |
|||
pad_num="$(printf "%03d\n" $canto_num)" |
|||
|
|||
# Create complete filename |
|||
if [[ "$canticle" == 'i' ]]; then |
|||
canticle='Inferno' |
|||
file="$pad_num-inferno-petrocchi.xml" |
|||
echo $file |
|||
elif [[ "$canticle" == 'r' ]]; then |
|||
canticle='Purgatorio' |
|||
file="$pad_num-purgatorio-petrocchi.xml" |
|||
elif [[ "$canticle" == 'p' ]]; then |
|||
canticle='Paradiso' |
|||
file="$pad_num-paradiso-petrocchi.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" |
|||
read -p "Load previous: (Y)/n " PREV |
|||
case "$PREV" in |
|||
N|n) |
|||
search='' |
|||
;; |
|||
Y|y|*) |
|||
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}" # remove trailing slash |
|||
echo "$path" > .prev-xpath.tmp # store query for next time |
|||
# perform the search (requires `xmlstarlet` and `bat` pager) |
|||
xmlstarlet sel -t -v "$path" $file | batcat -l xml |
|||
exit |
|||
elif [[ "$i" == 0 ]] && [[ "$nsearch" == '' ]]; then # load '/TEI/text' query on first loop |
|||
search="_:TEI/_:text/_:" |
|||
elif [[ "$nsearch" == '_:TEI/_:text/_:' ]]; then # load '/TEI/text/canto/tercets' on second loop |
|||
search="_:TEI/_:text/_:canto/_:tercets/_:" |
|||
else |
|||
search="${nsearch}" # else keep search the same |
|||
fi |
|||
i=$[$i+1] |
|||
done |
|||
else |
|||
echo "Canto file not found. What directory are you in?" |
|||
fi |
|||
Loading…
Reference in new issue