[darcs-users] Separating the user manual and code

Max Battcher me at worldmaker.net
Fri Oct 24 03:55:46 UTC 2008

Trent W. Buck wrote:
> It sounds like you're pretty familiar with Sphinx.  I've only used
> plain reST and every time I look at the Sphinx documentation, I get
> overwhelmed by the API documentation features, which aren't relevant to
> a user manual.  What really interested me about Sphinx is the potential
> to avoid the problems plain reST has with large documents --
> particularly handling multiple source files, cross-referencing,
> appendices and lists of figures.

Interesting...  Sphinx's aim is not to be an API documentation tool 
(although it has extensions to do that, because it almost has to due to 
Python auto-API documentation tools being something like a dime a 
dozen).  Perhaps what is throwing you off is the idea that Sphinx uses 
API-based "buckets" for cross-references.  The idea is _not_ to focus on 
writing API documentation, but that API things are commonly related to 
user concepts.

I would say it's something of the opposite, but perhaps more useful, 
approach from the literate haskell: the literate haskell seeks to embed 
the documentation in the context of the source code and the Sphinx 
technique is generally to embed ties to the source code in the context 
of the user documentation.  Some of that comes from the Python-world 
fact that often user interface and API are cross-bound, but I don't see 
it being entirely useless to darcs.

For an example of the Sphinx approach here:

You can mark any section of the documentation, maybe its a page, maybe 
its a just a paragraph, as "having something to do with the module 
Darcs.Internal.Wobbly"...  It doesn't have to be haddock-style API 
documentation and in fact philosophically Sphinx frowns on that in user 
documentation (while providing tools to do auto-API documentation for 
developer documentation).  A user reading through the manual (module 
directives don't have much output markup) may not notice that they are 
reading about anything related to a particular code module, but that tag 
(directive) becomes useful when someone is searching the module index 
wondering something like "what is the user need/impact of 
Darcs.Internal.Wobbly" in the user documentation.  It also serves as an 
easy and semantic cross-reference to write in other areas 
:module:`~Darcs.Internal.Wobbly` (the tilde elides the Darcs.Internal, 
outputting only Wobbly in the hyperlink) and when someone is reading it 
in ASCII form they get some information on what the link has to do with 
(referencing a module).

So like I said, it can be somewhat usefully the opposite of the current 
literate haskell approach...  rather than focus on recording the user 
impact in the source, it can be useful to record the code impact on the 
user documentation.

> Do you know of an example document (particularly the source) that
> demonstrates these features in sphinx, so I can get the hang of them?
> It doesn't have to be a Darcs mockup -- some other project's user
> documentation would do.

I mentioned it in a previous post, but I've got Sphinx-based 
documentation for my "Darcsforge" project:


The source code for each page is linked in the sidebar of the HTML 
output, or you could:

darcs get http://repos.worldmaker.net/darcsforge/main/

The documentation is under ./docs and if you install Sphinx you can 
build it yourself with a simple make html.  There's only one page there 
I consider "API documentation", even though most of my cross-references 
fall into the "API buckets".

I think that the Python and Django documentation sites are decent 
examples as well, although perhaps not "better" because both are 
frameworks where arguably the user documentation still looks like API 

I could trawl through the other Projects that use Sphinx and try to find 
better examples...  http://sphinx.pocoo.org/examples.html

Well, this email got larger than I intended, hopefully there are 
interesting seeds here,

--Max Battcher--

More information about the darcs-users mailing list