qsl designer

This commit is contained in:
2026-06-11 21:54:35 +02:00
parent 6150498a9e
commit 408b29896c
252 changed files with 13989 additions and 277 deletions
+83
View File
@@ -0,0 +1,83 @@
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
}