新規作成 | 管理 | 差分 | 検索 | FrontPage | ページ一覧 | 更新履歴 | RSS

PlugIn/カレンダー遊び - PlugInを駆使してカレンダーを作る

管理

PlugInを駆使してカレンダーを作る

Category:PlugInTest

基本のカレンダー…以下のPlugInの年/月に表示させたい年月を入れる

##(tabulate 7 'Su' 'Mo' 'Tu' 'We' 'Th' 'Fr' 'Sa' (repeat-times (day-of-week 年 月 1) '*') (from-to 1 (last-days 年 月)))

これでカレンダーが作れるようになりましたな

2003-06-29 (Sun) 11:25:38 うぉぉぉっ(喜)。-rica (PlugIn/新作投稿 で遊んでしまったので移動(笑))

2003-06-30 (Mon) 13:46:34 なぜコメントアウトしてあるんだろ? どれどれ‥‥‥

SuMoTuWeThFrSa
**12345
6789101112
13141516171819
20212223242526
2728293031

あ、できた。パチパチパチ。あとは各日付の数字に実際のページへのリンクをつけたいところですね。(^-^) --SHIMADA

カレンダーの作り方

管理
まず、1から末日(とりあえず30)まで順番に並んだリストにPlugIn/tabulateで7つ単位で表を作る

##(tabulate 7 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30)

いちいち1から末日1から末日(とりあえず30)まで毎回書くのはめんどくさいので、PlugIn/from-toで1から30までのリストをまとめて出力

##(tabulate 7 (from-to 1 30))

末日はとりあえず30にしているが、年/月から末日を出力するPlugIn/last-daysに置き換える

##(tabulate 7 (from-to 1 (last-days 2003 7)))

とりあえず、表の頭に曜日もつける(以降、2行以上にわたって書いているので、#を全角で書いてエスケープ)

##(tabulate 7 Su Mo Tu We Th Fr Sa
          (from-to 1 (last-days 2003 7)))

曜日は太字にしてみる

##(tabulate 7 (bold Su Mo Tu We Th Fr Sa)
          (from-to 1 (last-days 2003 7)))

さて、この時点でカレンダー風になったが、1日が必ず日曜になっているので、実際の曜日にずらす必要がある。2003-07-01は火曜なので、1から始まるリストの先頭に'*'要素を2つ並べるとずらすことができる。

##(tabulate 7 (bold Su Mo Tu We Th Fr Sa)
          '*' '*'
          (from-to 1 (last-days 2003 7)))

1日が月曜日なら'*'1つ、火曜日なら'*'2つ…土曜日なら'*'6つ、日曜は'*'がいらない(0つ)ということになる…これをPlugIn/repeat-timesでまとめる

##(tabulate 7 (bold Su Mo Tu We Th Fr Sa)
          (repeat-times 2 '*')
          (from-to 1 (last-days 2003 7)))

1日の曜日はPlugIn/day-of-weekで求められるので'*'を繰り返す回数をPlugIn/day-of-weekで自動化

##(tabulate 7 (bold Su Mo Tu We Th Fr Sa)
          (repeat-times (day-of-week 2003 7 1) '*')
          (from-to 1 (last-days 2003 7)))

で、できあがり

↑す…すごい…。感動。-rica

月曜始まりのカレンダー

管理
MoTuWeThFrSaSu
-1123456
78910111213
14151617181920
21222324252627
28293031

…月曜始まりのカレンダーが…できない…。なんだよ -1 って。っていうか、なんで上ので空いたところに * が入るのかが解らない…。あ、もう一つ。日付は二桁表示したいかもしれない。

こんな感じでしょうか?--SHIMADA

MoTuWeThFrSaSu
*123456
78910111213
14151617181920
21222324252627
28293031

おぉぉ(・o・)。ぱちぱちぱち。 …でもこんな複雑なの、絶対自分では書けない…。猫に小判が増えていく…(泣)。- rica 2003-06-30 (Mon) 20:12:39

解説

管理
2003-07-02 (Wed) 23:03:09 たろう

ポイントは'*'を繰り返す回数が日曜なら6回、月曜なら0回、火曜なら1回…と、0から6と曜日の対応をずらすことです。

(nth (day-of-week 2003 7 1) 6 0 1 2 3 4 5)と書くことで、本来、(day-of-week 2003 7 1)の値→2の解釈を
リスト(6 1 2 3 4 5)の「2番目の値」→1
と変えるわけですね。

今日の日付が太字になる今月のカレンダー

管理
…かなり苦労しました… たろう2003-07-02 (Wed) 20:45:34

SuMoTuWeThFrSa
******1
2345678
9101112131415
16171819202122
23242526272829
3031

#''''''#(tabulate 7 (bold Su Mo Tu We Th Fr Sa)
  (repeat-times (day-of-week (nth 0 (split - (today))) 
    (nth 1 (split - (today))) 1) '*')
  (from-to 1 (-1 (nth 2 (split - (today))))) 
  (bold (replace '^0' '' (nth 2 (split - (today))))) 
  (from-to (+1 (nth 2 (split - (today)))) 
    (last-days (nth 0 (split - (today))) (nth 1 (split - (today)))))
)

↑すごい…。-rica

解説

管理
2003-07-03 (Thu) 11:42:11 たろう

ポイントは2つあります。

・自動で年・月・日情報を取得
これは

##(nth 0 (split - (today))) で年情報
##(nth 1 (split - (today))) で月情報
##(nth 3 (split - (today))) で日情報

が取得できるので、それぞれ、年・月をカレンダーの該当部分に置き換えました。

・今日の日付だけ太字にする(予定)

変数を使う

管理

変数が使える新版では、下記のようにちょっとすっきり書けるようになりました。--SHIMADA

(tabulate 7   ; 7カラムの表を作る
         ;; 曜日を太字で表示
         (bold Su Mo Tu We Th Fr Sa)
         (let (($year (nth 0 (split - (today))))  ; 今年 $year
               ($month (nth 1 (split - (today)))) ; 今月 $month
               ($day (nth 2 (split - (today)))))  ; 今日 $day
           ;; 第一週、先月末日までを * で表示
           (repeat-times (day-of-week $year $month 1) '*')
           ;; 今月一日から昨日までを表示
           (from-to 1 (-1 $day))
           ;; 今日を太字で表示
           (bold (sprintf %d $day))
           ;; 明日から今月末日までを表示
           (from-to (+1 $day) (last-days $year $month))))

…す…すっきりなのか…。 この辺の常人にマネできない技は、貼って使えるテンプレートとして、そのうちまとめページを作ろう…。- rica 2003-07-06 (Sun) 03:22:27

セミコロン; で行末までがコメントになるって、ひょっとして言ってませんでしたっけ? --SHIMADA 2003-07-06 (Sun) 17:44:47

しらなかったよぉー(笑)…いや、「そろそろコメント付けれるようにしてほしいなぁ…でも、pluginの機能そのものじゃないし…」と思っていたんですよね - たろう 2003-07-06 (Sun) 17:54:34

このページの内容についての感想

管理
お名前: