最終更新: 2011-02-13T07:59+0900
末尾の " をURLの一部だとみなすせい。wiki_parser.rbの 198行目辺りの
r = %r<(((https?|ftp):[\(\)%#!/0-9a-zA-Z_$@.&+-,'"*=;?:~-]+)|([0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+\.[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+))>
を
r = %r<(((https?|ftp):[\(\)%#!/0-9a-zA-Z_$@.&+-,'*=;?:~-]+)|([0-9a-zA-Z_.-]+@[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+\.[\(\)%!0-9a-zA-Z_$.&+-,'"*-]+))>
に変更。メールの方はいじってないけど不都合があるならそっちも " を削ればいい。
tDiary-2.1.3から採用される新Wikiスタイル(HikiDoc)では末尾の " が URLには含まれない模様。つまり修正の必要なし。
このページを読む限りダブルクォーテーションをURIの一部と見なす必要はないような。
山形括弧 "<" と ">" そして二重引用符 (") は排除されます。なぜなら、これらはしばしばURI周辺の区切り子として文書や作法の分野で使われるからです。 "#" 記号は排除されます。なぜなら、これはURIを、URI参照中のフラグメント識別子(第4項)から区切るのに使われるからです。 百分率記号は排除されます。なぜなら、これは回避された文字の符号化に使われるからです。
class TDiaryUpdate < TDiaryAdmin
def initialize( cgi, rhtml, conf )
@title = conf.to_native( cgi.params['title'][0] )
@body = conf.to_native( cgi.params['body'][0] )
@hide = cgi.params['hide'][0] == 'true' ? true : false
super
end
protected
def do_eval_rhtml( prefix )
super
@plugin.instance_eval { update_proc }
@diary.eval_rhtml({'date_format'=>''}, PATH) rescue nil; # この行を追加
anchor = @plugin.instance_eval( %Q[anchor "#{@diary.date.strftime('%Y%m%d')}"].untaint )
clear_cache( /(latest|#{@date.strftime( '%Y%m' )})/ )
raise ForceRedirect::new( "#{@conf.index}#{anchor}" )
end
end
一行追加した。更新時の負荷増加なんて無問題でしょ。optが手抜きなのは気にしない方向で。
加えて、カテゴリを使った場合は update_procで category.rbによって section.bodyが評価されるので更にゴニョゴニョしないと「更新時に一度だけ実行」というわけにはいかない。
ここでハタと気付く。update_procでできるなら tdiary.rbをいじることないやん。category.rbの真似しよう。
コレ(↓)。category.rbのより簡単なのは、category.rbでは Pluginクラスとは違うクラス(のインスタンス)の中で評価するために bindingを受け渡したりしてるから。
add_update_proc{
diary = @diaries[@date.strftime('%Y%m%d')];
diary.each_section do |s|
apply_plugin(s.subtitle_to_html);
apply_plugin(s.body_to_html);
end
}
minirubyによる bcc32/mkexports.rbの実行中に sortの部分で Segmentation faultを起こす。
sortをとばして続行。
make testで sample/test.rbを実行すると Array#sortで Segmentation fault。必ず止まる。この部分でだけ止まる。sort!ではなく sortで起きるのでコレではないみたいだし。う〜む。
Array#sortって dupして sort!してるだけじゃないの?
まっさらなWindowsにするのが一番の解決法だとは思いますが(-_-;)
miniruby (ruby 1.8.3 (2005-05-12) [i386-bccwin32]) で実験してみたら
[1,2,3].sort!
は問題なし。
1], [2], [3.sort!;
では Segmentation fault
1], [2], [3.sort!{|a,b| a<=>b };
は問題なし。
array.cの sort_2で何かが起こっている。
変更点は
# user_css2.rb: $Revision3% lastupdate:2005-05-10
#
# Append CSS fragment via Preferences Page.
#
add_header_proc do
[@conf["user_css2..css"], @conf["user_css2.#{@conf.theme}.css"]].map{|css|
next unless(css);
<<-STYLE
<style type="text/css"><!--
#{css.gsub(/\x0d\x0a|\x0a|\x0d/, "\n\t\t")}
--></style>
STYLE
}.join('');
end
unless @resource_loaded then
def user_css2_label
'テーマの微調整'
end
def user_css2_desc
<<-HTML
<h3>CSS断片</h3>
<p>下から選んだテーマに、スタイルシートを追加設定する場合、以下にCSSの断片を入力してください。</p>
HTML
end
def user_css2_buttonlabel1
'このテーマを修正する'
end
def user_css2_buttonlabel2
'CSSファイルを開く'
end
end
if(!@conf_theme_list && @mode =~ /^(conf|saveconf)$/ && @cgi.params['conf'][0] == 'user_css2')
# plugin/00default.rb からのコピー
@conf_theme_list = []
Dir::glob( "#{::TDiary::PATH}/theme/*" ).sort.each do |dir|
theme = dir.sub( %r[.*/theme/], '')
next unless FileTest::file?( "#{dir}/#{theme}.css".untaint )
name = theme.split( /_/ ).collect{|s| s.capitalize}.join( ' ' )
@conf_theme_list << [theme,name]
end
end
add_conf_proc( 'user_css2', user_css2_label ) do
if @mode == 'saveconf' then
if(@cgi.params['user_css2.css'].empty? || @cgi.params['user_css2.css'][0].empty?)
@conf.delete("user_css2.#{@cgi.params['user_css2.theme'][0]}.css");
else
@conf["user_css2.#{@cgi.params['user_css2.theme'][0]}.css"] = @cgi.params['user_css2.css'][0];
end
end
theme = (@cgi.params['user_css2.theme'][0] or @conf.theme);
theme_hash = Hash[* @conf.options.map{|thm,css| (thm =~ /^user_css2\.(.+)\.css$/) ? [$1, $1.split(/_/).collect{|s| s.capitalize}.join(' ')+' (deleted)'] : nil}.compact.flatten ].update( Hash[* @conf_theme_list.flatten] );
theme_hash[''] = '* All Theme *';
theme_url = theme_url(); theme_url += '/' if(theme_url[-1] != ?/);
<<-HTML
#{user_css2_desc}
<select name="user_css2.theme">
#{theme_hash.keys.sort.map{|t| %(<option value="#{CGI::escapeHTML(t)}"#{' selected' if t == theme}>#{CGI::escapeHTML(theme_hash[t])}</option>)}.join}
</select>
<input type="submit" value="#{user_css2_buttonlabel1}">
<input type="button" value="#{user_css2_buttonlabel2}" onclick="window.open('#{theme_url}'+this.form['user_css2.theme'].value+'/'+this.form['user_css2.theme'].value+'.css')" >
<p><textarea name="user_css2.css" cols="70" rows="15">#{CGI::escapeHTML( @conf["user_css2.#{theme}.css"].to_s )}</textarea></p>
HTML
end