[libvirt] [PATCH] Fix API doc extractor to stop munging comment formatting
Daniel P. Berrange
berrange at redhat.com
Fri Sep 25 13:42:47 UTC 2009
On Fri, Sep 25, 2009 at 03:33:41PM +0200, Daniel Veillard wrote:
> On Fri, Sep 25, 2009 at 01:28:51PM +0100, Daniel P. Berrange wrote:
> > The python method help docs are copied across from the C
> > funtion comments, but in the process all line breaks and
> > indentation was being lost. This made the resulting text
> > and code examples completely unreadable. Both the API
> > doc extractor and the python generator were destroying
> > whitespace & this fixes them to preserve it exactly.
> >
> > * docs/apibuild.py: Preserve all whitespace when extracting
> > function comments. Print function comment inside a <![CDATA[
> > section to fully preserve all whitespace. Look for the
> > word 'returns' to describe return values, instead of 'return'
> > to avoid getting confused with code examples including the
> > C 'return' statement.
> > * python/generator.py: Preserve all whitespace when printing
> > function help docs
> > * src/libvirt.c: Change any return parameter indicated by
> > 'return' to be 'returns', to avoid confusing the API extractor
> [...]
> > if desc != None and desc != "":
> > - output.write(" <info>%s</info>\n" % (escape(desc)))
> > + output.write(" <info><![CDATA[%s]]></info>\n" % (desc))
>
> Ah, okay you're using CDATA !
>
> > self.indexString(name, desc)
> > for arg in args:
> > (name, desc) = arg
> > @@ -1760,7 +1771,7 @@ class docBuilder:
> > try:
> > desc = id.extra
> > if desc != None and desc != "":
> > - output.write(">\n <info>%s</info>\n" % (escape(desc)))
> > + output.write(">\n <info><![CDATA[%s]]></info>\n" % (desc))
> > output.write(" </typedef>\n")
> > else:
> > output.write("/>\n")
> > @@ -1796,7 +1807,7 @@ class docBuilder:
> > output.write(" <cond>%s</cond>\n"% (apstr));
> > try:
> > (ret, params, desc) = id.info
> > - output.write(" <info>%s</info>\n" % (escape(desc)))
> > + output.write(" <info><![CDATA[%s]]></info>\n" % (desc))
> > self.indexString(name, desc)
> > if ret[0] != None:
> > if ret[0] == "void":
> > diff --git a/python/generator.py b/python/generator.py
> > index c34cb34..178a415 100755
> > --- a/python/generator.py
> > +++ b/python/generator.py
> > @@ -44,6 +44,7 @@ if sgmlop:
> > self.finish_starttag = target.start
> > self.finish_endtag = target.end
> > self.handle_data = target.data
> > + self.handle_cdata = target.cdata
> >
> > # activate parser
> > self.parser = sgmlop.XMLParser()
> > @@ -78,6 +79,7 @@ class SlowParser(xmllib.XMLParser):
> > def __init__(self, target):
> > self.unknown_starttag = target.start
> > self.handle_data = target.data
> > + self.handle_cdata = target.cdata
> > self.unknown_endtag = target.end
> > xmllib.XMLParser.__init__(self)
> >
> > @@ -108,6 +110,11 @@ class docParser:
> > print "data %s" % text
> > self._data.append(text)
> >
> > + def cdata(self, text):
> > + if debug:
> > + print "data %s" % text
> > + self._data.append(text)
> > +
> > def start(self, tag, attrs):
>
> Okay makes sense, plus the large amount of return -> Returns changes
>
> ACK !
>
> I'm still waiting to see what this gives in the HTML docs :-)
Hmm, I didn't check that yet, but I guess it shouldn't make any
difference, since the HTML will still collapse the whitespace
as before - we'd need to insert real <p> breaks & use <pre>
during generation of the HTML if we wanted to maintain any kind
of sane formatting
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list