mirror of
https://github.com/SqrtMinusOne/reverso.el.git
synced 2025-12-10 15:53:02 +03:00
feat: error API
This commit is contained in:
parent
dab776ec9d
commit
39f23e24ea
1 changed files with 64 additions and 4 deletions
68
reverso.el
68
reverso.el
|
|
@ -41,6 +41,11 @@
|
||||||
"Face for highlighting selected words in translation."
|
"Face for highlighting selected words in translation."
|
||||||
:group 'reverso)
|
:group 'reverso)
|
||||||
|
|
||||||
|
(defface reverso-error-face
|
||||||
|
'((t (:inherit error)))
|
||||||
|
"Face for highlighting errors in grammar check."
|
||||||
|
:group 'reverso)
|
||||||
|
|
||||||
(defconst reverso--languages
|
(defconst reverso--languages
|
||||||
'((translation . (arabic chinese dutch english french german hebrew
|
'((translation . (arabic chinese dutch english french german hebrew
|
||||||
italian japanese korean polish portugese
|
italian japanese korean polish portugese
|
||||||
|
|
@ -224,9 +229,13 @@ that are in tags with `reverso-highlight-face'"
|
||||||
(libxml-parse-html-region (point-min) (point-max))
|
(libxml-parse-html-region (point-min) (point-max))
|
||||||
'body)))))
|
'body)))))
|
||||||
|
|
||||||
|
(defun reverso--alist-remove-empty-values (alist)
|
||||||
|
(cl-loop for (key . value) in alist
|
||||||
|
if value
|
||||||
|
collect (cons key value)))
|
||||||
|
|
||||||
(defun reverso--translate-parse (response)
|
(defun reverso--translate-parse (response)
|
||||||
"Convert RESPONSE from the reverso translation API into an alist."
|
"Convert RESPONSE from the reverso translation API into an alist."
|
||||||
(setq my/test2 response)
|
|
||||||
(let ((corrected-text (alist-get 'correctedText response))
|
(let ((corrected-text (alist-get 'correctedText response))
|
||||||
(language-from (alist-get 'from response))
|
(language-from (alist-get 'from response))
|
||||||
(language-to (alist-get 'to response))
|
(language-to (alist-get 'to response))
|
||||||
|
|
@ -282,7 +291,8 @@ that is called with the result."
|
||||||
:encoding 'utf-8
|
:encoding 'utf-8
|
||||||
:success (cl-function
|
:success (cl-function
|
||||||
(lambda (&key data &allow-other-keys)
|
(lambda (&key data &allow-other-keys)
|
||||||
(funcall cb (reverso--get-context-parse data))))
|
(funcall cb (reverso--alist-remove-empty-values
|
||||||
|
(reverso--get-context-parse data)))))
|
||||||
:error (cl-function
|
:error (cl-function
|
||||||
(lambda (&key error-thrown &allow-other-keys)
|
(lambda (&key error-thrown &allow-other-keys)
|
||||||
(message "Error!: %S" error-thrown)))))
|
(message "Error!: %S" error-thrown)))))
|
||||||
|
|
@ -320,7 +330,8 @@ CB is a function that is called with the result."
|
||||||
:encoding 'utf-8
|
:encoding 'utf-8
|
||||||
:success (cl-function
|
:success (cl-function
|
||||||
(lambda (&key data &allow-other-keys)
|
(lambda (&key data &allow-other-keys)
|
||||||
(funcall cb (reverso--get-synomyms-parse data))))
|
(funcall cb (reverso--alist-remove-empty-values
|
||||||
|
(reverso--get-synomyms-parse data)))))
|
||||||
:error (cl-function
|
:error (cl-function
|
||||||
(lambda (&key error-thrown &allow-other-keys)
|
(lambda (&key error-thrown &allow-other-keys)
|
||||||
(message "Error!: %S" error-thrown)))))
|
(message "Error!: %S" error-thrown)))))
|
||||||
|
|
@ -366,8 +377,57 @@ HTML is a string."
|
||||||
collect
|
collect
|
||||||
`((antonym . ,text))))))))
|
`((antonym . ,text))))))))
|
||||||
|
|
||||||
;; (reverso--get-synomyms "Color" 'english (lambda (data) (setq my/test2 data)))
|
(defun reverso--get-grammar (text language cb)
|
||||||
|
(unless (member language (alist-get 'grammar reverso--languages))
|
||||||
|
(error "Wrong language: %s" language))
|
||||||
|
(request (concat (alist-get 'grammar reverso--urls)
|
||||||
|
"?text=" (url-hexify-string text)
|
||||||
|
"&language=" (symbol-name
|
||||||
|
(alist-get language reverso--language-mapping))
|
||||||
|
"&getCorrectionDetails=true")
|
||||||
|
:type "GET"
|
||||||
|
:headers `(("Accept" . "*/*")
|
||||||
|
("Connection" . "keep-alive")
|
||||||
|
("User-Agent" . ,reverso--user-agent))
|
||||||
|
:parser 'json-read
|
||||||
|
:encoding 'utf-8
|
||||||
|
:success (cl-function
|
||||||
|
(lambda (&key data &allow-other-keys)
|
||||||
|
(funcall cb (reverso--alist-remove-empty-values
|
||||||
|
(reverso--get-grammar-parse text data)))))
|
||||||
|
:error (cl-function
|
||||||
|
(lambda (&key error-thrown &allow-other-keys)
|
||||||
|
(message "Error!: %S" error-thrown)))))
|
||||||
|
|
||||||
|
(defun reverso--get-grammar-parse (source-text data)
|
||||||
|
(let* ((corrected-text (alist-get 'text data))
|
||||||
|
(source-text-hl
|
||||||
|
(with-temp-buffer
|
||||||
|
(insert source-text)
|
||||||
|
(cl-loop for corr across (alist-get 'corrections data)
|
||||||
|
if (alist-get 'startIndex corr)
|
||||||
|
do (put-text-property (alist-get 'startIndex corr)
|
||||||
|
(alist-get 'endIndex corr)
|
||||||
|
'face 'reverso-error-face))
|
||||||
|
(buffer-string)))
|
||||||
|
(corrections
|
||||||
|
(cl-loop
|
||||||
|
for corr across (alist-get 'corrections data)
|
||||||
|
collect `((type . ,(alist-get 'type corr))
|
||||||
|
(short-description . ,(alist-get 'shortDescription corr))
|
||||||
|
(long-description . ,(alist-get 'longDescription corr))
|
||||||
|
(mistake-text . ,(alist-get 'mistakeText corr))
|
||||||
|
(correction-text . ,(alist-get 'correctionText corr))
|
||||||
|
(correction-defition . ,(alist-get 'correctionDefinition corr))
|
||||||
|
(suggestions
|
||||||
|
. ,(cl-loop for s across (alist-get 'suggestions corr)
|
||||||
|
collect
|
||||||
|
`((text . ,(alist-get 'text s))
|
||||||
|
(definition . ,(alist-get 'definition s))
|
||||||
|
(category . ,(alist-get 'category s)))))))))
|
||||||
|
`((corrected-text . ,corrected-text)
|
||||||
|
(source-text . ,source-text-hl)
|
||||||
|
(corrections . ,corrections))))
|
||||||
|
|
||||||
(provide 'reverso)
|
(provide 'reverso)
|
||||||
;;; reverso.el ends here
|
;;; reverso.el ends here
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue