/*\
title: $:/core/modules/parsers/csvparser.js
type: application/javascript
module-type: parser

The CSV text parser processes CSV files into a table wrapped in a scrollable widget

\*/
(function(){

/*jslint node: true, browser: true */
/*global $tw: false */
"use strict";

var CsvParser = function(type,text,options) {
	// Special handler for tab-delimited files
	if (type === 'text/tab-delimited-values' && !options.separator) {
		options.separator = "\t";
	}
	
	// Table framework
	this.tree = [{
		"type": "scrollable", "children": [{
			"type": "element", "tag": "table", "children": [{
				"type": "element", "tag": "tbody", "children": []
			}], "attributes": {
				"class": {"type": "string", "value": "tc-csv-table"}
			}
		}]
	}];
	// Split the text into lines
	var lines = $tw.utils.parseCsvString(text, options),
		tag = "th";
	var maxColumns = 0;
	$tw.utils.each(lines, function(columns) {
		maxColumns = Math.max(columns.length, maxColumns);
	});
	
	for(var line=0; line<lines.length; line++) {
		var columns = lines[line];
		var row = {
			"type": "element", "tag": "tr", "children": []
		};
		for(var column=0; column<maxColumns; column++) {
			row.children.push({
				"type": "element", "tag": tag, "children": [{
					"type": "text",
					"text": columns[column] || ''
				}]
			});
		}
		tag = "td";
		this.tree[0].children[0].children[0].children.push(row);
	}
	this.source = text;
	this.type = type;
};

exports["text/csv"] = CsvParser;
exports["text/tab-delimited-values"] = CsvParser;

})();

