そもそもの動機は、HNS 風の '/?yyyymmdd' を tDiary 風の '/?date=yyyymmdd' に変換できなかったので、もっと汎用的なものにしたい、ということでした。 そうなると、'?...' のような CGI っぽいものはまず論外ですが、'/yyyymmdd.html' というのも、将来 HTML でなくなるかもしれないし避けたかったのでした。 拡張子を避けるだけなら Apache のコンテントネゴシエーションを適切に使えば可能なのですが、結局のところ、年は 4 桁、月と日は必ず 2 桁という 20020305 のような表記にすくなからず違和感を感じていたのです。
そんなときに、hns-dev ML で Kenji さんの記事を拝見して、「おぉ、これだ!」と思ったのでした。 しかし実際に試してみると、最新表示と月表示と日表示とで URI の階層の深さが違うことがけっこう面倒でした。 mod_rewrite で場当たり的な解決をして相対パスを使いつづけるのもいいのですが、 今は、これまで <a href="plugin/"> と書くところを、<a href="<% @index %>plugin/"> と書くようにしています。
それはそれとして、きたさんが一連のプラグインをもりもり anchor を使うように改良してくださり、しかも calendar2.rb も素敵に改良してくださったので、さっそくいただきました。ありがとうございます。
「年は 4 桁、月と日は必ず 2 桁という 20020305 のような表記にすくなからず違和感を感じていた」と言うからには、むきになって月日から不要な '0' を省くように [anchor.rb] を書き換えました ('to_i' と 'sub' とどっちがコストが低いのかわかりませんが)。
def anchor( s ) if /^(\d{4})(\d{2})(\d{2})?#?([pc]\d*)?$/ =~ s then if $4 then "#$1/#{$2.to_i}/#{$3.to_i}/##$4" elsif $3 "#$1/#{$2.to_i}/#{$3.to_i}/" elsif $2 "#$1/#{$2.to_i}/" end else "" end end
また、ずんださんの jtime.rb をいただいて、tdiary.conf の末尾に require 'jtime' を追加して、date_format を修正して実際の日付表示にも '0' が出ないようにし、さらには [title.rb] でタイトルもカスタマイズしてここにも '0' が出ないようにしました。これで全部かな?
メールを受信してみると...
Subject: <d>:2002-03-05-1 ただただし
わはは、すげーこだわりだ
むぅ、まだあったか!
で、調べてみると、skel/mail.rtxt にハードコーディングされていましたので、これも @date_format を参照するように変更し、あと、@mail_header に日本語が含まれていると生 JIS サブジェクトなメールが送られそうな気がしたので、全体を to_mime ( ... ).to_jis で囲むように変更しました。
--- skel/mail.rtxt.orig Wed Feb 27 11:47:56 2002 +++ skel/mail.rtxt Tue Mar 5 11:57:35 2002 @@ -2,8 +2,7 @@ To: <%= @author_mail %> Date: <%= date %> Message-Id: <%= message_id %> -Subject: <%= @mail_header %>:<%= @date.strftime( '%Y-%m-%d' ) %>-<%= serial %> - <%= to_mime( @name.to_jis ) %> +Subject: <%= to_mime( "#{@mail_header}:#{@date.strftime( @date_format )}-#{serial} #{@name}".to_jis ) %> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: 7bit
これを私の first commit to tDiary にしてもよろしいでしょうか?>たださん。
[skel/mail.rtxt] たださんの指摘を受けて、サブジェクトが過度に長くならないように -serial の前後で MIME 化を切って、改行を入れるようにしました。@mail_header, @date_format ともに MIME エンコードされているので日本語を使えるようになりました。
[tdiary.rb] そのたださんからのつっこみメールが、
Message-Id: <tdiary.<d>.20020305.2@fdiary.net>
のようになっていたのですが、その前に私が一度つっこみの実験をして、update.rb から非表示にしていたときのつっこみメールと同じ Message-Id になってしまいました。
そこで、Message-Id に月日だけでなく時分秒も入れるようにし、今後日本語が含まれる可能性のある @mail_header は Message-Id に含めないようにしました。
[tdiary.conf.sample] @mail_header で日本語が使えないという注意書きを消しました。
わはは、すげーこだわりだ
そうすっと、@mail_headerも日本語可になるのかな。MIME化すると文字列が長くなっちゃうので、適当に改行を入れた方が良いと思い、@nameは別の行に分けてあるのです。だから適当に分割すべきかも。
……という点も考慮してくれたら、commitして下さい:-)