#! /bin/sh . "${srcdir=.}/init.sh"; path_prepend_ . ../src # Test checking of Lisp format strings. cat <<\EOF > f-l-2.data # Valid: ~~ doesn't count msgid "abc~~def" msgstr "xyz" # Invalid: invalid msgstr msgid "abc~~def" msgstr "xyz~" # Valid: same argument msgid "abc~Ddef" msgstr "xyz~D" # Valid: same arguments msgid "abc~1000000@*~Ddef" msgstr "~1000000@*xyz~D" # Valid: permutation msgid "abc~D~C~Fdef" msgstr "xyz~2@*~F~2:*~C~2:*~D" # Invalid: too few arguments msgid "abc~1@*~Sdef~0@*~S" msgstr "xyz~S" # Invalid: too many arguments msgid "abc~Ddef" msgstr "xyz~Duvw~C" # Invalid: missing non-final argument msgid "abc~1@*~Sdef~0@*~F" msgstr "xyz~1@*~S" # Invalid: added non-final argument msgid "abc~1@*~Ddef" msgstr "xyz~F~D" # Valid: formatting variations msgid "abc~Sdef" msgstr "xyz~:S" # Valid: formatting variations msgid "abc~4Sdef" msgstr "xyz~7S" # Valid: type compatibility msgid "abc~Sdef" msgstr "xyz~W" # Valid: type compatibility msgid "abc~Ddef" msgstr "xyz~B" # Valid: type compatibility msgid "abc~Ddef" msgstr "xyz~O" # Valid: type compatibility msgid "abc~Ddef" msgstr "xyz~X" # Valid: type compatibility msgid "abc~Ddef" msgstr "xyz~R" # Valid: optional plural msgid "~D egg~:P" msgstr "~D Eier" # Valid: type compatibility msgid "abc~Fdef" msgstr "xyz~E" # Valid: type compatibility msgid "abc~Fdef" msgstr "xyz~G" # Valid: type compatibility msgid "abc~Fdef" msgstr "xyz~$" # Invalid: type incompatibility msgid "abc~Fdef" msgstr "xyz~D" # Invalid: type incompatibility msgid "abc~Ddef" msgstr "xyz~C" # Invalid: type incompatibility msgid "abc~Fdef" msgstr "xyz~C" # Invalid: type incompatibility msgid "abc~Sdef" msgstr "xyz~D" # Invalid: type incompatibility msgid "abc~Sdef" msgstr "xyz~F" # Invalid: type incompatibility msgid "abc~Sdef" msgstr "xyz~C" # Valid: extra formatting msgid "abc~Ddef~S" msgstr "xyz~D~_def~%~S" # Valid: FORMAT-GOTO doesn't consume an argument by itself msgid "abc~5@*~Ddef~C" msgstr "xyz~6@*~C~2@*uvw~5@*~R" # Invalid: @ matters msgid "abc~?" msgstr "xyz~@?" # Valid: case conversion is optional msgid "abc~(~S~)" msgstr "xyz~S" # Valid: case conversion is optional msgid "abc~(~D~^ ~D~)" msgstr "xyz~D~^ ~D" # Invalid: ~^ matters msgid "abc~(~D~^ ~D~)" msgstr "xyz~(~D ~D~)" # Valid: case conversion is optional, and it doesn't catch ~^ msgid "abc~(~D~^ ~D~)def~C" msgstr "xyz~D~^ ~Duvw~C" # Valid: synonymous conditionals msgid "abc~@[~D~]def~C" msgstr "xyz~:[~;~:*~D~]~C" # Valid: synonymous conditionals msgid "abc~Ddef" msgstr "abc~[null~;eins~:;~:*~D~]def" # Valid: conditionals are optional and don't catch ~^ msgid "abc~:[~;~]~^~D~C" msgstr "xyz~:[uvw~^~R~;~:*~S~^~D~]~C" # Invalid: ~:[ requires an argument, ~1@* doesn't msgid "abc~1@*~^~D~C" msgstr "xyz~:[uvw~^~R~;~:*~S~^~D~]~C" # Invalid: ~{~} is special msgid "abc~{ ~}" msgstr "xyz~{~}" # Invalid: @ matters msgid "abc~{~S~}" msgstr "xyz~@{~S~}" # Invalid: @ matters msgid "abc~:{~S~}" msgstr "xyz~@:{~S~}" # Invalid: : matters msgid "abc~{~S~}" msgstr "xyz~:{~S~}" # Invalid: : matters msgid "abc~@{~S~}" msgstr "xyz~@:{~S~}" # Invalid: @: matters msgid "abc~{~S~}" msgstr "xyz~@:{~S~}" # Valid: permutation inside iteration msgid "abc~{~D ~C~}" msgstr "xyz~{~1@*~C~2:*~D~1*~}" # Invalid: permutation inside iteration, but wrong position at iteration end msgid "abc~{~D ~C~}" msgstr "xyz~{~1@*~C~2:*~D~}" # Invalid: ~^ inside iteration matters msgid "abc~{~D ~^~C~}" msgstr "xyz~{~D ~C~}" # Invalid: ~^ inside iteration depends on position msgid "abc~{~D ~^~C~}" msgstr "xyz~{~1@*~C~^~2:*~D~1*~}" # Invalid: ~^ inside iteration depends on position msgid "abc~{~D ~^~C~}" msgstr "xyz~{~1@*~C~2:*~^~D~1*~}" # Invalid: ~^ inside iteration depends on position msgid "abc~{~D ~^~C~}" msgstr "xyz~{~1@*~C~2:*~D~^~1*~}" # Invalid: ~^ inside iteration depends on position msgid "abc~{~D ~^~C~}" msgstr "xyz~{~1@*~C~2:*~D~1*~^~}" # Valid: justification is optional msgid "abc~<~D~;~C~>" msgstr "xyz~D~C" # Valid: justification with different segmentation msgid "abc~<~D ~D~;~C~;~S~S~>" msgstr "xyz~<~D~;~D~C~S~;~S~>" # Invalid: justification catches ~^ msgid "abc~<~D~;~^~D~>~C" msgstr "abc~D~^~D~C" # Invalid: type compatibility with non-strict checking msgid "abc~{~c~c~}" msgid_plural "abc~{~c~c~}" msgstr[0] "xyz~{~c~d~}" msgstr[1] "xyz~{~c~d~}" EOF : ${MSGFMT=msgfmt} n=0 while read comment; do read msgid_line read msgstr_line msgid_plural_line="" if echo "$msgstr_line" | grep '^msgid_plural' > /dev/null; then msgid_plural_line="$msgstr_line" read msgstr0_line read msgstr1_line fi n=`expr $n + 1` if test -z "$msgid_plural_line"; then cat < f-l-2-$n.po #, lisp-format ${msgid_line} ${msgstr_line} EOF else cat < f-l-2-$n.po #, lisp-format ${msgid_line} ${msgid_plural_line} ${msgstr0_line} ${msgstr1_line} EOF fi fail= if echo "$comment" | grep 'Valid:' > /dev/null; then if ${MSGFMT} --check-format -o f-l-2-$n.mo f-l-2-$n.po; then : else fail=yes fi else ${MSGFMT} --check-format -o f-l-2-$n.mo f-l-2-$n.po 2> /dev/null if test $? = 1; then : else fail=yes fi fi if test -n "$fail"; then echo "Format string checking error:" 1>&2 cat f-l-2-$n.po 1>&2 exit 1 fi rm -f f-l-2-$n.po f-l-2-$n.mo done < f-l-2.data exit 0