1.1 --- a/moinformat/links/html.py Thu Jul 26 16:33:37 2018 +0200
1.2 +++ b/moinformat/links/html.py Thu Jul 26 17:05:08 2018 +0200
1.3 @@ -35,12 +35,12 @@
1.4 levels = self.pagename.count("/")
1.5 return "/".join([".."] * levels)
1.6
1.7 - def is_url(self, link):
1.8 + def is_url(self, target):
1.9
1.10 - "Return whether the 'link' references a URL."
1.11 + "Return whether the 'target' references a URL."
1.12
1.13 - scheme, host, path, params, query, fragment = urlparse(link.target)
1.14 - return scheme
1.15 + scheme, host, path, params, query, fragment = urlparse(target)
1.16 + return scheme and target or None
1.17
1.18 def normalise(self, path):
1.19
1.20 @@ -48,92 +48,91 @@
1.21
1.22 return not path.endswith("/") and "%s/" % path or path
1.23
1.24 - def translate(self, link):
1.25 + def translate(self, target):
1.26
1.27 - "Translate the 'link', rewriting the target."
1.28 + "Translate the 'target' and return the rewritten string."
1.29
1.30 - target = link.target.rstrip("/")
1.31 + target = target.rstrip("/")
1.32
1.33 # Sub-pages.
1.34
1.35 if target.startswith("/"):
1.36 - self.translate_subpage(link, target)
1.37 + return self.translate_subpage(target)
1.38
1.39 # Sibling (of ancestor) pages.
1.40
1.41 - elif target.startswith("../"):
1.42 - self.translate_relative(link, target)
1.43 + if target.startswith("../"):
1.44 + return self.translate_relative(target)
1.45
1.46 # Attachment or interwiki link.
1.47
1.48 - elif self.translate_qualified_link(link, target):
1.49 - pass
1.50 + rewritten = self.translate_qualified_link(target)
1.51 + if rewritten:
1.52 + return rewritten
1.53
1.54 # Plain URL.
1.55
1.56 - elif self.is_url(link):
1.57 - pass
1.58 + rewritten = self.is_url(target)
1.59 + if rewritten:
1.60 + return rewritten
1.61
1.62 # Top-level pages.
1.63
1.64 - else:
1.65 - top_level = self.get_top_level()
1.66 - link.target = "%s%s" % (top_level and "%s/" % top_level or "", target)
1.67 + top_level = self.get_top_level()
1.68 + return "%s%s" % (top_level and "%s/" % top_level or "", target)
1.69
1.70 - def translate_qualified_link(self, link, target):
1.71 + def translate_qualified_link(self, target):
1.72
1.73 """
1.74 - Translate a possible qualified 'link', returning whether translation
1.75 - occurred.
1.76 + Translate a possible qualified link 'target', returning a rewritten
1.77 + target or None if the link is not suitable.
1.78 """
1.79
1.80 t = target.split(":", 1)
1.81 if len(t) != 2:
1.82 - return False
1.83 + return None
1.84
1.85 prefix, target = t
1.86
1.87 # Attachment links.
1.88
1.89 if prefix == "attachment":
1.90 - self.translate_attachment(link, target)
1.91 - return True
1.92 + return self.translate_attachment(target)
1.93
1.94 # Interwiki links.
1.95
1.96 url = self.mapping.get(prefix)
1.97 if url:
1.98 - self.translate_interwiki(link, url, target)
1.99 - return True
1.100 + return self.translate_interwiki(url, target)
1.101
1.102 - return False
1.103 + return None
1.104
1.105 # Specific link translators.
1.106
1.107 - def translate_attachment(self, link, target):
1.108 + def translate_attachment(self, target):
1.109
1.110 - "Update 'link' for the given attachment 'target'."
1.111 + "Return a translation of the given attachment 'target'."
1.112
1.113 - link.target = "%sattachments/%s/%s" % (
1.114 + return "%sattachments/%s/%s" % (
1.115 self.get_top_level(), self.pagename, target)
1.116
1.117 - def translate_interwiki(self, link, url, target):
1.118 + def translate_interwiki(self, url, target):
1.119
1.120 - "Update 'link' for the given interwiki 'target'."
1.121 + "Return a translation of the given interwiki 'target'."
1.122
1.123 - link.target = "%s%s" % (self.normalise(url), target)
1.124 + return "%s%s" % (self.normalise(url), target)
1.125
1.126 - def translate_relative(self, link, target):
1.127 + def translate_relative(self, target):
1.128
1.129 - "Update 'link' for the given relative 'target'."
1.130 + "Return a translation of the given relative 'target'."
1.131
1.132 - link.target = target[len("../"):]
1.133 + return target[len("../"):]
1.134
1.135 - def translate_subpage(self, link, target):
1.136 + def translate_subpage(self, target):
1.137
1.138 - "Update 'link' for the given subpage 'target'."
1.139 + "Return a translation of the given subpage 'target'."
1.140
1.141 - link.target = ".%s" % target
1.142 + return ".%s" % target
1.143
1.144 linker = HTMLLinker
1.145
2.1 --- a/moinformat/parsers/moin.py Thu Jul 26 16:33:37 2018 +0200
2.2 +++ b/moinformat/parsers/moin.py Thu Jul 26 17:05:08 2018 +0200
2.3 @@ -121,11 +121,11 @@
2.4
2.5 # Link translation.
2.6
2.7 - def translate_links(self, scheme, name, base=""):
2.8 + def translate_links(self, scheme, pagename):
2.9
2.10 """
2.11 Translate the link nodes in the document for the given 'scheme' and
2.12 - employing the given document 'name' and 'base'.
2.13 + employing the given document 'pagename'.
2.14 """
2.15
2.16 # Obtain a class for the named linker.
2.17 @@ -136,13 +136,14 @@
2.18
2.19 # Instantiate the class with document metadata.
2.20
2.21 - linker = linker_cls(name, base)
2.22 + linker = linker_cls(pagename)
2.23
2.24 for node in self.links:
2.25
2.26 # Translate the link.
2.27
2.28 - linker.translate(node)
2.29 + node.target = linker.translate(node.target)
2.30 +
2.31
2.32
2.33 # Parser methods supporting different page features.