X-Git-Url: https://git.draconx.ca/gitweb/dxcommon.git/blobdiff_plain/e0eee379d3bce3e3629175d4a214439da630c1ed..HEAD:/scripts/gen-strtab.awk diff --git a/scripts/gen-strtab.awk b/scripts/gen-strtab.awk index beacad6..2a56fd6 100755 --- a/scripts/gen-strtab.awk +++ b/scripts/gen-strtab.awk @@ -1,6 +1,6 @@ #!/bin/awk -f # -# Copyright © 2021, 2023 Nick Bowler +# Copyright © 2021, 2023-2024 Nick Bowler # # Generate a C string table based on an input string specification file. # @@ -116,23 +116,20 @@ sub(/^[&]/, "") { vars[num_vars++] = ident; } - current_l10n = !sub(/^[&]/, "", $1); - startline = NR - ident = $1 + current_l10n = !sub(/^[&]/, ""); + startline = NR; + ident = $1; - $1 = "" - collected = "" + collected = ""; + sub(/^[^ \t]*/, ""); } ident != "" { - sub(/^[ \t]*/, "") - if (collected) { - collected = collected "\n" $0 - } else { - collected = $0 - } + sub(/^[ \t]*/, ""); - endline = NR + sep = collected != "" ? "\n" : ""; + collected = collected sep $0; + endline = NR; } END { @@ -210,25 +207,25 @@ END { # strings[ident] = val. function finish_string_input(strings, ident, val, n, tmpval) { - gsub(/\\\\/, "\1", val); + gsub(/\\\\/, "\2", val); if (endline > startline) val = val "\n"; gsub(/\\\n/, "", val); tmpval = "" while ((n = match(val, /\\[^abtnvfr]/)) > 0) { - tmpval = tmpval substr(val, 1, n-1) - val = substr(val, n+1) + tmpval = tmpval substr(val, 1, n-1); + val = substr(val, n+1); } - tmpval = tmpval val + tmpval = tmpval val; # Escape special characters - gsub(/"/, bs"\"", tmpval) - gsub(/\t/, bs"t", tmpval) - gsub(/\n/, bs"n", tmpval) - gsub("\1", bs bs, tmpval) + gsub(/"/, bs"\"", tmpval); + gsub(/\t/, bs"t", tmpval); + gsub(/\n/, bs"n", tmpval); + gsub("\2", bs bs, tmpval); - strings[ident] = tmpval + strings[ident] = tmpval; if (!current_l10n) { nol10n[tmpval] = 1; }