84 lines
3.5 KiB
Go
84 lines
3.5 KiB
Go
package qslcard
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
)
|
|
|
|
//go:embed assets/flags
|
|
var flagsFS embed.FS
|
|
|
|
// dxccISO maps ADIF DXCC entity numbers to ISO-3166 alpha-2 codes for the
|
|
// embedded flag set. Mirrors frontend/src/lib/flags.ts (the UI flag table) —
|
|
// keep the two in sync. Unknown entities yield no flag (graceful: better
|
|
// than a wrong one). French overseas territories map to "fr" (tricolore).
|
|
var dxccISO = map[int]string{
|
|
// North America
|
|
1: "ca", 291: "us", 6: "us", 110: "us", 50: "mx",
|
|
202: "pr", 285: "vi", 91: "vg", 69: "ky", 82: "jm", 60: "bs", 64: "bm",
|
|
78: "ht", 72: "do", 70: "cu", 62: "bb", 90: "tt", 77: "gd", 97: "lc",
|
|
98: "vc", 95: "dm", 96: "ms", 249: "kn", 94: "ag", 89: "tc",
|
|
79: "fr", 84: "fr", 63: "fr",
|
|
// Central America
|
|
66: "bz", 80: "hn", 74: "sv", 86: "ni", 308: "cr", 88: "pa", 76: "gt",
|
|
// South America
|
|
116: "co", 120: "ec", 71: "ec", 136: "pe", 104: "bo", 112: "cl",
|
|
100: "ar", 144: "uy", 132: "py", 108: "br", 148: "ve", 129: "gy",
|
|
140: "sr", 216: "co",
|
|
// Western Europe
|
|
227: "fr", 214: "fr", 230: "de", 209: "be", 263: "nl", 254: "lu",
|
|
287: "ch", 251: "li", 206: "at", 248: "it", 225: "it", 281: "es",
|
|
272: "pt", 203: "ad", 278: "sm", 295: "va", 260: "mc",
|
|
// British Isles
|
|
223: "gb-eng", 279: "gb-sct", 294: "gb-wls", 265: "gb-nir", 245: "ie",
|
|
114: "im", 122: "je", 106: "gg",
|
|
// Central / Eastern Europe
|
|
269: "pl", 503: "cz", 504: "sk", 239: "hu", 275: "ro", 212: "bg",
|
|
296: "rs", 514: "me", 499: "si", 497: "hr", 501: "ba", 502: "mk",
|
|
522: "xk", 7: "al",
|
|
// Greece / Mediterranean
|
|
236: "gr", 45: "gr", 40: "gr", 180: "gr", 215: "cy", 257: "mt", 390: "tr",
|
|
// Nordic / Baltic
|
|
221: "dk", 222: "fo", 237: "gl", 284: "se", 266: "no", 224: "fi",
|
|
5: "ax", 242: "is", 52: "ee", 145: "lv", 146: "lt",
|
|
// Eastern Europe / Caucasus / Russia
|
|
27: "by", 288: "ua", 179: "md", 75: "ge", 14: "am", 18: "az",
|
|
54: "ru", 15: "ru", 126: "ru",
|
|
// Middle East
|
|
336: "il", 342: "jo", 354: "lb", 384: "sy", 378: "sa", 391: "ae",
|
|
304: "bh", 348: "kw", 376: "qa", 370: "om", 492: "ye", 330: "ir", 333: "iq",
|
|
// North Africa
|
|
478: "eg", 436: "ly", 400: "dz", 446: "ma", 302: "eh", 474: "tn",
|
|
// Sub-Saharan Africa
|
|
462: "za", 464: "na", 402: "bw", 452: "zw", 482: "zm", 181: "mz",
|
|
438: "mg", 165: "mu", 453: "fr", 379: "sc", 430: "ke", 470: "tz",
|
|
286: "ug", 53: "et", 51: "er", 466: "sd", 521: "ss", 450: "ng",
|
|
424: "gh", 406: "cm", 456: "sn", 434: "lr", 458: "sl", 416: "bj",
|
|
483: "tg", 428: "ci", 442: "ml", 187: "ne", 410: "td", 32: "cv",
|
|
420: "ga", 444: "mr", 382: "dj", 454: "rw", 107: "gn", 39: "km", 169: "fr",
|
|
// Asia
|
|
339: "jp", 137: "kr", 344: "kp", 318: "cn", 324: "in", 372: "pk",
|
|
315: "lk", 369: "np", 305: "bd", 306: "bt", 309: "mm", 299: "my",
|
|
46: "my", 381: "sg", 327: "id", 375: "ph", 345: "bn", 312: "kh",
|
|
143: "la", 387: "th", 293: "vn", 130: "kz", 292: "uz", 280: "tm",
|
|
262: "tj", 135: "kg", 3: "af", 159: "mv", 363: "mn", 321: "hk",
|
|
386: "tw", 511: "tl",
|
|
// Oceania
|
|
150: "au", 163: "pg", 185: "sb", 158: "vu", 176: "fj", 190: "ws",
|
|
170: "nz", 162: "fr", 175: "fr", 160: "to", 282: "tv", 301: "ki",
|
|
188: "nu", 168: "mh", 189: "nf", 147: "au",
|
|
}
|
|
|
|
// FlagISO returns the ISO code of the embedded flag for a DXCC entity, or
|
|
// "" when no flag is available.
|
|
func FlagISO(dxcc int) string { return dxccISO[dxcc] }
|
|
|
|
// FlagSVG returns the embedded 4:3 flag SVG for an ISO code.
|
|
func FlagSVG(iso string) ([]byte, error) {
|
|
b, err := flagsFS.ReadFile("assets/flags/" + iso + ".svg")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("flag %s: %w", iso, err)
|
|
}
|
|
return b, nil
|
|
}
|