import java.io.*;

import java.util.List;
import java.util.ArrayList;

import org.openscience.cdk.Molecule;
import org.openscience.cdk.io.MDLReader;
import org.openscience.cdk.interfaces.*;
import org.openscience.cdk.renderer.*;
import org.openscience.cdk.renderer.visitor.*;
import org.openscience.cdk.renderer.generators.*;
import org.openscience.cdk.renderer.font.*;
import org.openscience.cdk.aromaticity.CDKHueckelAromaticityDetector;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;
import org.openscience.cdk.tools.CDKHydrogenAdder;
import org.openscience.cdk.geometry.GeometryTools;

import org.freehep.graphics2d.VectorGraphics;
import org.freehep.graphicsio.svg.SVGGraphics2D;
import java.awt.*;

public class mol2svg {

    public static void main(String[] args) throws Exception {

	InputStream inputStream = null;
	if (args.length > 0) {
	    if (args[0].equals("-")) {
		inputStream = System.in;
	    } else {
		inputStream = new FileInputStream(new File(args[0]));
	    };
	} else {
	    System.err.println("Usage: mol2svg input.mol [output.svg]");
	    System.exit(1);
	};

	OutputStream outputStream = null;
	if (args.length > 1) {
	    if (args[1].equals("-")) {
		outputStream = System.out;
	    } else {
		outputStream = new FileOutputStream(new File(args[1]));
	    };
	} else {
	    outputStream = System.out;
	};

	IMolecule mol = new Molecule();
	new MDLReader(inputStream).read(mol);
	AtomContainerManipulator.percieveAtomTypesAndConfigureAtoms(mol);
	CDKHydrogenAdder.getInstance(mol.getBuilder()).addImplicitHydrogens(mol);
	CDKHueckelAromaticityDetector.detectAromaticity(mol);

	List generators = new ArrayList();
	generators.add(new BasicSceneGenerator());
	generators.add(new BasicBondGenerator());
	generators.add(new BasicAtomGenerator());
	IRenderer renderer =
	    new AtomContainerRenderer(generators, new AWTFontManager());

	Dimension size = GeometryTools.get2DDimension(mol);
	VectorGraphics canvas = new SVGGraphics2D(outputStream, size);

	canvas.startExport();
	renderer.paint(mol, new AWTDrawVisitor(canvas));
	canvas.endExport();
    }
}
