diff --git a/bin/dict b/bin/dict new file mode 100755 index 0000000..f91197d --- /dev/null +++ b/bin/dict @@ -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 "$@" + diff --git a/bin/dict.awk b/bin/dict.awk new file mode 100755 index 0000000..32da288 --- /dev/null +++ b/bin/dict.awk @@ -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, //, m)) { + sentence = m[1] + } else if (match($0, /(\w)/, m)) { + pronounce = m[1] + } else if (match($0, /(.+)<\/span>/, m)) { + phonetic = m[1] + } else if (match($0, /
  • ([a-z]+\..+)<\/li>/, m)) { + if (sentence) { + printf HEAD, sentence + sentence = "" + } + printf TRAN, m[1] + } else if (match($0, /
    (.+)<\/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 = "" + } +}