Rewrite converting tag values

This commit is contained in:
Kiryl
2022-09-20 14:58:12 +03:00
parent d7a9c52acd
commit 8557e4879e

View File

@@ -1,6 +1,6 @@
import re import re
import cssutils import cssutils
from typing import Tuple from typing import List, Tuple, Union
from os.path import dirname, normpath, join from os.path import dirname, normpath, join
from src.util.color_reader import str2hex from src.util.color_reader import str2hex
@@ -16,7 +16,7 @@ class StyleReader:
to suit LiveCarta style convention. to suit LiveCarta style convention.
""" """
self.LIVECARTA_STYLE_ATTRS_MAPPING = { self.LIVECARTA_STYLE_ATTRS_MAPPING = {
"text-indent": self.convert_indents_tag_values, "text-indent": lambda x: self.convert_tag_style_values(x, is_indent=True),
"font-variant": lambda x: x, "font-variant": lambda x: x,
"text-align": lambda x: x, "text-align": lambda x: x,
"font": lambda x: "", "font": lambda x: "",
@@ -26,18 +26,18 @@ class StyleReader:
"color": self.get_text_color, "color": self.get_text_color,
"background-color": self.get_bg_color, "background-color": self.get_bg_color,
"background": self.get_bg_color, "background": self.get_bg_color,
"border": lambda x: x if x != "0" else "", "border": self.convert_tag_style_values,
"border-top-width": lambda x: x if x != "0" else "", "border-top-width": self.convert_tag_style_values,
"border-right-width": lambda x: x if x != "0" else "", "border-right-width": self.convert_tag_style_values,
"border-left-width": lambda x: x if x != "0" else "", "border-left-width": self.convert_tag_style_values,
"border-bottom-width": lambda x: x if x != "0" else "", "border-bottom-width": self.convert_tag_style_values,
"border-top": lambda x: x if x != "0" else "", "border-top": self.convert_tag_style_values,
"border-bottom": lambda x: x if x != "0" else "", "border-bottom": self.convert_tag_style_values,
"list-style-type": lambda x: x if x in LiveCartaConfig.list_types else "disc", "list-style-type": lambda x: x if x in LiveCartaConfig.list_types else "disc",
"list-style-image": lambda x: "disc", "list-style-image": lambda x: "disc",
"margin-left": self.convert_indents_tag_values, "margin-left": lambda x: self.convert_tag_style_values(x, is_indent=True),
"margin-top": self.convert_tag_style_values, "margin-top": lambda x: self.convert_tag_style_values(x, is_indent=True),
"margin": self.convert_indents_tag_values, "margin": lambda x: self.convert_tag_style_values(x, is_indent=True),
"width": self.convert_tag_style_values, "width": self.convert_tag_style_values,
} }
@@ -69,43 +69,28 @@ class StyleReader:
------- -------
size_value: str size_value: str
converted value size converted value size
""" """
def convert_size_number(size_number: str, unit_to_replace: str, multiplier: float) -> str:
size_number = float(size_number.replace(unit_to_replace, "")) * multiplier
return str(size_number) + "px"
values: List = size_value.split(" ")
size_number: Union[str, float] = values[0]
size_regexp = re.compile( size_regexp = re.compile(
r"(^-*(\d*\.*\d+)%$)|(^-*(\d*\.*\d+)em$)|(^-*(\d*\.*\d+)pt$)|(^-*(\d*\.*\d+)in$)") r"(^-*(\d*\.*\d+)%$)|(^-*(\d*\.*\d+)em$)|(^-*(\d*\.*\d+)pt$)|(^-*(\d*\.*\d+)in$)")
has_style_attrs = re.search(size_regexp, size_value) has_style_attrs = re.search(size_regexp, size_number)
if has_style_attrs: if has_style_attrs:
if has_style_attrs.group(1): if has_style_attrs.group(1):
multiplier = 5.76 if is_indent else 0.16 multiplier = 5.76 if is_indent else 0.16
size_value = float(size_value.replace("%", "")) * multiplier values[0] = convert_size_number(size_number, "%", multiplier)
return str(size_value) + "px"
elif has_style_attrs.group(3): elif has_style_attrs.group(3):
multiplier = 18 if is_indent else 16 multiplier = 18 if is_indent else 16
size_value = float(size_value.replace("em", "")) * multiplier values[0] = convert_size_number(size_number, "em", multiplier)
return str(size_value) + "px"
elif has_style_attrs.group(5): elif has_style_attrs.group(5):
size_value = float(size_value.replace("pt", "")) * 4/3 values[0] = convert_size_number(size_number, "pt", 4 / 3)
return str(size_value) + "px"
elif has_style_attrs.group(7): elif has_style_attrs.group(7):
size_value = float(size_value.replace("in", "")) * 96 values[0] = convert_size_number(size_number, "in", 96)
return str(size_value) + "px" size_value = " ".join(values)
else:
return ""
return size_value
def convert_indents_tag_values(self, size_value: str) -> str:
"""
Function converts values of ["text-indent", "margin-left", "margin"]
Parameters
----------
size_value: str
Returns
-------
size_value: str
"""
size_value = self.convert_tag_style_values(size_value.split(" ")[-2], True) if len(size_value.split(" ")) == 3\
else self.convert_tag_style_values(size_value.split(" ")[-1], True)
return size_value return size_value
@staticmethod @staticmethod