fix script matching bug.

This commit is contained in:
fiatjaf
2023-12-25 22:52:05 -03:00
parent a7b56f046b
commit 1044c31900

View File

@@ -18,11 +18,12 @@ import (
"github.com/pemistahl/lingua-go" "github.com/pemistahl/lingua-go"
) )
const nSupportedScripts = 11 const nSupportedScripts = 12
var ( var (
supportedScripts = [nSupportedScripts]language.Script{ supportedScripts = [nSupportedScripts]language.Script{
language.Unknown, language.Unknown,
language.Latin,
language.Hiragana, language.Hiragana,
language.Katakana, language.Katakana,
language.Hebrew, language.Hebrew,
@@ -62,8 +63,8 @@ func initializeImageDrawingStuff() error {
).WithLowAccuracyMode().Build() ).WithLowAccuracyMode().Build()
// script detector material // script detector material
for ssi, script := range supportedScripts {
for _, srange := range language.ScriptRanges { for _, srange := range language.ScriptRanges {
for ssi, script := range supportedScripts {
if srange.Script == script { if srange.Script == script {
scriptRanges = append(scriptRanges, ScriptRange{ scriptRanges = append(scriptRanges, ScriptRange{
Start: srange.Start, Start: srange.Start,
@@ -86,16 +87,17 @@ func initializeImageDrawingStuff() error {
return face return face
} }
fontMap[0] = loadFont("fonts/NotoSans.ttf") fontMap[0] = loadFont("fonts/NotoSans.ttf")
fontMap[1] = loadFont("fonts/NotoSansJP.ttf") fontMap[1] = fontMap[0]
fontMap[2] = fontMap[1] fontMap[2] = loadFont("fonts/NotoSansJP.ttf")
fontMap[3] = loadFont("fonts/NotoSansHebrew.ttf") fontMap[3] = fontMap[1]
fontMap[4] = loadFont("fonts/NotoSansThai.ttf") fontMap[4] = loadFont("fonts/NotoSansHebrew.ttf")
fontMap[5] = loadFont("fonts/NotoSansArabic.ttf") fontMap[5] = loadFont("fonts/NotoSansThai.ttf")
fontMap[6] = loadFont("fonts/NotoSansDevanagari.ttf") fontMap[6] = loadFont("fonts/NotoSansArabic.ttf")
fontMap[7] = loadFont("fonts/NotoSansBengali.ttf") fontMap[7] = loadFont("fonts/NotoSansDevanagari.ttf")
fontMap[8] = loadFont("fonts/NotoSansJavanese.ttf") fontMap[8] = loadFont("fonts/NotoSansBengali.ttf")
fontMap[9] = loadFont("fonts/NotoSansSC.ttf") fontMap[9] = loadFont("fonts/NotoSansJavanese.ttf")
fontMap[10] = loadFont("fonts/NotoSansKR.ttf") fontMap[10] = loadFont("fonts/NotoSansSC.ttf")
fontMap[11] = loadFont("fonts/NotoSansKR.ttf")
emojiFont = loadFont("fonts/NotoEmoji.ttf") emojiFont = loadFont("fonts/NotoEmoji.ttf")
return nil return nil
@@ -167,7 +169,7 @@ func getLanguageAndScriptAndDirectionAndFont(paragraph []rune) (
for l := 0; l < nLetters; l++ { for l := 0; l < nLetters; l++ {
idx := lookupScript(paragraph[l]) idx := lookupScript(paragraph[l])
ranking[idx]++ ranking[idx]++
if l > threshold && ranking[idx] > threshold { if idx > 0 && l > threshold && ranking[idx] > threshold {
script = supportedScripts[idx] script = supportedScripts[idx]
face = fontMap[idx] face = fontMap[idx]
goto gotScript goto gotScript
@@ -249,7 +251,7 @@ func lookupScript(r rune) int {
} else if entry.End < r { } else if entry.End < r {
i = h + 1 i = h + 1
} else { } else {
return h // position in supportedScripts return entry.Pos // position in supportedScripts
} }
} }
return 0 // unknown return 0 // unknown