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;><&""</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 ' ' >> /dev/null 128 $ cat < /dev/yes 129 $ sleep 10 & 130</code> 131 </message> 132 <message comment="This is a comment <>&""> 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 <>&"</p> 170 </message> 171 <message unescaped="This is an unescaped attribute <>&""> 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;><&\"\"" 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 ' ' >> /dev/null\n" 218" $ cat < /dev/yes\n" 219" $ sleep 10 &\n" 220msgstr "" 221 222#. This is a comment 223#. (itstool) path: messages/message@comment 224#: messages.xml:22 225msgid "This is a comment <>&"" 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