| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- # ext/linguaplugin.py
- # Copyright 2006-2025 the Mako authors and contributors <see AUTHORS file>
- #
- # This module is part of Mako and is released under
- # the MIT License: http://www.opensource.org/licenses/mit-license.php
- import contextlib
- import io
- from lingua.extractors import Extractor
- from lingua.extractors import get_extractor
- from lingua.extractors import Message
- from mako.ext.extract import MessageExtractor
- class LinguaMakoExtractor(Extractor, MessageExtractor):
- """Mako templates"""
- use_bytes = False
- 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:
- ctx = open(filename, "r")
- else:
- ctx = contextlib.nullcontext(fileobj)
- with ctx as file_:
- yield from self.process_file(file_)
- def process_python(self, code, code_lineno, translator_strings):
- source = code.getvalue().strip()
- if source.endswith(":"):
- if source in ("try:", "else:") or source.startswith("except"):
- source = "" # Ignore try/except and else
- elif source.startswith("elif"):
- source = source[2:] # Replace "elif" with "if"
- source += "pass"
- code = io.StringIO(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,
- " ".join(translator_strings + [msg.comment]),
- msg.tcomment,
- msg.location,
- )
- yield msg
|