I'm a bit tired right now, so not everything I write might make all that much sense.
I could use very much help getting all those documentation strings done. Most likely it would be even worse for someone else, but going through the undocumented functions and asking for important details would be very much appreciated. I guess that would have to be done elsewhere and at another time. If you think you could find time for that write a PM.
Furthermore I would like to know on which Common Lisp environments this runs and on which platforms. I am programming on Linux and SBCL. It would be very nice to know whether my code actually runs elsewhere, too.
A UI is needed. I thought of using McClim and I'll have to learn that, but I would like to focus on the inner workings first. Hacking something together so more people would be willing to try out the editor would be nice.
Then there is the issue of scope - although it's not so very important to me, as I'm not dependent on the success of what I am doing here, there is some quite developed competition (Leo, org-mode/babel). So far MindMaDE's supposed strength should be the scripts to convert mindmaps into any imaginable format.
Currently I am going for the following: Any script is invoked on a single node, converts and registers the node (so it won't convert the same node more than once). It combines the data from converting the node from calling scripts on all nodes reachable in one step. What script is called is dependent on the edge type leading to the node and the node type. I need to know whether this approach sounds reasonable and what additional functionality might be considered useful.
Currently converting a node and filtering reachable nodes by weight, edge type and node type is implemented.
Converting a node is done via the stuff in field-collector.lisp. First there is the class FIELD-COLLECTOR, that describes how a field is combined with the collection of previously converted fields. CALL-FIELD-COLLECTOR actually converts a node via the information of FIELD-COLLECTOR. I made sure that fields are always collected in the order specified when making the field collector and since any field is present only once in any node there is no ambiguity with that.
Next is collecting nodes. This consists (with the framework as I currently have it in mind) of two steps:
1. Collect the data from the reachable nodes.
2. Combine those data with the data collected from the source node.
The first part works just like the field collector, with a field collector specified for any desired combination of edge types, edge weights and node types. As there can be multiple target nodes there has to be an option for the user to specify and ordering relation.
The second part could be defined directly in a SCRIPT class, so that this defines how source node data and target node collection are combined.
Note, that collecting nodes and fields currently has the full power of Common Lisp, so you can write to files, compile stuff and do all kinds of other fancy things but this also means that you have to learn Common Lisp before you can write scripts to export your maps.
I don't see any problems with that concept, but I might miss something. Any obvious or less obvious holes? An easier solution? What convenience functions might be helpful?
Oh, and also: Thanks for your help, it is very much appreciated.