#!/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.
#
}
sub(/^[&]/, "") {
- if (ident) {
- finish_string_input(strings, ident, collected)
- vars[num_vars++] = ident
+ if (ident != "") {
+ finish_string_input(strings, ident, collected);
+ 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
- }
+ident != "" {
+ sub(/^[ \t]*/, "");
- endline = NR
+ sep = collected != "" ? "\n" : "";
+ collected = collected sep $0;
+ endline = NR;
}
END {
- if (ident) {
+ if (ident != "") {
finish_string_input(strings, ident, collected)
vars[num_vars++] = ident
}
# 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;
}