forked from LiveCarta/BookConverter
epub converter: add aside as table - block processing
This commit is contained in:
@@ -129,6 +129,7 @@ def insert_span_with_attrs_before_tag(main_tag, tag, id_, class_):
|
|||||||
new_tag = main_tag.new_tag("span")
|
new_tag = main_tag.new_tag("span")
|
||||||
new_tag.attrs['id'] = id_ or ''
|
new_tag.attrs['id'] = id_ or ''
|
||||||
new_tag.attrs['class'] = class_ or ''
|
new_tag.attrs['class'] = class_ or ''
|
||||||
|
new_tag.string = "\xa0"
|
||||||
tag.insert_before(new_tag)
|
tag.insert_before(new_tag)
|
||||||
|
|
||||||
|
|
||||||
@@ -298,6 +299,11 @@ def unwrap_structural_tags(body_tag):
|
|||||||
div.unwrap()
|
div.unwrap()
|
||||||
|
|
||||||
for s in body_tag.find_all("section"):
|
for s in body_tag.find_all("section"):
|
||||||
|
if s.attrs.get('class'):
|
||||||
|
class_ = s.attrs['class'] if not isinstance(s.attrs['class'], list) else s.attrs['class'][0]
|
||||||
|
if s.parent.name == 'aside':
|
||||||
|
if not s.parent.attrs.get('class'):
|
||||||
|
s.parent.attrs['class'] = class_
|
||||||
_add_span_to_save_ids_for_links(s)
|
_add_span_to_save_ids_for_links(s)
|
||||||
s.unwrap()
|
s.unwrap()
|
||||||
|
|
||||||
@@ -398,6 +404,44 @@ def wrap_span_with_table(main_tag, old_tag):
|
|||||||
return table
|
return table
|
||||||
|
|
||||||
|
|
||||||
|
def wrap_block_with_table(main_tag, old_tag, color=None):
|
||||||
|
table = main_tag.new_tag("table")
|
||||||
|
table.attrs['border'] = '1px solid'
|
||||||
|
table.attrs['align'] = 'center'
|
||||||
|
table.attrs['style'] = 'width:95%;'
|
||||||
|
tbody = main_tag.new_tag("tbody")
|
||||||
|
tr = main_tag.new_tag("tr")
|
||||||
|
td = main_tag.new_tag("td")
|
||||||
|
td.attrs['border-radius'] = '8px'
|
||||||
|
if color:
|
||||||
|
td.attrs['bgcolor'] = color
|
||||||
|
old_tag.wrap(td)
|
||||||
|
td.wrap(tr)
|
||||||
|
tr.wrap(tbody)
|
||||||
|
tbody.wrap(table)
|
||||||
|
table.insert_after(BeautifulSoup(features='lxml').new_tag("br"))
|
||||||
|
return table
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_block_tags(chapter_tag):
|
||||||
|
for block in chapter_tag.find_all("blockquote"):
|
||||||
|
if block.attrs.get('class') in ['feature1', 'feature2', 'feature3', 'feature4']:
|
||||||
|
hrs = block.find_all("p", attrs={"class": re.compile(".+ hr")})
|
||||||
|
for hr in hrs:
|
||||||
|
hr.extract()
|
||||||
|
|
||||||
|
h = block.find(re.compile("h[1-9]"))
|
||||||
|
if h:
|
||||||
|
h.name = "p"
|
||||||
|
h.insert_before(BeautifulSoup(features='lxml').new_tag("br"))
|
||||||
|
|
||||||
|
color = '#DDDDDD' if block.attrs.get('class') == 'feature1' else None
|
||||||
|
color = '#EEEEEE' if block.attrs.get('class') == 'feature2' else color
|
||||||
|
wrap_block_with_table(chapter_tag, block, color)
|
||||||
|
block.insert_after(BeautifulSoup(features='lxml').new_tag("br"))
|
||||||
|
block.unwrap()
|
||||||
|
|
||||||
|
|
||||||
def preprocess_pre_tags(chapter_tag):
|
def preprocess_pre_tags(chapter_tag):
|
||||||
for pre in chapter_tag.find_all("pre"):
|
for pre in chapter_tag.find_all("pre"):
|
||||||
new_tag = BeautifulSoup(features='lxml').new_tag("span")
|
new_tag = BeautifulSoup(features='lxml').new_tag("span")
|
||||||
@@ -451,6 +495,7 @@ def prepare_title_and_content(title, chapter_tag: BeautifulSoup, remove_title_fr
|
|||||||
preprocess_table(chapter_tag)
|
preprocess_table(chapter_tag)
|
||||||
preprocess_code_tags(chapter_tag)
|
preprocess_code_tags(chapter_tag)
|
||||||
preprocess_pre_tags(chapter_tag)
|
preprocess_pre_tags(chapter_tag)
|
||||||
|
preprocess_block_tags(chapter_tag)
|
||||||
# 2. class removal
|
# 2. class removal
|
||||||
for tag in chapter_tag.find_all(recursive=True):
|
for tag in chapter_tag.find_all(recursive=True):
|
||||||
if hasattr(tag, 'attrs') and tag.attrs.get('class') and (tag.attrs.get('class') not in ['link-anchor']):
|
if hasattr(tag, 'attrs') and tag.attrs.get('class') and (tag.attrs.get('class') not in ['link-anchor']):
|
||||||
|
|||||||
Reference in New Issue
Block a user