From fe0246be969a6c1f74c962a5c0e27ccfd2868707 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 20 Jun 2020 16:48:16 -0400 Subject: [PATCH 1/7] oeis: TOTAL Rework. Use text for serach by ID, use short search for search by pattern --- share/adapters/oeis.sh | 126 ++++++++++++++++------------------------- 1 file changed, 48 insertions(+), 78 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index 7d99690..a7ce1f8 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -8,44 +8,11 @@ # oeis # oeis oeis() ( - local URL='https://oeis.org' + local URL='https://oeis.org/search?q=' local TMP=/tmp/oeis local DOC=/tmp/oeis/doc.html local MAX_TERMS=10 mkdir -p $TMP - # -- get_desc -- - # @return print description of OEIS sequence - get_desc() { - grep -A 1 '' $DOC \ - | sed '//d; /--/d; s/^[ \t]*//; s/<[^>]*>//g;' \ - | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</.*, .*[0-9]' $DOC \ - | sed 's/<[^>]*>//g' \ - | grep -v '[a-z]' \ - | grep -v ':' \ - | cut -d ',' -f 1-${MAX_TERMS} - return $? - } - # -- parse_code -- - # @param GREP_REGEX - # @return Code snippet that corresponds to GREP_REGEX - parse_code() { - local GREP_REGEX="${1}" - cat $DOC \ - | tr '\n' '`' \ - | grep -o "${GREP_REGEX}" \ - | tr '`' '\n' \ - | sed 's/^[ \t]*//; s/<[^>]*>//g; /^\s*$/d;' \ - | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</ @@ -66,61 +33,54 @@ oeis() ( [[ ${ID:0:1} == 'A' ]] && ID=${ID:1} ID=$(bc <<< "$ID") ID="A$(printf '%06d' ${ID})" - URL+="/${ID}" + URL+="id:${ID}&fmt=text" curl $URL 2>/dev/null > $DOC # Print Code Sample if [[ ${LANGUAGE^^} == ':LIST' ]] then rm -f ${TMP}/list - grep -q 'MAPLE' $DOC && printf 'maple\n' >> $TMP/list - grep -q 'MATHEMATICA' $DOC && printf 'mathematica\n' >> $TMP/list - parse_code 'PROG.*CROSSREFS' \ - | grep -o '^(.*)' \ - | sed 's/ .*//g' \ - | tr -d '()' \ - | sort -u >> $TMP/list - [ $(wc -c < $TMP/list) -ne 0 ] && cat ${TMP}/list || printf 'No code snippets available.\n' + grep -q '%p' $DOC && echo 'maple' >> $TMP/list + grep -q '%t' $DOC && echo 'mathematica' >> $TMP/list + grep '%o' $DOC \ + | grep "${ID} (" \ + | sed "s/^.*${ID} (//; s/).*//" >> $TMP/list + [[ -f $TMP/list && $(wc -c < $TMP/list) -ne 0 ]] && cat ${TMP}/list | sort -u || printf 'No code snippets available.\n' return 0 fi - # Print ID, description, and sequence + # Print ID printf "ID: ${ID}\n" - get_desc + # Print Description (%N) + grep '%N' $DOC | sed "s/^.*${ID} //" printf '\n' - get_seq ${MAX_TERMS} + # Print Sequence (Three sections %S %T nd %U) + grep '%S' $DOC | sed "s/^.*${ID} //" + grep '%T' $DOC | sed "s/^.*${ID} //" + grep '%U' $DOC | sed "s/^.*${ID} //" printf '\n' + # Generate code snippet (%p, %t, %o) if [ $# -gt 1 ] then - if [[ ${LANGUAGE^^} == 'MAPLE' ]] && grep -q 'MAPLE' $DOC + # MAPLE section (%p) + if [[ ${LANGUAGE^^} == 'MAPLE' ]] && grep -q '%p' $DOC then - GREP_REGEX='MAPLE.*CROSSREFS' - grep -q 'PROG' $DOC && GREP_REGEX='MAPLE.*PROG' - grep -q 'MATHEMATICA' $DOC && GREP_REGEX='MAPLE.*MATHEMATICA' - parse_code "${GREP_REGEX}" \ - | sed 's/MAPLE/(MAPLE)/; /MATHEMATICA/d; /PROG/d; /CROSSREFS/d' \ - > ${TMP}/code_snippet - elif [[ ${LANGUAGE^^} == 'MATHEMATICA' ]] && grep -q 'MATHEMATICA' $DOC + grep '%p' $DOC | sed "s/^.*${ID} //" > $TMP/code_snippet + # MATHEMATICA section (%t) + elif [[ ${LANGUAGE^^} == 'MATHEMATICA' ]] && grep -q '%t' $DOC + then + grep '%t' $DOC | sed "s/^.*${ID} //" > $TMP/code_snippet + # PROG section (%o) + elif grep -qi '%o' $DOC && grep -qi $LANGUAGE $DOC then - GREP_REGEX='MATHEMATICA.*CROSSREFS' - grep -q 'PROG' $DOC && GREP_REGEX='MATHEMATICA.*PROG' - parse_code "${GREP_REGEX}" \ - | sed 's/MATHEMATICA/(MATHEMATICA)/; /PROG/d; /CROSSREFS/d' \ - > ${TMP}/code_snippet - else - # PROG section contains more code samples (Non Mathematica or Maple) - parse_code 'PROG.*CROSSREFS' \ - | sed '/PROG/d; /CROSSREFS/d' \ - > ${TMP}/prog # Print out code sample for specified language - rm -f ${TMP}/code_snippet - awk -v tgt="${LANGUAGE^^}" -F'[()]' '/^\(/{f=(tgt==toupper($2))} f' ${TMP}/prog > ${TMP}/code_snippet + grep '%o' $DOC \ + | sed "s/^.*${ID} //" \ + | awk -v tgt="${LANGUAGE^^}" -F'[()]' '{act=$2} sub(/^\([^()]+\) */,""){f=(tgt==toupper(act))} f' ${TMP}/prog \ + > ${TMP}/code_snippet fi # Print code snippet with 4-space indent to enable colorization - if [ $(wc -c < $TMP/code_snippet) -ne 0 ] + if [[ -f $TMP/code_snippet && $(wc -c < $TMP/code_snippet) -ne 0 ]] then - printf "${LANGUAGE}" - cat ${TMP}/code_snippet \ - | sed "s/(${LANGUAGE^^})/\n/; s/(${LANGUAGE})/\n/;" \ - | sed 's/^/ /' + cat ${TMP}/code_snippet | sed 's/^/ /' else printf "${LANGUAGE^^} unavailable. Use :list to view available languages.\n" fi @@ -128,16 +88,22 @@ oeis() ( # Search unknown sequence else # Build URL - URL+="/search?q=signed:$(echo $@ | tr -sc '[:digit:]-' ',')" + URL+="signed:$(echo $@ | tr -sc '[:digit:]-' ',')&fmt=short" curl $URL 2>/dev/null > $DOC # Sequence IDs - grep -o '=id:.*&' $DOC \ - | sed 's/=id://; s/&//' > $TMP/id + grep -o '"/A[0-9][0-9][0-9][0-9][0-9][0-9]">A[0-9][0-9][0-9][0-9][0-9][0-9]' $DOC \ + | sed 's/.*>//' \ + > $TMP/id # Descriptions - get_desc > $TMP/desc + grep -A 1 '' $DOC \ + | sed '/--/d; s/<[^>]*>//g; /^\s*$/d; s/^[ \t]*//' \ + | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</ $TMP/desc # Sequences - get_seq ${MAX_TERMS} > $TMP/seq - # Print data for all + grep 'style="color:black;font-size:120%' $DOC \ + | sed 's/<[^>]*>//g; s/^[ \t]*//' \ + > $TMP/seq + readarray -t ID < $TMP/id readarray -t DESC < $TMP/desc readarray -t SEQ < $TMP/seq @@ -149,7 +115,11 @@ oeis() ( fi grep 'results, too many to show. Please refine your search.' /tmp/oeis/doc.html | sed -e 's/<[^>]*>//g; s/^[ \t]*//' # Print URL for user - printf "\n[${URL}]\n" | rev | sed 's/,//' | rev + printf "\n[${URL}]\n" \ + | rev \ + | sed 's/,//' \ + | rev \ + | sed 's/&.*/]/' ) oeis $@ From 3137761c345a357c0fedc0fc97ab6901936c3a99 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 20 Jun 2020 17:27:21 -0400 Subject: [PATCH 2/7] bug fix: language parser --- share/adapters/oeis.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index a7ce1f8..e2d10cf 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -73,8 +73,8 @@ oeis() ( then # Print out code sample for specified language grep '%o' $DOC \ - | sed "s/^.*${ID} //" \ - | awk -v tgt="${LANGUAGE^^}" -F'[()]' '{act=$2} sub(/^\([^()]+\) */,""){f=(tgt==toupper(act))} f' ${TMP}/prog \ + | sed "s/%o ${ID} //" \ + | awk -v tgt="${LANGUAGE^^}" -F'[()]' '{act=$2} sub(/^\([^()]+\) */,""){f=(tgt==toupper(act))} f' \ > ${TMP}/code_snippet fi # Print code snippet with 4-space indent to enable colorization From d12fcc8ce42f8d15162b1f5c838bcdcad222cfb1 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 20 Jun 2020 17:35:57 -0400 Subject: [PATCH 3/7] delete code snippet file to avoid false positives --- share/adapters/oeis.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index e2d10cf..8874cbd 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -60,6 +60,7 @@ oeis() ( # Generate code snippet (%p, %t, %o) if [ $# -gt 1 ] then + rm -f $TMP/code_snippet # MAPLE section (%p) if [[ ${LANGUAGE^^} == 'MAPLE' ]] && grep -q '%p' $DOC then From 6379115814e862518a6bb6cd8e78b87934ad3c05 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 20 Jun 2020 18:06:40 -0400 Subject: [PATCH 4/7] oeis: implemented max terms, removed author name from code snippets --- share/adapters/oeis.sh | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index 8874cbd..d3336da 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -11,7 +11,7 @@ oeis() ( local URL='https://oeis.org/search?q=' local TMP=/tmp/oeis local DOC=/tmp/oeis/doc.html - local MAX_TERMS=10 + local MAX_TERMS=15 mkdir -p $TMP # -- MAIN -- # Search sequence by ID (optional language arg) @@ -35,7 +35,7 @@ oeis() ( ID="A$(printf '%06d' ${ID})" URL+="id:${ID}&fmt=text" curl $URL 2>/dev/null > $DOC - # Print Code Sample + # :list available language code_snippets if [[ ${LANGUAGE^^} == ':LIST' ]] then rm -f ${TMP}/list @@ -53,13 +53,16 @@ oeis() ( grep '%N' $DOC | sed "s/^.*${ID} //" printf '\n' # Print Sequence (Three sections %S %T nd %U) - grep '%S' $DOC | sed "s/^.*${ID} //" - grep '%T' $DOC | sed "s/^.*${ID} //" - grep '%U' $DOC | sed "s/^.*${ID} //" - printf '\n' - # Generate code snippet (%p, %t, %o) + grep '%S' $DOC | sed "s/^.*${ID} //" | tr -d '\n' > $TMP/seq + grep '%T' $DOC | sed "s/^.*${ID} //" | tr -d '\n' >> $TMP/seq + grep '%U' $DOC | sed "s/^.*${ID} //" | tr -d '\n' >> $TMP/seq + cat $TMP/seq \ + | cut -d ',' -f 1-${MAX_TERMS} \ + | sed 's/$/ .../' + # Generate code snippet (%p, %t, %o) (maple, mathematica, prog sections) if [ $# -gt 1 ] then + printf "\n\n" rm -f $TMP/code_snippet # MAPLE section (%p) if [[ ${LANGUAGE^^} == 'MAPLE' ]] && grep -q '%p' $DOC @@ -81,7 +84,9 @@ oeis() ( # Print code snippet with 4-space indent to enable colorization if [[ -f $TMP/code_snippet && $(wc -c < $TMP/code_snippet) -ne 0 ]] then - cat ${TMP}/code_snippet | sed 's/^/ /' + cat ${TMP}/code_snippet \ + | sed 's/_[A-Z].*[a-z]_.*[0-9] //' \ + | sed 's/^/ /' else printf "${LANGUAGE^^} unavailable. Use :list to view available languages.\n" fi @@ -95,26 +100,30 @@ oeis() ( grep -o '"/A[0-9][0-9][0-9][0-9][0-9][0-9]">A[0-9][0-9][0-9][0-9][0-9][0-9]' $DOC \ | sed 's/.*>//' \ > $TMP/id + readarray -t ID < $TMP/id # Descriptions grep -A 1 '' $DOC \ | sed '/--/d; s/<[^>]*>//g; /^\s*$/d; s/^[ \t]*//' \ | sed 's/ / /g; s/\&/\&/g; s/>/>/g; s/</ $TMP/desc + readarray -t DESC < $TMP/desc # Sequences grep 'style="color:black;font-size:120%' $DOC \ | sed 's/<[^>]*>//g; s/^[ \t]*//' \ + | cut -d ',' -f 1-${MAX_TERMS} \ + | sed 's/$/ .../' \ > $TMP/seq - - readarray -t ID < $TMP/id - readarray -t DESC < $TMP/desc readarray -t SEQ < $TMP/seq + # Print all ID, DESC, SEQ for i in ${!ID[@]} do printf "${ID[$i]}: ${DESC[$i]}\n" printf "${SEQ[$i]}\n\n" done fi - grep 'results, too many to show. Please refine your search.' /tmp/oeis/doc.html | sed -e 's/<[^>]*>//g; s/^[ \t]*//' + # Error statements + grep 'results, too many to show. Please refine your search.' $DOC | sed -e 's/<[^>]*>//g; s/^[ \t]*//' + grep -o 'Sorry, but the terms do not match anything in the table.' $DOC # Print URL for user printf "\n[${URL}]\n" \ | rev \ From 843efb71e88271cd0150e739645ff061b7178ba9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 27 Jun 2020 13:19:42 -0400 Subject: [PATCH 5/7] better error checking. usage satement. show more terms for specific seqeunce search. cleaner formatting --- share/adapters/oeis.sh | 48 +++++++++++++++++++++++++++++++++--------- 1 file changed, 38 insertions(+), 10 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index d3336da..c30f4df 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -11,7 +11,8 @@ oeis() ( local URL='https://oeis.org/search?q=' local TMP=/tmp/oeis local DOC=/tmp/oeis/doc.html - local MAX_TERMS=15 + local MAX_TERMS_LONG=30 + local MAX_TERMS_SHORT=10 mkdir -p $TMP # -- MAIN -- # Search sequence by ID (optional language arg) @@ -19,7 +20,10 @@ oeis() ( # . oeis # . oeis isNum='^[0-9]+$' - if [ $# -lt 3 ] && [[ ${1:1} =~ $isNum || ${2:1} =~ $isNum || ${1} =~ $isNum || ${2} =~ $isNum ]] && ! echo $1 | grep -q '[0-9]' || ! echo $2 | grep -q '[0-9]' + # Search for specific sequence (and potentially language or :SECTION (list) + if [ $# -ge 1 ] \ + && [[ $(echo $1 | tr -d 'aA') =~ $isNum || $(echo $2 | tr -d 'aA') =~ $isNum ]] \ + && [[ ! $(echo $1 | tr -d 'aA') =~ $isNum || ! $(echo $2 | tr -d 'aA') =~ $isNum ]] then # Arg-Parse ID, Generate URL if echo ${1^^} | grep -q '[B-Z]' @@ -43,8 +47,12 @@ oeis() ( grep -q '%t' $DOC && echo 'mathematica' >> $TMP/list grep '%o' $DOC \ | grep "${ID} (" \ - | sed "s/^.*${ID} (//; s/).*//" >> $TMP/list - [[ -f $TMP/list && $(wc -c < $TMP/list) -ne 0 ]] && cat ${TMP}/list | sort -u || printf 'No code snippets available.\n' + | sed "s/^.*${ID} (//; s/).*//" \ + | awk 'NF == 1' \ + >> $TMP/list + [[ -f $TMP/list && $(wc -c < $TMP/list) -ne 0 ]] \ + && cat ${TMP}/list | sort -u \ + || printf 'No code snippets available.\n' return 0 fi # Print ID @@ -57,8 +65,8 @@ oeis() ( grep '%T' $DOC | sed "s/^.*${ID} //" | tr -d '\n' >> $TMP/seq grep '%U' $DOC | sed "s/^.*${ID} //" | tr -d '\n' >> $TMP/seq cat $TMP/seq \ - | cut -d ',' -f 1-${MAX_TERMS} \ - | sed 's/$/ .../' + | cut -d ',' -f 1-${MAX_TERMS_LONG} \ + | sed 's/,/, /g; s/$/ .../' # Generate code snippet (%p, %t, %o) (maple, mathematica, prog sections) if [ $# -gt 1 ] then @@ -85,14 +93,14 @@ oeis() ( if [[ -f $TMP/code_snippet && $(wc -c < $TMP/code_snippet) -ne 0 ]] then cat ${TMP}/code_snippet \ - | sed 's/_[A-Z].*[a-z]_.*[0-9] //' \ | sed 's/^/ /' else printf "${LANGUAGE^^} unavailable. Use :list to view available languages.\n" fi fi # Search unknown sequence - else + elif [ $# -gt 1 ] && ! echo $@ | grep -q -e [a-z] -e [A-Z] + then # Build URL URL+="signed:$(echo $@ | tr -sc '[:digit:]-' ',')&fmt=short" curl $URL 2>/dev/null > $DOC @@ -110,8 +118,8 @@ oeis() ( # Sequences grep 'style="color:black;font-size:120%' $DOC \ | sed 's/<[^>]*>//g; s/^[ \t]*//' \ - | cut -d ',' -f 1-${MAX_TERMS} \ - | sed 's/$/ .../' \ + | cut -d ',' -f 1-${MAX_TERMS_SHORT} \ + | sed 's/,/, /g; s/$/ .../' \ > $TMP/seq readarray -t SEQ < $TMP/seq # Print all ID, DESC, SEQ @@ -120,6 +128,26 @@ oeis() ( printf "${ID[$i]}: ${DESC[$i]}\n" printf "${SEQ[$i]}\n\n" done + else + printf " +# oeis +# +# The On-Line Encyclopedia of Integer Sequences (OEIS), +# also cited simply as Sloane's, is an online database of integer sequences. + +# Find all possible OEIS sequences for some sequence (1,1,1,1...) +curl cheat.sh/oeis/1+1+1+1 + +# Describe an OEIS sequence (A2) +curl cheat.sh/oeis/A2 + +# Implementation of the A2 OEIS sequence in Python +curl cheat.sh/oeis/A2/python + +# List all available implementations of the A2 OEIS sequence +curl cheat.sh/oeis/A2/:list +" + return 1 fi # Error statements grep 'results, too many to show. Please refine your search.' $DOC | sed -e 's/<[^>]*>//g; s/^[ \t]*//' From 6560813b226a7cf30e8974d4101f4110ce3aafa3 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 28 Jun 2020 10:46:54 -0400 Subject: [PATCH 6/7] changed LANGUAGE and list to SECTION and section (var names) --- share/adapters/oeis.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index c30f4df..b225e6f 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -17,8 +17,8 @@ oeis() ( # -- MAIN -- # Search sequence by ID (optional language arg) # . oeis - # . oeis - # . oeis + # . oeis
+ # . oeis
isNum='^[0-9]+$' # Search for specific sequence (and potentially language or :SECTION (list) if [ $# -ge 1 ] \ @@ -26,13 +26,13 @@ oeis() ( && [[ ! $(echo $1 | tr -d 'aA') =~ $isNum || ! $(echo $2 | tr -d 'aA') =~ $isNum ]] then # Arg-Parse ID, Generate URL - if echo ${1^^} | grep -q '[B-Z]' + if [[ $(echo $1 | tr -d 'aA') =~ $isNum ]] then - ID=${2^^} - LANGUAGE=$1 - else ID=${1^^} - LANGUAGE=$2 + SECTION=$2 + else + ID=${2^^} + SECTION=$1 fi [[ ${ID:0:1} == 'A' ]] && ID=${ID:1} ID=$(bc <<< "$ID") @@ -40,18 +40,18 @@ oeis() ( URL+="id:${ID}&fmt=text" curl $URL 2>/dev/null > $DOC # :list available language code_snippets - if [[ ${LANGUAGE^^} == ':LIST' ]] + if [[ ${SECTION^^} == ':LIST' || ${SECTION^^} == ':PROG' ]] then - rm -f ${TMP}/list - grep -q '%p' $DOC && echo 'maple' >> $TMP/list - grep -q '%t' $DOC && echo 'mathematica' >> $TMP/list + rm -f ${TMP}/section + grep -q '%p' $DOC && echo 'maple' >> $TMP/section + grep -q '%t' $DOC && echo 'mathematica' >> $TMP/section grep '%o' $DOC \ | grep "${ID} (" \ | sed "s/^.*${ID} (//; s/).*//" \ | awk 'NF == 1' \ - >> $TMP/list - [[ -f $TMP/list && $(wc -c < $TMP/list) -ne 0 ]] \ - && cat ${TMP}/list | sort -u \ + >> $TMP/section + [[ -f $TMP/section && $(wc -c < $TMP/section) -ne 0 ]] \ + && cat ${TMP}/section | sort -u \ || printf 'No code snippets available.\n' return 0 fi @@ -73,20 +73,20 @@ oeis() ( printf "\n\n" rm -f $TMP/code_snippet # MAPLE section (%p) - if [[ ${LANGUAGE^^} == 'MAPLE' ]] && grep -q '%p' $DOC + if [[ ${SECTION^^} == 'MAPLE' ]] && grep -q '%p' $DOC then grep '%p' $DOC | sed "s/^.*${ID} //" > $TMP/code_snippet # MATHEMATICA section (%t) - elif [[ ${LANGUAGE^^} == 'MATHEMATICA' ]] && grep -q '%t' $DOC + elif [[ ${SECTION^^} == 'MATHEMATICA' ]] && grep -q '%t' $DOC then grep '%t' $DOC | sed "s/^.*${ID} //" > $TMP/code_snippet # PROG section (%o) - elif grep -qi '%o' $DOC && grep -qi $LANGUAGE $DOC + elif grep -qi '%o' $DOC && grep -qi $SECTION $DOC then # Print out code sample for specified language grep '%o' $DOC \ | sed "s/%o ${ID} //" \ - | awk -v tgt="${LANGUAGE^^}" -F'[()]' '{act=$2} sub(/^\([^()]+\) */,""){f=(tgt==toupper(act))} f' \ + | awk -v tgt="${SECTION^^}" -F'[()]' '{act=$2} sub(/^\([^()]+\) */,""){f=(tgt==toupper(act))} f' \ > ${TMP}/code_snippet fi # Print code snippet with 4-space indent to enable colorization @@ -95,7 +95,7 @@ oeis() ( cat ${TMP}/code_snippet \ | sed 's/^/ /' else - printf "${LANGUAGE^^} unavailable. Use :list to view available languages.\n" + printf "${SECTION^^} unavailable. Use :list to view available languages.\n" fi fi # Search unknown sequence From 8a662d76c8719102149798b4813a0aa175f64188 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 2 Jul 2020 06:07:09 -0400 Subject: [PATCH 7/7] Added bibliography moved tmp/file removes to top of script --- share/adapters/oeis.sh | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/share/adapters/oeis.sh b/share/adapters/oeis.sh index b225e6f..fc5136a 100755 --- a/share/adapters/oeis.sh +++ b/share/adapters/oeis.sh @@ -14,6 +14,7 @@ oeis() ( local MAX_TERMS_LONG=30 local MAX_TERMS_SHORT=10 mkdir -p $TMP + rm -f ${TMP}/authors ${TMP}/bibliograpy ${TMP}/section $TMP/code_snippet # -- MAIN -- # Search sequence by ID (optional language arg) # . oeis @@ -42,7 +43,6 @@ oeis() ( # :list available language code_snippets if [[ ${SECTION^^} == ':LIST' || ${SECTION^^} == ':PROG' ]] then - rm -f ${TMP}/section grep -q '%p' $DOC && echo 'maple' >> $TMP/section grep -q '%t' $DOC && echo 'mathematica' >> $TMP/section grep '%o' $DOC \ @@ -71,7 +71,6 @@ oeis() ( if [ $# -gt 1 ] then printf "\n\n" - rm -f $TMP/code_snippet # MAPLE section (%p) if [[ ${SECTION^^} == 'MAPLE' ]] && grep -q '%p' $DOC then @@ -92,6 +91,21 @@ oeis() ( # Print code snippet with 4-space indent to enable colorization if [[ -f $TMP/code_snippet && $(wc -c < $TMP/code_snippet) -ne 0 ]] then + # Get authors + cat ${TMP}/code_snippet \ + | grep -o ' _[A-Z].* [A-Z].*_, [A-Z].*[0-9]' \ + | sort -u \ + > ${TMP}/authors + i=1 + # Replace authors with numbers + while read author + do + author=$(<<<"$author" sed 's/[]\\\*\(\.[]/\\&/g') + sed -i "s|${author}|[${i}]|" ${TMP}/code_snippet + echo "[${i}] [${author}]" | tr -d '_' >> ${TMP}/bibliograpy + let i++ + done <${TMP}/authors + # Print snippet cat ${TMP}/code_snippet \ | sed 's/^/ /' else @@ -152,8 +166,11 @@ curl cheat.sh/oeis/A2/:list # Error statements grep 'results, too many to show. Please refine your search.' $DOC | sed -e 's/<[^>]*>//g; s/^[ \t]*//' grep -o 'Sorry, but the terms do not match anything in the table.' $DOC + # print bibliography + printf "\n\n" + [ -f ${TMP}/bibliograpy ] && cat ${TMP}/bibliograpy # Print URL for user - printf "\n[${URL}]\n" \ + printf "[${URL}]\n" \ | rev \ | sed 's/,//' \ | rev \