private void doread(ScanfReader scanReader)
            throws IOException {

        chartData.setEntryList(new Vector<ChartEntry>(10));
        HashMap<String, Color> colorList = new HashMap<String, Color>(10);
        boolean attributesRead = false;

        colorList.put("red", Color.red);
        colorList.put("green", Color.green);
        colorList.put("blue", Color.blue);
        colorList.put("cyan", Color.cyan);
        colorList.put("magenta", Color.magenta);
        colorList.put("yellow", Color.yellow);

        while (true) {
            String keyword = null;
            try {
                keyword = scanReader.scanString();
            } catch (EOFException e) {
                break;
            }
            if (keyword.equals("attributes")) {
                mainPane = new TablePane();
                chartData.setAttrData(new Vector<AttributeData>());
                readAttributes(scanReader, null, colorList);
                renderMainPaneAttributes();
                mainPane.adjustAttributesForDepth(mainPane.getDepth());
                attributesRead = true;
            } else if (keyword.equals("color")) {
                String name = scanReader.scanString();
                float r = scanReader.scanFloat();
                float g = scanReader.scanFloat();
                float b = scanReader.scanFloat();
                colorList.put(name, new Color(r, g, b));
            } else if (keyword.equals("entry")) {
                if (!attributesRead) {
                    throw new IOException("Entry specified before attributes");
                }
                chartData.addChartEntry(readEntry(scanReader, mainPane));
            } else if (keyword.startsWith("report=")) {
                //Sets the report location for the ValueCharts parent interface (there is another reportFileLocation, which is specific to the AttributeCell bar charts)
                reportFile = new File(keyword.substring(7).replace("$", " ").replace("\\", "\\\\"));
                if (reportFile.exists()) {
                    createReportController();
                } else {
                    //since the report does not exist, throw a system message letting the user know this, and set the report to null
                    System.out.println("The report for the ValueChart is not valid, the system believes the report is located at: ");
                    System.out.println("  " + reportFile.toString());
                    System.out.println("  If this is an error, please verify that you have correctly substituted all spaces and added two slashes between directories.");
                    reportFile = null;
                }
            } else {
                throw new IOException("Unknown keyword " + keyword);
            }
        }
        
        renderMainPane();
    }