+my %scriptFonts = (
+ "value" => SCRIPT, # Script
+ "a" => qr/^a(becedario|ir ?cut|ugie|uriocus ?kalligraph)/i,
+ "b" => qr/^b(reip|rush ?script)/i,
+ "c" => qr/^(chancery)/i,
+ "d" => qr/^(dancing)/i,
+ "e" => qr/^(elegante)/i,
+ "f" => qr/^femkeklaver/i,
+ "j" => qr/^jsmath.?(rsfs)/i,
+ "k" => qr/^(kaushan|karumbi|kristi)/i,
+ "m" => qr/^(math ?jax.?script|miama)/i,
+ "n" => qr/^(nanum (brush|pen) script)/i,
+ "p" => qr/^pecita/i,
+ "q" => qr/^qt( ?black ?forest|arabian|boulevard|brush ?stroke|chancery|coronation|florencia|handwriting|linostroke|merry|pandora|slogan)/i,
+ "r" => qr/^((romande.*|ruf)script|rsfs)/i,
+ "t" => qr/^typo ?script/i,
+ "u" => qr/^u(n ?pilgi|rw ?chancery|kij ?(jelliy|moy|qolyazma ?(tez|yantu)))/i,
+);
+
+my %fraktFonts = (
+ "value" => FRAKTUR, # Fraktur
+ "b" => qr/^boondox ?fraktur/i,
+ "e" => qr/^eufm/i,
+ "j" => qr/^(jsmath.?euf)/i,
+ "m" => qr/^(missaali)/i,
+ "o" => qr/^(oldania)/i,
+ "q" => qr/^qt(blackforest|cloisteredmonk|dublinirish|fraktur|heidelbergtype|(lino|london) ?scroll)/i,
+ "u" => qr/^ukij ?(kufi ?tar|mejnun ?reg)/i,
+);
+
+my %fancyFonts = (
+ "value" => FANCY, # Fancy
+ "a" => qr/^a(bandoned|bberancy|driator|irmole|lmendra ?display|lmonte (snow|woodgrain)|nalecta|ni|nklepants|nn ?stone|oyagi|rt ?nouveau ?caps|stron|xaxa)/i,
+ "b" => qr/^b(aileys|alcony|altar|andal|arbatrick|aveuse|eat ?my|etsy|iometric|iting|lankenburg|oondox ?callig|org|oron|raeside|ramalea|udmo|urnstown|utterbelly)/i,
+ "c" => qr/^c(retino|msy|abin ?sketch|arbon|arolingan|harles|hicken|hilanka|hr\d)/i,
+ "d" => qr/^dseg/i,
+ "e" => qr/^electorate/i,
+ "f" => qr/^frederika/i,
+ "g" => qr/^(gfs.?theo)/i,
+ "j" => qr/^jsmath.cmsy/i,
+ "k" => qr/^keter|kicking|kredit|kouzan/i,
+ "l" => qr/^lcmsy/i,
+ "q" => qr/^qtcaslan ?open/i,
+ "u" => qr/^u(kij ?(saet|tiken)|nion ?city)/i,
+ "v" => qr/^vectroid/i,
+);
+
+my %initialFonts = (
+ "value" => INITIALS, # Initials
+ "c" => qr/^carrick/i,
+ "e" => qr/^(eb.?garamond.?init)/i,
+ "t" => qr/^typographer/i,
+ "y" => qr/^(yinit)/i,
+);
+
+my %symbolFonts = (
+ "value" => SYMBOL, # Symbol
+ "a" => qr/^a(cademicons|lblant|lianna|mar|nka|rb?\d|rchaic|rrow|rs|rt[mt]|ssy(rb\d+)?\b|miri ?quran|mit\b)/i,
+ "b" => qr/^b(aby ?jeepers|bding|euron|guq|lex|lsy|oondox ?upr|ullets|urma)/i,
+ "c" => qr/^c(aladings|cicons|hess|msy|mex|apacitor|ounterscraps)/i,
+ "d" => qr/^(dingbats|drmsym|d05)/i,
+ "e" => qr/^e(lusiveicons|mmentaler|moji|sint|uterpe)/i,
+ "f" => qr/^(fandol.?brail|fdsymbol|fourierorns|font(awesome|ello|.?mfizz))/i,
+ "g" => qr/^(gan.?clm|gfs.?(baskerville|gazis|olga|porson|solomos|(bodoni|didot).?classic|complutum))/i,
+ "h" => qr/^h(ots|ershey)/i,
+ "j" => qr/^jsmath.?(msam|cmsy|masm|msbm|wasy|cmex|stmary)/i,
+ "l" => qr/^l(cmsy|msam|ohit ?(Assamese|Bengali|Gujarati|Gurmukhi|Kannada|Malayalam|Marathi|Nepali|Odia|Tamil))/i,
+ "m" => qr/^(marvosym|material|msam|msbm)/i,
+ "n" => qr/^(noto.*(emoji|brahmi))/i,
+ "o" => qr/^(octicons)/i,
+ "p" => qr/^patch/i,
+ "q" => qr/^(qtding ?bits)/i,
+ "s" => qr/^s(emafor|kak|tmary|s?msam|tix ?math)/i,
+ "t" => qr/^(te ?xxslh?[du]|typicons|twemoji)/i,
+ "u" => qr/^ukij ?(imaret|orxun|tughra)/i,
+ "w" => qr/^w(ebdings|asy|elfare ?brat)/i,
+);
+
+my %smallcapFonts = (
+ "value" => SMALLCAP | SERIF,
+ "c" => qr/^c(s[ct]sc\d|inzel|omputer ?modern ?sans ?italic ?regular ?\d)/i,
+ "d" => qr/^drm(it)?sc\d/i,
+ "f" => qr/^fetamont.?script/i,
+ "n" => qr/^newtxb?ttsc/i,
+ "s" => qr/^(screengem|sf.?kp.?sc)/i,
+ "t" => qr/^t1?xb?ttsc/i,
+ "v" => qr/^vn ?cccsc\d/i,
+);
+