TABLEやULは自動で設定できないのか?

簡単なテキストからHtmlへの変換を使っていると,だんだん気がすまなくなってきます.表 (TABLE) や一般的なリスト (UL) を使いたくなるかです.そこで,出来る限り簡単に処理できるスクリプトを考えてみました.表示の都合上,一部のタグは全角で表示されています.

考え方としては,
<TABLE>
1	2	3
4	5	6
</TABLE>

<UL>
1
	2
		3
	4
5
</UL>
のような簡単なタブ区切りのデータを

1 2 3
4 5 6


のように自動的にHtmlに変換しようというわけです.

もっと簡単にしたいのですが,私の力ではこれが限界です.色々改良してみて下さい.

# Text To HTML
BEGIN	{
	split(ARGV[1], f, ".")
	outfile = f[1]".htm"
	outfile2= f[1]".hd"
	FS = "\t"
	tb = 0
	# Data in <TABLE> should be separated by tabs.
	# Data in <UL> should be tab(s) and one sentence.
}
NR==1	{
	print "<HTML><HEAD><TITLE>" > outfile
	print $0 > outfile
	print "</TITLE></HEAD><BODY>" > outfile
	print "<H2>"$0"</H2><BR>" > outfile
	print "<A HREF=./"outfile"> "$0" </A></P>" > outfile2
		# outfile2 にリンクのための情報を打ち出す
}
NR > 1	{
	if	($0== "<TABLE>") { tb = 1 }
	else if ($0== "</TABLE>"){ tb = 2 }
	else if ($0 == "<UL>")	{ tb = 3 }
	else if ($0 == "</UL>")	{ tb = 4 }
#
	if	(tb == 0) {
		print $0"<BR>" > outfile
	}
	else if	(tb == 1) {
		if	($0 == "<TABLE>") {
			print "<TABLE BORDER=1 CELLSPACING=1><TBODY>" > outfile
		}
		else	{
			print "<TR>" > outfile
			tdn = split($0, td, "\t")
			for(i=1; i<=tdn; i++) {
				print "<TD>"td[i]"</TD>" > outfile
				td[i] = ""
			}
		}
	}
	else if	(tb == 2) {
		print "</TR></TBODY></TABLE></P>" > outfile
		tb = 0
	}
	else if	(tb == 3) {
		if	($0 == "<UL>") {
			print "<UL>" > outfile
		}
		else	{
			for (k=1; k<=NF;"k++) {
				if ($k == "") { l++ }
				else if (l == prel) {
					printf("<LI>%s\n", $k) > outfile
				}
				else if (l > prel) {
					printf("<UL>\n<LI>%s\n", $k) > outfile
					prel = l
				}
				else if (l < prel) {
					printf("</UL>\n<LI>%s\n", $k) > outfile
					prel = l
				}
			}
			k = 0; l = 0
		}
	}
	else if	(tb == 4) {
		for (m=1; m<=prel; m++) { printf("</UL>") > outfile }
		prel = 0
		print "</UL></P>" > outfile
		tb = 0
	}
	printf("%d\r",NR)
}
END	{
	print "<HR><P></P><A HREF=./index.html>ホームページに戻る</A></P>" > outfile
	print "</BODY></HTML>" > outfile
}

JGAWKホームページに戻る