From 0d881509ee9918d52a47f64717eab75c5a2d5c7a Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Fri, 8 Jul 2022 22:41:31 -0500 Subject: Refactor license_convert --- licensor | 162 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 80 insertions(+), 82 deletions(-) diff --git a/licensor b/licensor index 5e784bb..3e0e065 100755 --- a/licensor +++ b/licensor @@ -182,100 +182,98 @@ put() { printf '%s\n' "$*"; } log() { $_quiet || put "$PRGN: $*" >&2; } license_convert() { - copyright="$1" # "Copyright (C) 2022 Case Duckworth " - show_optional="${2:-0}" # 0 - fold_output="${3:-1}" # 1 - fold_width="${4:-70}" # 70 - awk ' -BEGIN { + copyright="$1" + show_optional="${2:-0}" + fold_output="${3:-1}" + fold_width="${4:-70}" + awk 'BEGIN { foldOutput = '"$fold_output"' foldWidth = '"$fold_width"' showOptional = '"$show_optional"' - copyright = "'"$copyright"'" + FIELDS["copyright"] = "'"$copyright"'" + optional = 0 + buffer = "" + begOptRx = showOptional ? "<]*>>" : "<]*>>.*" + endOptRx = showOptional ? "<]*>>" : ".*<]*>>" } -{ buf = buf "\n" $0 } -END { - split(buf, b, "") - c = 1 - out = "" - optstr = "" - opt = 0 - while (c <= length(b)) { - if (b[c] == "<" && b[c + 1] == "<") { - tok = "" - c += 2 - closed = 0 - while (! closed) { - tok = tok b[c++] - if (b[c] == "<" && b[c + 1] == "<") { - closed-- - c += 2 - if (closed < 0) { - closed = 0 - } - } - if (b[c] == ">" && b[c + 1] == ">") { - closed++ - c += 2 - } - } - if (tok ~ /^beginOptional/) { - opt = 1 - } else if (tok == "endOptional") { - if (showOptional) { - out = out optstr - } - opt = 0 - optstr = "" - } else if (tok ~ /^var/) { - split(tok, ta, ";") - name = "" - original = "" - for (a in ta) { - if (ta[a] ~ "^name") { - match(ta[a], /=".*/) - name = substr(ta[a], RSTART + 2, RLENGTH - 3) - } else if (ta[a] ~ "^original") { - match(ta[a], /=".*/) - original = substr(ta[a], RSTART + 2, RLENGTH - 3) - } else if (ta[a] ~ "^match") { - # currently not used - } - } - if (name == "copyright") { - out = out copyright - } else { - out = out original - } - } - continue + +/<>/ { + match($0, /<>/) + split(substr($0, RSTART + 6, RLENGTH - 8), _rule, ";") + for (r in _rule) { + key = substr(_rule[r], 1, index(_rule[r], "=") - 1) + val = substr(_rule[r], index(_rule[r], "=") + 1) + rule[key] = val + } + for (r in rule) { + quoted = match(rule[r], /^".*"$/) + if (quoted) { + rule[r] = substr(rule[r], RSTART + 1, RLENGTH - 2) } - if (opt) { - optstr = optstr b[c++] - } else { - out = out b[c++] + # print r, rule[r] + } + name = rule["name"] + # print FIELDS[name] + sub(/<>/, (FIELDS[name] ? FIELDS[name] : rule["original"]), $0) +} + +/<>/ { + optional = 1 + if (match($0,/<>.*<>/)) { + optional = 0 + if (! showOptional) { + sub(/<>.*<>/, "", $0) } } + sub(begOptRx, "", $0) +} + +/<>/ { + sub(endOptRx, "", $0) + optional = 0 +} + +optional && ! showOptional { + next +} + +{ + bufput() +} + +END { # "Fold" the output if (foldOutput) { - split(out, oa, "\n") - out = "" - for (l in oa) { - split(oa[l], la, FS) - lc = 0 - for (w in la) { - lc += length(la[w]) + 1 - if (lc >= foldWidth) { - out = out "\n" la[w] " " - lc = length(la[w]) + 1 - } else { - out = out la[w] " " - } + buffer = fold(buffer, foldWidth) + } + print buffer +} + + +function bufput(str, sep) +{ + buffer = buffer (buffer ? (sep ? sep : "\n") : "") (str ? str : $0) +} + +function fold(out, foldWidth) +{ + split(out, oa, "\n") + out = "" + for (l in oa) { + split(oa[l], la, FS) + lc = 0 + for (w in la) { + lc += length(la[w]) + 1 + if (lc >= foldWidth) { + out = out "\n" la[w] " " + lc = length(la[w]) + 1 + } else { + out = out la[w] " " } - out = out "\n" } + out = out "\n" } - print out + return out } ' } -- cgit 1.4.1-21-gabe81