public void export(Graph g, Map<String,Object> opts) throws ExportException, IOException {
        resetExportSession(opts);
		
        startExportSession(); 
        
        // --- Export the nodes ----
        List<GraphPoint> points = g.getGraphPoints();
        
        for (GraphPoint point: points) {
        	//  special case for symbol
        	if (point.hasAttr(Named.SYMBOL) && (Boolean)point.getAttr(Named.SYMBOL)) {
        		exportVertex(getExportVertexFromSymbol(point));
        	}
            else if (point.isArray() && point.areValuesInlined()) {
                addArray((NodeArray)point);
            }
        	else  {
            	exportVertex(getExportVertexFromNode(point));
            }

        }
        
        
       // --- Export the edges ----
       
        for (GraphPoint node: g.getGraphPoints()) {
            List<Edge> edges = node.getNeighbors();
            for (Edge e : edges) {
            	ExportEdge ee = getExportEdge(e);
            	if (debug) {
            		System.out.printf("Adding edge %s from %s to %s\n", ee, ee.getFromID(),ee.getToID());
            	}
            	exportEdge(ee);
            }
        }  

	    finishExportSession();
	   
    }