Proxomitron フィルタ ..
[2ch|▼Menu]
832:817
06/10/20 01:36:13 wAdVERPl0
>828
どうもありがとうございます。ばっちり解決していますね。
>820のような妙なコメントを書く人はあまりいないだろうと思いますが、
書かれることを想定しておいた方が後々のためになるだろうと思います。
フィルタを作る際は、一応はあらゆる場合を想定しておいた方が
安心して使えるだろうと思うので……。
解説もありがとうございました。

>828のようなテクニックを集めたサイトがあるとよいと思うものの、
wikiやthinkさんのサイト内などにはあるのかな。

833:816
06/10/20 04:46:14 kgbwGCqt0
リストを使ったループもちゃんと動作しますね。 オミトロンでここまで出来るとは...。

[Patterns]
Name = "LIST rooptest"
Active = FALSE
Limit = 256
Match = "$LST(rooptest)"
Replace = "[\@]$STOP()"

----------------rooptest.txt----------------
(1)\#($LST(rooptest)|)
----------------rooptest.txt----------------

テストウインドウ: 111
結果: [111]

834:名無しさん@お腹いっぱい。
06/10/20 04:49:49 H4LiK3bO0
どうでもいい話、ループの最大回数がわかってる場合は
(?)+{1,4}とか決め付けると極端に高速化したような気がした。
今はもうこれ自体使ってないからかなり忘れかけてるけど。

835:816
06/10/20 05:06:17 kgbwGCqt0
>>834
30000バイトの文字列をテストウインドウに貼って

(?)+{30000}
(?)+

の2つの速度をプロファイルボタンから調べて比べてみたんですが限りなく同タイムでした。
高速化したというのはたぶんlimitと同じような目的で使った場合の話ですね。

836:816
06/10/20 07:02:24 kgbwGCqt0
>>826
test6.1のほうですがテストウインドウに111と入れると222になったりしたので修正してみました。
「 + 」 での取り込みで最短一致でマッチングしてるのが原因でした。 ついでに 000 の問題も修正。
もっといい方法があれば手直しを。

[Patterns]
Name = "number +1 [Match ver] [2006/10/19] test6.2"
Active = TRUE
Limit = 32767
Match = "(9+{1,*})\0(^[0-9])$TST(\0=$SET(#=1)(9$SET(#=0))+)"
"|([0-9]++)\#([0-9])\0(9+{1,*})\1(^[0-9])"
"$TST(\0=$LST(Num-plus))"
"$TST(\1=($LST(Num-plus))+)|"
"([0-9]++)\#([0-9])\0(^[0-9])"
"$TST(\0=$LST(Num-plus))"
Replace = "[\@]"

837:816
06/10/20 07:09:54 kgbwGCqt0
すみません、余計酷くなってしまいました。 ↑は無かったことに....。

838:名無しさん@お腹いっぱい。
06/10/20 15:16:57 pRyei5xN0
以前、永久ループに陥ってから倦厭していた$NESTが何となく解るようになった。
少し進歩した(゚∀゚)アヒャ

839:think ◆MM0nnAOCiQ
06/10/20 22:19:35 sNjWaFpG0
>>831
> 完成したらどこかで配布してみてはいかがでしょう
出来れば、今日コンテンツに加えて更新したいところです。遅くとも明日には何とか…。

>>831
> あと、リストを使った回帰的処理というのは面白い発想でした。
>>832
> >828のようなテクニックを集めたサイトがあるとよいと思うものの、

実は「フィルタ公開 → 仕組み解説」という形でいくつかのテクニック解説をコンテンツに加えようと考えていましたが、考えるだけで先に進まないので、そろそろ始動しようと考えてます。
今サイトを改装中なので、そのときにフィルタ公開だけでもやってしまおうかと。
# 先にフィルタを公開すれば、要望or突っ込みなどいただけるかもしれませんしね。
# 別所で公開していたフィルタがあるので、皆さんが知っているフィルタも幾つかあると思います。(勘の鋭い方は既に気がついているかもしれませんねw)

>>836
> 「 + 」 での取り込みで最短一致でマッチングしてるのが原因でした。
確かに困りますね、これは。
どうも私の最短一致についての認識が甘いみたいです。
(以前も * の最短一致で指摘されたことがありましたが、未だに勘違いしている節があります(汗))
解決法としては、

・数値の先端/末尾を含めてマッチさせる (最長一致とほぼ同等)
・数値の末尾のみにマッチさせる (必要な箇所だけ最短一致)

のいずれかと思います。

840:think ◆MM0nnAOCiQ
06/10/20 22:20:45 sNjWaFpG0
>839の後者の方で解決してみました。

[Patterns]
Name = "number +1 [Match ver] [2006/10/20] test6.3"
Active = TRUE
Limit = 32767
Match = "([0-9]++)\#([0-8])\0(9+{1,*})\1(^[0-9])"
"$TST(\0=$LST(Num-plus))"
"$TST(\1=($LST(Num-plus))+)|"
"([0-9]++)\#([0-8])\0(^[0-9])"
"$TST(\0=$LST(Num-plus))|"
"(9+{1,*})\1(^[0-9])"
"$SET(#=1)"
"$TST(\1=($LST(Num-plus))+)"
Replace = "\@"

Name = "number +1 [$TST ver] [2006/10/20] test5.3"
Active = TRUE
Limit = 32767
Match = "([0-9]+)\0(^[0-9])"
"("
"$TST(\0=([0-9]++)\#([0-8])\1(9+{1,*})\2)"
"$TST(\1=$LST(Num-plus))"
"$TST(\2=($LST(Num-plus))+)|"
"$TST(\0=([0-9]++)\#([0-8])\1)"
"$TST(\1=$LST(Num-plus))|"
"$TST(\0=(9+{1,*})\1)"
"$SET(#=1)"
"$TST(\1=($LST(Num-plus))+)"
")"
Replace = "\@"

841:think ◆MM0nnAOCiQ
06/10/20 22:28:33 sNjWaFpG0
あと一行、書ければ…。

>>831
> 数字が 999 などの 9 の繰り返しだった場合に 000 などになってしまうようです。
こちらは、もう一つ分岐を作ることで対応しました。
よく考えたら、([0-9])\0 じゃなくて ([0-8])\0 で良かったのですよね。
これで3つめの分岐が期待通りに動作すると思います。

842:816
06/10/21 02:22:58 62B1+yNF0
>>839-841
サイト更新予定ですか、乙。 フィルターの公開とはとても楽しみです。
テクニック解説も期待してます、頑張って下さい。

>number +1 フィルター

修正乙です、ばっちり修正されてました。

あと、ちょっと考えてみたんですが、以下のことが気になったので

・ 下一桁が 9 である確率は 1/10 なのでこれにマッチするものを分岐の先頭に書くのは低速化になるような
・ 9 の繰り返しを 0 に置換するときはリストを使わずに $SET(#=0) を使ったほうが速い

自己流のものですが試しに書いてみました。

843:名無しさん@お腹いっぱい。
06/10/21 02:29:26 62B1+yNF0
[Patterns]
Name = "number +1 (2006-10-21 beta3)"
Active = FALSE
Limit = 32767
Match = "([0-9]++)\#([0-8])\0(^[0-9])"
"$TST(\0=$LST(Num-p-Ten))"
"|"
"9(^[0-9])$SET(#=10)"
"|"
"([0-9]++)\#"
"([0-9])\0"
"(9+{1,*})\1"
"(^[0-9])"
"$TST(\0=$LST(Num-p-Ten))"
"$TST(\1=(?$SET(#=0))+)"
Replace = "\@"

-------Num-p-Ten.txt------
0$SET(#=1)
1$SET(#=2)
2$SET(#=3)
3$SET(#=4)
4$SET(#=5)
5$SET(#=6)
6$SET(#=7)
7$SET(#=8)
8$SET(#=9)
9$SET(#=10)
-------Num-p-Ten.txt------

このフィルターの場合、Num-plusリストの "9" で # に "10" を代入しても支障が無いので別のリスト名にして変更しました。
このせいで他のフィルターでリストの使い回しが出来なくなるのであれば元に戻す方向で。

844:816
06/10/22 07:56:03 giDEESQO0
>>824>>840>>843 の3つのフィルターの速度を3万文字の数字で試してみたら>>824が一番速い。
かなり予想外・・。

845:名無しさん@お腹いっぱい。
06/10/22 08:54:24 pIhJV0rv0
処理にかかる時間は

 4   :  10   :   5
>>824   >>840    >>843

くらいの倍率になるようですね、>>843の高速化も予想以上に効いてます。

846:名無しさん@お腹いっぱい。
06/10/23 06:41:54 r0C1Bci+0
所でオミトロンで数を+1することでどんなことが出来るんだ?

847:名無しさん@お腹いっぱい。
06/10/23 13:46:05 KvMb1J5K0
主にcgiを中心としたURLだね。
あと一部のサイトにはサイトを番号で階層的に構築しているものもあるだろうから
そういう場合に次ぎのカテゴリに飛ぶリンクやカテゴリ内の次のページに飛ぶリンクを埋め込むことができると思われる。

ちなみにURLの処理の場合はソース内のそれと比べて遙かに量が少ないので高速化したところで意味はほとんどない。
彼らは単なるベンチマニアなので気にしないでおいてあげようw


848:名無しさん@お腹いっぱい。
06/10/23 18:55:30 MzXqWBCb0
みんな頭がいいんだな。
もう何がなんだか(´・ω・`)ショボーン

849:名無しさん@お腹いっぱい。
06/10/23 19:30:43 r0C1Bci+0
JSオフにしてる人用って事か

850:think ◆MM0nnAOCiQ
06/10/23 20:46:24 LNHCxGv10
>>842
> ・ 下一桁が 9 である確率は 1/10 なのでこれにマッチするものを分岐の先頭に書くのは低速化になるような
> ・ 9 の繰り返しを 0 に置換するときはリストを使わずに $SET(#=0) を使ったほうが速い
なるほど。

>>843
([0-9]++)\#([0-9])\0(9+{1,*})\1 は面白いですね。この発想はありませんでした。
9999... の数値の置換が高速に動作するのが良い感じですね。

>>844
> 3万文字の数字で試してみたら>>824が一番速い。
おそらく、OR関数を使用している影響だと思います。
実際、ORの先頭の表現にマッチさせる条件だと、速度差がかなり小さくなります。

851:think ◆MM0nnAOCiQ
06/10/23 20:47:43 LNHCxGv10
あれからもう一度、初心に返って考え直してみたら、驚くほどスリムなフィルタになりました。

[Patterns]
Name = "number +1 [Match ver] [2006/10/23] beta1"
Active = TRUE
Limit = 32767
Match = "(^(^[0-8]9+(^[0-9])))$LST(Num-plus)(9$SET(#=0))+|"
"(^(^9))$SET(#=1)(9$SET(#=0))+(^[0-9])"
Replace = "\@"

Name = "number +1 [$TST ver] [2006/10/23] beta1"
Active = TRUE
Limit = 32767
Match = "([0-9]+)\0(^[0-9])("
"$TST(\0=\#(^(^[0-8]9+(^?)))$LST(Num-plus)(9$SET(#=0))+)|"
"$TST(\0=$SET(#=1)(?$SET(#=0))+))"
Replace = "\@"

>842のアドバイスを受けて、ブロックリスト(Num-plus)から "9$SET(#=0)" を外し、更に ([0-9]++)\# を省きました。
>839で紹介した「数値の末尾のみにマッチさせる (必要な箇所だけ最短一致)」の応用形です。
我ながら、高速でシンプルなフィルタに仕上がったと思います。

852:think ◆MM0nnAOCiQ
06/10/23 20:57:23 LNHCxGv10
>>846
「相対URL → 絶対URL」にするときに ../ の出現回数をカウントして繰り返し処理させたいと考えたことがあります。
「+1 するフィルタ」を応用すると、「-1 するフィルタ」も出来そうなので、 「../ が何度出現しても絶対URLにするフィルタ」が作れそうです。
(今までは繰り返し回数を1〜4回のように決めうちして、ORで指定していました)
決めうちでもほとんどの状況を網羅できるので、わざわざグローバル変数を使ってまで実現する必要があるかというと疑問が残りますが…。

また、「グローバル変数に『特定の文字列』が何回マッチしたか記憶させたい」と考えたことも。
何度か出た話題ですが、行数も \n の数をカウントすれば、取得できます。
行数でなくても、「ある単語」がn回HITしたら、フィルタを働かせるロジックは応用が利きそうですね。

>>847
> 彼らは単なるベンチマニアなので気にしないでおいてあげようw
アルゴリズムマニアも加えておいてくださいw

853:名無しさん@お腹いっぱい。
06/10/23 21:31:20 7VXS0HXl0
画像を全部lightboxで表示するフィルタ書いてもらえませんか

854:名無しさん@お腹いっぱい。
06/10/23 21:53:44 4SBEQqzk0
そういえば昔、相対URLを絶対URLにするフィルタをつくろうとして
断念したことがあったっけ。
不要な画像つきリンクをテキスト化して軽くするフィルタなんだけれども。
今では別のフィルタで対応しているからつくる必要がなくなった。

855:816
06/10/24 03:02:33 96jgfWU+0
>>850-851
乙です。 なるほど、こういう方法もありましたか。 置換に必要な場所にだけマッチさせる方法があったとは..。

それぞれのフィルターの速度を3万文字の数字で比較してみました。
計測には差が出やすいようにスーパーπ104万桁10分台の遅いマシンを使用。

---------------------------------------------------------------------
         (1)      (2)      (3)       (4)     (5)
        000.....0    000.....09    199.....9      999.....9   999....90    ( 対象文字列 )

>>824   43.319444   43.409722   49.640625   49.437500  46.897059   ( ミリ秒 )

>>843   48.953125   100.375000   70.340909   70.238636  33.804348

>>851   59.951923   60.000000   33.820652   25.366667  計測不能(応答なし)
---------------------------------------------------------------------

>>851のフィルターは 99999.. の後ろが 9 以外の数字で終わる場合に極端に時間がかかるようです。
実用的には問題無いと思われますがちょっと気になります。 先読みで数字の末尾を確認する
処理を入れたほうが良いかも..。

(3)、(4) の速さがすごいですね、高速化済みの>>843の3倍も速いとは...w

>>824は対象がどんな数字でも安定してることが分かります。
>>843は対象の末尾が 9 の場合をイレギュラーと考え、この場合の速度を無視した書き方なので
9 で終わる場合は遅いですね。

856:816
06/10/24 03:42:20 96jgfWU+0
>>846
〜/00581.jpg
〜/00582.jpg
〜/00583.jpg

みたいな連番の画像ファイルを見るときにブラウザをリロードするだけで次々に見れるようになります。
他にも応用次第で色々なことに使えるはず。

>>848
慣れればそのうち書けるようになるはず。

>>849
JSでは出来ないことにも使えるはず。 HTTPヘッダの置換等。

>>852
>わざわざグローバル変数を使ってまで

今まではグローバル変数を使うとすごく遅くなるという固定観念を持ってましたが
>>824を見るとそうでもなさそうなんですよね。 遠慮せずにもっと使うべきものなのかも。

>>854
>相対URLを絶対URLにするフィルタ
それらしきフィルターをどこかで見た。

857:816
06/10/24 06:48:23 96jgfWU+0
あれ、>>824は対象文字列が3文字などの短い場合は他のよりかなり遅い。 グローバル変数のせいだろうか。
グローバル変数は動的な生成とその解放をするときに時間がかかるが、
代入や取り出しにかかる時間はローカル変数と変わらない...ってことかな?

>>855に書いた 999... の末尾が 9 以外の場合に遅くなるという件は "#" の回数制限の100文字程度なら
プロファイルでも全然問題なく動作しますね。 3万文字の場合でもプロファイルでなく普通にテストする分には
正常に動作するから修正の必要は無いか。

858:名無しさん@お腹いっぱい。
06/10/24 07:40:31 iS+1bFGh0
>>853
URLリンク(abc.s65.xrea.com)

859:816
06/10/24 08:14:51 96jgfWU+0
応答なしの問題を回避するために>>851に手を入れてみました。 変更点↓

・ 9999.. の末尾の先読み判定を前に移動。
・ (^[0-9]) を (^[0-8]) に修正。
・ (^(^ 〜 )) から && に代えてみました。 タイム比較用。

[Patterns]
Name = "number +1 (2006-10-24) beta4"
Active = FALSE
Limit = 32767
Match = "([0-8]9+(^[0-8])&&$LST(Num-plus)(9$SET(#=0))+)|"
"(9+{1,*}(^[0-8])&&$SET(#=1)(9$SET(#=0))+)"
Replace = "\@"

// (^(^9))9$SET(#=0) は (^(^9))?$SET(#=0) より速いんですね、これも意外..。

860:816
06/10/24 08:30:32 96jgfWU+0
タイム比較の結果は (^(^ 〜 )) >>> && でした。 以上。

861:816
06/10/24 08:32:00 96jgfWU+0
※ (^(^〜))[速い] >>> &&[遅い]  です。

862:名無しさん@お腹いっぱい。
06/10/24 10:18:39 PwmdsW1B0
URLリンク(www.so-net.ne.jp)
>テレビ王国 > 10月24日(火)の番組表 [地上波/奈良/ 5-12時]
から上を消すフィルタお願いします。

>商号変更のおしらせ 「ソネットエンタテインメント株式会社」へ [PDF]
>[テレビ王国ランキング!レポート全国版] 10/16〜10/22分リリース!!
>テレビも動画も!あなたの好みに合わせてオススメ!
>ドラマ情報続々!この秋スタートドラマを事前にチェック。
など
>テレビ王国 > 10月24日(火)の番組表 [地上波/奈良/ 5-12時]
より上すべて消したいです。

863:816
06/10/24 16:29:32 96jgfWU+0
うわ〜! >>824のlimitが256のままだった。 これでテストすれば早いのは当たり前..。
再テストしたら比較にならないほど遅かった、>>824はボツ決定です..。(^^;A

次にグローバル変数とローカル変数の比較。
test1がグローバル変数を使ったフィルター、test2がローカル変数を使ったフィルターです。

[Patterns]
Name = "test1"
Active = FALSE
Limit = 32767
Match = "0$SET(A=1)"
Replace = "$GET(A)$SET(A=)"

Name = "test2"
Active = FALSE
Limit = 32767
Match = "0$SET(0=1)"
Replace = "\0"

(対象文字列を100文字の "000...0" にしてテスト)
結果: test1 → 0.172000 (milliseconds)、 test2 → 0.000000 (milliseconds)

(対象文字列を3万文字の "000...0" にしてテスト)
結果: test1 → 51.825000 (milliseconds)、 test2 → 4.156000 (milliseconds)

100文字のテストに比べると3万文字ではだいぶタイムの倍率は下がったが、それでも10倍以上遅い。
グローバル変数はなるべく避けたほうが良いでFAですね...。

864:think ◆MM0nnAOCiQ
06/10/24 22:42:54 vquh73VO0
>>855
> 99999.. の後ろが 9 以外の数字で終わる場合に極端に時間がかかるようです。
こんな限定された状況に、よく気がつきましたね!
原因は仰るように、\#の100回制限だと思います。

> 3万文字の場合でもプロファイルでなく普通にテストする分には正常に動作する
私の環境では、Webページ上でも期待通りに動作しない(100桁に制限された数値が出力される)ようですが、うーん…。
"999..." に>859のフィルタをマッチさせると、複数回マッチして、"10000..." が幾つも出力されてしまいます。


100回以上 $SET(#=) されるのが問題なので、$SETの繰り返し回数を100回以内に収まるようにしてみました。

[Patterns]
Name = "incremented by one [Match ver] [2006/10/24] beta1.3"
Active = TRUE
Limit = 32767
Match = "(^(^[0-8]9+(^[0-9])))($LST(Num-plus))+(^[0-9])|"
"(^(^9))$SET(#=1)((^(^9))$LST(Num-plus))+(^[0-9])"
Replace = "\@"


$LST(Num-plus) は>>827に以下を追加します。


# 9 -- 512桁
9999999999...$SET(#=0000000000...)
# 9 -- 32桁 (NOT関数の桁数は 512 - 32 = 480桁)
99999999999999999999999999999999(^9999999999...)$SET(#=00000000000000000000000000000000)
# 9 -- 1桁 (NOT関数の桁数は 32 - 1 = 31桁)
9(^9999999999999999999999999999999)$SET(#=0)

865:think ◆MM0nnAOCiQ
06/10/24 22:48:12 vquh73VO0
>864のフィルタはProxomitronのLimitの上限(32767)を考慮に入れて、繰り返し回数が百回を超えることがないように作成してあります。
この方式だと「999....90」のテキストに対して [プロファイル] では落ちますが、[テスト] では落ちません。
Webページ上でも落ちなかったので、問題ないと思われます。

>>856
> それらしきフィルターをどこかで見た。
私のサイトで配布している "Kill without <a>" (汎用Webフィルタ集の一つ) がそれです。
2chでアドバイスを受けて作成したフィルタでして、アドバイスして頂いた方がアプロダに派生系(Link to Full Path) をUPされています。
URLリンク(wind.prohosting.com)
直接の関係はありませんが、Wikiでも同種のフィルタが公開されています。
URLリンク(abc.s65.xrea.com)

866:名無しさん@お腹いっぱい。
06/10/25 02:29:53 Gpa2YWWh0
今思いついたけど、+1するフィルタを使えばJSなしでdat converter作れるね。
どっちが速いかはワカランけど。
どうやって計測すればいいんだろう。

867:853
06/10/25 02:38:09 4LLBDAGk0
自分で作ってみた
lightbox_plusベースです

[Patterns]
Name = "lightbox part1"
Active = TRUE
Limit = 256
Match = "</head>"
Replace = "<script type="text/javascript" src="URLリンク(Local.ptron)
"<script type="text/javascript" src="URLリンク(Local.ptron)
"\r\n"
"</head>"

Name = "lightbox part2"
Active = TRUE
Limit = 256
Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4)"
Replace = "\0"\1\2.\3\4" rel="lightbox" "

作った後でレスに気付いた・・・orz

868:816
06/10/25 05:37:11 ptucl50B0
>>864
> 99999.. の後ろが 9 以外の数字で終わる場合
なるほど、\# の制限に引っかかってたのが原因でしたか、ありがとうございます。

>正常に動作する
すみません、誤解しやすい書き方でした。 これは "応答なしにならない" という意味でした。
\# の制限に引っかかるので期待した結果は返ってこないです。

>"999..." に>859のフィルタをマッチさせると、複数回マッチ
\# の制限に引っかかるとマッチングがそこで止まってしまう場合がありますね。
発生条件は分かりませんが100回を越えた時点で想定外なので調べる必要は無さそう。

>$SETの繰り返し回数を100回以内に収まるようにしてみました。
そうきましたか、すごい力技だw  これで対応出来る数字の桁数が一気に上がると。

9の繰り返しが100個以上連続するHTMLソースは見たことがないので、実用的にはこの対策は
必要無いかも知れませんね。 対策しておきたい人もいるかも知れないので好みの問題かな。

>>865
ありがとうございます、たぶんWikiで見たんだと思います。
あとサイトの更新お疲れ様でした、HTMLソースをちらっと見たんですが綺麗なソースですね。
thinkさん謹製のフィルターもありがたく使わせて頂きます。

869:816
06/10/25 05:46:05 ptucl50B0
>>863の補足。 test1のReplaceから $SET(A=) を削除したらタイムが2/3倍になった。
グローバル変数をこまめに解放するとかえって遅くなる。

>>867
∧_∧
( ´・ω・)  ・・・・・ドンマイ。
( つ旦O
と_)_)

870:816
06/10/25 10:47:42 vE/VYVdH0
> 99999.. の後ろが 9 以外の数字で終わる場合

これよく考えると \# は関係ないですね。

対象文字列が 9999....90 の場合はオミトロンのマッチングが1バイト進むごとに
999...90 の末尾までのテストを繰り返すから遅くなるようです。

他のフィルターが検索表現が 999...90 の場合でも数字の先頭から一度でマッチしまずが、
このフィルターはマッチしないので何度も数字の末尾までを行ったりきたりしてしまう。

1999...90 の場合も極端に遅くなるし間違いなさそう。( 50文字でテストし確認 )

数字の中に9を見つけたらそれ以降の数字が必ずマッチする書き方に変えたほうがいいのかな、
999... の末尾が 9 である確率は 1/10 だし、>>843と融合させる手も。

871:816
06/10/25 10:53:30 vE/VYVdH0
× 他のフィルターが
○ 他のフィルターは

でした。

872:853
06/10/25 12:19:52 4LLBDAGk0
悔しいので改良してみた。
横の□を押すと別ウィンドウで開く。


[Patterns]
Name = "lightbox_plus part1"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 256
Match = "</head>$STOP()"
Replace = "<script type="text/javascript" src="URLリンク(Local.ptron)
"<script type="text/javascript" src="URLリンク(Local.ptron)
"\r\n"
"</head>"

Name = "lightbox_plus part2"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "$NEST(<a\s*>,</a>)"
Limit = 1024
Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4(target="_blank"|)\5)\6"
Replace = "\0"\1\2.\3\4" rel="lightbox" \5\6\0"\1\2.\3\4" target="_blank">□</a>"



873:862
06/10/25 16:10:20 TjL9pAss0
フィルターお願いします。

874:名無しさん@お腹いっぱい。
06/10/25 16:47:46 Gpa2YWWh0
Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)\k"
Replyace = "<!--kill-->"

クラス属性って一回しか使えない(使わない)んだっけ?
class="information"にマッチする部分を全て消すフィルタだから誤動作しても責任は持たん。
あとは自分で条件を絞って消したくないところを消さないように改良することだな。

875:862
06/10/25 17:27:09 jr+Gvhks0
>>874
レスありがとうございます。
初心者なので
[Patterns]
Name =
Active =
URL =
Limit =
Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)\k"
Replace = "<!--kill-->"
後の項目もお願いします。

876:名無しさん@お腹いっぱい。
06/10/25 18:22:52 aCwuBKGn0
>>874
classは何回でも使える。
IDは1回だけ。

877:名無しさん@お腹いっぱい。
06/10/25 18:24:01 ls2H3Cmj0
>>874は荒らし

878:名無しさん@お腹いっぱい。
06/10/25 18:45:32 Gpa2YWWh0
初心者かどうかなんて理由にならん。
どれだけ自分で挑戦したのか、調べたのかを書いた上で数点質問を書くのが筋じゃないのか。
実用するに当たっての情報はすでに与えられているはずなのだが。

879:名無しさん@お腹いっぱい。
06/10/25 18:49:01 VKanZiVl0
>>862
おまえさん、以前もTV王国でフィルタうpして貰っていないか?
もしそうなら、それを元に自分で改良してみる努力をしたらどうだろう。
スレの流れを切って作業を丸投げ、うpが遅いと乞い、
同一人物のイタズラのような気がしてしまうのだが。
そうでないならスレ内を検索すれば簡単に見つかる。

880:think ◆MM0nnAOCiQ
06/10/25 19:21:48 5FqRZ3c50
流れを断ち切るようですが…。

>>868
> ...発生条件は分かりませんが100回を越えた時点で想定外なので調べる必要は無さそう。
すみません。再度、試してみたら、1000... が一つだけ出力されました。
試すフィルタを取り違えていたのかもしれません(汗)

> すごい力技だw
ははw
実は、他に100桁以上の数値はマッチしないフィルタも作ってみたんですが、どうにもシンプルに仕上がらなかったので、結果的にあの形に収まりました。
副次効果として、32桁以上の 999.... の処理が著しく高速化します。
必要ない人は、ブロックリストの一部をコメントアウトすればいいので、管理も楽だと思います。

>>870
> マッチングが1バイト進むごとに、999...90 の末尾までのテストを繰り返すから遅くなる
あ…、確かに、

Match = "9+{1,*}(^[0-9])"

だけでも、[プロファイル] でProxomitronが落ちますね。そうすると、対処法はこんな感じかな。

[Patterns]
Name = "incremented by one [Match ver] [2006/10/25] beta2"
Active = TRUE
Limit = 32767
Match = "(^(^[0-8]9+(^[0-9])))($LST(Num-plus))+(^[0-9])|"
"(^(^9))(^$TST(Numflag=1))$SET(#=1)((^(^9))$LST(Num-plus))+"
"((^[0-9])|$SET(Numflag=1)$TST(Numflag=0))"
Replace = "$SET(Numflag=)\@"

ようやく、熟成してきた気がします。
いかがでしょう?

881:think ◆MM0nnAOCiQ
06/10/25 19:24:36 5FqRZ3c50
ところで、話題のグローバル変数ですが、フラグを立てる(ある条件に合致したら、フラグを立て、以降フラグが立っている場合はマッチさせない)目的で使うと、高速化できることがあります。
>880のフィルタはその典型ですね。

"Charset: Set global variable", "Replace character: 2byte -> 1byte" でも使った手法で、実際これらが実用的なレベルの速度で動作するのはグローバル変数の効果が大きいと思います。
正直なところ、当初は「『全角文字 → 半角文字』の変換は1文字ずつ置換するわけだから、遅くて使いものにならないだろう」と悲観的だったのですが、これほど実用的になるとは思ってもいませんでした。
フィルタを作成依頼した人に感謝感謝です。

>>853,867,872
フィルタ作成お疲れ様です。ちょっと見てみましたが、まだ改善の余地があると思います。

---- lightbox_plus part1
</head> → (^(^</head>))
実質的な動作は変わらないのですが、$STOP() を使うなら消費しなくても良いかなと。

---- lightbox_plus part2
> Bounds = "$NEST(<a\s*>,</a>)"
$NEST と * を組み合わせると不具合が生じることがあるので、Bounds = "$NEST(<a\s[^>]+>,</a>)" にした方がよいかと思います。

> Match = "([^>]++href=)\0$AV((([^/]+//)\1|)(\2).(jpg|gif|bmp|png)\3(.html+|)\4(target="_blank"|)\5)\6"

・(target="_blank"|)\5 の場所が明らかにおかしい (属性値に入ってます)
・(\2) は括弧が要りません (正規表現とは違いますので…)
・グループ化の場所を変えれば、変数の数をもう少し減らせるかも

> Replace = "\0"\1\2.\3\4" rel="lightbox" \5\6\0"\1\2.\3\4" target="_blank">□</a>"
□などの全角文字はそのままの状態で記入すると、Shift_JISのWebページでしか作用せず、Shift_JIS以外のWebページでは文字化けを引き起こしてしまいます。
なので、ここは半角文字にするか、実体参照を用いて記述してください。
URLリンク(abc.s65.xrea.com)

882:名無しさん@お腹いっぱい。
06/10/25 20:17:29 6PSb8kEs0
>874について訂正。
\kと$STOP()を逆に覚えていたようで、ちょうど別のフィルタを作成中にそれに気がついたので訂正。
\kではなくて$STOP()が正しい。
Match = "$NEST($NEST(<div\s,*class=$AV(infomation)*,>),</div)$STOP()"
Replyace = "<!--kill-->"

ちなみにというほどでもないが、$AV()の中身をOR関数で二つ指定してやることで>862の望む動作をすることになる。
更に、件のウェブページにこのフィルタをOR関数を使うことで二回以上呼び出すことを試みる場合には
$STOP()を発動する条件として何らかのフラグ判定が必要になるだろう。
例えばこうだ。
マッチする毎に$SET(TV=0$GET(TV))としてやる。
こうするとTV変数に詰まっている0の数から過去に何度呼び出されたかを知ることができる。
このフィルタが二度だけ呼び出されると分かっているなら($TST(TV=00)$SET(TV=)$STOP()|)とすることで
二度マッチして以降はこのフィルタをOFFにすることができる。

883:名無しさん@お腹いっぱい。
06/10/25 20:55:25 6PSb8kEs0
相対リンク→絶対リンクに関するアイデアがある程度形になったので書き込みます。
アイデアは以下の構成。

1:現在のURLの階層を数える
$URL([^:]+:[^/]+/$SET(\0=1)([^./]+/$LST(increment)+)
\0には現在の階層数の値が入る

2:../の数を数える
((../)$LST(decrement))+
../を発見するたびに\0内の数を-1する
以上より(../)+の示す階層の深さを知ることができる

3:もう一度URLを下から辿りながら該当する階層まで上がる
$URL(
([^:]+:)\#
([^/]+/)\#$LST(decrement)$TST(\0=[^0])
(([^./]+/)\#$LST(decrement)$TST(\0=[^0]))+
)
階層を上がるたびに\0内の値を1ずつ減らし、その値が0になった時点でスタックに入っているURLが
(../)+の示す階層。
なおincrementリストとdecrementリストはそれぞれ\0に入っている一桁の数字の値を1だけ増やす又は減らすリストです。


884:名無しさん@お腹いっぱい。
06/10/25 20:59:52 6PSb8kEs0
例)

現在のURLは
URLリンク(vird2002.s8.xrea.com)
とします。
またhref="../download"なる相対リンクに飛びたい、という場合を考えます。

現在のURLの階層数は2です。
飛びたい先の相対リンクは../のグループを1つだけ持つので、
相対リンクの示す階層は2マイナス1から一階層目であることが分かります。
よって
URLリンク(vird2002.s8.xrea.com)
が../の示す階層になりますので、
downloadを付け加えて
URLリンク(vird2002.s8.xrea.com)がこの場合の相対リンクの示す絶対リンクです。

885:名無しさん@お腹いっぱい。
06/10/25 21:03:10 6PSb8kEs0
訂正。
incrementリスト/decrementリストは必ずしも一桁の数字を対象にはしません。
このリストを構成するに当たっては↑で議論されているフィルタを利用させていただくことになると思います。

886:think ◆MM0nnAOCiQ
06/10/25 23:05:08 5FqRZ3c50
ふぅ…、出来ました。フィルタ作りとは全く関係ないところで躓いていましたw

[Patterns]
Name = "ImagePopup lightbox_plus.js (1/2) [2006/10/25]"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^</head>))$STOP()"
Replace = "\t<link href='URLリンク(local.ptron)' charset='utf-8' type='text/css'>\r\n"
"\t<script type="text/javascript" charset="utf-8" src="URLリンク(local.ptron)
"\t<script type="text/javascript" charset="utf-8" src="URLリンク(local.ptron)

Name = "ImagePopup lightbox_plus.js (2/2) [2006/10/25]"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "$NEST(<a\s,</a>)"
Limit = 1024
Match = "([^>]++(\shref=$AV([^?#]++.(jpeg|jp[eg]|gif|png|bmp|ico|j2k)([?#]*|)))\1((^target=$AV(_blank))[^>])+)\#"
"(target=$AV(_blank)([^>]+)\#|) \0"
Replace = "\@ rel="lightbox"\0 <a\1><img></a>"

多分、これで>853氏の要望は全て満たせると思います。(少し私の好みが入っているので、気に入らない点は適宜改変してください。)
作ってから気がついたんですが、target="_blank" を消さなくても lightbox_plus は動作するんですね。(Wikiには target="_blank" が存在すると動作しないとありました)
アクセシビリティの観点から、target="_blank" を敬遠する方もいると思いますので、とりあえずはこれで良しとします。

887:think ◆MM0nnAOCiQ
06/10/25 23:11:51 5FqRZ3c50
>886のフィルタについて。

lightbox_plus.js で指定されている画像ファイルのパスを書き直さなければならない点に注意して下さい。
該当箇所は "Event.register(window,"load",function() {" 以下にある記述です。
# 例) 'loading.gif' を 'URLリンク(local.ptron)' にする。
これに気がつくのに、ずいぶんと時間を消費しました…。

(^(^</head>)) を使用したのは、消費しない事による高速化の狙いもありますが、</head> に複数のフィルタがマッチできるようにするためでもあります。
「消費しない」ということは何度でもマッチできるということですので、もう一度、他のフィルタで </head> にマッチさせることが出来ます。
Multiを使用せずに、同様の効果を得られるのが利点です。
(実は、私の作ったフィルタで </head> にマッチするものがあるので、消費すると個人的に拙いのです…。)

>>883-885
考察お疲れ様です。

> ../を発見するたびに\0内の数を-1する
私も同じ事を考えていました。インクリメント(+1) と デクリメント(-1) が必要ですよね。

一つ気になったのは置換スタックを使用している点です。
もし、>880ベースのフィルタを使うとしたら、既に使用されている置換スタックは使えません。
# 816氏のフィルタベースならバッティングしませんが、遅いとのことなので…。
どちらかのフィルタの置換スタックをグローバル変数に代替えするか、置換スタックを使わないアルゴリズムを考える必要がありますね。
>883は単純にグループ化して、ローカル変数に格納すれば良いような気もしますが、未検証のため自信なし…。

888:think ◆MM0nnAOCiQ
06/10/25 23:20:54 5FqRZ3c50
ごめんなさい。>886で少しミスしました。
2chで実体参照が有効なのを忘れて、そのまま投稿してしまいました。
下記が修正版になります。
お手数ですが、>886を適用された方は (2/2) だけ↓を取り込んでください。
# (1/2) は変わりありません。

[Patterns]
Name = "ImagePopup lightbox_plus.js (1/2) [2006/10/25]"
Active = TRUE
URL = "$TYPE(htm)"
Limit = 8
Match = "(^(^</head>))$STOP()"
Replace = "\t<link href='URLリンク(local.ptron)' charset='utf-8' type='text/css'>\r\n"
"\t<script type="text/javascript" charset="utf-8" src="URLリンク(local.ptron)
"\t<script type="text/javascript" charset="utf-8" src="URLリンク(local.ptron)

Name = "ImagePopup lightbox_plus.js (2/2) [2006/10/25] fixed"
Active = TRUE
URL = "$TYPE(htm)"
Bounds = "$NEST(<a\s,</a>)"
Limit = 1024
Match = "([^>]++(\shref=$AV([^?#]++.(jpeg|jp[eg]|gif|png|bmp|ico|j2k)([?#]*|)))\1((^target=$AV(_blank))[^>])+)\#"
"(target=$AV(_blank)([^>]+)\#|) \0"
Replace = "\@ rel="lightbox"\0 <a\1>&lt;img&gt;</a>"

889:名無しさん@お腹いっぱい。
06/10/26 00:03:47 4hgUqkpN0
3:もう一度URLを下から辿りながら該当する階層まで上がる
$URL(
([^:]+:)\#
([^/]+/)\#$LST(decrement)$TST(\0=[^0])
(([^./]+/)\#$LST(decrement)$TST(\0=[^0]))+
)

を置換スタックを用いないアルゴリズに修正するのは非常に簡単です。
むしろシンプルさの点でこちらのほうを先に考慮するべきでした。
$URL(
(
([^:]+:)
([^/]+/)$LST(decrement)$TST(\0=[^0])
(([^./]+/)$LST(decrement)$TST(\0=[^0]))+
)\1
)

$TSTとグループ化については検証しました。
マッチ欄 = "(((?)\0$TST(\0=[^0]))+)\1"
1文字読む毎にその文字が0でないかどうかをTESTし、最後の0までを\1に収めます。

890:883
06/10/26 00:05:45 4hgUqkpN0
IDが頻繁に変わりますが>883-885です。

891:名無しさん@お腹いっぱい。
06/10/26 02:31:16 VSM6AvXD0
改良ありがとうございます。
というか全面的に書いて頂いちゃいましたね。
自分で書いたものを直してもらうと勉強になります。

892:816
06/10/26 06:45:53 XApi7DgO0
>>880-881
乙です。 フラグを使って二回目以降のマッチングをキャンセルさせたんですね、早速プロファイルで
テストしたらバッチリでした。 グローバル変数を使うことで若干の速度低下はありますが安心して
使えるのでこちらのほうがいいですね、GJ。

自分も何通りかの回避策を考えていたんですが今までに出たフィルターより酷いものしか思い付かず
全部ボツになりました。 一番有力だったのが>>851のフィルターに分岐をもう1つ付けた↓の案です。

(^(^[0-8]9+(^[0-9])))$LST(Num-plus)(9$SET(#=0))+
|
(^(^9))$SET(#=1)(9$SET(#=0))+(^[0-9])
|
(9+{1,*})\0

マッチングが3つ目の分岐に来る時は対象の数字が  "999....9[0-8]"  (←0〜8のどれか) ...のはずなので、
"999..." の部分を単独で消費させ、次のマッチングテストを [0-8] のところから再開させようという狙いでした。

しかしマッチ回数が増えると返って遅くなったりデバックモードが見づらくなるなどの副作用が激しい上に
\0 か \@ のどちらを出力するかのフラグも必要になるので諦めました。

>全角文字 → 半角文字
グローバル変数も使い方次第ですね、とても参考になりました。

>>883
乙。

893:名無しさん@お腹いっぱい。
06/10/26 20:53:13 uv9TRhoo0
>796を参考にして
巨大な image/gif を読み込まないようにするものを書いてみたのですが、
いまのところ動作しません。

In = TRUE
Out = FALSE
Key = "Content-Length: large gif rejecter (in) (2006.10.26)"
URL = "$IHDR(Content-Type: image/gif)"
Match = "([#102400:*])\1"
Replace = "\k"

\kや$IHDRなどほとんど使わないので自信がないのですが、
何が間違っているのでしょうか。
一応、100KB以上のファイルを\kするようにしたつもりです。
テストしたURLでは、どちらのヘッダも送られてきています。
動作が確認されたら$LOGを追加してみようかと思っています。

894:>>862>>875
06/10/26 21:29:51 J2Mj+u6C0
フィルタお願いします。

895:名無しさん@お腹いっぱい。
06/10/26 21:48:29 4hgUqkpN0
>894
もう誰もこれ以上教える気はないようだからそろそろ去ったらどうだ?
何も期待できないと思うぞ。

896:think ◆MM0nnAOCiQ
06/10/26 21:55:09 38SjBeFP0
インクリメントが一区切り付いたので、デクリメントも作成してみました。

[Patterns]
Name = "decremented by one [Match ver] [2006/10/26] beta1"
Active = TRUE
Limit = 32767
Match = "(^(^[1-9](^[0-9])))$LST(Num-minus)(^[0-9])|"
"(^(^0+(^[0-9])))((^(^0))$LST(Num-minus))+(^[0-9])"
Replace = "\@"

# $LST(Num-minus)

0$SET(#=9)
1$SET(#=0)
2$SET(#=1)
3$SET(#=2)
4$SET(#=3)
5$SET(#=4)
6$SET(#=5)
7$SET(#=6)
8$SET(#=7)
9$SET(#=8)

仕組みは>864とほぼ同じです。

# ブロックリストの長文(000...)とグローバル変数は、これで未知の問題がないことを確認してから取り入れていきます。
# シンプルなフィルタから作り始めないと、問題点を特定できないことが多いので。

897:think ◆MM0nnAOCiQ
06/10/26 22:04:30 38SjBeFP0
>>889
お疲れ様です。
ハードルはほぼ乗り越えた感じですね。
後は基礎からじっくりと固めていけば、「相対URL→絶対URL」の新しいフィルタが出来そうです。

>>892
テスト有り難うございます。
良かったら、デクリメントもテストしていただけると嬉しいです。
正直、デクリメントの方が簡単にできてしまって、拍子抜けしてますw

>>891
画像のポップアップは私も興味ある機能でしたので、こちらこそ良い勉強になりました。
問題があったら、報告下さいね。

私のところでは、機能的には問題ありませんでしたが、少しWebページの読み込みが遅くなった気がします。
CSSで画像をロールオーバーさせるフィルタも作ってみたので、どちらが良いか比較中です。

898:think ◆MM0nnAOCiQ
06/10/26 22:24:12 38SjBeFP0
>>893
流してしまってすみません。

> \kや$IHDRなどほとんど使わないので自信がないのですが、何が間違っているのでしょうか。
\k は間違いないと思いますが、$IHDR の場所が変かもしれません
$IHDR を検索表現に置いてみてはどうでしょう?
私の環境では、それで動作しました。

# 「検索表現, 置換テキスト」に適用できるマッチングコマンドでも、URLマッチに指定できるとは限らないようです。
# URLマッチで動作しなかったら、検索表現へ移してみてください。

899:名無しさん@お腹いっぱい。
06/10/27 00:29:26 bF00szPi0
>852
すでにこの段階で既出だったんですね。
スレを追ってなかったので読み落してました。

でフィルタですが、実はインクレメントリストをまだ作っていないので現段階で完成はできませんが、それ以外は完成したと思います。

Name = "URL"
Active = FALSE
URL = "$TYPE(htm)"
Limit = 256
Match = "$NEST(<a\s,\1href=$AV(((../)+)\2(*)\3)(*)\4,>)"
"$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)"
"$TST(\2=(../$LST(decrement))+)"
"$URL(([^:]+://[^/]+/$LST(decrement)$TST(\0=[^0])([^./]+/$LST(decrement)$TST(\0=[^0]))+)\5)"
Replace = "<a \1href="\5\3"\4>"

../を発見することがこのフィルタの発動条件なので、手順は以前のものとは少し変わります。

900:名無しさん@お腹いっぱい。
06/10/27 00:32:14 bF00szPi0
解説

$NEST(<a\s,
\1
href=$AV(((../)+)\2(*)\3)
(*)\4
,>)

\1と\4にはhref="hogehoge"の以前の部分と以降の部分がそれぞれ入る。
\2には(../)+が入る。
\3には../ループより後ろの残りのURLが入る。

$URL(
[^:]+://
[^/]+/$LST(increment)
([^./]+/$LST(increment))+
)

現在のURLの階層の深さを測る。
階層情報は\0に保存するとする。

901:名無しさん@お腹いっぱい。
06/10/27 00:32:46 bF00szPi0
$TST(\2=(../$LST(decrement))+)
\2に入っている../ループの数だけ引き算する。

$URL(
(
[^:]+://
[^/]+/$LST(decrement)$TST(\0=[^0])
([^./]+/$LST(decrement)$TST(\0=[^0]))+
)\5
)

階層を1つ下りるごとに\0をー1しながら
\0が0になるまで階層を下りていく。

902:名無しさん@お腹いっぱい。
06/10/27 00:41:37 bF00szPi0
追加ですが、相対リンクを使うようなページの場合はほかのリンクも相対リンクである確率が高いので、
現在居る階層の深さ情報はグローバル変数に蓄えたて再利用できます。
すでに深さが既知の場合にはいくらか処理がシンプルになります。
そこで深さを測る処理に手を加えます。

(
$TST(SWITCH=1)
$SET(\0=URL)
|
$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)
$SET(URL=\0)$SET(SWITCH=1)
)
とします。

グローバル変数は他のURLに飛んだ時点でリセットされると記憶しています…。
この場合はSWITCH変数とURL変数はURLが変わったときにリセットされる必要があります。

903:893
06/10/27 00:57:45 euP+G8PW0
>898
どうもありがとうございます。
$IHDRの場所も疑ってはいたのですが、
検索表現であればどこに使ってもよいのだろうと思ってそのままにしていました。
ヘッダの URL: ○○ あたりと連携させないとだめなのかと思っていたところですが、
Match = "$IHDR(Content-Type: image/gif)([#102400:*])\1"
これであっさり動作しました。場所が重要だったとは……。
Server: Proxomitron というヘッダもついてきます。

904:名無しさん@お腹いっぱい。
06/10/27 14:58:28 yTsXlKfw0
内容の濃いスレになったね。
落ちないうちに保存しておこうっと。

905:名無しさん@お腹いっぱい。
06/10/27 15:33:23 cpcnkQie0
昨日、寝る前にベッドの中で思いついたアイデアを今思い出したので、書き残しておきます。
hrefの中で../を発見することが相対リンク→絶対リンクの発動条件ですが、これを肯定先読みを使うことで
よりスマートに、より複雑に、より分かりづらいフィルタに(w)することができます。

href=$AV((^(^../))
この段階でフィルタの発動条件を満たします。
この直後に現在いる階層の深さを測ります。(>902をそのまま利用)
($TST(SWITCH=1)$SET(\0=URL)|
$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1))

そしてhref内の../を数え上げて、decrementによって引き算します。
(../$LST(decrement))+(*)\3

最後に>900をそのまま利用します。
以上より
Match = "$NEST(<a\s,\1href=$AV((^(^../))($TST(SWITCH=1)$SET(\0=URL)|"
"$URL([^:]+://[^/]+/$LST(increment)([^./]+/$LST(increment))+)$SET(URL=\0)$SET(SWITCH=1))(../$LST(decrement))+(*)\3)(*)\4,>)"
"$URL(([^:]+://[^/]+/$LST(decrement)$TST(\0=[^0])([^./]+/$LST(decrement)$TST(\0=[^0]))+)\5)"
Replace = "<a \1href="\5\3"\4>"

href=$AV()の中に詰め込んだだけで、それ以外は何も変わりません。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5354日前に更新/373 KB
担当:undef