nanashinonozomi.com : fmemo , PGP と GnuPG
fmemo : «前の日記(2008-10-30 (Thu)) 最新 次の日記(2008-11-01 (Sat))»

fmemo

不断の日記 (の体裁をした覚え書き) です。


2008-10-31 (Fri) [長年日記]

iPhone でアクセスされたときはサイドバーを消す

というわけで、 iPhone でアクセスされたときには、サイドバーを消す(出力しない)ように変更した。

方法は、既に

で公開されていたので、これらのページを参考にした。

これらのページに記載されている内容を基に iphone-detector.rb プラグインを作成し、misc/plugin/iphone-detector.rb としてインストール。 設定画面から当該プラグインを有効化した後、前者のページに従って、ヘッダとフッタの修正すれば OK 。

先日リリースされた tDiary 2.3.1 には、後者のページに相当する内容が組み込まれているようなので、それらの内容についてはカット。 そのままだと、 iPhone で表示したときに、右サイドに指1本分くらいのスペースができてしまってバランスが悪かった *1 ので、 CSS の断片を追加してごまかしておいた。

# iphone-detector.rb: iPod/iPhone detector
# Ref. <http://sho.tdiary.net/20071010.html#p01>
# Ref. <http://sho.tdiary.net/20071025.html#p01>
 
def iphone?
  return @cgi.user_agent =~ /iPhone|iPod/
end
alias ipod? iphone?
 
add_header_proc do
  if iphone? then
    %Q|<style type="text/css"><!--
         body {
           font-size : x-small;
           padding   : 0.5em;
         }
       --></style>|
  end
end

この設定だと、フォントが若干小さいが、 くぱぁ と拡大できるので無問題ということに。

情報源/参考情報

*1 noto テーマの場合。他のテーマだとどうなるかは未確認。

tdiaryserch で検索すると「Plugin error in '00default.rb'.」のエラーが発生

tDiary 2.3.1 へアップデートしたら tdiarygrep の出力が文字化けするようになったので、代わりに SVN リポジトリの tdiary/contrib/util/tdiarysearch に収録されている tdiarysearch を試してみた。

ソースを見ると、出力が UTF-8 化されるなど、既に UTF-8 化に対応済みの様子。 期待しつつ試してみたが、検索の際に、

Plugin error in '00default.rb'.
private method `scan' called for nil:NilClass
(plugin/00default.rb):20:in `load_plugin'

のエラーが発生してしまう。 *1 むーん(~_~;;

*1 search.rb に何も引数を渡さずに search.rb を呼び出すだけなら、このエラーは発生しない。 (検索語句を入力するフォームとボタンが表示される。)

tdiarygrep の出力を文字化けしないように修正

tDiary 2.3.1 へアップデートしたら tdiarygrep の出力が文字化けするようになった問題だが、どうにかこうにか解決。

tdiarygrep の出力を UTF-8 化したら、あっさり解決…と思ったら、日本語の文字列(例: マクロス)で検索したときに、 「premature end of regular expression:」 エラーが発生する場合があるという問題が発生。 その問題の解決に手間取ってしまった。

結局、正規表現を使っている部分で、漢字コードとして EUC-JP が明示的に指定されている箇所があったことに気付かず、修正していなかったことが原因だった。 その部分を修正したところ、無事、エラーを解消することができた(^^;

おそらく、 UTF-8 で処理されている部分と EUC-JP で処理されている部分が混在したせいで、文字列によっては、おかしくなる場合があったのだろう。

--- search.rb.org	2008-10-31 16:04:15.127875000 +0900
+++ search.rb	2008-10-31 16:13:06.768500000 +0900
@@ -26,7 +26,7 @@
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <html lang="ja-JP">
   <head>
-    <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
+    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <meta http-equiv="Content-Language" content="ja-JP">
     <meta name="robots" content="none">
     <title>tDiary Grep</title>
@@ -98,32 +98,6 @@
 require 'erb'
 require 'uri'
 
-# borrowed from tdiary
-require 'nkf'
-begin
-  require 'uconv'
-
-  def Uconv.unknown_unicode_handler(unicode)
-    if unicode == 0xff5e
-      "!A"
-    else
-      raise Uconv::Error
-    end
-  end
-
-  def to_euc(str)
-    begin
-      Uconv.u8toeuc(str)
-    rescue Uconv::Error
-      NKF::nkf('-e -m0', str)
-    end
-  end
-rescue LoadError
-  def to_euc(str)
-    NKF::nkf('-e -m0', str)
-  end
-end
-
 #
 # Main
 #
@@ -138,7 +112,7 @@
 BEGIN { $defout.binmode }
 
 def main
-  $KCODE = 'EUC'
+  $KCODE = 'UTF8'
   cgi = CGI.new
   html = '<html><head><title></title></head><body><p>error</p></body></html>'
   begin
@@ -158,7 +132,7 @@
       elsif not cgi.valid?('q')
         return search_form_page()
       else
-        query = to_euc([cgi.params['q']].compact.flatten.join(' '))
+        query = [cgi.params['q']].compact.flatten.join(' ')
         html = search_result_page(setup_patterns(query))
         save_query(query, query_log()) if LOGGING
         return html
@@ -183,7 +157,7 @@
 def send_html(cgi, html)
   print cgi.header('status' => '200 OK',
                    'type' => 'text/html',
-                   'charset' => 'euc-jp',
+                   'charset' => 'UTF-8',
                    'Content-Length' => html.length.to_s,
                    'Cache-Control' => 'no-cache',
                    'Pragma' => 'no-cache')
@@ -193,7 +167,7 @@
 def setup_patterns(query)
   patterns = split_string(query).map {|pat|
     check_pattern pat
-    /#{Regexp.quote(pat)}/ie
+    /#{Regexp.quote(pat)}/iu
   }
   raise WrongQuery, 'no pattern' if patterns.empty?
   raise WrongQuery, 'too many sub patterns' if patterns.length > 8
@@ -208,7 +182,7 @@
 end
 
 def split_string(str)
-  str.split(/[\s#{Z_SPACE}]+/oe).reject {|w| w.empty? }
+  str.split(/[\s#{Z_SPACE}]+/ou).reject {|w| w.empty? }
 end
 
 def save_query(query, file)
@@ -398,7 +372,7 @@
     title, body = @source.split(/\n/, 2)
     sprintf('%-30s | %s',
             title.to_s.strip,
-            remove_tags(body.to_s).gsub(/[\s#{Z_SPACE}]+/oe, ' ').slice(/\A.{0,60}/me))
+            remove_tags(body.to_s).gsub(/[\s#{Z_SPACE}]+/ou, ' ').slice(/\A.{0,60}/mu))
   end
 
   private
本日のツッコミ(全1件) [ツッコミを入れる]
いっとく (2010-02-14 (Sun) 14:26)

はじめまして。 <br>tDiaryで使用していたgrep.rbの、tDiaryバージョンアップによる文字化けで困っていたところ、こちらを発見しまして、無事解決しました。 <br>情報ありがとうございます。助かりました。