mirror of
https://github.com/sdr-enthusiasts/docker-planefence.git
synced 2025-12-22 11:17:06 +00:00
improve airline name resolution
This commit is contained in:
425
rootfs/scripts/to_ascii
Executable file
425
rootfs/scripts/to_ascii
Executable file
@@ -0,0 +1,425 @@
|
||||
#!/bin/bash
|
||||
#!/command/with-contenv bash
|
||||
#shellcheck shell=bash disable=SC2034
|
||||
|
||||
# -----------------------------------------------------------------------------------
|
||||
# Copyright 2025 Ramon F. Kolb - licensed under the terms and conditions
|
||||
# of GPLv3. The terms and conditions of this license are included with the Github
|
||||
# distribution of this package, and are also available here:
|
||||
# https://sdr-e.com/docker-planefence/
|
||||
#
|
||||
# This package may incorporate other software and license terms.
|
||||
# -----------------------------------------------------------------------------------
|
||||
|
||||
# Convert a string to ASCII
|
||||
# This function converts a string to ASCII by replacing all non-ASCII characters
|
||||
# with their ASCII equivalent. This is useful for converting special characters
|
||||
# in names to their ASCII equivalent.
|
||||
|
||||
function to_ascii() {
|
||||
local string="$1"
|
||||
local char
|
||||
|
||||
declare -A conv
|
||||
# Add all unique conversions here
|
||||
conv[À]="A"
|
||||
conv[Á]="A"
|
||||
conv[Â]="A"
|
||||
conv[Ã]="A"
|
||||
conv[Ä]="A"
|
||||
conv[Å]="A"
|
||||
conv[Ā]="A"
|
||||
conv[Ă]="A"
|
||||
conv[Ą]="A"
|
||||
conv[Ą]="A"
|
||||
conv[Ǎ]="A"
|
||||
conv[Ǟ]="A"
|
||||
conv[Ǡ]="A"
|
||||
conv[Ȁ]="A"
|
||||
conv[Ȃ]="A"
|
||||
conv[Ȧ]="A"
|
||||
|
||||
conv[Ç]="C"
|
||||
conv[Č]="C"
|
||||
conv[Ć]="C"
|
||||
conv[Ĉ]="C"
|
||||
conv[Ċ]="C"
|
||||
conv[Č]="C"
|
||||
|
||||
conv[Ď]="D"
|
||||
conv[Đ]="D"
|
||||
conv[Ḋ]="D"
|
||||
conv[Ḍ]="D"
|
||||
conv[Ḏ]="D"
|
||||
conv[Ḑ]="D"
|
||||
conv[Ḓ]="D"
|
||||
|
||||
conv[È]="E"
|
||||
conv[É]="E"
|
||||
conv[Ê]="E"
|
||||
conv[Ë]="E"
|
||||
conv[Ē]="E"
|
||||
conv[Ĕ]="E"
|
||||
conv[Ę]="E"
|
||||
conv[Ė]="E"
|
||||
conv[Ě]="E"
|
||||
conv[Ę]="E"
|
||||
conv[Ė]="E"
|
||||
conv[Ě]="E"
|
||||
conv[Ȅ]="E"
|
||||
conv[Ȇ]="E"
|
||||
|
||||
conv[Ĝ]="G"
|
||||
conv[Ğ]="G"
|
||||
conv[Ģ]="G"
|
||||
conv[Ġ]="G"
|
||||
conv[Ĝ]="G"
|
||||
|
||||
conv[Ĥ]="H"
|
||||
conv[Ħ]="H"
|
||||
conv[Ḣ]="H"
|
||||
conv[Ḥ]="H"
|
||||
conv[Ḧ]="H"
|
||||
conv[Ḩ]="H"
|
||||
conv[Ḫ]="H"
|
||||
|
||||
conv[Ì]="I"
|
||||
conv[Í]="I"
|
||||
conv[Î]="I"
|
||||
conv[Ï]="I"
|
||||
conv[Ĩ]="I"
|
||||
conv[Ī]="I"
|
||||
conv[Ĭ]="I"
|
||||
conv[Į]="I"
|
||||
conv[İ]="I"
|
||||
|
||||
conv[Ĵ]="J"
|
||||
|
||||
conv[Ķ]="K"
|
||||
conv[ĸ]="K"
|
||||
conv[Ḱ]="K"
|
||||
conv[Ḳ]="K"
|
||||
conv[Ḵ]="K"
|
||||
|
||||
conv[Ĺ]="L"
|
||||
conv[Ļ]="L"
|
||||
conv[Ľ]="L"
|
||||
conv[Ł]="L"
|
||||
conv[Ḷ]="L"
|
||||
conv[Ḹ]="L"
|
||||
conv[Ḻ]="L"
|
||||
conv[Ḽ]="L"
|
||||
|
||||
conv[Ḿ]="M"
|
||||
conv[Ṁ]="M"
|
||||
conv[Ṃ]="M"
|
||||
|
||||
conv[Ñ]="N"
|
||||
conv[Ń]="N"
|
||||
conv[Ņ]="N"
|
||||
conv[Ň]="N"
|
||||
conv[Ŋ]="N"
|
||||
conv[Ṅ]="N"
|
||||
conv[Ṇ]="N"
|
||||
conv[Ṉ]="N"
|
||||
conv[Ṋ]="N"
|
||||
|
||||
conv[Ò]="O"
|
||||
conv[Ó]="O"
|
||||
conv[Ô]="O"
|
||||
conv[Õ]="O"
|
||||
conv[Ö]="O"
|
||||
conv[Ø]="O"
|
||||
conv[Ō]="O"
|
||||
conv[Ŏ]="O"
|
||||
conv[Ő]="O"
|
||||
|
||||
conv[Ŕ]="R"
|
||||
conv[Ŗ]="R"
|
||||
conv[Ř]="R"
|
||||
conv[Ṙ]="R"
|
||||
conv[Ṛ]="R"
|
||||
conv[Ṝ]="R"
|
||||
|
||||
conv[Ś]="S"
|
||||
conv[Ŝ]="S"
|
||||
conv[Ş]="S"
|
||||
conv[Š]="S"
|
||||
conv[Ṡ]="S"
|
||||
conv[Ṣ]="S"
|
||||
conv[Ṥ]="S"
|
||||
conv[Ṧ]="S"
|
||||
conv[Ṩ]="S"
|
||||
|
||||
conv[Ţ]="T"
|
||||
conv[Ť]="T"
|
||||
conv[Ŧ]="T"
|
||||
conv[Ṫ]="T"
|
||||
conv[Ṭ]="T"
|
||||
conv[Ṯ]="T"
|
||||
conv[Ṱ]="T"
|
||||
|
||||
conv[Ù]="U"
|
||||
conv[Ú]="U"
|
||||
conv[Û]="U"
|
||||
conv[Ü]="U"
|
||||
conv[Ū]="U"
|
||||
conv[Ŭ]="U"
|
||||
conv[Ů]="U"
|
||||
conv[Ű]="U"
|
||||
conv[Ų]="U"
|
||||
conv[Ũ]="U"
|
||||
conv[Ṳ]="U"
|
||||
conv[Ṵ]="U"
|
||||
conv[Ṷ]="U"
|
||||
conv[Ṹ]="U"
|
||||
conv[Ṻ]="U"
|
||||
|
||||
conv[Ŵ]="W"
|
||||
conv[Ẁ]="W"
|
||||
conv[Ẃ]="W"
|
||||
conv[Ẅ]="W"
|
||||
conv[Ẇ]="W"
|
||||
|
||||
conv[Ý]="Y"
|
||||
conv[Ŷ]="Y"
|
||||
conv[Ÿ]="Y"
|
||||
conv[Ẏ]="Y"
|
||||
conv[Ỳ]="Y"
|
||||
conv[Ỵ]="Y"
|
||||
conv[Ỷ]="Y"
|
||||
conv[Ỹ]="Y"
|
||||
|
||||
conv[Ź]="Z"
|
||||
conv[Ż]="Z"
|
||||
conv[Ž]="Z"
|
||||
conv[Ẑ]="Z"
|
||||
conv[Ẓ]="Z"
|
||||
conv[Ẕ]="Z"
|
||||
conv[Ẕ]="Z"
|
||||
|
||||
conv[à]="a"
|
||||
conv[á]="a"
|
||||
conv[â]="a"
|
||||
conv[ã]="a"
|
||||
conv[ä]="a"
|
||||
conv[å]="a"
|
||||
conv[ā]="a"
|
||||
conv[ă]="a"
|
||||
conv[ą]="a"
|
||||
conv[ǎ]="a"
|
||||
conv[ǟ]="a"
|
||||
conv[ǡ]="a"
|
||||
conv[ǻ]="a"
|
||||
conv[ȁ]="a"
|
||||
conv[ȃ]="a"
|
||||
conv[ȧ]="a"
|
||||
|
||||
conv[ḃ]="b"
|
||||
conv[ḅ]="b"
|
||||
conv[ḇ]="b"
|
||||
|
||||
conv[ç]="c"
|
||||
conv[č]="c"
|
||||
conv[ĉ]="c"
|
||||
conv[ċ]="c"
|
||||
conv[ć]="c"
|
||||
conv[ċ]="c"
|
||||
conv[ĉ]="c"
|
||||
|
||||
conv[ď]="d"
|
||||
conv[đ]="d"
|
||||
conv[ḋ]="d"
|
||||
conv[ḍ]="d"
|
||||
conv[ḏ]="d"
|
||||
conv[ḑ]="d"
|
||||
conv[ḓ]="d"
|
||||
conv[ḋ]="d"
|
||||
conv[ḍ]="d"
|
||||
conv[ḏ]="d"
|
||||
conv[ḑ]="d"
|
||||
conv[ḓ]="d"
|
||||
conv[₫]="d"
|
||||
|
||||
|
||||
conv[è]="e"
|
||||
conv[é]="e"
|
||||
conv[ê]="e"
|
||||
conv[ë]="e"
|
||||
conv[ē]="e"
|
||||
conv[ĕ]="e"
|
||||
conv[ė]="e"
|
||||
conv[ę]="e"
|
||||
conv[ě]="e"
|
||||
conv[ė]="e"
|
||||
conv[ĕ]="e"
|
||||
conv[ȅ]="e"
|
||||
conv[ȇ]="e"
|
||||
|
||||
conv[ḟ]="f"
|
||||
conv[ƒ]="f"
|
||||
|
||||
conv[ĝ]="g"
|
||||
conv[ğ]="g"
|
||||
conv[ģ]="g"
|
||||
conv[ġ]="g"
|
||||
conv[ĝ]="g"
|
||||
|
||||
conv[ĥ]="h"
|
||||
conv[ħ]="h"
|
||||
conv[ḣ]="h"
|
||||
conv[ḥ]="h"
|
||||
conv[ḧ]="h"
|
||||
conv[ḩ]="h"
|
||||
conv[ḫ]="h"
|
||||
conv[ẖ]="h"
|
||||
conv[ḥ]="h"
|
||||
|
||||
conv[ì]="i"
|
||||
conv[í]="i"
|
||||
conv[î]="i"
|
||||
conv[ï]="i"
|
||||
conv[ĩ]="i"
|
||||
conv[ī]="i"
|
||||
conv[ĭ]="i"
|
||||
conv[į]="i"
|
||||
conv[ı]="i"
|
||||
conv[į]="i"
|
||||
conv[ĭ]="i"
|
||||
conv[ī]="i"
|
||||
conv[ĩ]="i"
|
||||
conv[ɨ]="i"
|
||||
conv[ᵻ]="i"
|
||||
|
||||
conv[ĵ]="j"
|
||||
conv[ǰ]="j"
|
||||
|
||||
conv[ķ]="k"
|
||||
conv[ĸ]="k"
|
||||
conv[ḱ]="k"
|
||||
conv[ḳ]="k"
|
||||
conv[ḵ]="k"
|
||||
|
||||
conv[ĺ]="l"
|
||||
conv[ļ]="l"
|
||||
conv[ľ]="l"
|
||||
conv[ł]="l"
|
||||
conv[ḷ]="l"
|
||||
conv[ḹ]="l"
|
||||
conv[ḻ]="l"
|
||||
conv[ḽ]="l"
|
||||
|
||||
conv[ṁ]="m"
|
||||
conv[ṃ]="m"
|
||||
conv[ḿ]="m"
|
||||
conv[ṁ]="m"
|
||||
|
||||
conv[ñ]="n"
|
||||
conv[ń]="n"
|
||||
conv[ņ]="n"
|
||||
conv[ň]="n"
|
||||
conv[ŋ]="n"
|
||||
conv[ṅ]="n"
|
||||
conv[ṇ]="n"
|
||||
conv[ṉ]="n"
|
||||
conv[ṋ]="n"
|
||||
|
||||
conv[ò]="o"
|
||||
conv[ó]="o"
|
||||
conv[ô]="o"
|
||||
conv[õ]="o"
|
||||
conv[ö]="o"
|
||||
conv[ø]="o"
|
||||
conv[ō]="o"
|
||||
conv[ŏ]="o"
|
||||
conv[ő]="o"
|
||||
|
||||
conv[ŕ]="r"
|
||||
conv[ŗ]="r"
|
||||
conv[ř]="r"
|
||||
conv[ṙ]="r"
|
||||
conv[ṛ]="r"
|
||||
conv[ṝ]="r"
|
||||
|
||||
conv[ś]="s"
|
||||
conv[ŝ]="s"
|
||||
conv[ş]="s"
|
||||
conv[š]="s"
|
||||
conv[ṡ]="s"
|
||||
conv[ṣ]="s"
|
||||
conv[ṥ]="s"
|
||||
conv[ṧ]="s"
|
||||
conv[ṩ]="s"
|
||||
conv[ʃ]="s"
|
||||
|
||||
conv[ţ]="t"
|
||||
conv[ť]="t"
|
||||
conv[ŧ]="t"
|
||||
conv[ṫ]="t"
|
||||
conv[ṭ]="t"
|
||||
conv[ṯ]="t"
|
||||
conv[ṱ]="t"
|
||||
conv[ẗ]="t"
|
||||
|
||||
conv[ù]="u"
|
||||
conv[ú]="u"
|
||||
conv[û]="u"
|
||||
conv[ü]="u"
|
||||
conv[ū]="u"
|
||||
conv[ŭ]="u"
|
||||
conv[ů]="u"
|
||||
conv[ű]="u"
|
||||
conv[ų]="u"
|
||||
conv[ũ]="u"
|
||||
conv[ṳ]="u"
|
||||
conv[ṵ]="u"
|
||||
conv[ṷ]="u"
|
||||
conv[ṹ]="u"
|
||||
conv[ṻ]="u"
|
||||
|
||||
conv[ŵ]="w"
|
||||
conv[ẁ]="w"
|
||||
conv[ẃ]="w"
|
||||
conv[ẅ]="w"
|
||||
conv[ẇ]="w"
|
||||
|
||||
conv[ý]="y"
|
||||
conv[ÿ]="ij"
|
||||
conv[ŷ]="y"
|
||||
conv[ẏ]="y"
|
||||
conv[ẙ]="y"
|
||||
conv[ỳ]="y"
|
||||
conv[ỵ]="y"
|
||||
conv[ỷ]="y"
|
||||
conv[ỹ]="y"
|
||||
conv[ij]="ij"
|
||||
|
||||
conv[ź]="z"
|
||||
conv[ż]="z"
|
||||
conv[ž]="z"
|
||||
conv[ẑ]="z"
|
||||
conv[ẓ]="z"
|
||||
conv[ẕ]="z"
|
||||
|
||||
|
||||
conv[æ]="ae"
|
||||
conv[œ]="oe"
|
||||
conv[ß]="ss"
|
||||
conv[þ]="th"
|
||||
conv[ð]="dh"
|
||||
conv[" & "]=" AND "
|
||||
conv["&"]=" AND "
|
||||
|
||||
for char in "${!conv[@]}"; do
|
||||
string="${string//"$char"/"${conv[$char]}"}"
|
||||
done
|
||||
|
||||
echo "${string//[^[:alnum:] ]/}" | xargs
|
||||
}
|
||||
|
||||
if [[ -z "$1" ]]; then
|
||||
echo "Usage: $0 <string>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
to_ascii "$1"
|
||||
@@ -78,7 +78,8 @@ CLEANUP_CACHE ()
|
||||
if [[ "$2" -gt "0" ]]; then CACHETIME="$2"; else CACHETIME=7; fi
|
||||
if [[ -f "$1" ]]; then
|
||||
# we could probably combine these, but... first remove the items that have expired in the cache
|
||||
awk -F ',' -v a="$(date -d "-$CACHETIME days" +%s)" -v b="$(date -d "-$REMOTEMISSCACHE seconds" +%s)" '{if ( ( $3 >= a && $2 != "#NOTFOUND") || ( $3 >= b && $2 == "#NOTFOUND")){print $1 "," $2 "," $3}}' "$1" >/tmp/namecache 2>/dev/null
|
||||
awk -F ',' -v a="$(date -d "-$CACHETIME days" +%s)" -v b="$(date -d "-$REMOTEMISSCACHE seconds" +%s)" \
|
||||
'{if ( ( $3 >= a && $2 != "#NOTFOUND") || ( $3 >= b && $2 == "#NOTFOUND")){print $1 "," $2 "," $3}}' "$1" >/tmp/namecache 2>/dev/null
|
||||
awk -F',' '!seen[$1]++' /tmp/namecache > "$1"
|
||||
rm -f /tmp/namecache
|
||||
fi
|
||||
@@ -190,9 +191,7 @@ fi
|
||||
|
||||
# Clean up the results
|
||||
if [[ -n "$b" ]]; then
|
||||
b="${b^^}"
|
||||
b="${b//[^[:alnum:] ]/}" # cleanup any non alphanumeric characters
|
||||
b="$(echo "$b"|xargs)" #clean up extra spaces
|
||||
b="$(/scripts/to_ascii "${b^^}")" # convert to ASCII and uppercase
|
||||
b="${b% [A-Z0-9]}" #clean up single letters/numbers at the end, so "KENNEDY JOHN F" becomes "KENNEDY JOHN"
|
||||
b="${b% DBA}" #clean up some undesired suffices, mostly corporate entity names
|
||||
b="${b% TRUSTEE}"
|
||||
|
||||
Reference in New Issue
Block a user