forked from LiveCarta/BookConverter
Rewrite converting tag values
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user