bc3358fcfe
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.)
56 lines
2 KiB
Bash
Executable file
56 lines
2 KiB
Bash
Executable file
#!/bin/sh
|
|
set -e
|
|
|
|
maybe_append() {
|
|
while read -r msg; do
|
|
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
|
|
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' \
|
|
| 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/' \
|
|
| sed 's/YEAR/2005-2014/' \
|
|
| sed "s/THE PACKAGE'S COPYRIGHT HOLDER/Rodrigo Braz Monteiro, Niels Martin Hansen, Thomas Goyne et. al./" \
|
|
| sed 's/PACKAGE/Aegisub/' \
|
|
| sed 's/VERSION/3.2.0/' \
|
|
| sed 's/FIRST AUTHOR <EMAIL@ADDRESS>/Niels Martin Hansen <nielsm@aegisub.org>/' \
|
|
| sed 's/CHARSET/UTF-8/' \
|
|
> aegisub.pot
|
|
|
|
sed '/"text"/!d;s/^.*"text" : \("[^"]\+"\).*$/default_menu.json|0|\1/' ../src/libresrc/default_menu.json \
|
|
| maybe_append
|
|
|
|
sed '/"text"/!d;s/^.*"text" : \("[^"]\+"\).*$/default_menu.json|0|\1/' ../src/libresrc/osx/default_menu.json \
|
|
| maybe_append
|
|
|
|
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' \
|
|
| LC_ALL=C sort \
|
|
| xargs grep 'tr"[^"]*"' -o -n \
|
|
| sed 's/\(.*\):\([0-9]\+\):tr\(".*"\)/\1|\2|\3/' \
|
|
| maybe_append
|
|
|
|
xgettext ../packages/desktop/aegisub.desktop.in.in \
|
|
--language=Desktop --join-existing --omit-header -o aegisub.pot
|
|
|
|
xgettext ../packages/desktop/aegisub.appdata.xml.in.in \
|
|
--language=AppData --join-existing --omit-header -o aegisub.pot
|
|
|
|
grep '^_[A-Za-z0-9]*=.*' ../packages/win_installer/fragment_strings.iss.in | while read line
|
|
do
|
|
printf '%s\n' "$line" \
|
|
| sed 's/[^=]*=\(.*\)/packages\/win_installer\/fragment_strings.iss|1|"\1"/' \
|
|
| maybe_append
|
|
done
|