一括表示

− 野ざらし言 −

[3092] 実体参照生成

めざら 2009/01/25(Sun) 06:42
<mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
ブログからの転載です。
メールアドレスを収集されにくくする方法のひとつに,
mailto:〜の文字列を部分的に実体参照化するというものがあります。
十六進の文字コードを見ながら十進に直すのも面倒なので,マクロにしてみました。

= Entity.def v0.10 =
*m
1 "entity"
        ?.
        (mb-2)?.                        ;文字ブロックのみ実行
        mp[, ps[=pa, #G ps], mp],
        (mb)?{ &m("改行をまたいでいるようです") . }
        mi[-, &s
        mb=2, ux[+, #y ux],
        ax=$2C00, &i($21) rn=cx+dx,     ; 時刻でrandomize
        &Sn(pa) l=r, i-,
        ps[=pa,
        #61 #<                          ;作業用入力窓(put2)に呼び出す
 :l     &r
        (r%2 && r%3)                    ;6〜7割方の確率で変換
                ?#d
                ?{ c=cd, #g &?("&#%d;",c) }
        (l>i++)?>l
        #m                              ;出力
 :z     ps], mi],
        &d .
*

 うーん,注記するような技術的なものが何もない…。
 …と思ったら,#61の出力時にpsのバッファの大きさを超えていると,
途中で切れちゃうじゃない。(^^; コリャダメダ

 うーん,作り直しだなぁ。バッファを別の大きなものにすり替えなきゃ。
ラインバッファも使えないか…。文字数を測っておいてジカにやるかな。

[3093] Re: 実体参照生成

めざら 2009/01/25(Sun) 20:49
[3092]へのコメント <mezala@nifty.com> http://homepage3.nifty.com/mezala/index.html
 使ってみると,サッパリだめだったので作り直したのですが,
色々と粗が見えてきました。…というか,いまさら気付いたことも。

 ブロック範囲って,単に mb を真にしただけでは再現しないんですね。
かと言ってサイレント中に &d を入れるわけにもいけないので,考えた末
#28 でラインバッファに入ってみることにしました。

= Entity.def v0.20 = by H_ear
#if 0
実体参照変換(ブロック範囲をランダムに変換)
使用目的は mailto:で指定したアドレスを収集されにくくするため
#endif
* mad for vz!
1 ^\ "" ?.
        (mb-2)?{ &m("[!]mbモード確認.") . }
        (mr-$80)??{ &m("[!]mrモード確認.") . }
        mp[, ps[=pa, #G ps], mp],
        (mb)?{ &m("[!]改行を含んでいます.") . }
        &SF(pa,' ') (r)?{ &m("[!]空白を含んでいます.") . }
        &s mb=2, #28 (xc>0)?#B mb-,     ;mbを指定するだけでは再現しない
        &Sn(pa) l=r, i-,                ;paのサイズが上限
        ax=$2C00, &i($21) rn=cx+dx,     ;時刻を乱数の種に
 :l     ; ---- main loop ----main loop
        (ck)?{ &m("全角文字があったので停止しました.") >z }
        &r
        (r%2 && r%3)                    ;6〜7割方の確率で変換
                ?#d
                ?{ cd[, #g &?("&#%d;",0]) }
        (l>i++)?>l
 :z     ; ---- exit ----
        &d #] .
*
[Variables]
        l       length
        i       counter
[Buffers]
        pa      as ps
[History]
2009/01/21 0.10 1st
2009/01/25 0.20 エラーチェックをそれなりに増やした
[Notes]
mbに代入するだけではブロックモードにならない
#61の窓内部でpsのサイズを越えると出力時に途中で切れる

↑ このページの先頭