Download
(defconst text-translator-version "0.7.4"
"version numbers of this version of text-translator")
(defconst text-translator-buffer "*translated*"
"Buffer name that displays translation result.")
(defconst text-translator-mode-name "Translator"
"Major mode name for displaying to mode line.")
(defconst text-translator-work-buffer (concat " " text-translator-buffer)
"Output Buffer name from translation site.")
(defgroup text-translator nil
"Text Translator"
:tag "Text Translator"
:group 'text-translator)
(defcustom text-translator-prefix-key "\C-c"
"*Prefix key for text-translator commands."
:tag "Prefix Key of text-translator"
:type '(string :size 10)
:group 'text-translator)
(defcustom text-translator-auto-window-adjust t
"*Whether or not you adjust height of window displayed by dividing."
:type 'boolean
:group 'text-translator)
(defcustom text-translator-window-min-height 4
"*Specify minimum height of the translation result display buffer."
:type 'integer
:group 'text-translator)
(defcustom text-translator-leave-string nil
"*Whether or not you leave the character string before the translating."
:type 'boolean
:group 'text-translator)
(defcustom text-translator-pre-string-replace-alist
'(("+" . "+") ("–" . "-") ("•" . "・"))
"*Rule that converts character string that wants to translate."
:type '(repeat
(cons :tag "Rule"
(string :tag "Letter before the converting.")
(string :tag "Letter after the converting.")))
:group 'text-translator)
(defcustom text-translator-post-string-replace-alist
'(("\r" . "") ("'" . "'") (""" . "\"")
("&" . "&") ("<" . "<") (">" . ">") ("–" . "-")
("Ĉ" . "Ĉ") ("ĉ" . "ĉ") ("Ĝ" . "Ĝ") ("ĝ" . "ĝ")
("Ĥ" . "Ĥ") ("ĥ" . "ĥ") ("Ĵ" . "Ĵ") ("ĵ" . "ĵ")
("Ŝ" . "Ŝ") ("ŝ" . "ŝ") ("Ŭ" . "Ŭ") ("ŭ" . "ŭ"))
"*Rule that converts character string after the translation."
:type '(repeat
(cons :tag "Rule"
(string :tag "Letter before the converting.")
(string :tag "Letter after the converting.")))
:group 'text-translator)
(defcustom text-translator-proxy-server
(let ((proxy (or (getenv "HTTP_PROXY") "")))
(and (string-match "^\\(http://\\)?\\(.+\\):\\([0-9]+\\)" proxy)
(match-string 2 proxy)))
"*Proxy server used."
:type '(choice (string :tag "specify proxy")
(const :tag "not use proxy" nil))
:group 'text-translator)
(defcustom text-translator-proxy-port
(let ((proxy (or (getenv "HTTP_PROXY") "")))
(or (and (string-match "^\\(http://\\)?\\(.+\\):\\([0-9]+\\)" proxy)
(string-to-number (match-string 3 proxy)))
8080))
"*Proxy port number used."
:type 'integer
:group 'text-translator)
(defcustom text-translator-proxy-user nil
"*Basic proxy authorization user name."
:type '(choice (string :tag "Basic proxy authorization user name")
(const :tag "Not use Basic proxy authorization" nil))
:group 'text-translator)
(defcustom text-translator-proxy-password nil
"*Basic proxy authorization password."
:type '(choice (string :tag "Basic proxy authorization password")
(const :tag "Not use Basic proxy authorization" nil))
:group 'text-translator)
(defcustom text-translator-site-data-template-alist
'(
("google.com"
"translate.google.com"
"/ HTTP/1.1"
"js=n&prev=_t&hl=ja&ie=UTF-8&text=%s&file=&sl=%o&tl=%t"
utf-8-dos
(lambda ()
(text-translator-extract-tag-exclusion-string
"<span id=result_box[^>]*>\\(\\(<span [^>]*>\\([^<]\\|<br>\\)*</span>\\)+\\)</span>"))
(("en" . "ja") ("ja" . "en")
("en" . "es") ("es" . "en")
("en" . "fr") ("fr" . "en")
("en" . "de") ("de" . "en")
("en" . "it") ("it" . "en")
("en" . "ar") ("ar" . "en")
("de" . "fr") ("fr" . "de")
("en" . "pt") ("pt" . "en")
("en" . "ru") ("ru" . "en")
("en" . "ko") ("ko" . "en")
("en" . "zh-CN") ("zh-CN" . "en")
("en" . "zh-TW") ("zh-TW" . "en")
("zh-CN" . "zh-TW") ("zh-TW" . "zh-CN"))
(("zh-TW" . "tw") ("zh-CN" . "ch")))
("yahoo.com"
"babelfish.yahoo.com"
"/translate_txt HTTP/1.1"
"ei=UTF-8&doit=done&intl=1&tt=urltext&trtext=%s&lp=%o_%t&btnTrTxt=Translate"
utf-8
" <div id=\"result\"><div style=\"padding:0.6em;\">\\([^<]*\\)</div>"
(("en" . "ja") ("ja" . "en")
("en" . "nl") ("nl" . "en")
("en" . "fr") ("fr" . "en")
("en" . "de") ("de" . "en")
("en" . "el") ("el" . "en")
("en" . "it") ("it" . "en")
("en" . "ko") ("ko" . "en")
("en" . "pt") ("pt" . "en")
("en" . "ru") ("ru" . "en")
("en" . "es") ("es" . "en")
("nl" . "fr")
("fr" . "de")
("fr" . "el") ("el" . "fr")
("fr" . "it") ("it" . "fr")
("fr" . "pt") ("pt" . "fr")
("fr" . "es") ("es" . "fr")
("en" . "zh") ("zh" . "en")
("en" . "zt") ("zt" . "en"))
(("zh" . "ch") ("zt" . "tw")))
("freetranslation.com"
"ets.freetranslation.com"
"/ HTTP/1.1"
"sequence=core&mode=html&charset=UTF-8&template=results_en-us.htm&language=%o/%t&srctext=%s"
utf-8
"<textarea name=\"dsttext\" cols=\"40\" rows=\"6\" style=\"width:99%;height:142px;\" id=\"resultsBox\">\\([^<]*\\)</textarea>"
(("English" . "Spanish") ("Spanish" . "English")
("English" . "French") ("French" . "English")
("English" . "German") ("German" . "English")
("English" . "Italian") ("Italian" . "English")
("English" . "Dutch") ("Dutch" . "English")
("English" . "Portuguese") ("Portuguese" . "English")
("English" . "Norwegian"))
(("English" . "en") ("Spanish" . "es")
("French" . "fr") ("German" . "de")
("Italian" . "it") ("Dutch" . "nl")
("Portuguese" . "pt") ("Norwegian" . "no")))
("freetranslation.com"
"ets6.freetranslation.com"
"/ HTTP/1.1"
"sequence=core&mode=html&charset=UTF-8&template=results_en-us.htm&language=%o/%t&srctext=%s"
utf-8
"<textarea name=\"dsttext\" cols=\"40\" rows=\"6\" style=\"width:99%;height:142px;\" id=\"resultsBox\">\\([^<]*\\)</textarea>"
(("English" . "Russian") ("Russian" . "English")
("English" . "SimplifiedChinese")
("English" . "TraditionalChinese"))
(("English" . "en") ("Russian" . "ru")
("SimplifiedChinese" . "ch") ("TraditionalChinese" . "tw")))
("freetranslation.com"
"tets9.freetranslation.com"
"/ HTTP/1.1"
"sequence=core&mode=html&charset=UTF-8&template=results_en-us.htm&language=%o/%t&srctext=%s"
utf-8
"<textarea name=\"dsttext\" cols=\"40\" rows=\"6\" style=\"width:99%;height:142px;\" id=\"resultsBox\">\\([^<]*\\)</textarea>"
(("English" . "Japanese") ("Japanese" . "English"))
(("English" . "en") ("Japanese" . "ja")))
("livedoor.com"
"translate.livedoor.com"
"/ HTTP/1.1"
"clear_flg=1&src_text=%s&trns_type=%o,%t&sumit=翻訳"
utf-8
"<textarea name=\"tar_text\" cols=\"40\" rows=\"10\" wrap=\"physical\">\\([^<]*\\)</textarea>"
(("1" . "2") ("2" . "1")
("2" . "9") ("9" . "2")
("2" . "6") ("6" . "2"))
(("1" . "en") ("2" . "ja")
("6" . "ch") ("9" . "ko")))
("fresheye.com"
"mt.fresheye.com"
"/ft_result.cgi HTTP/1.1"
"gen_text=%s&e=%o%t"
utf-8
"<TEXTAREA class=\"out-form\" name=\"gen_text2\" cols=\"25\" rows=\"15\">\\([^<]*\\)</TEXTAREA>"
(("E" . "J") ("J" . "E"))
(("E" . "en") ("J" . "ja")))
("fresheye.com"
"mt.fresheye.com"
"/ft_cjresult.cgi HTTP/1.1"
"gen_text=%s&charset=gb2312&cjjc=%o%t"
utf-8
"<TEXTAREA class=\"out-form\" name=\"gen_text2\" cols=\"25\" rows=\"15\">\\([^<]*\\)</TEXTAREA>"
(("c" . "j") ("j" . "c") ("e" . "c"))
(("c" . "ch") ("j" . "ja") ("e" . "en")))
("fresheye.com"
"mt.fresheye.com"
"/ft_cjresult.cgi HTTP/1.1"
"gen_text=%s&charset=big5&cjjc=%o%t"
utf-8
"<TEXTAREA class=\"out-form\" name=\"gen_text2\" cols=\"25\" rows=\"15\">\\([^<]*\\)</TEXTAREA>"
(("c" . "j") ("j" . "c") ("e" . "c"))
(("c" . "tw") ("j" . "ja") ("e" . "en")))
("excite.co.jp"
"www.excite.co.jp"
"/world/english/ HTTP/1.1"
"wb_lp=%o%t&before=%s"
utf-8
"<textarea name=\"after\" id=\"after\">\\([^<]*\\)</textarea>"
(("EN" . "JA") ("JA" . "EN"))
(("EN" . "en") ("JA" . "ja")))
("excite.co.jp"
"www.excite.co.jp"
"/world/chinese/ HTTP/1.1"
"wb_lp=%o%t&before=%s"
utf-8
"<textarea name=\"after\" id=\"after\">\\([^<]*\\)</textarea>"
(("JA" . "CH") ("CH" . "JA"))
(("JA" . "ja") ("CH" . "ch")))
("excite.co.jp"
"www.excite.co.jp"
"/world/chinese/ HTTP/1.1"
"wb_lp=%o%t&big5=yes&before=%s"
utf-8
"<textarea name=\"after\" id=\"after\">\\([^<]*\\)</textarea>"
(("JA" . "CH") ("CH" . "JA"))
(("JA" . "ja") ("CH" . "tw")))
("excite.co.jp"
"www.excite.co.jp"
"/world/korean/ HTTP/1.1"
"wb_lp=%o%t&before=%s"
utf-8
"<textarea name=\"after\" id=\"after\">\\([^<]*\\)</textarea>"
(("JA" . "KO") ("KO" . "JA"))
(("JA" . "ja") ("KO" . "ko")))
("yahoo.co.jp"
"honyaku.yahoo.co.jp"
"/transtext HTTP/1.1"
"both=TH&text=%s&clearFlg=1&eid=CR-%o%t"
utf-8
"<textarea rows=12 cols=30 name=\"trn_text\" id=\"trn_textText\" class=\"smaller\">\\([^<]*\\)</textarea>"
(("E" . "J") ("J" . "E")
("C" . "J") ("J" . "C-CN")
("K" . "J") ("J" . "K"))
(("E" . "en") ("J" . "ja")
("C" . "ch") ("C-CN" . "ch")
("K" . "ko")))
("ocn.ne.jp"
"cgi01.ocn.ne.jp"
"/cgi-bin/translation/index.cgi HTTP/1.1"
"langpair=%o%t&sourceText=%s"
utf-8
"<TEXTAREA NAME=\"responseText\" ROWS=\"5\" COLS=\"41\" WRAP=\"virtual\" CLASS=\"in2\">\\([^<]*\\)</TEXTAREA>"
(("en" . "ja") ("ja" . "en")
("ja" . "ko") ("ko" . "ja")
("ja" . "zh") ("zh" . "ja"))
(("zh" . "ch"))))
"The alist where setting of the site which is used for text translation is
described. To update site-data, evalute `text-translator-site-data-init`."
:type '(repeat
(list :tag "Web Site"
(string :tag "Web site name and translation type")
(string :tag "Host name")
(string :tag "POST path and HTTP version")
(string :tag "POST contents")
(symbol :tag "Character code")
(choice (string :tag "regexp") (symbol :tag "function"))
(list :tag (concat "The correspondence of translation-able "
"name (used by translation sites)"))
(list :tag (concat "The correspondence of name that used by "
"text-translator and name that used by "
"translation sites"))))
:group 'text-translator)
(defcustom text-translator-site-data-minimum-alist
'(
("lou5.jp_*normal"
"lou5.jp"
"/ HTTP/1.1"
"v=1&text=%s"
utf-8
(lambda ()
(text-translator-extract-tag-exclusion-string
"<p class=\"large align-left box\">\\(\\(.\\|\n\\)*?\\)</p>"
t)))
("lou5.jp_*blog"
"lou5.jp"
"/ HTTP/1.1"
"v=2&text=%s"
utf-8
"<p class=\"large align-left box\">\\(\\(.\\|\n\\)*?\\)</p>")
("tatoeba.org_furigana"
"tatoeba.org"
"/eng/tools/romaji_furigana?query=%s&type=furigana HTTP/1.1"
nil
utf-8
"class=\"furigana\">\\(\\(.\\|\n\\)*?\\)</div><form id=\"ToolRomajiFuriganaForm")
("tatoeba.org_romaji"
"tatoeba.org"
"/eng/tools/romaji_furigana?query=%s&type=romaji HTTP/1.1"
nil
utf-8
"class=\"furigana\">\\(\\(.\\|\n\\)*?\\)</div><form id=\"ToolRomajiFuriganaForm")
("traduku.net_eoen"
"traduku.net"
"/cgi-bin/traduku HTTP/1.0"
"eo_en&t=%s"
utf-8
" id=\"rezulto\">\\(\\(.\\|\n\\)*?\\)</div>")
("traduku.net_eneo"
"traduku.net"
"/cgi-bin/traduku HTTP/1.0"
"en_eo_trukilo&t=%s"
utf-8
" id=\"rezulto\">\\(\\(.\\|\n\\)*?\\)</div>"))
"*The alist where setting of the site which is used for text translation is
described. To update site-data, evalute `text-translator-site-data-init`."
:type '(repeat
(list :tag "Web Site"
(string :tag "Web site name and translation type")
(string :tag "Host name")
(string :tag "POST path and HTTP version")
(string :tag "POST contents")
(symbol :tag "Character code")
(choice (string :tag "regexp") (symbol :tag "function"))))
:group 'text-translator)
(defvar text-translator-site-data-alist nil
"The alist where setting of the site which is used for text translation is
described.")
(defcustom text-translator-default-engine "google.com_enja"
"*Translation engine used by default."
:type (cons 'radio
(mapcar
(lambda (x)
(list 'const (car x)))
text-translator-site-data-alist))
:group 'text-translator)
(defcustom text-translator-user-agent
"Mozilla/5.0 (Windows; U; Windows NT 5.0; ja; rv:1.9) Gecko/2008052906 Firefox/3.0"
"*text-translator's User Agent. Default is Firefox."
:type 'string
:group 'text-translator)
(defcustom text-translator-mode-hook nil
"*Hook run at the end of function `text-translator-mode'."
:type 'hook
:group 'text-translator)
(defcustom text-translator-auto-selection-func nil
"*Value is function that select translation engine automatic.
this value is function for `text-translator-translate-by-auto-selection'."
:type 'symbol
:group 'text-translator)
(defcustom text-translator-display-popup nil
"*Non-nil means translated message is displayed by using popup-tip.
To use this option, you have to require popup.el.
popup.el URL: http://github.com/m2ym/auto-complete"
:type 'symbol
:group 'text-translator)
(defcustom text-translator-do-fill-region nil
"*Default is nil. if value is non-nil, it deletes
linefeed\\(and CR\\) from pre translation string(\"\\n\" -> \" \",
\"\r\" -> \"\"). and processing to straighten faces with
fill-paragraph after the translation. it is countermeasure
against the translation engines that processes per line."
:type 'symbol
:group 'text-translator)
(defcustom text-translator-space-division-languages
'("en" "es" "fr" "de" "it" "pt" "ru" "nl" "el" "no")
"*List of language that word is delimited by blank."
:type '(repeat (string :tag "language(2char)"))
:group 'text-translator)
(defvar text-translator-last-string ""
"The last time, character string which was thrown to the translation site.")
(defvar text-translator-engine-history nil
"The history of translation engine which you used.")
(defvar text-translator-search-regexp-or-func nil)
(defvar text-translator-sitedata-hash nil)
(provide 'text-translator-vars)