新規作成 | 管理 | 差分 | 検索 | FrontPage | ページ一覧 | 更新履歴 | RSS

PlugIn/tag-links - タグの値別にページへのリンクを列挙する

管理

タグの値別にページへのリンクを列挙する

$plugin->def("tag-links",
  "タグの値別にページへのリンクを列挙する",
  sub {
    my $tag = shift;
    my @search_target = @_;
    my (%has);
    if($search_target[0] eq ""){ @search_target=keys %database; }
    foreach my $page (@search_target) {
      next if $page eq $form{mypage};
      my $txt = $database{$page};
      my @matches = ($txt =~ /^_${tag}_\s*(.+)$/gm) or next;
      foreach my $val (@matches) {
        if (defined $has{$val}) {
          push @{$has{$val}}, $page;
        }else {
          $has{$val} = [$page];
        }
      }
    }
    my @result = ();
    my @keys = sort { $has{$a}[0] cmp $has{$b}[0] } keys %has;
    foreach my $val (@keys) {
      my @hits = map { "[[$_]] " } @{$has{$val}};
      $val =~ s/$embedded_name//go;
      push @result, CGI::escapeHTML($val) . " @hits";
    }
    return @result;
  }
);

使い方はdocument:tag-links参照 -たろう 2003-07-03 (Thu) 16:59:07

ああっ、やられた。いつのまに。(笑) wiki-dev/demoも見てね。 --SHIMADA 2003-07-04 (Fri) 01:05:01

修正案

管理

    foreach my $val (@keys) {
      my @hits = map { "[[$_]] " } @{$has{$val}};
+     $val =~ s/$embedded_name//go;                   # ADD
      push @result, CGI::escapeHTML($val) . " @hits";
    }

念のため、これにも入れといた方がいいですよね。--SHIMADA 2003-07-06 (Sun) 00:39:33

修正しました。- rica 2003-07-06 (Sun) 12:28:32

仕様について

管理

このプラグインは、行頭から hogehoge: となっている行を各ページから探してきて表示する、というものです。

##(tag-links hogehoge) とプラグインを呼び出すと、

FooBar? というページに

hogehoge: ホゲホゲについて考えた。ホゲ。

という行があると、それがヒットして

ホゲホゲについて考えた。ホゲ。 FooBar?

と表示されます。

行頭から hogehoge でコロン、というものだけが対象ですが、もっと他のフォーマット(たとえば行頭にスペースが必要とか、コロンではさむとか)のほうがいいような気もするんですが、どうでしょう? --SHIMADA

お名前:

すみません、テストします。

管理

すごい…便利だ…。

これは他のものと組み合わせて、リンク先を見出しにすることは出来ないのでしょうか。

(SHIMADA): tag-links自体に手を入れて、検索を段落まで細かく見るようにすればできると思います。

すみません、補足します。

管理

(SHIMADA): ところで、

タグの値別にページへのリンクを列挙する

というのはかなりわかりにくい表現ですいません。

かてごり: テスツページ

という行があると、「かてごり:」がタグで、「テスツページ」が値です。 値が同じ文字列の場合はまとめて表示しますので、こんな風にも使えます。

あ、カテゴリ機能になっちゃうんですね。これは本当に便利!! それで「リンクを列挙する」という説明になるんですね。

でも実は一番の落とし穴は、「一行ごとに抜き出せたらいいなぁ」と思っていたところに出てきたので、薄々そういうことかなぁと思いながら、「まさか、そんな都合のいい話なわけない」と思おうとしたところにあったりして…。<ネガティブ人間(笑)。- rica 2003-07-05 (Sat) 23:08:14

さあ、仕様について考えよう

管理

新しい行頭記号でも定義するか

管理

WalWiki?で使われていないもの(コメントはSHIMADAの私見です)

#プラグインと被るので没
$可もなく不可もなく
%可もなく不可もなく
&HTMLと被るので難
'めだたなすぎ? / ''は強調ですが、インラインは関係なくていいんですか?(行頭に書かなければいいだけ?) rica
「行頭に書いてはならない」となってしまうのは非常にうざったいので、インライン系も避けたほうがいいよね--SHIMADA
=いいかも? / [行頭 ==+アルファベット一文字]っていうのも使ってます…。rica
\ちょっとイヤかも/正規表現のエスケープとかぶるので後々めんどそう--たろう
@ricaっち使用済み
?
_割と好きかも / 何となくいいかも。rica
~

↑間違っていたら直してください。2003-07-10 (Thu) 19:33:29

なんとなく $ % & 辺りは使用済みの人が結構いそうな予感? 気のせい? - ricaっち 2003-07-10 (Thu) 21:40:56

提案

こんな感じでいかがでしょうか? --SHIMADA 2003-07-11 (Fri) 14:01:25

_hogehoge_ ほげほげについて考えた。ほげ。

ところで _ ではじまる行は普通に表示する際なにか目立つようにしますか?

_で始まる行というか、個人的には hogehoge 部分を <span> で括ってみたい感じがします。- rica 2003-07-11 (Fri) 15:53:11

修正案

管理
-     my @matches = ($txt =~ /^$tag:\s*(.+)$/gm) or next;
+     my @matches = ($txt =~ /^_${tag}_\s*(.+)$/gm) or next;

こんな感じ? 本体のspan対応はricaさんよろ。:-P --SHIMADA 2003-07-15 (Tue) 15:01:50

修正しました。span対応(;_;)。↓こんなでよいの? - rica 2003-07-16 (Wed) 10:37:39

inline()トコ
    $line =~ s|^_([^_]+?)_|<span class="tag">$1:</span>|g;

とりあえずのCSS。

.tag {
	font-weight:bold;
	font-size:80%;
	color:#b22222;
}

test: こんなでよいの?

検索範囲を指定できるように修正

管理

$plugin->def("tag-links",
  "タグの値別にページへのリンクを列挙する",
  sub {
    my $tag = shift;
+   my @search_target = @_;
    my (%has);
+   if($search_target[0] eq ""){ @search_target=keys %database; }
+   foreach my $page (@search_target) {
-   foreach my $page (keys %database) {
      next if $page eq $form{mypage};
      my $txt = $database{$page};
      my @matches = ($txt =~ /^_${tag}_\s*(.+)$/gm) or next;
      foreach my $val (@matches) {
        if (defined $has{$val}) {
          push @{$has{$val}}, $page;
        }else {
          $has{$val} = [$page];
        }
      }
    }
    my @result = ();
    my @keys = sort { $has{$a}[0] cmp $has{$b}[0] } keys %has;
    foreach my $val (@keys) {
      my @hits = map { "[[$_]] " } @{$has{$val}};
      $val =~ s/$embedded_name//go;
      push @result, CGI::escapeHTML($val) . " @hits";
    }
    return @result;
  }
);

修正しました - rica 2003-09-10 (Wed) 10:05:31