From 393aa5a4aa087de053b275f0f79f803f9dec2108 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Tue, 24 Dec 2024 16:00:55 +0100 Subject: [PATCH 01/14] [fontscan] introduce family substitution importance; also upgrade substitutions table from upstream fontconfig --- fontscan/scan_test.go | 4 +- fontscan/substitutions.go | 102 ++- fontscan/substitutions_table.go | 1047 +++++++++++++++++++++++++++---- fontscan/substitutions_test.go | 303 +++++---- 4 files changed, 1206 insertions(+), 250 deletions(-) diff --git a/fontscan/scan_test.go b/fontscan/scan_test.go index bed38dbb..afce5cc3 100644 --- a/fontscan/scan_test.go +++ b/fontscan/scan_test.go @@ -30,12 +30,12 @@ func TestScanFontFootprints(t *testing.T) { tu.AssertNoErr(t, err) // Show some basic stats - families := familyCrible{} + families := map[string]bool{} for _, font := range fontset.flatten() { if font.Runes.Len() == 0 { t.Fatalf("unexpected empty rune coverage for %s", font.Location.File) } - families[font.Family] = 0 + families[font.Family] = true } fmt.Printf("Found %d fonts (%d families) in %s\n", diff --git a/fontscan/substitutions.go b/fontscan/substitutions.go index 200304c8..534b7fed 100644 --- a/fontscan/substitutions.go +++ b/fontscan/substitutions.go @@ -27,19 +27,24 @@ func init() { } } +type weightedFamily struct { + family string + strong bool // stronger then lang in match ? +} + // familyList is a list of normalized families to match, order // by user preference (first is best). // It also implements helpers to insert at the start, // the end and "around" an element -type familyList []string +type familyList []weightedFamily -// normalize the families +// normalize the families and add them with strong = true func newFamilyList(families []string) familyList { // we'll guess that we end up with about ~140 items - fl := make([]string, 0, 140) - fl = append(fl, families...) - for i, f := range fl { - fl[i] = font.NormalizeFamily(f) + fl := make([]weightedFamily, 0, 140) + fl = append(fl, make([]weightedFamily, len(families))...) + for i, f := range families { + fl[i] = weightedFamily{font.NormalizeFamily(f), true} } return fl } @@ -47,7 +52,7 @@ func newFamilyList(families []string) familyList { // returns the node equal to `family` or -1, if not found func (fl familyList) elementEquals(family string) int { for i, v := range fl { - if v == family { + if v.family == family { return i } } @@ -57,7 +62,7 @@ func (fl familyList) elementEquals(family string) int { // returns the first node containing `family` or -1, if not found func (fl familyList) elementContains(family string) int { for i, v := range fl { - if strings.Contains(v, family) { + if strings.Contains(v.family, family) { return i } } @@ -66,33 +71,50 @@ func (fl familyList) elementContains(family string) int { // return the crible corresponding to the order func (fl familyList) compileTo(dst familyCrible) { - for i, family := range fl { - if _, has := dst[family]; !has { // for duplicated entries, keep the first (best) score - dst[family] = i + for i, item := range fl { + current, has := dst[item.family] + if has { + // For duplicated families, keep the "best entry" + // (strong is better than weak, then lower index is better). + // The only replacement possible is if [current] is weak + // and [item] is strong + if !current.strong && item.strong { + dst[item.family] = scoreStrong{i, true} + } + } else { + dst[item.family] = scoreStrong{i, item.strong} } } } -func (fl *familyList) insertStart(families []string) { - *fl = insertAt(*fl, 0, families) +func withStrong(families []string, strong bool) familyList { + out := make(familyList, len(families)) + for i, f := range families { + out[i] = weightedFamily{f, strong} + } + return out +} + +func (fl *familyList) insertStart(families []string, strong bool) { + *fl = insertAt(*fl, 0, withStrong(families, strong)) } -func (fl *familyList) insertEnd(families []string) { - *fl = insertAt(*fl, len(*fl), families) +func (fl *familyList) insertEnd(families []string, strong bool) { + *fl = insertAt(*fl, len(*fl), withStrong(families, strong)) } // insertAfter inserts families right after element -func (fl *familyList) insertAfter(element int, families []string) { - *fl = insertAt(*fl, element+1, families) +func (fl *familyList) insertAfter(element int, families []string, strong bool) { + *fl = insertAt(*fl, element+1, withStrong(families, strong)) } // insertBefore inserts families right before element -func (fl *familyList) insertBefore(element int, families []string) { - *fl = insertAt(*fl, element, families) +func (fl *familyList) insertBefore(element int, families []string, strong bool) { + *fl = insertAt(*fl, element, withStrong(families, strong)) } -func (fl *familyList) replace(element int, families []string) { - *fl = replaceAt(*fl, element, element+1, families) +func (fl *familyList) replace(element int, families []string, strong bool) { + *fl = replaceAt(*fl, element, element+1, withStrong(families, strong)) } // ----- substitutions ------ @@ -146,7 +168,7 @@ type noGenericFamily struct{} func (noGenericFamily) test(list familyList) int { for _, v := range list { - switch v { + switch v.family { case "serif", "sans-serif", "monospace": return -1 } @@ -213,6 +235,11 @@ type substitution struct { test substitutionTest // the condition to apply additionalFamilies []string // the families to add op substitutionOp // how to insert the families + // how important is the family with respect to lang/script + // 'e' (equals) : same as the replacement + // 's' (strong) : stronger than the lang + // 'w' (weak) : weaker than the lang + importance byte } func (fl *familyList) execute(subs substitution) { @@ -221,25 +248,36 @@ func (fl *familyList) execute(subs substitution) { return } + // resolve importance + var strong bool + switch subs.importance { + case 'w': + strong = false + case 's': + strong = true + case 'e': // keep the same importance + strong = (*fl)[element].strong + } + switch subs.op { case opAppend: - fl.insertAfter(element, subs.additionalFamilies) + fl.insertAfter(element, subs.additionalFamilies, strong) case opAppendLast: - fl.insertEnd(subs.additionalFamilies) + fl.insertEnd(subs.additionalFamilies, strong) case opPrepend: - fl.insertBefore(element, subs.additionalFamilies) + fl.insertBefore(element, subs.additionalFamilies, strong) case opPrependFirst: - fl.insertStart(subs.additionalFamilies) + fl.insertStart(subs.additionalFamilies, strong) case opReplace: - fl.replace(element, subs.additionalFamilies) + fl.replace(element, subs.additionalFamilies, strong) default: panic("exhaustive switch") } } -// ----- []string manipulation ----- +// ----- list manipulation ----- -func insertAt(s []string, i int, v []string) []string { +func insertAt(s []weightedFamily, i int, v []weightedFamily) []weightedFamily { if len(v) == 0 { return s } @@ -248,7 +286,7 @@ func insertAt(s []string, i int, v []string) []string { } if len(s)+len(v) > cap(s) { // create a new slice with sufficient capacity - r := append(s[:i], make([]string, len(s)+len(v)-i)...) + r := append(s[:i], make([]weightedFamily, len(s)+len(v)-i)...) // copy the inserted values copy(r[i:], v) // copy rest of the items from source @@ -265,7 +303,7 @@ func insertAt(s []string, i int, v []string) []string { return s } -func replaceAt(s []string, i, j int, v []string) []string { +func replaceAt(s []weightedFamily, i, j int, v []weightedFamily) []weightedFamily { // just cutting if len(v) == 0 { return append(s[:i], s[j:]...) @@ -278,7 +316,7 @@ func replaceAt(s []string, i, j int, v []string) []string { tot := len(s) + len(v) - (j - i) if tot > cap(s) { // create a new slice with sufficient capacity - r := append(s[:i], make([]string, tot-i)...) + r := append(s[:i], make([]weightedFamily, tot-i)...) // copy the inserted values copy(r[i:], v) // add the tail from the source diff --git a/fontscan/substitutions_table.go b/fontscan/substitutions_table.go index 1d870cd9..bce06616 100644 --- a/fontscan/substitutions_table.go +++ b/fontscan/substitutions_table.go @@ -1,6 +1,8 @@ package fontscan -// Code generated by textlayout/fontconfig/cmd/generate_family_subs DO NOT EDIT. +import "github.com/go-text/typesetting/language" + +// Code generated by textprocessing/fontconfig/cmd/generate_family_subs DO NOT EDIT. var familySubstitution = []substitution{ // confs/30-0-google-crosextra-carlito-fontconfig.conf @@ -8,3527 +10,4360 @@ var familySubstitution = []substitution{ test: familyEquals("Calibri"), additionalFamilies: []string{"Carlito"}, op: opAppend, + importance: 'e', }, // confs/30-0-google-crosextra-carlito-fontconfig.conf { test: familyEquals("Carlito"), additionalFamilies: []string{"Calibri"}, op: opAppendLast, + importance: 'e', }, // confs/30-cjk-aliases.conf { test: familyEquals("Batang"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("바탕"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("BatangChe"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("바탕체"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Myeongjo"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("명조"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MyeongjoChe"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("명조체"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("AR MingtiM KSC"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Adobe 명조 Std M"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Adobe Myeongjo Std M"), additionalFamilies: []string{"Noto Serif CJK KR", "NanumMyeongjo", "UnBatang"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Gungsuh"), additionalFamilies: []string{"Noto Serif CJK KR", "UnGungseo", "NanumMyeongjo"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("궁서"), additionalFamilies: []string{"Noto Serif CJK KR", "UnGungseo", "NanumMyeongjo"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("GungsuhChe"), additionalFamilies: []string{"Noto Serif CJK KR", "UnGungseo", "NanumMyeongjo"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("궁서체"), additionalFamilies: []string{"Noto Serif CJK KR", "UnGungseo", "NanumMyeongjo"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Dotum"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("돋움"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Gothic"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("고딕"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Malgun Gothic"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("맑은 고딕"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Gulim"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("굴림"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("AppleGothic"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("애플고딕"), additionalFamilies: []string{"Noto Sans CJK KR", "NanumGothic", "UnDotum"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("DotumChe"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("돋움체"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("GothicChe"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("고딕체"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("GulimChe"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("굴림체"), additionalFamilies: []string{"Noto Sans Mono CJK KR", "NanumGothicCoding", "NanumGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS Gothic"), additionalFamilies: []string{"Noto Sans Mono CJK JP", "TakaoGothic", "IPAGothic", "IPAMonaGothic", "VL Gothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS ゴシック"), additionalFamilies: []string{"Noto Sans Mono CJK JP", "TakaoGothic", "IPAGothic", "IPAMonaGothic", "VL Gothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS PGothic"), additionalFamilies: []string{"Noto Sans CJK JP", "IPAMonaPGothic", "TakaoPGothic", "IPAPGothic", "VL PGothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS Pゴシック"), additionalFamilies: []string{"Noto Sans CJK JP", "IPAMonaPGothic", "TakaoPGothic", "IPAPGothic", "VL PGothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS UIGothic"), additionalFamilies: []string{"Noto Sans CJK JP", "IPAMonaPGothic", "TakaoPGothic", "IPAPGothic", "VL PGothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Meiryo UI"), additionalFamilies: []string{"Noto Sans CJK JP", "IPAMonaPGothic", "TakaoPGothic", "IPAPGothic", "VL PGothic", "Sazanami Gothic", "Kochi Gothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS Mincho"), additionalFamilies: []string{"Noto Serif CJK JP", "TakaoMincho", "IPAMincho", "IPAMonaMincho", "Sazanami Mincho", "Kochi Mincho"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS 明朝"), additionalFamilies: []string{"Noto Serif CJK JP", "TakaoMincho", "IPAMincho", "IPAMonaMincho", "Sazanami Mincho", "Kochi Mincho"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("AR MinchoL JIS"), additionalFamilies: []string{"Noto Serif CJK JP", "TakaoMincho", "IPAMincho", "IPAMonaMincho", "Sazanami Mincho", "Kochi Mincho"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS PMincho"), additionalFamilies: []string{"Noto Serif CJK JP", "IPAMonaPMincho", "TakaoPMincho", "IPAPMincho", "Sazanami Mincho", "Kochi Mincho"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MS P明朝"), additionalFamilies: []string{"Noto Serif CJK JP", "IPAMonaPMincho", "TakaoPMincho", "IPAPMincho", "Sazanami Mincho", "Kochi Mincho"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Meiryo"), additionalFamilies: []string{"IPAexGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("メイリオ"), additionalFamilies: []string{"IPAexGothic"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("SimSun"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("NSimSun"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("SimSun-18030"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("NSimSun-18030"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("宋体"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("新宋体"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("AR MingtiM GB"), additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("KaiTi"), additionalFamilies: []string{"Noto Serif CJK SC", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("楷体"), additionalFamilies: []string{"Noto Serif CJK SC", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Microsoft YaHei"), additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("微软雅黑"), additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MingLiU"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("細明體"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("PMingLiU"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("新細明體"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("AR MingtiM BIG-5"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("DFKai\\-SB"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UKai TW", "AR PL ZenKai Uni"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("標楷體"), additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UKai TW", "AR PL ZenKai Uni"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Microsoft JhengHei"), additionalFamilies: []string{"Noto Sans CJK TC", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("微軟正黑體"), additionalFamilies: []string{"Noto Sans CJK TC", "WenQuanYi Micro Hei", "WenQuanYi Zen Hei"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("Ming (for ISO10646)"), additionalFamilies: []string{"AR PL UMing HK"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("MingLiU_HKSCS"), additionalFamilies: []string{"AR PL UMing HK"}, op: opAppend, + importance: 'w', }, // confs/30-cjk-aliases.conf { test: familyEquals("細明體_HKSCS"), additionalFamilies: []string{"AR PL UMing HK"}, op: opAppend, + importance: 'w', + }, + // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) + { + test: familyEquals("Helvetica LT Std"), + additionalFamilies: []string{"Helvetica"}, + op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Sans L"), additionalFamilies: []string{"Helvetica"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Sans"), additionalFamilies: []string{"Helvetica"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Heros"), additionalFamilies: []string{"Helvetica"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Sans Narrow"), additionalFamilies: []string{"Helvetica Narrow"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Heros Cn"), additionalFamilies: []string{"Helvetica Narrow"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Roman No9 L"), additionalFamilies: []string{"Times"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Roman"), additionalFamilies: []string{"Times"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Termes"), additionalFamilies: []string{"Times"}, op: opAppendLast, + importance: 'e', + }, + // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) + { + test: familyEquals("Courier Std"), + additionalFamilies: []string{"Courier"}, + op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Mono L"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Mono"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Nimbus Mono PS"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Cursor"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Avant Garde"), additionalFamilies: []string{"ITC Avant Garde Gothic"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Gothic L"), additionalFamilies: []string{"ITC Avant Garde Gothic"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Gothic"), additionalFamilies: []string{"ITC Avant Garde Gothic"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Adventor"), additionalFamilies: []string{"ITC Avant Garde Gothic"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Bookman"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Bookman L"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Bookman URW"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Bookman"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Bonum"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Bookman Old Style"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Zapf Chancery"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Chancery L"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Chancery URW"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Z003"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Chorus"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("URW Palladio L"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Palladio URW"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("P052"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Pagella"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Palatino Linotype"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Century Schoolbook L"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Century SchoolBook URW"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("C059"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("TeX Gyre Schola"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Century Schoolbook"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Arimo"), additionalFamilies: []string{"Arial"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Liberation Sans"), additionalFamilies: []string{"Arial"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Liberation Sans Narrow"), additionalFamilies: []string{"Arial Narrow"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Albany"), additionalFamilies: []string{"Arial"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Albany AMT"), additionalFamilies: []string{"Arial"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Tinos"), additionalFamilies: []string{"Times New Roman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Liberation Serif"), additionalFamilies: []string{"Times New Roman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Thorndale"), additionalFamilies: []string{"Times New Roman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Thorndale AMT"), additionalFamilies: []string{"Times New Roman"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Cousine"), additionalFamilies: []string{"Courier New"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Liberation Mono"), additionalFamilies: []string{"Courier New"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Cumberland"), additionalFamilies: []string{"Courier New"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Cumberland AMT"), additionalFamilies: []string{"Courier New"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Gelasio"), additionalFamilies: []string{"Georgia"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Caladea"), additionalFamilies: []string{"Cambria"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Carlito"), additionalFamilies: []string{"Calibri"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("SymbolNeu"), additionalFamilies: []string{"Symbol"}, op: opAppendLast, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Helvetica"), additionalFamilies: []string{"Arial"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Helvetica Narrow"), additionalFamilies: []string{"Arial Narrow"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Times"), additionalFamilies: []string{"Times New Roman"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Courier"), additionalFamilies: []string{"Courier New"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Arial"), additionalFamilies: []string{"Helvetica"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Arial Narrow"), additionalFamilies: []string{"Helvetica Narrow"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Times New Roman"), additionalFamilies: []string{"Times"}, op: opAppendLast, + importance: 'w', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Courier New"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'w', + }, + // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) + { + test: familyEquals("Helvetica"), + additionalFamilies: []string{"Helvetica LT Std"}, + op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Helvetica"), additionalFamilies: []string{"TeX Gyre Heros"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Helvetica Narrow"), additionalFamilies: []string{"TeX Gyre Heros Cn"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Times"), additionalFamilies: []string{"TeX Gyre Termes"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Courier"), additionalFamilies: []string{"TeX Gyre Cursor"}, op: opAppend, + importance: 'e', + }, + // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) + { + test: familyEquals("Courier"), + additionalFamilies: []string{"Courier Std"}, + op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("ITC Avant Garde Gothic"), additionalFamilies: []string{"TeX Gyre Adventor"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("ITC Bookman"), additionalFamilies: []string{"Bookman Old Style", "TeX Gyre Bonum"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("ITC Zapf Chancery"), additionalFamilies: []string{"TeX Gyre Chorus"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Palatino"), additionalFamilies: []string{"Palatino Linotype", "TeX Gyre Pagella"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("New Century Schoolbook"), additionalFamilies: []string{"Century Schoolbook", "TeX Gyre Schola"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Arial"), additionalFamilies: []string{"Arimo", "Liberation Sans", "Albany", "Albany AMT"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Arial Narrow"), additionalFamilies: []string{"Liberation Sans Narrow"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Times New Roman"), additionalFamilies: []string{"Tinos", "Liberation Serif", "Thorndale", "Thorndale AMT"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Courier New"), additionalFamilies: []string{"Cousine", "Liberation Mono", "Cumberland", "Cumberland AMT"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Georgia"), additionalFamilies: []string{"Gelasio"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Cambria"), additionalFamilies: []string{"Caladea"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Calibri"), additionalFamilies: []string{"Carlito"}, op: opAppend, + importance: 'e', }, // confs/30-metric-aliases.conf (Set substitutions for similar/metric-compatible families) { test: familyEquals("Symbol"), additionalFamilies: []string{"SymbolNeu"}, op: opAppend, + importance: 'e', }, // confs/30-opensymbol.conf { test: familyEquals("Symbol"), additionalFamilies: []string{"OpenSymbol"}, op: opAppend, + importance: 'e', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Nazli"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Lotoos"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Mitra"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Ferdosi"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Badr"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Zar"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Titr"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Jadid"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Kochi Mincho"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL SungtiL GB"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL Mingti2L Big5"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("MS 明朝"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("NanumMyeongjo"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("UnBatang"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Baekmuk Batang"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("MgOpen Canonica"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Sazanami Mincho"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL ZenKai Uni"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("ZYSong18030"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("FreeSerif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("SimSun"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Arshia"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Elham"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Farnaz"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Nasim"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Sina"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Roya"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Koodak"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Terafik"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Kochi Gothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL KaitiM GB"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL KaitiM Big5"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("MS ゴシック"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("NanumGothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("UnDotum"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Baekmuk Dotum"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, - }, - // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) - { - test: familyEquals("MgOpen Moderna"), - additionalFamilies: []string{"sans-serif"}, - op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("MgOpen Modata"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, - }, - // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) - { - test: familyEquals("MgOpen Cosmetica"), - additionalFamilies: []string{"sans-serif"}, - op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Sazanami Gothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("AR PL ShanHeiSun Uni"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("ZYSong18030"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("FreeSans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("NSimSun"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("ZYSong18030"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("NanumGothicCoding"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("FreeMono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Homa"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Kamran"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Fantezi"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Tabassom"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("IranNastaliq"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) { test: familyEquals("Nafees Nastaleeq"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Arabic UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Bengali UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Devanagari UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Gujarati UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Gurmukhi UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Kannada UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Khmer UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Lao UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Malayalam UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Myanmar UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Oriya UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Sinhala UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Tamil UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Telugu UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Noto Sans Thai UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Leelawadee UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Nirmala UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Yu Gothic UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Meiryo UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("MS UI Gothic"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Khmer UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Lao UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Microsoft JhengHei UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/40-nonlatin.conf (Set substitutions for non-Latin fonts) + { + test: familyEquals("Microsoft YaHei UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Noto Color Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Apple Color Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Segoe UI Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Twitter Color Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("EmojiOne Mozilla"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Emoji Two"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', + }, + // confs/45-generic.conf (Set substitutions for emoji/math fonts) + { + test: familyEquals("JoyPixels"), + additionalFamilies: []string{"emoji"}, + op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Emoji One"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Noto Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Android Emoji"), additionalFamilies: []string{"emoji"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { - test: langEqualsAndNoFamily{lang: "und-zsye", family: "emoji"}, + test: langEqualsAndNoFamily{lang: language.NewLanguage("und-zsye"), family: "emoji"}, additionalFamilies: []string{"emoji"}, - op: opAppend, + op: opAppendLast, + importance: 's', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("XITS Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("STIX Two Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Cambria Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Latin Modern Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Minion Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Lucida Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { test: familyEquals("Asana Math"), additionalFamilies: []string{"math"}, op: opAppendLast, + importance: 'e', }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { - test: langEqualsAndNoFamily{lang: "und-zmth", family: "math"}, + test: langEqualsAndNoFamily{lang: language.NewLanguage("und-zmth"), family: "math"}, additionalFamilies: []string{"math"}, - op: opAppend, + op: opAppendLast, + importance: 's', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Bitstream Vera Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Cambria"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Constantia"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("DejaVu Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Elephant"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Garamond"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Georgia"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Liberation Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Luxi Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("MS Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Roman No9 L"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Roman"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Palatino Linotype"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Thorndale AMT"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Thorndale"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Times New Roman"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Times"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Albany AMT"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Albany"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Arial Unicode MS"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Arial"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Bitstream Vera Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Britannic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Calibri"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Candara"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Century Gothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Corbel"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("DejaVu Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Helvetica LT Std"), + additionalFamilies: []string{"sans-serif"}, + op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Helvetica"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Haettenschweiler"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Liberation Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("MS Sans Serif"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Sans L"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Luxi Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Tahoma"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Trebuchet MS"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Twentieth Century"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Verdana"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Andale Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Bitstream Vera Sans Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Consolas"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Courier New"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Courier Std"), + additionalFamilies: []string{"monospace"}, + op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Courier"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Cumberland AMT"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Cumberland"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("DejaVu Sans Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Fixedsys"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Inconsolata"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Liberation Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Luxi Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Mono L"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Nimbus Mono PS"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Terminal"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Bauhaus Std"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Cooper Std"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Copperplate Gothic Std"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Impact"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Comic Sans MS"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("ITC Zapf Chancery Std"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/45-latin.conf (Set substitutions for Latin fonts) { test: familyEquals("Zapfino"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Cantarell"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Noto Sans UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Segoe UI"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Segoe UI Historic"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', + }, + // confs/45-latin.conf (Set substitutions for Latin fonts) + { + test: familyEquals("Segoe UI Symbol"), + additionalFamilies: []string{"system-ui"}, + op: opAppendLast, + importance: 'w', }, // confs/49-sansserif.conf (Add sans-serif to the family when no generic name) { test: noGenericFamily{}, additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/56-language-selector-ar.conf { - test: langAndFamilyEqual{lang: "ar", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ar"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans", "Noto Sans Arabic UI"}, op: opPrepend, + importance: 'w', }, // confs/56-language-selector-ar.conf { - test: langAndFamilyEqual{lang: "ar", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ar"), family: "serif"}, additionalFamilies: []string{"Noto Serif", "Noto Naskh Arabic"}, op: opPrepend, + importance: 'w', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("Bepa Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("Bitstream Prima Sans Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("Bitstream Vera Sans Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("DejaVu LGC Sans Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("Olwen Sans Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans-mono.conf { test: familyEquals("SUSE Sans Mono"), additionalFamilies: []string{"DejaVu Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Arev Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Bepa"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Bitstream Prima Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Bitstream Vera Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("DejaVu LGC Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Hunky Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Olwen Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("SUSE Sans"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("Verajja"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-sans.conf { test: familyEquals("VerajjaPDA"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("Bitstream Prima Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("Bitstream Vera Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("DejaVu LGC Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("Hunky Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("Olwen Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("SUSE Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/57-dejavu-serif.conf { test: familyEquals("Verajja Serif"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("Bepa Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("Bitstream Prima Sans Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("Bitstream Vera Sans Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("DejaVu Sans Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("Olwen Sans Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("SUSE Sans Mono"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("DejaVu LGC Sans Mono"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/58-dejavu-lgc-sans-mono.conf { test: familyEquals("monospace"), additionalFamilies: []string{"DejaVu LGC Sans Mono"}, op: opPrepend, + importance: 'w', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Arev Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Bepa"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Bitstream Prima Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Bitstream Vera Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("DejaVu Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Hunky Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Olwen Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("SUSE Sans"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("Verajja"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("VerajjaPDA"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("DejaVu LGC Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/58-dejavu-lgc-sans.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"DejaVu LGC Sans"}, op: opPrepend, + importance: 'w', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("Bitstream Prima Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("Bitstream Vera Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("DejaVu Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("Hunky Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("Olwen Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("SUSE Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("Verajja Serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opAppend, + importance: 'e', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("DejaVu LGC Serif"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/58-dejavu-lgc-serif.conf { test: familyEquals("serif"), additionalFamilies: []string{"DejaVu LGC Serif"}, op: opPrepend, + importance: 'w', }, // confs/59-lohit-devanagari.conf { test: familyEquals("mangal"), additionalFamilies: []string{"Lohit Devanagari"}, op: opAppend, + importance: 'e', }, // confs/59-lohit-devanagari.conf { test: familyEquals("Lohit Devanagari"), additionalFamilies: []string{"managl"}, op: opAppendLast, + importance: 'e', }, // confs/60-generic.conf (Set preferable fonts for emoji/math fonts) { test: familyEquals("emoji"), - additionalFamilies: []string{"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", "Twitter Color Emoji", "EmojiOne Mozilla", "Emoji Two", "Emoji One", "Noto Emoji", "Android Emoji"}, + additionalFamilies: []string{"Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", "Twitter Color Emoji", "EmojiOne Mozilla", "Emoji Two", "JoyPixels", "Emoji One", "Noto Emoji", "Android Emoji"}, op: opPrepend, + importance: 'e', }, // confs/60-generic.conf (Set preferable fonts for emoji/math fonts) { test: familyEquals("math"), additionalFamilies: []string{"XITS Math", "STIX Two Math", "Cambria Math", "Latin Modern Math", "Minion Math", "Lucida Math", "Asana Math"}, op: opPrepend, + importance: 'e', }, // confs/60-latin.conf (Set preferable fonts for Latin) { test: familyEquals("serif"), - additionalFamilies: []string{"DejaVu Serif", "Bitstream Vera Serif", "Times New Roman", "Thorndale AMT", "Luxi Serif", "Nimbus Roman No9 L", "Nimbus Roman", "Times"}, + additionalFamilies: []string{"Noto Serif", "DejaVu Serif", "Times New Roman", "Thorndale AMT", "Luxi Serif", "Nimbus Roman No9 L", "Nimbus Roman", "Times"}, op: opPrepend, + importance: 'w', }, // confs/60-latin.conf (Set preferable fonts for Latin) { test: familyEquals("sans-serif"), - additionalFamilies: []string{"DejaVu Sans", "Bitstream Vera Sans", "Verdana", "Arial", "Albany AMT", "Luxi Sans", "Nimbus Sans L", "Nimbus Sans", "Helvetica", "Lucida Sans Unicode", "BPG Glaho International", "Tahoma"}, + additionalFamilies: []string{"Noto Sans", "DejaVu Sans", "Verdana", "Arial", "Albany AMT", "Luxi Sans", "Nimbus Sans L", "Nimbus Sans", "Helvetica", "Lucida Sans Unicode", "BPG Glaho International", "Tahoma"}, op: opPrepend, + importance: 'w', }, // confs/60-latin.conf (Set preferable fonts for Latin) { test: familyEquals("monospace"), - additionalFamilies: []string{"DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Inconsolata", "Andale Mono", "Courier New", "Cumberland AMT", "Luxi Mono", "Nimbus Mono L", "Nimbus Mono", "Nimbus Mono PS", "Courier"}, + additionalFamilies: []string{"Noto Sans Mono", "DejaVu Sans Mono", "Inconsolata", "Andale Mono", "Courier New", "Cumberland AMT", "Luxi Mono", "Nimbus Mono L", "Nimbus Mono", "Nimbus Mono PS", "Courier"}, op: opPrepend, + importance: 'w', }, // confs/60-latin.conf (Set preferable fonts for Latin) { test: familyEquals("fantasy"), additionalFamilies: []string{"Impact", "Copperplate Gothic Std", "Cooper Std", "Bauhaus Std"}, op: opPrepend, + importance: 'w', }, // confs/60-latin.conf (Set preferable fonts for Latin) { test: familyEquals("cursive"), additionalFamilies: []string{"ITC Zapf Chancery Std", "Zapfino", "Comic Sans MS"}, op: opPrepend, + importance: 'w', + }, + // confs/60-latin.conf (Set preferable fonts for Latin) + { + test: familyEquals("system-ui"), + additionalFamilies: []string{"Cantarell", "Noto Sans UI", "Segoe UI", "Segoe UI Historic", "Segoe UI Symbol"}, + op: opPrepend, + importance: 'w', }, // confs/61-urw-bookman.conf { test: familyEquals("serif"), additionalFamilies: []string{"URW Bookman"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-bookman.conf { test: familyEquals("URW Bookman"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-bookman.conf { test: familyEquals("URW Bookman"), additionalFamilies: []string{"ITC Bookman"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-bookman.conf { test: familyEquals("ITC Bookman"), additionalFamilies: []string{"URW Bookman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-bookman.conf { test: familyEquals("Bookman Old Style"), additionalFamilies: []string{"URW Bookman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-bookman.conf { test: familyEquals("TeX Gyre Bonum"), additionalFamilies: []string{"URW Bookman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-c059.conf { test: familyEquals("serif"), additionalFamilies: []string{"C059"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-c059.conf { test: familyEquals("C059"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-c059.conf { test: familyEquals("C059"), additionalFamilies: []string{"New Century Schoolbook"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-c059.conf { test: familyEquals("New Century Schoolbook"), additionalFamilies: []string{"C059"}, op: opAppend, + importance: 'e', }, // confs/61-urw-c059.conf { test: familyEquals("Century Schoolbook"), additionalFamilies: []string{"C059"}, op: opAppend, + importance: 'e', }, // confs/61-urw-c059.conf { test: familyEquals("Tex Gyre Schola"), additionalFamilies: []string{"C059"}, op: opAppend, + importance: 'e', }, // confs/61-urw-d050000l.conf { test: familyEquals("fantasy"), additionalFamilies: []string{"D050000L"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-d050000l.conf { test: familyEquals("D050000L"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-d050000l.conf { test: familyEquals("D050000L"), additionalFamilies: []string{"ITC Zapf Dingbats"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-d050000l.conf { test: familyEquals("ITC Zapf Dingbats"), additionalFamilies: []string{"D050000L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-d050000l.conf { test: familyEquals("ITC Zapf Dingbats Std"), additionalFamilies: []string{"D050000L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-d050000l.conf { test: familyEquals("Zapf Dingbats"), additionalFamilies: []string{"D050000L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Century Schoolbook L"), additionalFamilies: []string{"C059"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Century SchoolBook URW"), additionalFamilies: []string{"C059"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Dingbats"), additionalFamilies: []string{"D050000L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Nimbus Mono"), additionalFamilies: []string{"Nimbus Mono PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Nimbus Mono L"), additionalFamilies: []string{"Nimbus Mono PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Nimbus Roman No9 L"), additionalFamilies: []string{"Nimbus Roman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Nimbus Sans L"), additionalFamilies: []string{"Nimbus Sans"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Palladio URW"), additionalFamilies: []string{"P052"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("URW Palladio L"), additionalFamilies: []string{"P052"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Standard Symbols L"), additionalFamilies: []string{"Standard Symbols PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Bookman URW"), additionalFamilies: []string{"URW Bookman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("URW Bookman L"), additionalFamilies: []string{"URW Bookman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("URW Gothic L"), additionalFamilies: []string{"URW Gothic"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("Chancery URW"), additionalFamilies: []string{"Z003"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-backwards.conf { test: familyEquals("URW Chancery L"), additionalFamilies: []string{"Z003"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("Courier"), additionalFamilies: []string{"Nimbus Mono", "Nimbus Mono L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("Helvetica"), additionalFamilies: []string{"Nimbus Sans L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("ITC Avant Garde Gothic"), additionalFamilies: []string{"URW Gothic L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("ITC Bookman"), additionalFamilies: []string{"Bookman URW", "URW Bookman L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("ITC Zapf Chancery"), additionalFamilies: []string{"Chancery URW", "URW Chancery L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("ITC Zapf Dingbats"), additionalFamilies: []string{"Dingbats"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("New Century Schoolbook"), additionalFamilies: []string{"Century Schoolbook L", "Century SchoolBook URW"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("Palatino"), additionalFamilies: []string{"Palladio URW", "URW Palladio L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("Symbol"), additionalFamilies: []string{"Standard Symbols L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-fallback-generics.conf { test: familyEquals("Times"), additionalFamilies: []string{"Nimbus Roman No9 L"}, op: opAppend, + importance: 'e', }, // confs/61-urw-gothic.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"URW Gothic"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-gothic.conf { test: familyEquals("URW Gothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-gothic.conf { test: familyEquals("URW Gothic"), additionalFamilies: []string{"ITC Avant Garde Gothic"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-gothic.conf { test: familyEquals("ITC Avant Garde Gothic"), additionalFamilies: []string{"URW Gothic"}, op: opAppend, + importance: 'e', }, // confs/61-urw-gothic.conf { test: familyEquals("TeX Gyre Adventor"), additionalFamilies: []string{"URW Gothic"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-mono-ps.conf { test: familyEquals("monospace"), additionalFamilies: []string{"Nimbus Mono PS"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-nimbus-mono-ps.conf { test: familyEquals("Nimbus Mono PS"), additionalFamilies: []string{"monospace"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-nimbus-mono-ps.conf { test: familyEquals("Nimbus Mono PS"), additionalFamilies: []string{"Courier"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-nimbus-mono-ps.conf { test: familyEquals("Courier"), additionalFamilies: []string{"Nimbus Mono PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-mono-ps.conf { test: familyEquals("TeX Gyre Cursor"), additionalFamilies: []string{"Nimbus Mono PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-roman.conf { test: familyEquals("serif"), additionalFamilies: []string{"Nimbus Roman"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-nimbus-roman.conf { test: familyEquals("Nimbus Roman"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-nimbus-roman.conf { test: familyEquals("Nimbus Roman"), additionalFamilies: []string{"Times"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-nimbus-roman.conf { test: familyEquals("Times"), additionalFamilies: []string{"Nimbus Roman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-roman.conf { test: familyEquals("TeX Gyre Termes"), additionalFamilies: []string{"Nimbus Roman"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Nimbus Sans"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Nimbus Sans Narrow"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Nimbus Sans"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Nimbus Sans Narrow"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Nimbus Sans"), additionalFamilies: []string{"Helvetica"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Nimbus Sans Narrow"), additionalFamilies: []string{"Helvetica Narrow"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Helvetica"), additionalFamilies: []string{"Nimbus Sans"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("Helvetica Narrow"), additionalFamilies: []string{"Nimbus Sans Narrow"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("TeX Gyre Heros"), additionalFamilies: []string{"Nimbus Sans"}, op: opAppend, + importance: 'e', }, // confs/61-urw-nimbus-sans.conf { test: familyEquals("TeX Gyre Heros Cn"), additionalFamilies: []string{"Nimbus Sans Narrow"}, op: opAppend, + importance: 'e', }, // confs/61-urw-p052.conf { test: familyEquals("serif"), additionalFamilies: []string{"P052"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-p052.conf { test: familyEquals("P052"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-p052.conf { test: familyEquals("P052"), additionalFamilies: []string{"Palatino"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-p052.conf { test: familyEquals("Palatino"), additionalFamilies: []string{"P052"}, op: opAppend, + importance: 'e', }, // confs/61-urw-p052.conf { test: familyEquals("Palatino Linotype"), additionalFamilies: []string{"P052"}, op: opAppend, + importance: 'e', }, // confs/61-urw-p052.conf { test: familyEquals("Tex Gyre Pagella"), additionalFamilies: []string{"P052"}, op: opAppend, + importance: 'e', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("serif"), additionalFamilies: []string{"Standard Symbols PS"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("Standard Symbols PS"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("Standard Symbols PS"), additionalFamilies: []string{"Symbol"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("Symbol"), additionalFamilies: []string{"Standard Symbols PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("SymbolNeu"), additionalFamilies: []string{"Standard Symbols PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-standard-symbols-ps.conf { test: familyEquals("Symbol Neu for Powerline"), additionalFamilies: []string{"Standard Symbols PS"}, op: opAppend, + importance: 'e', }, // confs/61-urw-z003.conf { test: familyEquals("cursive"), additionalFamilies: []string{"Z003"}, op: opPrepend, + importance: 'w', }, // confs/61-urw-z003.conf { test: familyEquals("Z003"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/61-urw-z003.conf { test: familyEquals("Z003"), additionalFamilies: []string{"ITC Zapf Chancery"}, op: opAppendLast, + importance: 'e', }, // confs/61-urw-z003.conf { test: familyEquals("ITC Zapf Chancery"), additionalFamilies: []string{"Z003"}, op: opAppend, + importance: 'e', }, // confs/61-urw-z003.conf { test: familyEquals("TeX Gyre Chorus"), additionalFamilies: []string{"Z003"}, op: opAppend, + importance: 'e', }, // confs/64-01-tlwg-kinnari.conf { test: familyEquals("serif"), additionalFamilies: []string{"Kinnari"}, op: opPrepend, + importance: 'w', }, // confs/64-02-tlwg-norasi.conf { test: familyEquals("serif"), additionalFamilies: []string{"Norasi"}, op: opPrepend, + importance: 'w', }, // confs/64-10-tlwg-loma.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Loma"}, op: opPrepend, + importance: 'w', }, // confs/64-11-tlwg-waree.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Waree"}, op: opPrepend, + importance: 'w', }, // confs/64-13-tlwg-garuda.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Garuda"}, op: opPrepend, + importance: 'w', }, // confs/64-14-tlwg-umpush.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Umpush"}, op: opPrepend, + importance: 'w', }, // confs/64-15-laksaman.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Laksaman"}, op: opPrepend, + importance: 'w', }, // confs/64-21-tlwg-typo.conf { test: familyEquals("monospace"), additionalFamilies: []string{"TlwgTypo"}, op: opPrepend, + importance: 'w', }, // confs/64-22-tlwg-typist.conf { test: familyEquals("monospace"), additionalFamilies: []string{"TlwgTypist"}, op: opPrepend, + importance: 'w', }, // confs/64-23-tlwg-mono.conf { test: familyEquals("monospace"), additionalFamilies: []string{"TlwgMono"}, op: opPrepend, + importance: 'w', }, // confs/64-language-selector-prefer.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Noto Sans CJK JP", "Noto Sans CJK KR", "Noto Sans CJK SC", "Noto Sans CJK TC", "Noto Sans CJK HK", "Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/64-language-selector-prefer.conf { test: familyEquals("serif"), additionalFamilies: []string{"Noto Serif CJK JP", "Noto Serif CJK KR", "Noto Serif CJK SC", "Noto Serif CJK TC", "Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/64-language-selector-prefer.conf { test: familyEquals("monospace"), additionalFamilies: []string{"Noto Sans Mono CJK JP", "Noto Sans Mono CJK KR", "Noto Sans Mono CJK SC", "Noto Sans Mono CJK TC", "Noto Sans Mono CJK HK"}, op: opPrepend, + importance: 'w', }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: "bn", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Bengali"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: "bn", family: "serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "serif"}, additionalFamilies: []string{"MuktiNarrow"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: "as", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("as"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Assamese", "Lohit Bengali"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-guru-extra.conf { - test: langContainsAndFamilyEquals{lang: "pa", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "sans-serif"}, additionalFamilies: []string{"Saab"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-guru-extra.conf { - test: langContainsAndFamilyEquals{lang: "pa", family: "serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "serif"}, additionalFamilies: []string{"Lohit Punjabi"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-orya-extra.conf { - test: langContainsAndFamilyEquals{lang: "or", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "sans-serif"}, additionalFamilies: []string{"utkal"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-orya-extra.conf { - test: langContainsAndFamilyEquals{lang: "or", family: "serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "serif"}, additionalFamilies: []string{"utkal"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-telu-extra.conf { - test: langContainsAndFamilyEquals{lang: "te", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "sans-serif"}, additionalFamilies: []string{"lohit_te"}, op: opAppend, + importance: 'e', }, // confs/65-0-fonts-telu-extra.conf { - test: langContainsAndFamilyEquals{lang: "te", family: "serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "serif"}, additionalFamilies: []string{"Vemana"}, op: opAppend, + importance: 'e', }, // confs/65-0-smc-meera.conf { - test: langContainsAndFamilyEquals{lang: "ml", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "sans-serif"}, additionalFamilies: []string{"Meera"}, op: opPrepend, + importance: 'w', }, // confs/65-0-smc-meera.conf { test: familyEquals("Meera"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/65-0-smc-rachana.conf { - test: langContainsAndFamilyEquals{lang: "ml", family: "serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "serif"}, additionalFamilies: []string{"Rachana"}, op: opPrepend, + importance: 'w', }, // confs/65-0-smc-rachana.conf { test: familyEquals("Rachana"), additionalFamilies: []string{"serif"}, op: opAppendLast, + importance: 'w', }, // confs/65-droid-sans-fallback.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Droid Sans Fallback"}, op: opPrepend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("Nesf"), additionalFamilies: []string{"Nesf2"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Nesf2"), additionalFamilies: []string{"Persian_sansserif_default"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Nazanin"), additionalFamilies: []string{"Nazli"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Lotus"), additionalFamilies: []string{"Lotoos"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Yaqut"), additionalFamilies: []string{"Yaghoot"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Yaghut"), additionalFamilies: []string{"Yaghoot"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Traffic"), additionalFamilies: []string{"Terafik"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Ferdowsi"), additionalFamilies: []string{"Ferdosi"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Fantezy"), additionalFamilies: []string{"Fantezi"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Jadid"), additionalFamilies: []string{"Persian_title"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Titr"), additionalFamilies: []string{"Persian_title"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Kamran"), additionalFamilies: []string{"Persian_fantasy", "Homa"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Homa"), additionalFamilies: []string{"Persian_fantasy", "Kamran"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Fantezi"), additionalFamilies: []string{"Persian_fantasy"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Tabassom"), additionalFamilies: []string{"Persian_fantasy"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Arshia"), additionalFamilies: []string{"Persian_square"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Nasim"), additionalFamilies: []string{"Persian_square"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Elham"), additionalFamilies: []string{"Persian_square", "Farnaz"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Farnaz"), additionalFamilies: []string{"Persian_square", "Elham"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Sina"), additionalFamilies: []string{"Persian_square"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Persian_title"), additionalFamilies: []string{"Titr", "Jadid", "Persian_serif"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Persian_fantasy"), additionalFamilies: []string{"Homa", "Kamran", "Fantezi", "Tabassom", "Persian_square"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("Persian_square"), additionalFamilies: []string{"Arshia", "Elham", "Farnaz", "Nasim", "Sina", "Persian_serif"}, op: opAppend, + importance: 'e', }, // confs/65-fonts-persian.conf { test: familyEquals("serif"), additionalFamilies: []string{"Nazli", "Lotoos", "Mitra", "Ferdosi", "Badr", "Zar"}, op: opAppend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"Roya", "Koodak", "Terafik"}, op: opAppend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("monospace"), additionalFamilies: []string{"Terafik"}, op: opAppend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("fantasy"), additionalFamilies: []string{"Homa", "Kamran", "Fantezi", "Tabassom"}, op: opAppend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("cursive"), additionalFamilies: []string{"IranNastaliq", "Nafees Nastaleeq"}, op: opAppend, + importance: 'w', }, // confs/65-fonts-persian.conf { test: familyEquals("Persian_sansserif_default"), additionalFamilies: []string{"Roya"}, op: opReplace, + importance: 'e', }, // confs/65-fonts-takao-pgothic.conf { test: familyEquals("TakaoPGothic"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/65-fonts-takao-pgothic.conf { - test: langContainsAndFamilyEquals{lang: "ja", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ja"), family: "sans-serif"}, additionalFamilies: []string{"TakaoPGothic"}, op: opPrepend, + importance: 's', }, // confs/65-fonts-takao-pgothic.conf { test: familyEquals("GothicBBB"), additionalFamilies: []string{"TakaoPGothic"}, op: opPrepend, - }, - // confs/65-khmer.conf - { - test: familyEquals("sans-serif"), - additionalFamilies: []string{"Khmer OS"}, - op: opPrepend, + importance: 's', }, // confs/65-khmer.conf { test: familyEquals("serif"), - additionalFamilies: []string{"Khmer OS"}, + additionalFamilies: []string{"Khmer OS\""}, op: opPrepend, + importance: 'w', }, // confs/65-khmer.conf { - test: familyEquals("monospace"), - additionalFamilies: []string{"Khmer OS System"}, + test: familyEquals("sans-serif"), + additionalFamilies: []string{"Khmer OS\""}, op: opPrepend, + importance: 'w', }, // confs/65-nonlatin.conf (Set preferable fonts for non-Latin) { test: familyEquals("serif"), - additionalFamilies: []string{"Artsounk", "BPG UTF8 M", "Kinnari", "Norasi", "Frank Ruehl", "Dror", "JG LaoTimes", "Saysettha Unicode", "Pigiarniq", "B Davat", "B Compset", "Kacst-Qr", "Urdu Nastaliq Unicode", "Raghindi", "Mukti Narrow", "padmaa", "Hapax Berbère", "MS Mincho", "SimSun", "PMingLiu", "WenQuanYi Zen Hei", "WenQuanYi Bitmap Song", "AR PL ShanHeiSun Uni", "AR PL New Sung", "ZYSong18030", "HanyiSong", "MgOpen Canonica", "Sazanami Mincho", "IPAMonaMincho", "IPAMincho", "Kochi Mincho", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "AR PL Zenkai Uni", "MS 明朝", "ZYSong18030", "NanumMyeongjo", "UnBatang", "Baekmuk Batang", "KacstQura", "Frank Ruehl CLM", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Rachana", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, + additionalFamilies: []string{"Artsounk", "BPG UTF8 M", "Kinnari", "Norasi", "Frank Ruehl", "Dror", "JG LaoTimes", "Saysettha Unicode", "Pigiarniq", "B Davat", "B Compset", "Kacst-Qr", "Urdu Nastaliq Unicode", "Raghindi", "Mukti Narrow", "malayalam", "Sampige", "padmaa", "Hapax Berbère", "MS Mincho", "SimSun", "PMingLiu", "WenQuanYi Zen Hei", "WenQuanYi Bitmap Song", "AR PL ShanHeiSun Uni", "AR PL New Sung", "ZYSong18030", "HanyiSong", "Hiragino Mincho ProN", "Songti SC", "Songti TC", "SimSong", "MgOpen Canonica", "Sazanami Mincho", "IPAMonaMincho", "IPAMincho", "Kochi Mincho", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "AR PL Zenkai Uni", "MS 明朝", "ZYSong18030", "NanumMyeongjo", "UnBatang", "Baekmuk Batang", "AppleMyungjo", "KacstQura", "Frank Ruehl CLM", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Rachana", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, op: opPrepend, + importance: 'w', }, // confs/65-nonlatin.conf (Set preferable fonts for non-Latin) { test: familyEquals("sans-serif"), - additionalFamilies: []string{"Nachlieli", "Lucida Sans Unicode", "Yudit Unicode", "Kerkis", "ArmNet Helvetica", "Artsounk", "BPG UTF8 M", "Waree", "Loma", "Garuda", "Umpush", "Saysettha Unicode", "JG Lao Old Arial", "GF Zemen Unicode", "Pigiarniq", "B Davat", "B Compset", "Kacst-Qr", "Urdu Nastaliq Unicode", "Raghindi", "Mukti Narrow", "padmaa", "Hapax Berbère", "MS Gothic", "UmePlus P Gothic", "Microsoft YaHei", "Microsoft JhengHei", "WenQuanYi Zen Hei", "WenQuanYi Bitmap Song", "AR PL ShanHeiSun Uni", "AR PL New Sung", "MgOpen Moderna", "MgOpen Modata", "MgOpen Cosmetica", "VL Gothic", "IPAMonaGothic", "IPAGothic", "Sazanami Gothic", "Kochi Gothic", "AR PL KaitiM GB", "AR PL KaitiM Big5", "AR PL ShanHeiSun Uni", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "MS ゴシック", "ZYSong18030", "NanumGothic", "UnDotum", "Baekmuk Dotum", "Baekmuk Gulim", "KacstQura", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Meera", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, + additionalFamilies: []string{"Nachlieli", "Lucida Sans Unicode", "Yudit Unicode", "Kerkis", "ArmNet Helvetica", "Artsounk", "BPG UTF8 M", "Waree", "Loma", "Garuda", "Umpush", "Saysettha Unicode", "JG Lao Old Arial", "GF Zemen Unicode", "Pigiarniq", "B Davat", "B Compset", "Kacst-Qr", "Urdu Nastaliq Unicode", "Raghindi", "Mukti Narrow", "malayalam", "Sampige", "padmaa", "Hapax Berbère", "MS Gothic", "UmePlus P Gothic", "Microsoft YaHei", "Microsoft JhengHei", "WenQuanYi Zen Hei", "WenQuanYi Bitmap Song", "AR PL ShanHeiSun Uni", "AR PL New Sung", "Hiragino Sans", "PingFang SC", "PingFang TC", "PingFang HK", "Hiragino Sans CNS", "Hiragino Sans GB", "MgOpen Modata", "VL Gothic", "IPAMonaGothic", "IPAGothic", "Sazanami Gothic", "Kochi Gothic", "AR PL KaitiM GB", "AR PL KaitiM Big5", "AR PL ShanHeiSun Uni", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "MS ゴシック", "ZYSong18030", "TSCu_Paranar", "NanumGothic", "UnDotum", "Baekmuk Dotum", "Baekmuk Gulim", "Apple SD Gothic Neo", "KacstQura", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Meera", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, op: opPrepend, + importance: 'w', }, // confs/65-nonlatin.conf (Set preferable fonts for non-Latin) { test: familyEquals("monospace"), - additionalFamilies: []string{"Miriam Mono", "VL Gothic", "IPAMonaGothic", "IPAGothic", "Sazanami Gothic", "Kochi Gothic", "AR PL KaitiM GB", "MS Gothic", "UmePlus Gothic", "NSimSun", "MingLiu", "AR PL ShanHeiSun Uni", "AR PL New Sung Mono", "HanyiSong", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "ZYSong18030", "NanumGothicCoding", "NanumGothic", "UnDotum", "Baekmuk Dotum", "Baekmuk Gulim", "TlwgTypo", "TlwgTypist", "TlwgTypewriter", "TlwgMono", "Hasida", "Mitra Mono", "GF Zemen Unicode", "Hapax Berbère", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Meera", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, + additionalFamilies: []string{"Miriam Mono", "VL Gothic", "IPAMonaGothic", "IPAGothic", "Sazanami Gothic", "Kochi Gothic", "AR PL KaitiM GB", "MS Gothic", "UmePlus Gothic", "NSimSun", "MingLiu", "AR PL ShanHeiSun Uni", "AR PL New Sung Mono", "HanyiSong", "AR PL SungtiL GB", "AR PL Mingti2L Big5", "ZYSong18030", "NanumGothicCoding", "NanumGothic", "UnDotum", "Baekmuk Dotum", "Baekmuk Gulim", "TlwgTypo", "TlwgTypist", "TlwgTypewriter", "TlwgMono", "Hasida", "GF Zemen Unicode", "Hapax Berbère", "Lohit Bengali", "Lohit Gujarati", "Lohit Hindi", "Lohit Marathi", "Lohit Maithili", "Lohit Kashmiri", "Lohit Konkani", "Lohit Nepali", "Lohit Sindhi", "Lohit Punjabi", "Lohit Tamil", "Meera", "Lohit Malayalam", "Lohit Kannada", "Lohit Telugu", "Lohit Oriya", "LKLUG"}, + op: opPrepend, + importance: 'w', + }, + // confs/65-nonlatin.conf (Set preferable fonts for non-Latin) + { + test: familyEquals("system-ui"), + additionalFamilies: []string{"Noto Sans Arabic UI", "Noto Sans Bengali UI", "Noto Sans Devanagari UI", "Noto Sans Gujarati UI", "Noto Sans Gurmukhi UI", "Noto Sans Kannada UI", "Noto Sans Khmer UI", "Noto Sans Lao UI", "Noto Sans Malayalam UI", "Noto Sans Myanmar UI", "Noto Sans Oriya UI", "Noto Sans Sinhala UI", "Noto Sans Tamil UI", "Noto Sans Telugu UI", "Noto Sans Thai UI", "Leelawadee UI", "Nirmala UI", "Yu Gothic UI", "Meiryo UI", "MS UI Gothic", "Khmer UI", "Lao UI", "Microsoft YaHei UI", "Microsoft JhengHei UI"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-assamese.conf { - test: langContainsAndFamilyEquals{lang: "as", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("as"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Assamese"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-assamese.conf { test: familyEquals("Lohit Assamese"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-bengali.conf { - test: langContainsAndFamilyEquals{lang: "bn", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Bengali"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-bengali.conf { test: familyEquals("Lohit Bengali"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "hi", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("hi"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "mr", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("mr"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "kok", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("kok"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "ks-devanagari", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ks-devanagari"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "sd-devanagari", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("sd-devanagari"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "mai", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("mai"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "ne", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ne"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "brx", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("brx"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "doi", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("doi"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "sa", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("sa"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: "sat", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("sat"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-devanagari.conf { test: familyEquals("Lohit Devanagari"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-gujarati.conf { - test: langContainsAndFamilyEquals{lang: "gu", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("gu"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Gujarati"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-gujarati.conf { test: familyEquals("Lohit Gujarati"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-gurmukhi.conf { - test: langContainsAndFamilyEquals{lang: "pa", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Gurmukhi"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-gurmukhi.conf { test: familyEquals("Lohit Gurmukhi"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-kannada.conf { - test: langContainsAndFamilyEquals{lang: "kn", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("kn"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Kannada"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-kannada.conf { test: familyEquals("Lohit Kannada"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-odia.conf { - test: langContainsAndFamilyEquals{lang: "or", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Odia"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-odia.conf { test: familyEquals("Lohit Odia"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-tamil-classical.conf { - test: langContainsAndFamilyEquals{lang: "ta", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ta"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Tamil Classical"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-tamil-classical.conf { test: familyEquals("Lohit Tamil Classical"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-tamil.conf { - test: langContainsAndFamilyEquals{lang: "ta", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ta"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Tamil"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-tamil.conf { test: familyEquals("Lohit Tamil"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/66-lohit-telugu.conf { - test: langContainsAndFamilyEquals{lang: "te", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "sans-serif"}, additionalFamilies: []string{"Lohit Telugu"}, op: opPrepend, + importance: 'w', }, // confs/66-lohit-telugu.conf { test: familyEquals("Lohit Telugu"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-fonts-smc-manjari.conf { - test: langContainsAndFamilyEquals{lang: "ml", family: "sans-serif"}, + test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "sans-serif"}, additionalFamilies: []string{"Manjari"}, op: opPrepend, + importance: 'w', }, // confs/67-fonts-smc-manjari.conf { test: familyEquals("Manjari"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-anjalioldlipi.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, additionalFamilies: []string{"AnjaliOldLipi"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-anjalioldlipi.conf { test: familyEquals("AnjaliOldLipi"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-chilanka.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "cursive"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "cursive"}, additionalFamilies: []string{"Chilanka"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-chilanka.conf { test: familyEquals("Chilanka"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-dyuthi.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, additionalFamilies: []string{"Dyuthi"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-dyuthi.conf { test: familyEquals("Dyuthi"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-karumbi.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "cursive"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "cursive"}, additionalFamilies: []string{"Karumbi"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-karumbi.conf { test: familyEquals("Karumbi"), additionalFamilies: []string{"cursive"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-keraleeyam.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, additionalFamilies: []string{"Keraleeyam"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-keraleeyam.conf { test: familyEquals("Keraleeyam"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-raghumalayalamsans.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, additionalFamilies: []string{"RaghuMalayalam"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-raghumalayalamsans.conf { test: familyEquals("RaghuMalayalam"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-suruma.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, additionalFamilies: []string{"suruma"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-suruma.conf { test: familyEquals("suruma"), additionalFamilies: []string{"sans-serif"}, op: opAppendLast, + importance: 'w', }, // confs/67-smc-uroob.conf { - test: langAndFamilyEqual{lang: "ml-in", family: "fantasy"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "fantasy"}, additionalFamilies: []string{"Uroob"}, op: opPrepend, + importance: 'w', }, // confs/67-smc-uroob.conf { test: familyEquals("Uroob"), additionalFamilies: []string{"fantasy"}, op: opAppendLast, + importance: 'w', }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "WenQuanYi Bitmap Song", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Zen Hei", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK SC", "WenQuanYi Zen Hei Mono", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK HK", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK HK", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: "zh-mo", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: "zh-mo", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "sans-serif"}, additionalFamilies: []string{"Bitstream Vera Sans", "Noto Sans CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: "zh-mo", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "monospace"}, additionalFamilies: []string{"Bitstream Vera Sans Mono", "DejaVu Sans Mono", "Noto Sans Mono CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: "zh-sg", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "WenQuanYi Bitmap Song", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: "zh-sg", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Zen Hei", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: "zh-sg", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK SC", "WenQuanYi Zen Hei Mono", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Serif", "Bitstream Vera Serif"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK TC", "WenQuanYi Zen Hei", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Sans", "Bitstream Vera Sans"}, op: opPrepend, + importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK TC", "WenQuanYi Zen Hei Mono", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Sans Mono", "Bitstream Vera Sans Mono"}, op: opPrepend, + importance: 's', }, // confs/69-unifont.conf { test: familyEquals("serif"), additionalFamilies: []string{"FreeSerif", "Code2000", "Code2001"}, op: opPrepend, + importance: 'w', }, // confs/69-unifont.conf { test: familyEquals("sans-serif"), additionalFamilies: []string{"FreeSans", "Arial Unicode MS", "Arial Unicode", "Code2000", "Code2001"}, op: opPrepend, + importance: 'w', }, // confs/69-unifont.conf { test: familyEquals("monospace"), additionalFamilies: []string{"FreeMono"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ja", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK JP"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ko", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK KR"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "serif"}, additionalFamilies: []string{"Noto Serif CJK HK"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ja", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK JP"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ko", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK KR"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK TC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "sans-serif"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK HK"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ja", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK JP"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "ko", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK KR"}, op: opPrepend, + importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-cn", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK SC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-tw", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK TC"}, op: opPrepend, + importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: "zh-hk", family: "monospace"}, + test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK HK"}, op: opPrepend, + importance: 's', }, // confs/89-tlwg-garuda-synthetic.conf { test: familyContains("Browallia"), additionalFamilies: []string{"Garuda"}, op: opAppend, + importance: 'e', }, // confs/89-tlwg-kinnari-synthetic.conf { test: familyContains("Angsana"), additionalFamilies: []string{"Kinnari"}, op: opAppend, + importance: 'e', }, // confs/89-tlwg-laksaman-synthetic.conf { test: familyContains("TH Sarabun"), additionalFamilies: []string{"Laksaman"}, op: opAppend, + importance: 'e', }, // confs/89-tlwg-umpush-synthetic.conf { test: familyContains("Cordia"), additionalFamilies: []string{"Umpush"}, op: opAppend, + importance: 'e', }, // confs/90-fonts-linux-libertine.conf { test: familyEquals("Linux Libertine"), additionalFamilies: []string{"Linux Libertine O"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-linux-libertine.conf { test: familyEquals("Linux Biolinum"), additionalFamilies: []string{"Linux Biolinum O"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-nanum.conf { test: familyEquals("NanumBarunGothic"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-nanum.conf { test: familyEquals("NanumGothic"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-nanum.conf { test: familyEquals("NanumGothicCoding"), additionalFamilies: []string{"NanumGothic", "DejaVu Sans Mono"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-nanum.conf { test: familyEquals("NanumMyeongjo"), additionalFamilies: []string{"DejaVu Serif"}, op: opAppend, + importance: 'w', }, // confs/90-fonts-nanum.conf { test: familyEquals("NanumSquare"), additionalFamilies: []string{"DejaVu Sans"}, op: opAppend, + importance: 'w', }, } diff --git a/fontscan/substitutions_test.go b/fontscan/substitutions_test.go index d0052e28..e5f1f6a7 100644 --- a/fontscan/substitutions_test.go +++ b/fontscan/substitutions_test.go @@ -2,28 +2,29 @@ package fontscan import ( "reflect" + "sort" "testing" "github.com/go-text/typesetting/font" - tu "github.com/go-text/typesetting/testutils" ) func Test_familyList_insertStart(t *testing.T) { tests := []struct { start []string families []string - want familyCrible + strong bool + want familyList }{ - {nil, nil, familyCrible{}}, - {nil, []string{"aa", "bb"}, familyCrible{"aa": 0, "bb": 1}}, - {[]string{"a"}, []string{"aa", "bb"}, familyCrible{"aa": 0, "bb": 1, "a": 2}}, + {nil, nil, false, familyList{}}, + {nil, []string{"aa", "bb"}, false, familyList{{"aa", false}, {"bb", false}}}, + {[]string{"a"}, []string{"aa", "bb"}, true, familyList{{"aa", true}, {"bb", true}, {"a", true}}}, + {[]string{"a"}, []string{"aa", "bb"}, false, familyList{{"aa", false}, {"bb", false}, {"a", true}}}, } for _, tt := range tests { - l := newFamilyList(tt.start) - l.insertStart(tt.families) - c := make(familyCrible) - if l.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + fl := newFamilyList(tt.start) + fl.insertStart(tt.families, tt.strong) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } @@ -32,18 +33,19 @@ func Test_familyList_insertEnd(t *testing.T) { tests := []struct { start []string families []string - want familyCrible + strong bool + want familyList }{ - {nil, nil, familyCrible{}}, - {nil, []string{"aa", "bb"}, familyCrible{"aa": 0, "bb": 1}}, - {[]string{"a"}, []string{"aa", "bb"}, familyCrible{"a": 0, "aa": 1, "bb": 2}}, + {nil, nil, false, familyList{}}, + {nil, []string{"aa", "bb"}, true, familyList{{"aa", true}, {"bb", true}}}, + {[]string{"a"}, []string{"aa", "bb"}, true, familyList{{"a", true}, {"aa", true}, {"bb", true}}}, + {[]string{"a"}, []string{"aa", "bb"}, false, familyList{{"a", true}, {"aa", false}, {"bb", false}}}, } for _, tt := range tests { - l := newFamilyList(tt.start) - l.insertEnd(tt.families) - c := make(familyCrible) - if l.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + fl := newFamilyList(tt.start) + fl.insertEnd(tt.families, tt.strong) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } @@ -53,21 +55,22 @@ func Test_familyList_insertAfter(t *testing.T) { start []string element string families []string - want familyCrible + strong bool + want familyList }{ - {[]string{"f1"}, "f1", []string{"aa", "bb"}, familyCrible{"f1": 0, "aa": 1, "bb": 2}}, - {[]string{"f1", "f2"}, "f1", []string{"aa", "bb"}, familyCrible{"f1": 0, "aa": 1, "bb": 2, "f2": 3}}, + {[]string{"f1"}, "f1", []string{"aa", "bb"}, false, familyList{{"f1", true}, {"aa", false}, {"bb", false}}}, + {[]string{"f1", "f2"}, "f1", []string{"aa", "bb"}, false, familyList{{"f1", true}, {"aa", false}, {"bb", false}, {"f2", true}}}, + {[]string{"f1", "f2"}, "f1", []string{"aa", "bb"}, true, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, } for _, tt := range tests { - l := newFamilyList(tt.start) - mark := l.elementEquals(tt.element) + fl := newFamilyList(tt.start) + mark := fl.elementEquals(tt.element) if mark < 0 { - t.Fatalf("element %s not found in %v", tt.element, l) + t.Fatalf("element %s not found in %v", tt.element, fl) } - l.insertAfter(mark, tt.families) - c := make(familyCrible) - if l.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + fl.insertAfter(mark, tt.families, tt.strong) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } @@ -77,21 +80,21 @@ func Test_familyList_insertBefore(t *testing.T) { start []string element string families []string - want familyCrible + strong bool + want familyList }{ - {[]string{"f1"}, "f1", []string{"aa", "bb"}, familyCrible{"aa": 0, "bb": 1, "f1": 2}}, - {[]string{"f1", "f2"}, "f2", []string{"aa", "bb"}, familyCrible{"f1": 0, "aa": 1, "bb": 2, "f2": 3}}, + {[]string{"f1"}, "f1", []string{"aa", "bb"}, false, familyList{{"aa", false}, {"bb", false}, {"f1", true}}}, + {[]string{"f1", "f2"}, "f2", []string{"aa", "bb"}, false, familyList{{"f1", true}, {"aa", false}, {"bb", false}, {"f2", true}}}, } for _, tt := range tests { - l := newFamilyList(tt.start) - mark := l.elementEquals(tt.element) + fl := newFamilyList(tt.start) + mark := fl.elementEquals(tt.element) if mark < 0 { - t.Fatalf("element %s not found in %v", tt.element, l) + t.Fatalf("element %s not found in %v", tt.element, fl) } - l.insertBefore(mark, tt.families) - c := make(familyCrible) - if l.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + fl.insertBefore(mark, tt.families, tt.strong) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } @@ -101,21 +104,21 @@ func Test_familyList_replace(t *testing.T) { start []string element string families []string - want familyCrible + strong bool + want familyList }{ - {[]string{"f1"}, "f1", []string{"aa", "bb"}, familyCrible{"aa": 0, "bb": 1}}, - {[]string{"f1", "f2"}, "f2", []string{"aa", "bb"}, familyCrible{"f1": 0, "aa": 1, "bb": 2}}, + {[]string{"f1"}, "f1", []string{"aa", "bb"}, false, familyList{{"aa", false}, {"bb", false}}}, + {[]string{"f1", "f2"}, "f2", []string{"aa", "bb"}, false, familyList{{"f1", true}, {"aa", false}, {"bb", false}}}, } for _, tt := range tests { - l := newFamilyList(tt.start) - mark := l.elementEquals(tt.element) + fl := newFamilyList(tt.start) + mark := fl.elementEquals(tt.element) if mark < 0 { - t.Fatalf("element %s not found in %v", tt.element, l) + t.Fatalf("element %s not found in %v", tt.element, fl) } - l.replace(mark, tt.families) - c := make(familyCrible) - if l.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + fl.replace(mark, tt.families, tt.strong) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } @@ -124,63 +127,142 @@ func Test_familyList_execute(t *testing.T) { tests := []struct { start []string args substitution - want familyCrible + want familyList }{ - {nil, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace}, familyCrible{}}, // no match - {[]string{"f1", "f2"}, substitution{familyEquals("f4"), []string{"aa", "bb"}, opReplace}, familyCrible{"f1": 0, "f2": 1}}, // no match - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace}, familyCrible{"f1": 0, "aa": 1, "bb": 2}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend}, familyCrible{"f1": 0, "f2": 1, "aa": 2, "bb": 3}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast}, familyCrible{"f1": 0, "f2": 1, "aa": 2, "bb": 3}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend}, familyCrible{"f1": 0, "aa": 1, "bb": 2, "f2": 3}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst}, familyCrible{"aa": 0, "bb": 1, "f1": 2, "f2": 3}}, + {nil, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 0}, familyList{}}, // no match + {[]string{"f1", "f2"}, substitution{familyEquals("f4"), []string{"aa", "bb"}, opReplace, 0}, familyList{{"f1", true}, {"f2", true}}}, // no match + + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 's'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'e'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'w'}, familyList{{"f1", true}, {"aa", false}, {"bb", false}}}, + + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 's'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'e'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'w'}, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, + + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 's'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 'w'}, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, + + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 's'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'e'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'w'}, familyList{{"f1", true}, {"aa", false}, {"bb", false}, {"f2", true}}}, + + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 's'}, familyList{{"aa", true}, {"bb", true}, {"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 'w'}, familyList{{"aa", false}, {"bb", false}, {"f1", true}, {"f2", true}}}, } for _, tt := range tests { fl := newFamilyList(tt.start) fl.execute(tt.args) - c := make(familyCrible) - if fl.compileTo(c); !reflect.DeepEqual(c, tt.want) { - t.Fatalf("expected %v, got %v", tt.want, c) + if !reflect.DeepEqual(fl, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, fl) } } } -func TestSubstituteHelvetica(t *testing.T) { - fc := familyCrible{} - fc.fillWithSubstitutions("helvetica") - if f0 := fc.families()[0]; f0 != "helvetica" { - t.Fatalf("unexpected family %s", f0) +func Test_familyList_compileTo(t *testing.T) { + tests := []struct { + fl familyList + want familyCrible + }{ + {nil, familyCrible{}}, + {newFamilyList([]string{"a", "b"}), familyCrible{"a": scoreStrong{0, true}, "b": scoreStrong{1, true}}}, + {newFamilyList([]string{"a", "b", "a"}), familyCrible{"a": scoreStrong{0, true}, "b": scoreStrong{1, true}}}, + {familyList{{"a", false}, {"a", true}}, familyCrible{"a": scoreStrong{1, true}}}, + {familyList{{"a", false}, {"a", false}}, familyCrible{"a": scoreStrong{0, false}}}, + {familyList{{"a", false}, {"b", false}, {"a", true}}, familyCrible{"a": scoreStrong{2, true}, "b": scoreStrong{1, false}}}, } - if f4 := fc.families()[4]; f4 != "arial" { - t.Fatalf("unexpected family %s", f4) + for _, tt := range tests { + got := make(familyCrible) + tt.fl.compileTo(got) + if !reflect.DeepEqual(got, tt.want) { + t.Fatalf("expected %v, got %v", tt.want, got) + } } } +func (fc familyCrible) families() (strong, weak []string) { + for k, v := range fc { + if v.strong { + strong = append(strong, k) + } else { + weak = append(weak, k) + } + } + sort.Slice(strong, func(i, j int) bool { return fc[strong[i]].score < fc[strong[j]].score }) + sort.Slice(weak, func(i, j int) bool { return fc[weak[i]].score < fc[weak[j]].score }) + return +} + +func Test_newFamilyCrible(t *testing.T) { + tests := []struct { + family string + wantStrong, wantWeak []string + }{ + // these tests are extracted from the fontconfig reference implementation + { + "LuxiMono", + []string{"luximono"}, + []string{"dejavulgcsansmono", "notosansmono", "dejavusansmono", "inconsolata", "andalemono", "couriernew", "cumberlandamt", "nimbusmonol", "nimbusmonops", "nimbusmono", "courier", "tlwgtypo", "tlwgtypist", "tlwgmono", "notosansmonocjkjp", "notosansmonocjkkr", "notosansmonocjksc", "notosansmonocjktc", "notosansmonocjkhk", "miriammono", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "msgothic", "umeplusgothic", "nsimsun", "mingliu", "arplshanheisununi", "arplnewsungmono", "hanyisong", "arplsungtilgb", "arplmingti2lbig5", "zysong18030", "nanumgothiccoding", "nanumgothic", "dejavusans", "undotum", "baekmukdotum", "baekmukgulim", "tlwgtypewriter", "hasida", "gfzemenunicode", "hapaxberbère", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freemono", "monospace", "terafik", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif"}, + }, + { + "Arial", + []string{"arial", "arimo", "liberationsans", "albany", "albanyamt"}, + []string{"helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros\"", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, + }, + { + "Helvetica", + []string{"helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd"}, + []string{"arial", "arimo", "liberationsans", "albany", "albanyamt", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros\"", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, + }, + } + + for _, tt := range tests { + got := make(familyCrible) + got.fillWithSubstitutions(font.NormalizeFamily(tt.family)) + strong, weak := got.families() + if !(reflect.DeepEqual(strong, tt.wantStrong) && reflect.DeepEqual(weak, tt.wantWeak)) { + t.Errorf("newFamilyCrible() = %v %v, want %v %v", strong, weak, tt.wantStrong, tt.wantWeak) + } + } +} + +type lt = []weightedFamily + +var ( + A = weightedFamily{"A", true} + B = weightedFamily{"B", true} + C = weightedFamily{"C", true} + X = weightedFamily{"X", true} + Y = weightedFamily{"Y", true} + Z = weightedFamily{"Z", true} +) + func TestInsertAt(t *testing.T) { - mkcap := func(cap int, strs ...string) []string { - return append(make([]string, 0, cap), strs...) + mkcap := func(cap int, strs ...weightedFamily) lt { + return append(make(lt, 0, cap), strs...) } - clone := func(s []string) []string { - r := make([]string, len(s), cap(s)) + clone := func(s lt) lt { + r := make(lt, len(s), cap(s)) copy(r, s) return r } tests := []struct { - start []string + start lt at int - add []string - result []string + add lt + result lt }{ - {[]string{}, 0, []string{"A"}, []string{"A"}}, - {[]string{"X"}, 0, []string{"A"}, []string{"A", "X"}}, - {[]string{"X"}, 1, []string{"A"}, []string{"X", "A"}}, - {mkcap(3, "X"), 0, []string{"A"}, []string{"A", "X"}}, - {mkcap(3, "X"), 1, []string{"A"}, []string{"X", "A"}}, - {mkcap(3, "X"), 0, []string{"A", "B"}, []string{"A", "B", "X"}}, - {mkcap(3, "X"), 1, []string{"A", "B"}, []string{"X", "A", "B"}}, - {mkcap(4, "X", "Y"), 0, []string{"A", "B"}, []string{"A", "B", "X", "Y"}}, - {mkcap(4, "X", "Y"), 1, []string{"A", "B"}, []string{"X", "A", "B", "Y"}}, - {mkcap(4, "X", "Y"), 2, []string{"A", "B"}, []string{"X", "Y", "A", "B"}}, + {lt{}, 0, lt{A}, lt{A}}, + {lt{X}, 0, lt{A}, lt{A, X}}, + {lt{X}, 1, lt{A}, lt{X, A}}, + {mkcap(3, X), 0, lt{A}, lt{A, X}}, + {mkcap(3, X), 1, lt{A}, lt{X, A}}, + {mkcap(3, X), 0, lt{A, B}, lt{A, B, X}}, + {mkcap(3, X), 1, lt{A, B}, lt{X, A, B}}, + {mkcap(4, X, Y), 0, lt{A, B}, lt{A, B, X, Y}}, + {mkcap(4, X, Y), 1, lt{A, B}, lt{X, A, B, Y}}, + {mkcap(4, X, Y), 2, lt{A, B}, lt{X, Y, A, B}}, } for _, tt := range tests { result := insertAt(clone(tt.start), tt.at, tt.add) @@ -197,36 +279,36 @@ func TestInsertAt(t *testing.T) { } func TestReplaceAt(t *testing.T) { - mkcap := func(cap int, strs ...string) []string { - return append(make([]string, 0, cap), strs...) + mkcap := func(cap int, strs ...weightedFamily) lt { + return append(make(lt, 0, cap), strs...) } - clone := func(s []string) []string { - r := make([]string, len(s), cap(s)) + clone := func(s lt) lt { + r := make(lt, len(s), cap(s)) copy(r, s) return r } tests := []struct { - start []string + start lt at, to int - add []string - result []string + add lt + result lt }{ - {mkcap(4, "X", "Y", "Z"), 0, 2, []string{"A"}, []string{"A", "Z"}}, - - {mkcap(4, "X", "Y", "Z"), 0, 1, []string{"A"}, []string{"A", "Y", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 0, 1, []string{"A", "B"}, []string{"A", "B", "Y", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 0, 1, []string{"A", "B", "C"}, []string{"A", "B", "C", "Y", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 0, 2, []string{"A"}, []string{"A", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 0, 2, []string{"A", "B"}, []string{"A", "B", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 0, 2, []string{"A", "B", "C"}, []string{"A", "B", "C", "Z"}}, - - {mkcap(4, "X", "Y", "Z"), 1, 2, []string{"A"}, []string{"X", "A", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 1, 2, []string{"A", "B"}, []string{"X", "A", "B", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 1, 2, []string{"A", "B", "C"}, []string{"X", "A", "B", "C", "Z"}}, - {mkcap(4, "X", "Y", "Z"), 1, 3, []string{"A"}, []string{"X", "A"}}, - {mkcap(4, "X", "Y", "Z"), 1, 3, []string{"A", "B"}, []string{"X", "A", "B"}}, - {mkcap(4, "X", "Y", "Z"), 1, 3, []string{"A", "B", "C"}, []string{"X", "A", "B", "C"}}, + {mkcap(4, X, Y, Z), 0, 2, lt{A}, lt{A, Z}}, + + {mkcap(4, X, Y, Z), 0, 1, lt{A}, lt{A, Y, Z}}, + {mkcap(4, X, Y, Z), 0, 1, lt{A, B}, lt{A, B, Y, Z}}, + {mkcap(4, X, Y, Z), 0, 1, lt{A, B, C}, lt{A, B, C, Y, Z}}, + {mkcap(4, X, Y, Z), 0, 2, lt{A}, lt{A, Z}}, + {mkcap(4, X, Y, Z), 0, 2, lt{A, B}, lt{A, B, Z}}, + {mkcap(4, X, Y, Z), 0, 2, lt{A, B, C}, lt{A, B, C, Z}}, + + {mkcap(4, X, Y, Z), 1, 2, lt{A}, lt{X, A, Z}}, + {mkcap(4, X, Y, Z), 1, 2, lt{A, B}, lt{X, A, B, Z}}, + {mkcap(4, X, Y, Z), 1, 2, lt{A, B, C}, lt{X, A, B, C, Z}}, + {mkcap(4, X, Y, Z), 1, 3, lt{A}, lt{X, A}}, + {mkcap(4, X, Y, Z), 1, 3, lt{A, B}, lt{X, A, B}}, + {mkcap(4, X, Y, Z), 1, 3, lt{A, B, C}, lt{X, A, B, C}}, } for _, tt := range tests { result := replaceAt(clone(tt.start), tt.at, tt.to, tt.add) @@ -248,8 +330,9 @@ func TestSubstituteHelveticaOrder(t *testing.T) { c.fillWithSubstitutionsList([]string{font.NormalizeFamily("BlinkMacSystemFont"), font.NormalizeFamily("Helvetica")}) // BlinkMacSystemFont is not known by the library, so it is expanded with generic sans-serif, // but with lower priority then Helvetica - l := c.families() - tu.Assert(t, l[0] == font.NormalizeFamily("BlinkMacSystemFont")) - tu.Assert(t, l[1] == font.NormalizeFamily("Helvetica")) - tu.Assert(t, l[2] == font.NormalizeFamily("Nimbus Sans")) // from Helvetica + expected := []string{"blinkmacsystemfont", "helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd"} + ls, _ := c.families() + if !reflect.DeepEqual(ls, expected) { + t.Fatalf("expected %v, got %v", expected, ls) + } } From f938d7f11ebdcccf2b8c5edc655f5159f0ef0941 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Tue, 24 Dec 2024 18:52:48 +0100 Subject: [PATCH 02/14] [fontscan] use strong and weak family match; also use a better generic family match strategy --- fontscan/match.go | 87 ++++++++++++++++++++++++++++++++---------- fontscan/match_test.go | 77 ++++++++++++++----------------------- 2 files changed, 94 insertions(+), 70 deletions(-) diff --git a/fontscan/match.go b/fontscan/match.go index 4135779e..f241d7ab 100644 --- a/fontscan/match.go +++ b/fontscan/match.go @@ -25,9 +25,14 @@ type Query struct { // footprint family names are normalized type fontSet []Footprint +type scoreStrong struct { + score int + strong bool +} + // stores the possible matches with their score: // lower is better -type familyCrible map[string]int +type familyCrible map[string]scoreStrong // clear fc but keep the underlying storage func (fc familyCrible) reset() { @@ -118,21 +123,53 @@ func isGenericFamily(family string) bool { // // The returned slice may be empty if no font matches the given `family`. // -// The two buffers are used to reduce allocations. +// The buffers are used to reduce allocations and the returned slice is owned by them. func (fm fontSet) selectByFamilyExact(family string, - footprintBuffer *scoredFootprints, cribleBuffer familyCrible, + cribleBuffer familyCrible, bufferStrong, bufferWeak *scoredFootprints, ) []int { - // build the crible, handling substitutions - cribleBuffer.reset() - - // always substitute generic families if isGenericFamily(family) { + // See the CSS spec (https://www.w3.org/TR/css-fonts-4/#font-style-matching) : + // "If the family name is a generic family keyword, the user agent looks up the appropriate + // font family name to be used. User agents may choose the generic font family to use + // based on the language of the containing element or the Unicode range of the character." + // and font-kit implementation : + // https://docs.rs/font-kit/latest/src/font_kit/sources/fontconfig.rs.html#119-152 + // + // Our strategy is + // - performs family substitutions + // - match fonts against all these families + // - restrict the result to the first (best) family + + cribleBuffer.reset() cribleBuffer.fillWithSubstitutions(family) - } else { - cribleBuffer = familyCrible{font.NormalizeFamily(family): 0} + + strong, weak := fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) + + // restrict to one 'concrete' family name + var notEmpty []int + if len(strong) != 0 { + notEmpty = strong + } else if len(weak) != 0 { + notEmpty = weak + } else { + return nil + } + selectedFamily := fm[notEmpty[0]].Family + // only keep the first footprints with same family name + var i int + for ; i < len(notEmpty); i++ { + footprintIndex := notEmpty[i] + if fp := fm[footprintIndex]; fp.Family != selectedFamily { + break + } + } + return notEmpty[:i] } - return fm.selectByFamilies(cribleBuffer, footprintBuffer) + // regular family : perform a simple 'strong' match against the exact family name + cribleBuffer = familyCrible{font.NormalizeFamily(family): scoreStrong{0, true}} + strong, _ := fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) + return strong } // selectByFamilyExact returns all the fonts in the fontmap matching @@ -140,30 +177,38 @@ func (fm fontSet) selectByFamilyExact(family string, // // `query` is expanded with family substitutions func (fm fontSet) selectByFamilyWithSubs(query []string, - footprintBuffer *scoredFootprints, cribleBuffer familyCrible, -) []int { + cribleBuffer familyCrible, bufferStrong, bufferWeak *scoredFootprints, +) (strong, weak []int) { + // build the crible, handling substitutions cribleBuffer.reset() cribleBuffer.fillWithSubstitutionsList(query) - return fm.selectByFamilies(cribleBuffer, footprintBuffer) + return fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) } -// select the fonts in the fontSet matching [crible], returning their indices. -// footprintBuffer is used to reduce allocations. -func (fm fontSet) selectByFamilies(crible familyCrible, footprintBuffer *scoredFootprints) []int { - footprintBuffer.reset(fm) +// select the fonts in the fontSet matching [crible], returning their (sorted) indices. +// [buffer1] and [buffer2] are used to reduce allocations. +func (fm fontSet) selectByFamilies(crible familyCrible, bufferStrong, bufferWeak *scoredFootprints) (strong, weak []int) { + bufferStrong.reset(fm) + bufferWeak.reset(fm) // loop through `footprints` and stores the matching fonts into `dst` for index, footprint := range fm { if score, has := crible[footprint.Family]; has { - footprintBuffer.footprints = append(footprintBuffer.footprints, index) - footprintBuffer.scores = append(footprintBuffer.scores, score) + dst := bufferWeak + if score.strong { + dst = bufferStrong + } + + dst.footprints = append(dst.footprints, index) + dst.scores = append(dst.scores, score.score) } } // sort the matched fonts by score (lower is better) - sort.Stable(*footprintBuffer) + sort.Stable(*bufferStrong) + sort.Stable(*bufferWeak) - return footprintBuffer.footprints + return bufferStrong.footprints, bufferWeak.footprints } // matchStretch look for the given stretch in the font set, diff --git a/fontscan/match_test.go b/fontscan/match_test.go index 49b18247..948f9655 100644 --- a/fontscan/match_test.go +++ b/fontscan/match_test.go @@ -2,7 +2,6 @@ package fontscan import ( "reflect" - "sort" "testing" "github.com/go-text/typesetting/font" @@ -16,35 +15,6 @@ func allIndices(fs fontSet) []int { return out } -func (fc familyCrible) families() []string { - var out []string - for k := range fc { - out = append(out, k) - } - sort.Slice(out, func(i, j int) bool { - return fc[out[i]] < fc[out[j]] - }) - return out -} - -func Test_newFamilyCrible(t *testing.T) { - tests := []struct { - family string - want []string - }{ - // these tests are extracted from the fontconfig reference implementation - {"LuxiMono", []string{"luximono", "dejavulgcsansmono", "dejavusansmono", "bitstreamverasansmono", "inconsolata", "andalemono", "couriernew", "cumberlandamt", "nimbusmonol", "nimbusmonops", "nimbusmono", "courier", "tlwgtypo", "tlwgtypist", "tlwgmono", "notosansmonocjkjp", "notosansmonocjkkr", "notosansmonocjksc", "notosansmonocjktc", "notosansmonocjkhk", "khmerossystem", "miriammono", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "msgothic", "umeplusgothic", "nsimsun", "mingliu", "arplshanheisununi", "arplnewsungmono", "hanyisong", "arplsungtilgb", "arplmingti2lbig5", "zysong18030", "nanumgothiccoding", "nanumgothic", "dejavusans", "undotum", "baekmukdotum", "baekmukgulim", "tlwgtypewriter", "hasida", "mitramono", "gfzemenunicode", "hapaxberbère", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freemono", "monospace", "terafik", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif"}}, - {"Arial", []string{"arial", "arimo", "liberationsans", "albany", "albanyamt", "helvetica", "nimbussans", "nimbussansl", "texgyreheros", "dejavulgcsans", "dejavusans", "bitstreamverasans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "mgopenmoderna", "mgopenmodata", "mgopencosmetica", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}}, - } - - for _, tt := range tests { - got := make(familyCrible) - if got.fillWithSubstitutions(font.NormalizeFamily(tt.family)); !reflect.DeepEqual(got.families(), tt.want) { - t.Errorf("newFamilyCrible() = %v, want %v", got.families(), tt.want) - } - } -} - func fontsFromFamilies(families ...string) (out fontSet) { for _, family := range families { out = append(out, Footprint{Family: font.NormalizeFamily(family)}) @@ -59,7 +29,11 @@ func TestFontMap_selectByFamilyExact(t *testing.T) { substitute bool want []int }{ - {nil, "", false, nil}, // no match on empty fontset + {nil, "", false, nil}, // no match on empty fontset + {fontsFromFamilies("xxx"), "Arial", false, nil}, // no match + {fontsFromFamilies("xxx"), "serif", false, nil}, // no match on generic + {fontsFromFamilies("xxx"), Math, false, nil}, // no match on generic + {fontsFromFamilies("arial", "notosans", "cambriamath"), Math, false, []int{2}}, // strong match on generic // simple match {fontsFromFamilies("arial"), "Arial", false, []int{0}}, // blank and case @@ -70,6 +44,9 @@ func TestFontMap_selectByFamilyExact(t *testing.T) { {fontsFromFamilies("arial"), "Helvetica", false, nil}, // generic families {fontsFromFamilies("norasi", "XXX"), "serif", false, []int{0}}, + {fontsFromFamilies("norasi", "norasi", "XXX"), "serif", false, []int{0, 1}}, // many footprints with same family + {fontsFromFamilies("norasi", "norasi", "XXX", "norasi"), "serif", false, []int{0, 1, 3}}, // many footprints with same family + {fontsFromFamilies("rachana", "norasi", "XXX"), "serif", false, []int{1}}, // restrict to only one match // user provided precedence { fontSet{ @@ -83,38 +60,40 @@ func TestFontMap_selectByFamilyExact(t *testing.T) { }, } for _, tt := range tests { - if got := tt.fontset.selectByFamilyExact(tt.family, &scoredFootprints{}, make(familyCrible)); !reflect.DeepEqual(got, tt.want) { - t.Errorf("FontMap.selectByFamily() = \n%v, want \n%v", got, tt.want) + if got := tt.fontset.selectByFamilyExact(tt.family, make(familyCrible), &scoredFootprints{}, &scoredFootprints{}); !reflect.DeepEqual(got, tt.want) { + t.Errorf("FontMap.selectByFamily(%s) = \n%v, want \n%v", tt.family, got, tt.want) } } } func TestFontMap_selectByFamilyList(t *testing.T) { tests := []struct { - fontset fontSet - family string - substitute bool - want []int + fontset fontSet + family string + wantS, wantW []int }{ - {nil, "", true, nil}, // no match on empty fontset - {fontsFromFamilies("arial"), "Helvetica", true, []int{0}}, - {fontsFromFamilies("caladea", "XXX"), "cambria", true, []int{0}}, + {nil, "", nil, nil}, // no match on empty fontset + // weak substitute + {fontsFromFamilies("arial"), "Helvetica", nil, []int{0}}, + // string substitute + {fontsFromFamilies("caladea", "XXX"), "cambria", []int{0}, nil}, // substitution, with order - {fontsFromFamilies("arial", "Helvetica"), "Helvetica", true, []int{1, 0}}, - // substitution, with order, and no matching fonts - {fontsFromFamilies("arial", "Helvetica", "XXX"), "Helvetica", true, []int{1, 0}}, + {fontsFromFamilies("arial", "Helvetica"), "Helvetica", []int{1}, []int{0}}, + {fontsFromFamilies("arial", "Helvetica", "XXX"), "Helvetica", []int{1}, []int{0}}, // default to generic families - {fontsFromFamilies("DEjaVuSerif", "XXX"), "cambria", true, []int{0}}, - // substitutions + {fontsFromFamilies("DEjaVuSerif", "XXX"), "cambria", nil, []int{0}}, + // more complex substitutions { fontsFromFamilies("Nimbus Roman", "Tinos", "Liberation Serif", "DejaVu Serif", "arial"), - "Times", true, - []int{0, 1, 2, 3}, + "Times", + []int{0}, + []int{1, 2, 3}, }, } for _, tt := range tests { - if got := tt.fontset.selectByFamilyWithSubs([]string{tt.family}, &scoredFootprints{}, make(familyCrible)); !reflect.DeepEqual(got, tt.want) { - t.Errorf("FontMap.selectByFamily() = \n%v, want \n%v", got, tt.want) + gotS, gotW := tt.fontset.selectByFamilyWithSubs([]string{tt.family}, make(familyCrible), &scoredFootprints{}, &scoredFootprints{}) + if !(reflect.DeepEqual(gotS, tt.wantS) && reflect.DeepEqual(gotW, tt.wantW)) { + t.Errorf("FontMap.selectByFamily() = \n%v\n%v, want \n%v\n%v", gotS, gotW, tt.wantS, tt.wantW) } } } From cfa976ef3f96c95bd0d94fb5627660b057877c62 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Thu, 2 Jan 2025 17:16:54 +0100 Subject: [PATCH 03/14] [fontscan] add script hint for better font fallback --- fontscan/fontmap.go | 24 +++++--- fontscan/fontmap_test.go | 22 ++++++++ fontscan/lru.go | 7 ++- fontscan/match.go | 115 ++++++++++++++++++++++---------------- fontscan/match_test.go | 63 ++++++++++++++------- fontscan/rune_coverage.go | 7 +++ shaping/input.go | 22 ++++++-- 7 files changed, 178 insertions(+), 82 deletions(-) diff --git a/fontscan/fontmap.go b/fontscan/fontmap.go index 4e49166a..63556ddd 100644 --- a/fontscan/fontmap.go +++ b/fontscan/fontmap.go @@ -75,11 +75,13 @@ type FontMap struct { // the candidates for the current query, which influences ResolveFace output candidates candidates - // internal buffers used in SetQuery + // internal buffers used in [buildCandidates] + footprintsBuffer scoredFootprints cribleBuffer familyCrible - query Query // current query + query Query // current query + script language.Script // current script } // NewFontMap return a new font map, which should be filled with the `UseSystemFonts` @@ -374,7 +376,7 @@ func (fm *FontMap) FindSystemFonts(family string) []Location { } // SetQuery set the families and aspect required, influencing subsequent -// `ResolveFace` calls. +// [ResolveFace] calls. See also [SetScript]. func (fm *FontMap) SetQuery(query Query) { if len(query.Families) == 0 { query.Families = []string{""} @@ -383,6 +385,13 @@ func (fm *FontMap) SetQuery(query Query) { fm.built = false } +// SetScript set the script to which the (next) runes passed to [ResolveFace] +// belongs, influencing the choice of fallback fonts. +func (fm *FontMap) SetScript(s language.Script) { + fm.script = s + fm.built = false +} + // candidates is a cache storing the indices into FontMap.database of footprints matching a Query // families type candidates struct { @@ -416,7 +425,7 @@ func (fm *FontMap) buildCandidates() { // first pass for an exact match { for _, family := range fm.query.Families { - candidates := fm.database.selectByFamilyExact(family, &fm.footprintsBuffer, fm.cribleBuffer) + candidates := fm.database.selectByFamilyExact(family, fm.script, fm.cribleBuffer, &fm.footprintsBuffer) if len(candidates) == 0 { continue } @@ -424,7 +433,7 @@ func (fm *FontMap) buildCandidates() { // select the correct aspects candidates = fm.database.retainsBestMatches(candidates, fm.query.Aspect) - // when no systemFallback is required, the CSS spec says + // with no system fallback, the CSS spec says // that only one font among the candidates must be tried fm.candidates.withoutFallback = append(fm.candidates.withoutFallback, candidates[0]) } @@ -432,7 +441,7 @@ func (fm *FontMap) buildCandidates() { // second pass with substitutions { - candidates := fm.database.selectByFamilyWithSubs(fm.query.Families, &fm.footprintsBuffer, fm.cribleBuffer) + candidates := fm.database.selectByFamilyWithSubs(fm.query.Families, fm.script, fm.cribleBuffer, &fm.footprintsBuffer) // select the correct aspects candidates = fm.database.retainsBestMatches(candidates, fm.query.Aspect) @@ -452,7 +461,6 @@ func (fm *FontMap) buildCandidates() { { fm.candidates.manual = fm.database.filterUserProvided(fm.candidates.manual) fm.candidates.manual = fm.database.retainsBestMatches(fm.candidates.manual, fm.query.Aspect) - } fm.built = true @@ -508,7 +516,7 @@ func (fm *FontMap) resolveForLang(candidates []int, lang LangID) *font.Face { // // If no fonts match after the manual font search, an arbitrary face will be returned. func (fm *FontMap) ResolveFace(r rune) (face *font.Face) { - key := fm.lru.KeyFor(fm.query, r) + key := fm.lru.KeyFor(fm.query, fm.script, r) face, ok := fm.lru.Get(key, fm.query) if ok { return face diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index cc4218db..9550ff15 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -7,6 +7,7 @@ import ( "log" "os" "path/filepath" + "runtime" "testing" "time" @@ -318,3 +319,24 @@ func TestFindSytemFont(t *testing.T) { _, ok = fm.FindSystemFont("Noto Sans") tu.Assert(t, !ok) // user provided font are ignored } + +func TestResolveSameScript(t *testing.T) { + if runtime.GOOS != "linux" { + t.Skip() + } + // we assume the system contains at least these fonts : + // lohit-bengali/Lohit-Bengali.ttf + // urw-base35/NimbusSans-Regular.otf + // lohit-devanagari/Lohit-Devanagari.ttf + + // make sure the same font is selected for a given script, when possible + text := []rune("হয় না।") + fm := NewFontMap(log.New(io.Discard, "", 0)) + err := fm.UseSystemFonts(os.TempDir()) + tu.AssertNoErr(t, err) + + fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) + runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) + tu.Assert(t, len(runs) == 1) + tu.Assert(t, runs[0].Face.Describe().Family == "Lohit Bengali") +} diff --git a/fontscan/lru.go b/fontscan/lru.go index 91403abb..655de4f3 100644 --- a/fontscan/lru.go +++ b/fontscan/lru.go @@ -4,6 +4,7 @@ import ( "hash/maphash" "github.com/go-text/typesetting/font" + "github.com/go-text/typesetting/language" ) // runeLRUEntry holds a single key-value pair for an LRU cache. @@ -16,6 +17,7 @@ type runeLRUEntry struct { type runeLRUKey struct { familiesHash uint64 + s language.Script aspect font.Aspect r rune } @@ -46,7 +48,7 @@ func (l *runeLRU) init() { } } -func (l *runeLRU) KeyFor(q Query, r rune) runeLRUKey { +func (l *runeLRU) KeyFor(q Query, s language.Script, r rune) runeLRUKey { l.init() var h maphash.Hash h.SetSeed(l.seed) @@ -54,8 +56,9 @@ func (l *runeLRU) KeyFor(q Query, r rune) runeLRUKey { h.WriteString(s) } return runeLRUKey{ - aspect: q.Aspect, familiesHash: h.Sum64(), + s: s, + aspect: q.Aspect, r: r, } } diff --git a/fontscan/match.go b/fontscan/match.go index f241d7ab..0aaef6e8 100644 --- a/fontscan/match.go +++ b/fontscan/match.go @@ -4,6 +4,7 @@ import ( "sort" "github.com/go-text/typesetting/font" + "github.com/go-text/typesetting/language" ) // Query exposes the intention of an author about the @@ -57,33 +58,64 @@ func (fc familyCrible) fillWithSubstitutionsList(families []string) { fl.compileTo(fc) } +// scoredFootprints is used to sort the fooprints (see the [Less] method) type scoredFootprints struct { - footprints []int - scores []int + footprints []int // indices into [database] + scores []scoreStrong // with same length as footprints database fontSet + script language.Script } // keep the underlying storage -func (sf *scoredFootprints) reset(fs fontSet) { +func (sf *scoredFootprints) reset(fs fontSet, script language.Script) { sf.footprints = sf.footprints[:0] sf.scores = sf.scores[:0] sf.database = fs + sf.script = script } // Len is the number of elements in the collection. func (sf scoredFootprints) Len() int { return len(sf.footprints) } +// Less compares footprints following these rules : +// - 'strong' replacements come before 'weak' ones +// - among 'strong' families, only the score matters +// - among 'weak' families, the footprints compatible with the given script come first +// - in any case, if two footprints have the same score (meaning they have the same family), +// user provided ones come first func (sf scoredFootprints) Less(i int, j int) bool { - if sf.scores[i] < sf.scores[j] { + scorei, scorej := sf.scores[i], sf.scores[j] + fpi, fpj := sf.database[sf.footprints[i]], sf.database[sf.footprints[j]] + // strong better then weak + if scorei.strong && !scorej.strong { return true - } else if sf.scores[i] > sf.scores[j] { + } else if !scorei.strong && scorej.strong { return false - } else { - indexi, indexj := sf.footprints[i], sf.footprints[j] - return sf.database[indexi].isUserProvided && !sf.database[indexj].isUserProvided } + if scorei.strong { + if scorei.score < scorej.score { + return true + } else if scorei.score > scorej.score { + return false + } + return fpi.isUserProvided && !fpj.isUserProvided + } + // among weak substitutions, sort by script ... + hasScripti, hasScriptj := fpi.Scripts.contains(sf.script), fpj.Scripts.contains(sf.script) + if hasScripti && !hasScriptj { + return true + } else if !hasScripti && hasScriptj { + return false + } + // ... then by score + if scorei.score < scorej.score { + return true + } else if scorei.score > scorej.score { + return false + } + return fpi.isUserProvided && !fpj.isUserProvided } // Swap swaps the elements with indexes i and j. @@ -124,14 +156,15 @@ func isGenericFamily(family string) bool { // The returned slice may be empty if no font matches the given `family`. // // The buffers are used to reduce allocations and the returned slice is owned by them. -func (fm fontSet) selectByFamilyExact(family string, - cribleBuffer familyCrible, bufferStrong, bufferWeak *scoredFootprints, +func (fm fontSet) selectByFamilyExact(family string, script language.Script, + cribleBuffer familyCrible, footprintsBuffer *scoredFootprints, ) []int { if isGenericFamily(family) { // See the CSS spec (https://www.w3.org/TR/css-fonts-4/#font-style-matching) : // "If the family name is a generic family keyword, the user agent looks up the appropriate // font family name to be used. User agents may choose the generic font family to use // based on the language of the containing element or the Unicode range of the character." + // // and font-kit implementation : // https://docs.rs/font-kit/latest/src/font_kit/sources/fontconfig.rs.html#119-152 // @@ -143,72 +176,58 @@ func (fm fontSet) selectByFamilyExact(family string, cribleBuffer.reset() cribleBuffer.fillWithSubstitutions(family) - strong, weak := fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) + footprints := fm.selectByFamilies(cribleBuffer, script, footprintsBuffer) // restrict to one 'concrete' family name - var notEmpty []int - if len(strong) != 0 { - notEmpty = strong - } else if len(weak) != 0 { - notEmpty = weak - } else { + if len(footprints) == 0 { return nil } - selectedFamily := fm[notEmpty[0]].Family + selectedFamily := fm[footprints[0]].Family // only keep the first footprints with same family name var i int - for ; i < len(notEmpty); i++ { - footprintIndex := notEmpty[i] - if fp := fm[footprintIndex]; fp.Family != selectedFamily { + for ; i < len(footprints); i++ { + if fp := fm[footprints[i]]; fp.Family != selectedFamily { break } } - return notEmpty[:i] + return footprints[:i] } - // regular family : perform a simple 'strong' match against the exact family name + // regular family : perform a simple match against the exact family name, without substitutions cribleBuffer = familyCrible{font.NormalizeFamily(family): scoreStrong{0, true}} - strong, _ := fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) - return strong + return fm.selectByFamilies(cribleBuffer, script, footprintsBuffer) } // selectByFamilyExact returns all the fonts in the fontmap matching // the given query, with the best matches coming first. // -// `query` is expanded with family substitutions -func (fm fontSet) selectByFamilyWithSubs(query []string, - cribleBuffer familyCrible, bufferStrong, bufferWeak *scoredFootprints, -) (strong, weak []int) { +// `queryFamilies` is expanded with family substitutions +func (fm fontSet) selectByFamilyWithSubs(queryFamilies []string, queryScript language.Script, + cribleBuffer familyCrible, footprintsBuffer *scoredFootprints, +) []int { // build the crible, handling substitutions cribleBuffer.reset() - cribleBuffer.fillWithSubstitutionsList(query) - return fm.selectByFamilies(cribleBuffer, bufferStrong, bufferWeak) + cribleBuffer.fillWithSubstitutionsList(queryFamilies) + return fm.selectByFamilies(cribleBuffer, queryScript, footprintsBuffer) } // select the fonts in the fontSet matching [crible], returning their (sorted) indices. -// [buffer1] and [buffer2] are used to reduce allocations. -func (fm fontSet) selectByFamilies(crible familyCrible, bufferStrong, bufferWeak *scoredFootprints) (strong, weak []int) { - bufferStrong.reset(fm) - bufferWeak.reset(fm) +// [footprintsBuffer] is used to reduce allocations. +func (fm fontSet) selectByFamilies(crible familyCrible, script language.Script, footprintsBuffer *scoredFootprints) []int { + footprintsBuffer.reset(fm, script) - // loop through `footprints` and stores the matching fonts into `dst` + // loop through the font set and stores the matching fonts into the buffer for index, footprint := range fm { if score, has := crible[footprint.Family]; has { - dst := bufferWeak - if score.strong { - dst = bufferStrong - } - - dst.footprints = append(dst.footprints, index) - dst.scores = append(dst.scores, score.score) + footprintsBuffer.footprints = append(footprintsBuffer.footprints, index) + footprintsBuffer.scores = append(footprintsBuffer.scores, score) } } - // sort the matched fonts by score (lower is better) - sort.Stable(*bufferStrong) - sort.Stable(*bufferWeak) + // sort the matched fonts (see [scoredFootprints.Less]) + sort.Stable(*footprintsBuffer) - return bufferStrong.footprints, bufferWeak.footprints + return footprintsBuffer.footprints } // matchStretch look for the given stretch in the font set, @@ -367,7 +386,7 @@ func (fs fontSet) filterByWeight(candidates []int, weight font.Weight) []int { } // retainsBestMatches narrows `candidates` to the closest footprints to `query`, according to the CSS font rules -// `candidates` is a slice of indexed into `fs`, which is mutated and returned +// `candidates` is a slice of indexes into `fs`, which is mutated and returned // if `candidates` is not empty, the returned slice is guaranteed not to be empty func (fs fontSet) retainsBestMatches(candidates []int, query font.Aspect) []int { // this follows CSS Fonts Level 3 § 5.2 [1]. diff --git a/fontscan/match_test.go b/fontscan/match_test.go index 948f9655..f1be12ef 100644 --- a/fontscan/match_test.go +++ b/fontscan/match_test.go @@ -5,6 +5,7 @@ import ( "testing" "github.com/go-text/typesetting/font" + "github.com/go-text/typesetting/language" ) func allIndices(fs fontSet) []int { @@ -22,7 +23,7 @@ func fontsFromFamilies(families ...string) (out fontSet) { return out } -func TestFontMap_selectByFamilyExact(t *testing.T) { +func TestFontSet_selectByFamilyExact(t *testing.T) { tests := []struct { fontset fontSet family string @@ -60,40 +61,62 @@ func TestFontMap_selectByFamilyExact(t *testing.T) { }, } for _, tt := range tests { - if got := tt.fontset.selectByFamilyExact(tt.family, make(familyCrible), &scoredFootprints{}, &scoredFootprints{}); !reflect.DeepEqual(got, tt.want) { - t.Errorf("FontMap.selectByFamily(%s) = \n%v, want \n%v", tt.family, got, tt.want) + if got := tt.fontset.selectByFamilyExact(tt.family, 0, make(familyCrible), &scoredFootprints{}); !reflect.DeepEqual(got, tt.want) { + t.Errorf("fontSet.selectByFamilyExact(%s) = \n%v, want \n%v", tt.family, got, tt.want) } } } -func TestFontMap_selectByFamilyList(t *testing.T) { +func TestFontSet_selectByFamilyWithSubs(t *testing.T) { tests := []struct { - fontset fontSet - family string - wantS, wantW []int + fontset fontSet + family string + script language.Script + want []int }{ - {nil, "", nil, nil}, // no match on empty fontset + {nil, "", 0, nil}, // no match on empty fontset // weak substitute - {fontsFromFamilies("arial"), "Helvetica", nil, []int{0}}, + {fontsFromFamilies("arial"), "Helvetica", 0, []int{0}}, // string substitute - {fontsFromFamilies("caladea", "XXX"), "cambria", []int{0}, nil}, + {fontsFromFamilies("caladea", "XXX"), "cambria", 0, []int{0}}, // substitution, with order - {fontsFromFamilies("arial", "Helvetica"), "Helvetica", []int{1}, []int{0}}, - {fontsFromFamilies("arial", "Helvetica", "XXX"), "Helvetica", []int{1}, []int{0}}, + {fontsFromFamilies("arial", "Helvetica"), "Helvetica", 0, []int{1, 0}}, + {fontsFromFamilies("arial", "Helvetica", "XXX"), "Helvetica", 0, []int{1, 0}}, // default to generic families - {fontsFromFamilies("DEjaVuSerif", "XXX"), "cambria", nil, []int{0}}, + {fontsFromFamilies("DEjaVuSerif", "XXX"), "cambria", 0, []int{0}}, // more complex substitutions { fontsFromFamilies("Nimbus Roman", "Tinos", "Liberation Serif", "DejaVu Serif", "arial"), "Times", - []int{0}, - []int{1, 2, 3}, + 0, + []int{0, 1, 2, 3}, + }, + // script precedence + { + fontSet{ + {Family: "tinos", Scripts: ScriptSet{}}, // weak, unsupported script + {Family: "liberationserif", Scripts: ScriptSet{language.Adlam, language.Arabic}}, // weak, supported script + {Family: "times", Scripts: ScriptSet{language.Ahom}}, + }, + "Times", + language.Arabic, + []int{2, 1, 0}, + }, + { + fontSet{ + {Family: "tinos", Scripts: ScriptSet{}}, // weak, unsupported script + {Family: "liberationserif", Scripts: ScriptSet{}}, // weak, unsupported script + {Family: "times", Scripts: ScriptSet{language.Ahom}}, + }, + "Times", + language.Arabic, + []int{2, 0, 1}, }, } for _, tt := range tests { - gotS, gotW := tt.fontset.selectByFamilyWithSubs([]string{tt.family}, make(familyCrible), &scoredFootprints{}, &scoredFootprints{}) - if !(reflect.DeepEqual(gotS, tt.wantS) && reflect.DeepEqual(gotW, tt.wantW)) { - t.Errorf("FontMap.selectByFamily() = \n%v\n%v, want \n%v\n%v", gotS, gotW, tt.wantS, tt.wantW) + got := tt.fontset.selectByFamilyWithSubs([]string{tt.family}, tt.script, make(familyCrible), &scoredFootprints{}) + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("fontSet.selectByFamilyWithSubs() = \n%v, want \n%v", got, tt.want) } } } @@ -198,7 +221,7 @@ func fontsetFromAspects(as ...font.Aspect) (out fontSet) { return out } -func TestFontSet_selectBestMatch(t *testing.T) { +func TestFontSet_retainsBestMatches(t *testing.T) { defaultAspect := font.Aspect{Style: font.StyleNormal, Weight: font.WeightNormal, Stretch: font.StretchNormal} boldAspect := font.Aspect{Style: font.StyleNormal, Weight: font.WeightBold, Stretch: font.StretchNormal} boldItalicAspect := font.Aspect{Style: font.StyleItalic, Weight: font.WeightBold, Stretch: font.StretchNormal} @@ -220,7 +243,7 @@ func TestFontSet_selectBestMatch(t *testing.T) { t.Run(tt.name, func(t *testing.T) { result := tt.fs.retainsBestMatches(allIndices(tt.fs), tt.args) if got := tt.fs[result[0]]; !reflect.DeepEqual(got, tt.want) { - t.Errorf("FontSet.selectBestMatch() = %v, want %v", got, tt.want) + t.Errorf("FontSet.retainsBestMatches() = %v, want %v", got, tt.want) } }) } diff --git a/fontscan/rune_coverage.go b/fontscan/rune_coverage.go index 84bf6fe7..0ad9c902 100644 --- a/fontscan/rune_coverage.go +++ b/fontscan/rune_coverage.go @@ -320,6 +320,13 @@ func (rs *RuneSet) deserializeFrom(data []byte) (int, error) { // a sorted slice of unique, increasing scripts type ScriptSet []language.Script +func (s ScriptSet) contains(script language.Script) bool { + scriptIdx := sort.Search(len([]language.Script(s)), func(i int) bool { + return (s)[i] >= script + }) + return scriptIdx != len(s) && (s)[scriptIdx] == script +} + // insert adds the given script to the set if it is not already present. func (s *ScriptSet) insert(newScript language.Script) { scriptIdx := sort.Search(len([]language.Script(*s)), func(i int) bool { diff --git a/shaping/input.go b/shaping/input.go index 48ad944b..689cca55 100644 --- a/shaping/input.go +++ b/shaping/input.go @@ -67,9 +67,18 @@ type FontFeature struct { // Fontmap provides a general mechanism to select // a face to use when shaping text. type Fontmap interface { - // ResolveFace is called by `SplitByFace` for each input rune potentially + // SetScript set the script to which the (next) runes passed to [ResolveFace] + // belong. + // + // Providing this information before calling [ResolveFace] is useful for two reasons : + // - optimizing [ResolveFace] for runes with a shared script + // - for runes with Common and Inherited script, the script resolved by a segmentation step + // is more accurate + SetScript(language.Script) + + // ResolveFace is called by [SplitByFace] and [Segmenter.Split] for each input rune potentially // triggering a face change. - // It must always return a valid (non nil ) *font.Face value. + // It must always return a valid (non nil) *font.Face value. ResolveFace(r rune) *font.Face } @@ -87,6 +96,8 @@ func (ff fixedFontmap) ResolveFace(r rune) *font.Face { return ff[0] } +func (fixedFontmap) SetScript(language.Script) {} + // SplitByFontGlyphs split the runes from 'input' to several items, sharing the same // characteristics as 'input', expected for the `Face` which is set to // the first font among 'availableFonts' providing support for all the runes @@ -95,16 +106,17 @@ func (ff fixedFontmap) ResolveFace(r rune) *font.Face { // must not be empty. // The 'Face' field of 'input' is ignored: only 'availableFaces' are consulted. // Rune coverage is obtained by calling the NominalGlyph() method of each font. -// See also SplitByFace for a more general approach of font selection. +// See also [SplitByFace] for a more general approach of font selection. func SplitByFontGlyphs(input Input, availableFaces []*font.Face) []Input { return SplitByFace(input, fixedFontmap(availableFaces)) } // SplitByFace split the runes from 'input' to several items, sharing the same // characteristics as 'input', expected for the `Face` which is set to -// the return value of the `Fontmap.ResolveFace` call. +// the return value of the [Fontmap.ResolveFace] call. // The 'Face' field of 'input' is ignored: only 'availableFaces' is used to select the face. func SplitByFace(input Input, availableFaces Fontmap) []Input { + availableFaces.SetScript(input.Script) return splitByFace(input, availableFaces, nil) } @@ -351,8 +363,10 @@ func (seg *Segmenter) splitByVertOrientation() { } } +// assume [splitByScript] has been called func (seg *Segmenter) splitByFace(faces Fontmap) { for _, input := range seg.input { + faces.SetScript(input.Script) seg.output = splitByFace(input, faces, seg.output) } } From 1098eb82f277d7bcbd1d2df5f37d17806050ffd2 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Thu, 2 Jan 2025 17:17:21 +0100 Subject: [PATCH 04/14] [fontscan] update languages database (and bump cache version) --- fontscan/langset_gen.go | 489 ++++++++++++++++++++------------------- fontscan/langset_test.go | 8 +- fontscan/serialize.go | 2 +- 3 files changed, 257 insertions(+), 242 deletions(-) diff --git a/fontscan/langset_gen.go b/fontscan/langset_gen.go index 2ee30b6f..a8c6d27b 100755 --- a/fontscan/langset_gen.go +++ b/fontscan/langset_gen.go @@ -2,6 +2,8 @@ package fontscan import "github.com/go-text/typesetting/language" +// Code generated by typesetting-utils/generators/langsamples. DO NOT EDIT + // Copyright © 2002 Keith Packard // // Permission to use, copy, modify, distribute, and sell this software and its @@ -388,40 +390,47 @@ var languagesRunes = [...]struct { }, }, { /** index: 43 */ + "cop", + RuneSet{ + {ref: 0x0003, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000fffc}}, + {ref: 0x002c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe0fffff}}, + }, + }, + { /** index: 44 */ "crh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10420084, 0x10420084}}, {ref: 0x0001, set: pageSet{0xc0000000, 0x00030000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 44 */ + { /** index: 45 */ "cs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, {ref: 0x0001, set: pageSet{0x0c00f000, 0x00000000, 0x03000180, 0x6000c033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 45 */ + { /** index: 46 */ "csb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x021c0a08, 0x021c0a08}}, {ref: 0x0001, set: pageSet{0x00000030, 0x00000000, 0x0000001e, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 46 */ + { /** index: 47 */ "cu", RuneSet{ {ref: 0x0004, set: pageSet{0xfdffa966, 0xffffdfff, 0xa965dfff, 0x03ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 47 */ + { /** index: 48 */ "cv", RuneSet{ {ref: 0x0001, set: pageSet{0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000c00, 0x00c00000, 0x000c0000}}, }, }, - { /** index: 48 */ + { /** index: 49 */ "cy", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0010c604, 0x8010c604}}, @@ -429,44 +438,44 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000003f, 0x00000000, 0x00000000, 0x000c0000}}, }, }, - { /** index: 49 */ + { /** index: 50 */ "da", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x25082262, 0x25082262}}, }, }, - { /** index: 50 */ + { /** index: 51 */ "de", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 51 */ + { /** index: 52 */ "doi", RuneSet{ {ref: 0x0009, set: pageSet{0xfff99fec, 0xf3e5fdff, 0xf807399f, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 52 */ + { /** index: 53 */ "dsb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, {ref: 0x0001, set: pageSet{0x0c00f000, 0x00000000, 0x03000180, 0x6000c033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 53 */ + { /** index: 54 */ "dv", RuneSet{ {ref: 0x0007, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0001ffff, 0x00000000, 0x00000000}}, }, }, - { /** index: 54 */ + { /** index: 55 */ "dz", RuneSet{ {ref: 0x000f, set: pageSet{0x00000000, 0x00000000, 0xfffffeff, 0x3d7e03ff, 0xfeff0003, 0x03ffffff, 0x00000000, 0x00000000}}, }, }, - { /** index: 55 */ + { /** index: 56 */ "ee", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060c3303, 0x060c3303}}, @@ -475,51 +484,51 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00001003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 56 */ + { /** index: 57 */ "el", RuneSet{ {ref: 0x0003, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffd740, 0xfffffffb, 0x00007fff, 0x00000000}}, }, }, - { /** index: 57 */ + { /** index: 58 */ "en", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 58 */ + { /** index: 59 */ "eo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x30000300, 0x00300030, 0x30000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 59 */ + { /** index: 60 */ "es", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, }, }, - { /** index: 60 */ + { /** index: 61 */ "et", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10600010, 0x10600010}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 61 */ + { /** index: 62 */ "eu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10020000, 0x10020000}}, }, }, - { /** index: 62 */ + { /** index: 63 */ "fa", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 63 */ + { /** index: 64 */ "fat", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, @@ -529,7 +538,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x03000000}}, }, }, - { /** index: 64 */ + { /** index: 65 */ "ff", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -537,51 +546,51 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00880000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 65 */ + { /** index: 66 */ "fi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00400030, 0x00400030}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 66 */ + { /** index: 67 */ "fil", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e1e7707, 0x0e1e7707}}, }, }, - { /** index: 67 */ + { /** index: 68 */ "fj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 68 */ + { /** index: 69 */ "fo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x25092042, 0x25092042}}, }, }, - { /** index: 69 */ + { /** index: 70 */ "fr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x000c0000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 70 */ + { /** index: 71 */ "fur", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02041107, 0x02041107}}, }, }, - { /** index: 71 */ + { /** index: 72 */ "fy", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x9c508e14, 0x1c508e14}}, }, }, - { /** index: 72 */ + { /** index: 73 */ "ga", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x04082202, 0x04082202}}, @@ -589,26 +598,26 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0xc0000c0c, 0x00000000, 0x00c00003, 0x00000c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 73 */ + { /** index: 74 */ "gd", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x020c1383, 0x020c1383}}, }, }, - { /** index: 74 */ + { /** index: 75 */ "gez", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x00003d7f, 0x00ff00ff, 0x00ff3d7f, 0x003d7fff, 0xff7f7f00, 0x00ff7f00}}, {ref: 0x0013, set: pageSet{0x003d7f00, 0xffff01ff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 75 */ + { /** index: 76 */ "gl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, }, }, - { /** index: 76 */ + { /** index: 77 */ "gn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x040a2202, 0x042a220a}}, @@ -616,19 +625,25 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x02000000}}, }, }, - { /** index: 77 */ + { /** index: 78 */ + "got", + RuneSet{ + {ref: 0x0103, set: pageSet{0x00000000, 0xffff0000, 0x000007ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, + }, + }, + { /** index: 79 */ "gu", RuneSet{ {ref: 0x000a, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffbafee, 0xf3edfdff, 0x00013bbf, 0x00000001}}, }, }, - { /** index: 78 */ + { /** index: 80 */ "gv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000080, 0x00000080}}, }, }, - { /** index: 79 */ + { /** index: 81 */ "ha", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -636,7 +651,7 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00880000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 80 */ + { /** index: 82 */ "hak", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -724,7 +739,7 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 81 */ + { /** index: 83 */ "haw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -732,70 +747,70 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 82 */ + { /** index: 84 */ "he", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x000007ff}}, }, }, - { /** index: 83 */ + { /** index: 85 */ "hi", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 84 */ + { /** index: 86 */ "hif", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 85 */ + { /** index: 87 */ "hne", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 86 */ + { /** index: 88 */ "ho", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 87 */ + { /** index: 89 */ "hr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000330c0, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 88 */ + { /** index: 90 */ "hsb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x0c0030c0, 0x00000000, 0x0300001e, 0x66000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 89 */ + { /** index: 91 */ "ht", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00040100, 0x00040100}}, }, }, - { /** index: 90 */ + { /** index: 92 */ "hu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x14482202, 0x14482202}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 91 */ + { /** index: 93 */ "hy", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0xfffe0000, 0x007fffff, 0xfffffffe, 0x000000ff, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 92 */ + { /** index: 94 */ "hz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -803,32 +818,32 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x000c0000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 93 */ + { /** index: 95 */ "ia", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 94 */ + { /** index: 96 */ "id", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000200, 0x00000200}}, }, }, - { /** index: 95 */ + { /** index: 97 */ "ie", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, }, }, - { /** index: 96 */ + { /** index: 98 */ "ig", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003c00, 0x00000030}}, }, }, - { /** index: 97 */ + { /** index: 99 */ "ii", RuneSet{ {ref: 0x00a0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -838,31 +853,31 @@ var languagesRunes = [...]struct { {ref: 0x00a4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00001fff, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 98 */ + { /** index: 100 */ "ik", RuneSet{ {ref: 0x0004, set: pageSet{0xffff4002, 0xffffffff, 0x4002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 99 */ + { /** index: 101 */ "io", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 100 */ + { /** index: 102 */ "is", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x64092242, 0x64092242}}, }, }, - { /** index: 101 */ + { /** index: 103 */ "it", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060cb301, 0x060cb301}}, }, }, - { /** index: 102 */ + { /** index: 104 */ "iu", RuneSet{ {ref: 0x0014, set: pageSet{0x00000c7e, 0x031f8000, 0x0063f200, 0x000df840, 0x00037e08, 0x08000dfa, 0x0df901bf, 0x5437e400}}, @@ -870,7 +885,7 @@ var languagesRunes = [...]struct { {ref: 0x0016, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x007f8000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 103 */ + { /** index: 105 */ "ja", RuneSet{ {ref: 0x0030, set: pageSet{0x000000a7, 0x00000000, 0xfffffffe, 0xffffffff, 0x780fffff, 0xfffffffe, 0xffffffff, 0x787fffff}}, @@ -958,25 +973,25 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x00080000, 0x08000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 104 */ + { /** index: 106 */ "jv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000300, 0x00000300}}, }, }, - { /** index: 105 */ + { /** index: 107 */ "ka", RuneSet{ {ref: 0x0010, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x0001ffff}}, }, }, - { /** index: 106 */ + { /** index: 108 */ "kaa", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x0c0c0000, 0x000cc00c, 0x03000000, 0x00000000}}, }, }, - { /** index: 107 */ + { /** index: 109 */ "kab", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -985,45 +1000,45 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00003000, 0x00000030, 0x00000000, 0x0000300c, 0x000c0000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 108 */ + { /** index: 110 */ "ki", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000300, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 109 */ + { /** index: 111 */ "kj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 110 */ + { /** index: 112 */ "kk", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffffffff, 0x0040ffff, 0x00000000, 0x0c0c0000, 0x0c00000c, 0x03000000, 0x00000300}}, }, }, - { /** index: 111 */ + { /** index: 113 */ "kl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0d10646e, 0x0d10646e}}, {ref: 0x0001, set: pageSet{0x00000000, 0x01000300, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 112 */ + { /** index: 114 */ "km", RuneSet{ {ref: 0x0017, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9fffffff, 0xffcffee7, 0x0000003f, 0x00000000}}, }, }, - { /** index: 113 */ + { /** index: 115 */ "kn", RuneSet{ {ref: 0x000c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffddfec, 0xc3effdff, 0x40603ddf, 0x00000003}}, }, }, - { /** index: 114 */ + { /** index: 116 */ "ko", RuneSet{ {ref: 0x0031, set: pageSet{0x00000000, 0xfffe0000, 0xffffffff, 0xffffffef, 0x00007fff, 0x00000000, 0x00000000, 0x00000000}}, @@ -1073,13 +1088,13 @@ var languagesRunes = [...]struct { {ref: 0x00d7, set: pageSet{0x13020011, 0x11302b01, 0x03d30290, 0x3011122b, 0x2b011302, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 115 */ + { /** index: 117 */ "kok", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 116 */ + { /** index: 118 */ "kr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1087,51 +1102,51 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 117 */ + { /** index: 119 */ "ks", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001df, 0x80800176, 0x420c0000, 0x01020140, 0x44008200, 0x00041018, 0x00000000}}, }, }, - { /** index: 118 */ + { /** index: 120 */ "ku-am", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffff27bf, 0x000027bf, 0x00000000, 0x00000000, 0x0c000000, 0x03000000, 0x000000c0}}, {ref: 0x0005, set: pageSet{0x3c000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 119 */ + { /** index: 121 */ "ku-iq", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x061ef5c0, 0x000001f6, 0x40000000, 0x01040040, 0x00208210, 0x00005040, 0x00000000}}, }, }, - { /** index: 120 */ + { /** index: 122 */ "ku-ir", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x061ef5c0, 0x000001f6, 0x40000000, 0x01040040, 0x00208210, 0x00005040, 0x00000000}}, }, }, - { /** index: 121 */ + { /** index: 123 */ "ku-tr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x08004480, 0x08004480}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 122 */ + { /** index: 124 */ "kum", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 123 */ + { /** index: 125 */ "kv", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0042ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000c0}}, }, }, - { /** index: 124 */ + { /** index: 126 */ "kw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1139,63 +1154,63 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x000c0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 125 */ + { /** index: 127 */ "kwm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 126 */ + { /** index: 128 */ "ky", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c00c, 0x00000000, 0x00000000}}, }, }, - { /** index: 127 */ + { /** index: 129 */ "la", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000c0003, 0x00003c00, 0x0000f000, 0x00003c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 128 */ + { /** index: 130 */ "lah", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 129 */ + { /** index: 131 */ "lb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x98504f14, 0x18504f14}}, }, }, - { /** index: 130 */ + { /** index: 132 */ "lez", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 131 */ + { /** index: 133 */ "lg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 132 */ + { /** index: 134 */ "li", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00480910, 0x00480910}}, }, }, - { /** index: 133 */ + { /** index: 135 */ "lij", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060cb301, 0x060eb3d5}}, }, }, - { /** index: 134 */ + { /** index: 136 */ "ln", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0c186606, 0x0c186606}}, @@ -1204,27 +1219,27 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00001006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 135 */ + { /** index: 137 */ "lo", RuneSet{ {ref: 0x000e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfef02596, 0x3bffecae, 0x30003f5f, 0x00000000}}, }, }, - { /** index: 136 */ + { /** index: 138 */ "lt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x03c03030, 0x0000c000, 0x00000000, 0x600c0c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 137 */ + { /** index: 139 */ "lv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000c3003, 0x18c00c0c, 0x00c03060, 0x60000c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 138 */ + { /** index: 140 */ "lzh", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -1312,45 +1327,45 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 139 */ + { /** index: 141 */ "mag", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 140 */ + { /** index: 142 */ "mai", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 141 */ + { /** index: 143 */ "mfe", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x000c0000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 142 */ + { /** index: 144 */ "mg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100002, 0x00100002}}, }, }, - { /** index: 143 */ + { /** index: 145 */ "mh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000003, 0x18000000, 0x00003060, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 144 */ + { /** index: 146 */ "mhr", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 145 */ + { /** index: 147 */ "mi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1358,7 +1373,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 146 */ + { /** index: 148 */ "miq", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x142a220a}}, @@ -1366,49 +1381,49 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 147 */ + { /** index: 149 */ "mjw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 148 */ + { /** index: 150 */ "mk", RuneSet{ {ref: 0x0004, set: pageSet{0xfdffb729, 0x000001ff, 0xb7290000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 149 */ + { /** index: 151 */ "ml", RuneSet{ {ref: 0x000d, set: pageSet{0xfffddfec, 0xc3fffdff, 0x00803dcf, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 150 */ + { /** index: 152 */ "mn-cn", RuneSet{ {ref: 0x0018, set: pageSet{0x00000000, 0xffffffff, 0xffffffff, 0x00ffffff, 0xffffffff, 0x000003ff, 0x00000000, 0x00000000}}, }, }, - { /** index: 151 */ + { /** index: 153 */ "mn-mn", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c000, 0x00000000, 0x00000300}}, }, }, - { /** index: 152 */ + { /** index: 154 */ "mni", RuneSet{ {ref: 0x0009, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000010, 0xfff99fee, 0xf3c5fdff, 0xb000798f, 0x0002ffc0}}, }, }, - { /** index: 153 */ + { /** index: 155 */ "mnw", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 154 */ + { /** index: 156 */ "mo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00004004, 0x00004004}}, @@ -1417,39 +1432,39 @@ var languagesRunes = [...]struct { {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 155 */ + { /** index: 157 */ "mr", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 156 */ + { /** index: 158 */ "ms", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 157 */ + { /** index: 159 */ "mt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02045101, 0x02045101}}, {ref: 0x0001, set: pageSet{0x00000c00, 0x000000c3, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 158 */ + { /** index: 160 */ "my", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 159 */ + { /** index: 161 */ "na", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 160 */ + { /** index: 162 */ "nan", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, @@ -1538,82 +1553,82 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 161 */ + { /** index: 163 */ "nb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x011c0661, 0x011c0661}}, }, }, - { /** index: 162 */ + { /** index: 164 */ "nds", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 163 */ + { /** index: 165 */ "ne", RuneSet{ {ref: 0x0009, set: pageSet{0xfff98fee, 0xc3e5fdff, 0x0001398f, 0x0001fff0, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 164 */ + { /** index: 166 */ "ng", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 165 */ + { /** index: 167 */ "nhn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, {ref: 0x0001, set: pageSet{0x00000002, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 166 */ + { /** index: 168 */ "niu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, {ref: 0x0001, set: pageSet{0x00080002, 0x00000800, 0x00002000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 167 */ + { /** index: 169 */ "nl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1c58af16, 0x1c58af16}}, }, }, - { /** index: 168 */ + { /** index: 170 */ "nn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x115c0671, 0x115c0671}}, }, }, - { /** index: 169 */ + { /** index: 171 */ "no", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x011c0661, 0x011c0661}}, }, }, - { /** index: 170 */ + { /** index: 172 */ "nqo", RuneSet{ {ref: 0x0007, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x07ffffff}}, }, }, - { /** index: 171 */ + { /** index: 173 */ "nr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 172 */ + { /** index: 174 */ "nso", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100400, 0x00100400}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 173 */ + { /** index: 175 */ "nv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00082202, 0x00082202}}, @@ -1622,125 +1637,125 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 174 */ + { /** index: 176 */ "ny", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 175 */ + { /** index: 177 */ "oc", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x040c2383, 0x040c2383}}, }, }, - { /** index: 176 */ + { /** index: 178 */ "om", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 177 */ + { /** index: 179 */ "or", RuneSet{ {ref: 0x000b, set: pageSet{0xfff99fee, 0xf3cdfdff, 0xb0c0398f, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 178 */ + { /** index: 180 */ "os", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 179 */ + { /** index: 181 */ "ota", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffc6, 0x000001fe, 0x40000000, 0x01000040, 0x0000a000, 0x00001000, 0x00000000}}, }, }, - { /** index: 180 */ + { /** index: 182 */ "pa", RuneSet{ {ref: 0x000a, set: pageSet{0xfff987e0, 0xd36dfdff, 0x1e003987, 0x001f0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 181 */ + { /** index: 183 */ "pa-pk", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 182 */ + { /** index: 184 */ "pap-an", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x160e2302, 0x160e2302}}, }, }, - { /** index: 183 */ + { /** index: 185 */ "pap-aw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, }, }, - { /** index: 184 */ + { /** index: 186 */ "pes", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 185 */ + { /** index: 187 */ "pl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x030000f0, 0x00000000, 0x0c00001e, 0x1e000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 186 */ + { /** index: 188 */ "prs", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 187 */ + { /** index: 189 */ "ps-af", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x000005f6, 0x50000000, 0x05480262, 0x10000a00, 0x00013000, 0x00000000}}, }, }, - { /** index: 188 */ + { /** index: 190 */ "ps-pk", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x000005f6, 0x50000000, 0x05480262, 0x10000a00, 0x00052000, 0x00000000}}, }, }, - { /** index: 189 */ + { /** index: 191 */ "pt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x143c278f, 0x143c278f}}, }, }, - { /** index: 190 */ + { /** index: 192 */ "qu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000}}, }, }, - { /** index: 191 */ + { /** index: 193 */ "quz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000}}, }, }, - { /** index: 192 */ + { /** index: 194 */ "raj", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 193 */ + { /** index: 195 */ "rif", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, @@ -1749,19 +1764,19 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00002000, 0x00000020, 0x08000000, 0x00002008, 0x00080000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 194 */ + { /** index: 196 */ "rm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02045301, 0x02045301}}, }, }, - { /** index: 195 */ + { /** index: 197 */ "rn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 196 */ + { /** index: 198 */ "ro", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00004004, 0x00004004}}, @@ -1769,43 +1784,43 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x0f000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 197 */ + { /** index: 199 */ "ru", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 198 */ + { /** index: 200 */ "rw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 199 */ + { /** index: 201 */ "sa", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 200 */ + { /** index: 202 */ "sah", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00300000, 0x0c00c030, 0x03000000, 0x00000000}}, }, }, - { /** index: 201 */ + { /** index: 203 */ "sat", RuneSet{ {ref: 0x0009, set: pageSet{0xfff987ee, 0xf325fdff, 0x00013987, 0x0001fff0, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 202 */ + { /** index: 204 */ "sc", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02041101, 0x02041101}}, }, }, - { /** index: 203 */ + { /** index: 205 */ "sco", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1813,32 +1828,32 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 204 */ + { /** index: 206 */ "sd", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07fffdd6, 0x000005f6, 0xec000000, 0x0200b4d9, 0x480a8640, 0x00000000, 0x00000000}}, }, }, - { /** index: 205 */ + { /** index: 207 */ "se", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000002, 0x00000002}}, {ref: 0x0001, set: pageSet{0x00033000, 0x00000000, 0x00000c00, 0x600000c3, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 206 */ + { /** index: 208 */ "sel", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 207 */ + { /** index: 209 */ "sg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1850cc14, 0x1850cc14}}, }, }, - { /** index: 208 */ + { /** index: 210 */ "sgs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00200000}}, @@ -1846,7 +1861,7 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 209 */ + { /** index: 211 */ "sh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1854,73 +1869,73 @@ var languagesRunes = [...]struct { {ref: 0x0004, set: pageSet{0xffff8f04, 0xffffffff, 0x8f04ffff, 0x00000000, 0x030c0000, 0x0c00cc0f, 0x03000000, 0x00000300}}, }, }, - { /** index: 210 */ + { /** index: 212 */ "shn", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 211 */ + { /** index: 213 */ "shs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00800000, 0x03bffbaa, 0x03bffbaa, 0x00000000, 0x00000000, 0x00002202, 0x00002202}}, {ref: 0x0003, set: pageSet{0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 212 */ + { /** index: 214 */ "si", RuneSet{ {ref: 0x000d, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfc7e3fec, 0x2ffbffbf, 0x7f5f847f, 0x00040000}}, }, }, - { /** index: 213 */ + { /** index: 215 */ "sid", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 214 */ + { /** index: 216 */ "sk", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24182212, 0x24182212}}, {ref: 0x0001, set: pageSet{0x0000f000, 0x66000000, 0x00300180, 0x60000033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 215 */ + { /** index: 217 */ "sl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000330c0, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 216 */ + { /** index: 218 */ "sm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 217 */ + { /** index: 219 */ "sma", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00408030, 0x00408030}}, }, }, - { /** index: 218 */ + { /** index: 220 */ "smj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020032, 0x00020032}}, }, }, - { /** index: 219 */ + { /** index: 221 */ "smn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000016, 0x00000016}}, {ref: 0x0001, set: pageSet{0x00033000, 0x00000000, 0x00000c00, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 220 */ + { /** index: 222 */ "sms", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00200034, 0x00200034}}, @@ -1928,183 +1943,183 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 221 */ + { /** index: 223 */ "sn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 222 */ + { /** index: 224 */ "so", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 223 */ + { /** index: 225 */ "sq", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000880, 0x00000880}}, }, }, - { /** index: 224 */ + { /** index: 226 */ "sr", RuneSet{ {ref: 0x0004, set: pageSet{0xfdff8f04, 0xfdff01ff, 0x8f0401ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 225 */ + { /** index: 227 */ "ss", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 226 */ + { /** index: 228 */ "st", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 227 */ + { /** index: 229 */ "su", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000200, 0x00000200}}, }, }, - { /** index: 228 */ + { /** index: 230 */ "sv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10400a33, 0x10400a33}}, }, }, - { /** index: 229 */ + { /** index: 231 */ "sw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 230 */ + { /** index: 232 */ "syr", RuneSet{ {ref: 0x0007, set: pageSet{0xffff0000, 0xffff1fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 231 */ + { /** index: 233 */ "szl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00380008, 0x00080000}}, {ref: 0x0001, set: pageSet{0x030000f0, 0x00000000, 0x0c00501e, 0x1e004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 232 */ + { /** index: 234 */ "ta", RuneSet{ {ref: 0x000b, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xd63dc7e8, 0xc3bfc718, 0x00803dc7, 0x00000000}}, }, }, - { /** index: 233 */ + { /** index: 235 */ "tcy", RuneSet{ {ref: 0x000c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffddfec, 0xc3effdff, 0x40603ddf, 0x00000003}}, }, }, - { /** index: 234 */ + { /** index: 236 */ "te", RuneSet{ {ref: 0x000c, set: pageSet{0xfffddfee, 0xc3effdff, 0x00603ddf, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 235 */ + { /** index: 237 */ "tg", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x0c0c0000, 0x00cc0000, 0x00000000, 0x0000c00c}}, }, }, - { /** index: 236 */ + { /** index: 238 */ "th", RuneSet{ {ref: 0x000e, set: pageSet{0xfffffffe, 0x87ffffff, 0x00007fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 237 */ + { /** index: 239 */ "the", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 238 */ + { /** index: 240 */ "ti-er", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff00, 0x3d7f3d7f, 0xffff7fff, 0xffff0000, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 239 */ + { /** index: 241 */ "ti-et", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 240 */ + { /** index: 242 */ "tig", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff00, 0x00003d7f, 0xffff7fff, 0x00ff0000, 0x003d7f7f, 0xff7f7f00, 0x00ff7f00}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 241 */ + { /** index: 243 */ "tk", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x30400090, 0x30400090}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0xc0000180, 0x60000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 242 */ + { /** index: 244 */ "tl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e1e7707, 0x0e1e7707}}, }, }, - { /** index: 243 */ + { /** index: 245 */ "tn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100400, 0x00100400}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 244 */ + { /** index: 246 */ "to", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 245 */ + { /** index: 247 */ "tpi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 246 */ + { /** index: 248 */ "tr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x18404084, 0x18404084}}, {ref: 0x0001, set: pageSet{0xc0000000, 0x00030000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 247 */ + { /** index: 249 */ "ts", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 248 */ + { /** index: 250 */ "tt", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00c00000, 0x0c00c00c, 0x03000000, 0x00000000}}, }, }, - { /** index: 249 */ + { /** index: 251 */ "tw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, @@ -2114,7 +2129,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x03000000}}, }, }, - { /** index: 250 */ + { /** index: 252 */ "ty", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00008000, 0x00008000}}, @@ -2122,25 +2137,25 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 251 */ + { /** index: 253 */ "tyv", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c00c, 0x00000000, 0x00000000}}, }, }, - { /** index: 252 */ + { /** index: 254 */ "ug", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x041ed5c0, 0x0000077e, 0x40000000, 0x01000040, 0x4000a000, 0x002109c0, 0x00000000}}, }, }, - { /** index: 253 */ + { /** index: 255 */ "uk", RuneSet{ {ref: 0x0004, set: pageSet{0xffff00d0, 0xffffffff, 0x00d0ffff, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 254 */ + { /** index: 256 */ "und-zmth", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0xffffff7b, 0x7fffffff, 0x7ffffffe, 0x00000000, 0x80e310fe, 0x00800000, 0x00800000}}, @@ -2157,7 +2172,7 @@ var languagesRunes = [...]struct { {ref: 0x01d6, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000}}, }, }, - { /** index: 255 */ + { /** index: 257 */ "und-zsye", RuneSet{ {ref: 0x0023, set: pageSet{0x0c000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00091e00}}, @@ -2174,32 +2189,32 @@ var languagesRunes = [...]struct { {ref: 0x01f6, set: pageSet{0x755dfffe, 0xffef2f3f, 0x0000ffe1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 256 */ + { /** index: 258 */ "unm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 257 */ + { /** index: 259 */ "ur", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 258 */ + { /** index: 260 */ "uz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 259 */ + { /** index: 261 */ "ve", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x001e, set: pageSet{0x000c0000, 0x30000000, 0x00000c30, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 260 */ + { /** index: 262 */ "vi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x263c370f, 0x263c370f}}, @@ -2208,71 +2223,71 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x03ffffff}}, }, }, - { /** index: 261 */ + { /** index: 263 */ "vo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x077dfffe, 0x077dfffe, 0x00000000, 0x00000000, 0x10400010, 0x10400010}}, }, }, - { /** index: 262 */ + { /** index: 264 */ "vot", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10400010, 0x10400010}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 263 */ + { /** index: 265 */ "wa", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x081047a4, 0x081047a4}}, }, }, - { /** index: 264 */ + { /** index: 266 */ "wae", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 265 */ + { /** index: 267 */ "wal", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 266 */ + { /** index: 268 */ "wen", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x0c0030c0, 0x00000000, 0x0f30001e, 0x66000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 267 */ + { /** index: 269 */ "wo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x000a0a09, 0x000a0a09}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 268 */ + { /** index: 270 */ "xh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 269 */ + { /** index: 271 */ "yap", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00400810, 0x00400810}}, }, }, - { /** index: 270 */ + { /** index: 272 */ "yi", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x000007ff}}, }, }, - { /** index: 271 */ + { /** index: 273 */ "yo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e3c770f, 0x0e3c770f}}, @@ -2281,7 +2296,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0xc0000000, 0x00000000, 0x0000000c, 0x00000000, 0x33000000, 0x00003000, 0x00000000}}, }, }, - { /** index: 272 */ + { /** index: 274 */ "yue", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2457,19 +2472,19 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 273 */ + { /** index: 275 */ "yuw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 274 */ + { /** index: 276 */ "za", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 275 */ + { /** index: 277 */ "zh-cn", RuneSet{ {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000280, 0x00000000}}, @@ -2556,7 +2571,7 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x02896800, 0x6a809005, 0x00030010, 0x80000000, 0x8e001ff9, 0x00000001, 0x00000000, 0x00000000}}, }, }, - { /** index: 276 */ + { /** index: 278 */ "zh-hk", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2732,7 +2747,7 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 277 */ + { /** index: 279 */ "zh-mo", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2908,7 +2923,7 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 278 */ + { /** index: 280 */ "zh-sg", RuneSet{ {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000280, 0x00000000}}, @@ -2995,7 +3010,7 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x02896800, 0x6a809005, 0x00030010, 0x80000000, 0x8e001ff9, 0x00000001, 0x00000000, 0x00000000}}, }, }, - { /** index: 279 */ + { /** index: 281 */ "zh-tw", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -3083,7 +3098,7 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 280 */ + { /** index: 282 */ "zu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, diff --git a/fontscan/langset_test.go b/fontscan/langset_test.go index 3104f899..67ac50c7 100644 --- a/fontscan/langset_test.go +++ b/fontscan/langset_test.go @@ -28,10 +28,10 @@ func TestNewLanguageID(t *testing.T) { {language.NewLanguage("az-ir"), 15, true}, {language.NewLanguage("az-xx"), 0, false}, // no match {language.NewLanguage("BR"), 30, true}, - {language.NewLanguage("FR"), 69, true}, - {language.NewLanguage("fr-be"), 69, true}, - {language.NewLanguage("pa-pk"), 181, true}, // exact match - {language.NewLanguage("pa-pr"), 180, true}, // primary tag match + {language.NewLanguage("FR"), 70, true}, + {language.NewLanguage("fr-be"), 70, true}, + {language.NewLanguage("pa-pk"), 183, true}, // exact match + {language.NewLanguage("pa-pr"), 182, true}, // primary tag match } for _, tt := range tests { got, got1 := NewLangID(tt.l) diff --git a/fontscan/serialize.go b/fontscan/serialize.go index 3e118e94..faca04c6 100644 --- a/fontscan/serialize.go +++ b/fontscan/serialize.go @@ -185,7 +185,7 @@ func (ff *fileFootprints) deserializeFrom(src []byte) error { return nil } -const cacheFormatVersion = 5 +const cacheFormatVersion = 6 func max(i, j int) int { if i > j { From 25752117e9d28f7dad34c5b4282f0bbc84025b58 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Thu, 2 Jan 2025 19:09:02 +0100 Subject: [PATCH 05/14] [fontscan] make test platform independant --- fontscan/fontmap_test.go | 157 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 145 insertions(+), 12 deletions(-) diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index 9550ff15..928ba0d2 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -7,7 +7,6 @@ import ( "log" "os" "path/filepath" - "runtime" "testing" "time" @@ -320,21 +319,155 @@ func TestFindSytemFont(t *testing.T) { tu.Assert(t, !ok) // user provided font are ignored } -func TestResolveSameScript(t *testing.T) { - if runtime.GOOS != "linux" { - t.Skip() +func TestResolve_ScriptBengali(t *testing.T) { + // this sample fontset is build from a "typical linux" system, + // looking for Lohit-Bengali, NimbusSans, and Lohit-Devanagari + // families + bengaliFontSet := fontSet{ + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Bold.otf"}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-BoldItalic.otf"}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Italic.otf"}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/lohit-bengali/Lohit-Bengali.ttf"}, + Family: "lohitbengali", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, + {0x9, pageSet{0x0, 0x0, 0x0, 0x30, 0xfff99fef, 0xf3fdfdff, 0xb0807f9f, 0xfffffcf}}, + {0x20, pageSet{0x3ff83000, 0x40, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, + {0x22, pageSet{0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x42656e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x10000200, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/lohit-devanagari/Lohit-Devanagari.ttf"}, + Family: "lohitdevanagari", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xcfcff0ff, 0xffffcf8f, 0xcfff31ff, 0x7f0fcc3f, 0x40000, 0x0, 0x0, 0x0}}, + {0x2, pageSet{0xf000000, 0x800000, 0x0, 0x0, 0x0, 0x10000000, 0x3f0000c0, 0x0}}, + {0x3, pageSet{0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0}}, + {0x9, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, + {0x1c, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000}}, + {0x20, pageSet{0xfff83000, 0x601007f, 0x10, 0x0, 0x1f, 0x2001000, 0x0, 0x0}}, + {0x21, pageSet{0x80000, 0x407c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x22, pageSet{0x7c07807c, 0x800, 0x100, 0x30, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00, 0x0}}, + {0xa8, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fffffff}}, + {0xfb, pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x44657661, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x743c7429c3c430c9, 0x882084e39fe115fc, 0x8b066ff86023ecc8, 0x13b880fb9b021b74, 0x418d794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, } - // we assume the system contains at least these fonts : - // lohit-bengali/Lohit-Bengali.ttf - // urw-base35/NimbusSans-Regular.otf - // lohit-devanagari/Lohit-Devanagari.ttf - // make sure the same font is selected for a given script, when possible - text := []rune("হয় না।") fm := NewFontMap(log.New(io.Discard, "", 0)) - err := fm.UseSystemFonts(os.TempDir()) - tu.AssertNoErr(t, err) + fm.appendFootprints(bengaliFontSet...) + // make sure the same font is selected for a given script, when possible + text := []rune("হয় না।") fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) tu.Assert(t, len(runs) == 1) From b481069dc508e10a6ded3b595fb022ae782220c3 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Thu, 2 Jan 2025 20:04:09 +0100 Subject: [PATCH 06/14] [fontscan] fix test for all platforms --- fontscan/fontmap_test.go | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index 928ba0d2..b38cccdc 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -320,12 +320,16 @@ func TestFindSytemFont(t *testing.T) { } func TestResolve_ScriptBengali(t *testing.T) { + // we need a valid font file so that [ResolveFace] works; + // the actual content of the file is not used + dummyTestFont := "../font/testdata/Amiri-Regular.ttf" + // this sample fontset is build from a "typical linux" system, // looking for Lohit-Bengali, NimbusSans, and Lohit-Devanagari // families bengaliFontSet := fontSet{ { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Bold.otf"}, + Location: Location{File: dummyTestFont}, Family: "nimbussans", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -350,7 +354,7 @@ func TestResolve_ScriptBengali(t *testing.T) { Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, }, { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-BoldItalic.otf"}, + Location: Location{File: dummyTestFont}, Family: "nimbussans", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -375,7 +379,7 @@ func TestResolve_ScriptBengali(t *testing.T) { Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, }, { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Italic.otf"}, + Location: Location{File: dummyTestFont}, Family: "nimbussans", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -400,7 +404,7 @@ func TestResolve_ScriptBengali(t *testing.T) { Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, }, { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"}, + Location: Location{File: dummyTestFont}, Family: "nimbussans", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -425,7 +429,7 @@ func TestResolve_ScriptBengali(t *testing.T) { Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, }, { - Location: Location{File: "/usr/share/fonts/truetype/lohit-bengali/Lohit-Bengali.ttf"}, + Location: Location{File: dummyTestFont}, Family: "lohitbengali", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, @@ -440,7 +444,7 @@ func TestResolve_ScriptBengali(t *testing.T) { Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, }, { - Location: Location{File: "/usr/share/fonts/truetype/lohit-devanagari/Lohit-Devanagari.ttf"}, + Location: Location{File: dummyTestFont}, Family: "lohitdevanagari", Runes: RuneSet{ {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, @@ -471,5 +475,7 @@ func TestResolve_ScriptBengali(t *testing.T) { fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) tu.Assert(t, len(runs) == 1) - tu.Assert(t, runs[0].Face.Describe().Family == "Lohit Bengali") + // only one font is loaded, so there is no clash + family, _ := fm.FontMetadata(runs[0].Face.Font) + tu.Assert(t, family == "lohitbengali") } From 1f25438b88e118109edfdfc1d8a1987e767cbcb5 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Wed, 8 Jan 2025 14:25:43 +0100 Subject: [PATCH 07/14] [fontscan] include script fallback into candidates --- fontscan/fontmap.go | 72 +++---- fontscan/fontmap_sample_test.go | 339 ++++++++++++++++++++++++++++++++ fontscan/fontmap_test.go | 193 +++++------------- fontscan/match.go | 25 ++- fontscan/match_test.go | 2 +- fontscan/rune_coverage.go | 34 ++-- fontscan/rune_coverage_test.go | 52 ++++- 7 files changed, 498 insertions(+), 219 deletions(-) create mode 100644 fontscan/fontmap_sample_test.go diff --git a/fontscan/fontmap.go b/fontscan/fontmap.go index 63556ddd..2ecda6b6 100644 --- a/fontscan/fontmap.go +++ b/fontscan/fontmap.go @@ -6,7 +6,6 @@ import ( "os" "path/filepath" "runtime" - "sort" "sync" "github.com/go-text/typesetting/font" @@ -425,7 +424,7 @@ func (fm *FontMap) buildCandidates() { // first pass for an exact match { for _, family := range fm.query.Families { - candidates := fm.database.selectByFamilyExact(family, fm.script, fm.cribleBuffer, &fm.footprintsBuffer) + candidates := fm.database.selectByFamilyExact(family, fm.cribleBuffer, &fm.footprintsBuffer) if len(candidates) == 0 { continue } @@ -504,17 +503,24 @@ func (fm *FontMap) resolveForLang(candidates []int, lang LangID) *font.Face { return nil } -// ResolveFace select a font based on the current query (see `SetQuery`), +// ResolveFace select a font based on the current query (set by [FontMap.SetQuery] and [FontMap.SetScript]), // and supporting the given rune, applying CSS font selection rules. -// The function will return nil if the underlying font database is empty, -// or if the file system is broken; otherwise the returned [font.Face] is always valid. // -// If no fonts match the current query for the current rune according to the -// builtin matching process, the fonts added manually by [AddFont] and [AddFace] -// will be searched in the order in which they were added for a font with coverage -// for the provided rune. The first font covering the requested rune will be returned. +// Fonts are tried in 3 steps : +// +// 1 - Only fonts matching exacly one of the [Query.Families] are considered; the list +// is prunned to keep the best match with [Query.Aspect] +// 2 - Fallback fonts are considered, that is fonts with similar families and fonts +// supporting the current script; the list is also prunned according to [Query.Aspect] +// 3 - All fonts matching the current script (set by [FontMap.SetScript]) are tried, +// ignoring [Query.Aspect] +// +// The fonts added manually by [AddFont] and [AddFace] +// will be searched in the order in which they were added. // -// If no fonts match after the manual font search, an arbitrary face will be returned. +// If no fonts match after these steps, an arbitrary face will be returned. +// This face will be nil only if the underlying font database is empty, +// or if the file system is broken; otherwise the returned [font.Face] is always valid. func (fm *FontMap) ResolveFace(r rune) (face *font.Face) { key := fm.lru.KeyFor(fm.query, fm.script, r) face, ok := fm.lru.Get(key, fm.query) @@ -534,50 +540,22 @@ func (fm *FontMap) ResolveFace(r rune) (face *font.Face) { return face } - // if no family has matched so far, try again with system fallback + // if no family has matched so far, try again with system fallback, + // including fonts with matching script and user provided ones if face := fm.resolveForRune(fm.candidates.withFallback, r); face != nil { return face } - // try manually loaded faces even if the typeface doesn't match, looking for matching aspects - // and rune coverage. - if face := fm.resolveForRune(fm.candidates.manual, r); face != nil { - return face - } - - fm.logger.Printf("No font matched for %q and rune %U (%c) -> searching by script coverage and aspect", fm.query.Families, r, r) + // no need to check from user provided fonts, since the one supporting the given script + // are already added in fallback fonts - script := language.LookupScript(r) - scriptCandidates, ok := fm.scriptMap[language.LookupScript(r)] - if ok { - aspectCandidates := make([]int, len(scriptCandidates)) - copy(aspectCandidates, scriptCandidates) - // Filter candidates to those matching the requested aspect first. - aspectCandidates = fm.database.retainsBestMatches(aspectCandidates, fm.query.Aspect) - if face := fm.resolveForRune(aspectCandidates, r); face != nil { - return face - } - fm.logger.Printf("No font matched for aspect %v, script %s, and rune %U (%c) -> searching by script coverage only", fm.query.Aspect, script, r, r) - // aspectCandidates has been filtered down and has exactly enough excess capacity to hold - // the other original candidates. - allCandidates := aspectCandidates[len(aspectCandidates):len(aspectCandidates):cap(aspectCandidates)] - // Populate allCandidates with every script candidate that isn't in aspectCandidates. - for _, idx := range scriptCandidates { - possibleIdx := sort.Search(len(aspectCandidates), func(i int) bool { - return aspectCandidates[i] >= idx - }) - if possibleIdx < len(aspectCandidates) && aspectCandidates[possibleIdx] == idx { - continue - } - allCandidates = append(allCandidates, idx) - } - // Try allCandidates. - if face := fm.resolveForRune(allCandidates, r); face != nil { - return face - } + fm.logger.Printf("No font matched for aspect %v, script %s, and rune %U (%c) -> searching by script coverage only", fm.query.Aspect, fm.script, r, r) + scriptCandidates := fm.scriptMap[fm.script] + if face := fm.resolveForRune(scriptCandidates, r); face != nil { + return face } - fm.logger.Printf("No font matched for script %s and rune %U (%c) -> returning arbitrary face", script, r, r) + fm.logger.Printf("No font matched for script %s and rune %U (%c) -> returning arbitrary face", fm.script, r, r) // return an arbitrary face if fm.firstFace == nil && len(fm.database) > 0 { for _, fp := range fm.database { diff --git a/fontscan/fontmap_sample_test.go b/fontscan/fontmap_sample_test.go new file mode 100644 index 00000000..5decec17 --- /dev/null +++ b/fontscan/fontmap_sample_test.go @@ -0,0 +1,339 @@ +package fontscan + +import "github.com/go-text/typesetting/font" + +// we need a valid font file so that [ResolveFace] works; +// the actual content of the file is not used +const dummyTestFont = "../font/testdata/Amiri-Regular.ttf" + +// these sample fontsets are built from a "typical linux" system +// looking for some families +var ( + // Families: Lohit-Bengali, NimbusSans, and Lohit-Devanagari + bengaliFontSet = fontSet{ + { + Location: Location{File: dummyTestFont}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: dummyTestFont}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: dummyTestFont}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: dummyTestFont}, + Family: "nimbussans", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, + {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, + {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, + {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, + {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, + {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, + {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, + {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, + {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, + {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, + {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, + {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: dummyTestFont}, + Family: "lohitbengali", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, + {0x9, pageSet{0x0, 0x0, 0x0, 0x30, 0xfff99fef, 0xf3fdfdff, 0xb0807f9f, 0xfffffcf}}, + {0x20, pageSet{0x3ff83000, 0x40, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, + {0x22, pageSet{0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x42656e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x10000200, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: dummyTestFont}, + Family: "lohitdevanagari", + Runes: RuneSet{ + {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, + {0x1, pageSet{0xcfcff0ff, 0xffffcf8f, 0xcfff31ff, 0x7f0fcc3f, 0x40000, 0x0, 0x0, 0x0}}, + {0x2, pageSet{0xf000000, 0x800000, 0x0, 0x0, 0x0, 0x10000000, 0x3f0000c0, 0x0}}, + {0x3, pageSet{0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0}}, + {0x9, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, + {0x1c, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000}}, + {0x20, pageSet{0xfff83000, 0x601007f, 0x10, 0x0, 0x1f, 0x2001000, 0x0, 0x0}}, + {0x21, pageSet{0x80000, 0x407c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0x22, pageSet{0x7c07807c, 0x800, 0x100, 0x30, 0x0, 0x0, 0x0, 0x0}}, + {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00, 0x0}}, + {0xa8, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fffffff}}, + {0xfb, pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, + {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, + }, + Scripts: ScriptSet{0x44657661, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x743c7429c3c430c9, 0x882084e39fe115fc, 0x8b066ff86023ecc8, 0x13b880fb9b021b74, 0x418d794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + } + + // Families: Freeserif, NimbusSans, FreeSans, DejaVu, DejavuSans + thaanaFontSet = fontSet{ + { + Location: Location{File: dummyTestFont}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0x7f3ff4fbdfff7edf, 0xf963fdf7fffb77ff, 0x8b57effaf6ffedfb, 0xbff8a7ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansBold.otf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3f74fbcfff7cdf, 0xf963fcf7fffb77ff, 0x8b57effaf2ffedfb, 0xbff8a2ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansBoldOblique.otf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2f74fb4e3f7c5f, 0xf943fcf7ff1b77ff, 0x8b17efdad27f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansOblique.otf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e3f7e5f, 0xf943fcf7ff1b77ff, 0x8b17efdad67f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerif.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5ffdfefffff, 0xffebfcf7fffbffff, 0xffffeffaf6ffedff, 0xffffeeffffefffff, 0x41bfffd, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifBold.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5fbcfeffddf, 0xffebfcf7fffb37ff, 0xfff7effaf2ffedff, 0xfff8eeffff6fffff, 0x41bf7fc, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifBoldItalic.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb4e2f7c5f, 0xf943fcf7ff1b37ff, 0x8b17efdad27f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifItalic.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e2f7e5f, 0xf943fcf7ff1b37ff, 0x8b17efdad67f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Bold.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-BoldItalic.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Italic.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, + Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-ExtraLight.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x1, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffbff, 0xffffffff, 0xff3fffff}}, runePage{ref: 0x2, set: pageSet{0xcfffffff, 0x38ffff0, 0xffdf3fe0, 0xff3fa7ef, 0xff077faf, 0x7800ffff, 0x3f00ffc0, 0xf803e0}}, runePage{ref: 0x3, set: pageSet{0x8ffffff, 0x81fff1f8, 0xff008000, 0xfcff0003, 0xffffd7f0, 0xfffffffb, 0x1fe0ffff, 0xf3fe0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x7003e, 0x3030000, 0xc30fc3f, 0xffff0187, 0xc33fffff}}, runePage{ref: 0x5, set: pageSet{0x3fff0003, 0xfffe0000, 0xfc7fffff, 0xfffffffe, 0x6ff, 0x0, 0x0, 0x0}}, runePage{ref: 0x6, set: pageSet{0x0, 0x0, 0x0, 0x100000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1fffffff}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0x7dfee1c, 0xfff, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xbeff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xfe03ff73, 0x801ffbfd, 0x13fc1f, 0x1f, 0x3f021800, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0xc0c208, 0x1fffc0, 0x801c081e, 0xffffffff, 0x3ff023f, 0x0, 0x7f0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x1fc00ff, 0x10f00000, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0}}, runePage{ref: 0x23, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x8000, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800}}, runePage{ref: 0x2a, set: pageSet{0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x7e0c000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x1000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xff00f0, 0x7ffc, 0x3f03000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xc00f00ff, 0xc0c0, 0x0, 0x3803, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x4c697375, 0x4f67616d, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2f747b4e2e7c4d, 0xf942ecf7ff0b37fe, 0x8b17efdad27f8dfb, 0xb3f802ffff2791fb, 0x41af7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 200, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 0.875}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-BoldOblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 0.875}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Oblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 0.875}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 0.875}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSans.ttf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3ff4fbdfff7edf, 0xf963fdf7fffb77ff, 0x8b57effaf6ffedfb, 0xbff8a7ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3f74fbcfff7cdf, 0xf963fcf7fffb77ff, 0x8b57effaf2ffedfb, 0xbff8a2ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansBoldOblique.ttf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2f74fb4e3f7c5f, 0xf943fcf7ff1b77ff, 0x8b17efdad27f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf"}, + Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e3f7e5f, 0xf943fcf7ff1b77ff, 0x8b17efdad67f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5ffdfefffff, 0xffebfcf7fffbffff, 0xffffeffaf6ffedff, 0xffffeeffffefffff, 0x41bfffd, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifBold.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5fbcfeffddf, 0xffebfcf7fffb37ff, 0xfff7effaf2ffedff, 0xfff8eeffff6fffff, 0x41bf7fc, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifBoldItalic.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb4e2f7c5f, 0xf943fcf7ff1b37ff, 0x8b17efdad27f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, + }, + { + Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifItalic.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, + Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e2f7e5f, 0xf943fcf7ff1b37ff, 0x8b17efdad67f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, + }, + } +) diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index b38cccdc..139be46e 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -12,6 +12,7 @@ import ( "github.com/go-text/typesetting/font" ot "github.com/go-text/typesetting/font/opentype" + "github.com/go-text/typesetting/language" "github.com/go-text/typesetting/shaping" tu "github.com/go-text/typesetting/testutils" ) @@ -136,6 +137,7 @@ func TestResolveFallbackManual(t *testing.T) { tu.AssertNoErr(t, err) fm.SetQuery(Query{}) // no families + fm.SetScript(language.Latin) face := fm.ResolveFace('c') tu.Assert(t, fm.FontLocation(face.Font).File == "user:Amiri") @@ -144,6 +146,34 @@ func TestResolveFallbackManual(t *testing.T) { tu.Assert(t, face != nil && fm.FontLocation(face.Font).File == "user:Amiri") } +func TestResolveLang(t *testing.T) { + logger := log.New(os.Stdout, "", 0) + fm := NewFontMap(logger) + + file1, err := os.Open("../font/testdata/Amiri-Regular.ttf") + tu.AssertNoErr(t, err) + defer file1.Close() + + file2, err := os.Open("../font/testdata/Roboto-Regular.ttf") + tu.AssertNoErr(t, err) + defer file2.Close() + + err = fm.AddFont(file1, "user:Amiri", "") + tu.AssertNoErr(t, err) + err = fm.AddFont(file2, "user:Roboto", "") + tu.AssertNoErr(t, err) + + en, _ := NewLangID("en") + // with fallback + face := fm.ResolveFaceForLang(en) + tu.Assert(t, face != nil && fm.FontLocation(face.Font).File == "user:Amiri") + + // exact + fm.SetQuery(Query{Families: []string{"Roboto"}}) + face = fm.ResolveFaceForLang(en) + tu.Assert(t, face != nil && fm.FontLocation(face.Font).File == "user:Roboto") +} + func TestRevolveFamilyConflict(t *testing.T) { logger := log.New(os.Stdout, "", 0) fm := NewFontMap(logger) @@ -320,153 +350,6 @@ func TestFindSytemFont(t *testing.T) { } func TestResolve_ScriptBengali(t *testing.T) { - // we need a valid font file so that [ResolveFace] works; - // the actual content of the file is not used - dummyTestFont := "../font/testdata/Amiri-Regular.ttf" - - // this sample fontset is build from a "typical linux" system, - // looking for Lohit-Bengali, NimbusSans, and Lohit-Devanagari - // families - bengaliFontSet := fontSet{ - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "lohitbengali", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, - {0x9, pageSet{0x0, 0x0, 0x0, 0x30, 0xfff99fef, 0xf3fdfdff, 0xb0807f9f, 0xfffffcf}}, - {0x20, pageSet{0x3ff83000, 0x40, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, - {0x22, pageSet{0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x42656e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x10000200, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "lohitdevanagari", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xcfcff0ff, 0xffffcf8f, 0xcfff31ff, 0x7f0fcc3f, 0x40000, 0x0, 0x0, 0x0}}, - {0x2, pageSet{0xf000000, 0x800000, 0x0, 0x0, 0x0, 0x10000000, 0x3f0000c0, 0x0}}, - {0x3, pageSet{0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0}}, - {0x9, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, - {0x1c, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000}}, - {0x20, pageSet{0xfff83000, 0x601007f, 0x10, 0x0, 0x1f, 0x2001000, 0x0, 0x0}}, - {0x21, pageSet{0x80000, 0x407c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x22, pageSet{0x7c07807c, 0x800, 0x100, 0x30, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00, 0x0}}, - {0xa8, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fffffff}}, - {0xfb, pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x44657661, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x743c7429c3c430c9, 0x882084e39fe115fc, 0x8b066ff86023ecc8, 0x13b880fb9b021b74, 0x418d794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - } - fm := NewFontMap(log.New(io.Discard, "", 0)) fm.appendFootprints(bengaliFontSet...) @@ -475,7 +358,21 @@ func TestResolve_ScriptBengali(t *testing.T) { fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) tu.Assert(t, len(runs) == 1) - // only one font is loaded, so there is no clash + // only one font is loaded, so there is no Location.File collision family, _ := fm.FontMetadata(runs[0].Face.Font) tu.Assert(t, family == "lohitbengali") } + +func TestResolve_ScriptThaana(t *testing.T) { + fm := NewFontMap(log.New(io.Discard, "", 0)) + fm.appendFootprints(thaanaFontSet...) + + // make sure the same font is selected for a given script, when possible + text := []rune("އުފަންވަނީ، ދަރަޖަ") + fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) + runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) + tu.Assert(t, len(runs) == 1) + // only one font is loaded, so there is no Location.File collision + family, _ := fm.FontMetadata(runs[0].Face.Font) + tu.Assert(t, family == "freeserif") +} diff --git a/fontscan/match.go b/fontscan/match.go index 0aaef6e8..d4313ec4 100644 --- a/fontscan/match.go +++ b/fontscan/match.go @@ -1,6 +1,7 @@ package fontscan import ( + "math" "sort" "github.com/go-text/typesetting/font" @@ -94,6 +95,7 @@ func (sf scoredFootprints) Less(i int, j int) bool { } else if !scorei.strong && scorej.strong { return false } + // among strong substitutions, only use the score if scorei.strong { if scorei.score < scorej.score { return true @@ -156,8 +158,7 @@ func isGenericFamily(family string) bool { // The returned slice may be empty if no font matches the given `family`. // // The buffers are used to reduce allocations and the returned slice is owned by them. -func (fm fontSet) selectByFamilyExact(family string, script language.Script, - cribleBuffer familyCrible, footprintsBuffer *scoredFootprints, +func (fm fontSet) selectByFamilyExact(family string, cribleBuffer familyCrible, footprintsBuffer *scoredFootprints, ) []int { if isGenericFamily(family) { // See the CSS spec (https://www.w3.org/TR/css-fonts-4/#font-style-matching) : @@ -176,7 +177,7 @@ func (fm fontSet) selectByFamilyExact(family string, script language.Script, cribleBuffer.reset() cribleBuffer.fillWithSubstitutions(family) - footprints := fm.selectByFamilies(cribleBuffer, script, footprintsBuffer) + footprints := fm.selectByFamiliesAndScript(cribleBuffer, 0, footprintsBuffer) // restrict to one 'concrete' family name if len(footprints) == 0 { @@ -194,8 +195,9 @@ func (fm fontSet) selectByFamilyExact(family string, script language.Script, } // regular family : perform a simple match against the exact family name, without substitutions + // nor script matching cribleBuffer = familyCrible{font.NormalizeFamily(family): scoreStrong{0, true}} - return fm.selectByFamilies(cribleBuffer, script, footprintsBuffer) + return fm.selectByFamiliesAndScript(cribleBuffer, 0, footprintsBuffer) } // selectByFamilyExact returns all the fonts in the fontmap matching @@ -208,19 +210,28 @@ func (fm fontSet) selectByFamilyWithSubs(queryFamilies []string, queryScript lan // build the crible, handling substitutions cribleBuffer.reset() cribleBuffer.fillWithSubstitutionsList(queryFamilies) - return fm.selectByFamilies(cribleBuffer, queryScript, footprintsBuffer) + return fm.selectByFamiliesAndScript(cribleBuffer, queryScript, footprintsBuffer) } // select the fonts in the fontSet matching [crible], returning their (sorted) indices. // [footprintsBuffer] is used to reduce allocations. -func (fm fontSet) selectByFamilies(crible familyCrible, script language.Script, footprintsBuffer *scoredFootprints) []int { +// If [script] is 0, no font with matching script is added +func (fm fontSet) selectByFamiliesAndScript(crible familyCrible, script language.Script, footprintsBuffer *scoredFootprints) []int { footprintsBuffer.reset(fm, script) - // loop through the font set and stores the matching fonts into the buffer + // loop through the font set and stores the matching fonts into + // the footprintsBuffer, to be sorted. + worstScore := math.MaxInt - len(fm) for index, footprint := range fm { if score, has := crible[footprint.Family]; has { + // match by family footprintsBuffer.footprints = append(footprintsBuffer.footprints, index) footprintsBuffer.scores = append(footprintsBuffer.scores, score) + } else if footprint.Scripts.contains(script) { + // match by script: add with a score worse than any family match, + // preserving the insertion order into the fontset + footprintsBuffer.footprints = append(footprintsBuffer.footprints, index) + footprintsBuffer.scores = append(footprintsBuffer.scores, scoreStrong{worstScore + index, false}) } } diff --git a/fontscan/match_test.go b/fontscan/match_test.go index f1be12ef..20f9683b 100644 --- a/fontscan/match_test.go +++ b/fontscan/match_test.go @@ -61,7 +61,7 @@ func TestFontSet_selectByFamilyExact(t *testing.T) { }, } for _, tt := range tests { - if got := tt.fontset.selectByFamilyExact(tt.family, 0, make(familyCrible), &scoredFootprints{}); !reflect.DeepEqual(got, tt.want) { + if got := tt.fontset.selectByFamilyExact(tt.family, make(familyCrible), &scoredFootprints{}); !reflect.DeepEqual(got, tt.want) { t.Errorf("fontSet.selectByFamilyExact(%s) = \n%v, want \n%v", tt.family, got, tt.want) } } diff --git a/fontscan/rune_coverage.go b/fontscan/rune_coverage.go index 0ad9c902..db817309 100644 --- a/fontscan/rune_coverage.go +++ b/fontscan/rune_coverage.go @@ -320,28 +320,36 @@ func (rs *RuneSet) deserializeFrom(data []byte) (int, error) { // a sorted slice of unique, increasing scripts type ScriptSet []language.Script -func (s ScriptSet) contains(script language.Script) bool { - scriptIdx := sort.Search(len([]language.Script(s)), func(i int) bool { - return (s)[i] >= script - }) - return scriptIdx != len(s) && (s)[scriptIdx] == script +// contains returns true is [s] is in the set. +func (ss ScriptSet) contains(s language.Script) bool { + // we use a linear search since in practice the script sets are + // rather small (see BenchmarkScriptSet_contains) + for _, script := range ss { + if script > s { // optimization, using the fact the slice is increasing + return false + } + if script == s { + return true + } + } + return false } // insert adds the given script to the set if it is not already present. -func (s *ScriptSet) insert(newScript language.Script) { - scriptIdx := sort.Search(len([]language.Script(*s)), func(i int) bool { - return (*s)[i] >= newScript +func (ss *ScriptSet) insert(newScript language.Script) { + scriptIdx := sort.Search(len([]language.Script(*ss)), func(i int) bool { + return (*ss)[i] >= newScript }) - if scriptIdx != len(*s) && (*s)[scriptIdx] == newScript { + if scriptIdx != len(*ss) && (*ss)[scriptIdx] == newScript { return } // Grow the slice if necessary. - startLen := len(*s) - *s = append(*s, language.Script(0))[:startLen] + startLen := len(*ss) + *ss = append(*ss, language.Script(0))[:startLen] // Shift all elements from scriptIdx onward to the right one position. - *s = append((*s)[:scriptIdx+1], (*s)[scriptIdx:]...) + *ss = append((*ss)[:scriptIdx+1], (*ss)[scriptIdx:]...) // Insert newScript at the correct position. - (*s)[scriptIdx] = newScript + (*ss)[scriptIdx] = newScript } const scriptSize = 4 diff --git a/fontscan/rune_coverage_test.go b/fontscan/rune_coverage_test.go index 2cf86417..2cea3d53 100644 --- a/fontscan/rune_coverage_test.go +++ b/fontscan/rune_coverage_test.go @@ -310,7 +310,7 @@ func TestScriptSet(t *testing.T) { toInsert: func() []language.Script { scripts := make([]language.Script, 0, len(testScripts)*10) for i := 0; i < 10; i++ { - scripts = append(scripts, testScripts...) + scripts = append(scripts, testScripts[:]...) } rand.Seed(0) rand.Shuffle(len(scripts), func(i, j int) { @@ -318,7 +318,7 @@ func TestScriptSet(t *testing.T) { }) return scripts }(), - expected: testScripts, + expected: testScripts[:], }, } { t.Run(tc.name, func(t *testing.T) { @@ -528,6 +528,52 @@ func BenchmarkIsIncludedIn(b *testing.B) { } } +// containsBinarySearch uses [sort.Search] and is used as reference to +// test [contains] results +func (ss ScriptSet) containsBinarySearch(script language.Script) bool { + scriptIdx := sort.Search(len([]language.Script(ss)), func(i int) bool { + return (ss)[i] >= script + }) + return scriptIdx != len(ss) && (ss)[scriptIdx] == script +} + +func TestScriptSet_contains(t *testing.T) { + fonts, err := SystemFonts(nil, os.TempDir()) + tu.AssertNoErr(t, err) + + for _, script := range testScripts { + for _, font := range fonts { + tu.Assert(t, font.Scripts.containsBinarySearch(script) == font.Scripts.contains(script)) + } + } +} + +func BenchmarkScriptSet_contains(b *testing.B) { + fonts, err := SystemFonts(nil, os.TempDir()) + tu.AssertNoErr(b, err) + b.ResetTimer() + + b.Run("linear", func(b *testing.B) { + for i := 0; i < b.N; i++ { + for _, script := range testScripts { + for _, font := range fonts { + font.Scripts.contains(script) + } + } + } + }) + + b.Run("binary search", func(b *testing.B) { + for i := 0; i < b.N; i++ { + for _, script := range testScripts { + for _, font := range fonts { + font.Scripts.containsBinarySearch(script) + } + } + } + }) +} + func min(a, b int) int { if a < b { return a @@ -535,7 +581,7 @@ func min(a, b int) int { return b } -var testScripts = []language.Script{ +var testScripts = [...]language.Script{ language.Adlam, language.Afaka, language.Ahom, From 478aab0c73222f27512c6608c07f7a1dcbf79cbe Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Wed, 8 Jan 2025 14:31:43 +0100 Subject: [PATCH 08/14] [fontscan] use SetScript in tests --- fontscan/fontmap_test.go | 12 +++++++++++- fontscan/readme.md | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index 139be46e..719f2545 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -23,6 +23,8 @@ func ExampleFontMap_UseSystemFonts() { // set the font description fontMap.SetQuery(Query{Families: []string{"Arial", "serif"}}) // regular Aspect + // set the script, if known in advance + fontMap.SetScript(language.Latin) // `fontMap` is now ready for text shaping, using the `ResolveFace` method } @@ -37,6 +39,8 @@ func ExampleFontMap_AddFont() { // set the font description fontMap.SetQuery(Query{Families: []string{"Arial", "serif"}}) // regular Aspect + // set the script, if known in advance + fontMap.SetScript(language.Latin) // `fontMap` is now ready for text shaping, using the `ResolveFace` method } @@ -55,6 +59,8 @@ func ExampleFontMap_AddFace() { // set the font description fontMap.SetQuery(Query{Families: []string{"Arial", "serif"}}) // regular Aspect + // set the script, if known in advance + fontMap.SetScript(language.Latin) // `fontMap` is now ready for text shaping, using the `ResolveFace` method } @@ -189,6 +195,7 @@ func TestRevolveFamilyConflict(t *testing.T) { fm.AddFont(file1, "user:amiri", "Arimo") fm.SetQuery(Query{Families: []string{"Arimo"}}) + fm.SetScript(language.Latin) tu.Assert(t, fm.FontLocation(fm.ResolveFace('a').Font).File == "user:amiri") } @@ -200,6 +207,7 @@ func BenchmarkResolveFont(b *testing.B) { tu.AssertNoErr(b, err) fm.SetQuery(Query{Families: []string{"helvetica"}, Aspect: font.Aspect{Weight: font.WeightBold}}) + fm.SetScript(language.Latin) b.ResetTimer() @@ -292,7 +300,8 @@ func TestFontMap_AddFont_FaceLocation(t *testing.T) { tu.AssertNoErr(t, err) fm.SetQuery(Query{Families: []string{"MyRoboto"}}) - face := fm.ResolveFace(0x20) + fm.SetScript(language.Latin) + face := fm.ResolveFace(' ') tu.Assert(t, fm.FontLocation(face.Font).File == "Roboto2") } @@ -315,6 +324,7 @@ func TestQueryHelveticaLinux(t *testing.T) { "BlinkMacSystemFont", // 'unknown' family "Helvetica", }}) + fm.SetScript(language.Latin) family, _ := fm.FontMetadata(fm.ResolveFace('x').Font) tu.Assert(t, family == font.NormalizeFamily("Nimbus Sans")) // prefered Helvetica replacement } diff --git a/fontscan/readme.md b/fontscan/readme.md index a38f9194..5e14c301 100644 --- a/fontscan/readme.md +++ b/fontscan/readme.md @@ -12,7 +12,10 @@ This package may be used by UI toolkits and markup language renderers. Both use- The entry point of the library is the `FontMap` type. It should be created for each text shaping task and be filled either with system fonts (by calling `UseSystemFonts`) or with user-provided font files (using `AddFont`, `AddFace`), or both. To leverage all the system fonts, the first usage of `UseSystemFonts` triggers a scan which builds a font index. Its content is saved on disk so that subsequent usage by the same app are not slowed down by this step. -Once initialized, the font map is used to select fonts matching a `Query` with `SetQuery`. A query is defined by one or several families and an `Aspect`, containining style, weight, stretchiness. Finally, the font map satisfies the `shaping.Fontmap` interface, so that is may be used with `shaping.SplitByFace`. +Once initialized, the font map is used to select fonts matching a `Query` with `SetQuery`. A query is defined by one or several families and an `Aspect`, containining style, weight, stretchiness. `SetScript` may be called to +influence fallback font resolution. + +Finally, the font map satisfies the `shaping.Fontmap` interface, so that is may be used with `shaping.SplitByFace`. ## Zoom on the implementation From d55d4746612d881b299ae7893acd10d8035a1d6b Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Sat, 11 Jan 2025 12:13:05 +0100 Subject: [PATCH 09/14] [fontscan] implement language based substitutions (related to #82) --- fontscan/langset_gen.go | 867 +++++++++++++++++++++----------- fontscan/langset_test.go | 18 +- fontscan/substitutions.go | 51 +- fontscan/substitutions_table.go | 156 +++--- fontscan/substitutions_test.go | 67 ++- 5 files changed, 737 insertions(+), 422 deletions(-) diff --git a/fontscan/langset_gen.go b/fontscan/langset_gen.go index a8c6d27b..c5129658 100755 --- a/fontscan/langset_gen.go +++ b/fontscan/langset_gen.go @@ -29,32 +29,33 @@ var languagesRunes = [...]struct { lang language.Language runes RuneSet // sorted, inclusive ranges }{ - { /** index: 0 */ + {}, + { /** index: 1 */ "aa", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x08104404, 0x08104404}}, }, }, - { /** index: 1 */ + { /** index: 2 */ "ab", RuneSet{ {ref: 0x0004, set: pageSet{0xffff8002, 0xffffffff, 0x8002ffff, 0x00000000, 0xc0000000, 0xf0fc33c0, 0x03000000, 0x00000003}}, }, }, - { /** index: 2 */ + { /** index: 3 */ "af", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0810cf00, 0x0810cf00}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000200, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 3 */ + { /** index: 4 */ "agr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x04000000}}, }, }, - { /** index: 4 */ + { /** index: 5 */ "ak", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, @@ -64,63 +65,63 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x03000000}}, }, }, - { /** index: 5 */ + { /** index: 6 */ "am", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x00003d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f00, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 6 */ + { /** index: 7 */ "an", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, }, }, - { /** index: 7 */ + { /** index: 8 */ "anp", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 8 */ + { /** index: 9 */ "ar", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07fffffe, 0x000007fe, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 9 */ + { /** index: 10 */ "as", RuneSet{ {ref: 0x0009, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfff99fee, 0xd3c4fdff, 0xb000399f, 0x00030000}}, }, }, - { /** index: 10 */ + { /** index: 11 */ "ast", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, {ref: 0x001e, set: pageSet{0x00000000, 0x00c00030, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 11 */ + { /** index: 12 */ "av", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 12 */ + { /** index: 13 */ "ay", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10028010, 0x10028010}}, }, }, - { /** index: 13 */ + { /** index: 14 */ "ayc", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x10028010}}, }, }, - { /** index: 14 */ + { /** index: 15 */ "az-az", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10400080, 0x10400080}}, @@ -128,31 +129,31 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x02000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 15 */ + { /** index: 16 */ "az-ir", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 16 */ + { /** index: 17 */ "ba", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffffffff, 0x0000ffff, 0x00000000, 0x030c0000, 0x0c00cc0f, 0x03000000, 0x00000300}}, }, }, - { /** index: 17 */ + { /** index: 18 */ "be", RuneSet{ {ref: 0x0004, set: pageSet{0xffff4040, 0xffffffff, 0x4040ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 18 */ + { /** index: 19 */ "bem", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 19 */ + { /** index: 20 */ "ber-dz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -161,43 +162,43 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00003000, 0x00000030, 0x00000000, 0x0000300c, 0x000c0000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 20 */ + { /** index: 21 */ "ber-ma", RuneSet{ {ref: 0x002d, set: pageSet{0x00000000, 0x3a8b0000, 0x9e78e6b9, 0x0000802e, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 21 */ + { /** index: 22 */ "bg", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffffd7ff, 0x0000d7ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 22 */ + { /** index: 23 */ "bh", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 23 */ + { /** index: 24 */ "bhb", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 24 */ + { /** index: 25 */ "bho", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 25 */ + { /** index: 26 */ "bi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10008200, 0x10008200}}, }, }, - { /** index: 26 */ + { /** index: 27 */ "bin", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060c3303, 0x060c3303}}, @@ -205,7 +206,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x03000000, 0x00003000, 0x00000000}}, }, }, - { /** index: 27 */ + { /** index: 28 */ "bm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -213,88 +214,88 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x08100000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 28 */ + { /** index: 29 */ "bn", RuneSet{ {ref: 0x0009, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfff99fee, 0xd3c5fdff, 0xb000399f, 0x00000000}}, }, }, - { /** index: 29 */ + { /** index: 30 */ "bo", RuneSet{ {ref: 0x000f, set: pageSet{0x00000000, 0x00000000, 0xfffffeff, 0x3d7e03ff, 0xfeff0003, 0x03ffffff, 0x00000000, 0x00000000}}, }, }, - { /** index: 30 */ + { /** index: 31 */ "br", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x12120404, 0x12120404}}, }, }, - { /** index: 31 */ + { /** index: 32 */ "brx", RuneSet{ {ref: 0x0009, set: pageSet{0xfff99fee, 0xf3e5fdff, 0x0007399f, 0x0001ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 32 */ + { /** index: 33 */ "bs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000330c0, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 33 */ + { /** index: 34 */ "bua", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0c00c000, 0x00000000, 0x00000000}}, }, }, - { /** index: 34 */ + { /** index: 35 */ "byn", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff00, 0x3d7f3d7f, 0xffff7fff, 0xffff0000, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 35 */ + { /** index: 36 */ "ca", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140ca381, 0x140ca381}}, {ref: 0x0001, set: pageSet{0x00000000, 0x80000000, 0x00000001, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 36 */ + { /** index: 37 */ "ce", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 37 */ + { /** index: 38 */ "ch", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10020004, 0x10020004}}, }, }, - { /** index: 38 */ + { /** index: 39 */ "chm", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000030, 0x000c0000, 0x030300c0}}, }, }, - { /** index: 39 */ + { /** index: 40 */ "chr", RuneSet{ {ref: 0x0013, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x001fffff}}, }, }, - { /** index: 40 */ + { /** index: 41 */ "ckb", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x061ef5c0, 0x000001f6, 0x40000000, 0x01040040, 0x00208210, 0x00005040, 0x00000000}}, }, }, - { /** index: 41 */ + { /** index: 42 */ "cmn", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -382,55 +383,55 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 42 */ + { /** index: 43 */ "co", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x000c0000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 43 */ + { /** index: 44 */ "cop", RuneSet{ {ref: 0x0003, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000fffc}}, {ref: 0x002c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe0fffff}}, }, }, - { /** index: 44 */ + { /** index: 45 */ "crh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10420084, 0x10420084}}, {ref: 0x0001, set: pageSet{0xc0000000, 0x00030000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 45 */ + { /** index: 46 */ "cs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, {ref: 0x0001, set: pageSet{0x0c00f000, 0x00000000, 0x03000180, 0x6000c033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 46 */ + { /** index: 47 */ "csb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x021c0a08, 0x021c0a08}}, {ref: 0x0001, set: pageSet{0x00000030, 0x00000000, 0x0000001e, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 47 */ + { /** index: 48 */ "cu", RuneSet{ {ref: 0x0004, set: pageSet{0xfdffa966, 0xffffdfff, 0xa965dfff, 0x03ffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 48 */ + { /** index: 49 */ "cv", RuneSet{ {ref: 0x0001, set: pageSet{0x0000000c, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000c00, 0x00c00000, 0x000c0000}}, }, }, - { /** index: 49 */ + { /** index: 50 */ "cy", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0010c604, 0x8010c604}}, @@ -438,44 +439,44 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000003f, 0x00000000, 0x00000000, 0x000c0000}}, }, }, - { /** index: 50 */ + { /** index: 51 */ "da", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x25082262, 0x25082262}}, }, }, - { /** index: 51 */ + { /** index: 52 */ "de", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 52 */ + { /** index: 53 */ "doi", RuneSet{ {ref: 0x0009, set: pageSet{0xfff99fec, 0xf3e5fdff, 0xf807399f, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 53 */ + { /** index: 54 */ "dsb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, {ref: 0x0001, set: pageSet{0x0c00f000, 0x00000000, 0x03000180, 0x6000c033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 54 */ + { /** index: 55 */ "dv", RuneSet{ {ref: 0x0007, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0001ffff, 0x00000000, 0x00000000}}, }, }, - { /** index: 55 */ + { /** index: 56 */ "dz", RuneSet{ {ref: 0x000f, set: pageSet{0x00000000, 0x00000000, 0xfffffeff, 0x3d7e03ff, 0xfeff0003, 0x03ffffff, 0x00000000, 0x00000000}}, }, }, - { /** index: 56 */ + { /** index: 57 */ "ee", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060c3303, 0x060c3303}}, @@ -484,51 +485,51 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00001003, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 57 */ + { /** index: 58 */ "el", RuneSet{ {ref: 0x0003, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffd740, 0xfffffffb, 0x00007fff, 0x00000000}}, }, }, - { /** index: 58 */ + { /** index: 59 */ "en", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 59 */ + { /** index: 60 */ "eo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x30000300, 0x00300030, 0x30000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 60 */ + { /** index: 61 */ "es", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, }, }, - { /** index: 61 */ + { /** index: 62 */ "et", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10600010, 0x10600010}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 62 */ + { /** index: 63 */ "eu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10020000, 0x10020000}}, }, }, - { /** index: 63 */ + { /** index: 64 */ "fa", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 64 */ + { /** index: 65 */ "fat", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, @@ -538,7 +539,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x03000000}}, }, }, - { /** index: 65 */ + { /** index: 66 */ "ff", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -546,51 +547,51 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00880000, 0x00040000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 66 */ + { /** index: 67 */ "fi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00400030, 0x00400030}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 67 */ + { /** index: 68 */ "fil", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e1e7707, 0x0e1e7707}}, }, }, - { /** index: 68 */ + { /** index: 69 */ "fj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 69 */ + { /** index: 70 */ "fo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x25092042, 0x25092042}}, }, }, - { /** index: 70 */ + { /** index: 71 */ "fr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x000c0000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 71 */ + { /** index: 72 */ "fur", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02041107, 0x02041107}}, }, }, - { /** index: 72 */ + { /** index: 73 */ "fy", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x9c508e14, 0x1c508e14}}, }, }, - { /** index: 73 */ + { /** index: 74 */ "ga", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x04082202, 0x04082202}}, @@ -598,26 +599,26 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0xc0000c0c, 0x00000000, 0x00c00003, 0x00000c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 74 */ + { /** index: 75 */ "gd", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x020c1383, 0x020c1383}}, }, }, - { /** index: 75 */ + { /** index: 76 */ "gez", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x00003d7f, 0x00ff00ff, 0x00ff3d7f, 0x003d7fff, 0xff7f7f00, 0x00ff7f00}}, {ref: 0x0013, set: pageSet{0x003d7f00, 0xffff01ff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 76 */ + { /** index: 77 */ "gl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, }, }, - { /** index: 77 */ + { /** index: 78 */ "gn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x040a2202, 0x042a220a}}, @@ -625,25 +626,25 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x02000000}}, }, }, - { /** index: 78 */ + { /** index: 79 */ "got", RuneSet{ {ref: 0x0103, set: pageSet{0x00000000, 0xffff0000, 0x000007ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 79 */ + { /** index: 80 */ "gu", RuneSet{ {ref: 0x000a, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffbafee, 0xf3edfdff, 0x00013bbf, 0x00000001}}, }, }, - { /** index: 80 */ + { /** index: 81 */ "gv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000080, 0x00000080}}, }, }, - { /** index: 81 */ + { /** index: 82 */ "ha", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -651,7 +652,7 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00880000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 82 */ + { /** index: 83 */ "hak", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -739,7 +740,7 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 83 */ + { /** index: 84 */ "haw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -747,70 +748,70 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 84 */ + { /** index: 85 */ "he", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x000007ff}}, }, }, - { /** index: 85 */ + { /** index: 86 */ "hi", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 86 */ + { /** index: 87 */ "hif", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 87 */ + { /** index: 88 */ "hne", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 88 */ + { /** index: 89 */ "ho", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 89 */ + { /** index: 90 */ "hr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000330c0, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 90 */ + { /** index: 91 */ "hsb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x0c0030c0, 0x00000000, 0x0300001e, 0x66000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 91 */ + { /** index: 92 */ "ht", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00040100, 0x00040100}}, }, }, - { /** index: 92 */ + { /** index: 93 */ "hu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x14482202, 0x14482202}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00030000, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 93 */ + { /** index: 94 */ "hy", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0xfffe0000, 0x007fffff, 0xfffffffe, 0x000000ff, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 94 */ + { /** index: 95 */ "hz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -818,32 +819,32 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x000c0000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 95 */ + { /** index: 96 */ "ia", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 96 */ + { /** index: 97 */ "id", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000200, 0x00000200}}, }, }, - { /** index: 97 */ + { /** index: 98 */ "ie", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24082202, 0x24082202}}, }, }, - { /** index: 98 */ + { /** index: 99 */ "ig", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00003c00, 0x00000030}}, }, }, - { /** index: 99 */ + { /** index: 100 */ "ii", RuneSet{ {ref: 0x00a0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, @@ -853,31 +854,31 @@ var languagesRunes = [...]struct { {ref: 0x00a4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00001fff, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 100 */ + { /** index: 101 */ "ik", RuneSet{ {ref: 0x0004, set: pageSet{0xffff4002, 0xffffffff, 0x4002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 101 */ + { /** index: 102 */ "io", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 102 */ + { /** index: 103 */ "is", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x64092242, 0x64092242}}, }, }, - { /** index: 103 */ + { /** index: 104 */ "it", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060cb301, 0x060cb301}}, }, }, - { /** index: 104 */ + { /** index: 105 */ "iu", RuneSet{ {ref: 0x0014, set: pageSet{0x00000c7e, 0x031f8000, 0x0063f200, 0x000df840, 0x00037e08, 0x08000dfa, 0x0df901bf, 0x5437e400}}, @@ -885,7 +886,7 @@ var languagesRunes = [...]struct { {ref: 0x0016, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x007f8000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 105 */ + { /** index: 106 */ "ja", RuneSet{ {ref: 0x0030, set: pageSet{0x000000a7, 0x00000000, 0xfffffffe, 0xffffffff, 0x780fffff, 0xfffffffe, 0xffffffff, 0x787fffff}}, @@ -973,25 +974,25 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x00080000, 0x08000000, 0x00000000, 0x00000004, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 106 */ + { /** index: 107 */ "jv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000300, 0x00000300}}, }, }, - { /** index: 107 */ + { /** index: 108 */ "ka", RuneSet{ {ref: 0x0010, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x0001ffff}}, }, }, - { /** index: 108 */ + { /** index: 109 */ "kaa", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x0c0c0000, 0x000cc00c, 0x03000000, 0x00000000}}, }, }, - { /** index: 109 */ + { /** index: 110 */ "kab", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1000,45 +1001,45 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00003000, 0x00000030, 0x00000000, 0x0000300c, 0x000c0000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 110 */ + { /** index: 111 */ "ki", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000300, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 111 */ + { /** index: 112 */ "kj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 112 */ + { /** index: 113 */ "kk", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffffffff, 0x0040ffff, 0x00000000, 0x0c0c0000, 0x0c00000c, 0x03000000, 0x00000300}}, }, }, - { /** index: 113 */ + { /** index: 114 */ "kl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0d10646e, 0x0d10646e}}, {ref: 0x0001, set: pageSet{0x00000000, 0x01000300, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 114 */ + { /** index: 115 */ "km", RuneSet{ {ref: 0x0017, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x9fffffff, 0xffcffee7, 0x0000003f, 0x00000000}}, }, }, - { /** index: 115 */ + { /** index: 116 */ "kn", RuneSet{ {ref: 0x000c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffddfec, 0xc3effdff, 0x40603ddf, 0x00000003}}, }, }, - { /** index: 116 */ + { /** index: 117 */ "ko", RuneSet{ {ref: 0x0031, set: pageSet{0x00000000, 0xfffe0000, 0xffffffff, 0xffffffef, 0x00007fff, 0x00000000, 0x00000000, 0x00000000}}, @@ -1088,13 +1089,13 @@ var languagesRunes = [...]struct { {ref: 0x00d7, set: pageSet{0x13020011, 0x11302b01, 0x03d30290, 0x3011122b, 0x2b011302, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 117 */ + { /** index: 118 */ "kok", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 118 */ + { /** index: 119 */ "kr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1102,51 +1103,51 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 119 */ + { /** index: 120 */ "ks", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001df, 0x80800176, 0x420c0000, 0x01020140, 0x44008200, 0x00041018, 0x00000000}}, }, }, - { /** index: 120 */ + { /** index: 121 */ "ku-am", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0000, 0xffff27bf, 0x000027bf, 0x00000000, 0x00000000, 0x0c000000, 0x03000000, 0x000000c0}}, {ref: 0x0005, set: pageSet{0x3c000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 121 */ + { /** index: 122 */ "ku-iq", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x061ef5c0, 0x000001f6, 0x40000000, 0x01040040, 0x00208210, 0x00005040, 0x00000000}}, }, }, - { /** index: 122 */ + { /** index: 123 */ "ku-ir", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x061ef5c0, 0x000001f6, 0x40000000, 0x01040040, 0x00208210, 0x00005040, 0x00000000}}, }, }, - { /** index: 123 */ + { /** index: 124 */ "ku-tr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x08004480, 0x08004480}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 124 */ + { /** index: 125 */ "kum", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 125 */ + { /** index: 126 */ "kv", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0042ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x000000c0}}, }, }, - { /** index: 126 */ + { /** index: 127 */ "kw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1154,63 +1155,63 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x000c0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 127 */ + { /** index: 128 */ "kwm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 128 */ + { /** index: 129 */ "ky", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c00c, 0x00000000, 0x00000000}}, }, }, - { /** index: 129 */ + { /** index: 130 */ "la", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000c0003, 0x00003c00, 0x0000f000, 0x00003c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 130 */ + { /** index: 131 */ "lah", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 131 */ + { /** index: 132 */ "lb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x98504f14, 0x18504f14}}, }, }, - { /** index: 132 */ + { /** index: 133 */ "lez", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0042, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 133 */ + { /** index: 134 */ "lg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 134 */ + { /** index: 135 */ "li", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00480910, 0x00480910}}, }, }, - { /** index: 135 */ + { /** index: 136 */ "lij", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x060cb301, 0x060eb3d5}}, }, }, - { /** index: 136 */ + { /** index: 137 */ "ln", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0c186606, 0x0c186606}}, @@ -1219,27 +1220,27 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00001006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 137 */ + { /** index: 138 */ "lo", RuneSet{ {ref: 0x000e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfef02596, 0x3bffecae, 0x30003f5f, 0x00000000}}, }, }, - { /** index: 138 */ + { /** index: 139 */ "lt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x03c03030, 0x0000c000, 0x00000000, 0x600c0c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 139 */ + { /** index: 140 */ "lv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000c3003, 0x18c00c0c, 0x00c03060, 0x60000c03, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 140 */ + { /** index: 141 */ "lzh", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -1327,45 +1328,45 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 141 */ + { /** index: 142 */ "mag", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 142 */ + { /** index: 143 */ "mai", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 143 */ + { /** index: 144 */ "mfe", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1a10cfc5, 0x9a10cfc5}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x000c0000, 0x01000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 144 */ + { /** index: 145 */ "mg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100002, 0x00100002}}, }, }, - { /** index: 145 */ + { /** index: 146 */ "mh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000003, 0x18000000, 0x00003060, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 146 */ + { /** index: 147 */ "mhr", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 147 */ + { /** index: 148 */ "mi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1373,7 +1374,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 148 */ + { /** index: 149 */ "miq", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x142a220a}}, @@ -1381,49 +1382,49 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x20000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 149 */ + { /** index: 150 */ "mjw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 150 */ + { /** index: 151 */ "mk", RuneSet{ {ref: 0x0004, set: pageSet{0xfdffb729, 0x000001ff, 0xb7290000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 151 */ + { /** index: 152 */ "ml", RuneSet{ {ref: 0x000d, set: pageSet{0xfffddfec, 0xc3fffdff, 0x00803dcf, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 152 */ + { /** index: 153 */ "mn-cn", RuneSet{ {ref: 0x0018, set: pageSet{0x00000000, 0xffffffff, 0xffffffff, 0x00ffffff, 0xffffffff, 0x000003ff, 0x00000000, 0x00000000}}, }, }, - { /** index: 153 */ + { /** index: 154 */ "mn-mn", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c000, 0x00000000, 0x00000300}}, }, }, - { /** index: 154 */ + { /** index: 155 */ "mni", RuneSet{ {ref: 0x0009, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000010, 0xfff99fee, 0xf3c5fdff, 0xb000798f, 0x0002ffc0}}, }, }, - { /** index: 155 */ + { /** index: 156 */ "mnw", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 156 */ + { /** index: 157 */ "mo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00004004, 0x00004004}}, @@ -1432,39 +1433,39 @@ var languagesRunes = [...]struct { {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 157 */ + { /** index: 158 */ "mr", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 158 */ + { /** index: 159 */ "ms", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 159 */ + { /** index: 160 */ "mt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02045101, 0x02045101}}, {ref: 0x0001, set: pageSet{0x00000c00, 0x000000c3, 0x00000000, 0x18000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 160 */ + { /** index: 161 */ "my", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 161 */ + { /** index: 162 */ "na", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000300, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 162 */ + { /** index: 163 */ "nan", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, @@ -1553,82 +1554,82 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 163 */ + { /** index: 164 */ "nb", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x011c0661, 0x011c0661}}, }, }, - { /** index: 164 */ + { /** index: 165 */ "nds", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 165 */ + { /** index: 166 */ "ne", RuneSet{ {ref: 0x0009, set: pageSet{0xfff98fee, 0xc3e5fdff, 0x0001398f, 0x0001fff0, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 166 */ + { /** index: 167 */ "ng", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 167 */ + { /** index: 168 */ "nhn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x140a2202, 0x140a2202}}, {ref: 0x0001, set: pageSet{0x00000002, 0x00000000, 0x00002000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 168 */ + { /** index: 169 */ "niu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, {ref: 0x0001, set: pageSet{0x00080002, 0x00000800, 0x00002000, 0x00000800, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 169 */ + { /** index: 170 */ "nl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1c58af16, 0x1c58af16}}, }, }, - { /** index: 170 */ + { /** index: 171 */ "nn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x115c0671, 0x115c0671}}, }, }, - { /** index: 171 */ + { /** index: 172 */ "no", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x011c0661, 0x011c0661}}, }, }, - { /** index: 172 */ + { /** index: 173 */ "nqo", RuneSet{ {ref: 0x0007, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x07ffffff}}, }, }, - { /** index: 173 */ + { /** index: 174 */ "nr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 174 */ + { /** index: 175 */ "nso", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100400, 0x00100400}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 175 */ + { /** index: 176 */ "nv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00082202, 0x00082202}}, @@ -1637,125 +1638,125 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00000002, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 176 */ + { /** index: 177 */ "ny", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00300000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 177 */ + { /** index: 178 */ "oc", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x040c2383, 0x040c2383}}, }, }, - { /** index: 178 */ + { /** index: 179 */ "om", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 179 */ + { /** index: 180 */ "or", RuneSet{ {ref: 0x000b, set: pageSet{0xfff99fee, 0xf3cdfdff, 0xb0c0398f, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 180 */ + { /** index: 181 */ "os", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 181 */ + { /** index: 182 */ "ota", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffc6, 0x000001fe, 0x40000000, 0x01000040, 0x0000a000, 0x00001000, 0x00000000}}, }, }, - { /** index: 182 */ + { /** index: 183 */ "pa", RuneSet{ {ref: 0x000a, set: pageSet{0xfff987e0, 0xd36dfdff, 0x1e003987, 0x001f0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 183 */ + { /** index: 184 */ "pa-pk", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 184 */ + { /** index: 185 */ "pap-an", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x160e2302, 0x160e2302}}, }, }, - { /** index: 185 */ + { /** index: 186 */ "pap-aw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, }, }, - { /** index: 186 */ + { /** index: 187 */ "pes", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 187 */ + { /** index: 188 */ "pl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x030000f0, 0x00000000, 0x0c00001e, 0x1e000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 188 */ + { /** index: 189 */ "prs", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x001009f6, 0x40000000, 0x01000040, 0x00008200, 0x00001000, 0x00000000}}, }, }, - { /** index: 189 */ + { /** index: 190 */ "ps-af", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x000005f6, 0x50000000, 0x05480262, 0x10000a00, 0x00013000, 0x00000000}}, }, }, - { /** index: 190 */ + { /** index: 191 */ "ps-pk", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07ffffde, 0x000005f6, 0x50000000, 0x05480262, 0x10000a00, 0x00052000, 0x00000000}}, }, }, - { /** index: 191 */ + { /** index: 192 */ "pt", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x143c278f, 0x143c278f}}, }, }, - { /** index: 192 */ + { /** index: 193 */ "qu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000}}, }, }, - { /** index: 193 */ + { /** index: 194 */ "quz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020000, 0x00020000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000100, 0x00000000}}, }, }, - { /** index: 194 */ + { /** index: 195 */ "raj", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 195 */ + { /** index: 196 */ "rif", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, @@ -1764,19 +1765,19 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00002000, 0x00000020, 0x08000000, 0x00002008, 0x00080000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 196 */ + { /** index: 197 */ "rm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02045301, 0x02045301}}, }, }, - { /** index: 197 */ + { /** index: 198 */ "rn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 198 */ + { /** index: 199 */ "ro", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00004004, 0x00004004}}, @@ -1784,43 +1785,43 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x0f000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 199 */ + { /** index: 200 */ "ru", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 200 */ + { /** index: 201 */ "rw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 201 */ + { /** index: 202 */ "sa", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 202 */ + { /** index: 203 */ "sah", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00300000, 0x0c00c030, 0x03000000, 0x00000000}}, }, }, - { /** index: 203 */ + { /** index: 204 */ "sat", RuneSet{ {ref: 0x0009, set: pageSet{0xfff987ee, 0xf325fdff, 0x00013987, 0x0001fff0, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 204 */ + { /** index: 205 */ "sc", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x02041101, 0x02041101}}, }, }, - { /** index: 205 */ + { /** index: 206 */ "sco", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1828,32 +1829,32 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x30000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 206 */ + { /** index: 207 */ "sd", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x07fffdd6, 0x000005f6, 0xec000000, 0x0200b4d9, 0x480a8640, 0x00000000, 0x00000000}}, }, }, - { /** index: 207 */ + { /** index: 208 */ "se", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000002, 0x00000002}}, {ref: 0x0001, set: pageSet{0x00033000, 0x00000000, 0x00000c00, 0x600000c3, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 208 */ + { /** index: 209 */ "sel", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 209 */ + { /** index: 210 */ "sg", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x1850cc14, 0x1850cc14}}, }, }, - { /** index: 210 */ + { /** index: 211 */ "sgs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00200000}}, @@ -1861,7 +1862,7 @@ var languagesRunes = [...]struct { {ref: 0x0003, set: pageSet{0x00000010, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 211 */ + { /** index: 212 */ "sh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -1869,73 +1870,73 @@ var languagesRunes = [...]struct { {ref: 0x0004, set: pageSet{0xffff8f04, 0xffffffff, 0x8f04ffff, 0x00000000, 0x030c0000, 0x0c00cc0f, 0x03000000, 0x00000300}}, }, }, - { /** index: 212 */ + { /** index: 213 */ "shn", RuneSet{ {ref: 0x0010, set: pageSet{0xffffffff, 0x0007f6fb, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 213 */ + { /** index: 214 */ "shs", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00800000, 0x03bffbaa, 0x03bffbaa, 0x00000000, 0x00000000, 0x00002202, 0x00002202}}, {ref: 0x0003, set: pageSet{0x00080000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 214 */ + { /** index: 215 */ "si", RuneSet{ {ref: 0x000d, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfc7e3fec, 0x2ffbffbf, 0x7f5f847f, 0x00040000}}, }, }, - { /** index: 215 */ + { /** index: 216 */ "sid", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 216 */ + { /** index: 217 */ "sk", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x24182212, 0x24182212}}, {ref: 0x0001, set: pageSet{0x0000f000, 0x66000000, 0x00300180, 0x60000033, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 217 */ + { /** index: 218 */ "sl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0001, set: pageSet{0x000330c0, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 218 */ + { /** index: 219 */ "sm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 219 */ + { /** index: 220 */ "sma", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00408030, 0x00408030}}, }, }, - { /** index: 220 */ + { /** index: 221 */ "smj", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00020032, 0x00020032}}, }, }, - { /** index: 221 */ + { /** index: 222 */ "smn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000016, 0x00000016}}, {ref: 0x0001, set: pageSet{0x00033000, 0x00000000, 0x00000c00, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 222 */ + { /** index: 223 */ "sms", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00200034, 0x00200034}}, @@ -1943,183 +1944,183 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00040000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 223 */ + { /** index: 224 */ "sn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 224 */ + { /** index: 225 */ "so", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 225 */ + { /** index: 226 */ "sq", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000880, 0x00000880}}, }, }, - { /** index: 226 */ + { /** index: 227 */ "sr", RuneSet{ {ref: 0x0004, set: pageSet{0xfdff8f04, 0xfdff01ff, 0x8f0401ff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 227 */ + { /** index: 228 */ "ss", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 228 */ + { /** index: 229 */ "st", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 229 */ + { /** index: 230 */ "su", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000200, 0x00000200}}, }, }, - { /** index: 230 */ + { /** index: 231 */ "sv", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10400a33, 0x10400a33}}, }, }, - { /** index: 231 */ + { /** index: 232 */ "sw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 232 */ + { /** index: 233 */ "syr", RuneSet{ {ref: 0x0007, set: pageSet{0xffff0000, 0xffff1fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 233 */ + { /** index: 234 */ "szl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00380008, 0x00080000}}, {ref: 0x0001, set: pageSet{0x030000f0, 0x00000000, 0x0c00501e, 0x1e004000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 234 */ + { /** index: 235 */ "ta", RuneSet{ {ref: 0x000b, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xd63dc7e8, 0xc3bfc718, 0x00803dc7, 0x00000000}}, }, }, - { /** index: 235 */ + { /** index: 236 */ "tcy", RuneSet{ {ref: 0x000c, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xfffddfec, 0xc3effdff, 0x40603ddf, 0x00000003}}, }, }, - { /** index: 236 */ + { /** index: 237 */ "te", RuneSet{ {ref: 0x000c, set: pageSet{0xfffddfee, 0xc3effdff, 0x00603ddf, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 237 */ + { /** index: 238 */ "tg", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x0c0c0000, 0x00cc0000, 0x00000000, 0x0000c00c}}, }, }, - { /** index: 238 */ + { /** index: 239 */ "th", RuneSet{ {ref: 0x000e, set: pageSet{0xfffffffe, 0x87ffffff, 0x00007fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 239 */ + { /** index: 240 */ "the", RuneSet{ {ref: 0x0009, set: pageSet{0xffffffe0, 0x83ffffff, 0x00003fff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 240 */ + { /** index: 241 */ "ti-er", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff00, 0x3d7f3d7f, 0xffff7fff, 0xffff0000, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 241 */ + { /** index: 242 */ "ti-et", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 242 */ + { /** index: 243 */ "tig", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff00, 0x00003d7f, 0xffff7fff, 0x00ff0000, 0x003d7f7f, 0xff7f7f00, 0x00ff7f00}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 243 */ + { /** index: 244 */ "tk", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x30400090, 0x30400090}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0xc0000180, 0x60000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 244 */ + { /** index: 245 */ "tl", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e1e7707, 0x0e1e7707}}, }, }, - { /** index: 245 */ + { /** index: 246 */ "tn", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00100400, 0x00100400}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 246 */ + { /** index: 247 */ "to", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x08000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 247 */ + { /** index: 248 */ "tpi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 248 */ + { /** index: 249 */ "tr", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x18404084, 0x18404084}}, {ref: 0x0001, set: pageSet{0xc0000000, 0x00030000, 0xc0000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 249 */ + { /** index: 250 */ "ts", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 250 */ + { /** index: 251 */ "tt", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00c00000, 0x0c00c00c, 0x03000000, 0x00000000}}, }, }, - { /** index: 251 */ + { /** index: 252 */ "tw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00220008, 0x00220008}}, @@ -2129,7 +2130,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x30000000, 0x00000000, 0x03000000}}, }, }, - { /** index: 252 */ + { /** index: 253 */ "ty", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00008000, 0x00008000}}, @@ -2137,25 +2138,25 @@ var languagesRunes = [...]struct { {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x10000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 253 */ + { /** index: 254 */ "tyv", RuneSet{ {ref: 0x0004, set: pageSet{0xffff0002, 0xffffffff, 0x0002ffff, 0x00000000, 0x00000000, 0x0000c00c, 0x00000000, 0x00000000}}, }, }, - { /** index: 254 */ + { /** index: 255 */ "ug", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x041ed5c0, 0x0000077e, 0x40000000, 0x01000040, 0x4000a000, 0x002109c0, 0x00000000}}, }, }, - { /** index: 255 */ + { /** index: 256 */ "uk", RuneSet{ {ref: 0x0004, set: pageSet{0xffff00d0, 0xffffffff, 0x00d0ffff, 0x00000000, 0x00030000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 256 */ + { /** index: 257 */ "und-zmth", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0xffffff7b, 0x7fffffff, 0x7ffffffe, 0x00000000, 0x80e310fe, 0x00800000, 0x00800000}}, @@ -2172,7 +2173,7 @@ var languagesRunes = [...]struct { {ref: 0x01d6, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000030, 0x00000000, 0x00000000}}, }, }, - { /** index: 257 */ + { /** index: 258 */ "und-zsye", RuneSet{ {ref: 0x0023, set: pageSet{0x0c000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00091e00}}, @@ -2189,32 +2190,32 @@ var languagesRunes = [...]struct { {ref: 0x01f6, set: pageSet{0x755dfffe, 0xffef2f3f, 0x0000ffe1, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 258 */ + { /** index: 259 */ "unm", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 259 */ + { /** index: 260 */ "ur", RuneSet{ {ref: 0x0006, set: pageSet{0x00000000, 0x040001de, 0x00000176, 0x42000000, 0x01020140, 0x44008200, 0x00041008, 0x00000000}}, }, }, - { /** index: 260 */ + { /** index: 261 */ "uz", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 261 */ + { /** index: 262 */ "ve", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, {ref: 0x001e, set: pageSet{0x000c0000, 0x30000000, 0x00000c30, 0x00030000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 262 */ + { /** index: 263 */ "vi", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x263c370f, 0x263c370f}}, @@ -2223,71 +2224,71 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x03ffffff}}, }, }, - { /** index: 263 */ + { /** index: 264 */ "vo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x077dfffe, 0x077dfffe, 0x00000000, 0x00000000, 0x10400010, 0x10400010}}, }, }, - { /** index: 264 */ + { /** index: 265 */ "vot", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x10400010, 0x10400010}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x60000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 265 */ + { /** index: 266 */ "wa", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x081047a4, 0x081047a4}}, }, }, - { /** index: 266 */ + { /** index: 267 */ "wae", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x90400010, 0x10400010}}, }, }, - { /** index: 267 */ + { /** index: 268 */ "wal", RuneSet{ {ref: 0x0012, set: pageSet{0xff7fff7f, 0xff01ff7f, 0x3d7f3d7f, 0xffff7fff, 0xffff3d7f, 0x003d7fff, 0xff7f7f3d, 0x00ff7fff}}, {ref: 0x0013, set: pageSet{0x003d7fff, 0xffffffff, 0x007fff7f, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 268 */ + { /** index: 269 */ "wen", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00080000, 0x00080000}}, {ref: 0x0001, set: pageSet{0x0c0030c0, 0x00000000, 0x0f30001e, 0x66000003, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 269 */ + { /** index: 270 */ "wo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x000a0a09, 0x000a0a09}}, {ref: 0x0001, set: pageSet{0x00000000, 0x00000000, 0x00000c00, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 270 */ + { /** index: 271 */ "xh", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 271 */ + { /** index: 272 */ "yap", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00400810, 0x00400810}}, }, }, - { /** index: 272 */ + { /** index: 273 */ "yi", RuneSet{ {ref: 0x0005, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x000007ff}}, }, }, - { /** index: 273 */ + { /** index: 274 */ "yo", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x0e3c770f, 0x0e3c770f}}, @@ -2296,7 +2297,7 @@ var languagesRunes = [...]struct { {ref: 0x001e, set: pageSet{0x00000000, 0xc0000000, 0x00000000, 0x0000000c, 0x00000000, 0x33000000, 0x00003000, 0x00000000}}, }, }, - { /** index: 274 */ + { /** index: 275 */ "yue", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2472,19 +2473,19 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 275 */ + { /** index: 276 */ "yuw", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00528f81, 0x00528f81}}, }, }, - { /** index: 276 */ + { /** index: 277 */ "za", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 277 */ + { /** index: 278 */ "zh-cn", RuneSet{ {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000280, 0x00000000}}, @@ -2571,7 +2572,7 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x02896800, 0x6a809005, 0x00030010, 0x80000000, 0x8e001ff9, 0x00000001, 0x00000000, 0x00000000}}, }, }, - { /** index: 278 */ + { /** index: 279 */ "zh-hk", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2747,7 +2748,7 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 279 */ + { /** index: 280 */ "zh-mo", RuneSet{ {ref: 0x0030, set: pageSet{0x00000080, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, @@ -2923,7 +2924,7 @@ var languagesRunes = [...]struct { {ref: 0x02a6, set: pageSet{0x00000000, 0x00040000, 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 280 */ + { /** index: 281 */ "zh-sg", RuneSet{ {ref: 0x0002, set: pageSet{0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000280, 0x00000000}}, @@ -3010,7 +3011,7 @@ var languagesRunes = [...]struct { {ref: 0x009f, set: pageSet{0x02896800, 0x6a809005, 0x00030010, 0x80000000, 0x8e001ff9, 0x00000001, 0x00000000, 0x00000000}}, }, }, - { /** index: 281 */ + { /** index: 282 */ "zh-tw", RuneSet{ {ref: 0x004e, set: pageSet{0xc373ff8b, 0x1b0f6840, 0xf34ce9ac, 0xc0080200, 0xca3e795c, 0x06487976, 0xf7f02fdf, 0xa8ff033a}}, @@ -3098,10 +3099,310 @@ var languagesRunes = [...]struct { {ref: 0x00fa, set: pageSet{0x00003000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, - { /** index: 282 */ + { /** index: 283 */ "zu", RuneSet{ {ref: 0x0000, set: pageSet{0x00000000, 0x00000000, 0x07fffffe, 0x07fffffe, 0x00000000, 0x00000000, 0x00000000, 0x00000000}}, }, }, } + +const ( + langAa LangID = 1 + langAb LangID = 2 + langAf LangID = 3 + langAgr LangID = 4 + langAk LangID = 5 + langAm LangID = 6 + langAn LangID = 7 + langAnp LangID = 8 + langAr LangID = 9 + langAs LangID = 10 + langAst LangID = 11 + langAv LangID = 12 + langAy LangID = 13 + langAyc LangID = 14 + langAz_Az LangID = 15 + langAz_Ir LangID = 16 + langBa LangID = 17 + langBe LangID = 18 + langBem LangID = 19 + langBer_Dz LangID = 20 + langBer_Ma LangID = 21 + langBg LangID = 22 + langBh LangID = 23 + langBhb LangID = 24 + langBho LangID = 25 + langBi LangID = 26 + langBin LangID = 27 + langBm LangID = 28 + langBn LangID = 29 + langBo LangID = 30 + langBr LangID = 31 + langBrx LangID = 32 + langBs LangID = 33 + langBua LangID = 34 + langByn LangID = 35 + langCa LangID = 36 + langCe LangID = 37 + langCh LangID = 38 + langChm LangID = 39 + langChr LangID = 40 + langCkb LangID = 41 + langCmn LangID = 42 + langCo LangID = 43 + langCop LangID = 44 + langCrh LangID = 45 + langCs LangID = 46 + langCsb LangID = 47 + langCu LangID = 48 + langCv LangID = 49 + langCy LangID = 50 + langDa LangID = 51 + langDe LangID = 52 + langDoi LangID = 53 + langDsb LangID = 54 + langDv LangID = 55 + langDz LangID = 56 + langEe LangID = 57 + langEl LangID = 58 + langEn LangID = 59 + langEo LangID = 60 + langEs LangID = 61 + langEt LangID = 62 + langEu LangID = 63 + langFa LangID = 64 + langFat LangID = 65 + langFf LangID = 66 + langFi LangID = 67 + langFil LangID = 68 + langFj LangID = 69 + langFo LangID = 70 + langFr LangID = 71 + langFur LangID = 72 + langFy LangID = 73 + langGa LangID = 74 + langGd LangID = 75 + langGez LangID = 76 + langGl LangID = 77 + langGn LangID = 78 + langGot LangID = 79 + langGu LangID = 80 + langGv LangID = 81 + langHa LangID = 82 + langHak LangID = 83 + langHaw LangID = 84 + langHe LangID = 85 + langHi LangID = 86 + langHif LangID = 87 + langHne LangID = 88 + langHo LangID = 89 + langHr LangID = 90 + langHsb LangID = 91 + langHt LangID = 92 + langHu LangID = 93 + langHy LangID = 94 + langHz LangID = 95 + langIa LangID = 96 + langId LangID = 97 + langIe LangID = 98 + langIg LangID = 99 + langIi LangID = 100 + langIk LangID = 101 + langIo LangID = 102 + langIs LangID = 103 + langIt LangID = 104 + langIu LangID = 105 + langJa LangID = 106 + langJv LangID = 107 + langKa LangID = 108 + langKaa LangID = 109 + langKab LangID = 110 + langKi LangID = 111 + langKj LangID = 112 + langKk LangID = 113 + langKl LangID = 114 + langKm LangID = 115 + langKn LangID = 116 + langKo LangID = 117 + langKok LangID = 118 + langKr LangID = 119 + langKs LangID = 120 + langKu_Am LangID = 121 + langKu_Iq LangID = 122 + langKu_Ir LangID = 123 + langKu_Tr LangID = 124 + langKum LangID = 125 + langKv LangID = 126 + langKw LangID = 127 + langKwm LangID = 128 + langKy LangID = 129 + langLa LangID = 130 + langLah LangID = 131 + langLb LangID = 132 + langLez LangID = 133 + langLg LangID = 134 + langLi LangID = 135 + langLij LangID = 136 + langLn LangID = 137 + langLo LangID = 138 + langLt LangID = 139 + langLv LangID = 140 + langLzh LangID = 141 + langMag LangID = 142 + langMai LangID = 143 + langMfe LangID = 144 + langMg LangID = 145 + langMh LangID = 146 + langMhr LangID = 147 + langMi LangID = 148 + langMiq LangID = 149 + langMjw LangID = 150 + langMk LangID = 151 + langMl LangID = 152 + langMn_Cn LangID = 153 + langMn_Mn LangID = 154 + langMni LangID = 155 + langMnw LangID = 156 + langMo LangID = 157 + langMr LangID = 158 + langMs LangID = 159 + langMt LangID = 160 + langMy LangID = 161 + langNa LangID = 162 + langNan LangID = 163 + langNb LangID = 164 + langNds LangID = 165 + langNe LangID = 166 + langNg LangID = 167 + langNhn LangID = 168 + langNiu LangID = 169 + langNl LangID = 170 + langNn LangID = 171 + langNo LangID = 172 + langNqo LangID = 173 + langNr LangID = 174 + langNso LangID = 175 + langNv LangID = 176 + langNy LangID = 177 + langOc LangID = 178 + langOm LangID = 179 + langOr LangID = 180 + langOs LangID = 181 + langOta LangID = 182 + langPa LangID = 183 + langPa_Pk LangID = 184 + langPap_An LangID = 185 + langPap_Aw LangID = 186 + langPes LangID = 187 + langPl LangID = 188 + langPrs LangID = 189 + langPs_Af LangID = 190 + langPs_Pk LangID = 191 + langPt LangID = 192 + langQu LangID = 193 + langQuz LangID = 194 + langRaj LangID = 195 + langRif LangID = 196 + langRm LangID = 197 + langRn LangID = 198 + langRo LangID = 199 + langRu LangID = 200 + langRw LangID = 201 + langSa LangID = 202 + langSah LangID = 203 + langSat LangID = 204 + langSc LangID = 205 + langSco LangID = 206 + langSd LangID = 207 + langSe LangID = 208 + langSel LangID = 209 + langSg LangID = 210 + langSgs LangID = 211 + langSh LangID = 212 + langShn LangID = 213 + langShs LangID = 214 + langSi LangID = 215 + langSid LangID = 216 + langSk LangID = 217 + langSl LangID = 218 + langSm LangID = 219 + langSma LangID = 220 + langSmj LangID = 221 + langSmn LangID = 222 + langSms LangID = 223 + langSn LangID = 224 + langSo LangID = 225 + langSq LangID = 226 + langSr LangID = 227 + langSs LangID = 228 + langSt LangID = 229 + langSu LangID = 230 + langSv LangID = 231 + langSw LangID = 232 + langSyr LangID = 233 + langSzl LangID = 234 + langTa LangID = 235 + langTcy LangID = 236 + langTe LangID = 237 + langTg LangID = 238 + langTh LangID = 239 + langThe LangID = 240 + langTi_Er LangID = 241 + langTi_Et LangID = 242 + langTig LangID = 243 + langTk LangID = 244 + langTl LangID = 245 + langTn LangID = 246 + langTo LangID = 247 + langTpi LangID = 248 + langTr LangID = 249 + langTs LangID = 250 + langTt LangID = 251 + langTw LangID = 252 + langTy LangID = 253 + langTyv LangID = 254 + langUg LangID = 255 + langUk LangID = 256 + langUnd_Zmth LangID = 257 + langUnd_Zsye LangID = 258 + langUnm LangID = 259 + langUr LangID = 260 + langUz LangID = 261 + langVe LangID = 262 + langVi LangID = 263 + langVo LangID = 264 + langVot LangID = 265 + langWa LangID = 266 + langWae LangID = 267 + langWal LangID = 268 + langWen LangID = 269 + langWo LangID = 270 + langXh LangID = 271 + langYap LangID = 272 + langYi LangID = 273 + langYo LangID = 274 + langYue LangID = 275 + langYuw LangID = 276 + langZa LangID = 277 + langZh_Cn LangID = 278 + langZh_Hk LangID = 279 + langZh_Mo LangID = 280 + langZh_Sg LangID = 281 + langZh_Tw LangID = 282 + langZu LangID = 283 + + // these languages have no orthographic samples in fontconfig source, + // but are used in substitutions + langMl_In LangID = 283 + langKs_Devanagari LangID = 284 + langSd_Devanagari LangID = 285 + langMn LangID = 286 + langHnn LangID = 287 + langBku LangID = 288 + langTbw LangID = 289 + langUga LangID = 290 + langBug LangID = 291 + langSyl LangID = 292 + langPeo LangID = 293 +) diff --git a/fontscan/langset_test.go b/fontscan/langset_test.go index 67ac50c7..2e91bf7b 100644 --- a/fontscan/langset_test.go +++ b/fontscan/langset_test.go @@ -22,16 +22,16 @@ func TestNewLanguageID(t *testing.T) { want1 bool }{ {language.NewLanguage("a"), 0, false}, - {language.NewLanguage("af"), 2, true}, - {language.NewLanguage("af-xx"), 2, true}, // primary tag match - {language.NewLanguage("az-az"), 14, true}, - {language.NewLanguage("az-ir"), 15, true}, + {language.NewLanguage("af"), langAf, true}, + {language.NewLanguage("af-xx"), langAf, true}, // primary tag match + {language.NewLanguage("az-az"), langAz_Az, true}, + {language.NewLanguage("az-ir"), langAz_Ir, true}, {language.NewLanguage("az-xx"), 0, false}, // no match - {language.NewLanguage("BR"), 30, true}, - {language.NewLanguage("FR"), 70, true}, - {language.NewLanguage("fr-be"), 70, true}, - {language.NewLanguage("pa-pk"), 183, true}, // exact match - {language.NewLanguage("pa-pr"), 182, true}, // primary tag match + {language.NewLanguage("BR"), langBr, true}, + {language.NewLanguage("FR"), langFr, true}, + {language.NewLanguage("fr-be"), langFr, true}, + {language.NewLanguage("pa-pk"), langPa_Pk, true}, // exact match + {language.NewLanguage("pa-pr"), langPa, true}, // primary tag match } for _, tt := range tests { got, got1 := NewLangID(tt.l) diff --git a/fontscan/substitutions.go b/fontscan/substitutions.go index 534b7fed..f7f5d0e9 100644 --- a/fontscan/substitutions.go +++ b/fontscan/substitutions.go @@ -4,7 +4,6 @@ import ( "strings" "github.com/go-text/typesetting/font" - "github.com/go-text/typesetting/language" ) // this file implements the family substitution feature, @@ -134,7 +133,7 @@ const ( type substitutionTest interface { // returns >= 0 if the substitution should be applied // for opAppendLast and opPrependFirst an arbitrary value could be returned - test(list familyList) int + test(list familyList, lang LangID) int // return a copy where families have been normalized // to their no blank no case version @@ -144,7 +143,7 @@ type substitutionTest interface { // a family in the list must equal 'mf' type familyEquals string -func (mf familyEquals) test(list familyList) int { +func (mf familyEquals) test(list familyList, _ LangID) int { return list.elementEquals(string(mf)) } @@ -155,7 +154,7 @@ func (mf familyEquals) normalize() substitutionTest { // a family in the list must contain 'mf' type familyContains string -func (mf familyContains) test(list familyList) int { +func (mf familyContains) test(list familyList, _ LangID) int { return list.elementContains(string(mf)) } @@ -166,7 +165,7 @@ func (mf familyContains) normalize() substitutionTest { // the family list has no "serif", "sans-serif" or "monospace" generic fallback type noGenericFamily struct{} -func (noGenericFamily) test(list familyList) int { +func (noGenericFamily) test(list familyList, _ LangID) int { for _, v := range list { switch v.family { case "serif", "sans-serif", "monospace": @@ -183,12 +182,14 @@ func (noGenericFamily) normalize() substitutionTest { // one family must equals `family`, and the queried language // must equals `lang` type langAndFamilyEqual struct { - lang language.Language + lang LangID family string } -// TODO: for now, these tests language base tests are ignored -func (langAndFamilyEqual) test(list familyList) int { +func (t langAndFamilyEqual) test(list familyList, lang LangID) int { + if t.lang == lang { + return list.elementEquals(t.family) + } return -1 } @@ -197,32 +198,22 @@ func (t langAndFamilyEqual) normalize() substitutionTest { return t } -// one family must equals `family`, and the queried language -// must contains `lang` -type langContainsAndFamilyEquals struct { - lang language.Language - family string -} - -// TODO: for now, these tests language base tests are ignored -func (langContainsAndFamilyEquals) test(list familyList) int { - return -1 -} - -func (t langContainsAndFamilyEquals) normalize() substitutionTest { - t.family = font.NormalizeFamily(t.family) - return t -} - // no family must equals `family`, and the queried language // must equals `lang` type langEqualsAndNoFamily struct { - lang language.Language + lang LangID family string } -// TODO: for now, these tests language base tests are ignored -func (langEqualsAndNoFamily) test(list familyList) int { +func (t langEqualsAndNoFamily) test(list familyList, lang LangID) int { + if t.lang == lang { + for _, v := range list { + if v.family == t.family { + return -1 + } + } + return 0 + } return -1 } @@ -242,8 +233,8 @@ type substitution struct { importance byte } -func (fl *familyList) execute(subs substitution) { - element := subs.test.test(*fl) +func (fl *familyList) execute(subs substitution, lang LangID) { + element := subs.test.test(*fl, lang) if element < 0 { return } diff --git a/fontscan/substitutions_table.go b/fontscan/substitutions_table.go index bce06616..71cfb659 100644 --- a/fontscan/substitutions_table.go +++ b/fontscan/substitutions_table.go @@ -1,7 +1,5 @@ package fontscan -import "github.com/go-text/typesetting/language" - // Code generated by textprocessing/fontconfig/cmd/generate_family_subs DO NOT EDIT. var familySubstitution = []substitution{ @@ -1673,7 +1671,7 @@ var familySubstitution = []substitution{ }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { - test: langEqualsAndNoFamily{lang: language.NewLanguage("und-zsye"), family: "emoji"}, + test: langEqualsAndNoFamily{lang: langUnd_Zsye, family: "emoji"}, additionalFamilies: []string{"emoji"}, op: opAppendLast, importance: 's', @@ -1729,7 +1727,7 @@ var familySubstitution = []substitution{ }, // confs/45-generic.conf (Set substitutions for emoji/math fonts) { - test: langEqualsAndNoFamily{lang: language.NewLanguage("und-zmth"), family: "math"}, + test: langEqualsAndNoFamily{lang: langUnd_Zmth, family: "math"}, additionalFamilies: []string{"math"}, op: opAppendLast, importance: 's', @@ -2226,14 +2224,14 @@ var familySubstitution = []substitution{ }, // confs/56-language-selector-ar.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ar"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langAr, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans", "Noto Sans Arabic UI"}, op: opPrepend, importance: 'w', }, // confs/56-language-selector-ar.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ar"), family: "serif"}, + test: langAndFamilyEqual{lang: langAr, family: "serif"}, additionalFamilies: []string{"Noto Serif", "Noto Naskh Arabic"}, op: opPrepend, importance: 'w', @@ -3360,70 +3358,70 @@ var familySubstitution = []substitution{ }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langBn, family: "sans-serif"}, additionalFamilies: []string{"Lohit Bengali"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "serif"}, + test: langAndFamilyEqual{lang: langBn, family: "serif"}, additionalFamilies: []string{"MuktiNarrow"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-beng-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("as"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langAs, family: "sans-serif"}, additionalFamilies: []string{"Lohit Assamese", "Lohit Bengali"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-guru-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langPa, family: "sans-serif"}, additionalFamilies: []string{"Saab"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-guru-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "serif"}, + test: langAndFamilyEqual{lang: langPa, family: "serif"}, additionalFamilies: []string{"Lohit Punjabi"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-orya-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langOr, family: "sans-serif"}, additionalFamilies: []string{"utkal"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-orya-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "serif"}, + test: langAndFamilyEqual{lang: langOr, family: "serif"}, additionalFamilies: []string{"utkal"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-telu-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langTe, family: "sans-serif"}, additionalFamilies: []string{"lohit_te"}, op: opAppend, importance: 'e', }, // confs/65-0-fonts-telu-extra.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "serif"}, + test: langAndFamilyEqual{lang: langTe, family: "serif"}, additionalFamilies: []string{"Vemana"}, op: opAppend, importance: 'e', }, // confs/65-0-smc-meera.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl, family: "sans-serif"}, additionalFamilies: []string{"Meera"}, op: opPrepend, importance: 'w', @@ -3437,7 +3435,7 @@ var familySubstitution = []substitution{ }, // confs/65-0-smc-rachana.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "serif"}, + test: langAndFamilyEqual{lang: langMl, family: "serif"}, additionalFamilies: []string{"Rachana"}, op: opPrepend, importance: 'w', @@ -3668,7 +3666,7 @@ var familySubstitution = []substitution{ }, // confs/65-fonts-takao-pgothic.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ja"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langJa, family: "sans-serif"}, additionalFamilies: []string{"TakaoPGothic"}, op: opPrepend, importance: 's', @@ -3683,14 +3681,14 @@ var familySubstitution = []substitution{ // confs/65-khmer.conf { test: familyEquals("serif"), - additionalFamilies: []string{"Khmer OS\""}, + additionalFamilies: []string{"Khmer OS"}, op: opPrepend, importance: 'w', }, // confs/65-khmer.conf { test: familyEquals("sans-serif"), - additionalFamilies: []string{"Khmer OS\""}, + additionalFamilies: []string{"Khmer OS"}, op: opPrepend, importance: 'w', }, @@ -3724,7 +3722,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-assamese.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("as"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langAs, family: "sans-serif"}, additionalFamilies: []string{"Lohit Assamese"}, op: opPrepend, importance: 'w', @@ -3738,7 +3736,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-bengali.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("bn"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langBn, family: "sans-serif"}, additionalFamilies: []string{"Lohit Bengali"}, op: opPrepend, importance: 'w', @@ -3752,77 +3750,77 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("hi"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langHi, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("mr"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMr, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("kok"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langKok, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ks-devanagari"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langKs_Devanagari, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("sd-devanagari"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langSd_Devanagari, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("mai"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMai, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ne"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langNe, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("brx"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langBrx, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("doi"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langDoi, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("sa"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langSa, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', }, // confs/66-lohit-devanagari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("sat"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langSat, family: "sans-serif"}, additionalFamilies: []string{"Lohit Devanagari"}, op: opPrepend, importance: 'w', @@ -3836,7 +3834,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-gujarati.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("gu"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langGu, family: "sans-serif"}, additionalFamilies: []string{"Lohit Gujarati"}, op: opPrepend, importance: 'w', @@ -3850,7 +3848,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-gurmukhi.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("pa"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langPa, family: "sans-serif"}, additionalFamilies: []string{"Lohit Gurmukhi"}, op: opPrepend, importance: 'w', @@ -3864,7 +3862,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-kannada.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("kn"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langKn, family: "sans-serif"}, additionalFamilies: []string{"Lohit Kannada"}, op: opPrepend, importance: 'w', @@ -3878,7 +3876,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-odia.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("or"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langOr, family: "sans-serif"}, additionalFamilies: []string{"Lohit Odia"}, op: opPrepend, importance: 'w', @@ -3892,7 +3890,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-tamil-classical.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ta"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langTa, family: "sans-serif"}, additionalFamilies: []string{"Lohit Tamil Classical"}, op: opPrepend, importance: 'w', @@ -3906,7 +3904,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-tamil.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ta"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langTa, family: "sans-serif"}, additionalFamilies: []string{"Lohit Tamil"}, op: opPrepend, importance: 'w', @@ -3920,7 +3918,7 @@ var familySubstitution = []substitution{ }, // confs/66-lohit-telugu.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("te"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langTe, family: "sans-serif"}, additionalFamilies: []string{"Lohit Telugu"}, op: opPrepend, importance: 'w', @@ -3934,7 +3932,7 @@ var familySubstitution = []substitution{ }, // confs/67-fonts-smc-manjari.conf { - test: langContainsAndFamilyEquals{lang: language.NewLanguage("ml"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl, family: "sans-serif"}, additionalFamilies: []string{"Manjari"}, op: opPrepend, importance: 'w', @@ -3948,7 +3946,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-anjalioldlipi.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl_In, family: "sans-serif"}, additionalFamilies: []string{"AnjaliOldLipi"}, op: opPrepend, importance: 'w', @@ -3962,7 +3960,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-chilanka.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "cursive"}, + test: langAndFamilyEqual{lang: langMl_In, family: "cursive"}, additionalFamilies: []string{"Chilanka"}, op: opPrepend, importance: 'w', @@ -3976,7 +3974,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-dyuthi.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl_In, family: "sans-serif"}, additionalFamilies: []string{"Dyuthi"}, op: opPrepend, importance: 'w', @@ -3990,7 +3988,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-karumbi.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "cursive"}, + test: langAndFamilyEqual{lang: langMl_In, family: "cursive"}, additionalFamilies: []string{"Karumbi"}, op: opPrepend, importance: 'w', @@ -4004,7 +4002,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-keraleeyam.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl_In, family: "sans-serif"}, additionalFamilies: []string{"Keraleeyam"}, op: opPrepend, importance: 'w', @@ -4018,7 +4016,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-raghumalayalamsans.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl_In, family: "sans-serif"}, additionalFamilies: []string{"RaghuMalayalam"}, op: opPrepend, importance: 'w', @@ -4032,7 +4030,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-suruma.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langMl_In, family: "sans-serif"}, additionalFamilies: []string{"suruma"}, op: opPrepend, importance: 'w', @@ -4046,7 +4044,7 @@ var familySubstitution = []substitution{ }, // confs/67-smc-uroob.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ml-in"), family: "fantasy"}, + test: langAndFamilyEqual{lang: langMl_In, family: "fantasy"}, additionalFamilies: []string{"Uroob"}, op: opPrepend, importance: 'w', @@ -4060,105 +4058,105 @@ var familySubstitution = []substitution{ }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "WenQuanYi Bitmap Song", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Zen Hei", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-cn.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK SC", "WenQuanYi Zen Hei Mono", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK HK", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-hk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK HK", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Mo, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Mo, family: "sans-serif"}, additionalFamilies: []string{"Bitstream Vera Sans", "Noto Sans CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-mo.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-mo"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Mo, family: "monospace"}, additionalFamilies: []string{"Bitstream Vera Sans Mono", "DejaVu Sans Mono", "Noto Sans Mono CJK TC", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai HK", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Sg, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "WenQuanYi Bitmap Song", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Sg, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC", "WenQuanYi Zen Hei", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-sg.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-sg"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Sg, family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK SC", "WenQuanYi Zen Hei Mono", "HYSong", "AR PL UMing CN", "AR PL UMing HK", "AR PL New Sung", "AR PL UKai CN", "AR PL ZenKai Uni"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "WenQuanYi Bitmap Song", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Serif", "Bitstream Vera Serif"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK TC", "WenQuanYi Zen Hei", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Sans", "Bitstream Vera Sans"}, op: opPrepend, importance: 's', }, // confs/69-language-selector-zh-tw.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "monospace"}, additionalFamilies: []string{"DejaVu Sans Mono", "Noto Sans Mono CJK TC", "WenQuanYi Zen Hei Mono", "AR PL UMing TW", "AR PL UMing HK", "AR PL New Sung", "HYSong", "AR PL UKai TW", "AR PL UKai HK", "AR PL ZenKai Uni", "DejaVu Sans Mono", "Bitstream Vera Sans Mono"}, op: opPrepend, importance: 's', @@ -4186,105 +4184,105 @@ var familySubstitution = []substitution{ }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "serif"}, + test: langAndFamilyEqual{lang: langJa, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK JP"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "serif"}, + test: langAndFamilyEqual{lang: langKo, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK KR"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK SC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK TC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "serif"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "serif"}, additionalFamilies: []string{"Noto Serif CJK HK"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langJa, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK JP"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langKo, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK KR"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK SC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK TC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "sans-serif"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "sans-serif"}, additionalFamilies: []string{"Noto Sans CJK HK"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ja"), family: "monospace"}, + test: langAndFamilyEqual{lang: langJa, family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK JP"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("ko"), family: "monospace"}, + test: langAndFamilyEqual{lang: langKo, family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK KR"}, op: opPrepend, importance: 'w', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-cn"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Cn, family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK SC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-tw"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Tw, family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK TC"}, op: opPrepend, importance: 's', }, // confs/70-fonts-noto-cjk.conf { - test: langAndFamilyEqual{lang: language.NewLanguage("zh-hk"), family: "monospace"}, + test: langAndFamilyEqual{lang: langZh_Hk, family: "monospace"}, additionalFamilies: []string{"Noto Sans Mono CJK HK"}, op: opPrepend, importance: 's', diff --git a/fontscan/substitutions_test.go b/fontscan/substitutions_test.go index e5f1f6a7..56cd302d 100644 --- a/fontscan/substitutions_test.go +++ b/fontscan/substitutions_test.go @@ -127,32 +127,39 @@ func Test_familyList_execute(t *testing.T) { tests := []struct { start []string args substitution + lang LangID want familyList }{ - {nil, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 0}, familyList{}}, // no match - {[]string{"f1", "f2"}, substitution{familyEquals("f4"), []string{"aa", "bb"}, opReplace, 0}, familyList{{"f1", true}, {"f2", true}}}, // no match + {nil, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 0}, 0, familyList{}}, // no match + {[]string{"f1", "f2"}, substitution{familyEquals("f4"), []string{"aa", "bb"}, opReplace, 0}, 0, familyList{{"f1", true}, {"f2", true}}}, // no match - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 's'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'e'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'w'}, familyList{{"f1", true}, {"aa", false}, {"bb", false}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 's'}, 0, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'e'}, 0, familyList{{"f1", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opReplace, 'w'}, 0, familyList{{"f1", true}, {"aa", false}, {"bb", false}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 's'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'e'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'w'}, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 's'}, 0, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'e'}, 0, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppend, 'w'}, 0, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 's'}, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 'w'}, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 's'}, 0, familyList{{"f1", true}, {"f2", true}, {"aa", true}, {"bb", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opAppendLast, 'w'}, 0, familyList{{"f1", true}, {"f2", true}, {"aa", false}, {"bb", false}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 's'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'e'}, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'w'}, familyList{{"f1", true}, {"aa", false}, {"bb", false}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 's'}, 0, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'e'}, 0, familyList{{"f1", true}, {"aa", true}, {"bb", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrepend, 'w'}, 0, familyList{{"f1", true}, {"aa", false}, {"bb", false}, {"f2", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 's'}, familyList{{"aa", true}, {"bb", true}, {"f1", true}, {"f2", true}}}, - {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 'w'}, familyList{{"aa", false}, {"bb", false}, {"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 's'}, 0, familyList{{"aa", true}, {"bb", true}, {"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{familyEquals("f2"), []string{"aa", "bb"}, opPrependFirst, 'w'}, 0, familyList{{"aa", false}, {"bb", false}, {"f1", true}, {"f2", true}}}, + + {[]string{"f1", "f2"}, substitution{langAndFamilyEqual{langAr, "f2"}, []string{"aa", "bb"}, opPrependFirst, 'w'}, langEn, familyList{{"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{langAndFamilyEqual{langAr, "f2"}, []string{"aa", "bb"}, opPrependFirst, 'w'}, langAr, familyList{{"aa", false}, {"bb", false}, {"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{langAndFamilyEqual{langAr, "f7"}, []string{"aa", "bb"}, opPrependFirst, 'w'}, langAr, familyList{{"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{langEqualsAndNoFamily{langAr, "f2"}, []string{"aa", "bb"}, opPrependFirst, 'w'}, langAr, familyList{{"f1", true}, {"f2", true}}}, + {[]string{"f1", "f2"}, substitution{langEqualsAndNoFamily{langAr, "f7"}, []string{"aa", "bb"}, opPrependFirst, 'w'}, langAr, familyList{{"aa", false}, {"bb", false}, {"f1", true}, {"f2", true}}}, } for _, tt := range tests { fl := newFamilyList(tt.start) - fl.execute(tt.args) + fl.execute(tt.args, tt.lang) if !reflect.DeepEqual(fl, tt.want) { t.Fatalf("expected %v, got %v", tt.want, fl) } @@ -207,18 +214,18 @@ func Test_newFamilyCrible(t *testing.T) { { "Arial", []string{"arial", "arimo", "liberationsans", "albany", "albanyamt"}, - []string{"helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros\"", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, + []string{"helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, }, { "Helvetica", []string{"helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd"}, - []string{"arial", "arimo", "liberationsans", "albany", "albanyamt", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros\"", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, + []string{"arial", "arimo", "liberationsans", "albany", "albanyamt", "dejavulgcsans", "notosans", "dejavusans", "verdana", "luxisans", "lucidasansunicode", "bpgglahointernational", "tahoma", "urwgothic", "nimbussansnarrow", "loma", "waree", "garuda", "umpush", "laksaman", "notosanscjkjp", "notosanscjkkr", "notosanscjksc", "notosanscjktc", "notosanscjkhk", "lohitdevanagari", "droidsansfallback", "khmeros", "nachlieli", "yuditunicode", "kerkis", "armnethelvetica", "artsounk", "bpgutf8m", "saysetthaunicode", "jglaooldarial", "gfzemenunicode", "pigiarniq", "bdavat", "bcompset", "kacst-qr", "urdunastaliqunicode", "raghindi", "muktinarrow", "malayalam", "sampige", "padmaa", "hapaxberbère", "msgothic", "umepluspgothic", "microsoftyahei", "microsoftjhenghei", "wenquanyizenhei", "wenquanyibitmapsong", "arplshanheisununi", "arplnewsung", "hiraginosans", "pingfangsc", "pingfangtc", "pingfanghk", "hiraginosanscns", "hiraginosansgb", "mgopenmodata", "vlgothic", "ipamonagothic", "ipagothic", "sazanamigothic", "kochigothic", "arplkaitimgb", "arplkaitimbig5", "arplsungtilgb", "arplmingti2lbig5", "msゴシック", "zysong18030", "tscu_paranar", "nanumgothic", "undotum", "baekmukdotum", "baekmukgulim", "applesdgothicneo", "kacstqura", "lohitbengali", "lohitgujarati", "lohithindi", "lohitmarathi", "lohitmaithili", "lohitkashmiri", "lohitkonkani", "lohitnepali", "lohitsindhi", "lohitpunjabi", "lohittamil", "meera", "lohitmalayalam", "lohitkannada", "lohittelugu", "lohitoriya", "lklug", "freesans", "arialunicodems", "arialunicode", "code2000", "code2001", "sans-serif", "roya", "koodak", "terafik", "itcavantgardegothic", "helveticanarrow"}, }, } for _, tt := range tests { got := make(familyCrible) - got.fillWithSubstitutions(font.NormalizeFamily(tt.family)) + got.fillWithSubstitutions(font.NormalizeFamily(tt.family), langEn) strong, weak := got.families() if !(reflect.DeepEqual(strong, tt.wantStrong) && reflect.DeepEqual(weak, tt.wantWeak)) { t.Errorf("newFamilyCrible() = %v %v, want %v %v", strong, weak, tt.wantStrong, tt.wantWeak) @@ -321,13 +328,13 @@ func TestReplaceAt(t *testing.T) { func BenchmarkNewFamilyCrible(b *testing.B) { c := make(familyCrible) for i := 0; i < b.N; i++ { - c.fillWithSubstitutions("Arial") + c.fillWithSubstitutions("Arial", langEn) } } func TestSubstituteHelveticaOrder(t *testing.T) { c := make(familyCrible) - c.fillWithSubstitutionsList([]string{font.NormalizeFamily("BlinkMacSystemFont"), font.NormalizeFamily("Helvetica")}) + c.fillWithSubstitutionsList([]string{font.NormalizeFamily("BlinkMacSystemFont"), font.NormalizeFamily("Helvetica")}, langEn) // BlinkMacSystemFont is not known by the library, so it is expanded with generic sans-serif, // but with lower priority then Helvetica expected := []string{"blinkmacsystemfont", "helvetica", "nimbussans", "nimbussansl", "texgyreheros", "helveticaltstd"} @@ -336,3 +343,21 @@ func TestSubstituteHelveticaOrder(t *testing.T) { t.Fatalf("expected %v, got %v", expected, ls) } } + +func TestLanguageSubstitutions(t *testing.T) { + c := make(familyCrible) + c.fillWithSubstitutions(font.NormalizeFamily("NimbusSans"), langOr) + if _, has := c["lohitoriya"]; !has { + t.Fatal("missing Lohit Oriya") + } + c.reset() + c.fillWithSubstitutions(font.NormalizeFamily("NimbusSans"), langGu) + if _, has := c["lohitgujarati"]; !has { + t.Fatal("missing Lohit Gujarati") + } + c.reset() + c.fillWithSubstitutions(font.NormalizeFamily("NimbusSans"), langPa) + if _, has := c["lohitgurmukhi"]; !has { + t.Fatal("missing Lohit Gurmukhi") + } +} From 221cb64f0b5397373768069b84bdd06532fcf783 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Sat, 11 Jan 2025 12:13:56 +0100 Subject: [PATCH 10/14] [fontscan] add a sample fontset for tests --- fontscan/fontmap_sample_test.go | 567 +++++++++++++------------------- 1 file changed, 232 insertions(+), 335 deletions(-) mode change 100644 => 100755 fontscan/fontmap_sample_test.go diff --git a/fontscan/fontmap_sample_test.go b/fontscan/fontmap_sample_test.go old mode 100644 new mode 100755 index 5decec17..1d54b34e --- a/fontscan/fontmap_sample_test.go +++ b/fontscan/fontmap_sample_test.go @@ -2,338 +2,235 @@ package fontscan import "github.com/go-text/typesetting/font" -// we need a valid font file so that [ResolveFace] works; -// the actual content of the file is not used -const dummyTestFont = "../font/testdata/Amiri-Regular.ttf" - -// these sample fontsets are built from a "typical linux" system -// looking for some families -var ( - // Families: Lohit-Bengali, NimbusSans, and Lohit-Devanagari - bengaliFontSet = fontSet{ - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "nimbussans", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, - {0x2, pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, - {0x3, pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, - {0x4, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, - {0x1e, pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, - {0x20, pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, - {0x21, pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, - {0x22, pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, - {0x23, pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, - {0x26, pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, - {0x30, pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xef, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, - {0xfb, pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "lohitbengali", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, - {0x9, pageSet{0x0, 0x0, 0x0, 0x30, 0xfff99fef, 0xf3fdfdff, 0xb0807f9f, 0xfffffcf}}, - {0x20, pageSet{0x3ff83000, 0x40, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, - {0x22, pageSet{0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x42656e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x10000200, 0x0, 0x4000000, 0x0, 0x0, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: dummyTestFont}, - Family: "lohitdevanagari", - Runes: RuneSet{ - {0x0, pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, - {0x1, pageSet{0xcfcff0ff, 0xffffcf8f, 0xcfff31ff, 0x7f0fcc3f, 0x40000, 0x0, 0x0, 0x0}}, - {0x2, pageSet{0xf000000, 0x800000, 0x0, 0x0, 0x0, 0x10000000, 0x3f0000c0, 0x0}}, - {0x3, pageSet{0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0}}, - {0x9, pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, - {0x1c, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000}}, - {0x20, pageSet{0xfff83000, 0x601007f, 0x10, 0x0, 0x1f, 0x2001000, 0x0, 0x0}}, - {0x21, pageSet{0x80000, 0x407c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0x22, pageSet{0x7c07807c, 0x800, 0x100, 0x30, 0x0, 0x0, 0x0, 0x0}}, - {0x25, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00, 0x0}}, - {0xa8, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fffffff}}, - {0xfb, pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, - {0xff, pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}, - }, - Scripts: ScriptSet{0x44657661, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, - Langs: LangSet{0x743c7429c3c430c9, 0x882084e39fe115fc, 0x8b066ff86023ecc8, 0x13b880fb9b021b74, 0x418d794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - } - - // Families: Freeserif, NimbusSans, FreeSans, DejaVu, DejavuSans - thaanaFontSet = fontSet{ - { - Location: Location{File: dummyTestFont}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, - Langs: LangSet{0x7f3ff4fbdfff7edf, 0xf963fdf7fffb77ff, 0x8b57effaf6ffedfb, 0xbff8a7ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansBold.otf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3f74fbcfff7cdf, 0xf963fcf7fffb77ff, 0x8b57effaf2ffedfb, 0xbff8a2ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansBoldOblique.otf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2f74fb4e3f7c5f, 0xf943fcf7ff1b77ff, 0x8b17efdad27f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSansOblique.otf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e3f7e5f, 0xf943fcf7ff1b77ff, 0x8b17efdad67f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerif.otf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5ffdfefffff, 0xffebfcf7fffbffff, 0xffffeffaf6ffedff, 0xffffeeffffefffff, 0x41bfffd, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifBold.otf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5fbcfeffddf, 0xffebfcf7fffb37ff, 0xfff7effaf2ffedff, 0xfff8eeffff6fffff, 0x41bf7fc, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifBoldItalic.otf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb4e2f7c5f, 0xf943fcf7ff1b37ff, 0x8b17efdad27f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/freefont/FreeSerifItalic.otf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e2f7e5f, 0xf943fcf7ff1b37ff, 0x8b17efdad67f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Bold.otf"}, Family: "nimbussans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-BoldItalic.otf"}, Family: "nimbussans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Italic.otf"}, Family: "nimbussans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"}, Family: "nimbussans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, - Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7e2e743b4227384d, 0x9803d4f39f0115fc, 0x8b176fdad2678cfb, 0xa7b822ffbb0b91f0, 0x418f794, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-ExtraLight.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x1, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffbff, 0xffffffff, 0xff3fffff}}, runePage{ref: 0x2, set: pageSet{0xcfffffff, 0x38ffff0, 0xffdf3fe0, 0xff3fa7ef, 0xff077faf, 0x7800ffff, 0x3f00ffc0, 0xf803e0}}, runePage{ref: 0x3, set: pageSet{0x8ffffff, 0x81fff1f8, 0xff008000, 0xfcff0003, 0xffffd7f0, 0xfffffffb, 0x1fe0ffff, 0xf3fe0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x7003e, 0x3030000, 0xc30fc3f, 0xffff0187, 0xc33fffff}}, runePage{ref: 0x5, set: pageSet{0x3fff0003, 0xfffe0000, 0xfc7fffff, 0xfffffffe, 0x6ff, 0x0, 0x0, 0x0}}, runePage{ref: 0x6, set: pageSet{0x0, 0x0, 0x0, 0x100000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1fffffff}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0x7dfee1c, 0xfff, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xbeff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xfe03ff73, 0x801ffbfd, 0x13fc1f, 0x1f, 0x3f021800, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0xc0c208, 0x1fffc0, 0x801c081e, 0xffffffff, 0x3ff023f, 0x0, 0x7f0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x1fc00ff, 0x10f00000, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0}}, runePage{ref: 0x23, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x8000, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800}}, runePage{ref: 0x2a, set: pageSet{0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x7e0c000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x1000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xff00f0, 0x7ffc, 0x3f03000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xc00f00ff, 0xc0c0, 0x0, 0x3803, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x4c697375, 0x4f67616d, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2f747b4e2e7c4d, 0xf942ecf7ff0b37fe, 0x8b17efdad27f8dfb, 0xb3f802ffff2791fb, 0x41af7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 200, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 0.875}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-BoldOblique.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 0.875}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Oblique.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0x7f2ff47b4e2f7c5f, 0xf943fdf7ff1b37ff, 0x8b17efdad27f8ffb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 0.875}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf"}, Family: "dejavusans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, Langs: LangSet{0xff2ff57b4e3ffd5f, 0xff43fdf7ff1b37ff, 0x9f37efdad27f8ffb, 0xfff822ffff2ff5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 0.875}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSans.ttf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3ff4fbdfff7edf, 0xf963fdf7fffb77ff, 0x8b57effaf6ffedfb, 0xbff8a7ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f3f74fbcfff7cdf, 0xf963fcf7fffb77ff, 0x8b57effaf2ffedfb, 0xbff8a2ffff2fbfff, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansBoldOblique.ttf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2f74fb4e3f7c5f, 0xf943fcf7ff1b77ff, 0x8b17efdad27f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf"}, - Family: "freesans", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e3f7e5f, 0xf943fcf7ff1b77ff, 0x8b17efdad67f8dfb, 0xbff822ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5ffdfefffff, 0xffebfcf7fffbffff, 0xffffeffaf6ffedff, 0xffffeeffffefffff, 0x41bfffd, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifBold.ttf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0xff7ff5fbcfeffddf, 0xffebfcf7fffb37ff, 0xfff7effaf2ffedff, 0xfff8eeffff6fffff, 0x41bf7fc, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifBoldItalic.ttf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb4e2f7c5f, 0xf943fcf7ff1b37ff, 0x8b17efdad27f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}, - }, - { - Location: Location{File: "/usr/share/fonts/truetype/freefont/FreeSerifItalic.ttf"}, Family: "freeserif", - Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, - Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, Langs: LangSet{0x7f2ff4fb5e2f7e5f, 0xf943fcf7ff1b37ff, 0x8b17efdad67f8dfb, 0xbff862ffff2fb5fb, 0x41bf7f4, 0x0, 0x0, 0x0}, - Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}, - }, - } -) +// extracted from a linux system +var linuxSampleFontSet = fontSet{ + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeMono.otf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x7ffffffd, 0xfffff3fe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0fffff, 0xfffe00f0, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffcf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffff9}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1ffffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff1f0000, 0x1c2000}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1fecff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73ffffe, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x77ffe3ff, 0xfe44ed7, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0x3fffffff, 0xe06f0fff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf335ff7d, 0xffc01fff, 0xffffffff, 0xf7ffffff, 0xffffffff, 0xffffffff, 0xfc7fffff, 0x7f0ff7f}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x7ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f0fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fefffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xc0cc1, 0x3f000000, 0xfffffc60, 0xfb7effff, 0xd7fe1fff, 0xdfff003c, 0x8fffffff, 0x3fffff9}}, runePage{ref: 0x2a, set: pageSet{0xffc0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc3f, 0xcaff9fff, 0xfe7f8fbb}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380fa020, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb8c3, 0x3fffffff, 0x5ff7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa238b3, 0xfff78300, 0xf0000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x0, 0x0, 0xc9f03, 0xf78c00, 0x0, 0x79c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8ffffff}}, runePage{ref: 0xa9, set: pageSet{0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0xf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0xffffffff, 0xe00f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffe3ff, 0xffffffff, 0xffff1fff, 0xf303ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0x8031, 0xffff03c7, 0x280287ff, 0x30800000, 0x23800c, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x8, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x42726169, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4b616c69, 0x4c61746e, 0x52756e72, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7febf79fdffbbf, 0xffc7f9effff66fff, 0xff6fdff5e4ffdbff, 0xfff145fffe5fffff, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeMonoBold.otf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x208ffffd, 0x9bdf002e, 0xfe7fafe7, 0xfffff3bf, 0xffff0007, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf000c, 0xfffffc78, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f1003, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffc7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffff9}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1f7fff, 0xb73e7ef8, 0xf8ff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x114ec2eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf22000f0, 0x3f1fff, 0x200030}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fa9, 0x97bf1d2c, 0xc0cff, 0x2a060fc, 0x20, 0x2c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3050f05, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf3ffffff, 0xffffff}}, runePage{ref: 0x26, set: pageSet{0x380, 0xeff0000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2b, set: pageSet{0xfbfc3fe0, 0xffff, 0x13f1f87, 0x3ff, 0x2000ff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xf7f28300, 0x70000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0xc0, 0x0, 0x0, 0x9f03, 0xc30000, 0x0, 0x5800000}}, runePage{ref: 0xfb, set: pageSet{0xe0000007, 0x5f7ffc01, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfc5eeaf69c4ffabf, 0xff07b9efbe366fff, 0xff6fdfb5a4ff1bff, 0xfff045fffe5febe7, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeMonoBoldOblique.otf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x208ffffd, 0x9bdf002e, 0xfe3fafe7, 0xfffff3bf, 0xffff0007, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x7000c, 0xfffffc78, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1f7fff, 0xb73e7e78, 0xf8ff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x114e42eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf20000f0, 0x3f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fa8, 0x97bf1d2c, 0xc00fb, 0x60fc, 0x20, 0x2c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3010005, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf3ffffff, 0xffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2b, set: pageSet{0xfbfc0000, 0xffff, 0x13f0000, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xecfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xf7f08300, 0x70000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0xc0, 0x0, 0x0, 0x9f03, 0xc30000, 0x0, 0x5000000}}, runePage{ref: 0xfb, set: pageSet{0xe0000007, 0x5f7ffc01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfc5ee8f69c4ef8bf, 0xf207b9efbe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6be7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeMonoOblique.otf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x7c8ffffd, 0xfffff3fe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffcf8, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe00f0, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1d, set: pageSet{0x1f1fffff, 0xfffff02f, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xc3f3, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xb73ffffe, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x77ffe3ff, 0xfe44ed7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf03007f0, 0x303f185f, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fff, 0xf7bf1d2e, 0xfb, 0x3fe000fc, 0x3c01fc, 0x7c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3350005, 0x1ffc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xfc00c269, 0x7f00fffd, 0xfff00000, 0x8003feff, 0x40003ff, 0x60031c01, 0x814080f, 0x100f0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x0, 0xffc00000, 0xfffff, 0x0, 0x63001407, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x60, 0x3e03d4, 0x1, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2a, set: pageSet{0x27f, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfbfc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38020000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xfff00300, 0xf0000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0x300c0, 0x0, 0x0, 0x9f03, 0xf78000, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f80007, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287f9effe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSans.otf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7fe9f7bffefdbf, 0xf2c7fbeffff6effe, 0x16afdff5edffdbf7, 0x7ff14ffffe5f7fff, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSansBold.otf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7ee9f79ffef9bf, 0xf2c7f9effff6effe, 0x16afdff5e5ffdbf7, 0x7ff145fffe5f7fff, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSansBoldOblique.otf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5ee9f69c7ef8bf, 0xf287f9effe36effe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSansOblique.otf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f6bc7efcbf, 0xf287f9effe36effe, 0x162fdfb5acff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSerif.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfeffebffbfdfffff, 0xffd7f9effff7ffff, 0xffffdff5edffdbff, 0xffffddffffdfffff, 0x837fffb, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSerifBold.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfeffebf79fdffbbf, 0xffd7f9effff66fff, 0xffefdff5e5ffdbff, 0xfff1ddfffedfffff, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSerifBoldItalic.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f69c5ef8bf, 0xf287f9effe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff0c5fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/freefont/FreeSerifItalic.otf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f6bc5efcbf, 0xf287f9effe366ffe, 0x162fdfb5acff1bf7, 0x7ff0c5fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Bold.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfc5ce876844e709b, 0x3007a9e73e022bf8, 0x162edfb5a4cf19f7, 0x4f7045ff761723e1, 0x831ef29, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-BoldItalic.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfc5ce876844e709b, 0x3007a9e73e022bf8, 0x162edfb5a4cf19f7, 0x4f7045ff761723e1, 0x831ef29, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Italic.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfc5ce876844e709b, 0x3007a9e73e022bf8, 0x162edfb5a4cf19f7, 0x4f7045ff761723e1, 0x831ef29, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/opentype/urw-base35/NimbusSans-Regular.otf"}, Family: "nimbussans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x40000, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0002c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffd7f0, 0xfffffffb, 0x627fff, 0x0}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x3c000c, 0x3fcf0000, 0xfcfcc0f, 0x3009801, 0xc30c}}, runePage{ref: 0x1e, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3f, 0x0, 0x0, 0xc0000}}, runePage{ref: 0x20, set: pageSet{0x7fb80004, 0x560d0047, 0x10, 0x83f10000, 0x0, 0x9098, 0x20000000, 0x0}}, runePage{ref: 0x21, set: pageSet{0x514e8020, 0xe0e145, 0x78000000, 0x0, 0x3ff0000, 0x200100, 0x3f0050, 0x0}}, runePage{ref: 0x22, set: pageSet{0xe6aeabed, 0xb04fa9, 0x120, 0xc37, 0x3e000fc, 0x800003c, 0x0, 0x0}}, runePage{ref: 0x23, set: pageSet{0x10004, 0x603, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x11111005, 0x10101010, 0xffff0000, 0x1ffff, 0xf1111, 0x96241c03, 0x3008cd8, 0x40}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1c000000, 0x5, 0xc69, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x30, set: pageSet{0xc000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xef, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000, 0xffffffff, 0xfc001fff}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4379726c, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfc5ce876844e709b, 0x3007a9e73e022bf8, 0x162edfb5a4cf19f7, 0x4f7045ff761723e1, 0x831ef29, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5feaf69c7ffabf, 0xfe87fbeffe366fff, 0x3e6fdfb5a4ff1ff7, 0xfff045fffe5febf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-BoldOblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287fbeffe366ffe, 0x162fdfb5a4ff1ff7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-ExtraLight.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x1, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffbff, 0xffffffff, 0xff3fffff}}, runePage{ref: 0x2, set: pageSet{0xcfffffff, 0x38ffff0, 0xffdf3fe0, 0xff3fa7ef, 0xff077faf, 0x7800ffff, 0x3f00ffc0, 0xf803e0}}, runePage{ref: 0x3, set: pageSet{0x8ffffff, 0x81fff1f8, 0xff008000, 0xfcff0003, 0xffffd7f0, 0xfffffffb, 0x1fe0ffff, 0xf3fe0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x7003e, 0x3030000, 0xc30fc3f, 0xffff0187, 0xc33fffff}}, runePage{ref: 0x5, set: pageSet{0x3fff0003, 0xfffe0000, 0xfc7fffff, 0xfffffffe, 0x6ff, 0x0, 0x0, 0x0}}, runePage{ref: 0x6, set: pageSet{0x0, 0x0, 0x0, 0x100000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1fffffff}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0x7dfee1c, 0xfff, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xbeff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xfe03ff73, 0x801ffbfd, 0x13fc1f, 0x1f, 0x3f021800, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0xc0c208, 0x1fffc0, 0x801c081e, 0xffffffff, 0x3ff023f, 0x0, 0x7f0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x1fc00ff, 0x10f00000, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0}}, runePage{ref: 0x23, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x4000, 0x8000, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x800}}, runePage{ref: 0x2a, set: pageSet{0x0, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x7e0c000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x1000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xff00f0, 0x7ffc, 0x3f03000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xc00f00ff, 0xc0c0, 0x0, 0x3803, 0x0, 0x0, 0xfc000000}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0x1f, 0x200, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa0000000}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x4c697375, 0x4f67616d, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5ee8f69c5cf89b, 0xf285d9effe166ffc, 0x162fdfb5a4ff1bf7, 0x67f005fffe4f23f7, 0x835efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 200, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans-Oblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287fbeffe366ffe, 0x162fdfb5a4ff1ff7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5feaf69c7ffabf, 0xfe87fbeffe366fff, 0x3e6fdfb5a4ff1ff7, 0xfff045fffe5febf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Bold.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0xfff00000, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0xffc00000, 0xffffffff, 0xffff, 0x0, 0xff000000, 0x3ff003}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5feaf69c7ffabf, 0xfe87fbeffe366fff, 0x3e6fdfb5a4ff1ff7, 0xfff045fffe5febf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 0.875}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-BoldOblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf5, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0xf0000000, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0xff0003ff, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287fbeffe366ffe, 0x162fdfb5a4ff1ff7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 0.875}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed-Oblique.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0xffffff00, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0x3}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287fbeffe366ffe, 0x162fdfb5a4ff1ff7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 0.875}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/dejavu/DejaVuSansCondensed.ttf"}, Family: "dejavusans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x8873ff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xf58effff, 0xfcff0007, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffe003f, 0xfe7fffff, 0xfffffffe, 0x6ff, 0xffff0000, 0xffff00cf, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x882016c0, 0x7fffffe, 0x4bfffff, 0xfe11ffff, 0xffffffff, 0xffffffff, 0x2159c0, 0x3ff0000}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x73ff8ff}}, runePage{ref: 0xe, set: pageSet{0x0, 0x80000000, 0x0, 0x0, 0xfef02596, 0x3bffecae, 0x33ff3f5f, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffff003f, 0x1fffffff}}, runePage{ref: 0x14, set: pageSet{0xeffffefe, 0xffbfffff, 0xfff7f7ff, 0xffffffff, 0xffffffff, 0x3fffffff, 0xffffffff, 0xfffff7ff}}, runePage{ref: 0x15, set: pageSet{0xffff00ff, 0x7fffffff, 0xfffdffff, 0xfff007ff, 0x7ffc3f, 0xffff, 0x40000000, 0x2}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0xc0, 0x7fc000, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d, set: pageSet{0xffdfffff, 0xffff7fcf, 0xefffffff, 0x298007ff, 0xf8000020, 0xffffffff, 0x3f0, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff3fc1f, 0x1fff7fff, 0x273fffff, 0x18c30000, 0x2}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xffffffff, 0xffff4bff, 0xffffffff, 0xffff023f, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf303ffff, 0x19f3, 0x0, 0x24380000, 0xf8100080, 0x7fff, 0xc000, 0x128}}, runePage{ref: 0x24, set: pageSet{0x0, 0xc, 0x0, 0x3ff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xdfffffff, 0x1ffffff, 0xf, 0x4}}, runePage{ref: 0x27, set: pageSet{0xfffff3de, 0xfffffeff, 0x7f47afff, 0xfffffffe, 0xff1fffff, 0x7ffeffff, 0x60, 0xffff0fc1}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xcc0, 0x0, 0x3, 0x0, 0x18, 0x0, 0x3fc000, 0xc000800}}, runePage{ref: 0x2a, set: pageSet{0x1ffff007, 0x8000, 0x0, 0xe0000c00, 0xffffffff, 0x7ffc001, 0x0, 0x6000000}}, runePage{ref: 0x2b, set: pageSet{0x87ffffff, 0x1f, 0x180000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xfeffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0xffffffff, 0xffff003f, 0xffffffff, 0x803f, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2e, set: pageSet{0x81000000, 0x403c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf330f0, 0x7ffc, 0x3303c00, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xf87fff00, 0xffff0ffc, 0xcfcfc3, 0xf0, 0x37e0f, 0x7ff, 0x0, 0xff000000}}, runePage{ref: 0xef, set: pageSet{0x3ffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf0, set: pageSet{0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf4, set: pageSet{0xffffffff, 0xffffff7f, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xf6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x20, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xfffcffdb, 0xffffffff, 0xffffffff, 0x3c0f, 0xdff80000, 0xf00003f0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xf, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x7fffffff, 0xf, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d3, set: pageSet{0xffffffff, 0xffffffff, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d5, set: pageSet{0x0, 0x7b000000, 0xfffdfc5f, 0xfff, 0x0, 0xffffffff, 0xfffff, 0x0}}, runePage{ref: 0x1d7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff000000, 0xfff}}, runePage{ref: 0x1ee, set: pageSet{0xffffffef, 0xaf7fe96, 0x0, 0x5ef7f796, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f0, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0xfffff, 0x7ffe7fff, 0xfffefffe, 0x0}}, runePage{ref: 0x1f3, set: pageSet{0x1fe0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x226000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0xffffffff, 0xffffefef, 0x9, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42726169, 0x43616e73, 0x436f7074, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4c616f6f, 0x4c61746e, 0x4c697375, 0x4e6b6f6f, 0x4f67616d, 0x54666e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xfe5feaf69c7ffabf, 0xfe87fbeffe366fff, 0x3e6fdfb5a4ff1ff7, 0xfff045fffe5febf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 0.875}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeMono.ttf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x7ffffffd, 0xfffff3fe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0fffff, 0xfffe00f0, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffcf, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffff9}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x16, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1ffffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff1f0000, 0x1c2000}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1fecff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0xfffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73ffffe, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x77ffe3ff, 0xfe44ed7, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0x3fffffff, 0xe06f0fff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xf335ff7d, 0xffc01fff, 0xffffffff, 0xf7ffffff, 0xffffffff, 0xffffffff, 0xfc7fffff, 0x7f0ff7f}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x7ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f0fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fefffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xc0cc1, 0x3f000000, 0xfffffc60, 0xfb7effff, 0xd7fe1fff, 0xdfff003c, 0x8fffffff, 0x3fffff9}}, runePage{ref: 0x2a, set: pageSet{0xffc0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc3f, 0xcaff9fff, 0xfe7f8fbb}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380fa020, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb8c3, 0x3fffffff, 0x5ff7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa238b3, 0xfff78300, 0xf0000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x0, 0x0, 0xc9f03, 0xf78c00, 0x0, 0x79c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe8ffffff}}, runePage{ref: 0xa9, set: pageSet{0xffffffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0xf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0xffffffff, 0xe00f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffe3ff, 0xffffffff, 0xffff1fff, 0xf303ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0x8031, 0xffff03c7, 0x280287ff, 0x30800000, 0x23800c, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x8, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x42726169, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x48656272, 0x4974616c, 0x4b616c69, 0x4c61746e, 0x52756e72, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7febf79fdffbbf, 0xffc7f9effff66fff, 0xff6fdff5e4ffdbff, 0xfff145fffe5fffff, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeMonoBold.ttf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x208ffffd, 0x9bdf002e, 0xfe7fafe7, 0xfffff3bf, 0xffff0007, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf000c, 0xfffffc78, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f1003, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffc7, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffff9}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1f7fff, 0xb73e7ef8, 0xf8ff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x114ec2eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf22000f0, 0x3f1fff, 0x200030}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fa9, 0x97bf1d2c, 0xc0cff, 0x2a060fc, 0x20, 0x2c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3050f05, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xf3ffffff, 0xffffff}}, runePage{ref: 0x26, set: pageSet{0x380, 0xeff0000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2b, set: pageSet{0xfbfc3fe0, 0xffff, 0x13f1f87, 0x3ff, 0x2000ff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xf7f28300, 0x70000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0xc0, 0x0, 0x0, 0x9f03, 0xc30000, 0x0, 0x5800000}}, runePage{ref: 0xfb, set: pageSet{0xe0000007, 0x5f7ffc01, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfc5eeaf69c4ffabf, 0xff07b9efbe366fff, 0xff6fdfb5a4ff1bff, 0xfff045fffe5febe7, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeMonoBoldOblique.ttf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x208ffffd, 0x9bdf002e, 0xfe3fafe7, 0xfffff3bf, 0xffff0007, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x7000c, 0xfffffc78, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1f7fff, 0xb73e7e78, 0xf8ff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x114e42eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf20000f0, 0x3f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fa8, 0x97bf1d2c, 0xc00fb, 0x60fc, 0x20, 0x2c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3010005, 0x600, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf3ffffff, 0xffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2b, set: pageSet{0xfbfc0000, 0xffff, 0x13f0000, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xecfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xf7f08300, 0x70000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0xc0, 0x0, 0x0, 0x9f03, 0xc30000, 0x0, 0x5000000}}, runePage{ref: 0xfb, set: pageSet{0xe0000007, 0x5f7ffc01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfc5ee8f69c4ef8bf, 0xf207b9efbe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6be7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeMonoOblique.ttf"}, Family: "freemono", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x7c8ffffd, 0xfffff3fe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0x3c7f7fff, 0xf27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffcf8, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe00f0, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x1d, set: pageSet{0x1f1fffff, 0xfffff02f, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xc3f3, 0x0}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xb73ffffe, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0x77ffe3ff, 0xfe44ed7, 0xffff681e, 0xffffffff, 0x3ff0e00, 0xf03007f0, 0x303f185f, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff01fff, 0xf7bf1d2e, 0xfb, 0x3fe000fc, 0x3c01fc, 0x7c, 0x0}}, runePage{ref: 0x23, set: pageSet{0x3350005, 0x1ffc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xfc00c269, 0x7f00fffd, 0xfff00000, 0x8003feff, 0x40003ff, 0x60031c01, 0x814080f, 0x100f0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x0, 0xffc00000, 0xfffff, 0x0, 0x63001407, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x60, 0x3e03d4, 0x1, 0x0, 0x0, 0xb00}}, runePage{ref: 0x2a, set: pageSet{0x27f, 0x8000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfbfc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38020000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x2d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0x3883, 0xfff00300, 0xf0000004, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0x0, 0x300c0, 0x0, 0x0, 0x9f03, 0xf78000, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f80007, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe8f69c5ef8bf, 0xf287f9effe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSans.ttf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xfffff3ff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0x88001000, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x7, set: pageSet{0xffffbfff, 0xffffffff, 0xe7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x14, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x15, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x16, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x18, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1a, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x783f0000, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffcf, 0xefffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c7f3, 0xf1ffcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c7e, 0xffffffff, 0xcfff0e00, 0xf13f47ff, 0x3fff1fff, 0xe0290bcf}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff1ffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x383cfffe, 0x3fe0e17f, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0xf2050f79, 0x60f, 0x0, 0x0, 0xf8000000, 0x3ffcffff, 0xf07f0000, 0x7f0ff03}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffcf0261, 0x76ff7340, 0x7, 0x47f8feff, 0xe300ffff, 0x2041c3f, 0x140600, 0x40b1f0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9f, 0x7ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xc03, 0x0, 0x0, 0x3efffc, 0x43861807, 0xd2df0007, 0x5dcf, 0x3700b01}}, runePage{ref: 0x2a, set: pageSet{0x580013ff, 0xbff3feff, 0xc066000f, 0x7fffccd, 0xe6000000, 0x78018029, 0xc2000180, 0xf8500003}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0x4ffff, 0x1ff1fe7, 0x3ff, 0xff200fff, 0xe200ffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0xf80fa030, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccb800, 0x3fffff3c, 0xbf7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa5, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0xffffffff, 0xfff, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x300c0, 0x1, 0x0, 0xc9f03, 0xf78400, 0x0, 0x71c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x102, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1fffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0xbfffffff, 0xffffffff, 0x3fff0f, 0x0}}, runePage{ref: 0x104, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3fffffff, 0x3ff, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440010, 0x40420, 0x0, 0x0}}, runePage{ref: 0x109, set: pageSet{0x8fffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xfffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1d6, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffff30, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0x3fffff, 0x0, 0x0, 0x0, 0xffc000, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0000, 0x4, 0x1, 0x0, 0x100000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1b00000, 0xf40010, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe000100, 0x8011, 0x1c4, 0x0, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xf1d00000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43616e73, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4c796369, 0x4d6c796d, 0x4f736d61, 0x50686e78, 0x53797263, 0x54616d6c, 0x54666e67, 0x55676172, 0x56616969, 0x5870656f, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7fe9f7bffefdbf, 0xf2c7fbeffff6effe, 0x16afdff5edffdbf7, 0x7ff14ffffe5f7fff, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSansBold.ttf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff3003, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff340000, 0x1c0004}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x280000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0xf2010f61, 0x60c, 0x0, 0x0, 0x0, 0x708000, 0xf0010000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xc00261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x6f073b9e, 0x1fe30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x42000001, 0xc0de0000, 0x4dc3, 0x300b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x7b0fccd, 0x60000000, 0x60000020, 0xc2000000, 0x38500003}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xffff8000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x44657661, 0x47656f72, 0x476f7468, 0x4772656b, 0x47757275, 0x48656272, 0x4c61746e, 0x4c697375, 0x4d6c796d, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe7ee9f79ffef9bf, 0xf2c7f9effff6effe, 0x16afdff5e5ffdbf7, 0x7ff145fffe5f7fff, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 600, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSansBoldOblique.ttf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffff0, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xc430ffff, 0xffffd7f0, 0xfffffffb, 0xfe7fff, 0x3b0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xf3ff3fff, 0xfffffffc, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe000f, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff1fffff, 0xdfffffcf, 0xefcfffff, 0x9000fff, 0xf8000000, 0xfffffbff, 0xfe90c003, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x4fffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf7211d78, 0xf8ff0000, 0x1fff3}}, runePage{ref: 0x21, set: pageSet{0x10da43eb, 0xde44ec7, 0xffff681e, 0xffffffff, 0xcfff0e00, 0x1ff, 0x3f07f0, 0x200000}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x3ff03fa9, 0xffbf1d2d, 0xc0cfb, 0x3fff80fc, 0x383c01fe, 0x3000207f, 0x1e3c000}}, runePage{ref: 0x23, set: pageSet{0x2010f61, 0x60c, 0x0, 0x0, 0x0, 0x700000, 0xf0000000, 0x100}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x261, 0x10001000, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0x0, 0x0, 0x1, 0xffc00000, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0xbff3fefd, 0xc006000f, 0x0, 0x0, 0x0, 0xc2000000, 0x38500001}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x0, 0x0, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x38028000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338b3, 0xfff78000, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5ee9f69c7ef8bf, 0xf287f9effe36effe, 0x162fdfb5a4ff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 600, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSansOblique.ttf"}, Family: "freesans", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xcfffffff, 0xffffffff, 0xffbfffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0x6f8ffffd, 0xfffff33e, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xcfe7fff, 0xe27f0000}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0000, 0xfffe00ff, 0xfe7fffff, 0xfffffffe, 0x86ff, 0xffff0000, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xff3fffff, 0xffffffcf, 0xefcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c3f3, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xfffffbff, 0xdfefffdf, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xf03006f0, 0x303f1fff, 0x0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffbf0d2c, 0xfccc0cfb, 0x3fffe0fc, 0x383c01fc, 0x3e0c07f, 0x61e3c000}}, runePage{ref: 0x23, set: pageSet{0x2050f61, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xf0ffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x61, 0x10000000, 0x7, 0x4000feff, 0x3f, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x6f073b9e, 0x7e30f00}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x3efffc, 0x2000007, 0xd2de0000, 0x5c03, 0x100b01}}, runePage{ref: 0x2a, set: pageSet{0x4000127f, 0x800380ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x13f1f87, 0x3ff, 0xff, 0x0, 0x201ff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x380ba010, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0xffff0000, 0xffffffff, 0x800180ff, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xa338bf, 0xffff8300, 0xf0000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x30000, 0x1, 0x0, 0xc9f03, 0xf38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8003f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x476f7468, 0x4772656b, 0x48656272, 0x4c61746e, 0x54666e67, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f6bc7efcbf, 0xf287f9effe36effe, 0x162fdfb5acff1bf7, 0x7ff045fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2000, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfcffffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x5, set: pageSet{0xffffffff, 0xfffeffff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xdfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xffffffff}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0xfffbbfee, 0xf3edfdff, 0x13bbf, 0xfe03ffcf}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0xfff0fddf, 0xffffffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x12, set: pageSet{0xffffffff, 0xffffffff, 0x3d7f3dff, 0xffffffff, 0xffff3dff, 0x7f3dffff, 0xff7fff3d, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0xff3dffff, 0xffffffff, 0xe7ffffff, 0x1fffffff, 0x0, 0xffffffff, 0xffffffff, 0x3f3fffff}}, runePage{ref: 0x17, set: pageSet{0x0, 0x7fffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0xffff0000, 0x1f3fff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1a, set: pageSet{0xcfffffff, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0x1, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x1ff, 0x0, 0xffff0000, 0x7ffffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfbffffff}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xffffffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x24, set: pageSet{0xffffffff, 0x7f, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x2cd41fff, 0x8041f1fc}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x28, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x29, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2a, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xffffffff, 0x3ff1fff, 0x3ff, 0xff200fff, 0xe2ffffff, 0x2fdff, 0xf000}}, runePage{ref: 0x2c, set: pageSet{0xffffffff, 0xffff7fff, 0x7fffffff, 0xffffffff, 0xffffffff, 0x3ffff, 0xf0000f03, 0xfe0387ff}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x2e, set: pageSet{0xfdffbfff, 0x3fffffff, 0x5fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0x4d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfe01cfff, 0x3ffffff, 0xf7ffff, 0x0, 0xff9c0000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x7f0000, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0xab, set: pageSet{0x0, 0x0, 0x0, 0xffff0230, 0xffffffff, 0xffffffff, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x44104, 0x0, 0xc0004000, 0xefbefbf, 0x76ec00, 0x0, 0x0, 0x781c0000}}, runePage{ref: 0xfd, set: pageSet{0x78001e0, 0xf000001e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x103, set: pageSet{0x0, 0xffff0000, 0x7ff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x107, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x440018, 0x40420, 0x0, 0x0}}, runePage{ref: 0x1d0, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffff}}, runePage{ref: 0x1d1, set: pageSet{0xffffffff, 0xfffffe7f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff, 0x0}}, runePage{ref: 0x1d4, set: pageSet{0xffffffff, 0xffffffff, 0xffdfffff, 0xffffffff, 0xdfffffff, 0xebffde64, 0xffffffef, 0xffffffff}}, runePage{ref: 0x1d5, set: pageSet{0xdfdfe7bf, 0x7bffffff, 0xfffdfc5f, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d6, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff3f, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1d7, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffcfff, 0xffffffff}}, runePage{ref: 0x1f0, set: pageSet{0xffffffff, 0xffff0fff, 0xffffffff, 0xffffffff, 0xfffff, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffffffff, 0xffffffff, 0xffff1fff, 0x7ffffff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x41ff0001, 0x4, 0x1, 0x0, 0x30100040, 0x400000, 0x0, 0xf8000000}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x3c0, 0x0, 0x1b00001, 0xf400fa, 0x40000000, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0xbe0c0780, 0xc0008031, 0xffff03ff, 0xe80287ff, 0x7f900000, 0x23800f, 0xc000000, 0x1f40000}}, runePage{ref: 0x1f6, set: pageSet{0x2000, 0x0, 0x18, 0xffd0f000, 0x0, 0x0, 0x0, 0x480}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}, runePage{ref: 0x1f9, set: pageSet{0x900ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x42656e67, 0x426f706f, 0x42726169, 0x42756769, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x45746869, 0x47656f72, 0x476c6167, 0x476f7468, 0x4772656b, 0x47756a72, 0x47757275, 0x48616e6f, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x4f727961, 0x53696e68, 0x54616c65, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfeffebffbfdfffff, 0xffd7f9effff7ffff, 0xffffdff5edffdbff, 0xffffddffffdfffff, 0x837fffb, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSerifBold.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffffffff}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xc3ffffff}}, runePage{ref: 0x5, set: pageSet{0xffff0003, 0xfffec0ff, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x6, set: pageSet{0xcfffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x7, set: pageSet{0x0, 0x0, 0xffff0000, 0xffffffff, 0xffffffff, 0x3ffff, 0x0, 0x0}}, runePage{ref: 0x8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x3fdfffff, 0x3e80000, 0xfffffffb}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa, set: pageSet{0xfff987ee, 0xd36dfdff, 0x5e023987, 0x3fffc0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xd63dc7ec, 0xc3ffc718, 0x813dc7, 0x7ffffc0}}, runePage{ref: 0xc, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xfffddfef, 0xf3effdff, 0x40603ddf, 0x6ffcf}}, runePage{ref: 0xd, set: pageSet{0xfffddfef, 0xffffffff, 0x8080fddf, 0xfe3fffcf, 0xfc7fffec, 0x2ffbffff, 0xff5f847f, 0x1cffc0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff170000, 0x1c01fc}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe92c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xffff0e00, 0xffffffff, 0xffffffff, 0x1ff003ff}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60f, 0x0, 0x0, 0x0, 0x8000, 0x10000, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfdffffff, 0xffffffff, 0x1fff, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x631f039f, 0x1ff3ffc0}}, runePage{ref: 0x29, set: pageSet{0xf00, 0x3f000000, 0x0, 0x3efffc, 0x82060007, 0xd29f000c, 0x5403, 0x100b00}}, runePage{ref: 0x2a, set: pageSet{0x1079, 0xafc3fefd, 0xc01e003f, 0x7fffccd, 0x66000000, 0x60000000, 0xc2000180, 0x3840038b}}, runePage{ref: 0x2b, set: pageSet{0xffffffff, 0xfffff, 0x3ff1fff, 0x3ff, 0x2000ff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0xffffffff, 0x3ffff, 0x0, 0xe0000000}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xfedfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdc4bfff, 0x3d3fffff, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xf338b3, 0xffffb303, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0xfbf03, 0xf7ec00, 0x0, 0x7f800000}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xccffffff}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffffffdb, 0xffffffff, 0xffffffff, 0xffffffff, 0xfff80003, 0xf00003ff}}, runePage{ref: 0xfc, set: pageSet{0x0, 0x0, 0xc0000000, 0x2cb2cbf, 0x162c00, 0x0, 0x0, 0x1c0000}}, runePage{ref: 0xfd, set: pageSet{0x0, 0x30000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10040000}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0xffff, 0x0, 0xffdf0000, 0xffffffff, 0xffffffff, 0xffffffff, 0x9fffffff}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff03ff, 0xffff03ff, 0xffff03ff, 0x3ff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f3, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x30000000, 0x400000, 0x0, 0x0}}, runePage{ref: 0x1f4, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x200000, 0x10, 0x0, 0x0}}, runePage{ref: 0x1f5, set: pageSet{0x3e000000, 0x8011, 0xffff0000, 0xff, 0x0, 0x0, 0xc000000, 0x0}}, runePage{ref: 0x1f6, set: pageSet{0x0, 0x0, 0x0, 0xc0000000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726162, 0x41726d6e, 0x426f706f, 0x43686572, 0x436f7074, 0x4379726c, 0x44657661, 0x47656f72, 0x4772656b, 0x47757275, 0x48656272, 0x4b6e6461, 0x4c61746e, 0x4d6c796d, 0x53696e68, 0x54616d6c, 0x54686161, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfeffebf79fdffbbf, 0xffd7f9effff66fff, 0xffefdff5e5ffdbff, 0xfff1ddfffedfffff, 0x837eff9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSerifBoldItalic.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0x3f3fffff, 0xffffffef, 0xffcfffff, 0x9800fff, 0xf8000000, 0xfffffbff, 0xfe90c403, 0xf03fdff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf73fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xd9dfcfeb, 0xfeedecf, 0xffff681e, 0xffffffff, 0xcfff0e00, 0xf30001ff, 0x303f1fff, 0x30}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0x7ff03fff, 0xffffe72f, 0xffffffff, 0xffffefff, 0x3dfcffff, 0xffdfffff, 0x61e3ffff}}, runePage{ref: 0x23, set: pageSet{0x10f01, 0x60c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xfffffc7f, 0xf1cfdfff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x60, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0xc0}}, runePage{ref: 0x29, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x800}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x33f0000, 0x0, 0x0, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xeedfffff}}, runePage{ref: 0x2e, set: pageSet{0xcdc48000, 0x3d3fff00, 0x3f7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33880, 0xfff0b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc000, 0x0, 0x9f00, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7ffe01, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xe3803000, 0x0, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f69c5ef8bf, 0xf287f9effe366ffe, 0x162fdfb5a4ff1bf7, 0x7ff0c5fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/freefont/FreeSerifItalic.ttf"}, Family: "freeserif", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x2, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x3, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfc30ffff, 0xffffd7f0, 0xfffffffb, 0xffffffff, 0xffff0003}}, runePage{ref: 0x4, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x5, set: pageSet{0xfc0f0000, 0xfffe0000, 0xfe7fffff, 0xfffffffe, 0xfffe86ff, 0xffffffff, 0xffff00ff, 0x1f07ff}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x60000, 0x30, 0xfff99fef, 0xf3c5fdff, 0xb080799f, 0x3fffffcf}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x10, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffff0000, 0xffffffff}}, runePage{ref: 0x13, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x1fffff}}, runePage{ref: 0x1d, set: pageSet{0xffffffff, 0xffffffef, 0xffffffff, 0x9800fff, 0xf8000001, 0xfffffbff, 0xfe92c403, 0xf03fcff7}}, runePage{ref: 0x1e, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x1f, set: pageSet{0x3f3fffff, 0xffffffff, 0xaaff3f3f, 0x3fffffff, 0xffffffff, 0xffdfffff, 0xefcfffdf, 0x7fdcffff}}, runePage{ref: 0x20, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xfff303df, 0x1fff7fff, 0xf77fffff, 0xffff0000, 0x1ffff}}, runePage{ref: 0x21, set: pageSet{0xffffffff, 0xdfffffff, 0xffff6c1e, 0xffffffff, 0x3ff0e00, 0xfcf006f0, 0x3c3f187f, 0x2003c0}}, runePage{ref: 0x22, set: pageSet{0xffffffff, 0xfff0ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x23, set: pageSet{0xffffff7f, 0x3fffff, 0x0, 0x0, 0x0, 0x0, 0xfc00e000, 0x7ffffff}}, runePage{ref: 0x24, set: pageSet{0x0, 0x8, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff}}, runePage{ref: 0x26, set: pageSet{0x0, 0x0, 0x0, 0xfeff, 0x0, 0x1c00, 0x0, 0x0}}, runePage{ref: 0x27, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x1fffffff}}, runePage{ref: 0x29, set: pageSet{0xc0, 0x0, 0x0, 0x0, 0xfb86007f, 0xffffffff, 0xffffffff, 0x3fffffff}}, runePage{ref: 0x2a, set: pageSet{0x79ffffff, 0xbffbfefd, 0x1ff3fff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2b, set: pageSet{0xfffc0000, 0xffff, 0x3ff1fe7, 0x3ff, 0xff, 0x0, 0x20dff, 0x0}}, runePage{ref: 0x2c, set: pageSet{0x0, 0x0, 0x0, 0x3803a000, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x2d, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffdfffff}}, runePage{ref: 0x2e, set: pageSet{0xfdccbfff, 0x3d3fff00, 0x3e7, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x32, set: pageSet{0x0, 0x0, 0xfffe0000, 0x0, 0x0, 0xfffe0000, 0x0, 0x0}}, runePage{ref: 0xa6, set: pageSet{0x0, 0x0, 0xc33bff, 0xfff8b300, 0xf3000000, 0x0, 0x0, 0x0}}, runePage{ref: 0xa7, set: pageSet{0xffffffff, 0x3ffc0, 0xc001, 0x0, 0x3bf03, 0xc38400, 0x0, 0x7000000}}, runePage{ref: 0xfb, set: pageSet{0xe0f8007f, 0x5f7fffff, 0xffdb, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfe, set: pageSet{0xffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3e000000}}, runePage{ref: 0x101, set: pageSet{0x0, 0x0, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1f1, set: pageSet{0xffff1fff, 0xffff9fff, 0xffffa3ff, 0xffff0fff, 0x1fff, 0x0, 0x0, 0xffffffc0}}, runePage{ref: 0x1f7, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0x7fff, 0x0, 0x0}}}, Scripts: ScriptSet{0x41726d6e, 0x42656e67, 0x426f706f, 0x43686572, 0x4379726c, 0x47656f72, 0x4772656b, 0x48656272, 0x4c61746e, 0x54686169, 0x5a696e68, 0x5a797979}, + Langs: LangSet{0xfe5fe9f6bc5efcbf, 0xf287f9effe366ffe, 0x162fdfb5acff1bf7, 0x7ff0c5fffe5f6bf7, 0x837efe9, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x2, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/lohit-bengali/Lohit-Bengali.ttf"}, Family: "lohitbengali", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xf8000001, 0x78000001, 0x0, 0x4, 0x800000, 0x800000}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x0, 0x30, 0xfff99fef, 0xf3fdfdff, 0xb0807f9f, 0xfffffcf}}, runePage{ref: 0x20, set: pageSet{0x3ff83000, 0x40, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x40000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x42656e67, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x20000401, 0x0, 0x8000000, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/lohit-devanagari/Lohit-Devanagari.ttf"}, Family: "lohitdevanagari", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffdffe, 0xffffffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0xcfcff0ff, 0xffffcf8f, 0xcfff31ff, 0x7f0fcc3f, 0x40000, 0x0, 0x0, 0x0}}, runePage{ref: 0x2, set: pageSet{0xf000000, 0x800000, 0x0, 0x0, 0x0, 0x10000000, 0x3f0000c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x80, 0x40, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0}}, runePage{ref: 0x9, set: pageSet{0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x1c, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x600000}}, runePage{ref: 0x20, set: pageSet{0xfff83000, 0x601007f, 0x10, 0x0, 0x1f, 0x2001000, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0x80000, 0x407c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x7c07807c, 0x800, 0x100, 0x30, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1c00, 0x0}}, runePage{ref: 0xa8, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3fffffff}}, runePage{ref: 0xfb, set: pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x44657661, 0x4772656b, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xe878e85387886193, 0x104109c73fc22bf8, 0x160cdff0c047d991, 0x277101f7360436e9, 0x831af28, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/lohit-oriya/Lohit-Odia.ttf"}, Family: "lohitodia", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x9, set: pageSet{0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xb, set: pageSet{0xfff99fee, 0xf3edfdff, 0xb0c0399f, 0xffffcf, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x20, set: pageSet{0x3000, 0x0, 0x0, 0x0, 0x0, 0x2000000, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4f727961, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x1, 0x0, 0x10000000000000, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/noto/NotoLoopedThai-Bold.ttf"}, Family: "notoloopedthai", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2001, 0x8c00f7e7, 0x28000000, 0x0, 0x0, 0x8000801, 0x800000, 0x0}}, runePage{ref: 0x2, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x800000, 0x0}}, runePage{ref: 0x3, set: pageSet{0x8, 0x20000, 0x40008000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa00, 0x0}}, runePage{ref: 0x20, set: pageSet{0x333d3800, 0x6000044, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xec, set: pageSet{0xe7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4b686d72, 0x54686169, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x1, 0x0, 0x0, 0x800000000000, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/noto/NotoLoopedThai-Regular.ttf"}, Family: "notoloopedthai", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2001, 0x8c00f7e7, 0x28000000, 0x0, 0x0, 0x8000801, 0x800000, 0x0}}, runePage{ref: 0x2, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x10000000, 0x800000, 0x0}}, runePage{ref: 0x3, set: pageSet{0x8, 0x20000, 0x40008000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xe, set: pageSet{0xfffffffe, 0x87ffffff, 0xfffffff, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xa00, 0x0}}, runePage{ref: 0x20, set: pageSet{0x333d3800, 0x6000044, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0x26, set: pageSet{0x0, 0x1000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xec, set: pageSet{0xe7f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4b686d72, 0x54686169, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x1, 0x0, 0x0, 0x800000000000, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/noto/NotoSansKhmer-Bold.ttf"}, Family: "notosanskhmer", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2001, 0x8c00f387, 0x0, 0x0, 0x0, 0x8002801, 0x0, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x3fffffff, 0x3ff03ff}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x20, set: pageSet{0x33013800, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4b686d72, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x1, 0x8000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 700, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/noto/NotoSansKhmer-Regular.ttf"}, Family: "notosanskhmer", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x2001, 0x8c00f387, 0x0, 0x0, 0x0, 0x8002801, 0x0, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x3fffffff, 0x3ff03ff}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x20, set: pageSet{0x33013800, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1000, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4b686d72, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0x1, 0x8000000000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/ttf-khmeros-core/KhmerOS.ttf"}, Family: "khmeros", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xfffeffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0x3000f, 0x20f00, 0xc0c0006, 0x61000c03, 0x40000, 0x18003, 0x0, 0x0}}, runePage{ref: 0x2, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0000c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x20b, 0x8, 0x0, 0x0, 0x100000, 0x200, 0x1, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x3fffffff, 0x3ff03ff}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0x3000, 0x3c00030, 0x3c0000ff, 0x300c, 0x0, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x20, set: pageSet{0x77183854, 0x6010047, 0x10, 0x0, 0x0, 0x1800, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x44028004, 0x800, 0x100, 0x31, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1400, 0x0}}, runePage{ref: 0xf1, set: pageSet{0x0, 0x0, 0x7ff8000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4772656b, 0x4b686d72, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xe81808408c086893, 0x9094f12022bb8, 0x60cdcb080430191, 0x56001f730042261, 0x8318f28, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}, + { + Location: font.FontID{File: "/usr/share/fonts/truetype/ttf-khmeros-core/KhmerOSsys.ttf"}, Family: "khmerossystem", + Runes: RuneSet{runePage{ref: 0x0, set: pageSet{0x0, 0xffffffff, 0xffffffff, 0x7fffffff, 0x0, 0xffffffff, 0xfffeffff, 0xffffffff}}, runePage{ref: 0x1, set: pageSet{0x3000f, 0x20f00, 0xc0c0006, 0x61000c03, 0x40000, 0x18003, 0x0, 0x0}}, runePage{ref: 0x2, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f0000c0, 0x0}}, runePage{ref: 0x3, set: pageSet{0x20b, 0x8, 0x0, 0x0, 0x100000, 0x200, 0x1, 0x0}}, runePage{ref: 0x17, set: pageSet{0x0, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0x3fffffff, 0x3ff03ff}}, runePage{ref: 0x19, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffff}}, runePage{ref: 0x1e, set: pageSet{0x3000, 0x3c00030, 0x3c0000ff, 0x300c, 0x0, 0xffffffff, 0xffffffff, 0x3ffffff}}, runePage{ref: 0x20, set: pageSet{0x77183854, 0x6010047, 0x10, 0x0, 0x0, 0x1800, 0x0, 0x0}}, runePage{ref: 0x21, set: pageSet{0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x22, set: pageSet{0x44028004, 0x800, 0x100, 0x31, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0x25, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1400, 0x0}}, runePage{ref: 0xf1, set: pageSet{0x0, 0x0, 0x7ff8000, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xfb, set: pageSet{0x6, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, runePage{ref: 0xff, set: pageSet{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x80000000}}}, Scripts: ScriptSet{0x4772656b, 0x4b686d72, 0x4c61746e, 0x5a696e68, 0x5a797979, 0x5a7a7a7a}, + Langs: LangSet{0xe81808408c086893, 0x9094f12022bb8, 0x60cdcb080430191, 0x56001f730042261, 0x8318f28, 0x0, 0x0, 0x0}, + Aspect: font.Aspect{Style: 0x1, Weight: 400, Stretch: 1}}} From 6b22967e12857ba61612e12f662705bdce6f909c Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Sat, 11 Jan 2025 12:21:23 +0100 Subject: [PATCH 11/14] [fontscan] tweak font resolution order to make it more principled --- fontscan/fontmap.go | 20 +++++---- fontscan/fontmap_test.go | 93 +++++++++++++++++++++++++++++++++++++--- fontscan/footprint.go | 18 ++++++++ fontscan/langset.go | 90 ++++++++++++++++++++++++++++++++++++++ fontscan/match.go | 64 ++++++++++++++++----------- 5 files changed, 246 insertions(+), 39 deletions(-) diff --git a/fontscan/fontmap.go b/fontscan/fontmap.go index 2ecda6b6..b11901de 100644 --- a/fontscan/fontmap.go +++ b/fontscan/fontmap.go @@ -506,18 +506,17 @@ func (fm *FontMap) resolveForLang(candidates []int, lang LangID) *font.Face { // ResolveFace select a font based on the current query (set by [FontMap.SetQuery] and [FontMap.SetScript]), // and supporting the given rune, applying CSS font selection rules. // -// Fonts are tried in 3 steps : +// Fonts are tried with the following steps : // // 1 - Only fonts matching exacly one of the [Query.Families] are considered; the list // is prunned to keep the best match with [Query.Aspect] // 2 - Fallback fonts are considered, that is fonts with similar families and fonts -// supporting the current script; the list is also prunned according to [Query.Aspect] -// 3 - All fonts matching the current script (set by [FontMap.SetScript]) are tried, +// supporting the current script; the list is also prunned according to [Query.Aspect]4 +// 3 - Fonts added manually by [AddFont] and [AddFace] will be searched, +// in the order in which they were added. +// 4 - All fonts matching the current script (set by [FontMap.SetScript]) are tried, // ignoring [Query.Aspect] // -// The fonts added manually by [AddFont] and [AddFace] -// will be searched in the order in which they were added. -// // If no fonts match after these steps, an arbitrary face will be returned. // This face will be nil only if the underlying font database is empty, // or if the file system is broken; otherwise the returned [font.Face] is always valid. @@ -546,8 +545,13 @@ func (fm *FontMap) ResolveFace(r rune) (face *font.Face) { return face } - // no need to check from user provided fonts, since the one supporting the given script - // are already added in fallback fonts + // try manually loaded faces even if the typeface doesn't match, looking for matching aspects + // and rune coverage. + // Note that, when [SetScript] has been called, this step is actually not needed, + // since the fonts supporting the given script are already added in [withFallback] fonts + if face := fm.resolveForRune(fm.candidates.manual, r); face != nil { + return face + } fm.logger.Printf("No font matched for aspect %v, script %s, and rune %U (%c) -> searching by script coverage only", fm.query.Aspect, fm.script, r, r) scriptCandidates := fm.scriptMap[fm.script] diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index 719f2545..4de1fc01 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -6,7 +6,9 @@ import ( "io" "log" "os" + "os/exec" "path/filepath" + "strings" "testing" "time" @@ -359,30 +361,109 @@ func TestFindSytemFont(t *testing.T) { tu.Assert(t, !ok) // user provided font are ignored } -func TestResolve_ScriptBengali(t *testing.T) { +// the following tests use a "linux" font configuration +func newSampleFontmap() *FontMap { fm := NewFontMap(log.New(io.Discard, "", 0)) - fm.appendFootprints(bengaliFontSet...) + fm.appendFootprints(linuxSampleFontSet...) + for _, fp := range linuxSampleFontSet { + fm.cache(fp, &font.Face{Font: new(font.Font)}) // we need a new pointer for each file + } + return fm +} + +func TestDumpSystemFonts(t *testing.T) { + t.Skip() + fontset, err := SystemFonts(nil, os.TempDir()) + tu.AssertNoErr(t, err) + + var trimmed fontSet + for _, fp := range fontset { + switch fp.Family { + case "nimbussans", "lohitbengali", "lohitdevanagari", "lohitodia", + "notoloopedthai", "notosanskhmer", "khmeros", "khmerossystem", + "freeserif", "freesans", "freemono", "dejavu", "dejavusans": + trimmed = append(trimmed, fp) + } + } + code := fmt.Sprintf(` + package fontscan + import "github.com/go-text/typesetting/font" + + // extracted from a linux system + var linuxSampleFontSet = + %#v`, trimmed) + code = strings.ReplaceAll(code, "fontscan.", "") + code = strings.ReplaceAll(code, "Footprint{", "\n{") + code = strings.ReplaceAll(code, ", Index:0x0, Instance:0x0", "") + code = strings.ReplaceAll(code, ", isUserProvided:false", "") + code = strings.ReplaceAll(code, "Location:", "\nLocation:") + code = strings.ReplaceAll(code, "Runes:", "\nRunes:") + code = strings.ReplaceAll(code, "Langs:", "\nLangs:") + code = strings.ReplaceAll(code, "Aspect:", "\nAspect:") + + err = os.WriteFile("fontmap_sample_test.go", []byte(code), os.ModePerm) + tu.AssertNoErr(t, err) + + err = exec.Command("goimports", "-w", "fontmap_sample_test.go").Run() + tu.AssertNoErr(t, err) +} + +func TestResolve_ScriptBengali(t *testing.T) { + fm := newSampleFontmap() // make sure the same font is selected for a given script, when possible text := []rune("হয় না।") fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) tu.Assert(t, len(runs) == 1) - // only one font is loaded, so there is no Location.File collision family, _ := fm.FontMetadata(runs[0].Face.Font) tu.Assert(t, family == "lohitbengali") } func TestResolve_ScriptThaana(t *testing.T) { - fm := NewFontMap(log.New(io.Discard, "", 0)) - fm.appendFootprints(thaanaFontSet...) + fm := newSampleFontmap() // make sure the same font is selected for a given script, when possible text := []rune("އުފަންވަނީ، ދަރަޖަ") fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) tu.Assert(t, len(runs) == 1) - // only one font is loaded, so there is no Location.File collision family, _ := fm.FontMetadata(runs[0].Face.Font) tu.Assert(t, family == "freeserif") + tu.Assert(t, strings.HasSuffix(fm.FontLocation(runs[0].Face.Font).File, "FreeSerif.ttf")) +} + +func TestResolve_SciptGujarati(t *testing.T) { + fm := newSampleFontmap() + + text := []rune("ମୁଁ କାଚ ଖାଇପାରେ ଏବଂ ତାହା ମୋର କ୍ଷତି କରିନଥାଏ।") + fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) + runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) + tu.Assert(t, len(runs) == 1) + family, _ := fm.FontMetadata(runs[0].Face.Font) + tu.Assert(t, family == "lohitodia") +} + +func TestResolve_SciptArabic(t *testing.T) { + fm := newSampleFontmap() + + text := []rune("میں کانچ کھا سکتا ہوں اور مجھے تکلیف نہیں ہوتی ۔") + fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) + runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) + tu.Assert(t, len(runs) == 10) + family0, _ := fm.FontMetadata(runs[0].Face.Font) + family1, _ := fm.FontMetadata(runs[1].Face.Font) + tu.Assert(t, family0 == "dejavusans") + tu.Assert(t, family1 == "freeserif") +} + +func TestResolve_SciptKhmer(t *testing.T) { + fm := newSampleFontmap() + + text := []rune("ខ្ញុំអាចញុំកញ្ចក់បាន ដោយគ្មានបញ្ហារ") + fm.SetQuery(Query{Families: []string{"Nimbus Sans"}}) + runs := (&shaping.Segmenter{}).Split(shaping.Input{Text: text, RunEnd: len(text)}, fm) + tu.Assert(t, len(runs) == 1) + family, _ := fm.FontMetadata(runs[0].Face.Font) + tu.Assert(t, family == "khmeros") } diff --git a/fontscan/footprint.go b/fontscan/footprint.go index ab80357a..92b4809d 100644 --- a/fontscan/footprint.go +++ b/fontscan/footprint.go @@ -3,6 +3,8 @@ package fontscan import ( "fmt" "os" + "path/filepath" + "strings" "github.com/go-text/typesetting/font" ot "github.com/go-text/typesetting/font/opentype" @@ -98,6 +100,22 @@ func newFootprintFromLoader(ld *ot.Loader, isUserProvided bool, buffer scanBuffe return out, buffer, nil } +// returns true for .ttf and .ttc font files +func (fp *Footprint) isTruetypeHint() bool { + switch strings.ToLower(filepath.Ext(fp.Location.File)) { + case ".ttf", ".ttc": + return true + default: + return false + } +} + +// isMonoHint returns true if "mono" is included in the family name +// this is not very precise but much more efficient than using [font.Font.IsMonospace] +func (fp *Footprint) isMonoHint() bool { + return strings.Contains(fp.Family, "mono") +} + // loadFromDisk assume the footprint location refers to the file system func (fp *Footprint) loadFromDisk() (*font.Face, error) { location := fp.Location diff --git a/fontscan/langset.go b/fontscan/langset.go index 2ad7fbb8..ae11713d 100644 --- a/fontscan/langset.go +++ b/fontscan/langset.go @@ -116,3 +116,93 @@ func (ls *LangSet) deserializeFrom(data []byte) (int, error) { } return langSetSize, nil } + +// This map returns a language tag that is reasonably +// representative of the script. This will usually be the +// most widely spoken or used language written in that script: +// for instance, the sample language for `Cyrillic` +// is 'ru' (Russian), the sample language for `Arabic` is 'ar'. +// +// For some scripts, no sample language will be returned because there +// is no language that is sufficiently representative. The best +// example of this is `Han`, where various different +// variants of written Chinese, Japanese, and Korean all use +// significantly different sets of Han characters and forms +// of shared characters. No sample language can be provided +// for many historical scripts as well. +// +// inspired by pango/pango-language.c +var scriptToLang = map[language.Script]LangID{ + language.Arabic: langAr, + language.Armenian: langHy, + language.Bengali: langBn, + // Used primarily in Taiwan, but not part of the standard + // zh-tw orthography + language.Bopomofo: 0, + language.Cherokee: langChr, + language.Coptic: langCop, + language.Cyrillic: langRu, + // Deseret was used to write English + language.Deseret: 0, + language.Devanagari: langHi, + language.Ethiopic: langAm, + language.Georgian: langKa, + language.Gothic: 0, + language.Greek: langEl, + language.Gujarati: langGu, + language.Gurmukhi: langPa, + language.Han: 0, + language.Hangul: langKo, + language.Hebrew: langHe, + language.Hiragana: langJa, + language.Kannada: langKn, + language.Katakana: langJa, + language.Khmer: langKm, + language.Lao: langLo, + language.Latin: langEn, + language.Malayalam: langMl, + language.Mongolian: langMn, + language.Myanmar: langMy, + // Ogham was used to write old Irish + language.Ogham: 0, + language.Old_Italic: 0, + language.Oriya: langOr, + language.Runic: 0, + language.Sinhala: langSi, + language.Syriac: langSyr, + language.Tamil: langTa, + language.Telugu: langTe, + language.Thaana: langDv, + language.Thai: langTh, + language.Tibetan: langBo, + language.Canadian_Aboriginal: langIu, + language.Yi: 0, + language.Tagalog: langTl, + // Phillipino languages/scripts + language.Hanunoo: langHnn, + language.Buhid: langBku, + language.Tagbanwa: langTbw, + + language.Braille: 0, + language.Cypriot: 0, + language.Limbu: 0, + // Used for Somali (so) in the past + language.Osmanya: 0, + // The Shavian alphabet was designed for English + language.Shavian: 0, + language.Linear_B: 0, + language.Tai_Le: 0, + language.Ugaritic: langUga, + + language.New_Tai_Lue: 0, + language.Buginese: langBug, + // The original script for Old Church Slavonic (chu), later + // written with Cyrillic + language.Glagolitic: 0, + // Used for for Berber (ber), but Arabic script is more common + language.Tifinagh: 0, + language.Syloti_Nagri: langSyl, + language.Old_Persian: langPeo, + + language.Nko: langNqo, +} diff --git a/fontscan/match.go b/fontscan/match.go index d4313ec4..0c78cb01 100644 --- a/fontscan/match.go +++ b/fontscan/match.go @@ -46,14 +46,14 @@ func (fc familyCrible) reset() { // fillWithSubstitutions starts from `family` // and applies all the substitutions coded in the package // to add substitutes values -func (fc familyCrible) fillWithSubstitutions(family string) { - fc.fillWithSubstitutionsList([]string{family}) +func (fc familyCrible) fillWithSubstitutions(family string, lang LangID) { + fc.fillWithSubstitutionsList([]string{family}, lang) } -func (fc familyCrible) fillWithSubstitutionsList(families []string) { +func (fc familyCrible) fillWithSubstitutionsList(families []string, lang LangID) { fl := newFamilyList(families) for _, subs := range familySubstitution { - fl.execute(subs) + fl.execute(subs, lang) } fl.compileTo(fc) @@ -80,15 +80,38 @@ func (sf *scoredFootprints) reset(fs fontSet, script language.Script) { // Len is the number of elements in the collection. func (sf scoredFootprints) Len() int { return len(sf.footprints) } +// less compares by scores, by userProvided, selects "regular" over "mono", +// then selects TTF over CFF +func less(scorei, scorej int, fpi, fpj *Footprint) bool { + if scorei < scorej { + return true + } else if scorei > scorej { + return false + } + if fpi.isUserProvided && !fpj.isUserProvided { + return true + } else if !fpi.isUserProvided && fpj.isUserProvided { + return false + } + isMonoi, isMonoj := fpi.isMonoHint(), fpj.isMonoHint() + if !isMonoi && isMonoj { + return true + } else if isMonoi && !isMonoj { + return false + } + isTTi, isTTj := fpi.isTruetypeHint(), fpj.isTruetypeHint() + return isTTi && !isTTj +} + // Less compares footprints following these rules : // - 'strong' replacements come before 'weak' ones // - among 'strong' families, only the score matters // - among 'weak' families, the footprints compatible with the given script come first -// - in any case, if two footprints have the same score (meaning they have the same family), -// user provided ones come first +// - if two footprints have the same score (meaning they have the same family), +// user provided ones come first, then "regular" over "mono" then TTF before CFF. func (sf scoredFootprints) Less(i int, j int) bool { scorei, scorej := sf.scores[i], sf.scores[j] - fpi, fpj := sf.database[sf.footprints[i]], sf.database[sf.footprints[j]] + fpi, fpj := &sf.database[sf.footprints[i]], &sf.database[sf.footprints[j]] // strong better then weak if scorei.strong && !scorej.strong { return true @@ -97,12 +120,7 @@ func (sf scoredFootprints) Less(i int, j int) bool { } // among strong substitutions, only use the score if scorei.strong { - if scorei.score < scorej.score { - return true - } else if scorei.score > scorej.score { - return false - } - return fpi.isUserProvided && !fpj.isUserProvided + return less(scorei.score, scorej.score, fpi, fpj) } // among weak substitutions, sort by script ... hasScripti, hasScriptj := fpi.Scripts.contains(sf.script), fpj.Scripts.contains(sf.script) @@ -112,12 +130,7 @@ func (sf scoredFootprints) Less(i int, j int) bool { return false } // ... then by score - if scorei.score < scorej.score { - return true - } else if scorei.score > scorej.score { - return false - } - return fpi.isUserProvided && !fpj.isUserProvided + return less(scorei.score, scorej.score, fpi, fpj) } // Swap swaps the elements with indexes i and j. @@ -175,7 +188,7 @@ func (fm fontSet) selectByFamilyExact(family string, cribleBuffer familyCrible, // - restrict the result to the first (best) family cribleBuffer.reset() - cribleBuffer.fillWithSubstitutions(family) + cribleBuffer.fillWithSubstitutions(family, 0) footprints := fm.selectByFamiliesAndScript(cribleBuffer, 0, footprintsBuffer) @@ -207,9 +220,12 @@ func (fm fontSet) selectByFamilyExact(family string, cribleBuffer familyCrible, func (fm fontSet) selectByFamilyWithSubs(queryFamilies []string, queryScript language.Script, cribleBuffer familyCrible, footprintsBuffer *scoredFootprints, ) []int { + // if not found, the zero value is fine (language based substitutions will be disabled) + queryLang := scriptToLang[queryScript] + // build the crible, handling substitutions cribleBuffer.reset() - cribleBuffer.fillWithSubstitutionsList(queryFamilies) + cribleBuffer.fillWithSubstitutionsList(queryFamilies, queryLang) return fm.selectByFamiliesAndScript(cribleBuffer, queryScript, footprintsBuffer) } @@ -221,17 +237,15 @@ func (fm fontSet) selectByFamiliesAndScript(crible familyCrible, script language // loop through the font set and stores the matching fonts into // the footprintsBuffer, to be sorted. - worstScore := math.MaxInt - len(fm) for index, footprint := range fm { if score, has := crible[footprint.Family]; has { // match by family footprintsBuffer.footprints = append(footprintsBuffer.footprints, index) footprintsBuffer.scores = append(footprintsBuffer.scores, score) } else if footprint.Scripts.contains(script) { - // match by script: add with a score worse than any family match, - // preserving the insertion order into the fontset + // match by script: add with a score worse than any family match footprintsBuffer.footprints = append(footprintsBuffer.footprints, index) - footprintsBuffer.scores = append(footprintsBuffer.scores, scoreStrong{worstScore + index, false}) + footprintsBuffer.scores = append(footprintsBuffer.scores, scoreStrong{math.MaxInt, false}) } } From 69e1db38712c67be4f1b9d4f82477f0cd8b88ec2 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Mon, 13 Jan 2025 15:47:33 +0100 Subject: [PATCH 12/14] [shaping] use optional interface to ensure backward compatibility --- fontscan/fontmap_test.go | 2 +- shaping/input.go | 23 ++++++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/fontscan/fontmap_test.go b/fontscan/fontmap_test.go index 4de1fc01..194b22de 100644 --- a/fontscan/fontmap_test.go +++ b/fontscan/fontmap_test.go @@ -67,7 +67,7 @@ func ExampleFontMap_AddFace() { // `fontMap` is now ready for text shaping, using the `ResolveFace` method } -var _ shaping.Fontmap = (*FontMap)(nil) +var _ shaping.FontmapScript = (*FontMap)(nil) func TestResolveFont(t *testing.T) { en, _ := NewLangID("en") diff --git a/shaping/input.go b/shaping/input.go index 689cca55..65e63897 100644 --- a/shaping/input.go +++ b/shaping/input.go @@ -67,6 +67,16 @@ type FontFeature struct { // Fontmap provides a general mechanism to select // a face to use when shaping text. type Fontmap interface { + // ResolveFace is called by [SplitByFace] and [Segmenter.Split] for each input rune potentially + // triggering a face change. + // It must always return a valid (non nil) [*font.Face] value. + ResolveFace(r rune) *font.Face +} + +// FontmapScript is an optional interface supporting script hints. +type FontmapScript interface { + Fontmap + // SetScript set the script to which the (next) runes passed to [ResolveFace] // belong. // @@ -75,11 +85,6 @@ type Fontmap interface { // - for runes with Common and Inherited script, the script resolved by a segmentation step // is more accurate SetScript(language.Script) - - // ResolveFace is called by [SplitByFace] and [Segmenter.Split] for each input rune potentially - // triggering a face change. - // It must always return a valid (non nil) *font.Face value. - ResolveFace(r rune) *font.Face } var _ Fontmap = fixedFontmap(nil) @@ -96,8 +101,6 @@ func (ff fixedFontmap) ResolveFace(r rune) *font.Face { return ff[0] } -func (fixedFontmap) SetScript(language.Script) {} - // SplitByFontGlyphs split the runes from 'input' to several items, sharing the same // characteristics as 'input', expected for the `Face` which is set to // the first font among 'availableFonts' providing support for all the runes @@ -116,7 +119,6 @@ func SplitByFontGlyphs(input Input, availableFaces []*font.Face) []Input { // the return value of the [Fontmap.ResolveFace] call. // The 'Face' field of 'input' is ignored: only 'availableFaces' is used to select the face. func SplitByFace(input Input, availableFaces Fontmap) []Input { - availableFaces.SetScript(input.Script) return splitByFace(input, availableFaces, nil) } @@ -365,8 +367,11 @@ func (seg *Segmenter) splitByVertOrientation() { // assume [splitByScript] has been called func (seg *Segmenter) splitByFace(faces Fontmap) { + withScript, hasScriptSupport := faces.(FontmapScript) for _, input := range seg.input { - faces.SetScript(input.Script) + if hasScriptSupport { + withScript.SetScript(input.Script) + } seg.output = splitByFace(input, faces, seg.output) } } From 7c8d0e9afdaa5b5a7ef63ce327c65d5869c16139 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Mon, 13 Jan 2025 20:36:45 +0100 Subject: [PATCH 13/14] [fontscan] fix typo in documentation --- fontscan/fontmap.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fontscan/fontmap.go b/fontscan/fontmap.go index b11901de..74967976 100644 --- a/fontscan/fontmap.go +++ b/fontscan/fontmap.go @@ -511,7 +511,7 @@ func (fm *FontMap) resolveForLang(candidates []int, lang LangID) *font.Face { // 1 - Only fonts matching exacly one of the [Query.Families] are considered; the list // is prunned to keep the best match with [Query.Aspect] // 2 - Fallback fonts are considered, that is fonts with similar families and fonts -// supporting the current script; the list is also prunned according to [Query.Aspect]4 +// supporting the current script; the list is also prunned according to [Query.Aspect] // 3 - Fonts added manually by [AddFont] and [AddFace] will be searched, // in the order in which they were added. // 4 - All fonts matching the current script (set by [FontMap.SetScript]) are tried, From 6045bbe7b3dc8027c6f16b24cb3401c699764a22 Mon Sep 17 00:00:00 2001 From: Benoit KUGLER Date: Mon, 13 Jan 2025 20:38:22 +0100 Subject: [PATCH 14/14] [fontscan] precise documentation --- fontscan/fontmap.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fontscan/fontmap.go b/fontscan/fontmap.go index 74967976..1e390ecd 100644 --- a/fontscan/fontmap.go +++ b/fontscan/fontmap.go @@ -512,8 +512,8 @@ func (fm *FontMap) resolveForLang(candidates []int, lang LangID) *font.Face { // is prunned to keep the best match with [Query.Aspect] // 2 - Fallback fonts are considered, that is fonts with similar families and fonts // supporting the current script; the list is also prunned according to [Query.Aspect] -// 3 - Fonts added manually by [AddFont] and [AddFace] will be searched, -// in the order in which they were added. +// 3 - Fonts added manually by [AddFont] and [AddFace] (prunned according to [Query.Aspect]), +// will be searched, in the order in which they were added. // 4 - All fonts matching the current script (set by [FontMap.SetScript]) are tried, // ignoring [Query.Aspect] //