mirror of
https://github.com/SqrtMinusOne/reverso.el.git
synced 2025-12-10 07:43:03 +03:00
feat: context works as expected
This commit is contained in:
parent
19fe81ea98
commit
82966fee28
1 changed files with 88 additions and 33 deletions
121
reverso.el
121
reverso.el
|
|
@ -134,38 +134,40 @@ This one is used for the synonyms queries.")
|
|||
|
||||
(defconst reverso--languages-compatible
|
||||
`((context
|
||||
. ((english . (arabic german spanish french hebrew italian
|
||||
japanese dutch polish portuguese romanian
|
||||
russian turkish chinese))
|
||||
(arabic . (english german spanish french hebrew italian
|
||||
portuguese russian turkish))
|
||||
. ((arabic . (english german spanish french hebrew italian
|
||||
portuguese russian turkish ukrainian))
|
||||
(german . (arabic english spanish french hebrew italian
|
||||
japanese dutch polish portuguese romanian
|
||||
russian turkish))
|
||||
russian swedish turkish ukrainian))
|
||||
(english . (arabic german spanish french hebrew italian
|
||||
japanese dutch polish portuguese romanian
|
||||
russian swedish turkish ukraninan chinese))
|
||||
(spanish . (arabic german english french hebrew italian
|
||||
japanese dutch polish portuguese romanian
|
||||
russian turkish chinese))
|
||||
russian swedish turkish chinese ukrainian))
|
||||
(french . (arabic german spanish english hebrew italian
|
||||
japanese dutch polish portuguese romanian
|
||||
russian turkish chinese))
|
||||
(hebrew . (arabic german spanish french english italian dutch
|
||||
portuguese russian))
|
||||
(italian . (arabic german spanish french hebrew english
|
||||
russian swedish turkish chinese ukrainian))
|
||||
(hebrew . (arabic german english spanish french italian dutch
|
||||
portuguese russian ukrainian))
|
||||
(italian . (arabic german english spanish french hebrew
|
||||
japanese dutch polish portuguese romanian
|
||||
russian turkish chinese))
|
||||
(japanese . (german spanish french italian english portuguese
|
||||
russian))
|
||||
(dutch . (german spanish french hebrew italian english
|
||||
portuguese russian))
|
||||
(polish . (german spanish french italian english))
|
||||
(portuguese . (arabic german spanish french hebrew italian
|
||||
japanese dutch english russian turkish))
|
||||
(romanian . (german spanish french italian english turkish))
|
||||
(russian . (arabic german spanish french hebrew italian
|
||||
japanese dutch portuguese english))
|
||||
(turkish . (arabic german spanish french italian portuguese
|
||||
romanian english))
|
||||
(chinese . (english french spanish))))
|
||||
russian swedish turkish ukrainian))
|
||||
(japanese . (german english spanish french italian portuguese
|
||||
russian ukrainian))
|
||||
(dutch . (german english spanish french hebrew italian
|
||||
portuguese russian ukrainian))
|
||||
(polish . (german english spanish french italian ukrainian))
|
||||
(portuguese . (arabic german english spanish french hebrew italian
|
||||
japanese dutch russian turkish ukrainian))
|
||||
(romanian . (german english spanish french italian turkish ukrainian))
|
||||
(russian . (arabic german english spanish french hebrew italian
|
||||
japanese dutch portuguese ukrainian))
|
||||
(swedish . (german english spanish french italian ukrainian))
|
||||
(turkish . (arabic german english spanish french italian
|
||||
portuguese romanian ukrainian))
|
||||
(ukrainian . (english))
|
||||
(chinese . (english french spanish ukrainian))))
|
||||
(translation
|
||||
. ((arabic . (german english spanish french hebrew italian
|
||||
portuguese russian turkish))
|
||||
|
|
@ -283,6 +285,10 @@ The result is an alist with the following keys:
|
|||
(member source
|
||||
(alist-get 'translation reverso--languages)))
|
||||
(error "Wrong language: %s" target))
|
||||
(unless (member target
|
||||
(alist-get source
|
||||
(alist-get 'translation reverso--languages-compatible)))
|
||||
(error "Language %s is not compatible with %s" target source))
|
||||
(request (alist-get 'translation reverso--urls)
|
||||
:type "POST"
|
||||
:data (json-encode
|
||||
|
|
@ -387,15 +393,19 @@ that are in tags with `reverso-highlight-face'"
|
|||
(defun reverso--get-context (text source target cb)
|
||||
"Do a context translation for TEXT from SOURCE to TARGET.
|
||||
|
||||
SOURCE and TARGET are keys of `reverso--languages'. CB is a function
|
||||
that is called with the result."
|
||||
SOURCE and TARGET are keys of `reverso--languages'. CB is called with
|
||||
the result.
|
||||
|
||||
The result is a list of alists with the keys:
|
||||
- `:source': string in the source language
|
||||
- `:target': string in the target language"
|
||||
(unless (and (alist-get source reverso--language-mapping)
|
||||
(member source
|
||||
(alist-get 'translation reverso--languages)))
|
||||
(alist-get 'context reverso--languages)))
|
||||
(error "Wrong language: %s" source))
|
||||
(unless (and (alist-get target reverso--language-mapping)
|
||||
(member source
|
||||
(alist-get 'translation reverso--languages)))
|
||||
(alist-get 'context reverso--languages)))
|
||||
(error "Wrong language: %s" target))
|
||||
(unless (member target
|
||||
(alist-get source
|
||||
|
|
@ -649,9 +659,9 @@ source text."
|
|||
"\n")
|
||||
do (reverso--context-render-list
|
||||
(alist-get :context result)
|
||||
(alist-get :language-from data)
|
||||
(alist-get :language-to data)
|
||||
(or (alist-get :detected-language data)
|
||||
(alist-get :language-to data)))))))
|
||||
(alist-get :language-from data)))))))
|
||||
|
||||
(defun reverso--context-render-list (data lang-to lang-from)
|
||||
"Render the context results."
|
||||
|
|
@ -678,6 +688,14 @@ source text."
|
|||
(insert (alist-get :translation data)))
|
||||
(insert "No results!")))
|
||||
|
||||
(defun reverso--context-render (input data lang-to lang-from)
|
||||
(setq-local reverso--input input)
|
||||
(insert (propertize
|
||||
"Context results: "
|
||||
'face 'reverso-heading-face)
|
||||
"\n")
|
||||
(reverso--context-render-list data lang-to lang-from))
|
||||
|
||||
(defmacro reverso--with-buffer (&rest body)
|
||||
"Execute BODY in the clean `reverso' results buffer."
|
||||
(declare (indent 0))
|
||||
|
|
@ -912,8 +930,7 @@ source text."
|
|||
(reverso--with-buffer
|
||||
(if is-brief
|
||||
(reverso--translate-render-brief input data)
|
||||
(reverso--translate-render input data))
|
||||
(setq-local reverso--data data)))))
|
||||
(reverso--translate-render input data))))))
|
||||
|
||||
(transient-define-prefix reverso-translate ()
|
||||
["Input"
|
||||
|
|
@ -927,5 +944,43 @@ source text."
|
|||
(reverso--translate-exec-suffix)
|
||||
("q" "Quit" transient-quit-one)])
|
||||
|
||||
(transient-define-infix reverso--transient-context-language-source ()
|
||||
:class 'reverso--transient-language
|
||||
:description "Source language"
|
||||
:key "s"
|
||||
:argument "-s"
|
||||
:languages (alist-get 'context reverso--languages))
|
||||
|
||||
(transient-define-infix reverso--transient-context-language-target ()
|
||||
:class 'reverso--transient-language
|
||||
:description "Target language"
|
||||
:key "t"
|
||||
:argument "-t"
|
||||
:languages (alist-get 'translation reverso--languages)
|
||||
:target-languages (alist-get 'context reverso--languages-compatible)
|
||||
:is-target t)
|
||||
|
||||
(transient-define-suffix reverso--context-exec-suffix (input source target)
|
||||
:key "e"
|
||||
:description "Find context"
|
||||
(interactive (transient-args transient-current-command))
|
||||
(reverso--get-context
|
||||
input source target
|
||||
(lambda (data)
|
||||
(reverso--with-buffer
|
||||
(reverso--context-render input data source target)
|
||||
(setq-local reverso--data data)))))
|
||||
|
||||
(transient-define-prefix reverso-context ()
|
||||
["Input"
|
||||
("i" "Input" reverso--transient-input-infix)]
|
||||
["Parameters"
|
||||
(reverso--transient-context-language-source)
|
||||
(reverso--transient-context-language-target)
|
||||
(reverso--transient-swap-languages)]
|
||||
["Actions"
|
||||
(reverso--context-exec-suffix)
|
||||
("q" "Quit" transient-quit-one)])
|
||||
|
||||
(provide 'reverso)
|
||||
;;; reverso.el ends here
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue