class Object
Constants
- PPTableViewEnterPressedNotification
- PPTableViewSelectionDidChangeNotification
- PPTableViewSelectionIsChangingNotification
Public Instance Methods
group(xs, n)
click to toggle source
# File lib/ppcurses/date/meta_month.rb, line 2 def group(xs, n) (0..xs.size / n - 1).collect { |i| xs[i * n, n] } # / This comment fixes a Visual Studio Code highlighting bug end
pict(day)
click to toggle source
This algorithm is based on ref/cal.rb by Tadayoshi Funaba
Differences:
-
Only supports a monthly calendar type; no yearly calendar.
-
Returns a secondary day position array that specifies the row
and column for each day of the month. Useful for highlighting a specific day. Example day position array for May 2015. The 1st of February occurs in the second row and the 16th column of the returned string calendar array day_pos = [ nil, [2,16], [2,19], [3,1], [3,4], [3,7], [3,10], [3,13], [3,16], [3,19], [4,0], [4,3], [4,6], [4,9], [4,12], [4,15], [4,18], [5,0], [5,3], [5,6], [5,9], [5,12], [5,15], [5,18], [6,0], [6,3], [6,6], [6,9], [6,12], [6,15], [6,18], [7,0] ]
-
Takes a Date object as initial parameter
-
K variable eliminated
-
Does not support the transformation option
# File lib/ppcurses/date/meta_month.rb, line 35 def pict(day) year = day.year month = day.month dw = 2 # Day width mw = (dw + 1) * 7 - 1 # Month width day_pos = [ nil ] # Create an array indexed by 1 by putting nil in slot zero. # First day of the month e.g. 2015-05-01 fi = Date.new(year, month, 1, Date::GREGORIAN) # Go backwards to the earliest closest day divisible by 7 date, e.g. 2015-04-26, # using the Julian day number and modulus. fi -= (fi.jd + 1) % 7 ve = (fi..fi + 6).collect{ |cu| %w(S M Tu W Th F S)[cu.wday] } row = 1 pos = -1 # Creates an array of values ["S", " M", ... "31"] ve += (fi..fi + 41).collect{ |cu| # of type Date pos += 1 # Needed for meta info if (cu.jd + 1) % 7 == 0 then row += 1 pos = 0 end if cu.mon == month then # -------- Save meta information in day_pos array i = pos * 3 if cu.mday < 10 then i += 1 end day_pos.push [row, i] # --------- End Meta info ------------------ cu.mday end.to_s } # adds padding based on day width "1" --> " 1" ve = ve.collect{|e| e.rjust(dw)} # Creates an array of arrays. 7 for the days in the week gr = group(ve, 7) # Converts inner arrays to strings ta = gr.collect{|xs| xs.join(' ')} # Adds month/year header to top ca = %w(January February March April May June July August September October November December)[month - 1] ca = ca + ' ' + year.to_s ca = ca.center(mw) ta.unshift(ca) return ta, day_pos end