Regenerate the ICAO ranges table based on data extracted from Annex 10.
This commit is contained in:
parent
b5960fd44a
commit
976dc44d11
2 changed files with 276 additions and 190 deletions
66
tools/extract-icao-ranges.py
Executable file
66
tools/extract-icao-ranges.py
Executable file
|
|
@ -0,0 +1,66 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
command = [
|
||||
'pdftotext',
|
||||
'-layout',
|
||||
'-f', '187',
|
||||
'-l', '191',
|
||||
'-enc', 'ASCII7',
|
||||
'adsb-AN10_V3_cons.pdf',
|
||||
'-'
|
||||
]
|
||||
main_line = re.compile(r' ([^*]+?)\s+\*\s+([01-]{4})\s+([01-]{2})\s+([01-]{3})\s+([01-]{3})\s+([01-]{2})\s+([-]{10})\s*')
|
||||
continuation_line = re.compile(r' ([^ ].*)\s*')
|
||||
|
||||
def scan():
|
||||
matches = []
|
||||
|
||||
process = subprocess.Popen(command,
|
||||
stdin=subprocess.DEVNULL,
|
||||
stdout=subprocess.PIPE)
|
||||
match = None
|
||||
for line in process.stdout:
|
||||
line = line.decode('ascii')
|
||||
if match:
|
||||
cmatch = continuation_line.match(line)
|
||||
if cmatch:
|
||||
country = match.group(1) + ' ' + cmatch.group(1)
|
||||
else:
|
||||
country = match.group(1)
|
||||
|
||||
matches.append((country,
|
||||
match.group(2) + match.group(3) +
|
||||
match.group(4) + match.group(5) +
|
||||
match.group(6) + match.group(7)))
|
||||
|
||||
if cmatch:
|
||||
match = None
|
||||
continue
|
||||
|
||||
match = main_line.match(line)
|
||||
|
||||
if match:
|
||||
matches.append((match.group(1),
|
||||
match.group(2) + match.group(3) +
|
||||
match.group(4) + match.group(5) +
|
||||
match.group(6) + match.group(7)))
|
||||
|
||||
return matches
|
||||
|
||||
if __name__ == '__main__':
|
||||
matches = scan()
|
||||
|
||||
print ('var ICAO_Ranges = [');
|
||||
|
||||
for country, assignment in matches:
|
||||
low = int(assignment.replace('-', '0'), 2)
|
||||
high = int(assignment.replace('-', '1'), 2)
|
||||
print(' {{ start: 0x{low:06X}, end: 0x{high:06X}, country: "{country}", flag_image: "{flag}" }},'.format(
|
||||
low=low,
|
||||
high=high,
|
||||
country=country,
|
||||
flag=country.replace(' ','_').replace("'","").replace('-','_') + '.png'))
|
||||
print ('];')
|
||||
Loading…
Add table
Add a link
Reference in a new issue