Steps neccessary to add a generator. XXX refers to the output format you want to implement.
src/generator/XXX.h:
     #include "../gnuclad.h"
     derive class from generator:
       class GeneratorXXX: public Generator
     declare constructor and destructor
     declare public method:
       void writeData(Cladogram * clad, OutputFile & out);
   src/generator/XXX.cpp:
     #include "XXX.h"
     implement constructor and destructor
     implement writeData(Cladogram * clad, OutputFile & out) { ... }
   src/gnuclad.cpp:
     #include "generator/XXX.h"
     update outFormats
     add choser:
       else if(outputExt == "XXX") generator = new GeneratorXXX;
   src/Makefile.am:
add to SOURCES: generator/XXX.h generator/XXX.cpp
Your generator is called only by this function:
generator->writeData(Cladogram * clad, OutputFile & out);
Therefore it should implement the following one:
       void generatorXXX::writeData(Cladogram * clad, OutputFile & out) { ... }
   The OutputFile object holds a correctly opened output file. It also holds the file name in case your generator needs it. You can use the object like this:
       ofstream * fp = out.p;
       // or
       ofstream & f = *(out.p);
       // or
       ofstream myfp(out.name);
   You should try to utilise as much information from the Cladogram as possible. This can be done by iterating over its data vectors:
     vector<Node *> nodes
     vector<Connector *> connectors
     vector<Domain *> domains
     vector<Image *> includeSVG
     vector<Image *> includePNG
   Additionally, you should strive to make use of all configuration options the Cladogram contains.
If a variable is empty, try to handle it as gracefully as possible. All measures (height, thickness, ...) are "generic units".
Example:
     #include "../gnuclad.h"
     #include "generatorXXX.h"
     #include <iostream>
     void generatorXXX::writeData(Cladogram * clad, OutputFile & out) {
     
       Node * n;
       for(int i = 0; i < (int)clad->nodes.size(); ++i) {
     
         n = clad->nodes[i];
         std::cout << "\nWe have " << n->name
                   << " at offset " << n->offset;
     
       }
     
       std::cout << "\n\nOur end of time is "
                 << Date2str(clad->endOfTime) << "\n";
     
       std::cout << "\n\nOur background color (in hex) is "
                 << clad->mainBackground.hex << "\n";
     
     }