summaryrefslogtreecommitdiff
path: root/mkvlib
diff options
context:
space:
mode:
authorb5f0d6c3 <[email protected]>2022-04-26 10:59:55 +0800
committerb5f0d6c3 <[email protected]>2022-04-26 10:59:55 +0800
commita982fa157a2856c64aed8fefddc8c70e377940d2 (patch)
tree801e8b2cb8d3916fc8d8d5f4c67fabf2d8b84d21 /mkvlib
parent5c0de6e314e61cdb70e932e7d680fae9ab982859 (diff)
update mkvlib:support font fallback
Diffstat (limited to 'mkvlib')
-rw-r--r--mkvlib/ass.go59
-rw-r--r--mkvlib/shared.go2
2 files changed, 43 insertions, 18 deletions
diff --git a/mkvlib/ass.go b/mkvlib/ass.go
index 93955b1..073fb41 100644
--- a/mkvlib/ass.go
+++ b/mkvlib/ass.go
@@ -335,15 +335,28 @@ func (self *assProcessor) matchFonts() bool {
}
self.fg = make(map[string]string)
reg, _ := regexp.Compile(`_(\d+)\.ttx$`)
+ m := make(map[string]map[string][]map[string]bool)
for font, ttxs := range self._m {
- m := self.getFontsName(ttxs)
- if len(m) > 0 {
- for k, _ := range self.m {
- _k := strings.Split(k, "^")
- for __k, v := range m {
- if v[0][_k[0]] && v[1][_k[1]] {
- self.m[k].file = font
- self.m[k].index = reg.FindStringSubmatch(__k)[1]
+ _m := self.getFontsName(ttxs)
+ if len(_m) > 0 {
+ m[font] = _m
+ }
+ }
+ w := func(fb bool) {
+ for k, _ := range self.m {
+ _k := strings.Split(k, "^")
+ if self.m[k].file != "" || (fb && _k[1] == "Regular") {
+ continue
+ }
+ if fb {
+ printLog(self.lcb, `Font fallback:[%s^%s] -> [%s^Regular]`, _k[0], _k[1], _k[0])
+ _k[1] = "Regular"
+ }
+ for __k, v := range m {
+ for ___k, _v := range v {
+ if _v[0][_k[0]] && _v[1][_k[1]] {
+ self.m[k].file = __k
+ self.m[k].index = reg.FindStringSubmatch(___k)[1]
n := self.fg[_k[0]]
if n == "" {
n = randomStr(8)
@@ -353,19 +366,31 @@ func (self *assProcessor) matchFonts() bool {
break
}
}
+ if self.m[k].file != "" {
+ break
+ }
+ }
+ if self.m[k].file != "" {
+ continue
+ }
+ if f, i := self.matchCache(fmt.Sprintf("%s^%s", _k[0], _k[1])); f != "" {
+ self.m[k].file, self.m[k].index = f, i
+ n := self.fg[_k[0]]
+ if n == "" {
+ n = randomStr(8)
+ self.fg[_k[0]] = n
+ }
+ self.m[k].newName = n
}
}
}
+ w(false)
+ w(true)
ok := true
- for k, v := range self.m {
- if v.file == "" {
- if f, i := self.matchCache(k); f != "" {
- self.m[k].file, self.m[k].index = f, i
- self.m[k].newName = randomStr(8)
- } else {
- ok = false
- printLog(self.lcb, `Missing the font: "%s".`, k)
- }
+ for k, _ := range self.m {
+ if self.m[k].file == "" {
+ ok = false
+ printLog(self.lcb, `Missing the font: "%s".`, k)
}
}
return ok
diff --git a/mkvlib/shared.go b/mkvlib/shared.go
index 8f95c61..dec389f 100644
--- a/mkvlib/shared.go
+++ b/mkvlib/shared.go
@@ -11,7 +11,7 @@ import (
)
const libName = "mkvlib"
-const libVer = "v1.4.2"
+const libVer = "v1.4.3"
const LibFName = libName + " " + libVer