[Telepathy-commits] [telepathy-spec/master] Support tp:changed

Davyd Madeley davyd at madeley.id.au
Mon Mar 23 12:29:31 PDT 2009


Abstract away added/deprecated/changed
---
 doc/spec/style.css           |   11 +++++++++
 doc/templates/interface.html |    9 ++++++++
 tools/specparser.py          |   47 +++++++++++++++++-------------------------
 3 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/doc/spec/style.css b/doc/spec/style.css
index e0b52d9..fa388e7 100644
--- a/doc/spec/style.css
+++ b/doc/spec/style.css
@@ -150,6 +150,17 @@ div.added span.version {
 	font-weight: bold;
 }
 
+div.changed {
+	border-left: 2px solid #8f5902;
+	margin: 1ex;
+	padding-left: 1ex;
+}
+
+div.changed span.version {
+	color: #8f5902;
+	font-weight: bold;
+}
+
 div.deprecated,
 div.havoc {
 	border-left: 2px solid #a40000;
diff --git a/doc/templates/interface.html b/doc/templates/interface.html
index 389fc52..9e7698e 100644
--- a/doc/templates/interface.html
+++ b/doc/templates/interface.html
@@ -83,6 +83,7 @@
    </div>
    #end if
    $interface.get_added()
+   $interface.get_changed()
    $interface.get_deprecated()
 
    #if $interface.requires
@@ -113,6 +114,7 @@
      <h2>$method.short_name ($method.get_in_args()) &#8594; $method.get_out_args()</h2>
 
      $method.get_added()
+     $method.get_changed()
      $method.get_deprecated()
 
      #if $method.in_args
@@ -125,6 +127,7 @@
         #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
        </li>
        $arg.get_added()
+       $arg.get_changed()
        $arg.get_deprecated()
        $arg.get_docstring()
       #end for
@@ -142,6 +145,7 @@
         #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
        </li>
        $arg.get_added()
+       $arg.get_changed()
        $arg.get_deprecated()
        $arg.get_docstring()
       #end for
@@ -156,6 +160,7 @@
       #for $error in $method.possible_errors
        <li><a href="$error.get_url()" title="$error.get_title()">$error.get_error().short_name</a></li>
        $error.get_added()
+       $error.get_changed()
        $error.get_deprecated()
        $error.get_docstring()
       #end for
@@ -180,6 +185,7 @@
      <h2>$signal.short_name ($signal.get_args())</h2>
 
      $signal.get_added()
+     $signal.get_changed()
      $signal.get_deprecated()
 
      #if $signal.args
@@ -192,6 +198,7 @@
        #if $arg.get_type(): (<a href="$arg.get_type_url()" title="$arg.get_type_title()">$arg.get_type().short_name</a>)
        </li>
        $arg.get_added()
+       $arg.get_changed()
        $arg.get_deprecated()
        $arg.get_docstring()
       #end for
@@ -223,6 +230,7 @@
       <div class="access">$property.get_access()</div>
 
      $property.get_added()
+     $property.get_changed()
      $property.get_deprecated()
      $property.get_docstring()
     </div>
@@ -243,6 +251,7 @@
       </h2>
 
       $type.get_added()
+      $type.get_changed()
       $type.get_deprecated()
       $type.get_docstring()
       $type.get_breakdown()
diff --git a/tools/specparser.py b/tools/specparser.py
index 810a180..0c40c8a 100644
--- a/tools/specparser.py
+++ b/tools/specparser.py
@@ -83,6 +83,8 @@ class Base(object):
         except IndexError:
             self.deprecated = None
 
+        self.changed = getChildrenByName(dom, XMLNS_TP, 'changed')
+
     def get_type_name(self):
         return self.__class__.__name__
 
@@ -98,54 +100,43 @@ class Base(object):
     def get_url(self):
         return "%s#%s" % (self.get_interface().get_url(), self.name)
 
-    def get_added(self):
-        if self.added is None:
+    def _get_generic_with_ver(self, nnode, htmlclass, txt):
+        if nnode is None:
             return ''
         else:
             # make a copy of this node, turn it into a HTML <div> tag
-            node = self.added.cloneNode(True)
+            node = nnode.cloneNode(True)
             node.tagName = 'div'
             node.baseURI = None
-            node.setAttribute('class', 'added')
+            node.setAttribute('class', htmlclass)
 
             try:
                 node.removeAttribute('version')
 
                 span = xml.dom.minidom.parseString(
-                    '<span class="version">Added in %s.\n</span>' %
-                            self.added.getAttribute('version')).firstChild
+                    ('<span class="version">%s\n</span>' % txt) %
+                            nnode.getAttribute('version')).firstChild
                 node.insertBefore(span, node.firstChild)
             except xml.dom.NotFoundErr:
                 print >> sys.stderr, \
-                    'WARNING: %s was added, but gives no version' % self
+                    'WARNING: %s was %s, but gives no version' % (self, htmlclass)
 
             self._convert_to_html(node)
 
             return node.toxml().encode('ascii', 'xmlcharrefreplace')
 
-    def get_deprecated(self):
-        if self.deprecated is None:
-            return ''
-        else:
-            # make a copy of this node, turn it into a HTML <div> tag
-            node = self.deprecated.cloneNode(True)
-            node.tagName = 'div'
-            node.baseURI = None
-            node.setAttribute('class', 'deprecated')
-            try:
-                node.removeAttribute('version')
-
-                span = xml.dom.minidom.parseString(
-                    '<span class="version">Deprecated since %s.\n</span>' %
-                            self.deprecated.getAttribute('version')).firstChild
-                node.insertBefore(span, node.firstChild)
-            except xml.dom.NotFoundErr:
-                print >> sys.stderr, \
-                    'WARNING: %s is deprecated, but gives no version' % self
+    def get_added(self):
+        return self._get_generic_with_ver(self.added, 'added',
+                                          "Added in %s.")
 
-            self._convert_to_html(node)
+    def get_deprecated(self):
+        return self._get_generic_with_ver(self.deprecated, 'deprecated',
+                                          "Deprecated since %s.")
 
-            return node.toxml().encode('ascii', 'xmlcharrefreplace')
+    def get_changed(self):
+        return '\n'.join(map(lambda n:
+            self._get_generic_with_ver(n, 'changed', "Changed in %s."),
+            self.changed))
 
     def get_docstring(self):
         """Get the docstring for this node, but do node substitution to
-- 
1.5.6.5




More information about the telepathy-commits mailing list