}
BEGIN {
+ # Check if "\\\\" in substitutions gives just one backslash.
+ bs = "x"; sub(/x/, "\\\\", bs);
+ bs = (length(bs) == 1 ? "\\\\" : "\\");
+
has_actions = 0
sopt_string = ""
num_options = 0
lopt_strings = add_to_strtab(lopt_strings, sorted_options[i], offsets)
}
gsub(/[^ ]+/, "\"&", lopt_strings)
- gsub(/ /, "\\0\"\n\t", lopt_strings)
+ gsub(/ /, bs"0\"\n\t", lopt_strings)
print "static const char lopt_strings[] ="
print "\t" lopt_strings "\";\n"
help_offsets[opt] = help_pos
help_pos += length(help) + 1
- gsub(/"/, "\\\"", help)
- gsub(/\n/, "\\n\"\n\t \"", help)
+ gsub(/"/, bs"\"", help)
+ gsub(/\n/, bs"n\"\n\t \"", help)
help = "\tPN_(\"" opt "\",\n\t \"" help "\")"
}
}
}
BEGIN {
+ # Check if "\\\\" in substitutions gives just one backslash.
+ bs = "x"; sub(/x/, "\\\\", bs);
+ bs = (length(bs) == 1 ? "\\\\" : "\\");
+
opts["zero"] = 1
opts["macro"] = 0
collected = ident = ""
for (i = 0; i < count; i++) {
s = sorted_strings[i]
- gsub(/\\\\/, "\2\2", s)
+ gsub(/\\\\/, "\2", s)
if ((n = index(strtab "\1", s "\1")) > 0) {
offsets[sorted_strings[i]] = real_length(substr(strtab, 1, n-1));
if (!(sorted_strings[i] in nol10n))
}
}
- gsub(/\2/, "\\", strtab);
+ gsub("\2", bs bs, strtab);
n = split(strtab, split_strtab, "\1");
for (i = 1; i <= n; i++) {
printf("\t%4s ", i > !!opts["zero"] ? "\"\\0\"" : "");
# strings[ident] = val.
function finish_string_input(strings, ident, val, n, tmpval)
{
- gsub(/\\\\/, "\1\1", val)
- val = val (endline > startline ? "\n" : "")
- gsub(/\\\n/, "", val)
+ gsub(/\\\\/, "\1", val);
+ if (endline > startline)
+ val = val "\n";
+ gsub(/\\\n/, "", val);
tmpval = ""
while ((n = match(val, /\\[^abtnvfr]/)) > 0) {
tmpval = tmpval val
# Escape special characters
- gsub(/"/, "\\\"", tmpval)
- gsub(/\t/, "\\t", tmpval)
- gsub(/\n/, "\\n", tmpval)
- gsub(/\1/, "\\", tmpval)
+ gsub(/"/, bs"\"", tmpval)
+ gsub(/\t/, bs"t", tmpval)
+ gsub(/\n/, bs"n", tmpval)
+ gsub("\1", bs bs, tmpval)
strings[ident] = tmpval
if (!current_l10n) {
function real_length(s, t)
{
t = length(s)
- return t - gsub(/\\.|\2\2/, "&", s)
+ return t - gsub(/\\./, "&", s)
}
# bucketsort(dst, src)
}
BEGIN {
+ # Check if "\\\\" in substitutions gives just one backslash.
+ bs = "x"; sub(/x/, "\\\\", bs);
+ bs = (length(bs) == 1 ? "\\\\" : "\\");
+
opts["strtab"] = 1;
depth = max_depth = 0;
}
}
- gsub(/\1/, "\"\n\t\"\\0\" \"", entry_strtab);
+ gsub("\1", "\"\n\t\"" bs "0\" \"", entry_strtab);
sub(/^"/, "", entry_strtab);
sub(/\n[^\n]*$/, ";", entry_strtab);
print "\nstatic const char tree_strtab[] =" entry_strtab