Edgewall Software

Ticket #129: i18n_comment.patch

File i18n_comment.patch, 3.7 KB (added by palgarvio, 7 years ago)

Suport for comments extraction

  • genshi/filters/i18n.py

    diff --git a/genshi/filters/i18n.py b/genshi/filters/i18n.py
    a b  
    270270            search_text = False
    271271        skip = 0
    272272        i18n_msg = I18N_NAMESPACE['msg']
     273        i18n_comment = I18N_NAMESPACE['comment']
    273274        xml_lang = XML_NAMESPACE['lang']
    274275
    275276        for kind, data, pos in stream:
     
    295296                            if text:
    296297                                yield pos[1], None, text
    297298                    else:
    298                         for lineno, funcname, text in self.extract(
     299                        for lineno, funcname, text, comments in self.extract(
    299300                                _ensure(value), gettext_functions,
    300301                                search_text=False):
    301                             yield lineno, funcname, text
     302                            yield lineno, funcname, text, comments
    302303
    303304                if msgbuf:
    304305                    msgbuf.append(kind, data, pos)
     
    307308                    if params and type(params) is list: # event tuple
    308309                        params = params[0][1]
    309310                    msgbuf = MessageBuffer(params, pos[1])
     311                if i18n_comment in attrs and msgbuf:
     312                    msgbuf.comments.append(attrs.get(i18n_comment))
    310313
    311314            elif not skip and search_text and kind is TEXT:
    312315                if not msgbuf:
    313316                    text = data.strip()
    314317                    if text and filter(None, [ch.isalpha() for ch in text]):
    315                         yield pos[1], None, text
     318                        yield pos[1], None, text, []
    316319                else:
    317320                    msgbuf.append(kind, data, pos)
    318321
    319322            elif not skip and msgbuf and kind is END:
    320323                msgbuf.append(kind, data, pos)
    321324                if not msgbuf.depth:
    322                     yield msgbuf.lineno, None, msgbuf.format()
     325                    yield msgbuf.lineno, None, msgbuf.format(), msgbuf.comments
    323326                    msgbuf = None
    324327
    325328            elif kind is EXPR or kind is EXEC:
     
    327330                    msgbuf.append(kind, data, pos)
    328331                for funcname, strings in extract_from_code(data,
    329332                                                           gettext_functions):
    330                     yield pos[1], funcname, strings
     333                    yield pos[1], funcname, strings, []
    331334
    332335            elif kind is SUB:
    333336                subkind, substream = data
    334337                messages = self.extract(substream, gettext_functions,
    335338                                        search_text=search_text and not skip,
    336339                                        msgbuf=msgbuf)
    337                 for lineno, funcname, text in messages:
    338                     yield lineno, funcname, text
     340                for lineno, funcname, text, comments in messages:
     341                    yield lineno, funcname, text, comments
    339342
    340343
    341344class MessageBuffer(object):
     
    360363        self.depth = 1
    361364        self.order = 1
    362365        self.stack = [0]
     366        self.comments = []
    363367
    364368    def append(self, kind, data, pos):
    365369        """Append a stream event to the buffer.
     
    545549    tmpl = template_class(fileobj, filename=getattr(fileobj, 'name', None),
    546550                          encoding=encoding)
    547551    translator = Translator(None, ignore_tags, include_attrs, extract_text)
    548     for lineno, func, message in translator.extract(tmpl.stream,
    549                                                     gettext_functions=keywords):
    550         yield lineno, func, message, []
     552    for lineno, func, message, comments in translator.extract(
     553                                    tmpl.stream, gettext_functions=keywords):
     554        yield lineno, func, message, comments