summaryrefslogtreecommitdiffstats
path: root/contrib/tzdata/zishrink.awk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/tzdata/zishrink.awk')
-rw-r--r--contrib/tzdata/zishrink.awk44
1 files changed, 23 insertions, 21 deletions
diff --git a/contrib/tzdata/zishrink.awk b/contrib/tzdata/zishrink.awk
index 8876b68..4e187ac 100644
--- a/contrib/tzdata/zishrink.awk
+++ b/contrib/tzdata/zishrink.awk
@@ -20,7 +20,8 @@ function record_hash(n, name)
# Return a shortened rule name representing NAME,
# and record this relationship to the hash table.
-function gen_rule_name(name, n)
+function gen_rule_name(name, \
+ n)
{
# Use a simple memonic: the first two letters.
n = substr(name, 1, 2)
@@ -29,7 +30,8 @@ function gen_rule_name(name, n)
return n
}
-function prehash_rule_names(name)
+function prehash_rule_names( \
+ name)
{
# Rule names are not part of the tzdb API, so substitute shorter
# ones. Shortening them consistently from one release to the next
@@ -148,20 +150,21 @@ function prehash_rule_names(name)
}
}
-# Process an input line and save it for later output.
+# Process the input line LINE and save it for later output.
-function process_input_line(line, field, end, i, n, startdef)
+function process_input_line(line, \
+ field, end, i, n, startdef, \
+ linkline, ruleline, zoneline)
{
# Remove comments, normalize spaces, and append a space to each line.
sub(/#.*/, "", line)
line = line " "
gsub(/[\t ]+/, " ", line)
- # Abbreviate keywords. Do not abbreviate "Link" to just "L",
- # as pre-2017c zic erroneously diagnoses "Li" as ambiguous.
- sub(/^Link /, "Li ", line)
- sub(/^Rule /, "R ", line)
- sub(/^Zone /, "Z ", line)
+ # Abbreviate keywords and determine line type.
+ linkline = sub(/^Link /, "L ", line)
+ ruleline = sub(/^Rule /, "R ", line)
+ zoneline = sub(/^Zone /, "Z ", line)
# SystemV rules are not needed.
if (line ~ /^R SystemV /) return
@@ -169,7 +172,7 @@ function process_input_line(line, field, end, i, n, startdef)
# Replace FooAsia rules with the same rules without "Asia", as they
# are duplicates.
if (match(line, /[^ ]Asia /)) {
- if (line ~ /^R /) return
+ if (ruleline) return
line = substr(line, 1, RSTART) substr(line, RSTART + 5)
}
@@ -179,21 +182,19 @@ function process_input_line(line, field, end, i, n, startdef)
while (match(line, /:0[^:]/))
line = substr(line, 1, RSTART - 1) substr(line, RSTART + 2)
- # Abbreviate weekday names. Do not abbreviate "Sun" and "Sat", as
- # pre-2017c zic erroneously diagnoses "Su" and "Sa" as ambiguous.
+ # Abbreviate weekday names.
while (match(line, / (last)?(Mon|Wed|Fri)[ <>]/)) {
end = RSTART + RLENGTH
line = substr(line, 1, end - 4) substr(line, end - 1)
}
- while (match(line, / (last)?(Tue|Thu)[ <>]/)) {
+ while (match(line, / (last)?(Sun|Tue|Thu|Sat)[ <>]/)) {
end = RSTART + RLENGTH
line = substr(line, 1, end - 3) substr(line, end - 1)
}
- # Abbreviate "max", "only" and month names.
- # Do not abbreviate "min", as pre-2017c zic erroneously diagnoses "mi"
- # as ambiguous.
+ # Abbreviate "max", "min", "only" and month names.
gsub(/ max /, " ma ", line)
+ gsub(/ min /, " mi ", line)
gsub(/ only /, " o ", line)
gsub(/ Jan /, " Ja ", line)
gsub(/ Feb /, " F ", line)
@@ -221,7 +222,7 @@ function process_input_line(line, field, end, i, n, startdef)
n = split(line, field)
# Abbreviate rule names.
- i = field[1] == "Z" ? 4 : field[1] == "Li" ? 0 : 2
+ i = zoneline ? 4 : linkline ? 0 : 2
if (i && field[i] ~ /^[^-+0-9]/) {
if (!rule[field[i]])
rule[field[i]] = gen_rule_name(field[i])
@@ -231,11 +232,11 @@ function process_input_line(line, field, end, i, n, startdef)
# If this zone supersedes an earlier one, delete the earlier one
# from the saved output lines.
startdef = ""
- if (field[1] == "Z")
+ if (zoneline)
zonename = startdef = field[2]
- else if (field[1] == "Li")
+ else if (linkline)
zonename = startdef = field[3]
- else if (field[1] == "R")
+ else if (ruleline)
zonename = ""
if (startdef) {
i = zonedef[startdef]
@@ -254,7 +255,8 @@ function process_input_line(line, field, end, i, n, startdef)
output_line[nout++] = line
}
-function output_saved_lines(i)
+function output_saved_lines( \
+ i)
{
for (i = 0; i < nout; i++)
if (output_line[i])
OpenPOWER on IntegriCloud