Methods
A
B
G
M
N
O
P
S
T
U
Y
Constants
START = { 'cn' => Date::GREGORIAN, # China 'de' => 2342032, # Germany (protestant states) 'dk' => 2342032, # Denmark 'es' => 2299161, # Spain 'fi' => 2361390, # Finland 'fr' => 2299227, # France 'gb' => 2361222, # United Kingdom 'gr' => 2423868, # Greece 'hu' => 2301004, # Hungary 'it' => 2299161, # Italy 'jp' => Date::GREGORIAN, # Japan 'no' => 2342032, # Norway 'pl' => 2299161, # Poland 'pt' => 2299161, # Portugal 'ru' => 2421639, # Russia 'se' => 2361390, # Sweden 'us' => 2361222, # United States 'os' => Date::JULIAN, # (old style) 'ns' => Date::GREGORIAN # (new style) }
 
DEFAULT_START = 'gb'
 
Class Public methods
new()
# File sample/cal.rb, line 35
def initialize
  opt_j; opt_m; opt_t; opt_y; opt_c
end
Instance Public methods
addmon(y, m, n)
# File sample/cal.rb, line 105
def addmon(y, m, n)
  y, m = (y * 12 + (m - 1) + n).divmod(12)
  return y, m + 1
end
block(xs, n)
# File sample/cal.rb, line 93
def block(xs, n)
  stack(group(xs, n).collect{|ys| trans(ys).collect{|zs| zs.join('  ')}})
end
group(xs, n)
# File sample/cal.rb, line 81
def group(xs, n)
  (0..xs.size / n - 1).collect{|i| xs[i * n, n]}
end
monthly(y, m)
# File sample/cal.rb, line 101
def monthly(y, m)
  unlines(pict(y, m))
end
opt_c(arg=DEFAULT_START)
# File sample/cal.rb, line 44
def opt_c(arg=DEFAULT_START) @start = START[arg] end
opt_j(flag=false)
# File sample/cal.rb, line 39
def opt_j(flag=false) @opt_j = flag end
opt_m(flag=false)
# File sample/cal.rb, line 40
def opt_m(flag=false) @opt_m = flag end
opt_t(flag=false)
# File sample/cal.rb, line 41
def opt_t(flag=false) @opt_t = flag end
opt_y(flag=false)
# File sample/cal.rb, line 42
def opt_y(flag=false) @opt_y = flag end
pict(y, m)
# File sample/cal.rb, line 55
def pict(y, m)
  d = (1..31).detect{|x| Date.valid_date?(y, m, x, @start)}
  fi = Date.new(y, m, d, @start)
  fi -= (fi.jd - @k + 1) % 7

  ve  = (fi..fi +  6).collect{|cu|
    %w(S M Tu W Th F S)[cu.wday]
  }
  ve += (fi..fi + 41).collect{|cu|
    if cu.mon == m then cu.send(@da) end.to_s
  }

  ve = ve.collect{|e| e.rjust(@dw)}

  gr = group(ve, 7)
  gr = trans(gr) if @opt_t
  ta = gr.collect{|xs| xs.join(' ')}

  ca = %w(January February March April May June July
          August September October November December)[m - 1]
  ca = ca + ' ' + y.to_s if !@opt_y
  ca = ca.center(@mw)

  ta.unshift(ca)
end
print(y, m)
# File sample/cal.rb, line 115
def print(y, m)
  set_params
  if @opt_y then yearly(y) else monthly(y, m) end
end
set_params()
# File sample/cal.rb, line 46
def set_params
  @dw = if @opt_j then 3 else 2 end
  @mw = (@dw + 1) * 7 - 1
  @mn = if @opt_j then 2 else 3 end
  @tw = (@mw + 2) * @mn - 2
  @k  = if @opt_m then 1 else 0 end
  @da = if @opt_j then :yday else :mday end
end
stack(xs)
# File sample/cal.rb, line 89
def stack(xs)
  if xs.empty? then [] else xs[0] + stack(xs[1..-1]) end
end
trans(xs)
# File sample/cal.rb, line 85
def trans(xs)
  (0..xs[0].size - 1).collect{|i| xs.collect{|x| x[i]}}
end
unlines(xs)
# File sample/cal.rb, line 97
def unlines(xs)
  xs.collect{|x| x + "\n"}.join
end
yearly(y)
# File sample/cal.rb, line 110
def yearly(y)
  y.to_s.center(@tw) + "\n\n" +
    unlines(block((0..11).collect{|n| pict(*addmon(y, 1, n))}, @mn)) + "\n"
end