RBIL2HTML

BIOS命令を調べなければ・・・と思いをめぐらせていたら、前に作ったperlスクリプトの存在を思い出しました。

HTML版がやたら見難いのですよ。原版もよくわからないフォーマットだし・・・。と怒りを込めて作った思い出が蘇ります(笑

rbil2html.pl

#!usr/bin/perl
# Ralf Brown Interrupt List to HTML

# perl rbil2html.pl 入力ファイル名(INTERRUP.a) > 出力ファイル名(INTERRUP.html)

# 仕様
# ^----     コンテンツを区切る
# ^INT      タイトルとする。
# <dt>:<dd> dtとddに分離
#           ※出力は全てpreタグで囲まれるorz

# todo : インデックスを付けたい
# todo : もうちょっと整形する。
# todo : フラグだらけのスパゲッティなソースをなんとかする。


$buffer = "";

# html tag flags [open - 1] [close - 0]
$preFlag = 0;
$dlFlag = 0;
$ddFlag = 0;

while ( <> ) {
	# open contents & close contents
	if ( /^----/ ) {
		# close tags
		if ( $preFlag ) {
			$buffer =~ s/\n$//;
			$buffer .= "</pre>";
			$preFlag = 0;
		}
		if ( $ddFlag ) {
			$buffer =~ s/\n$//;
			$buffer .= "</dd>\n";
			$ddFlag = 0;
		}
		if ( $dlFlag ) {
			$buffer .= "</dl>\n";
			$dlFlag = 0;
		}
		# add <hr> tag
		$buffer .= "<hr />\n\n";
	} else {
		# title
		if ( /^INT/ ) {
			$_ =~ s/\n//;
			$buffer .= "<h3>$_</h3>";
		} elsif ( /(.*):(.*)/ ) {
			# open <dl> tag
			if ( $preFlag ) {
				$buffer =~ s/\n$//;
				$buffer .= "</pre>\n";
				$preFlag = 0;
			}
			if ( $ddFlag ) {
				$buffer =~ s/\n$//;
				$buffer .= "</dd>\n";
				$ddFlag = 0;
			}
			
			if ( !$dlFlag ) {
				$buffer .= "<dl>\n";
				$dlFlag = 1;
			}
			
			$buffer .= "\t<dt>$1 :</dt>\n";
			
			$buffer .= "\t<dd>";
			$ddFlag = 1;
			
			$buffer .= "<pre>";
			$preFlag = 1;
			
			$tmp = $2;
			$tmp =~ s/^[ \t]//;
			$buffer .= $tmp;
		} else {
			if ( $ddFlag ) {
				$_ =~ s/^[\t]//;
				$buffer .= "$_";
			} else {
				if ( !$preFlag ) {
					$preFlag = 1;
					$buffer .= "\n<pre>";
				}
				$buffer .= $_;
			}
		}
	}
}

print <<EOM;
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>title</title>

<link href="style.css" rel="stylesheet" type="text/css" />
</head>

<body>

$buffer

</body>

</html>
EOM

結構使えます。