• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/sh
2. "${srcdir=.}/init.sh"; path_prepend_ . ../src
3
4# Test of ITS support.
5
6: ${XGETTEXT=xgettext}
7
8GETTEXTDATADIR=.
9export GETTEXTDATADIR
10
11cat <<\EOF > empty.xml
12<?xml version="1.0"?>
13<empty></empty>
14EOF
15
16${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; Exit 1; }
17
18test -d its || mkdir its
19
20cat <<\EOF > its/empty-1.loc
21<?xml version="1.0"?>
22<locatingRules/>
23EOF
24
25${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; Exit 1; }
26
27cat <<\EOF > its/empty-2.loc
28<?xml version="1.0"?>
29<locatingRules>
30  <locatingRule pattern="*.xml">
31    <documentRule prefix="" localName="empty" target="empty.its"/>
32  </locatingRule>
33</locatingRules>
34EOF
35
36${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; Exit 1; }
37
38cat <<\EOF > its/empty.its
39<?xml version="1.0"?>
40<its:rules xmlns:its="http://www.w3.org/2005/11/its" version="1.0">
41</its:rules>
42EOF
43
44${XGETTEXT} --itstool -o empty.pot empty.xml 2>empty.err || { cat empty.err; Exit 1; }
45
46cat <<\EOF > its/messages.loc
47<?xml version="1.0"?>
48<locatingRules>
49  <locatingRule pattern="*.xml">
50    <documentRule localName="messages" target="messages.its"/>
51  </locatingRule>
52  <locatingRule pattern="*.msg">
53    <documentRule localName="messages" target="messages.its"/>
54  </locatingRule>
55</locatingRules>
56EOF
57
58cat <<\EOF > its/messages.its
59<?xml version="1.0"?>
60<its:rules xmlns:its="http://www.w3.org/2005/11/its"
61           xmlns:gt="https://www.gnu.org/s/gettext/ns/its/extensions/1.0"
62           xmlns:msg="http://www.gnu.org/s/gettext/ns/messages/1.0"
63           version="1.0">
64  <!-- Invalid: no selector -->
65  <its:translateRule translate="yes"/>
66  <!-- Invalid: no translate -->
67  <its:translateRule selector="/"/>
68
69  <its:translateRule selector="//msg:message/@comment" translate="yes"/>
70  <its:translateRule selector="//msg:note" translate="no"/>
71  <its:translateRule selector="//msg:p[@translatable = 'no']"
72    translate="no"/>
73
74  <!-- Invalid: no selector -->
75  <its:locNoteRule locNoteType="alert"/>
76  <!-- Invalid: no locNoteType -->
77  <its:locNoteRule selector="/"/>
78  <its:locNoteRule selector="//msg:message/*" locNoteType="alert"
79    locNotePointer="../msg:note"/>
80  <its:locNoteRule selector="//msg:code" locNoteType="alert">
81    <its:locNote>This is code</its:locNote>
82  </its:locNoteRule>
83  <its:locNoteRule selector="//msg:message/@comment" locNoteType="alert">
84    <its:locNote>This is a comment</its:locNote>
85  </its:locNoteRule>
86
87  <!-- Invalid: no selector -->
88  <its:withinTextRule withinText="yes"/>
89  <!-- Invalid: no withinText -->
90  <its:withinTextRule selector="/"/>
91  <its:withinTextRule selector="//msg:span | //msg:link" withinText="yes"/>
92
93  <!-- Invalid: no selector -->
94  <its:preserveSpaceRule space="preserve"/>
95  <!-- Invalid: no space -->
96  <its:preserveSpaceRule selector="/"/>
97  <its:preserveSpaceRule selector="//msg:code" space="preserve"/>
98
99  <gt:contextRule selector="//msg:p[@context = 'yes']"
100                  contextPointer="substring-before(., '|')"
101                  textPointer="substring-after(., '|')"/>
102
103  <gt:escapeRule selector="//msg:message/*[@unescape = 'yes']" escape="no"/>
104
105  <its:translateRule selector="//msg:message/@unescaped" translate="yes"/>
106  <gt:escapeRule selector="//msg:message/@unescaped" escape="no"/>
107</its:rules>
108EOF
109
110cat <<\EOF >messages.xml
111<?xml version="1.0"?>
112<!DOCTYPE messages PUBLIC "" "" [
113<!ENTITY foo "bar">
114]>
115<messages xmlns="http://www.gnu.org/s/gettext/ns/messages/1.0"
116          xmlns:its="http://www.w3.org/2005/11/its">
117  <message>
118    <p>This is a test message &foo;&gt;&lt;&amp;&quot;"</p>
119  </message>
120  <message>
121    <p its:translate="no">This is a non-translatable message</p>
122  </message>
123  <message>
124    <p>This is a test message, with an <span>element</span> in a <link href="https://www.gnu.org/s/gettext">text</link></p>
125  </message>
126  <message>
127    <code>  $ echo '  ' &gt;&gt; /dev/null
128  $ cat &lt; /dev/yes
129  $ sleep 10 &amp;
130</code>
131  </message>
132  <message comment="This is a comment &lt;&gt;&amp;&quot;">
133    <p>This is a test message, with an attribute</p>
134  </message>
135  <message>
136    <note>
137      This is a localization note
138    </note>
139    <p>This is a test message, with a localization note</p>
140  </message>
141  <message>
142    <p its:locNote="This is a local localization note" its:locNoteType="alert">
143      This is a test message, with a local localization note
144    </p>
145  </message>
146  <message>
147    <!-- empty element, which shouldn't be extracted -->
148    <p></p>
149  </message>
150  <message>
151    <p xml:space="preserve"> This is a message with  space  preserved</p>
152  </message>
153  <message>
154    <p translatable="no">This is a non-translatable string</p>
155  </message>
156  <message its:translate="no">
157    <p>This is a non-translatable string</p>
158  </message>
159  <message>
160    <!-- This is a comment -->
161    <p context="yes">context|A translatable string with a context prefixed</p>
162  </message>
163  <message>
164    <p xml:space="trim"> Leading/trailing  whitespaces are  removed,
165      but not middle
166    </p>
167  </message>
168  <message>
169    <p unescape="yes">This is an unescaped element &lt;&gt;&amp;&quot;</p>
170  </message>
171  <message unescaped="This is an unescaped attribute &lt;&gt;&amp;&quot;">
172    <p></p>
173  </message>
174  <message>
175    <p xml:space="paragraph">
176    This is the first paragraph with
177a newline.
178
179    This is  the  second paragraph with spaces.
180
181
182    This is the last paragraph.     </p>
183  </message>
184  <message>
185    <p xml:space="paragraph">This is the only one paragraph</p>
186  </message>
187  <message>
188    <p xml:space="paragraph">This is the only one paragraph with a boundary
189
190</p>
191  </message>
192  <message>
193    <p xml:space="paragraph"></p>
194  </message>
195  <message>
196    <p xml:space="paragraph"> </p>
197  </message>
198</messages>
199EOF
200
201cat <<\EOF >messages.ok
202#. (itstool) path: message/p
203#: messages.xml:8
204msgid "This is a test message &foo;&gt;&lt;&amp;\"\""
205msgstr ""
206
207#. (itstool) path: message/p
208#: messages.xml:14
209msgid "This is a test message, with an <span>element</span> in a <link href=\"https://www.gnu.org/s/gettext\">text</link>"
210msgstr ""
211
212#. This is code
213#. (itstool) path: message/code
214#: messages.xml:17
215#, no-wrap
216msgid ""
217"  $ echo '  ' &gt;&gt; /dev/null\n"
218"  $ cat &lt; /dev/yes\n"
219"  $ sleep 10 &amp;\n"
220msgstr ""
221
222#. This is a comment
223#. (itstool) path: messages/message@comment
224#: messages.xml:22
225msgid "This is a comment &lt;&gt;&amp;&quot;"
226msgstr ""
227
228#. (itstool) path: message/p
229#: messages.xml:23
230msgid "This is a test message, with an attribute"
231msgstr ""
232
233#. This is a localization note
234#. (itstool) path: message/p
235#: messages.xml:29
236msgid "This is a test message, with a localization note"
237msgstr ""
238
239#. This is a local localization note
240#. (itstool) path: message/p
241#: messages.xml:32
242msgid "This is a test message, with a local localization note"
243msgstr ""
244
245#. (itstool) path: message/p
246#: messages.xml:41
247#, no-wrap
248msgid " This is a message with  space  preserved"
249msgstr ""
250
251#. This is a comment
252#. (itstool) path: message/p
253#: messages.xml:51
254msgctxt "context"
255msgid "A translatable string with a context prefixed"
256msgstr ""
257
258#. (itstool) path: message/p
259#: messages.xml:54
260msgid ""
261"Leading/trailing  whitespaces are  removed,\n"
262"      but not middle"
263msgstr ""
264
265#. (itstool) path: message/p
266#: messages.xml:59
267msgid "This is an unescaped element <>&\""
268msgstr ""
269
270#. (itstool) path: messages/message@unescaped
271#: messages.xml:61
272msgid "This is an unescaped attribute <>&\""
273msgstr ""
274
275#. (itstool) path: message/p
276#: messages.xml:65
277msgid ""
278"This is the first paragraph with a newline.\n"
279"\n"
280"This is the second paragraph with spaces.\n"
281"\n"
282"This is the last paragraph."
283msgstr ""
284
285#. (itstool) path: message/p
286#: messages.xml:75
287msgid "This is the only one paragraph"
288msgstr ""
289
290#. (itstool) path: message/p
291#: messages.xml:78
292msgid "This is the only one paragraph with a boundary"
293msgstr ""
294EOF
295
296: ${DIFF=diff}
297
298${XGETTEXT} --itstool --no-wrap --omit-header -o messages.pot messages.xml 2>messages.err || { cat messages.err; Exit 1; }
299${DIFF} messages.ok messages.pot
300result=$?
301test $result = 0 || exit $result
302
303# Check if locating rules can work with --directory, and extra ".in"
304# file name extension.
305test -d data || mkdir data
306test -d po || mkdir po
307
308cp messages.xml data/messages.msg.in
309
310cd po
311GETTEXTDATADIR=..
312export GETTEXTDATADIR
313
314${XGETTEXT} --itstool --no-wrap --omit-header --directory=.. -o messages.pot.in data/messages.msg.in 2>messages.err || { cat messages.err; Exit 1; }
315sed -e 's!^#: data/messages.msg.in!#: messages.xml!' \
316  < messages.pot.in > messages.pot
317
318${DIFF} ../messages.ok messages.pot
319result=$?
320test $result = 0 || exit $result
321