トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/252

ページの作成や編集にはユーザ登録が必要です。

同一レベルのリストは最初のリスト型に統一

  • 投稿者: aky
  • カテゴリ: 本体
  • 優先度: 緊急
  • 状態: 提案
  • 日時: 2005年08月15日 00時45分56秒

 内容

 番号付きリストと番号無しリストが隣接すると、正しく表示されない。

■例(その1)
[表記1]
*UL箇条書き1
*UL箇条書き2
+OL箇条書き1
+OL箇条書き2

[画面表示1]
・ UL箇条書き1
・ UL箇条書き2
・ OL箇条書き1
・ OL箇条書き2
■例(その2)
[表記2]
+OL箇条書き1
+OL箇条書き2
*UL箇条書き1
*UL箇条書き2

[画面表示2]
1. OL箇条書き1
2. OL箇条書き2
3. UL箇条書き1
4. UL箇条書き2

修正はこんな感じでしょうか。HTML的にレベルが上がる場合しかネストは無理のようなのでレベルが下がる場合にはリストをいったん閉じます。あとend_listで変数クリアしてないのでとある条件で余分に</li>が出力されていたのも修正(表示は変わらないけど)。3.6.5用のもので確認。HTMLParser.pmです。

sub new {
・・・
+ 	$self->{listtype} = 0;
・・・
sub l_list {
	my $self  = shift;
	my $level = shift;
	my $obj   = shift;
	
	if($self->{para}==1){
		$self->{html} .= "</p>\n";
		$self->{para} = 0;
	}
	
+	if($self->{listtype} == 1 && $level <= $self->{level}){
+	  $self->end_list;
+	}
+	$self->{listtype} = 0;
	
	$self->end_verbatim;
	$self->end_table;
	$self->end_quote;
sub l_numlist {
	my $self  = shift;
	my $level = shift;
	my $obj   = shift;
	
	if($self->{para}==1){
		$self->{html} .= "</p>\n";
		$self->{para} = 0;
	}
	
+	if($self->{listtype} == 0 && $level <= $self->{level}){
+	  $self->end_list;
+	}
+	$self->{listtype} = 1;
	
	$self->end_verbatim;
	$self->end_table;
	$self->end_quote;
sub end_list {
	my $self  = shift;
	while($self->{level} != 0){
		if($self->{'list_close_'.($self->{level})} == 1){
			$self->{html} .= "</li>\n";
+			$self->{'list_close_'.$self->{level}} = 0;
		}
		$self->{html} .= pop(@{$self->{close_list}});
		$self->{level}--;
	}
}

 コメント

  • これは、私も気づいていました。リストは最初のリスト型に統一されてしまうようですね。私の場合ですが、番号付きと番号なしとでは、明らかに別のパラグラフ(段落)と解釈して、別パラグラフとするために1行空行を入れて使うようにしています。 - A_M (2005年08月15日 15時27分19秒)
  • すみません。上記’’’同一レベルのリストは最初のリスト型に統一’’’と改めてください。 - A_M (2005年08月15日 15時29分38秒)
  • タイトルを変更しました。 - aky (2005年08月15日 22時42分51秒)
お名前: コメント:

最終更新時間:2015年10月10日 22時46分35秒