不断の日記 (の体裁をした覚え書き) です。
2008-10-31 (Fri) [長年日記]
■ iPhone でアクセスされたときはサイドバーを消す
というわけで、 iPhone でアクセスされたときには、サイドバーを消す(出力しない)ように変更した。
方法は、既に
- ただのにっき : tDiary を iPod touch/iPhone 対応に(仮) (2007-10-10)
- ただのにっき : tDiary: iPod touch/iPhone対応をもう少し & YouTube対応 (2007-10-25)
で公開されていたので、これらのページを参考にした。
これらのページに記載されている内容を基に 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

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