From 6ed59f73a2f6a53246ff29fdca0a73f3208352f8 Mon Sep 17 00:00:00 2001 From: Kurenai Date: Thu, 14 Oct 2021 20:15:15 +0800 Subject: Upgrade to 3.0.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 脱离对C#版本AssFontSubset的依赖 - 增加-a选项,可重复使用以代替AssFontSubset原有的功能 - 修正替换字体名称的正则表达式 --- utils.go | 68 +++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 22 deletions(-) (limited to 'utils.go') diff --git a/utils.go b/utils.go index 9cfded1..d274a60 100644 --- a/utils.go +++ b/utils.go @@ -4,13 +4,14 @@ import ( "errors" "fmt" "io" + "math/rand" "os" "os/exec" + "path" "path/filepath" "regexp" "strings" - "syscall" - "unsafe" + "time" ) func newProcess(stdin io.Reader, stdout, stderr io.Writer, dir, prog string, args ...string) (p *os.Process, err error) { @@ -34,20 +35,6 @@ func newProcess(stdin io.Reader, stdout, stderr io.Writer, dir, prog string, arg return } -func setWindowTitle(title string) { - kernel32, err := syscall.LoadLibrary("kernel32.dll") - if err == nil { - defer syscall.FreeLibrary(kernel32) - setConsoleTitle, err := syscall.GetProcAddress(kernel32, "SetConsoleTitleW") - if err == nil { - ptr, err := syscall.UTF16PtrFromString(title) - if err == nil { - syscall.Syscall(setConsoleTitle, 1, uintptr(unsafe.Pointer(ptr)), 0, 0) - } - } - } -} - func newDir(path string) error { return os.MkdirAll(path, os.ModePerm) } @@ -127,13 +114,13 @@ func newFile(fp string) (file *os.File, err error) { return } -func openFile(filepath string, readOnly bool) (file *os.File, err error) { - f := os.O_RDWR +func openFile(filepath string, readOnly, create bool) (file *os.File, err error) { + f := os.O_RDWR | os.O_CREATE if readOnly { f = os.O_RDONLY } file, err = os.OpenFile(filepath, f, os.ModePerm) - if err != nil { + if err != nil && create { file, err = newFile(filepath) } return @@ -149,14 +136,14 @@ func copyFile(src, dst string) error { } if _, n, _, _ := splitPath(dst); n == "" { _, n, _, _ = splitPath(src) - dst = fmt.Sprintf("%s/%s", dst, n) + dst = path.Join(dst, n) } - sf, err := openFile(src, true) + sf, err := openFile(src, true, false) if err != nil { return err } defer sf.Close() - df, err := openFile(dst, false) + df, err := openFile(dst, false, true) if err != nil { return err } @@ -195,3 +182,40 @@ func copyFileOrDir(src, dst string) error { } return copyFolder(src, dst) } + +func randomStr(l int) string { + str := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" + bytes := []byte(str) + var result []byte + lstr := len(str) - 1 + for i := 0; i < l; i++ { + n := randomNumber(0, lstr) + result = append(result, bytes[n]) + } + return string(result) +} + +var r = rand.New(rand.NewSource(time.Now().UnixNano())) + +func randomN(n int) int { + return r.Intn(n) +} + +func randomNumber(min, max int) int { + sub := max - min + 1 + if sub <= 1 { + return min + } + return min + randomN(sub) +} + +var reg, _ = regexp.Compile(`[\*\.\?\+\$\^\[\]\(\)\{\}\|\\\/]`) + +func regEx(str string) string { + return reg.ReplaceAllString(str, `\$0`) +} + +func findFonts(dir string) []string { + list, _ := findPath(dir, `\.((ttf)|(otf)|(ttc)|(fon))$`) + return list +} -- cgit v1.2.1