# -*- coding: utf-8 -*-
#
# Copyright (C) 2020-2022 KuraLabs S.R.L
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

"""
Filter to add quotes to text.
"""

from jinja2 import pass_environment


@pass_environment
def filter_quote(environment, text, quote='"', escape_with='\\', newline=None):
    """
    Filter to add quotes to text.

    This is a naive implementation, as the specifics can vary a lot depending
    on where you are writing the text.

    :param str text: Text to adds quotes to.

    :return: The text quoted out, line by line.
    :rtype: str
    """

    if not newline:
        newline = environment.newline_sequence

    def quote_line(line):
        return '{0}{1}{0}'.format(
            quote,
            line.replace(quote, '{}{}'.format(escape_with, quote))
        )

    return newline.join(
        map(quote_line, text.splitlines())
    )


__all__ = [
    'filter_quote',
]
