You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.0 KiB
58 lines
2.0 KiB
# ext/babelplugin.py
|
|
# Copyright 2006-2022 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
|
|
|
|
"""gettext message extraction via Babel: https://pypi.org/project/Babel/"""
|
|
from babel.messages.extract import extract_python
|
|
|
|
from mako.ext.extract import MessageExtractor
|
|
|
|
|
|
class BabelMakoExtractor(MessageExtractor):
|
|
def __init__(self, keywords, comment_tags, options):
|
|
self.keywords = keywords
|
|
self.options = options
|
|
self.config = {
|
|
"comment-tags": " ".join(comment_tags),
|
|
"encoding": options.get(
|
|
"input_encoding", options.get("encoding", None)
|
|
),
|
|
}
|
|
super().__init__()
|
|
|
|
def __call__(self, fileobj):
|
|
return self.process_file(fileobj)
|
|
|
|
def process_python(self, code, code_lineno, translator_strings):
|
|
comment_tags = self.config["comment-tags"]
|
|
for (
|
|
lineno,
|
|
funcname,
|
|
messages,
|
|
python_translator_comments,
|
|
) in extract_python(code, self.keywords, comment_tags, self.options):
|
|
yield (
|
|
code_lineno + (lineno - 1),
|
|
funcname,
|
|
messages,
|
|
translator_strings + python_translator_comments,
|
|
)
|
|
|
|
|
|
def extract(fileobj, keywords, comment_tags, options):
|
|
"""Extract messages from Mako templates.
|
|
|
|
:param fileobj: the file-like object the messages should be extracted from
|
|
:param keywords: a list of keywords (i.e. function names) that should be
|
|
recognized as translation functions
|
|
:param comment_tags: a list of translator tags to search for and include
|
|
in the results
|
|
:param options: a dictionary of additional options (optional)
|
|
:return: an iterator over ``(lineno, funcname, message, comments)`` tuples
|
|
:rtype: ``iterator``
|
|
"""
|
|
extractor = BabelMakoExtractor(keywords, comment_tags, options)
|
|
yield from extractor(fileobj)
|