1.1 --- a/simplify/annotate.py Thu May 31 01:28:12 2007 +0200
1.2 +++ b/simplify/annotate.py Sun Jun 03 03:00:12 2007 +0200
1.3 @@ -1436,6 +1436,12 @@
1.4 def has_key(self, name):
1.5 return self.names.has_key(name)
1.6
1.7 + def items(self):
1.8 + return self.names.items()
1.9 +
1.10 + def get(self, name):
1.11 + return self.names.get(name)
1.12 +
1.13 def revoke(self, name, type):
1.14
1.15 "Revoke from the entry for the given 'name' the specified 'type'."
2.1 --- a/simplify/viewer.py Thu May 31 01:28:12 2007 +0200
2.2 +++ b/simplify/viewer.py Sun Jun 03 03:00:12 2007 +0200
2.3 @@ -120,6 +120,14 @@
2.4 display: block;
2.5 }
2.6
2.7 + .summary-instance {
2.8 + background-color: #0000FF;
2.9 + }
2.10 +
2.11 + .summary-attr {
2.12 + background-color: #007700;
2.13 + }
2.14 +
2.15 </style>
2.16 </head>
2.17 <body>
2.18 @@ -144,6 +152,24 @@
2.19 def _url(self, url):
2.20 return self._attr(url).replace("#", "%23").replace("-", "%2d")
2.21
2.22 + def _comment(self, comment):
2.23 + self.stream.write("<span class='comment'># %s</span>\n" % comment)
2.24 +
2.25 + def _keyword(self, kw):
2.26 + self.stream.write("<span class='keyword'>%s</span> " % kw)
2.27 +
2.28 + def _doc(self, node):
2.29 + if node.doc is not None:
2.30 + self.stream.write("<pre class='doc'>\n")
2.31 + self.stream.write('"""')
2.32 + output = textwrap.dedent(node.doc.replace('"""', '\\"\\"\\"'))
2.33 + self.stream.write(self._text(output))
2.34 + self.stream.write('"""')
2.35 + self.stream.write("</pre>\n")
2.36 +
2.37 + def _name(self, name):
2.38 + self.stream.write("<span class='name'>%s</span>\n" % name)
2.39 +
2.40 # Summary classes.
2.41
2.42 class Summariser(Writer):
2.43 @@ -157,7 +183,43 @@
2.44 self.stream.write(html_footer)
2.45
2.46 def _write_classes(self, module):
2.47 - pass
2.48 + for structure in module.simplifier.structures:
2.49 + self._write_class(structure)
2.50 +
2.51 + def _write_class(self, structure):
2.52 + self.stream.write("<div class='class' id='%s'>\n" % structure.full_name())
2.53 + self._keyword("class")
2.54 + self.stream.write(structure.name)
2.55 + names = set()
2.56 + instances = {}
2.57 + for instance in structure.instances.values():
2.58 + for name, values in instance.namespace.items():
2.59 + if not name in names:
2.60 + names.add(name)
2.61 + instances[instance.full_name()] = instance
2.62 +
2.63 + sorted_names = list(names)
2.64 + sorted_names.sort()
2.65 + sorted_instances = instances.keys()
2.66 + sorted_instances.sort()
2.67 +
2.68 + self.stream.write("<table cellspacing='5' cellpadding='5'>\n")
2.69 + self.stream.write("<tr>\n")
2.70 + self.stream.write("<th></th>\n")
2.71 + for name in sorted_names:
2.72 + self.stream.write("<th class='summary-attr'>%s</th>\n" % self._text(name))
2.73 + self.stream.write("</tr>\n")
2.74 + for instance in sorted_instances:
2.75 + self.stream.write("<tr>\n")
2.76 + self.stream.write("<th class='summary-instance'>%s</th>\n" % self._text(instance))
2.77 + for name in sorted_names:
2.78 + self.stream.write("<td>\n")
2.79 + for value in instances[instance].namespace.get(name):
2.80 + self.stream.write("<span>%s</span>\n" % value.type.full_name())
2.81 + self.stream.write("</td>\n")
2.82 + self.stream.write("</tr>\n")
2.83 + self.stream.write("</table>\n")
2.84 + self.stream.write("</div>\n")
2.85
2.86 # Browser classes.
2.87
2.88 @@ -926,21 +988,6 @@
2.89
2.90 # Output preparation methods.
2.91
2.92 - def _comment(self, comment):
2.93 - self.stream.write("<span class='comment'># %s</span>\n" % comment)
2.94 -
2.95 - def _keyword(self, kw):
2.96 - self.stream.write("<span class='keyword'>%s</span> " % kw)
2.97 -
2.98 - def _doc(self, node):
2.99 - if node.doc is not None:
2.100 - self.stream.write("<pre class='doc'>\n")
2.101 - self.stream.write('"""')
2.102 - output = textwrap.dedent(node.doc.replace('"""', '\\"\\"\\"'))
2.103 - self.stream.write(self._text(output))
2.104 - self.stream.write('"""')
2.105 - self.stream.write("</pre>\n")
2.106 -
2.107 def _sequence(self, node):
2.108 first = 1
2.109 for n in node.nodes:
2.110 @@ -1037,9 +1084,6 @@
2.111 self.stream.write("=\n")
2.112 self.dispatch(default.original)
2.113
2.114 - def _name(self, name):
2.115 - self.stream.write("<span class='name'>%s</span>\n" % name)
2.116 -
2.117 def _name_start(self, name, classes=None):
2.118 if classes is not None:
2.119 classes = " " + classes
2.120 @@ -1198,6 +1242,14 @@
2.121 browser = Browser(stream or sys.stdout)
2.122 browser.process(module.original)
2.123
2.124 +def makesummary(module, filename):
2.125 + stream = open(filename, "wb")
2.126 + try:
2.127 + summariser = Summariser(stream)
2.128 + summariser.process(module)
2.129 + finally:
2.130 + stream.close()
2.131 +
2.132 def makedoc(module, filename):
2.133 stream = open(filename, "wb")
2.134 try:
2.135 @@ -1212,5 +1264,6 @@
2.136 os.mkdir(dirname)
2.137 for m in [module, builtins] + modules:
2.138 makedoc(m, os.path.join(dirname, "%s%sxhtml" % (m.name, os.path.extsep)))
2.139 + makesummary(m, os.path.join(dirname, "%s%s%sxhtml" % (m.name, "-summary", os.path.extsep)))
2.140
2.141 # vim: tabstop=4 expandtab shiftwidth=4