/ 最近 .rdf 追記 設定 本棚

脳log[tDiary: 2006-06-04~]



2006年06月04日 (日)

[tDiary]テーマ:横幅を制限してみた。

以前から横にだらだら延びた段落は醜いと思っていた。

このようなページを見つけた。C O U L D:固定か可変かそれが問題だ

早速 cssに下記の一行を追加した。

body { max-width: 50em }

emってな曖昧な単位に少し不安があるが Firefox1.5と IE7.0で同じように見えるので良しとする。


2006年05月30日 (火)

[tDiary] tdiary/hikidoc.rb: <pre>の中でも強調したい

<pre>の中だからってタグが書けないわけじゃなし。インライン要素なら OKのはず。

C:\Documents and Settings\ds14050\デスクトップ>diff -u hikidoc.rb~ hikidoc.rb
--- hikidoc.rb~ 2005-10-06 16:42:35.000000000 +0900
+++ hikidoc.rb  2006-05-30 06:34:32.265625000 +0900
@@ -142,8 +142,9 @@
   end

   def restore_pre( text )
-    ret = unescape_meta_char( text, true )
-    ret = restore_plugin_block( ret, true )
+    text = inline_parser( text )
+#    ret = unescape_meta_char( text, true )
+#    ret = restore_plugin_block( ret, true )
   end

   ######################################################################
  • inline_parser()が ''強調'', '''もっと強調''', ==打消==, [[WikiName]]や URLっぽい本文を解釈する。
  • unescape_meta_char( text, true )をコメントアウトすることでメタ文字({, }, :, ', ", |)のエスケープを有効にしてるのは inline_parser()によってシングルクォートなどが解釈されるようになった結果、<pre>の中にシングルクォートそのものを書く方法がなくなったから。
  • restore_plugin_block(ret, true)をコメントアウトしてるのは <pre>の中でもプラグインを使いたいから。
  • メタ文字をリストアップしていて気付いたけどイコールとブラケットがメタ文字に含まれてなくてエスケープができないから、こんなふうに ==打ち消し== とか [[WikiName]] の書き方の例示ができなくね? 左のは {{'=='}} みたいにプラグイン記法でなんとかしたけど。

 <pre>の中と外でマークアップが変わらないことのテスト

 [Wikiソース]
''test''
 ''test''
''test&'test\'''
 ''test&'test\'''
 [変換後のHTML]
<p><em>test</em></p>
<pre>
<em>test</em>
</pre>
<p><em>test&amp;'test'</em></p>
<pre>
<em>test&amp;'test'</em>
</pre>

2006年01月17日 (火)

[tDiary] 新Wikiスタイル(HikiDoc):引用の中で<pre>。できるやん

20050929p02で引用の中で <pre>を使いたい言うてましたが、どうやら最初から可能だったご様子。

hikidoc.rbからの引用。

 ######################################################################
 # blockquote

 BLOCKQUOTE_RE = /^""[ \t]?/
 BLOCKQUOTES_RE = /(#{BLOCKQUOTE_RE}.*\n?)+/

 def parse_blockquote( text )
   text.gsub( BLOCKQUOTES_RE ) do |str|
     str.chomp!
     str.gsub!( BLOCKQUOTE_RE, '' )
     "\n<blockquote>\n%s\n</blockquote>\n\n" % block_parser(str)
   end
 end
  1. BLOCKQUOTES_RE(行頭が""と 1つか0個の空白・タブ文字で始まる行の連続)にマッチする文字列が見つかったら
  2. BLOCKQUOTE_RE(各行頭の ""とそれに続く 1つか0個の空白・タブ文字) を取り除いた後
  3. block_parser()を呼び
  4. その結果を <blockquote>タブで囲む。
 ######################################################################
 # block parser
 ######################################################################

 def block_parser( text )
   ret = text
   ret = parse_plugin( ret )
   ret = parse_pre( ret )
   ret = parse_comment( ret )
   ret = parse_header( ret )
   ret = parse_hrules( ret )
   ret = parse_list( ret )
   ret = parse_definition( ret )
   ret = parse_blockquote( ret )
   ret = parse_table( ret )
   ret = parse_paragraph( ret )
   ret.lstrip
 end

block_parser()は見ての通り、整形済みテキスト(pre)、見出し、リスト、引用、テーブル、段落などを解釈する。

つまり、引用の中には (<pre>も含めて) block_parserが解釈するブロック要素が全て書ける。

何故今日まで気付かなかったのかというとコレ↓

 BLOCKQUOTE_RE = /^""[ \t]?/

ドキュメントでは一般的に、「行頭に "" を付ければ引用になります」と書かれるけど、hikidoc.rbの実装では それに続く空白・タブ文字も引用を表す記号の一部として扱われている。行頭の空白は整形済みテキストを表すりっぱな Wiki記法の一部なのに。

そういうわけで

 引用の中で整形済みテキストを書くときは 行頭を「""  」(注:スペースは 2つ)で始めます。

2005年11月11日 (金)

[tDiary]レーベルが取得できないときは出版社を表示してお茶を濁してみました。

現在のフォーマット:

'#{author} 【#{title}】 #{label.empty? ? publisher : label}'

20051108#p06のやり方では、『9S(3)』を使って「電撃文庫」を取得できるのは試したし、「ジャンプコミックス」と「角川スニーカー文庫」も多分取得できる。でもこれら一部大手を除くと、富士見ミステリーもファミ通文庫も、その他殆どのレーベルで取得できない。<ItemAttributes>拡張してよ、アマゾンさん。


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項)から区切るのに使われるからです。 百分率記号は排除されます。なぜなら、これは回避された文字の符号化に使われるからです。