mirror of
https://github.com/SqrtMinusOne/reverso.el.git
synced 2025-12-10 15:53:02 +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
|
(defconst reverso--languages-compatible
|
||||||
`((context
|
`((context
|
||||||
. ((english . (arabic german spanish french hebrew italian
|
. ((arabic . (english german spanish french hebrew italian
|
||||||
japanese dutch polish portuguese romanian
|
portuguese russian turkish ukrainian))
|
||||||
russian turkish chinese))
|
|
||||||
(arabic . (english german spanish french hebrew italian
|
|
||||||
portuguese russian turkish))
|
|
||||||
(german . (arabic english spanish french hebrew italian
|
(german . (arabic english spanish french hebrew italian
|
||||||
japanese dutch polish portuguese romanian
|
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
|
(spanish . (arabic german english french hebrew italian
|
||||||
japanese dutch polish portuguese romanian
|
japanese dutch polish portuguese romanian
|
||||||
russian turkish chinese))
|
russian swedish turkish chinese ukrainian))
|
||||||
(french . (arabic german spanish english hebrew italian
|
(french . (arabic german spanish english hebrew italian
|
||||||
japanese dutch polish portuguese romanian
|
japanese dutch polish portuguese romanian
|
||||||
russian turkish chinese))
|
russian swedish turkish chinese ukrainian))
|
||||||
(hebrew . (arabic german spanish french english italian dutch
|
(hebrew . (arabic german english spanish french italian dutch
|
||||||
portuguese russian))
|
portuguese russian ukrainian))
|
||||||
(italian . (arabic german spanish french hebrew english
|
(italian . (arabic german english spanish french hebrew
|
||||||
japanese dutch polish portuguese romanian
|
japanese dutch polish portuguese romanian
|
||||||
russian turkish chinese))
|
russian swedish turkish ukrainian))
|
||||||
(japanese . (german spanish french italian english portuguese
|
(japanese . (german english spanish french italian portuguese
|
||||||
russian))
|
russian ukrainian))
|
||||||
(dutch . (german spanish french hebrew italian english
|
(dutch . (german english spanish french hebrew italian
|
||||||
portuguese russian))
|
portuguese russian ukrainian))
|
||||||
(polish . (german spanish french italian english))
|
(polish . (german english spanish french italian ukrainian))
|
||||||
(portuguese . (arabic german spanish french hebrew italian
|
(portuguese . (arabic german english spanish french hebrew italian
|
||||||
japanese dutch english russian turkish))
|
japanese dutch russian turkish ukrainian))
|
||||||
(romanian . (german spanish french italian english turkish))
|
(romanian . (german english spanish french italian turkish ukrainian))
|
||||||
(russian . (arabic german spanish french hebrew italian
|
(russian . (arabic german english spanish french hebrew italian
|
||||||
japanese dutch portuguese english))
|
japanese dutch portuguese ukrainian))
|
||||||
(turkish . (arabic german spanish french italian portuguese
|
(swedish . (german english spanish french italian ukrainian))
|
||||||
romanian english))
|
(turkish . (arabic german english spanish french italian
|
||||||
(chinese . (english french spanish))))
|
portuguese romanian ukrainian))
|
||||||
|
(ukrainian . (english))
|
||||||
|
(chinese . (english french spanish ukrainian))))
|
||||||
(translation
|
(translation
|
||||||
. ((arabic . (german english spanish french hebrew italian
|
. ((arabic . (german english spanish french hebrew italian
|
||||||
portuguese russian turkish))
|
portuguese russian turkish))
|
||||||
|
|
@ -283,6 +285,10 @@ The result is an alist with the following keys:
|
||||||
(member source
|
(member source
|
||||||
(alist-get 'translation reverso--languages)))
|
(alist-get 'translation reverso--languages)))
|
||||||
(error "Wrong language: %s" target))
|
(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)
|
(request (alist-get 'translation reverso--urls)
|
||||||
:type "POST"
|
:type "POST"
|
||||||
:data (json-encode
|
:data (json-encode
|
||||||
|
|
@ -387,15 +393,19 @@ that are in tags with `reverso-highlight-face'"
|
||||||
(defun reverso--get-context (text source target cb)
|
(defun reverso--get-context (text source target cb)
|
||||||
"Do a context translation for TEXT from SOURCE to TARGET.
|
"Do a context translation for TEXT from SOURCE to TARGET.
|
||||||
|
|
||||||
SOURCE and TARGET are keys of `reverso--languages'. CB is a function
|
SOURCE and TARGET are keys of `reverso--languages'. CB is called with
|
||||||
that is called with the result."
|
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)
|
(unless (and (alist-get source reverso--language-mapping)
|
||||||
(member source
|
(member source
|
||||||
(alist-get 'translation reverso--languages)))
|
(alist-get 'context reverso--languages)))
|
||||||
(error "Wrong language: %s" source))
|
(error "Wrong language: %s" source))
|
||||||
(unless (and (alist-get target reverso--language-mapping)
|
(unless (and (alist-get target reverso--language-mapping)
|
||||||
(member source
|
(member source
|
||||||
(alist-get 'translation reverso--languages)))
|
(alist-get 'context reverso--languages)))
|
||||||
(error "Wrong language: %s" target))
|
(error "Wrong language: %s" target))
|
||||||
(unless (member target
|
(unless (member target
|
||||||
(alist-get source
|
(alist-get source
|
||||||
|
|
@ -649,9 +659,9 @@ source text."
|
||||||
"\n")
|
"\n")
|
||||||
do (reverso--context-render-list
|
do (reverso--context-render-list
|
||||||
(alist-get :context result)
|
(alist-get :context result)
|
||||||
(alist-get :language-from data)
|
(alist-get :language-to data)
|
||||||
(or (alist-get :detected-language 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)
|
(defun reverso--context-render-list (data lang-to lang-from)
|
||||||
"Render the context results."
|
"Render the context results."
|
||||||
|
|
@ -678,6 +688,14 @@ source text."
|
||||||
(insert (alist-get :translation data)))
|
(insert (alist-get :translation data)))
|
||||||
(insert "No results!")))
|
(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)
|
(defmacro reverso--with-buffer (&rest body)
|
||||||
"Execute BODY in the clean `reverso' results buffer."
|
"Execute BODY in the clean `reverso' results buffer."
|
||||||
(declare (indent 0))
|
(declare (indent 0))
|
||||||
|
|
@ -912,8 +930,7 @@ source text."
|
||||||
(reverso--with-buffer
|
(reverso--with-buffer
|
||||||
(if is-brief
|
(if is-brief
|
||||||
(reverso--translate-render-brief input data)
|
(reverso--translate-render-brief input data)
|
||||||
(reverso--translate-render input data))
|
(reverso--translate-render input data))))))
|
||||||
(setq-local reverso--data data)))))
|
|
||||||
|
|
||||||
(transient-define-prefix reverso-translate ()
|
(transient-define-prefix reverso-translate ()
|
||||||
["Input"
|
["Input"
|
||||||
|
|
@ -927,5 +944,43 @@ source text."
|
||||||
(reverso--translate-exec-suffix)
|
(reverso--translate-exec-suffix)
|
||||||
("q" "Quit" transient-quit-one)])
|
("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)
|
(provide 'reverso)
|
||||||
;;; reverso.el ends here
|
;;; reverso.el ends here
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue