mirror of
https://github.com/hrfee/jfa-go.git
synced 2024-11-16 15:20:11 +00:00
89 lines
1.9 KiB
Go
89 lines
1.9 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"bytes"
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
/* Adds start/stop/systemd to help message, and
|
||
|
also gets rid of usage for shorthand flags, and merge them with the full-length one.
|
||
|
implementation is 🤢, will clean this up eventually.
|
||
|
-h SHORTHAND
|
||
|
-help
|
||
|
prints this message.
|
||
|
becomes:
|
||
|
-help, -h
|
||
|
prints this message.
|
||
|
*/
|
||
|
func helpFunc() {
|
||
|
fmt.Fprint(os.Stderr, `Usage of jfa-go:
|
||
|
start
|
||
|
start jfa-go as a daemon and run in the background.
|
||
|
stop
|
||
|
stop a daemonized instance of jfa-go.
|
||
|
systemd
|
||
|
generate a systemd .service file.
|
||
|
`)
|
||
|
shortHands := []string{"-help", "-data", "-config", "-port"}
|
||
|
var b bytes.Buffer
|
||
|
// Write defaults into buffer then remove any shorthands
|
||
|
flag.CommandLine.SetOutput(&b)
|
||
|
flag.PrintDefaults()
|
||
|
flag.CommandLine.SetOutput(os.Stderr)
|
||
|
scanner := bufio.NewScanner(&b)
|
||
|
out := ""
|
||
|
line := scanner.Text()
|
||
|
eof := !scanner.Scan()
|
||
|
lastLine := false
|
||
|
for !eof || lastLine {
|
||
|
nextline := scanner.Text()
|
||
|
start := 0
|
||
|
if len(nextline) != 0 {
|
||
|
for nextline[start] == ' ' && start < len(nextline) {
|
||
|
start++
|
||
|
}
|
||
|
}
|
||
|
if strings.Contains(line, "SHORTHAND") || (len(nextline) != 0 && strings.Contains(nextline, "SHORTHAND") && nextline[start] != '-') {
|
||
|
line = nextline
|
||
|
if lastLine {
|
||
|
break
|
||
|
}
|
||
|
eof := !scanner.Scan()
|
||
|
if eof {
|
||
|
lastLine = true
|
||
|
}
|
||
|
continue
|
||
|
}
|
||
|
// if !strings.Contains(line, "SHORTHAND") && !(strings.Contains(nextline, "SHORTHAND") && !strings.Contains(nextline, "-")) {
|
||
|
match := false
|
||
|
for i, c := range line {
|
||
|
if c != '-' {
|
||
|
continue
|
||
|
}
|
||
|
for _, s := range shortHands {
|
||
|
if i+len(s) <= len(line) && line[i:i+len(s)] == s {
|
||
|
out += line[:i+len(s)] + ", " + s[:2] + line[i+len(s):] + "\n"
|
||
|
match = true
|
||
|
break
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if !match {
|
||
|
out += line + "\n"
|
||
|
}
|
||
|
line = nextline
|
||
|
if lastLine {
|
||
|
break
|
||
|
}
|
||
|
eof := !scanner.Scan()
|
||
|
if eof {
|
||
|
lastLine = true
|
||
|
}
|
||
|
}
|
||
|
fmt.Fprint(os.Stderr, out)
|
||
|
}
|