1.1 --- a/viewer.py Fri Dec 08 23:41:20 2006 +0100
1.2 +++ b/viewer.py Sat Dec 09 00:36:06 2006 +0100
1.3 @@ -38,7 +38,7 @@
1.4 <title>Module</title>
1.5 <style type="text/css">
1.6 body {
1.7 - padding-top: 4em; padding-bottom: 4em;
1.8 + padding-bottom: 4em;
1.9 font-size: 14pt; font-family: monospace;
1.10 background-color: black; color: white;
1.11 }
1.12 @@ -126,14 +126,14 @@
1.13
1.14 Covered: Add, And, AssAttr, AssList, AssName, AssTuple, Assign, AugAssign,
1.15 Break, CallFunc, Class, Compare, Const, Continue, Dict, Discard,
1.16 - Div, FloorDiv, For, Function, Getattr, Global, If, Keyword, Lambda,
1.17 - List, Module, Mul, Name, Not, Or, Pass, Print, Printnl, Raise,
1.18 - Return, Slice, Stmt, Sub, Subscript, TryExcept, TryFinally, Tuple,
1.19 - UnaryAdd, UnarySub, While.
1.20 + Div, FloorDiv, For, From, Function, Getattr, Global, If, Import,
1.21 + Keyword, Lambda, List, Mod, Module, Mul, Name, Not, Or, Pass,
1.22 + Power, Print, Printnl, Raise, Return, Slice, Stmt, Sub, Subscript,
1.23 + TryExcept, TryFinally, Tuple, UnaryAdd, UnarySub, While.
1.24
1.25 Missing: Assert, Backquote, Bitand, Bitor, Bitxor, Decorators, Ellipsis,
1.26 - Exec, From, Import, Invert, LeftShift, ListComp, ListCompFor,
1.27 - ListCompIf, Mod, Power, RightShift, Sliceobj, Yield.
1.28 + Exec, Invert, LeftShift, ListComp, ListCompFor, ListCompIf,
1.29 + RightShift, Sliceobj, Yield.
1.30 """
1.31
1.32 def __init__(self, stream):
1.33 @@ -253,6 +253,32 @@
1.34 self.stream.write("</div>\n")
1.35 self.stream.write("</div>\n")
1.36
1.37 + def visitFrom(self, node):
1.38 + self.stream.write("<div class='from'>\n")
1.39 + self._keyword("from")
1.40 + self.stream.write("<span class='name'>\n")
1.41 + self.stream.write(node.modname)
1.42 + self._popup_start()
1.43 + self._types(node._modname)
1.44 + self._popup_end()
1.45 + self.stream.write("</span>\n")
1.46 + self._keyword("import")
1.47 + first = 1
1.48 + for (name, alias), _name in map(None, node.names, node._names):
1.49 + if not first:
1.50 + self.stream.write(",\n")
1.51 + if alias:
1.52 + self.stream.write(name + " ")
1.53 + self._keyword("as")
1.54 + self.stream.write("<span class='name'>\n")
1.55 + self.stream.write(alias or name)
1.56 + self._popup_start()
1.57 + self._types(_name)
1.58 + self._popup_end()
1.59 + self.stream.write("</span>\n")
1.60 + first = 0
1.61 + self.stream.write("</div>\n")
1.62 +
1.63 def visitFunction(self, node):
1.64 definition = node._node
1.65 subprogram = definition.expr.ref
1.66 @@ -325,6 +351,25 @@
1.67 self.stream.write("</div>\n")
1.68 self.stream.write("</div>\n")
1.69
1.70 + def visitImport(self, node):
1.71 + self.stream.write("<div class='import'>\n")
1.72 + self._keyword("import")
1.73 + first = 1
1.74 + for (name, alias), _name in map(None, node.names, node._names):
1.75 + if not first:
1.76 + self.stream.write(",\n")
1.77 + if alias:
1.78 + self.stream.write(name + " ")
1.79 + self._keyword("as")
1.80 + self.stream.write("<span class='name'>\n")
1.81 + self.stream.write(alias or name)
1.82 + self._popup_start()
1.83 + self._types(_name)
1.84 + self._popup_end()
1.85 + self.stream.write("</span>\n")
1.86 + first = 0
1.87 + self.stream.write("</div>\n")
1.88 +
1.89 def visitPass(self, node):
1.90 self.stream.write("<div class='pass'>\n")
1.91 self._keyword("pass")
1.92 @@ -617,6 +662,9 @@
1.93
1.94 visitList = visitAssList
1.95
1.96 + def visitMod(self, node):
1.97 + self._visitBinary(node, "mod", "%")
1.98 +
1.99 def visitMul(self, node):
1.100 self._visitBinary(node, "mul", "*")
1.101