}
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)