mirror of https://github.com/odrling/Aegisub
po/make_pot: increase portability across shells
Base POSIX leaves the handling of backslahes in the operand implementation defined. The XSI extension specifies several escape sequences, like e.g. \n, which shall be transformed upon printing. Current make_pot.sh expects XSI behaviour and indeed e.g. dash’s echo builtin implements this. echo builtins of other common shells such as bash however, do not (by default). Avoid this portability pitfall by just using printf at all relevant places. See: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html https://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html This also allows us to stop substituting each backslash with four backslashes before piping to maybe_append. This substituion existed to safely pass backslahes through maybe_append’s two layers of echo. Also improve quoting. For consistency prefer single-quote quoting over shell backslash escapes. QUote the unguarded *.lua to ensure it will continue to work if there happen to be any lua files in the scripts working directory. This supersedes commits from wangqr/Aegisub which adjusted quoting and echo usage to work with different shells. This is more throughout and doesn't introduce semi-broken intermediate states.0fbcaea871
4aee271d03
940181c7bc
(Note the second commit actually didn't manage to achieve the intended portability, since several echo usages remained and it forgot to adjust the backslash substitution, which was then fixed in the third commit.)
This commit is contained in:
parent
f417f6f1ad
commit
bc3358fcfe
|
@ -3,17 +3,18 @@ set -e
|
|||
|
||||
maybe_append() {
|
||||
while read -r msg; do
|
||||
msgfile=$(echo $msg | cut -d'|' -f1)
|
||||
msgline=$(echo $msg | cut -d'|' -f2)
|
||||
msgid=$(echo $msg | cut -d'|' -f3-)
|
||||
msgfile=$(printf '%s' "$msg" | cut -d'|' -f1)
|
||||
msgline=$(printf '%s' "$msg" | cut -d'|' -f2)
|
||||
msgid=$(printf '%s' "$msg" | cut -d'|' -f3-)
|
||||
|
||||
if ! grep -Fq "msgid $msgid" aegisub.pot; then
|
||||
echo "\n#: $msgfile:$msgline\nmsgid $msgid\nmsgstr \"\"\n" >> aegisub.pot
|
||||
printf "\n#: %s:%s\nmsgid %s\nmsgstr \"\"\n\n" \
|
||||
"$msgfile" "$msgline" "$msgid" >> aegisub.pot
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
find ../src ../src/command -name \*.cpp -o -name \*.h \
|
||||
find ../src ../src/command -name '*.cpp' -o -name '*.h' \
|
||||
| xgettext --files-from=- -o - --c++ --sort-by-file \
|
||||
-k_ -kSTR_MENU -kSTR_DISP -kSTR_HELP -kfmt_tl -kfmt_plural:2,3 -kwxT -kwxPLURAL:1,2 \
|
||||
| sed 's/SOME DESCRIPTIVE TITLE./Aegisub 3.2/' \
|
||||
|
@ -35,11 +36,10 @@ grep '"[A-Za-z ]\+" : {' -n ../src/libresrc/default_hotkey.json \
|
|||
| sed 's/^\([0-9]\+:\).*\("[^"]\+"\).*$/default_hotkey.json|\1|\2/' \
|
||||
| maybe_append
|
||||
|
||||
find ../automation -name *.lua \
|
||||
find ../automation -name '*.lua' \
|
||||
| LC_ALL=C sort \
|
||||
| xargs grep tr\"[^\"]\*\" -o -n \
|
||||
| xargs grep 'tr"[^"]*"' -o -n \
|
||||
| sed 's/\(.*\):\([0-9]\+\):tr\(".*"\)/\1|\2|\3/' \
|
||||
| sed 's/\\/\\\\\\\\/g' \
|
||||
| maybe_append
|
||||
|
||||
xgettext ../packages/desktop/aegisub.desktop.in.in \
|
||||
|
@ -50,7 +50,7 @@ xgettext ../packages/desktop/aegisub.appdata.xml.in.in \
|
|||
|
||||
grep '^_[A-Za-z0-9]*=.*' ../packages/win_installer/fragment_strings.iss.in | while read line
|
||||
do
|
||||
echo "$line" \
|
||||
printf '%s\n' "$line" \
|
||||
| sed 's/[^=]*=\(.*\)/packages\/win_installer\/fragment_strings.iss|1|"\1"/' \
|
||||
| maybe_append
|
||||
done
|
||||
|
|
Loading…
Reference in New Issue