@Override
  public void handle(StringBuilder line, TemplateReader tpl, Environment env, Appendable out)
      throws IOException {
    // get the class name
    String klass = getArgs(line);

    // read in the class
    ClassReader rdr = new ClassReader();
    while (true) {
      line = tpl.next();

      if (line == null || (isCodeLine(line) && getCmd(line).equals("endclass"))) break;

      rdr.add(line.toString());
    }

    // format and print objects!
    Environment oenv;
    int i = 0;
    for (TemplateObject o : env.getObjectsFor(klass)) {
      rdr.rewind();
      oenv = env.getEnvironmentFor(o);
      oenv.setValue("FIRST", (i == 0) ? "1" : null);
      oenv.setValue("NOTFIRST", (i != 0) ? "1" : null);
      oenv.setValue("INDEX", String.valueOf(i++));
      Template.doTemplateLoop(rdr, oenv, out);
    }
  }