読者です 読者をやめる 読者になる 読者になる

1.9でtDiary動いた

ruby

cgi.rbを大分使いやすく改造しているのですが、
ようやくtDiaryが動いたのでお披露目します。

右下に1.9.0と出ているのがお分かりでしょうか?
さて、tDiaryも無修正で動く訳ではなく、
ある程度の修正は必要です。
とりあえず、表示できて、書き込みができるところまでです。
現時点のdiffを置きます。

Index: update.rb
===================================================================
--- update.rb	(revision 32)
+++ update.rb	(working copy)
@@ -1,12 +1,13 @@
 #!/usr/bin/env ruby
+# vim:set fileencoding=euc-jp:
 #
 # update.rb $Revision: 1.21 $
 #
 # Copyright (C) 2001-2003, TADA Tadashi <sho@spc.gr.jp>
 # You can redistribute it and/or modify it under GPL2.
 #
-BEGIN { $defout.binmode }
-$KCODE = 'n'
+BEGIN { $defout.binmode if RUBY_VERSION<"1.9"}
+$KCODE = 'n' if RUBY_VERSION < "1.9"
 
 begin
 	if FileTest::symlink?( __FILE__ ) then 
Index: index.rb
===================================================================
--- index.rb	(revision 32)
+++ index.rb	(working copy)
@@ -1,12 +1,13 @@
 #!/usr/bin/env ruby
+# vim:set fileencoding=euc-jp:
 #
 # index.rb $Revision: 1.35 $
 #
 # Copyright (C) 2001-2006, TADA Tadashi <sho@spc.gr.jp>
 # You can redistribute it and/or modify it under GPL2.
 #
-BEGIN { $defout.binmode }
-$KCODE = 'n'
+BEGIN { $defout.binmode if RUBY_VERSION<"1.9"}
+$KCODE = 'n' if RUBY_VERSION<"1.9"
 
 begin
 	if FileTest::symlink?( __FILE__ ) then
@@ -17,6 +18,7 @@
 	$:.unshift( org_path.untaint )
 	require 'tdiary'
 
+  CGI.accept_charset="EUC-JP" if RUBY_VERSION>"1.9"
 	@cgi = CGI::new
 	conf = TDiary::Config::new(@cgi)
 	tdiary = nil
@@ -68,7 +70,7 @@
 			if @cgi.mobile_agent? then
 				body = conf.to_mobile( tdiary.eval_rhtml( 'i.' ) )
 				head['charset'] = conf.mobile_encoding
-				head['Content-Length'] = body.size.to_s
+				head['Content-Length'] = body.bytesize.to_s
 			else
 				require 'digest/md5'
 				body = tdiary.eval_rhtml
@@ -78,7 +80,7 @@
 					body = ''
 				else
 					head['charset'] = conf.encoding
-					head['Content-Length'] = body.size.to_s
+					head['Content-Length'] = RUBY_VERSION<"1.9" ? body.size.to_s : body.bytesize.to_s
 				end
 				head['Pragma'] = 'no-cache'
 				head['Cache-Control'] = 'no-cache'
@@ -86,6 +88,7 @@
 			head['cookie'] = tdiary.cookies if tdiary.cookies.size > 0
 			print @cgi.header( head )
 			print body
+      #@cgi.out(head){body}
 		end
 	rescue TDiary::ForceRedirect
 		head = {
Index: tdiary/lang/ja.rb
===================================================================
--- tdiary/lang/ja.rb	(revision 32)
+++ tdiary/lang/ja.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # tDiary language setup: Japanese(ja)
 #
@@ -5,7 +6,7 @@
 # You can redistribute it and/or modify it under GPL2.
 #
 
-$KCODE = 'e'
+$KCODE = 'e' if RUBY_VERSION<"1.9"
 
 def html_lang
 	'ja-JP'
Index: tdiary/wiki_style.rb
===================================================================
--- tdiary/wiki_style.rb	(revision 32)
+++ tdiary/wiki_style.rb	(working copy)
@@ -222,12 +222,12 @@
 			unless body1.empty?
 				current_section = @sections.pop
 				if current_section then
-					body1 = "#{current_section.body.sub( /\n+\Z/, '' )}\n\n#{body1}"
+					body1 = "#{current_section.body.sub( /\n+\Z/, '' )}\n\n#{body1.force_encoding("EUC-JP")}"
 				end
 				@sections << WikiSection::new( body1, author )
 			end
 			section = nil
-			body2.each do |l|
+			body2.each_line do |l|
 				case l
 				when /^\![^!]/
 					@sections << WikiSection::new( section, author ) if section
Index: tdiary/defaultio.rb
===================================================================
--- tdiary/defaultio.rb	(revision 32)
+++ tdiary/defaultio.rb	(working copy)
@@ -13,7 +13,7 @@
 		header, body = data.split( /\r?\n\r?\n/, 2 )
 		headers = {}
 		if header then
-			header.each do |l|
+			header.each_line do |l|
 				l.chomp!
 				key, val = l.scan( /([^:]*):\s*(.*)/ )[0]
 				headers[key] = val ? val.chomp : nil
Index: tdiary/tdiary_style.rb
===================================================================
--- tdiary/tdiary_style.rb	(revision 32)
+++ tdiary/tdiary_style.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # tdiary_style.rb: tDiary style class for tDiary 2.x format. $Revision: 1.13 $
 #
Index: plugin/05referer.rb
===================================================================
--- plugin/05referer.rb	(revision 32)
+++ plugin/05referer.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # 01referer.rb: load/save and show today's referer plugin
 # $Revision: 1.17 $
@@ -159,7 +160,7 @@
 
 def referer_add_to_diary( diary, body )
 	return unless body
-	body.each do |r|
+	body.each_line do |r|
 		count, ref = r.chomp.split( / /, 2 )
 		next unless ref
 		diary.add_referer( ref.chomp, count.to_i )
Index: plugin/00default.rb
===================================================================
--- plugin/00default.rb	(revision 32)
+++ plugin/00default.rb	(working copy)
@@ -655,7 +655,7 @@
 	mail_header = (@conf['comment_mail.header'] || '').dup
 	mail_header << ":#{@conf.date_format}" unless /%[a-zA-Z%]/ =~ mail_header
 	mail_header = @date.strftime( mail_header )
-	mail_header = comment_mail_mime( @conf.to_mail( mail_header ) ).join( "\n " ) if /[\x80-\xff]/ =~ mail_header
+	mail_header = comment_mail_mime( @conf.to_mail( mail_header ) ).join( "\n " )# if /[\x80-\xff]/ =~ mail_header
 
 	rmail = ''
 	begin
Index: plugin/10spamfilter.rb
===================================================================
--- plugin/10spamfilter.rb	(revision 32)
+++ plugin/10spamfilter.rb	(working copy)
@@ -1,3 +1,5 @@
+# vim:set fileencoding=euc-jp:
+#
 # Copyright (C) 2005  akira yamada
 # You can redistribute it and/or modify it under GPL2.
 
Index: plugin/50sp.rb
===================================================================
--- plugin/50sp.rb	(revision 32)
+++ plugin/50sp.rb	(working copy)
@@ -1,3 +1,5 @@
+# vim:set fileencoding=euc-jp:
+#
 # 01sp.rb - select-plugins plugin $Revision: 1.5 $
 
 SP_PREFIX = 'sp'
Index: plugin/ja/05referer.rb
===================================================================
--- plugin/ja/05referer.rb	(revision 32)
+++ plugin/ja/05referer.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # 05referer.rb: Japanese resource of referer plugin
 #
@@ -31,7 +32,7 @@
 	<p>→<a href="#{h @update}?referer=volatile" target="referer">既存設定はこちら</a></p>
 	<p><textarea name="only_volatile" cols="70" rows="10">#{h @conf.only_volatile2.join( "\n" )}</textarea></p>
 	<h3 class="subtitle">#{label_referer_table}</h3>
-	#{"<p>リンク元リストのURLを、特定の文字列に変換する対応表を指定できます。1件につき、URLと表示文字列を空白で区切って指定します。正規表現が使えるので、URL中に現れた「(〜)」は、置換文字列中で「\\1」のような「\数字」で利用できます。</p>" unless @conf.mobile_agent?}
+	#{"<p>リンク元リストのURLを、特定の文字列に変換する対応表を指定できます。1件につき、URLと表示文字列を空白で区切って指定します。正規表現が使えるので、URL中に現れた「(〜)」は、置換文字列中で「\\1」のような「\\数字」で利用できます。</p>" unless @conf.mobile_agent?}
 	<p>→<a href="#{h @update}?referer=table" target="referer">既存設定はこちら</a></p>
 	<p><textarea name="referer_table" cols="70" rows="10">#{h @conf.referer_table2.collect{|a|a.join( " " )}.join( "\n" )}</textarea></p>
 	HTML
Index: plugin/ja/00default.rb
===================================================================
--- plugin/ja/00default.rb	(revision 32)
+++ plugin/ja/00default.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # ja/00default.rb: Japanese resources of 00default.rb.
 #
Index: plugin/ja/10spamfilter.rb
===================================================================
--- plugin/ja/10spamfilter.rb	(revision 32)
+++ plugin/ja/10spamfilter.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 #
 # ja/spamfilter.rb: resource of ja $Revision: 1.17 $
 #
Index: plugin/ja/50sp.rb
===================================================================
--- plugin/ja/50sp.rb	(revision 32)
+++ plugin/ja/50sp.rb	(working copy)
@@ -1,3 +1,5 @@
+# vim:set fileencoding=euc-jp:
+#
 # Japanese resources of 01sp.rb $Revision: 1.2 $
 
 =begin
Index: skel/footer.rhtml
===================================================================
--- skel/footer.rhtml	(revision 32)
+++ skel/footer.rhtml	(working copy)
@@ -1,7 +1,7 @@
 <%# footer.rhtml $Revision: 1.8 $ %>
 <%%=footer_proc%>
 <div class="footer">
-Generated by <a href="http://www.tdiary.org/">tDiary</a> version <%=h TDIARY_VERSION %><br>
+Generated by <a href="http://www.tdiary.org/">tDiary</a> version <%=h TDIARY_VERSION %><br />
 Powered by <a href="http://www.ruby-lang.org/">Ruby</a> version <%=h RUBY_VERSION %><% if /ruby/i =~ @cgi.gateway_interface %> with <a href="http://www.modruby.net/">mod_ruby</a><% end %>
 </div>
 </body>
Index: tdiary.rb
===================================================================
--- tdiary.rb	(revision 32)
+++ tdiary.rb	(working copy)
@@ -1,3 +1,4 @@
+# vim:set fileencoding=euc-jp:
 =begin
 == NAME
 tDiary: the "tsukkomi-able" web diary system.
@@ -12,6 +13,7 @@
 $:.insert( 1, File::dirname( __FILE__ ) + '/misc/lib' )
 
 require 'cgi'
+CGI.accept_charset="EUC-JP" if RUBY_VERSION>"1.9"
 require 'uri'
 begin
 	require 'erb_fast'
@@ -465,7 +467,8 @@
 			@cgi = cgi
 			load
 
-			instance_variables.each do |v|
+			instance_variables.each do |str|
+           v=str.to_s
 				v.sub!( /@/, '' )
 				instance_eval( <<-SRC
 					def #{v}

そんなにいっぱいはありません。

  • マジックコメントの埋め込み
  • accept_charsetの指定
  • String#eachをString#each_line
  • その他細かい修正(diffを見てください)

※ 注意があります。
ruby1.9へEncoding.default_externalをEUC-JPにするように
#!/usr/local/bin/ruby1.9 -Eeucjp
みたいにして、起動してください。
以上、だんだんまともにだんだん動くようになってきた
ruby-1.9のcgi.rbでした。