Files
kewt/awk/replace_variables.awk
2026-03-07 12:28:30 +01:00

65 lines
1.4 KiB
Awk

{
raw[++n] = $0
lines[n] = $0
rest = $0
while (match(rest, /--[A-Za-z0-9_-]+[[:space:]]*:[[:space:]]*[^;]+;/)) {
decl = substr(rest, RSTART, RLENGTH)
name = decl
sub(/:.*/, "", name)
gsub(/[[:space:]]/, "", name)
value = decl
sub(/^[^:]*:[[:space:]]*/, "", value)
sub(/;[[:space:]]*$/, "", value)
vars[name] = value
rest = substr(rest, RSTART + RLENGTH)
}
}
END {
in_root = 0
for (i = 1; i <= n; i++) {
line = raw[i]
if (!in_root && line ~ /:root[[:space:]]*\{/) {
in_root = 1
lines[i] = ""
if (line ~ /\}/) {
in_root = 0
}
continue
}
if (in_root) {
lines[i] = ""
if (line ~ /\}/) {
in_root = 0
}
}
}
for (i = 1; i <= n; i++) {
line = lines[i]
if (line == "") {
continue
}
changed = 1
iter = 0
while (changed && iter < 10) {
changed = 0
iter++
for (name in vars) {
token = "var(" name ")"
while ((pos = index(line, token)) > 0) {
line = substr(line, 1, pos - 1) vars[name] substr(line, pos + length(token))
changed = 1
}
}
}
print line
}
}