summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorac79b0c6 <[email protected]>2022-05-12 14:16:47 +0800
committerac79b0c6 <[email protected]>2022-05-12 14:16:47 +0800
commit5ed63f9a14320665dd5c4e945403a76457a65313 (patch)
tree08837f6ba3560ac3f956ab65550270bb30402342
parentb5244b304b1a06b2ea8b9de1e159ae70cd63930b (diff)
update mkvlib:add list missing fonts
-rw-r--r--mkvlib/ass.go16
-rw-r--r--mkvlib/c/README.md7
-rw-r--r--mkvlib/c/exports.go4
-rw-r--r--mkvlib/c/sdk.cs8
-rw-r--r--mkvlib/c/sdk.py4
-rw-r--r--mkvlib/mkv.go7
-rw-r--r--mkvlib/shared.go2
7 files changed, 28 insertions, 20 deletions
diff --git a/mkvlib/ass.go b/mkvlib/ass.go
index dc58d4f..ae54e12 100644
--- a/mkvlib/ass.go
+++ b/mkvlib/ass.go
@@ -208,12 +208,16 @@ func (self *assProcessor) parse() bool {
return ec == 0
}
-func (self *assProcessor) getFontsList() []string {
+func (self *assProcessor) getFontsList() [][]string {
list := make([]string, 0)
for k, _ := range self.m {
list = append(list, k)
}
- return list
+ list2 := make([]string, 0)
+ if self.check {
+ list2 = self.matchFonts()
+ }
+ return [][]string{list, list2}
}
func (self *assProcessor) dumpFont(file, out string) bool {
@@ -403,7 +407,7 @@ func (self *assProcessor) checkFontMissing(f *fontInfo, i int, c bool) bool {
return _str == "" && len(_runes) == 0
}
-func (self *assProcessor) matchFonts() bool {
+func (self *assProcessor) matchFonts() []string {
self.fg = make(map[string]string)
fonts := findFonts(self._fonts)
m := self.getFontsName(fonts)
@@ -460,14 +464,14 @@ func (self *assProcessor) matchFonts() bool {
}
w(false)
w(true)
- ok := true
+ el := make([]string, 0)
for k, _ := range self.m {
if self.m[k].file == "" {
- ok = false
+ el = append(el, k)
printLog(self.lcb, `Missing the font: "%s".`, k)
}
}
- return ok
+ return el
}
func (self *assProcessor) fontNameToMap(m []map[string]bool) map[string]map[string]bool {
diff --git a/mkvlib/c/README.md b/mkvlib/c/README.md
index 79d7b97..7ac28dd 100644
--- a/mkvlib/c/README.md
+++ b/mkvlib/c/README.md
@@ -195,10 +195,11 @@
//return: 是否全程无错
```
- ```c
- char* GetFontsList(char* files, logCallback lcb);
- //取得数组内字幕需要的全部字体
+ char* GetFontsList(char* files, char* fonts, logCallback lcb);
+ //取得数组内字幕需要的全部字体,如果设置了Check则会试图匹配字体,并输出匹配失败的列表.
//files: 字幕文件路径的json的数组
- //return: json格式的数组
+ //fonts: 字体文件夹路径
+ //return: json格式的二维数组(第一个成员是需要的字体名称,第二个成员是没有匹配成功的字体名称.)
```
- ```c
void NRename(bool n);
diff --git a/mkvlib/c/exports.go b/mkvlib/c/exports.go
index b24b345..f1537e3 100644
--- a/mkvlib/c/exports.go
+++ b/mkvlib/c/exports.go
@@ -132,14 +132,14 @@ func A2P(a2p, apc bool, pr, pf *C.char) {
}
//export GetFontsList
-func GetFontsList(files *C.char, lcb C.logCallback) *C.char {
+func GetFontsList(files, fonts *C.char, lcb C.logCallback) *C.char {
if !checkInstance() {
return cs("")
}
obj := make([]string, 0)
if json.Unmarshal([]byte(gs(files)), &obj) == nil {
_files := obj
- list := getter.GetProcessorInstance().GetFontsList(_files, _lcb(lcb))
+ list := getter.GetProcessorInstance().GetFontsList(_files, gs(fonts), _lcb(lcb))
data, _ := json.Marshal(list)
return cs(string(data))
}
diff --git a/mkvlib/c/sdk.cs b/mkvlib/c/sdk.cs
index 50be1e8..379396b 100644
--- a/mkvlib/c/sdk.cs
+++ b/mkvlib/c/sdk.cs
@@ -50,7 +50,7 @@ public static class mkvlib
static extern void A2P(bool a2p, bool apc, IntPtr pr, IntPtr pf);
[DllImport("mkvlib.so")]
- static extern IntPtr GetFontsList(IntPtr files, logCallback lcb);
+ static extern IntPtr GetFontsList(IntPtr files, IntPtr fonts, logCallback lcb);
[DllImport("mkvlib.so")]
static extern void Cache(IntPtr ccs);
@@ -155,11 +155,11 @@ public static class mkvlib
A2P(a2p, apc, cs(pr), cs(pf));
}
- public static string[] GetFontsList(string[] files, Action<string> lcb)
+ public static string[][] GetFontsList(string[] files, string fonts, Action<string> lcb)
{
string _files = JsonSerializer.Serialize<string[]>(files);
- string result = css(GetFontsList(cs(_files), _lcb(lcb)));
- return JsonSerializer.Deserialize<string[]>(result);
+ string result = css(GetFontsList(cs(_files), cs(fonts), _lcb(lcb)));
+ return JsonSerializer.Deserialize<string[][]>(result);
}
public static void Cache(string[] ccs)
diff --git a/mkvlib/c/sdk.py b/mkvlib/c/sdk.py
index 0e83fdd..73de70d 100644
--- a/mkvlib/c/sdk.py
+++ b/mkvlib/c/sdk.py
@@ -90,11 +90,11 @@ def a2p(en, apc, pr, pf):
call(en, apc, pr.encode(), pf.encode())
-def getFontsList(files, lcb):
+def getFontsList(files, fonts, lcb):
call = lib.GetFontsList
call.restype = c_char_p
_files = dumps(files)
- return loads(call(_files.encode(), lcb).decode())
+ return loads(call(_files.encode(), fonts.encode(), lcb).decode())
def cache(ccs):
diff --git a/mkvlib/mkv.go b/mkvlib/mkv.go
index ca6a083..d10ece9 100644
--- a/mkvlib/mkv.go
+++ b/mkvlib/mkv.go
@@ -331,7 +331,7 @@ func (self *mkvProcessor) ASSFontSubset(files []string, fonts, output string, di
}
obj.fonts = findFonts(obj._fonts)
obj.loadCache(self.caches)
- r := obj.parse() && obj.matchFonts() && obj.createFontsSubset() && obj.changeFontsName() && obj.replaceFontNameInAss()
+ r := obj.parse() && len(obj.matchFonts()) == 0 && obj.createFontsSubset() && obj.changeFontsName() && obj.replaceFontNameInAss()
if !r {
_ = os.RemoveAll(obj.output)
}
@@ -355,11 +355,14 @@ func (self *mkvProcessor) ass2Pgs(input []string, resolution, frameRate, fontsDi
return self.a2p && ass2Pgs(input, resolution, frameRate, fontsDir, output, lcb)
}
-func (self *mkvProcessor) GetFontsList(files []string, lcb logCallback) []string {
+func (self *mkvProcessor) GetFontsList(files []string, fonts string, lcb logCallback) [][]string {
if len(files) > 0 {
obj := new(assProcessor)
obj.files = files
obj.lcb = lcb
+ obj._fonts = fonts
+ obj.check = self.check
+ obj.loadCache(self.caches)
if obj.parse() {
return obj.getFontsList()
}
diff --git a/mkvlib/shared.go b/mkvlib/shared.go
index 807936c..f924f83 100644
--- a/mkvlib/shared.go
+++ b/mkvlib/shared.go
@@ -11,7 +11,7 @@ import (
)
const libName = "mkvlib"
-const libVer = "v2.0.0"
+const libVer = "v2.0.1"
const LibFName = libName + " " + libVer