2 . "${srcdir=.}/init.sh"; path_prepend_ . ../src
4 # Test recognition of Lisp format strings.
6 cat <<\EOF > f-l-1.data
7 # Valid: no argument, ( | . *)
9 # Valid: one argument, (* | . *)
11 # Valid: 11 arguments, (* * * * * * * * * * * | . *)
13 # Invalid: unterminated
15 # Invalid: unterminated
17 # Invalid: unterminated
19 # Invalid: unterminated
25 # Valid: colon and atsign
27 # Valid: atsign and colon
29 # Valid: params before atsign and colon
31 # Invalid: params after atsign and colon
33 # Invalid: params after atsign and colon
35 # Invalid: params after atsign and colon
37 # Valid: V and # params, (i() * | . *)
39 # Invalid: wrong type params
41 # Valid: FORMAT-ASCII, (i() i() i() c() * | . *)
43 # Invalid: too many params
45 # Valid: FORMAT-S-EXPRESSION, (i() i() i() c() * | . *)
47 # Invalid: too many params
49 # Valid: FORMAT-WRITE, (* | . *)
51 # Invalid: too many params
53 # Valid: FORMAT-DECIMAL, (i() c() c() i() i | . *)
55 # Invalid: too many params
57 # Valid: FORMAT-BINARY, (i() c() c() i() i | . *)
59 # Invalid: too many params
61 # Valid: FORMAT-OCTAL, (i() c() c() i() i | . *)
63 # Invalid: too many params
65 # Valid: FORMAT-HEXADECIMAL, (i() c() c() i() i | . *)
67 # Invalid: too many params
69 # Valid: FORMAT-RADIX, (i() i() c() c() i() i | . *)
71 # Invalid: too many params
73 # Valid: FORMAT-PLURAL, (* | . *)
75 # Valid: FORMAT-PLURAL, (i | . *)
77 # Invalid: too many params
79 # Valid: FORMAT-CHARACTER, (c | . *)
81 # Invalid: too many params
83 # Valid: FORMAT-FIXED-FLOAT, (i() i() i() c() c() r | . *)
85 # Invalid: too many params
87 # Valid: FORMAT-EXPONENTIAL-FLOAT, (i() i() i() i() c() c() c() r | . *)
89 # Invalid: too many params
90 "abc~v,v,v,v,v,v,v,5E"
91 # Valid: FORMAT-GENERAL-FLOAT, (i() i() i() i() c() c() c() r | . *)
93 # Invalid: too many params
94 "abc~v,v,v,v,v,v,v,5G"
95 # Valid: FORMAT-DOLLARS-FLOAT, (i() i() i() c() r | . *)
97 # Invalid: too many params
99 # Valid: FORMAT-TERPRI, (i() | . *)
101 # Invalid: too many params
103 # Valid: FORMAT-FRESH-LINE, (i() | . *)
105 # Invalid: too many params
107 # Valid: FORMAT-PAGE, (i() | . *)
109 # Invalid: too many params
111 # Valid: FORMAT-TILDE, (i() | . *)
113 # Invalid: too many params
115 # Valid: underscore, ( | . *)
117 # Invalid: too many params
119 # Valid: FORMAT-TABULATE, (i() i() | . *)
121 # Invalid: too many params
123 # Valid: FORMAT-GOTO absolute, (* r c | . *)
125 # Invalid: type incompatibility
127 # Valid: FORMAT-GOTO backward, (* c r | . *)
129 # Invalid: type incompatibility
131 # Invalid: too many params
133 # Valid: FORMAT-GOTO with large number
134 "abc~S~F~S~1000000@*~C"
135 # Valid: FORMAT-INDIRECTION, (~ ( | . *) | . *)
137 # Valid: FORMAT-INDIRECTION, (~ | . *)
139 # Invalid: too many params
141 # Valid: FORMAT-CALL-USER-FUNCTION, (* | . *)
143 # Invalid: too many params
145 # Invalid: unterminated
147 # Invalid: nesting mismatch
149 # Valid: FORMAT-CASE-CONVERSION, (* | . *)
151 # Invalid: too many params
153 # Invalid: too many params
155 # Invalid: unterminated
159 # Valid: FORMAT-CONDITIONAL, (i() c | . *)
161 # Valid: FORMAT-CONDITIONAL, (i() | . *)
165 # Valid: FORMAT-CONDITIONAL, (* i c | . *)
167 # Invalid: missing separator
169 # Invalid: too many separators
170 "abc~:[~X~;~D~;~E~]~C"
171 # Valid: FORMAT-CONDITIONAL, (* | . *)
173 # Valid: FORMAT-CONDITIONAL, (* i c | . *)
174 "abc~[~D~;~X~:;~R~]~C"
175 # Invalid: default clause not last
176 "abc~[~D~;~X~:;~R~;~R~]~C"
177 # Invalid: too many params
179 # Invalid: too many params
181 # Invalid: too many params
183 # Invalid: too many params
185 # Invalid: too many params
187 # Valid: FORMAT-CONDITIONAL, one param, without colon or atsign
189 # Invalid: too many params
191 # Invalid: too many params
193 # Invalid: too many params
195 # Valid: FORMAT-ITERATION, (( | . *) | . *)
197 # Valid: FORMAT-ITERATION, (( | . ( | . *)) | . *)
199 # Valid: FORMAT-ITERATION, ( | . *)
201 # Valid: FORMAT-ITERATION, ( | . ( | . *))
203 # Valid: FORMAT-ITERATION with indirection, (~ ( | . *) | . *)
205 # Valid: FORMAT-ITERATION with indirection, (~ ( | . ( | . *)) | . *)
207 # Valid: FORMAT-ITERATION with indirection, (~ | . *)
209 # Valid: FORMAT-ITERATION with indirection, (~ | . ( | . *))
211 # Valid: FORMAT-ITERATION with loop, (( | . i c) | . *)
213 # Valid: FORMAT-ITERATION with loop, (( | . (i c | . *)) | . *)
215 # Valid: FORMAT-ITERATION with loop, ( | . i c)
217 # Valid: FORMAT-ITERATION with loop, ( | . (i c | . *))
219 # Valid: FORMAT-ITERATION with variable-advance loop, (( | . *) | . *)
221 # Valid: FORMAT-ITERATION with variable-advance loop, (( | . (* | . *)) | . *)
223 # Valid: FORMAT-ITERATION with variable-advance loop, ( | . *)
225 # Valid: FORMAT-ITERATION with variable-advance loop, ( | . (* | . *))
229 # Valid: FORMAT-JUSTIFICATION, (i() i() i() c() i | . *)
231 # Invalid: too many params
235 # Invalid: wrongly nested
237 # Invalid: wrongly nested
239 # Invalid: wrongly nested
241 # Valid: FORMAT-CALL, (f * | . *)
243 # Valid: any number of arguments
245 # Invalid: type incompatibility between integer and list
247 # Invalid: type incompatibility between real and list
249 # Valid: list must be empty
253 : ${XGETTEXT=xgettext}
255 while read comment; do
258 cat <<EOF > f-l-1-$n.in
261 ${XGETTEXT} -L Lisp -o f-l-1-$n.po f-l-1-$n.in || exit 1
262 test -f f-l-1-$n.po || exit 1
264 if echo "$comment" | grep 'Valid:' > /dev/null; then
265 if grep lisp-format f-l-1-$n.po > /dev/null; then
271 if grep lisp-format f-l-1-$n.po > /dev/null; then
277 if test -n "$fail"; then
278 echo "Format string recognition error:" 1>&2
284 rm -f f-l-1-$n.in f-l-1-$n.po