Skip to content

Instantly share code, notes, and snippets.

@yoshitsugu
Created August 5, 2015 23:39
Show Gist options
  • Save yoshitsugu/1fb95b7f1b8729929300 to your computer and use it in GitHub Desktop.
Save yoshitsugu/1fb95b7f1b8729929300 to your computer and use it in GitHub Desktop.
// See http://sleepboy-zzz.blogspot.jp/2014/12/emacsgoogleskk_29.html
package main
import (
"golang.org/x/text/encoding/japanese"
"golang.org/x/text/transform"
"encoding/json"
"github.com/akiym/go-skkserv"
"net/http"
"net/url"
"strings"
"io/ioutil"
)
type GoogleIMESKK struct{}
func (s *GoogleIMESKK) Request(text string) ([]string, error) {
words, err := Transliterate(text)
if err != nil {
return nil, err
}
return words, nil
}
func Transliterate(text_src string) (words []string, err error) {
iostr := strings.NewReader(text_src)
ret, err := ioutil.ReadAll(transform.NewReader(iostr, japanese.EUCJP.NewDecoder()))
text := string(ret)
if err != nil {
return words, err
}
v := url.Values{"langpair": {"ja-Hira|ja"}, "text": {text + ","}}
resp, err := http.Get("http://www.google.com/transliterate?" + v.Encode())
if err != nil {
return nil, err
}
defer resp.Body.Close()
dec := json.NewDecoder(resp.Body)
var w [][]interface{}
if err := dec.Decode(&w); err != nil {
return nil, err
}
for _, v := range w[0][1].([]interface{}) {
word := v.(string)
wordio, err := ioutil.ReadAll(transform.NewReader(strings.NewReader(word), japanese.EUCJP.NewEncoder()))
result := string(wordio)
if err != nil {
return words, err
}
words = append(words, result)
}
return words, nil
}
func main() {
var server = skkserv.NewServer(":55100", &GoogleIMESKK{})
server.Run()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment