summaryrefslogtreecommitdiff
path: root/utils.go
diff options
context:
space:
mode:
authorKurenai <[email protected]>2021-10-14 20:15:15 +0800
committerKurenai <[email protected]>2021-10-14 20:15:15 +0800
commit6ed59f73a2f6a53246ff29fdca0a73f3208352f8 (patch)
tree88831f74800a25727d4683191b8ddfc2026ef1a1 /utils.go
parentafdf70773acc30668fbcee62eb9d663fef54365d (diff)
Upgrade to 3.0.1
- 脱离对C#版本AssFontSubset的依赖 - 增加-a选项,可重复使用以代替AssFontSubset原有的功能 - 修正替换字体名称的正则表达式
Diffstat (limited to 'utils.go')
-rw-r--r--utils.go68
1 files changed, 46 insertions, 22 deletions
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
+}