[Telepathy-commits] [telepathy-spec/master] Support tp:dbus-ref etc in tp:added and tp:deprecated

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


---
 doc/templates/errors.html        |    4 +-
 doc/templates/generic-types.html |    4 +-
 doc/templates/interface.html     |   36 +++++-----
 tools/specparser.py              |  143 +++++++++++++++++++++++---------------
 4 files changed, 108 insertions(+), 79 deletions(-)

diff --git a/doc/templates/errors.html b/doc/templates/errors.html
index 4acf1c9..944e8c3 100644
--- a/doc/templates/errors.html
+++ b/doc/templates/errors.html
@@ -23,8 +23,8 @@
        $error.short_name
       </h2>
 
-      $error.get_added_html()
-      $error.get_deprecated_html()
+      $error.get_added()
+      $error.get_deprecated()
       $error.get_docstring()
      </div>
     #end for
diff --git a/doc/templates/generic-types.html b/doc/templates/generic-types.html
index 476b8ab..2911c87 100644
--- a/doc/templates/generic-types.html
+++ b/doc/templates/generic-types.html
@@ -23,8 +23,8 @@
        $type.short_name &mdash; $type.dbus_type
       </h2>
 
-      $type.get_added_html()
-      $type.get_deprecated_html()
+      $type.get_added()
+      $type.get_deprecated()
       $type.get_docstring()
       $type.get_breakdown()
      </div>
diff --git a/doc/templates/interface.html b/doc/templates/interface.html
index 4b275e6..d63b5b8 100644
--- a/doc/templates/interface.html
+++ b/doc/templates/interface.html
@@ -82,8 +82,8 @@
     in libraries that care about compatibility.
    </div>
    #end if
-   $interface.get_added_html()
-   $interface.get_deprecated_html()
+   $interface.get_added()
+   $interface.get_deprecated()
 
    #if $interface.requires
    <div class="requires">
@@ -112,8 +112,8 @@
      <span class="permalink">(<a href="$method.get_url()">Permalink</a>)</span>
      <h2>$method.short_name ($method.get_in_args()) &#8594; $method.get_out_args()</h2>
 
-     $method.get_added_html()
-     $method.get_deprecated_html()
+     $method.get_added()
+     $method.get_deprecated()
 
      #if $method.in_args
      <div class="indent">
@@ -124,8 +124,8 @@
         $arg.short_name &mdash; $arg.dbus_type
         #if $arg.get_type(): (<a href="$arg.get_url()" title="$arg.get_title()">$arg.get_type().short_name</a>)
        </li>
-       $arg.get_added_html()
-       $arg.get_deprecated_html()
+       $arg.get_added()
+       $arg.get_deprecated()
        $arg.get_docstring()
       #end for
       </ul>
@@ -141,8 +141,8 @@
         $arg.short_name &mdash; $arg.dbus_type
         #if $arg.get_type(): (<a href="$arg.get_url()" title="$arg.get_title()">$arg.get_type().short_name</a>)
        </li>
-       $arg.get_added_html()
-       $arg.get_deprecated_html()
+       $arg.get_added()
+       $arg.get_deprecated()
        $arg.get_docstring()
       #end for
       </ul>
@@ -155,8 +155,8 @@
       <ul>
       #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_html()
-       $error.get_deprecated_html()
+       $error.get_added()
+       $error.get_deprecated()
        $error.get_docstring()
       #end for
       </ul>
@@ -179,8 +179,8 @@
      <span class="permalink">(<a href="$signal.get_url()">Permalink</a>)</span>
      <h2>$signal.short_name ($signal.get_args())</h2>
 
-     $signal.get_added_html()
-     $signal.get_deprecated_html()
+     $signal.get_added()
+     $signal.get_deprecated()
 
      #if $signal.args
      <div class="indent">
@@ -191,8 +191,8 @@
        $arg.short_name &mdash; $arg.dbus_type
        #if $arg.get_type(): (<a href="$arg.get_url()" title="$arg.get_title()">$arg.get_type().short_name</a>)
        </li>
-       $arg.get_added_html()
-       $arg.get_deprecated_html()
+       $arg.get_added()
+       $arg.get_deprecated()
        $arg.get_docstring()
       #end for
       </ul>
@@ -222,8 +222,8 @@
      </h2>
       <div class="access">$property.get_access()</div>
 
-     $property.get_added_html()
-     $property.get_deprecated_html()
+     $property.get_added()
+     $property.get_deprecated()
      $property.get_docstring()
     </div>
     #end for
@@ -242,8 +242,8 @@
        $type.short_name &mdash; $type.dbus_type
       </h2>
 
-      $type.get_added_html()
-      $type.get_deprecated_html()
+      $type.get_added()
+      $type.get_deprecated()
       $type.get_docstring()
       $type.get_breakdown()
      </div>
diff --git a/tools/specparser.py b/tools/specparser.py
index 6a2f184..b41a3d7 100644
--- a/tools/specparser.py
+++ b/tools/specparser.py
@@ -92,28 +92,53 @@ class base (object):
         return "%s#%s" % (self.get_interface ().get_url (), self.name)
 
     def get_added (self):
-        if self.added:
-            return (self.added.getAttribute ('version'), getText (self.added))
-        else:
+        if self.added is None:
             return ''
-
-    def get_deprecated (self):
-        if self.deprecated:
-            return (self.deprecated.getAttribute ('version'), getText (self.deprecated))
         else:
-            return ''
+            # make a copy of this node, turn it into a HTML <div> tag
+            node = self.added.cloneNode (True)
+            node.tagName = 'div'
+            node.baseURI = None
+            node.setAttribute ('class', 'added')
 
-    def get_added_html (self):
-        if self.added:
-            return '<div class="added"><span class="version">Added in %s.</span>\n%s</div>' % self.get_added ()
-        else:
+            try:
+                node.removeAttribute ('version')
+
+                span = xml.dom.minidom.parseString (
+                    '<span class="version">Added in %s.\n</span>' %
+                            self.added.getAttribute ('version')).firstChild
+                node.insertBefore (span, node.firstChild)
+            except xml.dom.NotFoundErr:
+                print >> sys.stderr, \
+                    'WARNING: %s was added, but gives no version' % self
+
+            self._convert_to_html (node)
+
+            return node.toxml ().encode ('ascii', 'xmlcharrefreplace')
+
+    def get_deprecated (self):
+        if self.deprecated is None:
             return ''
-    
-    def get_deprecated_html (self):
-        if self.deprecated:
-            return '<div class="deprecated"><span class="version">Deprecated in %s.</span>\n%s</div>' % self.get_deprecated ()
         else:
-            return ''
+            # 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
+
+            self._convert_to_html (node)
+
+            return node.toxml ().encode ('ascii', 'xmlcharrefreplace')
 
     def get_docstring (self):
         """Get the docstring for this node, but do node substitution to
@@ -128,48 +153,52 @@ class base (object):
             node.baseURI = None
             node.setAttribute ('class', 'docstring')
 
-            # rewrite <tp:rationale>
-            for n in node.getElementsByTagNameNS (XMLNS_TP, 'rationale'):
-                n.tagName = 'div'
-                n.namespaceURI = None
-                n.setAttribute ('class', 'rationale')
-
-            # rewrite <tp:member-ref>
-            spec = self.get_spec ()
-            namespace = self.get_root_namespace ()
-            for n in node.getElementsByTagNameNS (XMLNS_TP, 'member-ref'):
-                key = getText (n)
-                try:
-                    o = spec.lookup (key, namespace = namespace)
-                except KeyError:
-                    print >> sys.stderr, \
-                        "Key `%s' not known in namespace `%s'" % (
-                            key, namespace)
-                    continue
-
-                n.tagName = 'a'
-                n.namespaceURI = None
-                n.setAttribute ('href', o.get_url ())
-                n.setAttribute ('title', o.get_title ())
-
-            # rewrite <tp:dbus-ref>
-            for n in node.getElementsByTagNameNS (XMLNS_TP, 'dbus-ref'):
-                namespace = n.getAttribute ('namespace')
-                key = getText (n)
-                try:
-                    o = spec.lookup (key, namespace = namespace)
-                except KeyError:
-                    print >> sys.stderr, \
-                        "Key `%s' not known in namespace `%s'" % (
-                            key, namespace)
-                    continue
-
-                n.tagName = 'a'
-                n.namespaceURI = None
-                n.setAttribute ('href', o.get_url ())
-                n.setAttribute ('title', o.get_title ())
+            self._convert_to_html (node)
 
             return node.toxml ().encode ('ascii', 'xmlcharrefreplace')
+    
+    def _convert_to_html (self, node):
+
+        # rewrite <tp:rationale>
+        for n in node.getElementsByTagNameNS (XMLNS_TP, 'rationale'):
+            n.tagName = 'div'
+            n.namespaceURI = None
+            n.setAttribute ('class', 'rationale')
+    
+        # rewrite <tp:member-ref>
+        spec = self.get_spec ()
+        namespace = self.get_root_namespace ()
+        for n in node.getElementsByTagNameNS (XMLNS_TP, 'member-ref'):
+            key = getText (n)
+            try:
+                o = spec.lookup (key, namespace = namespace)
+            except KeyError:
+                print >> sys.stderr, \
+                    "Key `%s' not known in namespace `%s'" % (
+                        key, namespace)
+                continue
+    
+            n.tagName = 'a'
+            n.namespaceURI = None
+            n.setAttribute ('href', o.get_url ())
+            n.setAttribute ('title', o.get_title ())
+    
+        # rewrite <tp:dbus-ref>
+        for n in node.getElementsByTagNameNS (XMLNS_TP, 'dbus-ref'):
+            namespace = n.getAttribute ('namespace')
+            key = getText (n)
+            try:
+                o = spec.lookup (key, namespace = namespace)
+            except KeyError:
+                print >> sys.stderr, \
+                    "Key `%s' not known in namespace `%s'" % (
+                        key, namespace)
+                continue
+    
+            n.tagName = 'a'
+            n.namespaceURI = None
+            n.setAttribute ('href', o.get_url ())
+            n.setAttribute ('title', o.get_title ())
 
     def get_title (self):
         return '%s %s' % (self.__class__.__name__, self.name)
-- 
1.5.6.5




More information about the telepathy-commits mailing list