Edgewall Software

Ticket #358: i18n_msg-element-no-newline.patch

File i18n_msg-element-no-newline.patch, 3.3 KB (added by cboos, 14 years ago)

Fix the issue by removing the special case when the last seen element is an END token.

  • genshi/filters/i18n.py

    <i18n:msg> elements for which content ends with a close tag and no intervening space were wrongly extracted, the last ']' character is missing.
    
    Closes #358.
    
    diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py
    a b  
    186186        for event in stream:
    187187            msgbuf.append(*previous)
    188188            previous = event
    189         if previous[0] is not END:
    190             msgbuf.append(*previous)
     189        msgbuf.append(*previous)
    191190
    192191        yield None, msgbuf.format(), comment_stack[-1:]
    193192
  • genshi/filters/tests/i18n.py

    diff --git a/genshi/filters/tests/i18n.py b/genshi/filters/tests/i18n.py
    a b  
    208208          <p>Für Details siehe bitte <a href="help.html">Hilfe</a>.</p>
    209209        </html>""", tmpl.generate().render())
    210210
     211    def test_extract_i18n_msg_nonewline(self):
     212        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
     213            xmlns:i18n="http://genshi.edgewall.org/i18n">
     214          <p i18n:msg="">Please see <a href="help.html">Help</a></p>
     215        </html>""")
     216        translator = Translator()
     217        tmpl.add_directives(Translator.NAMESPACE, translator)
     218        messages = list(translator.extract(tmpl.stream))
     219        self.assertEqual(1, len(messages))
     220        self.assertEqual('Please see [1:Help]', messages[0][2])
     221
     222    def test_translate_i18n_msg_nonewline(self):
     223        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
     224            xmlns:i18n="http://genshi.edgewall.org/i18n">
     225          <p i18n:msg="">Please see <a href="help.html">Help</a></p>
     226        </html>""")
     227        gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]"
     228        translator = Translator(gettext)
     229        translator.setup(tmpl)
     230        self.assertEqual("""<html>
     231          <p>Für Details siehe bitte <a href="help.html">Hilfe</a></p>
     232        </html>""", tmpl.generate().render())
     233
     234    def test_extract_i18n_msg_elt_nonewline(self):
     235        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
     236            xmlns:i18n="http://genshi.edgewall.org/i18n">
     237          <i18n:msg>Please see <a href="help.html">Help</a></i18n:msg>
     238        </html>""")
     239        translator = Translator()
     240        tmpl.add_directives(Translator.NAMESPACE, translator)
     241        messages = list(translator.extract(tmpl.stream))
     242        self.assertEqual(1, len(messages))
     243        self.assertEqual('Please see [1:Help]', messages[0][2])
     244
     245    def test_translate_i18n_msg_elt_nonewline(self):
     246        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
     247            xmlns:i18n="http://genshi.edgewall.org/i18n">
     248          <i18n:msg>Please see <a href="help.html">Help</a></i18n:msg>
     249        </html>""")
     250        gettext = lambda s: u"Für Details siehe bitte [1:Hilfe]"
     251        translator = Translator(gettext)
     252        translator.setup(tmpl)
     253        self.assertEqual("""<html>
     254          Für Details siehe bitte <a href="help.html">Hilfe</a>
     255        </html>""", tmpl.generate().render())
     256
    211257    def test_extract_i18n_msg_nested(self):
    212258        tmpl = MarkupTemplate("""<html xmlns:py="http://genshi.edgewall.org/"
    213259            xmlns:i18n="http://genshi.edgewall.org/i18n">