package util import ( e "codeberg.org/pebbe/errors" "fmt" "os" "path/filepath" "regexp" "strings" ) var ( p = e.PanicErr reEOL = regexp.MustCompile(`[.!?]['"”’]?$`) reNEOL = regexp.MustCompile(`[.!?]['"”’]?\p{Lu}\p{Ll}`) reLET = regexp.MustCompile(`\p{Lu}`) ) func AddEnd(s string) string { s = strings.TrimSpace(s) if s == "" { return "" } if reEOL.MatchString(s) { return s + "\n" } return s + ".\n" } func FixSpace(s string) string { s = strings.Join(strings.Fields(s), " ") s = reNEOL.ReplaceAllStringFunc(s, func(s1 string) string { i := reLET.FindStringIndex(s1)[0] return s1[:i] + " " + s1[i:] }) return s } func MkLock(filename string) { pid := os.Getpid() link := fmt.Sprintf("%s.%d", filepath.Base(filename), pid) p(os.Symlink(link, filename)) name, err := os.Readlink(filename) p(err) if name != link { p(fmt.Errorf("wrong lock name %q, should be %q", name, link)) } }