summaryrefslogtreecommitdiff
path: root/bin/extra/trl
blob: ee420407bfddef91f7b061be7370ee07f13ed38e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#!/bin/sh

# prints on stderr
log () { >&2 echo "$@"; }

help () 
{
	 >&2 cat <<-EOF
	  h         help
	  l         clear output
	  q         quit

	  i         invert languages
	  p         select primary
	  s         select secondary
	EOF
}
# returns available languages
languages () {
	cat <<-EOF
	arabic
	dutch
	french
	german
	polish
	english
	portuguese
	spanish
	romanian
	hebrew
	swedish
	italian
	turkish
	japanese
	ukrainian
	korean
	chinese
	czech
	hungarian
	danish
	persian
	greek
	slovak
	hindi
	thai
	EOF
}

# translates a word
# $1: primary language
# $2: secondary language
# $3: word to translate
translate ()
{
	curl -s "https://context.reverso.net/translation/$1-$2/$3" \
	--compressed \
	-H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/116.0' \
	-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' \
	-H 'Accept-Language: en-US,en;q=0.5' \
	-H 'Accept-Encoding: gzip, deflate, br' |
	pup 'a.link_highlighted em text{}' |
	sed 's/.*/\L&/' |
	sort | uniq | sed 's/.*/  &/'
}

# prints the current language
current_language ()
{
	log "  current: $primary-$secondary"
}

select_language ()
{
	tmp="$(languages | fzf)"
	[ "$tmp" ] && [ "$tmp" != "$primary" ] && [ "$tmp" != "$secondary" ] &&
		eval "$1=\"$tmp\""
	current_language
}

# set default languages
primary=french
secondary=dutch


main ()
{
	current_language
	while true
	do
		log -n '>'
		read -r prompt 
		test $? -eq 1 && exit 0 # quit on ctrl-d
		case "$prompt" in
			q) break ;;
			l) clear ;;
			i) tmp="$secondary"; secondary="$primary"; primary="$tmp"
				current_language ;;
			h) help ;; # TODO
			p) select_language primary ;;
			s) select_language secondary ;;
			'') ;;
			*) translate "$primary" "$secondary" "$prompt" ;;
		esac
	done
}


if  [ "$1" = "--help"  ] || [ "$1" = "-h" ]
then
	log "usage: trl"
	help
	exit
fi

main