~hf = HelpFile2.new( "HelpFile2.html");
~hf.classname = "HelpFile2";
~hf.shortDescription_( "utility class to create a help file for a class" );
~hf.longDescription_( "This class can be used to create helpfiles for SuperCollider classes. You can create a helpfile fully from the SuperCollider language. The only thing you may want to do afterwards is rearrange the order of the method descriptions. This class creates a readable HTML, so it will be easy to do so.");

~hf.addDescription(\new, "Create an instance of HelpFile2, with the path <em>pathName</em>", \class );

~hf.addDescription(\createInstanceMethods, "creates the instance methods. Is called when the classname is set.");

~hf.addDescription(\createClassMethods, "creates the class methods. Is called when the classname is set.");

~hf.addDescription(\writeInstanceMethods, "writes the instance methods to the file in HTML format. Is called from writeToFile.");

~hf.addDescription(\writeClassMethods, "writes the class methods to the file in HTML format. Is called from writeToFile.");

~hf.addDescription(\writeArgDesc, "writes the class or instance argument descriptions to the file in HTML format. Is called from either writeInstanceMethods or writeClassMethods.");

~hf.addDescription(\classname, "the classname for the current helpfile.");

~hf.addDescription(\classname_, "sets the classname for the current helpfile. This autogenerates the instanceMethods and classMethods.");

~hf.addDescription(\writeToFile,"writes everything to file");

~hf.addDescription(\writeHeader,"writes the header for the helpfile. Called from writeToFile.");

~hf.addDescription(\writeFooter,"writes the footer for the helpfile. Called from writeToFile.");

~hf.addDescription(\writeExamples,"writes the examples for the helpfile. Called from writeToFile.");

~hf.addDescription(\instanceMethods, "IdentityDictionary with the class's instance methods. The second item in the array should be the description.");

~hf.addDescription(\classMethods, "IdentityDictionary with the class's class methods. The second item in the array should be the description.");

~hf.addDescription(\examples, "Array of examples to add in the helpfile.");

~hf.addDescription(\shortDescription_, "Set the short (header) description for the helpfile.");

~hf.addDescription(\longDescription_, "Set the long prose description for the helpfile.");

~hf.addDescription(\addExample, "Add example code to the helpfile. These should be preformatted (e.g. with htmlize), and enclosed in 'PRE' tags");

~hf.addDescription(\addExampleFromFile, "Add example code from a file to the helpfile. The file should contain code (e.g. created with htmlize) that is enclosed in 'PRE' tags.");

~hf.addDescription(\addDescription, "Add a description for an instance or class method, or one of their arguments");

~hf.addDescription(\addDescription, "The name of the method", \instArg, \key);
~hf.addDescription(\addDescription, "The description of the method or argument", \instArg, \desc);
~hf.addDescription(\addDescription, "The type of item to be described. This can be: <UL><LI>'instance' (instance method)</LI><LI>'class' (class method)</LI><LI>'instArg' (argument of an instance method)</LI><LI>'classArg' (argument of a class method)</LI></UL> The default is 'instance'", \instArg, \type);
~hf.addDescription(\addDescription, "The name of the argument to be described. Only relevant for the latter two types.", \instArg, \key2);


// now HTMLize this buffer or region within Emacs, trim the header and footer portion in the resulting buffer and save it to file.

~hf.addExampleFromFile( "HelpFile2.scd.html" );

~hf.writeToFile;

~hf.close;

// Now open the file again within Emacs, and rearrange the class and instance methods a bit.