水蛙神

git-svn-id: file:///srv/svn/repo/suwako/trunk@32 0b558ee1-521d-8b46-a41b-40029c97c055
This commit is contained in:
yakumo.izuru
2025-05-14 21:55:50 +00:00
parent 7d75398332
commit e74b8cce64
5 changed files with 37 additions and 43 deletions

View File

@@ -1,22 +1,25 @@
GO ?= go
GOFLAGS ?= -v
PREFIX ?= /usr/local PREFIX ?= /usr/local
BINDIR ?= ${PREFIX}/bin
MANDIR ?= ${PREFIX}/man
GOFLAGS ?= -v -ldflags "-w -X `go list`.Version=${VERSION} -X `go list`.Commit=${COMMIT} -X `go list`.Build=${BUILD}" -tags "static_build" all: build
BRANCH = `git rev-parse --abbrev-ref HEAD` build:
BUILD = `git show -s --pretty=format:%cI` ${GO} build ${GOFLAGS}
COMMIT = `git rev-parse --short HEAD || echo "$COMMIT"`
VERSION = `git describe --abbrev=0 --tags 2>/dev/null || echo "$VERSION"`
all: suwako
suwako:
go build ${GOFLAGS} ./cmd/suwako
clean: clean:
rm -f suwako rm -f suwako
install: pre-install:
install -Dm0755 suwako ${PREFIX}/bin/suwako mkdir -p ${DESTDIR}${BINDIR}
install -Dm0644 suwako.1 ${PREFIX}/share/man/man1/suwako.1 mkdir -p ${DESTDIR}${MANDIR}/man1
install -Dm0644 suwako.conf.5 ${PREFIX}/share/man/man5/suwako.conf.5 mkdir -p ${DESTDIR}${MANDIR}/man5
install: pre-install
install -m0755 suwako ${DESTDIR}${BINDIR}/suwako
install -m0644 suwako.1 ${DESTDIR}${MANDIR}/man1/suwako.1
install -m0644 suwako.conf.5 ${DESTDIR}${MANDIR}/man5/suwako.conf.5
uninstall: uninstall:
rm -f ${PREFIX}/bin/suwako rm -f ${DESTDIR}${BINDIR}/suwako
rm -f ${PREFIX}/share/man/man1/suwako.1 rm -f ${DESTDIR}${MANDIR}/man1/suwako.1
rm -f ${DESTDIR}${MANDIR}/man5/suwako.conf.5

View File

@@ -1,6 +1,5 @@
/* /*
Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev> Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
*/ */
package cmd package cmd
@@ -37,32 +36,24 @@ var rootCmd = &cobra.Command{
Short: "A client for SimplyTranslate with illusionary origins", Short: "A client for SimplyTranslate with illusionary origins",
Args: cobra.MinimumNArgs(1), Args: cobra.MinimumNArgs(1),
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
_split := fmt.Sprint(args) text_to_split := fmt.Sprint(args)
text := fmt.Sprint(strings.Trim(_split, "[]")) text := fmt.Sprint(strings.Trim(text_to_split, "[]"))
if len(output) == 0 {
log.Fatalf("\033[1;31m%s\033[0m\n", "No target language")
}
var translate Translate var translate Translate
encInput := url.PathEscape(text) encInput := url.PathEscape(text)
queryURL := conf.endpoint + "/api/translate" + "?engine=" + conf.engine + "&from=" + input + "&to=" + output + "&text=" + encInput queryURL := conf.endpoint + "/api/translate" + "?engine=" + conf.engine + "&from=" + input + "&to=" + output + "&text=" + encInput
resp, err := http.Get(queryURL) resp, err := http.Get(queryURL)
CheckErr(err) cobra.CheckErr(err)
defer resp.Body.Close() defer resp.Body.Close()
_ = json.NewDecoder(resp.Body).Decode(&translate) _ = json.NewDecoder(resp.Body).Decode(&translate)
CheckErr(err) cobra.CheckErr(err)
if len(translate.Output) == 0 { if len(translate.Output) == 0 {
log.Fatalf("\033[1;31m%s\033[0m\n", "There was no output, maybe the endpoint is down?") log.Fatalf("\033[1;31m%s\033[0m\n", "There was no output, maybe the endpoint is down?")
} else { } else {
fmt.Printf("%v\n", translate.Output) fmt.Printf("%v\n", translate.Output)
} }
}, },
Version: "3.0.0", Version: "3.0.1",
}
func CheckErr(err error) {
if err != nil {
log.Fatal(err)
}
} }
func Execute() { func Execute() {
err := rootCmd.Execute() err := rootCmd.Execute()
@@ -70,16 +61,15 @@ func Execute() {
os.Exit(1) os.Exit(1)
} }
} }
func init() { func init() {
cobra.OnInitialize(initConfig) cobra.OnInitialize(initConfig)
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $XDG_CONFIG_HOME/suwako.ini)") rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "config file (default is $XDG_CONFIG_HOME/suwako.ini)")
rootCmd.PersistentFlags().StringVarP(&input, "from", "f", "auto", "language to translate from (default is auto)") rootCmd.PersistentFlags().StringVarP(&input, "from", "f", "auto", "language to translate from")
rootCmd.PersistentFlags().StringVarP(&output, "to", "t", "", "target language") rootCmd.PersistentFlags().StringVarP(&output, "to", "t", "", "target language")
} }
func parseConfig(file string) error { func parseConfig(file string) error {
cfg, err := ini.Load(file) cfg, err := ini.Load(file)
CheckErr(err) cobra.CheckErr(err)
conf.endpoint = cfg.Section("suwako").Key("endpoint").String() conf.endpoint = cfg.Section("suwako").Key("endpoint").String()
conf.engine = cfg.Section("suwako").Key("engine").String() conf.engine = cfg.Section("suwako").Key("engine").String()
@@ -91,10 +81,9 @@ func initConfig() {
parseConfig(cfgFile) parseConfig(cfgFile)
} else { } else {
// Find home directory. xdg_config_home, err := os.UserConfigDir()
xdg, err := os.UserConfigDir() cobra.CheckErr(err)
CheckErr(err) defaultCfgPath := xdg_config_home + "/suwako.ini"
defaultCfgPath := xdg + "/suwako.ini"
parseConfig(defaultCfgPath) parseConfig(defaultCfgPath)
} }

2
go.mod
View File

@@ -1,4 +1,4 @@
module marisa.chaotic.ninja/suwako module mahou-no-mori.yakumo.dev/suwako
go 1.21.0 go 1.21.0

View File

@@ -1,10 +1,9 @@
/* /*
Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev> Copyright © 2025 Izuru Yakumo <eternal-servant@yakumo.dev>
*/ */
package main package main
import "marisa.chaotic.ninja/suwako/cmd" import "mahou-no-mori.yakumo.dev/suwako/cmd"
func main() { func main() {
cmd.Execute() cmd.Execute()

View File

@@ -11,8 +11,11 @@
.Ar input .Ar input
.Sh DESCRIPTION .Sh DESCRIPTION
Self-explanatory, besides, this was made as Self-explanatory, besides, this was made as
a rewrite from a shell script that had curl a rewrite from a shell script that had
and awk for dependencies. .Xr curl 1
and
.Xr awk 1
for dependencies.
It fully serves as a drop-in replacement. It fully serves as a drop-in replacement.
.Sh USAGE .Sh USAGE
.Bl -tag -width 11n -compact .Bl -tag -width 11n -compact