feat(convert): ajoute la conversion des footnotes
This commit is contained in:
parent
e4816bc2ee
commit
9360cc134e
|
@ -164,6 +164,44 @@ def filter_html(html):
|
||||||
return html
|
return html
|
||||||
|
|
||||||
|
|
||||||
|
def footnotes(html):
|
||||||
|
bracket_pattern = re.compile(r'\[\s*(/?)\s*(fn|footnote)\s*(\s[^\]]*)?\]')
|
||||||
|
html = bracket_pattern.sub(r'<\1\2\3>', html)
|
||||||
|
|
||||||
|
soup = bs(html, 'html.parser')
|
||||||
|
|
||||||
|
index = 1
|
||||||
|
seen_values = []
|
||||||
|
for fn in soup.find_all(['fn', 'footnote']):
|
||||||
|
if 'value' in fn.attrs and fn.attrs['value'] in seen_values:
|
||||||
|
value = fn.attrs['value']
|
||||||
|
fn.clear()
|
||||||
|
elif 'value' in fn.attrs and fn.attrs['value']:
|
||||||
|
value = fn.attrs['value']
|
||||||
|
seen_values.append(value)
|
||||||
|
else:
|
||||||
|
value = ""
|
||||||
|
seen_values.append(str(index))
|
||||||
|
index += 1
|
||||||
|
if value:
|
||||||
|
spip_fn = fn.wrap(soup.new_tag('spip:fn', value=value))
|
||||||
|
else:
|
||||||
|
spip_fn = fn.wrap(soup.new_tag('spip:fn'))
|
||||||
|
spip_fn.fn.unwrap()
|
||||||
|
|
||||||
|
html = str(soup)
|
||||||
|
# Spip a eu la bonne idée de choisir les crochets et chevrons
|
||||||
|
# pour indiquer les réfs.
|
||||||
|
spip_fn_open_pattern = re.compile(r'<spip:fn>')
|
||||||
|
spip_fn_close_pattern = re.compile(r'</spip:fn>')
|
||||||
|
spip_fn_value_pattern = re.compile(r'<spip:fn value="([^"]+)">')
|
||||||
|
|
||||||
|
html = spip_fn_open_pattern.sub(r'[[', html)
|
||||||
|
html = spip_fn_close_pattern.sub(r']]', html)
|
||||||
|
html = spip_fn_value_pattern.sub(r'[[<\1>', html)
|
||||||
|
return html
|
||||||
|
|
||||||
|
|
||||||
def sanitarize_html(html, node_fmt):
|
def sanitarize_html(html, node_fmt):
|
||||||
html = strong_to_dl(html)
|
html = strong_to_dl(html)
|
||||||
|
|
||||||
|
@ -176,7 +214,9 @@ def sanitarize_html(html, node_fmt):
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError("Ce node est dans un format inconnu.")
|
raise NotImplementedError("Ce node est dans un format inconnu.")
|
||||||
|
|
||||||
return str(bs(html, 'html.parser'))
|
html = footnotes(html)
|
||||||
|
|
||||||
|
return html
|
||||||
|
|
||||||
|
|
||||||
def convert_node(node, options):
|
def convert_node(node, options):
|
||||||
|
|
Loading…
Reference in New Issue