chore: seperate large files
This commit is contained in:
parent
ebbf516689
commit
76e1298ded
44 changed files with 5745 additions and 4173 deletions
98
internal/format/ass/utils.go
Normal file
98
internal/format/ass/utils.go
Normal file
|
@ -0,0 +1,98 @@
|
|||
package ass
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"sub-cli/internal/model"
|
||||
)
|
||||
|
||||
// parseFormatLine 解析格式行中的各个字段
|
||||
func parseFormatLine(formatStr string) []string {
|
||||
fields := strings.Split(formatStr, ",")
|
||||
result := make([]string, 0, len(fields))
|
||||
|
||||
for _, field := range fields {
|
||||
result = append(result, strings.TrimSpace(field))
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// parseStyleLine 解析样式行
|
||||
func parseStyleLine(line string) []string {
|
||||
// 去掉"Style:"前缀
|
||||
styleStr := strings.TrimPrefix(line, "Style:")
|
||||
return splitCSV(styleStr)
|
||||
}
|
||||
|
||||
// parseEventLine 解析事件行
|
||||
func parseEventLine(line string) []string {
|
||||
return splitCSV(line)
|
||||
}
|
||||
|
||||
// splitCSV 拆分CSV格式的字符串,但保留Text字段中的逗号
|
||||
func splitCSV(line string) []string {
|
||||
var result []string
|
||||
inText := false
|
||||
current := ""
|
||||
|
||||
for _, char := range line {
|
||||
if char == ',' && !inText {
|
||||
result = append(result, strings.TrimSpace(current))
|
||||
current = ""
|
||||
} else {
|
||||
current += string(char)
|
||||
// 这是个简化处理,实际ASS格式更复杂
|
||||
// 当处理到足够数量的字段后,剩余部分都当作Text字段
|
||||
if len(result) >= 9 {
|
||||
inText = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if current != "" {
|
||||
result = append(result, strings.TrimSpace(current))
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
// parseASSTimestamp 解析ASS格式的时间戳 (h:mm:ss.cc)
|
||||
func parseASSTimestamp(timeStr string) model.Timestamp {
|
||||
// 匹配 h:mm:ss.cc 格式
|
||||
re := regexp.MustCompile(`(\d+):(\d+):(\d+)\.(\d+)`)
|
||||
matches := re.FindStringSubmatch(timeStr)
|
||||
|
||||
if len(matches) == 5 {
|
||||
hours, _ := strconv.Atoi(matches[1])
|
||||
minutes, _ := strconv.Atoi(matches[2])
|
||||
seconds, _ := strconv.Atoi(matches[3])
|
||||
// ASS使用厘秒(1/100秒),需要转换为毫秒
|
||||
centiseconds, _ := strconv.Atoi(matches[4])
|
||||
milliseconds := centiseconds * 10
|
||||
|
||||
return model.Timestamp{
|
||||
Hours: hours,
|
||||
Minutes: minutes,
|
||||
Seconds: seconds,
|
||||
Milliseconds: milliseconds,
|
||||
}
|
||||
}
|
||||
|
||||
// 返回零时间戳,如果解析失败
|
||||
return model.Timestamp{}
|
||||
}
|
||||
|
||||
// formatASSTimestamp 格式化为ASS格式的时间戳 (h:mm:ss.cc)
|
||||
func formatASSTimestamp(timestamp model.Timestamp) string {
|
||||
// ASS使用厘秒(1/100秒)
|
||||
centiseconds := timestamp.Milliseconds / 10
|
||||
return fmt.Sprintf("%d:%02d:%02d.%02d",
|
||||
timestamp.Hours,
|
||||
timestamp.Minutes,
|
||||
timestamp.Seconds,
|
||||
centiseconds)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue