comp.lang.ada
 help / color / mirror / Atom feed
From: Nick Roberts <nick.roberts@acm.org>
Subject: Literate Programming in Ada, AdaDoc, AdaBrowse
Date: Sat, 09 Oct 2004 18:44:43 +0100
Date: 2004-10-09T18:44:43+01:00	[thread overview]
Message-ID: <2sqmccF1oit5sU1@uni-berlin.de> (raw)

Time for the latest hairbrained scheme from your uncle Nicky.

I've been struggling with the question of how best to do the documentation 
accompanying open source Ada projects. It is especially important that the 
maintenance (as well as user) documentation is present, usable, and itself 
continuously maintainable, for this kind of project.

I've tinkered with DocBook, Texinfo, and other systems (even trying to 
invent one of my own). I've attempted to add 'literate programming' 
functionality to these systems.

Literate programming is a fancy way of documenting source code. The basic 
idea is that you break up the source code into fragments, and intersperse 
appropriate documentation with the fragments. The fragments can be 
reordered, and referentially contain other fragments (to form a hierarchy). 
This technique is capable of producing superbly documentated source code, 
since you can introduce concepts in the order which best fits explication, 
and show just the source code that needs to be described as you go along.

However, LP has problems. The classic mechanism requires that orignal 
program and document source text be intermixed in a single or set of 
physical text files, called 'web' files (nothing to do with the WWW). A 
'tangle' tool must be run to generate the actual source code files (which 
can be submitted to the compiler). This adds a new step, potentially a big 
and slow one, to the program development cycle. An alternate approach has 
been the idea of a mechanism to update the web files from changes made 
directly in the source code files, but this technique does not seem to have 
got very far.

Up to now, I've been opposed to the idea of putting the main (maintenance) 
documentation directly into the Ada source files (particularly the package 
specifications), on the grounds that this prevents the use of existing 
document preparation systems.

However, I'm now coming around to the idea. My latest hairbrained scheme is 
to write a program that will do a little bit of work reformatting comments 
in an Ada source file. I'm fairly sure it's not an original idea, but I 
cannot actually find references (on the WWW) to such a tool. Can emacs Ada 
Mode do something like this? My favourite editor is PFE (for Windows). It 
has a limited macro capability, but it's too limited for something like this.

Besides which, different people have differrent editors and document 
preparation systems (as a matter of availability or choice), and so an open 
source project ideally needs to be as agnostic on these things as possible.

So I propose to write a simple Ada program that will perform the following 
transformations on an Ada source file:

* If a line begins with "-- " (not indented), it and any immediately 
following non-blank lines are word-filled. Before word-filling, any "-- " 
at the beginning of a line is removed. After word-filling, every output 
line is prefixed by "-- ". Words are simply delimited by whitespace 
(there's no hyphenation or other fancy stuff).

* If a line begins with "--+", the remainder of the line is taken to be a 
pathname of a text file, whose contents are read. All following lines up to 
(but not including) a line beginning with "---" are deleted. The lines read 
from the text file are inserted, after having macro substitutions performed 
(as described next).

* Any occurrance of "${" followed by a name-string and then "}" is replaced 
by another string according to the name-string, iff the name-string is 
recognised.

Recognised name-strings are:

* "LINE", which is replaced by the current line number in the source file;

* "FILE", which is replaced by the full pathname of the source file;

* "DATE", which is replaced by the current date and time.

I also propose writing another quite simple Ada program which will generate 
an HTML rendition of an Ada source file. Features that could be 
incrementally added to this program could be:

* colour-code the Ada source text (highlighting reserved words, literals, 
etc.);

* simple formatting of the text in unindented comments (e.g. embolden 
!never!, italicise /always/, <code>-tag text between {} braces, etc.);

* index the identifiers, including identifiers within braces within 
unindented comments.

Also being able to generate an Texinfo rendition might be very handy, as 
well as XML (DocBook), TeX, or other formats.

These ideas lead us to the existing AdaDoc and AdaBrowse projects, both 
hosted on SourceForge. These seem to be very relevant to what I'm trying to 
achieve. However: development on AdaDoc seems to have stopped (since 2002); 
AdaBrowse relies on ASIS.

AdaDoc is written substantially in French (by Frenchmen). I don't 
personally have any objection to developing software in French, but it 
might seem less than ideal to some people. (Does it?) Is AdaDoc a dead project?

There are two reasons why I have an objection to the use of ASIS: AdaBrowse 
cannot be used on a source file which cannot be compiled (e.g. because it 
is still in an early state of development, or it has an unresolved error in 
it); a compiler which supports ASIS must be available. It does seem almost 
like using a sledgehammer to crack a nut.

Comments welcome.

-- 
Nick Roberts



             reply	other threads:[~2004-10-09 17:44 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-09 17:44 Nick Roberts [this message]
2004-10-09 18:39 ` Literate Programming in Ada, AdaDoc, AdaBrowse Wes Groleau
2004-10-09 21:04   ` Nick Roberts
2004-10-09 21:39     ` stephane richard
2004-10-09 23:40     ` Wes Groleau
2004-10-10 16:39     ` Simon Wright
2004-10-12  0:42       ` Georg Bauhaus
2004-10-11  7:33     ` Ole-Hjalmar Kristensen
2004-10-09 19:21 ` Pascal Obry
2004-10-09 21:47   ` Nick Roberts
2004-10-09 23:20     ` Björn Persson
2004-10-10  8:28       ` Oliver Kellogg
2004-10-10 10:03         ` Björn Persson
2004-10-10 15:27           ` Stephen Leake
2004-10-09 23:49     ` Wes Groleau
2004-10-10 10:36     ` Pascal Obry
2004-10-10 11:26       ` Marius Amado Alves
2004-10-18  8:17         ` Jacob Sparre Andersen
2004-10-18 11:15           ` Marius Amado Alves
2004-10-18 12:46             ` Björn Persson
2004-10-18 15:39               ` Marius Amado Alves
2004-10-18 13:47             ` Jacob Sparre Andersen
2004-10-09 22:54 ` Lionel Draghi
2004-10-09 22:56 ` Björn Persson
2004-10-09 23:55   ` Wes Groleau
2004-10-10  1:02     ` Björn Persson
2004-10-10 14:02       ` Wes Groleau
2004-10-10  3:29 ` Steve
2004-10-10 14:08   ` Wes Groleau
2004-10-10 15:06     ` Steve
2004-10-10 15:20   ` Stephen Leake
     [not found]   ` <rlsfz4jdjuj.fsf@jacob.crs4.it>
2004-10-15 13:33     ` Marius Amado Alves
2004-10-16  1:50     ` Steve
2004-10-16 19:46       ` Jacob Sparre Andersen
2004-10-17  3:46         ` Steve
2004-10-10  8:21 ` Stephane Riviere
2004-10-11 23:02   ` Björn Persson
2004-10-11 23:31     ` Missing features in NaturalAdaBrowseDoc Lionel Draghi
2004-10-12  0:14       ` tmoran
2004-10-12 12:58       ` Marc A. Criley
2004-10-12 21:20         ` Lionel Draghi
2004-10-12 17:49       ` Stephane Riviere
     [not found]         ` <416c48a7$0$28918$636a15ce@news.free.fr>
2004-10-12 21:18           ` Lionel Draghi
2004-10-13 16:38           ` Stephane Riviere
2004-10-14 19:56             ` Lionel Draghi
2004-10-15 16:59               ` Stephane Riviere
2004-10-12 17:29     ` Literate Programming in Ada, AdaDoc, AdaBrowse Stephane Riviere
2004-10-10  9:34 ` Andre
2004-10-10 15:24   ` Stephen Leake
2004-10-10 18:04     ` Andre
2004-10-11 23:32     ` Lionel Draghi
2004-10-12  0:13       ` Björn Persson
2004-10-10 15:13 ` Stephen Leake
2004-10-11 20:28 ` Nick Roberts
2004-10-11 22:26   ` Björn Persson
2004-10-12 14:09     ` Nick Roberts
2004-10-13  5:01       ` Pylinius
2004-10-13 16:06         ` Nick Roberts
2004-10-13 17:17     ` Pascal Obry
2004-10-17 18:47   ` Bernhard Mulder
2004-10-18 18:06     ` Nick Roberts
2004-10-19  4:41       ` Bernhard Mulder
2004-10-19  9:52         ` Peter Hermann
2004-10-19 10:01         ` Nick Roberts
2004-10-23 21:39           ` Bernhard Mulder
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox