mirror of https://github.com/evilhero/mylar
44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
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
|