From 120514367871640e9e85d15bf3e2a535f880c464 Mon Sep 17 00:00:00 2001 From: Erez Binyamin Date: Mon, 20 Apr 2020 17:36:07 -0400 Subject: [PATCH] Added :list and :describe and updated :usage/:help --- share/adapters/rfc.sh | 49 ++++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/share/adapters/rfc.sh b/share/adapters/rfc.sh index 831a042..4c12b11 100755 --- a/share/adapters/rfc.sh +++ b/share/adapters/rfc.sh @@ -8,21 +8,23 @@ RFC_get() { mkdir -p /tmp/RFC_get local WEB_RESP="/tmp/RFC_get/rfc_get_web_resp_${RANDOM}.html" - local MIN_RFC=1 - local MAX_RFC=8650 + local RFC_INDEX="/tmp/RFC_get/rfc_index.html" local isNum='^[0-9]+$' - local NEVER_ISSUED=( "3333" "3350" "3399" "3699" "3799" "3800" "3899" "3900" "3907" "3908" "3999" "4000" "4099" "4100" "4199" "4200" "4232" "4299" "4300" "4399" "4400" "4499" "4500" "4599" "4600" "4658" "4699" "4700" "4751" "4799" "4800" "4899" "4900" "4921" "4922" "4989" "4999" "5099" "5100" "5108" "5199" "5200" "5299" "5300" "5312" "5313" "5314" "5315" "5319" "5399" "5400" "5499" "5500" "5599" "5600" "5699" "5700" "5799" "5800" "5809" "5821" "5822" "5823" "5899" "5900" "5999" "6000" "6099" "6100" "6102" "6103" "6199" "6200" "6299" "6300" "6399" "6400" "6499" "6500" "6523" "6524" "6599" "6600" "6634" "6699" "6700" "6799" "6800" "6899" "6900" "6966" "6995" "6999" "7000" "7099" "7327" "7907" "8523" "8524" "8535" "8566" "8626" "8644" "8646" "8647" "8648" ) + # Update RFC_INDEX if file does not exist + [ -f ${RFC_INDEX} ] || curl 'https://www.ietf.org/download/rfc-index.txt' 2>/dev/null > ${RFC_INDEX} + local MIN_RFC=1 + local MAX_RFC=$(sed '/^ / d' ${RFC_INDEX} | tail -n 1 | sed 's/ .*//') # Syntax check Usage statement - if [ $# -lt 1 ] || [[ ${1,,} =~ "-h" ]] || [[ ${1,,} =~ "--help" ]] + if [ $# -lt 1 ] || [[ ${1,,} == "-h" ]] || [[ ${1,,} == "--help" ]] || [[ ${1,,} == ":help" ]] || [[ ${1,,} == ":usage" ]] then printf " USAGE: - $0 - $0 - $0 :list - $0 <-h|--help> - " + rfc Search RFC by number + rfc Search RFC by topic + rfc :list List available RFC's + rfc :usage Show this help message + \n" return 0 fi # Get corresponding RFC by number @@ -71,13 +73,30 @@ RFC_get() # Print list of available RFCs elif [[ "${1,,}" == ":list" ]] then - echo "Valid RFC numbers: [ ${MIN_RFC} - ${MAX_RFC} ]" - #for i in `seq 1 $MAX_RFC` - #do - # echo "${NEVER_ISSUED[@]}" | tr ' ' '\n' | grep -qFx $i || echo $i - #done + # Format RFC_INDEX to show short description of each RFC + sed -ne '/0001/,$p' ${RFC_INDEX} \ + | tr '\n' '#' \ + | sed 's/##/\n/g' \ + | sed 's/# //g' \ + | grep -o '.*\. ' \ + | sed -r 's/^(.*)(January|February|March|April|May|June|July|August|September|October|November|December) [[:digit:]]{4}(.*)$/\1/' \ + | grep -v 'Not Issued' \ + | sed 's/ .*//; s/^0*//' + printf "\nValid RFC numbers: [ ${MIN_RFC} - ${MAX_RFC} ]\n" return 0 - # Print list of RFCs related to keyword: RFC_N RFC_Title + # Print list of available RFCs + elif [[ "${1,,}" == ":describe" ]] + then + # Format RFC_INDEX to show short description of each RFC + sed -ne '/0001/,$p' ${RFC_INDEX} \ + | tr '\n' '#' \ + | sed 's/##/\n/g' \ + | sed 's/# //g' \ + | grep -o '.*\. ' \ + | sed -r 's/^(.*)(January|February|March|April|May|June|July|August|September|October|November|December) [[:digit:]]{4}(.*)$/\1/' + printf "\nValid RFC numbers: [ ${MIN_RFC} - ${MAX_RFC} ]\n" + return 0 + # Format list of RFCs related to keyword: RFC_N RFC_Title else ARG="$*" curl "https://www.rfc-editor.org/search/rfc_search_detail.php?title=${ARG}" 2>/dev/null \