# $Id: calendar.rb,v 1.2 2000/12/15 14:53:00 not Exp $
# 2000.1.?? °ìÊâ ½¤Àµ
=begin
calendar_x.rb
nDiary Plug-in ¥«¥ì¥ó¥À¡¼¤ÎºîÀ®
³Æ¡Ê²áµî¡ËÆüÉդؤΥê¥ó¥¯ÉÕ¤¤Î¥«¥ì¥ó¥À¡¼¤òºîÀ®¤·¤Þ¤¹¡£
option:
lang=en ·î̾¡¢ÍËÆü¤ò±Ñ¸ìɽµ¤Ë¤·¤Þ¤¹¡£
lang=en2 ÍËÆü¤ò2ʸ»ú±Ñ¸ìɽµ¤Ë¤·¤Þ¤¹¡£
head=string ·îÊÌ¥Õ¥¡¥¤¥ë̾¤ËËÁƬÉôʸ»úÎóstring¤ò¤·¤Þ¤¹¡£
dayhead=string ÆüÉÕ¥¢¥ó¥«¡¼¤ËËÁƬÉôʸ»úÎóstring¤ò¤·¤Þ¤¹¡£
¡ÊxhtmlÂкö¡£ndiary-version¤Ë¤è¤ë¸ß´¹À¤Ï¹Í¤¨¤Ê¤¤¡Ë
width=num ÆüÉÕÇÛÎó¤ÎÉý¤ò»ØÄꤷ¤Þ¤¹¡£1¡Á31¡£
width=max ÆüÉÕÇÛÎó¤ÎÉý¤òÆü¿ôÃúÅ٤ˤ·¤Þ¤¹¡£
width=over ÆüÉÕÇÛÎó¤ÎÉý¤òÆü¿ô°Ê¾å¤Ç½µ¤Ç³ä¤ì¤ë¿ô¤Ë¤·¤Þ¤¹¡£
height=num ÆüÉÕÇÛÎó¤Î¹â¤µ¤ò»ØÄꤷ¤Þ¤¹¡£
title=on/off ¥¿¥¤¥È¥ë¹Ô¤ò¤Ä¤±¤Þ¤¹¡¿¾Ã¤·¤Þ¤¹¡£
titlelink=on/off ¥¿¥¤¥È¥ë¹Ô¤ËÀè·î¡¿Íè·î¤Ø¤Î¥ê¥ó¥¯¤ò²Ã¤¨¤Þ¤¹¡¿¾Ã¤·¤Þ¤¹¡£
week=on/off ÍËÆü¹Ô¤ò¤Ä¤±¤Þ¤¹¡¿¾Ã¤·¤Þ¤¹¡£
¡Êwidth¤¬½µ¤Ç³ä¤ì¤º¡¢°ìÎó¤Ç¤Ê¤¤»þ¤Ï¤Ä¤±¤ì¤Þ¤»¤ó¡Ë
weekcolor=on/off ÍËÆü¤Ë¿§¤ò¤Ä¤±¤Þ¤¹¡¿¾Ã¤·¤Þ¤¹¡£
weekbgcolor=on/off ÍËÆü¤ËÇØ·Ê¿§¤ò¤Ä¤±¤Þ¤¹¡¿¾Ã¤·¤Þ¤¹¡£
exsample:
<!--plug=calendar_x?height=2?lang=en2-->
=end
def plug(opt)
require 'date2'
#³ÆÊÑ¿ô¤Î½é´ü²½
width = 14 #Éý
height = -1 #¹â¤µ
title = 'on' #¥¿¥¤¥È¥ë¹Ô
titlelink = 'on' #¥¿¥¤¥È¥ë¹ÔÁ°¸å·î¥ê¥ó¥¯
week = 'on' #ÍËÆü¹Ô
weekcolor = 'on' #ÍËÆü¿§
weekbgcolor = 'on' #ÍËÆüÇØ·Ê¿§
lang = 'en2' #¥¿¥¤¥È¥ë¡¢ÍËÆüʸ»úÎ󥻥åÈ
classflag = 'off' #CSS½üµîÂкö¡£ËÜÍè¤Ê¤é classflag = 'on'
tab = '' #TAB½üµîÂкö¡£ËÜÍè¤Ê¤é tab = "\t"
part = '' #·îÆâ¥Õ¥¡¥¤¥ëʬ³äÂкö¡¢¡Öa,b,c¡×¤Ê¤É¡£Ì¤Âбþ
#³ÆÊÑ¿ô¤ÎÆÉ¹þ
head = opt['head'] if opt['head'] =~ /.+/ #ÆþÎϤ¬¤¢¤ì¤Ð
dayhead = opt['dayhead'] if opt['dayhead'] =~ /.+/ #ÆþÎϤ¬¤¢¤ì¤Ð
width = opt['width'].to_i if opt['width'] =~ /^\d+$/ #¿ô»ú¤Ê¤é
width_option = opt['width'] if opt['width'] =~ /^\D+$/ #Èó¿ô»ú¤Ê¤é
height = opt['height'].to_i if opt['height'] =~ /^\d+$/ #¿ô»ú¤Ê¤é
week = opt['week'] if opt['week'] =~ /.+/
weekcolor = opt['weekcolor'] if opt['weekcolor'] =~ /.+/
weekbgcolor = opt['weekbgcolor'] if opt['weekbgcolor'] =~ /.+/
title = opt['title'] if opt['title'] =~ /.+/
titlelink = opt['titlelink'] if opt['titlelink'] =~ /.+/
lang = opt['lang'] if opt['lang'] =~ /.+/
#²¿¤«¤ÎÆþÎϤ¬¤¢¤ì¤Ð¡¢¤È¤¤¤¦¤Î¤Ï¡¢¡Ö!~ nil¡×¤Ç¤ÏȽÄꤷ¤Ê¤¤¤é¤·¤¤
#null¤¬ÆþÎϤµ¤ì¤Æ½é´üÃͤ¬¥ê¥»¥Ã¥È¤µ¤ì¤Æ¤·¤Þ¤¦¡£¤Î¤Ç¡¢¡Ö=~ /.+/¡×¤ËÊѹ¹
width_option = 'max' if width == 0 #Éý0¤Î½èÍý
width_option = 'max' if height == 0 #¹â¤µ0¤Î½èÍý
width = 7 if width_option == 'over' #¸å½èÍý¤ÎÅÔ¹ç¤Ç²¾ÆþÎÏ
#ǯ·îÆü¾ðÊó½èÍý###
#ǯ¾ðÊó¡¢·î¾ðÊó
if self.kind_of?(LastDiary) then
thismonth = @diarys[0][0..5]
elsif self.kind_of?(PastDiary) then
thismonth = @targetMonth
else
return
end
y = thismonth[0..3].to_i #º£Ç¯¾ðÊó
m = thismonth[4..5].to_i #º£·î¾ðÊó
ny = y
nm = m + 1
if nm > 12 then
ny += 1
nm = 1
end
nextmonth = sprintf("%04d%02d", ny, nm) #Íè·î¾ðÊó
nextfile = @outputDirectory + head + nextmonth + part + '.html'
nexturl = head + nextmonth + part + '.html'
py = y
pm = m - 1
if pm < 1 then
py -= 1
pm = 12
end
prevmonth = sprintf("%04d%02d", py, pm) #Àè·î¾ðÊó
prevfile = @outputDirectory + head + prevmonth + part + '.html'
prevurl = head + prevmonth + part + '.html'
#ÍËÆü¾ðÊó
if lang == 'en' then #±Ñ¸ì»°Ê¸»úÍËÆü
wdayname = %w(Sun Mon Tue Wed Thu Fri Sat)
mo = Time::local(y,m).strftime("%Y/%m")
prevtext = "<<"
nexttext = ">>"
elsif lang == 'en2' then #±Ñ¸ìÆóʸ»úÍËÆü
wdayname = %w(Sn Mn Te We Th Fr St)
mo = Time::local(y,m).strftime2("%Y.%m")
prevtext = "<-"
nexttext = "->"
else #´Á»ú°ìʸ»úÍËÆü
wdayname = %w(Æü ·î ²Ð ¿å ÌÚ ¶â ÅÚ)
mo = Time::local(y,m).strftime2("%Yǯ%m·î")
prevtext = "Àè·î"
nexttext = "Íè·î"
end
if weekcolor == 'on' then #ÍËÆüʸ»ú¿§¤Ä¤±
wdayname[0] = '<font color="#ff0000">' + wdayname[0] + '</font>'
wdayname[1] = '<font color="#550011">' + wdayname[1] + '</font>'
wdayname[2] = '<font color="#440022">' + wdayname[2] + '</font>'
wdayname[3] = '<font color="#330033">' + wdayname[3] + '</font>'
wdayname[4] = '<font color="#220044">' + wdayname[4] + '</font>'
wdayname[5] = '<font color="#110055">' + wdayname[5] + '</font>'
wdayname[6] = '<font color="#0000ff">' + wdayname[6] + '</font>'
end
wdaybg = ['', '', '', '', '', '', '']
if weekbgcolor == 'on' then #ÍËÆüʸ»úÇØ·Ê¿§¤Ä¤±
wdaybg[0] = ' bgcolor="#ffcccc"'
wdaybg[1] = ''
wdaybg[2] = ''
wdaybg[3] = ''
wdaybg[4] = ''
wdaybg[5] = ''
wdaybg[6] = ' bgcolor="#ccccff"'
end
#Æü¾ðÊó
day = (1..28).to_a.concat((29..31).to_a.delete_if{ |d|
!Date::exist?(y, m, d)
}).collect!{ |d|
d.to_s
} #¤è¤¯È½¤é¤Ê¤¤¤¬¡¢¤³¤ì¤ÇËè·î¤ÎÆü¿ôȽÄ꤬
#¤Ç¤¤Æ¡¢ÆüÉÕ¾ðÊ󤬯þ¤ë¤é¤·¤¤
len = day.size #Æü¿ô¾ðÊó
if height != -1 then
if week == 'on' then
width = 7
else
width = day.size / height
end
end #¹â¤µ¤«¤é¤ÎÉýµÕ»»¡¤ÍËÆüÉդλþ¤ÏÊÝα¡¤²¼¤Ç½èÍý
#¤³¤³¤ÇÌäÂê¡£À°¿ô±é»»¤Ç¡ÖÀÚ¤ê¾å¤²¡×¤ò¤¹¤ë¤Ë¤Ï¤É¤¦¤¹¤ì¤Ð¤¤¤¤¤Î¤Ç¤·¤ç¤¦
#ruby¤Ï¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÀڤ겼¤²¤é¤·¤¤
wday = 0 #ÍËÆü½ç½øÄ´À°¾ðÊó
if width_option == 'max' then #°ìÎó¤ÇÆü¿ôÃúÅÙ·¿,
#¤¢¤ì¡¢Âçʸ»ú¾®Ê¸»ú´Ø·¸¤Ê¤·¥Þ¥Ã¥Á¤Ã¤Æ
#¤É¤¦¤¹¤ë¤ó¤À¤Ã¤±¡©
width = len
wday = Time::local(y,m,1).wday
elsif (width % 7) == 0 then #Ä̾ï
1.upto(Time::local(y,m,1).wday){
day.unshift("¡¡")
}
5.downto(Time::local(y,m,day[-1]).wday){
day.push("¡¡")
} #¤è¤¯È½¤é¤Ê¤¤¤¬½µ³ä¤¬¤Ç¤¤ë¤è¤¦¤Ë¥·¥Õ¥È¤é¤·¤¤
width = day.size if width_option == 'over'
if height != -1 then
width = (((day.size / 7) + 1) / height) * 7
end #¹â¤µ¤«¤é¤ÎÉýµÕ»»
end
while (day.size % width) != 0
day.push("¡¡")
end #1½µ°Ê¾å¥·¥Õ¥È¤Î¸å¤í¤Î¶õÇòÄɲÃ
height = day.size / width
week = 'off' if ((width % 7) != 0) && (height > 1)
#½ÐÎϾðÊó½èÍý###
#»Ïü¾ðÊó
str = "<table"
str << "class=\"calendar\"" if classflag == 'on'
str << ">\n"
#¥¿¥¤¥È¥ë¾ðÊó
if title == 'on' then
str << "#{tab}<tr>\n"
str << "#{tab}#{tab}<th colspan=\"#{len}\">"
if titlelink == 'on' then
if File::readable?(prevfile) then
str << "<a href=\"#{prevurl}\">#{prevtext}</a>¡¡"
# else
# str << "#{prevtext}¡¡" #¤ª¹¥¤ß¤Ë¤è¤Ã¤Æ¤Ï¥ê¥ó¥¯¤Ê¤·¤Çʸ»úÎó¤Î¤ßɽµ
end
end
str << "#{mo}"
if titlelink == 'on' then
if File::readable?(nextfile) then
str << "¡¡<a href=\"#{nexturl}\">#{nexttext}</a>"
# else
# str << "¡¡#{nexttext}" #¤ª¹¥¤ß¤Ë¤è¤Ã¤Æ¤Ï¥ê¥ó¥¯¤Ê¤·¤Çʸ»úÎó¤Î¤ßɽµ
end
end
str << "</th>\n"
str << "#{tab}</tr>\n"
end
#Íè·î¥ê¥ó¥¯¤Ï¥Æ¥¹¥È¤·¤Æ¤¤¤Ê¤¤¡Ê²áµîÆüµ¤Ë¥«¥ì¥ó¥À¡¼Ëä¤á¤ì¤Ê¤¤¥Ð¥°¡Ë
#ÍËÆü¾ðÊó
if week == 'on' then
str << "#{tab}<tr align=\"center\">\n"
for i in 0..(width - 1)
str << "#{tab}#{tab}<th#{wdaybg[(i + wday) % 7]}>"
str << "#{wdayname[(i + wday) % 7]}</th>\n"
end
str << "#{tab}</tr>\n"
end
#ÆüÉÕ¾ðÊó
while day.size != 0
str << "#{tab}<tr align=\"center\">\n"
for i in 0..(width - 1)
d = day.shift
dd = sprintf("%02d", d.to_i)
str << "#{tab}#{tab}<td"
if d =~ /\d+/ then
di = Time::local(y,m,d.to_i).wday
str << "#{wdaybg[di]}"
end
if @allDiarys.key?(thismonth + dd) then
str << "><a href=\"#{head}#{thismonth}#{@monthPartNames[dd.to_i]}.html##{dayhead}#{dd}\">#{d}</a></td>\n"
else
str << ">#{d}</td>\n"
end
end
str << "#{tab}</tr>\n"
end
str << "</table>\n"
return str
#debug - flag-message
#$stderr.puts "\n** check:#{width} #{height} #{title} #{titlelink} #{week} #{weekcolor} #{weekbgcolor}"
end
|