diff --git a/md2cf/confluence_renderer.py b/md2cf/confluence_renderer.py index 74b3496..19d30c3 100644 --- a/md2cf/confluence_renderer.py +++ b/md2cf/confluence_renderer.py @@ -60,7 +60,7 @@ def append(self, child): self.children.append(child) -class ConfluenceRenderer(mistune.Renderer): +class ConfluenceRenderer(mistune.HTMLRenderer): def __init__( self, strip_header=False, @@ -81,14 +81,14 @@ def reinit(self): self.relative_links = list() self.title = None - def header(self, text, level, raw=None): + def heading(self, text, level, raw=None): if self.title is None and level == 1: self.title = text # Don't duplicate page title as a header if self.strip_header: return "" - return super(ConfluenceRenderer, self).header(text, level, raw=raw) + return super(ConfluenceRenderer, self).heading(text, level, raw=raw) def structured_macro(self, name): return ConfluenceTag("structured-macro", attrib={"name": name}) @@ -103,8 +103,8 @@ def plain_text_body(self, text): body_tag.text = text return body_tag - def link(self, link, title, text): - parsed_link = urlparse(link) + def link(self, text, url, title=None): + parsed_link = urlparse(url) if ( self.enable_relative_links and (not parsed_link.scheme and not parsed_link.netloc) @@ -119,18 +119,18 @@ def link(self, link, title, text): path=unquote(parsed_link.path), replacement=replacement_link, fragment=parsed_link.fragment, - original=link, - escaped_original=mistune.escape_link(link), + original=url, + escaped_original=mistune.escape_url(url), ) ) - link = replacement_link - return super(ConfluenceRenderer, self).link(link, title, text) + url = replacement_link + return super(ConfluenceRenderer, self).link(text, url, title) def text(self, text): if self.remove_text_newlines: text = text.replace("\n", " ") - return super().text(text) + return text def block_code(self, code, lang=None): root_element = self.structured_macro("code") diff --git a/md2cf/document.py b/md2cf/document.py index 5ea2592..3103dbb 100644 --- a/md2cf/document.py +++ b/md2cf/document.py @@ -274,12 +274,15 @@ def parse_page( strip_header: bool = False, remove_text_newlines: bool = False, enable_relative_links: bool = False, + escape: bool = False, + allow_harmful_protocols: bool = False, ) -> Page: renderer = ConfluenceRenderer( - use_xhtml=True, strip_header=strip_header, remove_text_newlines=remove_text_newlines, enable_relative_links=enable_relative_links, + escape=escape, + allow_harmful_protocols=allow_harmful_protocols, ) confluence_mistune = mistune.Markdown(renderer=renderer) confluence_content = confluence_mistune("".join(markdown_lines)) diff --git a/setup.py b/setup.py index 4034063..b7e5656 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ install_requires=[ "rich-argparse==1.0.0", "rich==13.0.1", - "mistune==0.8.4", + "mistune==3.0.1", "chardet==5.1.0", "requests==2.31.0", "PyYAML==6.0.1", diff --git a/test_package/functional/result.xml b/test_package/functional/result.xml index ca22230..4978a28 100644 --- a/test_package/functional/result.xml +++ b/test_package/functional/result.xml @@ -1,27 +1,27 @@

Markdown: Syntax