mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 15:10:12 +01:00
🎨 Improve font loading https://github.com/siyuan-note/siyuan/issues/15879
Signed-off-by: Daniel <845765@qq.com>
This commit is contained in:
parent
ea781d30ed
commit
d372e871f4
1 changed files with 20 additions and 21 deletions
|
|
@ -103,10 +103,6 @@ func existFont(family string, fonts []*Font) bool {
|
||||||
func parseTTCFontFamily(fontPath string) (ret []string) {
|
func parseTTCFontFamily(fontPath string) (ret []string) {
|
||||||
defer logging.Recover()
|
defer logging.Recover()
|
||||||
|
|
||||||
if strings.Contains(fontPath, "Alibaba") {
|
|
||||||
logging.LogInfo(fontPath)
|
|
||||||
}
|
|
||||||
|
|
||||||
data, err := os.ReadFile(fontPath)
|
data, err := os.ReadFile(fontPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
//logging.LogErrorf("read font file [%s] failed: %s", fontPath, err)
|
//logging.LogErrorf("read font file [%s] failed: %s", fontPath, err)
|
||||||
|
|
@ -131,7 +127,7 @@ func parseTTCFontFamily(fontPath string) (ret []string) {
|
||||||
ret = append(ret, family)
|
ret = append(ret, family)
|
||||||
}
|
}
|
||||||
|
|
||||||
family, _ := font.Name(nil, ttc.NameIDFamily)
|
family, _ = font.Name(nil, ttc.NameIDFamily)
|
||||||
family = strings.TrimSpace(family)
|
family = strings.TrimSpace(family)
|
||||||
if "" != family && !strings.HasPrefix(family, ".") {
|
if "" != family && !strings.HasPrefix(family, ".") {
|
||||||
ret = append(ret, family)
|
ret = append(ret, family)
|
||||||
|
|
@ -162,35 +158,38 @@ func parseTTFFontFamily(fontPath string) (ret string) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if strings.Contains(fontPath, "04") {
|
||||||
|
logging.LogInfo(fontPath)
|
||||||
|
}
|
||||||
|
|
||||||
t, err := font.NameTable()
|
t, err := font.NameTable()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logging.LogErrorf("get font [%s] name table failed: %s", fontPath, err)
|
logging.LogErrorf("get font [%s] name table failed: %s", fontPath, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var family, subfamily string
|
||||||
for _, e := range t.List() {
|
for _, e := range t.List() {
|
||||||
if sfnt.NameFontFamily != e.NameID && sfnt.NamePreferredFamily != e.NameID {
|
if sfnt.NameFontFamily == e.NameID && (sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID) {
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
if sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID {
|
|
||||||
v, _, err := transform.Bytes(textUnicode.UTF16(textUnicode.BigEndian, textUnicode.IgnoreBOM).NewDecoder(), e.Value)
|
v, _, err := transform.Bytes(textUnicode.UTF16(textUnicode.BigEndian, textUnicode.IgnoreBOM).NewDecoder(), e.Value)
|
||||||
if err != nil {
|
if err == nil {
|
||||||
return ""
|
family = strings.TrimSpace(string(v))
|
||||||
}
|
}
|
||||||
val := string(v)
|
|
||||||
if sfnt.NameFontFamily == e.NameID && "" != val {
|
|
||||||
ret = val
|
|
||||||
}
|
}
|
||||||
if sfnt.NamePreferredFamily == e.NameID && "" != val {
|
if sfnt.NameFontSubfamily == e.NameID && (sfnt.PlatformLanguageID(1033) == e.LanguageID || sfnt.PlatformLanguageID(2052) == e.LanguageID) {
|
||||||
ret = val
|
v, _, err := transform.Bytes(textUnicode.UTF16(textUnicode.BigEndian, textUnicode.IgnoreBOM).NewDecoder(), e.Value)
|
||||||
|
if err == nil {
|
||||||
|
subfamily = strings.TrimSpace(string(v))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = strings.TrimSpace(ret)
|
if family != "" && !strings.HasPrefix(family, ".") {
|
||||||
if strings.HasPrefix(ret, ".") {
|
if subfamily != "" && !strings.Contains(subfamily, "<") && !strings.EqualFold(subfamily, "Regular") {
|
||||||
return ""
|
ret = family + " " + subfamily // 例如 "PingFang SC Bold"
|
||||||
|
} else {
|
||||||
|
ret = family
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue