[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 — $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()) → $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 — $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 — $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 — $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 — $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