Edgewall Software

Ticket #129: i18n_comment.patch

File i18n_comment.patch, 3.7 KB (added by palgarvio, 6 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