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 }