[feature] youdao dict
This commit is contained in:
parent
a8d7ae3851
commit
e3b438b2d9
50
bin/dict
Executable file
50
bin/dict
Executable file
|
@ -0,0 +1,50 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
DIR="$(readlink -f "$(dirname "$0")")"
|
||||||
|
DMENU_OPTS='-i -c -fn monospace:13 -nb #626262 -nf #bbbbbb -sb #5b97f7 -sf #eeeeee -l 20'
|
||||||
|
|
||||||
|
|
||||||
|
request() {
|
||||||
|
RESULT="$(
|
||||||
|
curl -SsLG "http://dict.youdao.com/w/eng/$SENTENCE/" \
|
||||||
|
| awk -v PI=' ' -f "$DIR/dict.awk"
|
||||||
|
)"
|
||||||
|
display
|
||||||
|
}
|
||||||
|
|
||||||
|
pronounce() {
|
||||||
|
PLAY=afplay
|
||||||
|
! command -v "$PLAY" 2>/dev/null && PLAY="ffplay -nodisp -autoexit"
|
||||||
|
FP="/tmp/dict/$*.mp3"
|
||||||
|
mkdir -p /tmp/dict
|
||||||
|
[ ! -f "$FP" ] && curl -o "$FP" "http://dict.youdao.com/dictvoice?audio=$1&type=$2" 1>/dev/null 2>&1
|
||||||
|
$PLAY "$FP" 1>/dev/null 2>&1
|
||||||
|
}
|
||||||
|
|
||||||
|
display() {
|
||||||
|
echo "$RESULT" \
|
||||||
|
| dmenu $DMENU_OPTS \
|
||||||
|
| if IFS= read -r INPUT; then
|
||||||
|
if echo "$INPUT" | grep -qP ' '; then
|
||||||
|
if echo "$INPUT" | grep -q '美'; then
|
||||||
|
pronounce "$SENTENCE" 2 &
|
||||||
|
else
|
||||||
|
pronounce "$SENTENCE" 1 &
|
||||||
|
fi
|
||||||
|
display
|
||||||
|
elif echo "$INPUT" | grep -P '^ '; then
|
||||||
|
echo -n $INPUT | sed 's/^\s+//' | xsel -b
|
||||||
|
else
|
||||||
|
SENTENCE="$INPUT"
|
||||||
|
request
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
SENTENCE="$*"
|
||||||
|
[ -z "$SENTENCE" ] && SENTENCE="$(xsel -o)"
|
||||||
|
request
|
||||||
|
#pronounce "$@"
|
||||||
|
|
41
bin/dict.awk
Executable file
41
bin/dict.awk
Executable file
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/awk
|
||||||
|
|
||||||
|
BEGIN {
|
||||||
|
if (color) {
|
||||||
|
HEAD = " \033[33m\033[1m%s\033[0m\n"
|
||||||
|
TRAN = " \033[32m%s\033[0m\n"
|
||||||
|
} else {
|
||||||
|
HEAD = " %s\n"
|
||||||
|
TRAN = " %s\n"
|
||||||
|
}
|
||||||
|
stop = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
!stop {
|
||||||
|
if (match($0, /<meta name="keywords" content="(.+)"\/>/, m)) {
|
||||||
|
sentence = m[1]
|
||||||
|
} else if (match($0, /<span class="pronounce">(\w)/, m)) {
|
||||||
|
pronounce = m[1]
|
||||||
|
} else if (match($0, /<span class="phonetic">(.+)<\/span>/, m)) {
|
||||||
|
phonetic = m[1]
|
||||||
|
} else if (match($0, /<li>([a-z]+\..+)<\/li>/, m)) {
|
||||||
|
if (sentence) {
|
||||||
|
printf HEAD, sentence
|
||||||
|
sentence = ""
|
||||||
|
}
|
||||||
|
printf TRAN, m[1]
|
||||||
|
} else if (match($0, /<div id="synonyms"/)) {
|
||||||
|
synonyms = 1
|
||||||
|
printf HEAD, "同近义词"
|
||||||
|
} else if (synonyms && match($0, /<a .+>(.+)<\/a>/, m)) {
|
||||||
|
printf " %s\n", m[1]
|
||||||
|
} else if (synonyms && match($0, /<\/div>/)) {
|
||||||
|
stop = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pronounce && phonetic) {
|
||||||
|
printf " %s %s %s\n", PI, pronounce, phonetic
|
||||||
|
pronounce = ""
|
||||||
|
phonetic = ""
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user