1.1 --- a/micropython/report.py Tue Oct 08 22:44:44 2013 +0200
1.2 +++ b/micropython/report.py Tue Oct 08 22:59:10 2013 +0200
1.3 @@ -292,10 +292,10 @@
1.4 classes or "specific-ref", module_name, os.path.extsep,
1.5 self._attr(full_name), self._text(name)))
1.6
1.7 - def _module_link(self, module_name, classes=None):
1.8 + def _module_link(self, module_name, label, classes=None):
1.9 self.stream.write("<a class='%s' href='%s%sxhtml'>%s</a>" % (
1.10 classes or "name", module_name, os.path.extsep,
1.11 - self._text(module_name)))
1.12 + self._text(label)))
1.13
1.14 def _scope(self, scope, attr):
1.15 self.stream.write("<div class='scope'>"
1.16 @@ -815,17 +815,35 @@
1.17 def visitFrom(self, node):
1.18 self.stream.write("<div class='from nowrap'>\n")
1.19 self._keyword("from")
1.20 - self._module_link(node.modname)
1.21 +
1.22 + # Support relative imports of names and whole modules.
1.23 +
1.24 + modname, names = get_module_name(node, self.module)
1.25 + if modname:
1.26 + self._module_link(modname, "%s%s" % ("." * node.level, modname))
1.27 + else:
1.28 + self._text("." * node.level)
1.29 +
1.30 self._keyword("import", 1)
1.31 first = True
1.32 - for name, alias in node.names:
1.33 +
1.34 + # Integrate the provided name details with any calculated details
1.35 + # resulting from whole module imports.
1.36 +
1.37 + for (name, alias), (full_name, alias) in zip(node.names, names):
1.38 if not first:
1.39 self.stream.write(", ")
1.40 - self._name(name)
1.41 +
1.42 + if modname:
1.43 + self._name(name)
1.44 + else:
1.45 + self._module_link(full_name, name)
1.46 +
1.47 if alias:
1.48 self._keyword("as", 1)
1.49 self._name(alias)
1.50 first = False
1.51 +
1.52 self.stream.write("</div>\n")
1.53
1.54 def visitFunction(self, node):
1.55 @@ -902,7 +920,7 @@
1.56 for name, alias in node.names:
1.57 if not first:
1.58 self.stream.write(",\n")
1.59 - self._module_link(name)
1.60 + self._module_link(name, name)
1.61 if alias:
1.62 self._keyword("as", 1)
1.63 self._name(alias)