-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathveron.go
93 lines (78 loc) · 2.54 KB
/
veron.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
This file contains the implementation of the specific things for contests announced by the Dutch amateur radio association VERON.
*/
package conval
import (
"regexp"
"strings"
"github.com/ftl/hamradio/callsign"
)
func init() {
commonPropertyValidators[PAProvinceProperty] = RegexpValidator(validPAProvince, "PA province")
commonPropertyGetters[PAProvinceProperty] = getTheirExchangeProperty(PAProvinceProperty)
commonPropertyGetters[VeronEntityProperty] = PropertyGetterFunc(getVeronEntity)
myPropertyGetters[PAProvinceProperty] = getMyExchangeProperty(PAProvinceProperty)
myPropertyGetters[VeronEntityProperty] = PropertyGetterFunc(getMyVeronEntity)
}
const (
PAProvinceProperty Property = "pa_province"
VeronEntityProperty Property = "veron_entity"
)
var (
validPAProvince = regexp.MustCompile(`DR|FL|FR|GD|GR|LB|NB|NH|OV|UT|ZH|ZL`)
)
func getMyVeronEntity(_ QSO, setup Setup, _ PrefixDatabase) string {
return VeronEntity(setup.MyCall, setup.MyCountry)
}
func getVeronEntity(qso QSO, _ Setup, _ PrefixDatabase) string {
return VeronEntity(qso.TheirCall, qso.TheirCountry)
}
func VeronEntity(call callsign.Callsign, dxccEntity DXCCEntity) string {
dxccEntity = DXCCEntity(strings.ToUpper(string(dxccEntity)))
switch dxccEntity {
case "CE", "JA", "LU", "PY", "K", "VK", "ZS", "ZL":
return string(dxccEntity) + veronCallAreaNumber(call)
case "VE":
return CanadianTerritory(call)
case "UA9":
return "UA" + veronCallAreaNumber(call)
default:
return string(dxccEntity)
}
}
var veronNumberCallAreaExpression = regexp.MustCompile("[0-9]+")
func veronCallAreaNumber(call callsign.Callsign) string {
var number string
switch {
case call.Prefix != "":
number = veronNumberCallAreaExpression.FindString(call.Prefix)
case call.Suffix != "":
number = veronNumberCallAreaExpression.FindString(call.Suffix)
default:
number = veronNumberCallAreaExpression.FindString(call.BaseCall[1:])
}
if number == "" {
number = "0"
}
if len(number) > 1 {
number = number[1:]
}
return number
}
var canadianPrefixExpression = regexp.MustCompile("[CVX][A-Z][0-9]")
func CanadianTerritory(call callsign.Callsign) string {
// according to https://hamwaves.com/map.ca/en/index.html
callPrefix := ""
if callPrefix == "" && call.Prefix != "" {
callPrefix = canadianPrefixExpression.FindString(call.Prefix)
}
if callPrefix == "" {
callPrefix = canadianPrefixExpression.FindString(call.BaseCall)
}
switch callPrefix {
case "VO1", "VO2", "VY1", "VY2", "VY9", "VY0", "CY0", "CY9":
return callPrefix
default:
return "VE" + veronCallAreaNumber(call)
}
}