From 8d32f670e842778c47da29391ed5105011b5a51d Mon Sep 17 00:00:00 2001 From: lhess2021 Date: Sun, 20 Mar 2022 02:08:23 -0400 Subject: [PATCH] switch to xmlstarlet xpath tool --- shell-scripts.d/xpath.sh | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/shell-scripts.d/xpath.sh b/shell-scripts.d/xpath.sh index bf20f4b..1fca7fc 100755 --- a/shell-scripts.d/xpath.sh +++ b/shell-scripts.d/xpath.sh @@ -1,7 +1,7 @@ #!/bin/bash # An interactive xpath query commandline tool. -# Stores your previous query. +# Stores your previous query to reduce typing. # File for previous query touch .prev-xpath.tmp @@ -16,26 +16,28 @@ 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)" +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="inferno-${CANTO_NUM}.xml" -elif [[ "$CANTICLE" == 'r' ]]; then - CANTICLE='Purgatorio' - file="purgatorio-${CANTO_NUM}.xml" -elif [[ "$CANTICLE" == 'p' ]]; then - CANTICLE='Paradiso' - file="paradiso-${CANTO_NUM}.xml" +if [[ "$canticle" == 'i' ]]; then + canticle='Inferno' + file="$pad_num-inferno.xml" + echo $file +elif [[ "$canticle" == 'r' ]]; then + canticle='Purgatorio' + file="$pad_num-purgatorio.xml" +elif [[ "$canticle" == 'p' ]]; then + canticle='Paradiso' + file="$pad_num-paradiso.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}${NC} for those defaults and type something else to search that.\n" + 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}${NC} for those defaults and type something else to search that.\n" read -p "Load previous: (Y)/n " PREV case "$PREV" in N|n) @@ -52,13 +54,13 @@ if [[ -e "$file" ]]; then 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 + # perform the search (requires `xmlstarlet` and `bat` pager) + xmlstarlet sel -t -v "$path" $file | batcat -l xml exit - elif [[ "$i" == 0 ]] && [[ "$nsearch" == '' ]]; then # load '/canto' query on first loop - search="/canto" - elif [[ "$nsearch" == '/canto' ]]; then # load '/canto/terzine' on second loop - search="/canto/terzine" + 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