Wikipedia:Tworzenie szablonu dnia

Z Wikipedii, wolnej encyklopedii

Poniższy kod (język Ruby) tworzy szablon dnia w wersji używanej wcześniej na wikipedii. Obecną wersję szablonów lat utworzył bot napisany w języku Java, którego kod umieszczony jest tutaj.

#!/usr/bin/ruby

month,day = ARGV

unless month and day
print "Użycie: #{$0} <numer miesiąca> <numer dnia>\n"
exit
end

month = month.to_i
day = day.to_i

$month_size =
[ 0,
31,28,31,30,
31,30,31,31,
30,31,30,31
]
$month_names = [
'X',
'stycznia',
'lutego',
'marca',
'kwietnia',
'maja',
'czerwca',
'lipca',
'sierpnia',
'września',
'października',
'listopada',
'grudnia'
]

if month < 1 or month > 12
print "Nie ma takiego miesiąca: numer #{month}\n"
exit
end
if month == 2
if (day < 1 or day > 29) and month == 2
print "Nie ma takiego dnia: #{day} #{$month_names[month]}\n"
exit
end
else
if day < 1 or day > $month_size[month]
print "Nie ma takiego dnia: #{day} #{$month_names[month]}\n"
exit
end
end
$month_startday =
[ 0,
0,31,59,
90,120,151,
181,212,243,
273,304,334
]

def ordnumgenetiv(num)
ordnumgenetiv_ends = [
"tym", "wszym", "gim", "cim", "tym",
"tym", "tym", "mym", "mym", "tym"
]
if num == 0
raise "wrong number: 0"
elsif num % 100 == 0
"#{num}nym"
elsif num >= 9 and num <= 20
"#{num}tym"
end
"#{num}#{ordnumgenetiv_ends[num%10]}"
end

def dayno(day,month)
nr = $month_startday[month] + day
if month > 2
return "#{ordnumgenetiv(nr)} (w latach przestępnych #{ordnumgenetiv(nr+1)})"
else
return ordnumgenetiv(nr).to_s
end
end

def dayleft(day,month)
nr = $month_startday[month] + day
if month > 2
return (365-nr).to_s
elsif month == 2 and day == 29
return (366-nr).to_s
else
return "#{365-nr} (w latach przestępnych #{366-nr})"
end
end

def special(day,month)
if day==29 and month == 2
return "Występuje tylko w latach przestępnych."
else
return ""
end
end

def prevday(day,month)
if day-1 > 0
return "[[#{day-1} #{$month_names[month]}|Poprzedni dzień]]"
elsif month == 1
return "[[31 grudnia|Poprzedni dzień]]"
elsif month == 3
return "[[28 lutego|Poprzedni dzień w latach zwykłych]] [[29 lutego|Poprzedni dzień w latach przestępnych]]"
else
return "[[#{$month_size[month-1]} #{$month_names[month-1]}|Poprzedni dzień]]"
end
end

def nextday(day,month)
if day+1 <= $month_size[month]
return "[[#{day+1} #{$month_names[month]}|Następny dzień]]"
elsif month == 12
return "[[1 stycznia|Następny dzień]]"
elsif month == 2
return "[[29 lutego|Następny dzień w latach przestępnych]] [[1 marca|Następny dzień w latach zwykłych]]"
else
return "[[1 #{$month_names[month+1]}|Następny dzień]]"
end
end

print <<EOF
#{day} #{$month_names[month]} jest #{dayno(day,month)} dniem w
[[kalendarz gregoriański|kalendarzu gregoriańskim]],
do końca [[rok|roku]] pozostało #{dayleft(day,month)} dni.
#{special(day,month)}

'''Święta'''
*

'''Urodzili się:'''
*

'''Zmarli:'''
*

'''Wydarzenia:'''
* w Polsce
**
* na Świecie
**

[[styczeń]] - [[luty]] - [[marzec]] - [[kwiecień]] -
[[maj]] - [[czerwiec]] - [[lipiec]] - [[sierpień]] -
[[wrzesień]] - [[październik]] - [[listopad]] - [[grudzień]]

[[Kalendarium dzień po dniu]]

#{prevday(day,month)} #{nextday(day,month)}
EOF