Add more attribute support to yomichan glossary

This commit is contained in:
stephenmk 2023-04-22 20:45:40 -05:00
parent 13f07c9000
commit 886faf1984
No known key found for this signature in database
GPG key ID: B6DA730DB06235F1
2 changed files with 43 additions and 4 deletions

View file

@ -2,10 +2,10 @@ from css_parser import parseStyle
def make_gloss(soup):
structured_content = __get_markup_structure(soup)
node = __get_markup_structure(soup)
return {
"type": "structured-content",
"content": structured_content
"content": node["content"],
}
@ -48,8 +48,35 @@ def __get_attributes(attrs):
attributes["rowSpan"] = int(attrs["rowspan"])
if "colspan" in attrs:
attributes["colSpan"] = int(attrs["colspan"])
if "height" in attrs:
attributes["height"] = float(attrs["height"])
if "width" in attrs:
attributes["width"] = float(attrs["width"])
if "sizeUnits" in attrs:
attributes["sizeUnits"] = attrs["sizeUnits"]
if "appearance" in attrs:
attributes["appearance"] = attrs["appearance"]
if "title" in attrs:
attributes["title"] = attrs["title"]
if "collapsible" in attrs:
attributes["collapsible"] = bool(attrs["collapsible"])
if "collapsed" in attrs:
attributes["collapsed"] = bool(attrs["collapsed"])
if "background" in attrs:
attributes["background"] = bool(attrs["background"])
if "path" in attrs:
attributes["path"] = attrs["path"]
if "style" in attrs:
attributes["style"] = __get_style(attrs["style"])
style = __get_style(attrs["style"])
if len(style) > 0:
attributes["style"] = style
data_attrs = {}
for attr_key in attrs.keys():
if attr_key.startswith("data-"):
key = attr_key.removeprefix("data-")
data_attrs[key] = attrs[attr_key]
if len(data_attrs) > 0:
attributes["data"] = data_attrs
return attributes
@ -70,4 +97,16 @@ def __get_style(inline_style_string):
style["textAlign"] = parsedStyle.textAlign
if parsedStyle.listStyleType != "":
style["listStyleType"] = parsedStyle.listStyleType
margins = {
"marginTop": parsedStyle.marginTop,
"marginRight": parsedStyle.marginRight,
"marginBottom": parsedStyle.marginBottom,
"marginLeft": parsedStyle.marginLeft,
}
for key, val in margins.items():
m = re.search(r"(\d+(\.\d*)?|\.\d+)em", val)
if m:
style[key] = float(m.group(1))
return style

View file

@ -20,6 +20,6 @@ def make_glossary(entry):
p.name = "span"
for th in soup.find_all("th"):
th['style'] = "vertical-align: middle; text-align: center;"
gloss = make_gloss(soup.table)
gloss = make_gloss(soup.body)
glossary = [gloss]
return glossary