rougail-output-display/src/rougail/output_display/output/github.py

154 lines
5.1 KiB
Python

"""
Silique (https://www.silique.fr)
Copyright (C) 2025-2026
This program is free software: you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from ..i18n import _
from ..util import CommonOutput
class OutputFamily(CommonOutput):
level = 20
name = "github"
variable_hidden_color = "#A52A2A"
variable_normal_color = None
value_unmodified_color = "#B8860B"
value_modified_color = "#006400"
value_default_color = None
error_color = "#C23636"
error_icon = "stop_sign"
warning_color = "#EFBF04"
warning_icon = "bell"
def _run(self, root):
ret = self.header() + "\n".join(root) + "\n"
return True, ret
def header(self):
variables = []
if self.variable_default_enable:
variables.append(_("Variable"))
if self.variable_hidden_enable:
variables.append(self.set_color(self.variable_hidden_color, _("Unmodifiable variable")))
values = []
if self.value_unmodified_enable:
values.append(self.set_color(self.value_unmodified_color, _("Default value")))
if self.value_modified_enable:
values.append(self.set_color(self.value_modified_color, _("Modified value")))
if self.value_default_enable:
values.append(f'(:hourglass_flowing_sand: {_("Original default value")})')
if not variables and not values:
return ""
caption = self.title(_("Caption:"))
if variables:
caption += "> - " + "\n> - ".join(variables) + "\n"
if values:
caption += "> - " + "\n> - ".join(values) + "\n"
if self.layer_datas:
layers = "\n" + self.title(_("Layers:"))
first_char = "> - "
display_layers = [first_char + data for data in self.layer_datas]
layers += "\n".join(display_layers)
else:
layers = ""
return caption + layers + "\n"
def title(self, msg):
caption = "> [!NOTE]" + "\n>\n"
caption += f'> **{msg}**\n'
return caption
def error_header(self):
return ['> [!CAUTION]\n> ']
def warning_header(self):
return ['> [!WARNING]\n> ']
def error_end(self):
self.out[-1] += "\n"
def warning_end(self):
self.out[-1] += "\n"
def display(self, tree):
return "\n".join(tree) + "\n"
def display_error(self, level, tree, msg, default_color):
if default_color == "errors":
color = self.error_color
else:
color = self.warning_color
if isinstance(msg, tuple):
if len(msg) == 3:
if msg[2] == 'error':
color = self.error_color
icon = self.error_icon
else:
color = self.warning_color
icon = self.warning_icon
msg = f"{msg[0]}: :{icon}: {self.set_color(color, msg[1])}"
else:
if msg[1] == 'error':
icon = self.error_icon
else:
color = self.warning_color
icon = self.warning_icon
msg = f"<span style='color: {color}'>:{icon}: {msg[0]}</span>"
tree.append("> " + " " * (level - 1) * 2 + "- " + msg)
return tree
def add_variable(
self, parent, description, value, icon, level,
):
if parent is None:
parent = []
if icon == 'leaf':
icon = 'notebook'
else:
icon = 'open_file_folder'
before = " " * (level - 1) * 2 + "- "
if isinstance(value, list):
description = description.replace('', '')
subtree = parent.append(
f"{before}:{icon}: " + _("{0}:").format(description),
)
before = " " * (level * 2) + "- "
for val in value:
parent.append(before + str(val))
else:
parent.append(before + f":{icon}: " + _("{0}: {1}").format(description, value))
def set_color(self, color, msg):
if not color:
return msg
return f'<span style="color: {color}">{msg}</span>'
def set_loaded(self, msg):
return f"{msg}"
def get_tree(self):
return None
def has_variable(self):
return self.out != []
def get_parent(self, parent, description, level):
if parent is None:
parent = []
parent.append(description)
else:
parent.append(" " * (level - 1) * 2 + "- " + ":open_file_folder: " + description)
return parent