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

PlugIn/机上のソース - by たろう

差分表示


by たろう

もともとは机上で考えたソースをメモ代わりに記録しておいたページだったんですが、自宅マシンにも会社マシン(ぉぃ)にも実験環境を作ったので、作成予定のアイディアリストの場にします。-たろう

#あとはリナザウ内だな(笑)>plugin実験環境

あ、昔から「名前付け」が苦手な人間なので、そのplugin名は…と思ったらつっこんでください。あと、内容の突っ込みも歓迎

とりあえず、[[PlugIn/新作投稿]]に投稿済み

*kobitoシステム
さすがに[[PlugIn/新作投稿]]に投稿できないかも…

 $plugin->def("kobito",
   "kobitoシステム(偽)",
   sub {
     return qq(<div class="kobito"><IMG alt=kobito src="kobito.gif">), @_, qq(</div>);
   }
 );

#''''''#(kobito てすとデス)

アラヤダ。失礼シチャウワ。ナンデ新作ニ投稿デキナイノヨ。http://jm.vis.ne.jp/sbox/put/file/ranger7.gif

ジャア、トウロクシテクダサイhttp://jm.vis.ne.jp/sbox/put/file/ranger7.gif

##(div kobito CSS 追加ダケデヤッテミマシタ。アッ。ドコカデ見たタ CSS ダゾ!?)

##(div kobito CSSニ画像指定ガデキルナンテシラナカッタンダモン…)

##(div kobito 背景画像トシテ no-repeat デ 指定スルノサ)

##(def kobito ナゾの小動物を額入りで表示する (lambda ($text) (div kobito $text)))

##(kobito lambdaノジャクテンハッケン。せりふニすぺーすヲイレラレナイ‥‥‥)

##(kobito 「なぞノ小動物」トハ失礼ナ!!アタシタチハ働キ者ノ小人ナノヨ。http://jm.vis.ne.jp/sbox/put/file/ranger7.gifプンスカプン。)

*epoch?
[[PlugIn/date-stamp]]の逆っていうのでしょうか…

引数の日付をepochに変換する
*set-cookie
[[自分のとこにあった古いネタ http://vwta.kir.jp/Wats.cgi?id=322]]を見て、これpluginで簡単にできそうかな?…と思ってめも

(set-cookie a $a)

2003-07-23 (Wed) 16:05:40 (SHIMADA) : Cookieのセットって、HTTPヘッダになにか出力するんでしたっけ?
プラグインの評価をヘッダ出力のタイミングにあわせるとか、いろいろ調整する必要がありますね。

そうでした…直接CookieにSetは難しいですね…
ということで、似たようなことができるように実験場でPersonalDBを用意して、ごりごりすることにしました…
*get-cookie
(get-cookie a)

*password
パスワードFormに正しいパスワードを入力すると、Cookieに値を入れる

これで隠しページ''風''なのができます…当然、includeでは見えてしまうのですが(笑)

includeするとpluginは非表示になるとかなら使えるかな?
*古いやつ
**from-to
(numbering 30)
1から指定した数字までのリストを出力

SHIMADA案:
 (from-to 0 5) => 0 1 2 3 4 5

**repeat-times
指定した個数分同じ文字列のリストを出力

(repeat-times 3 abc)



abc abc abc

と出力

SHIMADA案:
 (repeat-times hoge 3) => hoge hoge hoge

たろう改案:
 (repeat-times 3 hoge abc test) => hoge abc test hoge abc test hoge abc test

**search-page
(serach-page foo (pages))
検索文字列fooを含むページ名のリストを出力

とりあえずしくだいってことで。

単に grep でオッケーじゃないかな。--SHIMADA

あれ?grepってリストの中から検索文字列にマッチングした要素のみを取り出すものと思っていました

(grep 'test' 'abc' 'abctest' 'testabc' atestbc')は('abctest' 'testabc' atestbc')になると…

search-pageはページの中に検索文字列が含まれているページ名を…あ、説明文がおかしいんだ!!

「内容に検索文字列fooを含むページのリストを出力」かな?


**search-paragraph

**read-by-part
(read-by-part PlugIn 3):(read PlugIn#i3)と同じ 

 $plugin->def("read-by-part",
  "受け取ったパラグラフ名の内容を文字列で返す",
   sub {
     my $page = shift;
     my $id = shift;
     return "" unless $page;
     return "" if $page eq $form{mypage};
     return "" if $page eq 'RecentChanges';
     return "" unless $id;
     my @parts = map { 
                   s/^(\*+)/'!' x length($1)/mge;
                   CGI::escapeHTML($_);
                  } read_by_part($page);
     return $parts[$id];
   }
 );

(read ページ#iN)で出力できるのでちょいと仕様を変えようかなと思っております。

(read-by-part ページ) => ページの第1パラグラフ ページの第2パラグラフ ページの第3パラグラフ …って感じに

(read ページ#iN)と同じように出力するには##(br)
(head 1 (tail N (read-by-part ページ)))##(br)
と書く

**last-days

**days->day-of-week
(たろう):2003-06-29 (Sun) 08:55:37公開

**source-paragraph
(source-paragraph PlugIn#i3)

 $plugin->def("source-paragraph",
  "受け取ったパラグラフ名の内容をリストで返す",
   sub {
     my @targets = @_;
     return "" unless @targets;
     my @ret;
     foreach my $target (@targets) {
       (my $page,my $id) = split /#i/,$target;
       next if $page eq $form{mypage};
       next if $page eq 'RecentChanges';
       my @parts = map { 
                     s/^(\*+)/'!' x length($1)/mge;
                     CGI::escapeHTML($_);
                    } read_by_part($page);
       @ret = split /\n/,$parts[$id];
       push @ret, "\n\n----\n\n";
     }
     return @ret;
   }
 );

** COMMENT
(SHIMADA): 最初から行単位にばらしてしまう source / source-paragraph よりも (read ページ) (read ページ#iN) (read-by-part ページ n) で対象をひとかたまりの文字列として読みこんで、必要なら split '\n' でばらす、というやりかたのほうが好みかなあ。

split, substr, sprintf,  length, ... Perl の文字列関数はひととおり定義しておいたほうがいいかも。

(たろう):あ、そうかsplitがあればいいのか…結構内部でsplit /\n/,$line;を使っているのに「splitを用意する」という考えが無かった(笑)…僕も、必要にあわせてsplitでばらす方が好きですね

ということで、用意してみた(笑)

read作って気が付いたのですが、sourceって結局join '\n'でつなげちゃうんですよね(笑)

(join '\n' (split '\n' (read ページ)))

なんか笑える。
**read
(read PlugIn) 

(read PlugIn#i3) 

 $plugin->def("read",
  "受け取ったページ名・パラグラフ名の内容を文字列で返す",
   sub {
     my @targets = @_;
     return "" unless @targets;
     my @ret;
     foreach my $target (@targets) {
       (my $page,my $id) = split /#i/,$target;
       next if $page eq $form{mypage};
       next if $page eq 'RecentChanges';
       if ($id) {
         my @parts = map { 
                       s/^(\*+)/'!' x length($1)/mge;
                       CGI::escapeHTML($_);
                      } read_by_part($page);
         push @ret,$parts[$id];
       }else{
         my $text = $database{$page};
         $text =~ s/^(\*+)/'!' x length($1)/mge;
         CGI::escapeHTML($text);
         push @ret, $text;
       }
     }
     return @ret;
   }
 );

あ、やば。$read_by_partじゃなくてread_by_partだ…ということで、こっそり直す

かな?

(SHIMADA): CGI::escapeHTML() は引数を直接変更しないで新しい文字列を返すだけなので

       }else{
         my $text = $database{$page};
         $text =~ s/^(\*+)/'!' x length($1)/mge;
 -       CGI::escapeHTML($text);
 -       push @ret, $text;
 +       push @ret, CGI::escapeHTML($text);
       }

となります。

mapの中だとうまくいくのは、
escapeHTML()がブロックの中の最後の文なので、
その返した文字列が map の値になるからです。