@Override
	public String toString() {

		StringBuilder strBldr = new StringBuilder();

		if(version != null) {
			strBldr.append("version : ");
			strBldr.append(version);
			strBldr.append("\n\n");	
		}

		strBldr.append("structures : \n");
		for(GLSLStructure struct : structures.values()) {
			strBldr.append("\t");
			strBldr.append(struct.toString());
			strBldr.append("\n");
		}
		strBldr.append("\n");

		strBldr.append("inputs : \n");
		for(GLSLAttribute inAttr : inAttributes) {
			strBldr.append("\t");
			strBldr.append(inAttr.toString());
			strBldr.append("\n");
		}
		strBldr.append("\n");

		strBldr.append("outputs : \n");
		for(GLSLAttribute outAttr : outAttributes) {
			strBldr.append("\t");
			strBldr.append(outAttr.toString());
			strBldr.append("\n");
		}
		strBldr.append("\n");

		strBldr.append("uniforms : \n");
		for(GLSLAttribute uniformAttr : uniformAttributes) {
			strBldr.append("\t");
			strBldr.append(uniformAttr.toString());
			strBldr.append("\n");
		}
		strBldr.append("\n");

		strBldr.append("uniform keys : \n");
		for(String uniform : uniforms) {
			strBldr.append("\t");
			strBldr.append(uniform);
			strBldr.append("\n");
		}

		return strBldr.toString();
	}