forked from LiveCarta/BookConverter
epub converter: fix list-type adding
This commit is contained in:
@@ -87,8 +87,8 @@ LIVECARTA_STYLE_ATTRS = {
|
|||||||
'border-left-width': [],
|
'border-left-width': [],
|
||||||
'border-bottom-width': [],
|
'border-bottom-width': [],
|
||||||
'border': [],
|
'border': [],
|
||||||
# 'list-style-type': [],
|
'list-style-type': [],
|
||||||
# 'list-style-image': []
|
'list-style-image': []
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -126,8 +126,8 @@ LIVECARTA_STYLE_ATTRS_MAPPING = {
|
|||||||
'border-right-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-left-width': lambda x: x if x != '0' else '',
|
||||||
'border-bottom-width': lambda x: x if x != '0' else '',
|
'border-bottom-width': lambda x: x if x != '0' else '',
|
||||||
# 'list-style-type': lambda x: x if x in list_types else 'disc',
|
'list-style-type': lambda x: x if x in list_types else 'disc',
|
||||||
# 'list-style-image': lambda x: 'disc'
|
'list-style-image': lambda x: 'disc'
|
||||||
}
|
}
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -226,6 +226,7 @@ class TagStyleConverter:
|
|||||||
style = self.tag_with_style.attrs.get('style') + ';'
|
style = self.tag_with_style.attrs.get('style') + ';'
|
||||||
style = self.remove_white_if_no_bgcolor(style, self.tag_with_style)
|
style = self.remove_white_if_no_bgcolor(style, self.tag_with_style)
|
||||||
style = style.replace('background:', 'background-color:')
|
style = style.replace('background:', 'background-color:')
|
||||||
|
style = style.replace('list-style-image', 'list-style-type')
|
||||||
return style
|
return style
|
||||||
|
|
||||||
def change_attrs_with_corresponding_tags(self):
|
def change_attrs_with_corresponding_tags(self):
|
||||||
@@ -283,34 +284,41 @@ class TagStyleConverter:
|
|||||||
|
|
||||||
p_tag.attrs['style'] = new_style
|
p_tag.attrs['style'] = new_style
|
||||||
|
|
||||||
|
li_attrs_regexp = re.compile(r'(list-style-type:(\w+);)')
|
||||||
|
has_li_style_attr = re.search(li_attrs_regexp, old_style)
|
||||||
|
old_style = old_style if not has_li_style_attr else old_style.replace(has_li_style_attr.group(1), '')
|
||||||
t.attrs['style'] = old_style
|
t.attrs['style'] = old_style
|
||||||
t.wrap(p_tag)
|
t.wrap(p_tag)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_span_to_save_style_attrs_in_li(t):
|
def add_span_to_save_style_attrs_in_li(t):
|
||||||
styles_cant_be_in_li = [attr for attr in LIVECARTA_STYLE_ATTRS if attr not in ['text-align', 'list-style-type']]
|
|
||||||
|
|
||||||
if t.name == 'li' and t.attrs.get('style'):
|
if t.name == 'li' and t.attrs.get('style'):
|
||||||
|
styles_cant_be_in_li = [attr for attr in LIVECARTA_STYLE_ATTRS if
|
||||||
|
attr not in ['text-align', 'list-style-type']]
|
||||||
|
|
||||||
check = [attr in t.attrs.get('style') for attr in styles_cant_be_in_li]
|
check = [attr in t.attrs.get('style') for attr in styles_cant_be_in_li]
|
||||||
if any(check):
|
if any(check):
|
||||||
t.name = 'span'
|
t.name = 'span'
|
||||||
li_tag = BeautifulSoup(features='lxml').new_tag('li')
|
li_tag = BeautifulSoup(features='lxml').new_tag('li')
|
||||||
old_style = t.attrs['style']
|
old_style = t.attrs['style']
|
||||||
|
new_style = ''
|
||||||
|
|
||||||
possible_li_attrs_regexp = re.compile(r'(text-align:(\w+);)')
|
for possible_li_attrs_regexp in [re.compile(r'(text-align:(\w+);)'),
|
||||||
has_li_style_attrs = re.search(possible_li_attrs_regexp, old_style)
|
re.compile(r'(list-style-type:(\w+);)')]:
|
||||||
if has_li_style_attrs and has_li_style_attrs.group(1):
|
has_li_style_attrs = re.search(possible_li_attrs_regexp, old_style)
|
||||||
new_style = has_li_style_attrs.group(1)
|
if has_li_style_attrs and has_li_style_attrs.group(1):
|
||||||
old_style = old_style.replace(has_li_style_attrs.group(1), '')
|
new_style += has_li_style_attrs.group(1)
|
||||||
li_tag.attrs['style'] = new_style
|
old_style = old_style.replace(has_li_style_attrs.group(1), '')
|
||||||
|
|
||||||
|
li_tag.attrs['style'] = new_style
|
||||||
t.attrs['style'] = old_style
|
t.attrs['style'] = old_style
|
||||||
t.wrap(li_tag)
|
t.wrap(li_tag)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_span_to_save_style_attrs_in_ul(t):
|
def add_span_to_save_style_attrs_in_ul_ol(t):
|
||||||
styles_cant_be_in_li = [attr for attr in LIVECARTA_STYLE_ATTRS if attr not in ['list-style-type']]
|
if t.name in ['ul', 'ol'] and t.attrs.get('style'):
|
||||||
|
styles_cant_be_in_li = [attr for attr in LIVECARTA_STYLE_ATTRS if attr not in ['list-style-type']]
|
||||||
|
|
||||||
if t.name == 'ul' and t.attrs.get('style'):
|
|
||||||
check = [attr in t.attrs.get('style') for attr in styles_cant_be_in_li]
|
check = [attr in t.attrs.get('style') for attr in styles_cant_be_in_li]
|
||||||
if any(check):
|
if any(check):
|
||||||
t.name = 'span'
|
t.name = 'span'
|
||||||
@@ -321,27 +329,30 @@ class TagStyleConverter:
|
|||||||
has_li_style_attrs = re.search(possible_li_attrs_regexp, old_style)
|
has_li_style_attrs = re.search(possible_li_attrs_regexp, old_style)
|
||||||
if has_li_style_attrs and has_li_style_attrs.group(1):
|
if has_li_style_attrs and has_li_style_attrs.group(1):
|
||||||
new_style = has_li_style_attrs.group(1)
|
new_style = has_li_style_attrs.group(1)
|
||||||
old_style = old_style.replace(has_li_style_attrs.group(1), '')
|
old_style = old_style.replace(new_style, '')
|
||||||
li_tag.attrs['style'] = new_style
|
li_tag.attrs['style'] = new_style
|
||||||
t.attrs['style'] = old_style
|
t.attrs['style'] = old_style
|
||||||
t.wrap(li_tag)
|
t.wrap(li_tag)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def add_span_to_save_style_attrs(t):
|
def add_span_to_save_style_attrs(t):
|
||||||
h_regex = f'(^h[1-9]$)'
|
no_style_in_livecarta_regexp = re.compile('(^h[1-9]$)')
|
||||||
no_style_in_livecarta_regexp = re.compile(r'(^ol$)(^ul$)|' + h_regex)
|
|
||||||
|
|
||||||
if re.search(no_style_in_livecarta_regexp, t.name) and t.attrs.get('style'):
|
if re.search(no_style_in_livecarta_regexp, t.name) and t.attrs.get('style'):
|
||||||
new_tag = BeautifulSoup(features='lxml').new_tag(t.name)
|
new_tag = BeautifulSoup(features='lxml').new_tag(t.name)
|
||||||
t.name = 'span'
|
t.name = 'span'
|
||||||
t.wrap(new_tag)
|
t.wrap(new_tag)
|
||||||
|
style = t.attrs['style']
|
||||||
|
li_attrs_regexp = re.compile(r'(list-style-type:(\w+);)')
|
||||||
|
has_li_style_attr = re.search(li_attrs_regexp, style)
|
||||||
|
t.attrs['style'] = style if not has_li_style_attr else style.replace(has_li_style_attr.group(1), '')
|
||||||
|
|
||||||
def convert_initial_tag(self):
|
def convert_initial_tag(self):
|
||||||
del self.tag.attrs['livecarta_id']
|
del self.tag.attrs['livecarta_id']
|
||||||
self.tag = self.change_attrs_with_corresponding_tags()
|
self.tag = self.change_attrs_with_corresponding_tags()
|
||||||
self.wrap_p_to_save_style_attrs(self.tag)
|
self.wrap_p_to_save_style_attrs(self.tag)
|
||||||
self.add_span_to_save_style_attrs_in_li(self.tag)
|
self.add_span_to_save_style_attrs_in_li(self.tag)
|
||||||
# self.add_span_to_save_style_attrs_in_ul(self.tag)
|
self.add_span_to_save_style_attrs_in_ul_ol(self.tag)
|
||||||
self.add_span_to_save_style_attrs(self.tag)
|
self.add_span_to_save_style_attrs(self.tag)
|
||||||
return self.tag
|
return self.tag
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user