# HG changeset patch # User Paul Boddie # Date 1555020519 -7200 # Node ID 803fdc74290320fef7cfb1de1748f457780b0159 # Parent 18182c6682d63fdd000d6f794c24590dd403cb98 Introduced a link abstraction to hold link type information and for convenience. Introduced support for metadata indicating the name of the attachments directory in serialised output. diff -r 18182c6682d6 -r 803fdc742903 moinformat/links/common.py --- a/moinformat/links/common.py Thu Apr 11 23:13:56 2019 +0200 +++ b/moinformat/links/common.py Fri Apr 12 00:08:39 2019 +0200 @@ -19,6 +19,27 @@ this program. If not, see . """ +class Link: + + "A link abstraction." + + def __init__(self, target, label, type): + + "Initialise the link with the given 'target', 'label' and 'type'." + + self.target = target + self.label = label + self.type = type + + def get_target(self): + return self.target + + def get_label(self): + return self.label or self.target + + def get_type(self): + return self.type + class Linker: "Translate Moin links into other forms." @@ -41,6 +62,7 @@ self.mapping = metadata.get("mapping", {}) self.root_pagename = metadata.get("root_pagename", "FrontPage") + self.attachments_dir = metadata.get("attachments", "attachments") def resolve(path, pagename, root_pagename): diff -r 18182c6682d6 -r 803fdc742903 moinformat/links/html.py --- a/moinformat/links/html.py Thu Apr 11 23:13:56 2019 +0200 +++ b/moinformat/links/html.py Fri Apr 12 00:08:39 2019 +0200 @@ -19,7 +19,7 @@ this program. If not, see . """ -from moinformat.links.common import Linker, resolve +from moinformat.links.common import Link, Linker, resolve from urllib import quote, quote_plus from urlparse import urlparse @@ -70,17 +70,17 @@ # Fragments. Remove the leading hash for the label. if target.startswith("#"): - return self.quote(target), target.lstrip("#") + return Link(self.quote(target), target.lstrip("#"), "fragment") # Sub-pages. Remove the leading slash for the label. if target.startswith("/"): - return self.translate_pagename(target), target.lstrip("/") + return Link(self.translate_pagename(target), target.lstrip("/"), "page") # Sibling (of ancestor) pages. if target.startswith("../"): - return self.translate_pagename(target), None + return Link(self.translate_pagename(target), None, "page") # Attachment or interwiki link. @@ -92,11 +92,11 @@ rewritten = self.is_url(target) if rewritten: - return rewritten, None + return Link(rewritten, None, "url") # Top-level pages. - return self.translate_pagename(target), None + return Link(self.translate_pagename(target), None, "page") def translate_pagename(self, target): @@ -130,8 +130,8 @@ def translate_qualified_link(self, target): """ - Translate a possible qualified link 'target', returning a tuple - containing a rewritten target and a suitable default label. + Translate a possible qualified link 'target', returning a link object + retaining a rewritten target and a suitable default label. Return None if the link is not suitable. """ @@ -145,13 +145,13 @@ # Attachment links. if prefix == "attachment": - return self.translate_attachment(target), target + return Link(self.translate_attachment(target), target, "attachment") # Interwiki links. url = self.mapping.get(prefix) if url: - return self.translate_interwiki(url, target), target + return Link(self.translate_interwiki(url, target), target, "interwiki") return None @@ -161,7 +161,7 @@ "Return a translation of the given attachment 'target'." - return self.quote("./attachments/%s" % target) + return self.quote("./%s/%s" % (self.attachments_dir, target)) def translate_interwiki(self, url, target): diff -r 18182c6682d6 -r 803fdc742903 moinformat/serialisers/html/graphviz.py --- a/moinformat/serialisers/html/graphviz.py Thu Apr 11 23:13:56 2019 +0200 +++ b/moinformat/serialisers/html/graphviz.py Fri Apr 12 00:08:39 2019 +0200 @@ -121,7 +121,7 @@ # Make sure that page attachments can be stored. self.output.ensure_attachments(pagename) - target, _label = self.linker.translate("attachment:%s" % attachment) + link = self.linker.translate("attachment:%s" % attachment) # No filename is defined for inline output. @@ -156,12 +156,12 @@ self.raw(graphviz.get_output()) attributes["usemap"] = "#%s" % im_attributes["id"] - self.image(target, attributes) + self.image(link.get_target(), attributes) # For other output, create a file and embed the object. elif not inline: - self.object(target, attributes) + self.object(link.get_target(), attributes) # Or for inline output, emit it in the document itself. diff -r 18182c6682d6 -r 803fdc742903 moinformat/serialisers/html/moin.py --- a/moinformat/serialisers/html/moin.py Thu Apr 11 23:13:56 2019 +0200 +++ b/moinformat/serialisers/html/moin.py Fri Apr 12 00:08:39 2019 +0200 @@ -252,11 +252,9 @@ self.out("
") def _link(self, target, nodes, tag, attr): - label = None - if self.linker: - href, label = self.linker.translate(target) + link = self.linker and self.linker.translate(target) or None - self.out('<%s %s="%s"' % (tag, attr, escape_attr(href))) + self.out('<%s %s="%s"' % (tag, attr, escape_attr(link.get_target()))) if nodes: for node in nodes[1:]: @@ -268,7 +266,7 @@ if nodes: nodes[0].to_string(self) else: - self.out(escape_text(label or target)) + self.out(escape_text(link.get_label())) self.out("" % tag)