Calendar: Difference between revisions

Line 3,144:
The procedures ''printCalendar'' handles formatting of large components and uses co-expressions to keep the formatting of week elements in each column synchronized. The procedure ''CalendarFormatWeek'' is a generator that returns heading elements, alignment spacing, and individual days.
<lang Icon>procedure main(A)
printCalendar(\A[1]|1969)
end
 
Line 3,162:
every i := 1 to cols do {
writes(center(mons[mon+i],24)) # header months
M[i] := create CalendarFormatWeek(1969year,mon + i) # formatting coexpr
}
write()
Line 3,173:
}
}
return
end
 
Line 3,178 ⟶ 3,179:
 
procedure CalendarFormatWeek(year,m) #: Format Week for Calendar
static D
initial D := [31,28,31,30,31,30,31,31,30,31,30,31]
 
every suspend "Su"|"Mo"|"Tu"|"We"|"Th"|"Fr"|"Sa" # header
every 1 to (d := (julian(m,1,year)+1)%7) do suspend "" # lead day alignment
every suspend 1 to D[m] do d +:= 1 # days
if m = 2 & IsLeapYear(year) then suspend (d +:= 1, 29) # LY adjustment
every d to (6*7) do suspend "" # trailer alignment
end</lang>
 
Anonymous user