diff --git a/public/index.html b/public/index.html
index 021d8a4f2f11f20789f47118812573e453c4896d..2706ede6324cd7347cb100d63272e6e1f7e4911c 100644
--- a/public/index.html
+++ b/public/index.html
@@ -14,11 +14,11 @@
 	<div class="flex-fill d-flex flex-row py-1">
 		<div style="width: 50%; height: 100%;" class="d-flex flex-column pr-1">
 			<label for="text-input" class="mb-0">Markdown Input</label>
-			<textarea id="text-input" class="form-control flex-fill"></textarea>
+			<textarea id="text-input" class="form-control flex-fill" style="font-size: x-small; font-family: monospace;"></textarea>
 		</div>
 		<div style="width: 50%; height: 100%;" class="d-flex flex-column pl-1">
 			<label for="text-input" class="mb-0 ml-auto">Dokuwiki Output</label>
-			<textarea id="text-output" class="form-control flex-fill" readonly></textarea>
+			<textarea id="text-output" class="form-control flex-fill" style="font-size: x-small; font-family: monospace;" readonly></textarea>
 		</div>
 	</div>
 	<footer style="text-align: center"><a href="https://legal.cccv.de">Impressum/Privacy Policy</a> - <a href="https://git.cccv.de/infra/static-pages/convert.md.cccv.de">Source Code</a></footer>
@@ -28,26 +28,26 @@
 
 const renderer = {
 	code(code, infostring, escaped) {
-		return '<code>\n' + code + '</code>\n'
+		return '<code>\n' + code + '\n</code>\n'
 	},
 	blockquote(quote) {
 		quote = quote.replace(/\n*$/, '').replace(/\\\\ /, '')
 		return '> ' + quote.replace(/\n/g, '\n> ') + '\n\n'
 	},
 	html(html) {
-		return '<code>\n' + html + '</code>\n'
+		return '<code>' + html + '</code>'
 	},
 	heading(text, level, raw, slugger) {
 		if (level == 1)
-			return '====== ' + text + ' ======\n\n'
+			return '\n====== ' + text + ' ======\n\n'
 		if (level == 2)
-			return '===== ' + text + ' =====\n\n'
+			return '\n===== ' + text + ' =====\n\n'
 		else if (level == 3)
-			return '==== ' + text + ' ====\n\n'
+			return '\n==== ' + text + ' ====\n\n'
 		else if (level == 4)
-			return '=== ' + text + ' ===\n\n'
+			return '\n=== ' + text + ' ===\n\n'
 		else
-			return '== ' + text + ' ==\n\n'
+			return '\n== ' + text + ' ==\n\n'
 	},
 	hr() {
 		return '\n----\n\n'
@@ -69,13 +69,41 @@ const renderer = {
 		return text + '\n\n'
 	},
 	table(header, body) {
-		return 'TABLE(' + body + ')\n'
+		var colsizes = []
+		var rows = (header + body).split('\n')
+		for (var row = 0; row < rows.length; row ++) {
+			var cols = rows[row].split('|')
+			for (var col = 0; col < cols.length; col ++) {
+				if (!colsizes[col] || colsizes[col] < cols[col].length)
+					colsizes[col] = cols[col].length
+			}
+		}
+		var res = ''
+		var rows = header.replace(/\n$/, '').split('\n')
+		for (var row = 0; row < rows.length; row ++) {
+			var cols = rows[row].split('|')
+			res += '^'
+			for (var col = 0; col < cols.length; col ++) {
+				res += ' ' + cols[col] + ' '.repeat(colsizes[col] - cols[col].length) + ' ^'
+			}
+			res += '\n'
+		}
+		var rows = body.replace(/\n$/, '').split('\n')
+		for (var row = 0; row < rows.length; row ++) {
+			var cols = rows[row].split('|')
+			res += '|'
+			for (var col = 0; col < cols.length; col ++) {
+				res += ' ' + cols[col] + ' '.repeat(colsizes[col] - cols[col].length) + ' |'
+			}
+			res += '\n'
+		}
+		return res + '\n'
 	},
 	tablerow(content) {
-		return 'TABLEROW(' + content + ')\n'
+		return content.replace(/[|]$/, '') + '\n'
 	},
 	tablecell(content, flags) {
-		return 'TABLECOL(' + content + ')\n'
+		return content + '|'
 	},
 	strong(text) {
 		return '**' + text + '**'
@@ -93,7 +121,6 @@ const renderer = {
 		return '<del>' + text + '</del>';
 	},
 	link(href, title, text) {
-		console.log('link ' + href + '|' + title + '|' + text)
 		if (href == text)
 			return '[[' + href + ']]'
 		return '[[' + href + '|' + text + ']]'
@@ -114,7 +141,6 @@ const renderer = {
 marked.use({renderer});
 
 function convert_text() {
-	console.log('converting')
 	let input = document.getElementById("text-input").value;
 	let output = marked(input).replace(/\n\n\n*/g, '\n\n').replace(/^\n*/, '').replace(/\n*$/, '');
 	document.getElementById("text-output").value = output;