# $Id: schedule.rb,v 1.1.1.1 2000/11/23 10:34:06 not Exp $ # edit 2001.3.15-2002.9.3 =begin schedule.rb -> schedule_y.rb nDiary Plug-in スケジュールの表示 今後のスケジュールを表示します。 option: format=str str は任意の文字列。以下の文字列は展開されます。 %A 曜日の名称(Sunday, Monday...) %a 曜日の省略名(Sun, Mon...) %B 月の名称(January, February...) %b 月の省略名(Jan, Feb...) %c 日付と時刻 %d 日(01-31) %j 年中の通算日(001-366) %m 月を表す数字(01-12) %U 週を表す数.最初の日曜日が第1週の始まり(00-53) %W 週を表す数.最初の月曜日が第1週の始まり(00-53) %w 曜日を表す数.日曜日が0(0-6) %x 日付 %Y 西暦を表す数 %y 西暦の下2桁(00-99) %% %自身 title=str スケジュールに付けるタイトルを指定します。 max=num 表示する最大行数 past=num num日前の経過してしまった日付の情報から表示します 余) 日付の入力が半端でも適当に末尾補完+ソートします。 日付の末尾が適当文字列だと、表示日付の末尾N(<=2)文字をそれに置換。 今日を越してるスケジュールは色変えてます。 入力日付は数値8桁型を想定。区切り「-」「/」は無視。 一部html出力のulとかclass回りいじってます。 exsample: =end def plug(opt) max = 8 if opt['max'].to_i == 0 today = Time::now past = today - opt['past'].to_i * 86400 coming = today + 30 * 86400 start = past.strftime("%Y%m%d") last = coming.strftime("%Y%m%d") #####check##### now = today.strftime("%Y%m%d") schedule = {} opt['format'] = opt['format'] ? opt['format'] : '%0m/%0d' begin open(opt['file'], 'r'){ |file| file.each{ |line| #####check##### # date, value = line.split(/\t/) datestr, value = line.split(/\t/) date = datestr.gsub(/[-\/]/, '') #余計な日付区切記号除去 tailstr = '' date.gsub!(/([^\d]+)/){ str = $1 tailstr << str if (str =~ /上/) #上旬とか→1日に str = '01' elsif (str =~ /中/) #中旬とか→10日に str = '10' elsif (str =~ /下/) #下旬とか→20日に str = '20' elsif (str =~ /^x+$/i) || (str =~ /^\?+$/) str = '' #xxとか??とか→削っちゃう else str = '01' #その他謎の文字列→1日に end str } if date =~ /[^\d]/ #うまく認識できなかった日付はデータから除いとく $stderr.puts "WAR; cannot decode date; " + date else if date.size < 8 #桁数が8桁に満たない場合は1日にしとく size = 8 - date.size date = date + ('0' * (size - 1)) + '1' tailstr = '?' * size end t = nil t = Time::local(date[0..3].to_i, date[4..5].to_i, date[6..7].to_i) day = t.strftime2(opt['format']) #日付文字列作っとく len = day.size - tailstr.size - 1 len = day.size - 2 - 1 if tailstr.size > 2 day = day[0..len] + tailstr if tailstr.size > 0 #日付文字列の尻変更 if start <= date and date <= last then schedule[date] = [] unless schedule[date] schedule[date] << [day, value] end end } } rescue Errno::ENOENT return '' end max = opt['max'].to_i max = 8 if max == 0 cnt = 0 str = '' #####check##### # str << "\n" if opt['title'] then str = "
\n
#{opt['title']}
\n
#{str}
\n
" end return str end