import io from lingua.extractors import Extractor from lingua.extractors import Message from lingua.extractors import get_extractor from mako.ext.extract import MessageExtractor from mako import compat class LinguaMakoExtractor(Extractor, MessageExtractor): '''Mako templates''' extensions = ['.mako'] default_config = { 'encoding': 'utf-8', 'comment-tags': '', } def __call__(self, filename, options, fileobj=None): self.options = options self.filename = filename self.python_extractor = get_extractor('x.py') if fileobj is None: fileobj = open(filename, 'rb') return self.process_file(fileobj) def process_python(self, code, code_lineno, translator_strings): source = code.getvalue().strip() if source.endswith(compat.b(':')): if source in (compat.b('try:'), compat.b('else:')) or source.startswith(compat.b('except')): source = compat.b('') # Ignore try/except and else elif source.startswith(compat.b('elif')): source = source[2:] # Replace "elif" with "if" source += compat.b('pass') code = io.BytesIO(source) for msg in self.python_extractor( self.filename, self.options, code, code_lineno -1): if translator_strings: msg = Message(msg.msgctxt, msg.msgid, msg.msgid_plural, msg.flags, compat.u(' ').join( translator_strings + [msg.comment]), msg.tcomment, msg.location) yield msg