forked from LiveCarta/BookConverter
140 lines
4.5 KiB
Python
140 lines
4.5 KiB
Python
import re
|
|
|
|
|
|
class LiveCartaConfig:
|
|
"""Class of values that LiveCarta platform using and supports"""
|
|
# tag with inline style to be updated with style attribute
|
|
SUPPORTED_LEVELS = 5
|
|
SUPPORTED_HEADERS = {"h1", "h2", "h3", "h4", "h5"}
|
|
HEADERS_LEVELS = {"h1", "h2", "h3",
|
|
"h4", "h5", "h6", "h7", "h8", "h9"}
|
|
|
|
DEFAULT_ALIGN_STYLE = "left"
|
|
|
|
ALIGN_STYLES = ["justify", "right", "center", "left"]
|
|
|
|
# Main constant values
|
|
DEFAULT_FONT_NAME = "Times New Roman"
|
|
|
|
WORD_DEFAULT_FONT_SIZE = 11
|
|
|
|
LIVECARTA_DEFAULT_FONT_SIZE = 18
|
|
|
|
FONT_CONVERT_RATIO = LIVECARTA_DEFAULT_FONT_SIZE /\
|
|
WORD_DEFAULT_FONT_SIZE
|
|
|
|
COLORS_MAP = {
|
|
"#ffff00": "yellow",
|
|
"#00ff00": "darkYellow",
|
|
"#00ffff": "cyan",
|
|
"#ff00ff": "magenta",
|
|
"#0000ff": "blue",
|
|
"#ff0000": "red",
|
|
"#000080": "darkBlue",
|
|
"#008080": "darkCyan",
|
|
"#008000": "green",
|
|
"#800080": "darkMagenta",
|
|
"#808000": "darkGreen",
|
|
"#c0c0c0": "lightGray",
|
|
"#ffffff": "white",
|
|
"#800000": "#800000",
|
|
"#808080": "#808080"
|
|
}
|
|
|
|
HTML42LIVECARTA_COLORS = {
|
|
"yellow": "yellow",
|
|
"lime": "green",
|
|
"aqua": "cyan",
|
|
"fuchsia": "magenta",
|
|
"blue": "blue",
|
|
"red": "red",
|
|
"navy": "darkBlue",
|
|
"teal": "darkCyan",
|
|
"green": "darkGreen",
|
|
"purple": "darkMagenta",
|
|
"olive": "darkYellow",
|
|
"silver": "lightGray",
|
|
"white": "white",
|
|
"maroon": "darkRed", # "#800000",
|
|
"gray": "darkGray",
|
|
"grey": "darkGray",
|
|
}
|
|
|
|
INDENT = "30px"
|
|
|
|
list_types = ["circle", "disc", "armenian", "decimal",
|
|
"decimal-leading-zero", "georgian", "lower-alpha", "lower-latin",
|
|
"lower-roman", "upper-alpha", "upper-latin", "upper-roman", "none"]
|
|
|
|
structural_tags_names = [
|
|
"div", "section", "article", "main", "body", "html", "aside",
|
|
"canvas", "data", "figure", "footer", "iframe", "span", "p"
|
|
]
|
|
|
|
could_have_style_in_livecarta_regexp = re.compile(
|
|
"(^div$)|(^p$)|(^span$)|(^code$)|(^kbd$)|(^var$)|(^li$)|(^ul$)|(^ol$)|(^td$)|(^th$)|(^h[1-9]$)")
|
|
|
|
"""
|
|
LIVECARTA_STYLE_ATTRS_SHOULD_BE_TAG = { (property, value): tag }
|
|
|
|
<p style="font-weight:600> foo </p> -> <p><strong>foo</strong></p>
|
|
"""
|
|
LIVECARTA_STYLE_ATTRS_SHOULD_BE_TAG = {
|
|
("font-weight", "bold"): "strong",
|
|
("font-weight", "600"): "strong",
|
|
("font-weight", "700"): "strong",
|
|
("font-weight", "800"): "strong",
|
|
("font-weight", "900"): "strong",
|
|
("font-style", "italic"): "i",
|
|
("text-decoration", "underline"): "u",
|
|
("text-decoration", "line-through"): "s",
|
|
("text-decoration-line", "underline"): "u",
|
|
("text-decoration-line", "line-through"): "s",
|
|
("vertical-align", "super"): "sup"
|
|
}
|
|
|
|
LIVECARTA_STYLES_CAN_BE_IN_TAG = {
|
|
"p": ["text-align", "text-indent", "border-bottom", "border-top"],
|
|
"li": ["text-align", "list-style-type"],
|
|
"ul": ["list-style-type"],
|
|
"ol": ["list-style-type"],
|
|
r"(^h[1-9]$)": ["list-style-type"]
|
|
}
|
|
|
|
"""
|
|
Dictionary LIVECARTA_STYLE_ATTRS = { css property: value }
|
|
Style properties that can be used to fit LiveCarta css style convention.
|
|
If property has empty list, it means that any value can be converted.
|
|
If property has not empty list, it means that only certain property-value combinations can be transformed.
|
|
"""
|
|
LIVECARTA_STYLE_ATTRS = {
|
|
"text-indent": [],
|
|
"font-variant": ["small-caps"],
|
|
"text-align": [x for x in ["justify", "right", "center", "left"] if x != "left"],
|
|
"align": [],
|
|
"font": [],
|
|
"font-family": [],
|
|
"font-size": [],
|
|
"font-weight": ["bold", "600", "700", "800", "900"], # <strong>
|
|
"font-style": ["italic"], # <i>
|
|
"text-decoration": ["underline", "line-through"], # <u> , <s>
|
|
"text-decoration-line": ["underline", "line-through"], # <u> , <s>
|
|
"vertical-align": ["super"], # <sup>
|
|
"color": [],
|
|
"background-color": [],
|
|
"background": [],
|
|
"width": [],
|
|
"border": [],
|
|
"border-top-width": [],
|
|
"border-right-width": [],
|
|
"border-left-width": [],
|
|
"border-bottom-width": [],
|
|
"border-top": [],
|
|
"border-bottom": [],
|
|
"list-style-type": [],
|
|
"list-style-image": [],
|
|
"margin-left": [],
|
|
"margin-top": [],
|
|
"margin": [],
|
|
}
|