48 lines
847 B
Go
48 lines
847 B
Go
|
package identify
|
||
|
|
||
|
import (
|
||
|
"os/exec"
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
|
||
|
type Indetification struct {
|
||
|
word string
|
||
|
Identifier func(*Indetification) (string, error)
|
||
|
}
|
||
|
|
||
|
func New(word string) Indetification {
|
||
|
return Indetification{
|
||
|
word: word,
|
||
|
Identifier: executeTransShell,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func executeTransShell(i *Indetification) (string, error) {
|
||
|
config := []string{
|
||
|
"-no-ansi",
|
||
|
"-id",
|
||
|
i.word,
|
||
|
}
|
||
|
outBytes, err := exec.Command("trans", config...).Output()
|
||
|
return string(outBytes), err
|
||
|
}
|
||
|
|
||
|
func (i Indetification) Identify() string {
|
||
|
output, err := i.Identifier(&i)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return parseTransIdentifyOutput(output)
|
||
|
}
|
||
|
|
||
|
func parseTransIdentifyOutput(out string) string {
|
||
|
re := regexp.MustCompile(`(?m)^Code\s+(\w+)$`)
|
||
|
result := ""
|
||
|
matches := re.FindStringSubmatch(out)
|
||
|
if (len(matches) >= 2) {
|
||
|
result = matches[1]
|
||
|
}
|
||
|
return result
|
||
|
}
|