]> git.eshelyaron.com Git - emacs.git/commitdiff
cal-tex.el fixes for calendar-week-start-day != 0.
authorGlenn Morris <rgm@gnu.org>
Sat, 10 Jul 2010 23:34:57 +0000 (16:34 -0700)
committerGlenn Morris <rgm@gnu.org>
Sat, 10 Jul 2010 23:34:57 +0000 (16:34 -0700)
* calendar/calendar.el (calendar-week-end-day): New function.
* calendar/cal-tex.el (cal-tex-cursor-month): Remove unused vars.
Respect calendar-week-start-day.  (Bug#6606)
(cal-tex-insert-day-names, cal-tex-insert-blank-days)
(cal-tex-insert-blank-days-at-end): Respect calendar-week-start-day.
(cal-tex-first-blank-p, cal-tex-last-blank-p): Simplify, and
respect calendar-week-start-day.

lisp/ChangeLog
lisp/calendar/cal-tex.el
lisp/calendar/calendar.el

index 9a04d8bbc7685ed8116cc7c5bcae328163137736..dec7a513927b2a6c7495a1b779f5a9516e4c05cb 100644 (file)
@@ -1,3 +1,13 @@
+2010-07-10  Glenn Morris  <rgm@gnu.org>
+
+       * calendar/calendar.el (calendar-week-end-day): New function.
+       * calendar/cal-tex.el (cal-tex-cursor-month): Remove unused vars.
+       Respect calendar-week-start-day.  (Bug#6606)
+       (cal-tex-insert-day-names, cal-tex-insert-blank-days)
+       (cal-tex-insert-blank-days-at-end): Respect calendar-week-start-day.
+       (cal-tex-first-blank-p, cal-tex-last-blank-p): Simplify, and
+       respect calendar-week-start-day.
+
 2010-07-10  Chong Yidong  <cyd@stupidchicken.com>
 
        * simple.el (use-region-p): Doc fix (Bug#6607).
index bbddc1ff38c38a964081bd132c8e8f0013b17c0b..46fb0869787fdcf477cc15e4cffd41232fffd4e1 100644 (file)
@@ -1,7 +1,7 @@
 ;;; cal-tex.el --- calendar functions for printing calendars with LaTeX
 
-;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-;;   Free Software Foundation, Inc.
+;; Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+;;   2009, 2010  Free Software Foundation, Inc.
 
 ;; Author: Steve Fisk <fisk@bowdoin.edu>
 ;;         Edward M. Reingold <reingold@cs.uiuc.edu>
@@ -507,6 +507,7 @@ indicates a buffer position to use instead of point."
          (year (calendar-extract-year date))
          (end-month month)
          (end-year year)
+         ;; FIXME -landscape sets cal-tex-which-days?
          (d1 (calendar-absolute-from-gregorian (list month 1 year)))
          (d2 (progn
                (calendar-increment-month end-month end-year (1- n))
@@ -515,8 +516,7 @@ indicates a buffer position to use instead of point."
                       (calendar-last-day-of-month end-month end-year)
                       end-year))))
          (diary-list (if cal-tex-diary (cal-tex-list-diary-entries d1 d2)))
-         (holidays (if cal-tex-holidays (cal-tex-list-holidays d1 d2)))
-         other-month other-year)
+         (holidays (if cal-tex-holidays (cal-tex-list-holidays d1 d2))))
     (cal-tex-insert-preamble (cal-tex-number-weeks month year n) nil "12pt")
     (if (> n 1)
         (cal-tex-cmd cal-tex-cal-multi-month)
@@ -526,14 +526,12 @@ indicates a buffer position to use instead of point."
     (cal-tex-nl ".2cm")
     (cal-tex-insert-blank-days month year cal-tex-day-prefix)
     (dotimes (idummy n)
-      (setq other-month month
-            other-year year)
       (cal-tex-insert-days month year diary-list holidays cal-tex-day-prefix)
-      (when (= 6 (mod (calendar-absolute-from-gregorian
-                       (list month
-                             (calendar-last-day-of-month month year)
-                             year))
-                      7))           ; last day of month was Saturday
+      (when (= (calendar-week-end-day)
+               (calendar-day-of-week
+                (list month
+                      (calendar-last-day-of-month month year)
+                      year))) ; last day of month was last day of week
         (cal-tex-hfill)
         (cal-tex-nl))
       (calendar-increment-month month year 1))
@@ -570,13 +568,14 @@ are included.  Each day is formatted using format DAY-FORMAT."
 
 (defun cal-tex-insert-day-names ()
   "Insert the names of the days at top of a monthly calendar."
-  (dotimes (i 7)
-    (if (memq i cal-tex-which-days)
-        (insert (format cal-tex-day-name-format
-                        (cal-tex-LaTeXify-string
-                         (aref calendar-day-name-array
-                               (mod (+ calendar-week-start-day i) 7))))))
-    (cal-tex-comment)))
+  (let (j)
+    (dotimes (i 7)
+      (if (memq (setq j (mod (+ calendar-week-start-day i) 7))
+                cal-tex-which-days)
+          (insert (format cal-tex-day-name-format
+                          (cal-tex-LaTeXify-string
+                           (aref calendar-day-name-array j)))))
+      (cal-tex-comment))))
 
 (defun cal-tex-insert-month-header (n month year end-month end-year)
   "Create a title for a calendar.
@@ -603,7 +602,7 @@ blank, no days are inserted."
                  calendar-week-start-day)
               7)))
         (dotimes (i blank-days)
-          (if (memq i cal-tex-which-days)
+          (if (memq (mod (+ calendar-week-start-day i) 7) cal-tex-which-days)
               (insert (format day-format " " " ") "{}{}{}{}%\n"))))))
 
 (defun cal-tex-insert-blank-days-at-end (month year day-format)
@@ -619,38 +618,37 @@ The entry is formatted using DAY-FORMAT."
                7))
              (i blank-days))
         (while (<= (setq i (1+ i)) 6)
-          (if (memq i cal-tex-which-days)
+          (if (memq (mod (+ calendar-week-start-day i) 7) cal-tex-which-days)
               (insert (format day-format "" "") "{}{}{}{}%\n"))))))
 
 (defun cal-tex-first-blank-p (month year)
   "Determine if any days of the first week will be printed.
 Return t if there will there be any days of the first week printed
 in the calendar starting in MONTH YEAR."
-  (let (any-days the-saturday)        ; the day of week of 1st Saturday
-    (dotimes (i 7)
-      (if (= 6 (calendar-day-of-week (list month (1+ i) year)))
-          (setq the-saturday (1+ i))))
-    (dotimes (i the-saturday)
-      (if (memq (calendar-day-of-week (list month (1+ i) year))
-                cal-tex-which-days)
-          (setq any-days t)))
-    any-days))
+  ;; Check days 1-7 of the month, until we find the last day of the week.
+  (catch 'found
+    (let (dow)
+      (dotimes (i 7)
+        (if (memq (setq dow (calendar-day-of-week (list month (1+ i) year)))
+                  cal-tex-which-days)
+            (throw 'found t)
+          (if (= dow (calendar-week-end-day)) (throw 'found nil)))))))
 
 (defun cal-tex-last-blank-p (month year)
   "Determine if any days of the last week will be printed.
 Return t if there will there be any days of the last week printed
 in the calendar starting in MONTH YEAR."
-  (let* ((last-day (calendar-last-day-of-month month year))
-         (i (- last-day 7))
-         any-days the-sunday)          ; the day of week of last Sunday
-    (while (<= (setq i (1+ i)) last-day)
-      (if (zerop (calendar-day-of-week (list month i year)))
-          (setq the-sunday i)))
-    (setq i (1- the-sunday))
-    (while (<= (setq i (1+ i)) last-day)
-      (if (memq (calendar-day-of-week (list month i year)) cal-tex-which-days)
-          (setq any-days t)))
-    any-days))
+  ;; Check backwards from the last day of the month, until we find the
+  ;; start of the last week in the month.
+  (catch 'found
+    (let ((last-day (calendar-last-day-of-month month year))
+          day dow)
+      (dotimes (i 7)
+        (if (memq (setq dow (calendar-day-of-week
+                             (list month (- last-day i) year)))
+                  cal-tex-which-days)
+            (throw 'found t)
+          (if (= dow calendar-week-start-day) (throw 'found nil)))))))
 
 (defun cal-tex-number-weeks (month year n)
   "Determine the number of weeks in a range of dates.
@@ -1499,7 +1497,7 @@ Optional string COLSEP gives the column separation (default \"1mm\")."
           (- (calendar-day-of-week (list month 1 year))
              calendar-week-start-day)
           7))
-        (last (calendar-last-day-of-month month year))
+        (lastcalendar-last-day-of-month month year))
         (str (concat "\\def\\" name "{\\hbox to" width "{%\n"
                      "\\vbox to" height "{%\n"
                      "\\vfil  \\hbox to" width "{%\n"
index d92942d003f48047a6d623aaeb3702b397b983b1..418f740bb83cf449a6eb931943496fd05d3add5c 100644 (file)
@@ -2226,6 +2226,10 @@ DATE is a list of the form (month day year).  A negative year is
 interpreted as BC; -1 being 1 BC, and so on."
   (mod (calendar-absolute-from-gregorian date) 7))
 
+(defun calendar-week-end-day ()
+  "Return the index (0 for Sunday, etc.) of the last day of the week."
+  (mod (+ calendar-week-start-day 6) 7))
+
 (defun calendar-unmark ()
   "Delete all diary/holiday marks/highlighting from the calendar."
   (interactive)