From 8557e4879e7f1bb3ec24c5f0ca79ccf7bdd97a7a Mon Sep 17 00:00:00 2001 From: Kiryl Date: Tue, 20 Sep 2022 14:58:12 +0300 Subject: [PATCH] Rewrite converting tag values --- src/style_reader.py | 63 +++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/src/style_reader.py b/src/style_reader.py index bda5912..a07b96b 100644 --- a/src/style_reader.py +++ b/src/style_reader.py @@ -1,6 +1,6 @@ import re import cssutils -from typing import Tuple +from typing import List, Tuple, Union from os.path import dirname, normpath, join from src.util.color_reader import str2hex @@ -16,7 +16,7 @@ class StyleReader: to suit LiveCarta style convention. """ 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, "text-align": lambda x: x, "font": lambda x: "", @@ -26,18 +26,18 @@ class StyleReader: "color": self.get_text_color, "background-color": self.get_bg_color, "background": self.get_bg_color, - "border": lambda x: x if x != "0" else "", - "border-top-width": lambda x: x if x != "0" else "", - "border-right-width": lambda x: x if x != "0" else "", - "border-left-width": lambda x: x if x != "0" else "", - "border-bottom-width": lambda x: x if x != "0" else "", - "border-top": lambda x: x if x != "0" else "", - "border-bottom": lambda x: x if x != "0" else "", + "border": self.convert_tag_style_values, + "border-top-width": self.convert_tag_style_values, + "border-right-width": self.convert_tag_style_values, + "border-left-width": self.convert_tag_style_values, + "border-bottom-width": self.convert_tag_style_values, + "border-top": self.convert_tag_style_values, + "border-bottom": self.convert_tag_style_values, "list-style-type": lambda x: x if x in LiveCartaConfig.list_types else "disc", "list-style-image": lambda x: "disc", - "margin-left": self.convert_indents_tag_values, - "margin-top": self.convert_tag_style_values, - "margin": self.convert_indents_tag_values, + "margin-left": lambda x: self.convert_tag_style_values(x, is_indent=True), + "margin-top": lambda x: self.convert_tag_style_values(x, is_indent=True), + "margin": lambda x: self.convert_tag_style_values(x, is_indent=True), "width": self.convert_tag_style_values, } @@ -69,43 +69,28 @@ class StyleReader: ------- size_value: str 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( 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.group(1): multiplier = 5.76 if is_indent else 0.16 - size_value = float(size_value.replace("%", "")) * multiplier - return str(size_value) + "px" + values[0] = convert_size_number(size_number, "%", multiplier) elif has_style_attrs.group(3): multiplier = 18 if is_indent else 16 - size_value = float(size_value.replace("em", "")) * multiplier - return str(size_value) + "px" + values[0] = convert_size_number(size_number, "em", multiplier) elif has_style_attrs.group(5): - size_value = float(size_value.replace("pt", "")) * 4/3 - return str(size_value) + "px" + values[0] = convert_size_number(size_number, "pt", 4 / 3) elif has_style_attrs.group(7): - size_value = float(size_value.replace("in", "")) * 96 - return str(size_value) + "px" - 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) + values[0] = convert_size_number(size_number, "in", 96) + size_value = " ".join(values) return size_value @staticmethod