summaryrefslogtreecommitdiff
path: root/sandbox/tibs/pysource/group-notes.txt
diff options
context:
space:
mode:
Diffstat (limited to 'sandbox/tibs/pysource/group-notes.txt')
-rw-r--r--sandbox/tibs/pysource/group-notes.txt220
1 files changed, 0 insertions, 220 deletions
diff --git a/sandbox/tibs/pysource/group-notes.txt b/sandbox/tibs/pysource/group-notes.txt
deleted file mode 100644
index 6c3f281f9..000000000
--- a/sandbox/tibs/pysource/group-notes.txt
+++ /dev/null
@@ -1,220 +0,0 @@
-Adding <group>, losing <package_section> and their ilk
-======================================================
-
-:Author: Tibs
-:Date: 2001-11-18
-
-Background
-----------
-I am currently writing software that will take information from
-Python source files, produce a DPS node tree therefrom, and allow
-the user to generate HTML from that.
-
-My initial implementation produced a *variant* of the DPS node
-tree, which contained many structures that related closely to the
-information derived from Python - for instance, something like::
-
- <py_class name="Fred">
- <docstring>
- This is a very silly class.
- <py_attr_list>
- <py_attr name="jim">
- <py_method "name="method">
-
-For various reasons, the (implicit) DTD wasn't shaping up very
-like that proposed by David Goodger, so I asked about the
-possibility of amending the "standard" DTD. This led to a
-discussion of how the flow of information through a DPS processor
-should actually work, with the result being David's diagram
-[#diagram]_::
-
- +--------+ +--------+ +------------+ +--------+
- | READER | --> | linker | --> | transforms | --> | WRITER |
- +--------+ +--------+ +------------+ +--------+
- | TOC, index, |
- | etc. (optional) |
- +--------+ +--------+
- | PARSER | | filer |
- +--------+ +--------+
-
-David also made the point that, within this plan, the result of
-the ``linker`` phase is a normal DPS tree, which can be
-transformed with any of the "standard" transformation tools (for
-instance, to resolve automatic footnotes), and then output with
-any writer.
-
-Whilst David's diagram is not *quite* how I see the process, it's
-close enough for this purpose. Thus pydps [#pydps]_ might be shown
-as::
-
- +--------+ +--------------+ +------------+ +---------+
- | READER | --> | transform.py | --> | transforms | --> | html.py |
- +--------+ +--------------+ +------------+ +---------+
- | |
- +----------+ +---------------+
- | visit.py | | buildhtml.py |
- +----------+ +---------------+
-
-The "READER" is implicit in the main utility (currently
-``pydps.py``), and locates the relevant Python files. It then
-uses ``visit.py`` to generate a tree representing the Python code
-(the Python ``compiler`` module, standard with Python 2.2 and
-above, but in ``Tools`` before that, is used).
-
-``transform.py`` (which, by David's diagrams, should maybe be
-called ``link``) transforms that information into a proper DPS
-node tree. At the time of writing, no transformations are done.
-
-Finally, HTML is output from the DPS node tree by ``html.py``.
-
-So, in summary:
-
- 1. ``transform.py`` generates a *normal* DPS tree. It doesn't
- use any "odd" nodes (except <group> - but we'll discuss
- that later on). This means that it should be possible to
- plug in any other writer, and produce a different format as
- output - a very significant advantage.
-
- 2. ``html.py`` expects to be given a *normal* DPS tree. This
- means that it should be usable by any other utility that
- also provides a normal DPS tree - again an advantage.
-
-The problem
------------
-But there is a clash in requirements here. Whilst it is very nice
-to be able to represent the Python information as "normal" DPS
-(guaranteeing that anyone can do useful things with it), there is
-some need to transfer information that goes beyond that. There
-are two main reasons for wanting to do this:
-
- * Data mining
- * Presentation
-
-For the first, although DPS/reST/pydps is primarily about
-producing human-viewable documentation, it might also be nice to
-be able to extract parts of it automatically, for various
-purposes - for instance, retrieve just the information about
-which classes inherit from other. This information will, in part,
-be obvious from the text chosen within the document (a title like
-"Class Fred" might be taken to be useful, for instance!), but it
-would be nice to give a bit more help.
-
-For the second, it's relatively difficult to produce better
-layout for DPS Python documentation without more information to
-work on. If one uses the (rather garish) default presentation
-produced by pydps (and no, I'm not saying that's a *nice*
-presentation, but it is the one I've got as an example), it is
-clearly useful to be able to:
-
- 1. group together the package/class/method/etc title and its
- full name/path/whatever
-
- 2. group together a method or function's signature and its
- docstring
-
-David's original approach to this was to introduce a host of
-Python specific tags into ``nodes.py`` [#nodes]_ - for instance::
-
- package_section
- module_section
- ...
- instance_attribute_section
- ...
- parameter_item
- parameter_tuple
- ...
- package
- module
- class_attribute
-
-There are several problems with approach. Perhaps the most
-serious is that *all* generic DPS writers need to understand
-this host of elements that are only relevant to Python. Clearly,
-someone writing a writer for other purposes may be reluctant to
-go to this (to them) redundant effort.
-
-From my point of view, an immediate problem is that the set of
-elements is not *quite* what I want - which means working towards
-a set of patches for ``nodes.py`` and the relevant DTD, and
-getting David to agree to them (well, that last is a useful
-process to have in place, but still). Since I'm not likely to get
-it right immediately, this is a repetitive process.
-
-Lastly, one might imagine someone from another programming
-language domain adopting DPS/reST. One can expect them to be
-frustrated if the set of constructs provided for Python doesn't
-quite match the set of constructs required to describe their
-language in a natural manner.
-
-Luckily (!), I have a counter proposal, which hopefully keeps the
-baby and just loses the bath water.
-
-Groups and "style"
-------------------
-The first thing that I realised was that, for convenience of
-output at least, I wanted to be able to group elements together -
-or, in terms of the DPS tree, insert an arbitrary "subroot"
-within the tree to 'abstract' a branch of the tree.
-
-This is particularly useful for linking together the parts of the
-text that deal with (for instance) attribution, or unusual
-globals, without having to embed yet another section.
-
-There is, of course, precedent. HTML provides <div> and <span> -
-one for "structural" elements, and one for inline elements (I
-forget which is which), and TeX and LaTeX are well-known for
-their use of grouping (e.g., the ``\begin{xxx}`` and
-``\end{xxx}`` in LaTeX).
-
-I don't consider it worth making the <div>/<span> distinction in
-the context of a tree - it is perfectly evident what is beingp
-grouped from the elements themselves.
-
-Once one has a <group> element, it is natural to annotate it with
-*what* it is a group of/for. I chose the arbitrary term "style" -
-partly because it is not used in HTML/XML for any purpose I am
-aware of.
-
-And once one has the "style" attribute, it becomes possible to
-use it elsewhere - most notably in <section> elements, saving the
-need for a myriad of different sections for different purposes.
-
-In these instances, it is perhaps acting more like the "class"
-attribute in HTML - indicating, to some extent, meaning, but
-aimed mostly at presentation (via CSS).
-
-The other obvious place to use it is in the automatically
-generated text for things like names, where (at least
-pre-"combing"/transformation) one is "pretending" to have
-assigned a role (just as a person might in a docstring) (but see
-[#style]_).
-
-Summary
--------
-Current DPS defines many element types for use in Python code
-representation.
-
-However, there are major advantages in only using the "simple"
-DPS nodes for all purposes.
-
-This becomes simple and practical given a single extra, general
-purpose, element: <group>.
-
-Furthermore, adding a standard attribute called "style" (or
-perhaps "role" - see [#style]_) seems to fulfil any other
-outstanding requirements.
-
-References
-----------
-.. [#diagram] in email by David Goodger to Doc-SIG, dated
- 21 September 2001 04:31, "Re: [Doc-SIG] DPS components".
-
-.. [#style] Hmm - maybe "style" should be "role", to match
- with the way that a ``:role:`of something``` gets handled...
-
-.. [#pydps] Normally to be found at
- http://www.tibsnjoan.co.uk/reST/pydps.tgz,
- although note that this is not currently up-to-date.
-
-.. [#nodes] dps/dps/nodes.py in the DPS distribution
- (``dps.nodes`` if one is importing it).