showdown.subParser('tables', function (text, options, globals) {
'use strict';
var table = function () {
var tables = {},
style = 'text-align:left;',
filter;
tables.th = function (header) {
if (header.trim() === '') {
return '';
}
var id = header.trim().replace(/ /g, '_').toLowerCase();
return '
' + header + ' | ';
};
tables.td = function (cell) {
var subText = showdown.subParser('blockGamut')(cell, options, globals);
return '' + subText + ' | ';
};
tables.ths = function () {
var out = '',
i = 0,
hs = [].slice.apply(arguments);
for (i; i < hs.length; i += 1) {
out += tables.th(hs[i]) + '\n';
}
return out;
};
tables.tds = function () {
var out = '', i = 0, ds = [].slice.apply(arguments);
for (i; i < ds.length; i += 1) {
out += tables.td(ds[i]) + '\n';
}
return out;
};
tables.thead = function () {
var out,
hs = [].slice.apply(arguments);
out = '\n';
out += '\n';
out += tables.ths.apply(this, hs);
out += '
\n';
out += '\n';
return out;
};
tables.tr = function () {
var out,
cs = [].slice.apply(arguments);
out = '\n';
out += tables.tds.apply(this, cs);
out += '
\n';
return out;
};
filter = function (text) {
var i = 0,
lines = text.split('\n'),
line,
hs,
out = [];
for (i; i < lines.length; i += 1) {
line = lines[i];
// looks like a table heading
if (line.trim().match(/^[|].*[|]$/)) {
line = line.trim();
var tbl = [];
tbl.push('');
hs = line.substring(1, line.length - 1).split('|');
tbl.push(tables.thead.apply(this, hs));
line = lines[++i];
if (!line.trim().match(/^[|][-=|: ]+[|]$/)) {
// not a table rolling back
line = lines[--i];
} else {
line = lines[++i];
tbl.push('');
while (line.trim().match(/^[|].*[|]$/)) {
line = line.trim();
tbl.push(tables.tr.apply(this, line.substring(1, line.length - 1).split('|')));
line = lines[++i];
}
tbl.push('');
tbl.push('
');
// we are done with this table and we move along
out.push(tbl.join('\n'));
continue;
}
}
out.push(line);
}
return out.join('\n');
};
return {parse: filter};
};
if (options.tables) {
var tableParser = table();
return tableParser.parse(text);
} else {
return text;
}
});