/ 最近 .rdf 追記 設定 本棚

脳log[tDiary: 2005-09-29~]



2005年09月29日 (木)

最終更新: 2011-02-13T06:07+0900

[tDiary]新Wikiスタイル(HikiDoc)の拡張案:引用の中で<pre>

引用文の表現力が上がってるのだけど、もうひとつ、引用の中で整形済みテキスト(pre)を使いたい。

すぐ上のセクション(↑)で、改行を維持するために引用の中のコード部分だけを<pre>で囲ってるのだけど、そのソースはちょっと汚い。(上から二行目と下から二行目で)直接HTMLを埋め込んでるから後々 tDiaryをXHTML化したりするのが難しくなる。HTML化はWikiパーサに全て任せたい。tdiary/hikidoc.rbを拡張して引用文中の<pre>が可能にならないものか。

""7×7の二次元配列aがあるとする。たとえば、以下のようなものである。
"" int a[7,7] ={
""   {1,1,1,1,1,1,1},
""   {1,0,0,0,0,0,1},
""   {1,0,1,1,1,0,1},
""   {1,0,0,0,1,1,1},
""   {1,0,0,1,0,0,1},
""   {1,0,0,0,1,0,1},
""   {1,1,1,1,1,1,1}
"" };
""いま、aを迷路と見立てる。a[x,y]が0の箇所は歩けて、1の箇所は歩けな

 [2006-01-17] (最初から)できるみたいよ _|‾|○

20060117p04


2005年09月24日 (土)

[tDiary] tDiary-2.1.2.20050917をテスト稼働

新しい Wikiスタイル(HikiDoc)を使いたいがために。

引用の中に

見出しとか

孫引用とか

  • リストを挿入してみたりできる

でも多分 http://vvvvvv.sakura.ne.jp/ds14050/diary/ で日記にアクセスすると上の引用部分が下のように見えてるはず。(実際にはキャッシュが働くので新旧tDiaryのどっちが最後にキャッシュを作ったかによる)

引用の中に

!見出しとか

""孫引用とか

*リストを挿入してみたりできる

http://vvvvvv.sakura.ne.jp/ds14050/diary/ に加えた変更を http://vvvvvv.sakura.ne.jp/ds14050/diary-test/ に写し終えたら diary-test/ を diary/ にリネーム。


2005年09月22日 (木)

[tDiary]プラグイン (category.rb):category_anchor()を複数カテゴリに対応

同カテゴリの日記をリスト表示するページでメインのHTMLを出力してるのは category.rbの中の category_list_sections()。こいつとか Category::Info#make_anchor()はパラメータとして複数のカテゴリを与えられることを想定している。けれどこの 2つのメソッドは「@mode == 'categoryview'」なページの中でしか使えない。

どういうことか。複数のカテゴリ名がパラメータとして与えられればそれらを全てリスト表示できるのに、そういうパラメータを持ったリンクを作る手段がなかった。(Category::Info#make_anchor()にはその可能性があったけど使える場所がカテゴリページ内に限られるので外からの入り口にはなれない)

カテゴリページへのリンクを作るのにはもう一つ方法があって、それが同じ category.rb内にある category_anchor()。これは Category::Info#make_anchor()とは対照的にカテゴリページの外でしか使えない*。category_anchor()を複数カテゴリ対応にすれば晴れて入り口のできあがり。

*  「カテゴリページ」を表す「class TDiaryCategoryView < TDiaryBase」には @dateが存在しないから、Pluginオブジェクトの @dateも nullになって、category_anchor()が @dateを参照するところでエラーになる 。


2005年07月28日 (木)

[tDiary]kw.rb: キーワードを utf-8にエンコードするオプション追加

そうしないと Wikipediaにリンクできないので。Ruby-1.8.2以降ならNKFでUTF-8が扱えるはず。古いNKFが入ってなければ。


2005年07月20日 (水)

[tDiary]tDiary-2.1.2にアップデート

書き込みできるかテスト。


2005年06月14日 (火)

[tDiary]プラグイン:index_list.rb: 「最新」「月」表示に目次を。

細かいことは以前の日記に書いてあるので、ここではビャッとソースを引用。

# index_list.rb
#
# 「最新」「月」表示に対応した目次を表示。
# recent_listやtitle_listと違い日付のリンク先は日別表示でなくページ内。
# その為に、diary.rhtmlをいじって日付にアンカーを付ける必要がある。
# 骨格にrecent_list.rbを使用。
# [2005-06-15] tdiary-2.1.1 N日表示対応
# [2005-04-20] 月表示では昇順に。

def index_list(date_format = nil, show_title = true)
	if(@mode == 'latest')
		limit = @conf.latest_limit;
	elsif(@mode == 'month')
		limit = 31;
	else
		return '';
	end
	date_format ||= @date_format;
	latest_start_ymd = @date.strftime('%Y%m%d');
	result = %Q[<ul class="index-list">\n];
	b = lambda {|ymd|
		next if(@mode == 'latest' && latest_start_ymd < ymd);
		break if(limit <= 0);
		diary = @diaries[ymd];
		next unless(diary.visible?);

		result << %Q[\t<li><a href="##{ymd}">#{diary.date.strftime(date_format)}</a>];
		if(show_title && diary.title)
			result << %Q[ #{diary.title}];
		end
		result << %Q[\n\t\t<ul class="index-list-item">\n];
		i = 1;
		if(!@plugin_files.grep(/\/category.rb$/).empty? && diary.categorizable?)
			diary.each_section{|section|
				result << "\t\t<li>";
				result << section.categories.collect{|c| category_anchor("#{c}")}.join;
				result << ' '+section.stripped_subtitle_to_html if(section.stripped_subtitle);
				result << "</li>\n";
				i += 1;
			}
		else
			diary.each_section{|section|
				if(section.subtitle)
					result << %Q[\t\t<li>#{section.subtitle_to_html}</li>\n];
				end
				i += 1;
			}
		end
		result << "\t\t</ul>\n\t</li>\n";
		limit -= 1;
	}
	begin
		@diaries.keys.sort.send( (@mode=='latest' ? :reverse_each : :each), &b);
	rescue LocalJumpError # <- break
		# Procオブジェクトで breakは使えないのだろうけど
		# それをブロックとして渡してるんやからエラーにせんでもええやん。> ruby-1.8.2
	end
	result << "<ul>";
	return apply_plugin(result);
end

2005年06月08日 (水)

[tDiary]プラグイン:compress.rb 手動バックアップ

@conf.data_path以下の日記データを圧縮・ファイル化する。


2005年05月21日 (土)

[tDiary] プラグインが自分の位置(日付、セクション番号)を知るのって難しくない?

@mode == 'month'のときなんか @dateは一日を指してるだけだし。

プラグインから見えるインスタンス変数 Plugin@dateは TDiaryHoge@dateと同じなので Plugin@mode(TDiaryHoge#mode)に対応した(月表示なら月単位での)日付しか入ってない。それよりも body_(enter|leave)_procに与えられるような HogeDiary#dateが欲しい。


2005年05月20日 (金)

最終更新: 2011-02-13T07:59+0900

[tDiary] wiki_parser.rb: URLを""で括ると自動リンク、画像挿入がうまくいかない

末尾の " を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_$.&+-,'"*-]+))>

に変更。メールの方はいじってないけど不都合があるならそっちも " を削ればいい。

 追記:2005-09-26

tDiary-2.1.3から採用される新Wikiスタイル(HikiDoc)では末尾の " が URLには含まれない模様。つまり修正の必要なし。

このページを読む限りダブルクォーテーションをURIの一部と見なす必要はないような。

山形括弧 "<" と ">" そして二重引用符 (") は排除されます。なぜなら、これらはしばしばURI周辺の区切り子として文書や作法の分野で使われるからです。 "#" 記号は排除されます。なぜなら、これはURIを、URI参照中のフラグメント識別子(第4項)から区切るのに使われるからです。 百分率記号は排除されます。なぜなら、これは回避された文字の符号化に使われるからです。


2005年05月17日 (火)

[tDiary] 更新時に特別なことをしたいプラグインがあったので

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の真似しよう。

 追記:2005-09-26

コレ(↓)。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
}

[tDiary] Wikiスタイルでソースを引用した時に、えらく広範囲に打ち消し線が表示されて困ってるあなた(俺?)へ

==

==

のように、プラグイン呼び出しを装って単なる文字列を埋め込むのがよろしかろう。

いやそれよりも整形済みテキストとして表示すれば。


2005年05月09日 (月)

[tDiary]プラグイン: user_css2.rb 修正。

使用中の最新版はコレプラグインの概要と前の版はココ

変更点は

  • 地の文で theme/ ディレクトリを探索するように変更。(@secure=trueで動くかな?)
  • [CSSファイルを開く]ボタンを追加。javascript使用。(修正するにはオリジナルを参照できなくては)
# 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

2005年04月27日 (水)

[tDiary]プラグイン: amazon5.rb (amazon.rbのAmazonWebService利用版。)

Amazon Webサービスを使ってキャッシュをXMLで保存する以外は amazon.rbと大体*一緒。ひとつだけ新しいメソッド追加。

5に意味は無くて、2とか3は既にありそうだな〜ってことで。

 [2005-04-28]

キャッシュが効いてなかったり、nilに対して存在しない呼び出しをしてたり、AssociateIDを一か所埋め込んでなかったり、widthとheightを間違えてたり、amazon.rbのisbn()を呼び出してたりしたのを修正。多分 amazon.rbなしでも動くんじゃないかな (この日記では両方オンにして二種類キャッシュしてXMLの方だけ使って表示してる)。

 [2005-04-29]

ruby-amazon(RAA)なんてあるんな。知らんかった。標準添付じゃないから使わなくてもいいかな。

* では何が違うかっていうとバグが潜んでそうなところが違う。


2005年04月25日 (月)

[tDiary]wiki_parser.rb: 引用文の行頭の空白を勝手に消さないように変更。

引用ってのは改行も空白も含めてそのまま写したいから、全てのテーマに

blockquote {
  white-space: pre;
}

を適用した上で、wiki_parser.rbの

			when /^""\s*(.*)/ # block quote

			when /^""(.*)/ # block quote

に変更。IE6.0の互換モードでは white-space:preが効かないらしいが tDiaryは HTML4.01Strictな HTMLを吐くので互換モードにはならず問題なし。

 [2005-06-23]

結局は改行を挿入する方法が欲しかったわけだけど、今日、やっと、その方法がわかった。Wikiスタイルの書き方の、

」(2つの二重引用符)で始まる行は、引用(<blockquote>扱い)となる。文中の改行は、通常段落の行頭に「」を付けたものとして扱う。

と書いてある意味が今になってわかりました。行頭の「""」を取り除いた部分を通常の段落と同じように扱うという意味なのね。

""段落1:単一の改行は無
""視されます。
""
""段落2:空改行は段落の区切りになります。

段落1:単一の改行は無 視されます。

段落2:空改行は段落の区切りになります。