1*946379e7Schristos#! /bin/sh 2*946379e7Schristos 3*946379e7Schristos# Test checking of Emacs Lisp format strings. 4*946379e7Schristos 5*946379e7Schristostmpfiles="" 6*946379e7Schristostrap 'rm -fr $tmpfiles' 1 2 3 15 7*946379e7Schristos 8*946379e7Schristostmpfiles="$tmpfiles f-el-2.data" 9*946379e7Schristoscat <<\EOF > f-el-2.data 10*946379e7Schristos# Valid: %% doesn't count 11*946379e7Schristosmsgid "abc%%def" 12*946379e7Schristosmsgstr "xyz" 13*946379e7Schristos# Invalid: invalid msgstr 14*946379e7Schristosmsgid "abc%%def" 15*946379e7Schristosmsgstr "xyz%" 16*946379e7Schristos# Valid: same arguments 17*946379e7Schristosmsgid "abc%s%xdef" 18*946379e7Schristosmsgstr "xyz%s%x" 19*946379e7Schristos# Valid: same arguments, with different widths 20*946379e7Schristosmsgid "abc%2sdef" 21*946379e7Schristosmsgstr "xyz%3s" 22*946379e7Schristos# Valid: same arguments but in numbered syntax 23*946379e7Schristosmsgid "abc%s%xdef" 24*946379e7Schristosmsgstr "xyz%1$s%2$x" 25*946379e7Schristos# Valid: permutation 26*946379e7Schristosmsgid "abc%s%x%cdef" 27*946379e7Schristosmsgstr "xyz%3$c%2$x%1$s" 28*946379e7Schristos# Invalid: too few arguments 29*946379e7Schristosmsgid "abc%2$xdef%1$s" 30*946379e7Schristosmsgstr "xyz%1$s" 31*946379e7Schristos# Invalid: too few arguments 32*946379e7Schristosmsgid "abc%sdef%x" 33*946379e7Schristosmsgstr "xyz%s" 34*946379e7Schristos# Invalid: too many arguments 35*946379e7Schristosmsgid "abc%xdef" 36*946379e7Schristosmsgstr "xyz%xvw%c" 37*946379e7Schristos# Valid: same numbered arguments, with different widths 38*946379e7Schristosmsgid "abc%2$5s%1$4s" 39*946379e7Schristosmsgstr "xyz%2$4s%1$5s" 40*946379e7Schristos# Invalid: missing argument 41*946379e7Schristosmsgid "abc%2$sdef%1$x" 42*946379e7Schristosmsgstr "xyz%1$x" 43*946379e7Schristos# Invalid: missing argument 44*946379e7Schristosmsgid "abc%1$sdef%2$x" 45*946379e7Schristosmsgstr "xyz%2$x" 46*946379e7Schristos# Invalid: added argument 47*946379e7Schristosmsgid "abc%1$xdef" 48*946379e7Schristosmsgstr "xyz%1$xvw%2$c" 49*946379e7Schristos# Valid: type compatibility 50*946379e7Schristosmsgid "abc%d" 51*946379e7Schristosmsgstr "xyz%i" 52*946379e7Schristos# Valid: type compatibility 53*946379e7Schristosmsgid "abc%d" 54*946379e7Schristosmsgstr "xyz%x" 55*946379e7Schristos# Valid: type compatibility 56*946379e7Schristosmsgid "abc%d" 57*946379e7Schristosmsgstr "xyz%X" 58*946379e7Schristos# Valid: type compatibility 59*946379e7Schristosmsgid "abc%d" 60*946379e7Schristosmsgstr "xyz%o" 61*946379e7Schristos# Valid: type compatibility 62*946379e7Schristosmsgid "abc%x" 63*946379e7Schristosmsgstr "xyz%X" 64*946379e7Schristos# Valid: type compatibility 65*946379e7Schristosmsgid "abc%x" 66*946379e7Schristosmsgstr "xyz%o" 67*946379e7Schristos# Valid: type compatibility 68*946379e7Schristosmsgid "abc%X" 69*946379e7Schristosmsgstr "xyz%o" 70*946379e7Schristos# Valid: type compatibility 71*946379e7Schristosmsgid "abc%e" 72*946379e7Schristosmsgstr "xyz%E" 73*946379e7Schristos# Valid: type compatibility 74*946379e7Schristosmsgid "abc%e" 75*946379e7Schristosmsgstr "xyz%f" 76*946379e7Schristos# Valid: type compatibility 77*946379e7Schristosmsgid "abc%e" 78*946379e7Schristosmsgstr "xyz%g" 79*946379e7Schristos# Valid: type compatibility 80*946379e7Schristosmsgid "abc%e" 81*946379e7Schristosmsgstr "xyz%G" 82*946379e7Schristos# Invalid: type incompatibility 83*946379e7Schristosmsgid "abc%c" 84*946379e7Schristosmsgstr "xyz%d" 85*946379e7Schristos# Invalid: type incompatibility 86*946379e7Schristosmsgid "abc%c" 87*946379e7Schristosmsgstr "xyz%i" 88*946379e7Schristos# Invalid: type incompatibility 89*946379e7Schristosmsgid "abc%c" 90*946379e7Schristosmsgstr "xyz%x" 91*946379e7Schristos# Invalid: type incompatibility 92*946379e7Schristosmsgid "abc%c" 93*946379e7Schristosmsgstr "xyz%X" 94*946379e7Schristos# Invalid: type incompatibility 95*946379e7Schristosmsgid "abc%c" 96*946379e7Schristosmsgstr "xyz%o" 97*946379e7Schristos# Invalid: type incompatibility 98*946379e7Schristosmsgid "abc%c" 99*946379e7Schristosmsgstr "xyz%e" 100*946379e7Schristos# Invalid: type incompatibility 101*946379e7Schristosmsgid "abc%c" 102*946379e7Schristosmsgstr "xyz%E" 103*946379e7Schristos# Invalid: type incompatibility 104*946379e7Schristosmsgid "abc%c" 105*946379e7Schristosmsgstr "xyz%f" 106*946379e7Schristos# Invalid: type incompatibility 107*946379e7Schristosmsgid "abc%c" 108*946379e7Schristosmsgstr "xyz%g" 109*946379e7Schristos# Invalid: type incompatibility 110*946379e7Schristosmsgid "abc%c" 111*946379e7Schristosmsgstr "xyz%G" 112*946379e7Schristos# Invalid: type incompatibility 113*946379e7Schristosmsgid "abc%c" 114*946379e7Schristosmsgstr "xyz%s" 115*946379e7Schristos# Invalid: type incompatibility 116*946379e7Schristosmsgid "abc%c" 117*946379e7Schristosmsgstr "xyz%S" 118*946379e7Schristos# Invalid: type incompatibility 119*946379e7Schristosmsgid "abc%d" 120*946379e7Schristosmsgstr "xyz%e" 121*946379e7Schristos# Invalid: type incompatibility 122*946379e7Schristosmsgid "abc%d" 123*946379e7Schristosmsgstr "xyz%E" 124*946379e7Schristos# Invalid: type incompatibility 125*946379e7Schristosmsgid "abc%d" 126*946379e7Schristosmsgstr "xyz%f" 127*946379e7Schristos# Invalid: type incompatibility 128*946379e7Schristosmsgid "abc%d" 129*946379e7Schristosmsgstr "xyz%g" 130*946379e7Schristos# Invalid: type incompatibility 131*946379e7Schristosmsgid "abc%d" 132*946379e7Schristosmsgstr "xyz%G" 133*946379e7Schristos# Invalid: type incompatibility 134*946379e7Schristosmsgid "abc%d" 135*946379e7Schristosmsgstr "xyz%s" 136*946379e7Schristos# Invalid: type incompatibility 137*946379e7Schristosmsgid "abc%d" 138*946379e7Schristosmsgstr "xyz%S" 139*946379e7Schristos# Invalid: type incompatibility 140*946379e7Schristosmsgid "abc%i" 141*946379e7Schristosmsgstr "xyz%e" 142*946379e7Schristos# Invalid: type incompatibility 143*946379e7Schristosmsgid "abc%i" 144*946379e7Schristosmsgstr "xyz%E" 145*946379e7Schristos# Invalid: type incompatibility 146*946379e7Schristosmsgid "abc%i" 147*946379e7Schristosmsgstr "xyz%f" 148*946379e7Schristos# Invalid: type incompatibility 149*946379e7Schristosmsgid "abc%i" 150*946379e7Schristosmsgstr "xyz%g" 151*946379e7Schristos# Invalid: type incompatibility 152*946379e7Schristosmsgid "abc%i" 153*946379e7Schristosmsgstr "xyz%G" 154*946379e7Schristos# Invalid: type incompatibility 155*946379e7Schristosmsgid "abc%i" 156*946379e7Schristosmsgstr "xyz%s" 157*946379e7Schristos# Invalid: type incompatibility 158*946379e7Schristosmsgid "abc%i" 159*946379e7Schristosmsgstr "xyz%S" 160*946379e7Schristos# Invalid: type incompatibility 161*946379e7Schristosmsgid "abc%x" 162*946379e7Schristosmsgstr "xyz%e" 163*946379e7Schristos# Invalid: type incompatibility 164*946379e7Schristosmsgid "abc%x" 165*946379e7Schristosmsgstr "xyz%E" 166*946379e7Schristos# Invalid: type incompatibility 167*946379e7Schristosmsgid "abc%x" 168*946379e7Schristosmsgstr "xyz%f" 169*946379e7Schristos# Invalid: type incompatibility 170*946379e7Schristosmsgid "abc%x" 171*946379e7Schristosmsgstr "xyz%g" 172*946379e7Schristos# Invalid: type incompatibility 173*946379e7Schristosmsgid "abc%x" 174*946379e7Schristosmsgstr "xyz%G" 175*946379e7Schristos# Invalid: type incompatibility 176*946379e7Schristosmsgid "abc%x" 177*946379e7Schristosmsgstr "xyz%s" 178*946379e7Schristos# Invalid: type incompatibility 179*946379e7Schristosmsgid "abc%x" 180*946379e7Schristosmsgstr "xyz%S" 181*946379e7Schristos# Invalid: type incompatibility 182*946379e7Schristosmsgid "abc%X" 183*946379e7Schristosmsgstr "xyz%e" 184*946379e7Schristos# Invalid: type incompatibility 185*946379e7Schristosmsgid "abc%X" 186*946379e7Schristosmsgstr "xyz%E" 187*946379e7Schristos# Invalid: type incompatibility 188*946379e7Schristosmsgid "abc%X" 189*946379e7Schristosmsgstr "xyz%f" 190*946379e7Schristos# Invalid: type incompatibility 191*946379e7Schristosmsgid "abc%X" 192*946379e7Schristosmsgstr "xyz%g" 193*946379e7Schristos# Invalid: type incompatibility 194*946379e7Schristosmsgid "abc%X" 195*946379e7Schristosmsgstr "xyz%G" 196*946379e7Schristos# Invalid: type incompatibility 197*946379e7Schristosmsgid "abc%X" 198*946379e7Schristosmsgstr "xyz%s" 199*946379e7Schristos# Invalid: type incompatibility 200*946379e7Schristosmsgid "abc%X" 201*946379e7Schristosmsgstr "xyz%S" 202*946379e7Schristos# Invalid: type incompatibility 203*946379e7Schristosmsgid "abc%o" 204*946379e7Schristosmsgstr "xyz%e" 205*946379e7Schristos# Invalid: type incompatibility 206*946379e7Schristosmsgid "abc%o" 207*946379e7Schristosmsgstr "xyz%E" 208*946379e7Schristos# Invalid: type incompatibility 209*946379e7Schristosmsgid "abc%o" 210*946379e7Schristosmsgstr "xyz%f" 211*946379e7Schristos# Invalid: type incompatibility 212*946379e7Schristosmsgid "abc%o" 213*946379e7Schristosmsgstr "xyz%g" 214*946379e7Schristos# Invalid: type incompatibility 215*946379e7Schristosmsgid "abc%o" 216*946379e7Schristosmsgstr "xyz%G" 217*946379e7Schristos# Invalid: type incompatibility 218*946379e7Schristosmsgid "abc%o" 219*946379e7Schristosmsgstr "xyz%s" 220*946379e7Schristos# Invalid: type incompatibility 221*946379e7Schristosmsgid "abc%o" 222*946379e7Schristosmsgstr "xyz%S" 223*946379e7Schristos# Invalid: type incompatibility 224*946379e7Schristosmsgid "abc%e" 225*946379e7Schristosmsgstr "xyz%s" 226*946379e7Schristos# Invalid: type incompatibility 227*946379e7Schristosmsgid "abc%e" 228*946379e7Schristosmsgstr "xyz%S" 229*946379e7Schristos# Invalid: type incompatibility 230*946379e7Schristosmsgid "abc%E" 231*946379e7Schristosmsgstr "xyz%s" 232*946379e7Schristos# Invalid: type incompatibility 233*946379e7Schristosmsgid "abc%E" 234*946379e7Schristosmsgstr "xyz%S" 235*946379e7Schristos# Invalid: type incompatibility 236*946379e7Schristosmsgid "abc%f" 237*946379e7Schristosmsgstr "xyz%s" 238*946379e7Schristos# Invalid: type incompatibility 239*946379e7Schristosmsgid "abc%f" 240*946379e7Schristosmsgstr "xyz%S" 241*946379e7Schristos# Invalid: type incompatibility 242*946379e7Schristosmsgid "abc%g" 243*946379e7Schristosmsgstr "xyz%s" 244*946379e7Schristos# Invalid: type incompatibility 245*946379e7Schristosmsgid "abc%g" 246*946379e7Schristosmsgstr "xyz%S" 247*946379e7Schristos# Invalid: type incompatibility 248*946379e7Schristosmsgid "abc%G" 249*946379e7Schristosmsgstr "xyz%s" 250*946379e7Schristos# Invalid: type incompatibility 251*946379e7Schristosmsgid "abc%G" 252*946379e7Schristosmsgstr "xyz%S" 253*946379e7Schristos# Invalid: type incompatibility 254*946379e7Schristosmsgid "abc%s" 255*946379e7Schristosmsgstr "xyz%S" 256*946379e7SchristosEOF 257*946379e7Schristos 258*946379e7Schristos: ${MSGFMT=msgfmt} 259*946379e7Schristosn=0 260*946379e7Schristoswhile read comment; do 261*946379e7Schristos read msgid_line 262*946379e7Schristos read msgstr_line 263*946379e7Schristos n=`expr $n + 1` 264*946379e7Schristos tmpfiles="$tmpfiles f-el-2-$n.po f-el-2-$n.mo" 265*946379e7Schristos cat <<EOF > f-el-2-$n.po 266*946379e7Schristos#, elisp-format 267*946379e7Schristos${msgid_line} 268*946379e7Schristos${msgstr_line} 269*946379e7SchristosEOF 270*946379e7Schristos fail= 271*946379e7Schristos if echo "$comment" | grep 'Valid:' > /dev/null; then 272*946379e7Schristos if ${MSGFMT} --check-format -o f-el-2-$n.mo f-el-2-$n.po; then 273*946379e7Schristos : 274*946379e7Schristos else 275*946379e7Schristos fail=yes 276*946379e7Schristos fi 277*946379e7Schristos else 278*946379e7Schristos ${MSGFMT} --check-format -o f-el-2-$n.mo f-el-2-$n.po 2> /dev/null 279*946379e7Schristos if test $? = 1; then 280*946379e7Schristos : 281*946379e7Schristos else 282*946379e7Schristos fail=yes 283*946379e7Schristos fi 284*946379e7Schristos fi 285*946379e7Schristos if test -n "$fail"; then 286*946379e7Schristos echo "Format string checking error:" 1>&2 287*946379e7Schristos cat f-el-2-$n.po 1>&2 288*946379e7Schristos exit 1 289*946379e7Schristos fi 290*946379e7Schristos rm -f f-el-2-$n.po f-el-2-$n.mo 291*946379e7Schristosdone < f-el-2.data 292*946379e7Schristos 293*946379e7Schristosrm -fr $tmpfiles 294*946379e7Schristos 295*946379e7Schristosexit 0 296