1.1 --- a/micropython/report.py Sat Aug 07 02:06:15 2010 +0200
1.2 +++ b/micropython/report.py Mon Aug 09 01:23:05 2010 +0200
1.3 @@ -51,6 +51,7 @@
1.4 }
1.5
1.6 .nowrap { white-space: nowrap; }
1.7 + .label { font-size: smaller; }
1.8
1.9 .class { margin-top: 1em; margin-bottom: 1em; }
1.10 .function { margin-top: 1em; margin-bottom: 1em; }
1.11 @@ -67,36 +68,47 @@
1.12 position: absolute;
1.13 top: 3ex; left: 0;
1.14 color: white;
1.15 + border-bottom: 0.5ex solid #000;
1.16 + border-right: 0.5ex solid #000;
1.17 z-index: 3;
1.18 }
1.19
1.20 - .scope { padding: 0.5em; background-color: #007700; }
1.21 -
1.22 + .assname,
1.23 .name {
1.24 position: relative;
1.25 + background-color: #300;
1.26 color: white;
1.27 }
1.28
1.29 + .assname:hover,
1.30 .name:hover {
1.31 - background-color: #003300;
1.32 - padding-bottom: 1ex;
1.33 + background-color: #500;
1.34 + padding-top: 0.5ex;
1.35 + padding-bottom: 0.5ex;
1.36 z-index: 2;
1.37 }
1.38
1.39 + .assname:hover .popup,
1.40 .name:hover .popup {
1.41 display: block;
1.42 }
1.43
1.44 + .attrnames,
1.45 + .scope {
1.46 + padding: 0.5em;
1.47 + background-color: #700;
1.48 + }
1.49 +
1.50 .summary-class {
1.51 - background-color: #004400;
1.52 + background-color: #040;
1.53 }
1.54
1.55 .summary-instance {
1.56 - background-color: #0000FF;
1.57 + background-color: #00F;
1.58 }
1.59
1.60 .summary-attr {
1.61 - background-color: #007700;
1.62 + background-color: #070;
1.63 }
1.64
1.65 </style>
1.66 @@ -188,7 +200,34 @@
1.67 _popup_end = _span_end
1.68
1.69 def _scope(self, scope):
1.70 - self.stream.write("<div class='scope'>%s</div>\n" % scope)
1.71 + self.stream.write("<div class='scope'><span class='label'>scope</span><br />%s</div>\n" % scope)
1.72 +
1.73 + def _assname(self, name, node):
1.74 + self.stream.write("<span class='assname'>")
1.75 + if hasattr(node, "_attrnames"):
1.76 + attrnames = node._attrnames
1.77 + self._name_start()
1.78 + self.stream.write(name)
1.79 + self._popup_start()
1.80 + self._attrnames(attrnames[name])
1.81 + self._popup_end()
1.82 + self._name_end()
1.83 + else:
1.84 + self._name(node.name)
1.85 + self.stream.write("</span>")
1.86 +
1.87 + def _attrnames(self, attrnames):
1.88 + if not attrnames:
1.89 + return
1.90 +
1.91 + self.stream.write("<div class='attrnames'><span class='label'>attributes</span><br />")
1.92 + first = 1
1.93 + for attrname in attrnames:
1.94 + if not first:
1.95 + self.stream.write("<br />")
1.96 + self.stream.write(attrname)
1.97 + first = 0
1.98 + self.stream.write("</div>\n")
1.99
1.100 # Summary classes.
1.101
1.102 @@ -322,8 +361,8 @@
1.103
1.104 # Use inspected details where possible.
1.105
1.106 - if hasattr(node, "_def"):
1.107 - cls = node._def
1.108 + if hasattr(node, "unit"):
1.109 + cls = node.unit
1.110 bases = cls.bases
1.111 self.stream.write("<div class='class nowrap' id='%s'>\n" % cls.full_name())
1.112 else:
1.113 @@ -413,8 +452,8 @@
1.114 if not used_by_unit(node):
1.115 return
1.116
1.117 - if hasattr(node, "_def"):
1.118 - fn = node._def
1.119 + if hasattr(node, "unit"):
1.120 + fn = node.unit
1.121 self.stream.write("<div class='function nowrap' id='%s'>\n" % fn.full_name())
1.122 else:
1.123 print "Warning: function %s not recognised!" % node.name
1.124 @@ -427,7 +466,7 @@
1.125 self._object_name_def(self.module, fn, "function-name")
1.126
1.127 self.stream.write("(")
1.128 - self._parameters(fn)
1.129 + self._parameters(fn, node)
1.130 self.stream.write(")")
1.131 self.stream.write(":\n")
1.132 self.stream.write("</div>\n")
1.133 @@ -669,7 +708,7 @@
1.134 self.stream.write("</span>")
1.135
1.136 def visitAssName(self, node):
1.137 - self._name(node.name)
1.138 + self._assname(node.name, node)
1.139
1.140 def visitAssTuple(self, node):
1.141 self.stream.write("<span class='tuple'>")
1.142 @@ -751,15 +790,15 @@
1.143 self.stream.write("</span>")
1.144
1.145 def visitLambda(self, node):
1.146 - if hasattr(node, "_def"):
1.147 - fn = node._def
1.148 + if hasattr(node, "unit"):
1.149 + fn = node.unit
1.150 else:
1.151 print "Warning: function %s not recognised!" % node.name
1.152 return
1.153
1.154 self.stream.write("<span class='lambda'>")
1.155 self._keyword("lambda")
1.156 - self._parameters(fn)
1.157 + self._parameters(fn, node)
1.158 self.stream.write(": <span class='code'>")
1.159 self.dispatch(node.code)
1.160 self.stream.write("</span>")
1.161 @@ -836,7 +875,7 @@
1.162 self.dispatch(v)
1.163 first = 0
1.164
1.165 - def _parameters(self, fn):
1.166 + def _parameters(self, fn, node):
1.167 nparams = len(fn.positional_names)
1.168 ndefaults = len(fn.defaults)
1.169 first_with_default = nparams - ndefaults
1.170 @@ -845,7 +884,7 @@
1.171 for n, param in enumerate(fn.positional_names):
1.172 if not first:
1.173 self.stream.write(", ")
1.174 - self._name(param)
1.175 + self._assname(param, node)
1.176 n_default = n - first_with_default
1.177 if n_default >= 0:
1.178 self._default(fn.defaults[n_default])