表紙 | 新規 | 編集 | 編集 | 差分 | 一覧 | RSS | 検索 | 閲覧履歴 | 作成履歴 | 更新履歴

back_push関数 - YukiWikiベースのPonyWikiのソースを読んでみる その28

YukiWikiベースのPonyWikiのソースを読んでみる その28

htmlのエレメントを挿入する関数。

text_to_html関数は、完成部分(result)と対応するタグの閉じ側(saved)の間で、追加や合体を行い上下からhtmlを作成している。

back_push関数では、エレメント追加時にsavaedからデータをresultに追い出し、必要な分だけエレメントを配置している。

よくこれだけのコードで動く様に書けるなぁ。分かりにくいけど、凄いです。

sub back_push {
	my ($tag, $level, $savedref, $resultref, $attr) = @_;
	while (@$savedref > $level) {
		push(@$resultref, shift(@$savedref));
	}
	if ($savedref->[0] ne "</$tag>") {
		push(@$resultref, splice(@$savedref));
	}
	while (@$savedref < $level) {
		unshift(@$savedref, "</$tag>");
		push(@$resultref, "<$tag$attr>");
	}
}
先頭へ