Peter Alexander wrote:
> On Fri, Oct 2, 2009 at 4:16 AM, Dag Sverre Seljebotn
> <[email protected]> wrote:
>   
>> Dag Sverre Seljebotn wrote:
>>     
>>> Robert Bradshaw wrote:
>>>
>>>       
>>>> On Oct 1, 2009, at 9:46 PM, Peter Alexander wrote:
>>>>
>>>>
>>>>         
>>>>> ..Now, All examples/snippets should be global, in its own directory,
>>>>> so each documentation can "embed" the example it needs. Hell.. if we
>>>>> were sophisticated one day.. video snippets might also be "embedded"
>>>>> or at least linked to.
>>>>>
>>>>>
>>>>>           
>>>> Does sphinx have the ability to embed external code snippets? I think
>>>> it's important to have actual snippets in the documentation itself,
>>>> ideally with links to 1. entire working program directories (complete
>>>> with build scripts) 2. Annotated (-a html output) versions and 3.
>>>> Sage notebooks (to make it easy to try out and play with while you're
>>>> reading the documentation) and 4. somewhere that we can run
>>>> regression tests on.
>>>>
>>>>
>>>>         
>>> The matplotlib project has very good experience with some exciting stuff
>>> that's kind of related (their entire web page is made with Sphinx). They
>>> wrote a plugin to sphinx for a new code block tag (in the rst file in
>>> the documentation). When encountered, Sphinx a) presents the code as
>>> syntax-highlighted Python, b) executes the code and retrieves the
>>> generated plot and present it.
>>>
>>> By adapting such a plugin for our needs, a special tag can be used to
>>> embed Cython code, which at least syntax-highlights and makes "cython
>>> -a" easily available; perhaps also presents a link to a Sage worksheet
>>> with the code. Automatically benchmarking Cython examples comes to mind
>>> too and would make it easier to write tutorials etc (although that means
>>> documentation must be rebuilt under benchmark conditions (no other load,
>>> always rebuild everything on the same machine) which is a serious drawback).
>>>
>>> The great thing is that everything stays in the ReST documents and is
>>> easily rebuildable.
>>>
>>> An idea for Peter or Minh for now is to at least look into making
>>> :cython:: available as a ReST tag and start using it -- even if it has
>>> no effect currently, that will make it easier to introduce features like
>>> that later on.
>>>
>>> I'll try to dig up the sources for the matplotlib Sphinx extension.
>>>
>>>       
>> I must say I'm really keen on having code snippets embedded into ReST
>> text (and rather automatically exported as files), rather than the other
>> way around. A link to matplotlib's Sphinx extensions:
>>
>> http://matplotlib.svn.sourceforge.net/viewvc/matplotlib/trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py?view=markup
>> http://matplotlib.svn.sourceforge.net/viewvc/matplotlib/trunk/matplotlib/lib/matplotlib/sphinxext/
>>
>>
>> Longwinded example of what could be done.
>>
>> """
>> Simple demo
>> =========
>>
>> .. cython::
>>    :name: example2
>>    :hidden: True
>>
>>    # This stuff is not shown in docs as people's got used to them being
>> there by
>>    # this point in the tutorial. However it ends up in the generated
>> "example2.pyx".
>>    cimport cython
>>    # Other blocks with the same name are appended later.
>>
>> We start with making a function:
>>
>> .. cython::
>>    :name: example 2
>>
>>    def myfunc(x):
>>        return x * 2
>>
>> This is now available from Python:
>>
>> .. pythonshell::
>>    >>> import example2
>>    >>> example2.myfunc(2)
>>
>> .. Note that above we don't need to enter output, that is generated by
>> Sphinx.
>>
>> However, a cdef function is not available:
>>
>> .. cython::
>>    :name: example2
>>
>>    cdef mycdef(x):
>>        return x * 2
>>
>> .. pythonshell::
>>    :continue: True
>>
>>    >>> example2.mycdef(3)
>>
>> """
>>
>> In the end, example2.pyx and setup.py is generated by concatenating the
>> chunks and offered for download.
>> _______________________________________________
>> Cython-dev mailing list
>> [email protected]
>> http://codespeak.net/mailman/listinfo/cython-dev
>>
>>     
>
> Putting my creative hat on...
>
> Would be nice to just be able to toss "chunks" of information into a
> directory pool, that can be automatically structured to a view, by a
> "documentation structure model"?
>
> That way upkeep could be made more simple because all you'd have to
> worry about is tossing in the "chunk".
>
> That's kind of what I mean by an MVC model.
>   
OK, I see where you are coming from. As usual my suggestions are mostly 
with tutorials in mind.

Other projects can do this in a great way by making the docstrings in 
the codebase their chunks. That doesn't *quite* all the time with 
Cython, but I think it could work great in some types of situations.

Experiment:

class WraparoundDirective(CompilerDirective): # in Options.py
    """
    wraparound

    information about the wraparound compiler directive
    """

class ForInStatNode(Node): # In Nodes.py
   """
   Python-style for-loop

   more info
  
   TAGS: pythoncompatible, loops
   """


Some transforms would fit for documenting language features as well:

class ForloopOptimizations(CythonTransform):
    """
    Optimizations done to for-loops:

       - for in range is ...
    """


Then, a pragmatic, non-pure "documentation structure model" could simply 
be ReST documentation with some codes for grabbing the chunks from the 
codebase:

.. docstring:: ForInStatNode

or perhaps

.. docstring-table::
    :subclassesof: CompilerDirective

.. docstring-table::
    :tag: pythoncompatible

Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to